亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
HC89S003F4單片機OTA升級代碼和說明
[打印本頁]
作者:
adtest
時間:
2021-8-19 08:44
標題:
HC89S003F4單片機OTA升級代碼和說明
原理
MCU在運行APP 程序時,等待上位發(fā)送的升級指令,接收指令后通過復(fù)位重讀代碼選項指令轉(zhuǎn)
至Bootloader程序區(qū),隨后 Bootloader程序接收更新程序數(shù)據(jù),通過IAP 的操作方式對 APP 程序區(qū)更
新。
單片機源程序如下:
#define ALLOCATE_EXTERN
#include "Include.h"
unsigned char xdata guc_UartReceiveBuf_a[135] = {0x00};//數(shù)據(jù)接收BUF
unsigned char guc_Uartcnt = 0; //接收數(shù)據(jù)計數(shù)
unsigned char guc_UartMode = 0; //當前模式
unsigned char guc_UartFlag = 0; //串口接收完成標志位
unsigned int gui_CRCValue = 0x00; //CRC校驗值
unsigned char code guc_Error_One_a[] = "Sorry,FH Error\0"; //數(shù)據(jù)幀頭錯誤
unsigned char code guc_Error_Two_a[] = "Sorry,CRC Error\0"; //CRC校驗錯誤
unsigned char code guc_Error_Three_a[] = "Sorry,Directive Error\0"; //指令錯誤
unsigned char code guc_OK_One_a[] = "Entering ISP Mode...\0"; //正在進入ISP模式
void main()
{
SystemInit();
while(1)
{
if(guc_UartMode == 0)
{
P1_0 = 0;
}
if(guc_UartFlag)
{
P1_0 = 1;
switch(guc_UartMode)
{
case 1 : //數(shù)據(jù)錯誤模式
UART_Send_Str(guc_Error_One_a); //發(fā)送錯誤提示
guc_UartMode = 0; //返回等待模式
guc_Uartcnt = 0; //計數(shù)值清0
memset(guc_UartReceiveBuf_a,0,135);//清除數(shù)據(jù)
guc_UartFlag = 0; //標志位清零
break;
case 2 : //CRC校驗
CRCC = 0x07; //CRC復(fù)位,LSB first,復(fù)位初值為0xFFFF
gui_CRCValue = CRC_CalcCRC(guc_UartReceiveBuf_a,guc_UartReceiveBuf_a[1]-2);
if(((gui_CRCValue/256)==guc_UartReceiveBuf_a[guc_UartReceiveBuf_a[1]-2])&&
((gui_CRCValue%256)==guc_UartReceiveBuf_a[guc_UartReceiveBuf_a[1]-1]))
{
guc_UartMode = 3; //CRC校驗成功
}
else{guc_UartMode = 4;} //CRC校驗錯誤
break;
case 3 : //握手模式
if(guc_UartReceiveBuf_a[2] == 0x01)
{
UART_Send_Str(guc_OK_One_a);
ResetReadOption();
}
else{guc_UartMode = 5;} //指令錯誤
break;
case 4 : //CRC校驗錯誤模式
UART_Send_Str(guc_Error_Two_a); //發(fā)送錯誤提示
guc_UartMode = 0; //返回等待模式
guc_Uartcnt = 0; //計數(shù)值清0
memset(guc_UartReceiveBuf_a,0,135);//清除數(shù)據(jù)
guc_UartFlag = 0; //標志位清零
break;
case 5 : //指令錯誤模式
UART_Send_Str(guc_Error_Three_a);//發(fā)送錯誤提示
guc_UartMode = 0; //返回等待模式
guc_Uartcnt = 0; //計數(shù)值清0
memset(guc_UartReceiveBuf_a,0,135);//清除數(shù)據(jù)
guc_UartFlag = 0; //標志位清零
break;
default :
guc_UartMode = 0; //返回等到模式
guc_Uartcnt = 0; //計數(shù)值清0
memset(guc_UartReceiveBuf_a,0,135);//清除數(shù)據(jù)
guc_UartFlag = 0; //標志位清零
break;
}
}
}
}
/***************************************************************************************
* @說明 UART1中斷服務(wù)函數(shù)
* @參數(shù) 無
* @返回值 無
* @注 無
***************************************************************************************/
void UART1_Rpt(void) interrupt UART1_VECTOR
{
if(SCON & 0x01) //判斷接收中斷標志位
{
guc_UartReceiveBuf_a[guc_Uartcnt++] = SBUF;//轉(zhuǎn)存8位串口接收數(shù)據(jù)
if((guc_UartReceiveBuf_a[0] == 0xAA)&&(guc_Uartcnt >= 2))
{
if(guc_Uartcnt >= guc_UartReceiveBuf_a[1])
{
SCON &=~ 0x10;
guc_UartMode = 2;
guc_UartFlag = 1;
}
}
else if(guc_UartReceiveBuf_a[0] != 0xAA)
{
SCON &=~ 0x10;
guc_UartFlag = 1;
guc_UartMode = 1;
}
SCON &=~ 0x01; //清除接收中斷標志位
}
}
1.png
(10.73 KB, 下載次數(shù): 60)
下載附件
2021-8-19 15:34 上傳
2.png
(8.73 KB, 下載次數(shù): 63)
下載附件
2021-8-19 15:34 上傳
代碼工程可以從51hei下載附件:
HC89S003F4 OTA.rar
(36.04 KB, 下載次數(shù): 14)
2021-8-19 08:39 上傳
點擊文件名下載附件
代碼
下載積分: 黑幣 -5
文檔:
OTA升級.pdf
(918.64 KB, 下載次數(shù): 23)
2021-8-19 08:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1