單片機(jī)在運(yùn)行的時(shí)候能通過串口通訊更新內(nèi)部的程序- /*------------------------------------------------------------------*/
- /* --- STC MCU International Limited -------------------------------*/
- /* --- STC IAP 系列單片機(jī)實(shí)現(xiàn)用戶ISP 演示程序 ----------------------*/
- /* --- Mobile: -------------------------------------*/
- /* --- Fax: ----------------------------------------*/
- /* --- Tel: ----------------------------------------*/
- /* --- Web: www.STCMCU.com -----------------------------------------*/
- /* 如果要在程序中使用或者在文章中引用該程序,請(qǐng)?jiān)诔绦蛑谢蛭恼轮凶⒚?nbsp; */
- /* 使用了宏晶科技的資料或程序 */
- /*------------------------------------------------------------------*/
- #include "reg51.h"
- #define FOSC 18432000L //系統(tǒng)時(shí)鐘頻率
- #define BAUD (256 - FOSC/32/115200) //定義串口波特率
- #define ISPPROGRAM 0xec00 //ISP下載程序入口地址
- /* 定義串口相關(guān)SFR */
- sfr AUXR = 0x8E; //波特率發(fā)生器控制寄存器
- sfr BRT = 0x9C; //波特率發(fā)生器定時(shí)器
- void (*IspProgram)() = ISPPROGRAM; //定義指針函數(shù)
- char cnt7f; //Isp_Check內(nèi)部使用的變量
- void uart() interrupt 4 using 1 //串口中斷服務(wù)程序
- {
- if (TI) TI = 0; //發(fā)送完成中斷
- if (RI) //接收完成中斷
- {
- if (SBUF == 0x7f)
- {
- cnt7f++;
- if (cnt7f >= 16)
- {
- IspProgram(); //調(diào)用下載模塊(****重要語(yǔ)句****)
- }
- }
- else
- {
- cnt7f = 0;
- }
- RI = 0; //清接收完成標(biāo)志
- }
- }
- void main()
- {
- SCON = 0x50; //定義串口模式為8bit可變,無(wú)校驗(yàn)位
- AUXR = 0x15; //波特率發(fā)生器12倍速,并啟動(dòng)波特率發(fā)生器定時(shí)器
- BRT = BAUD; //初始化波特率發(fā)生器定時(shí)器的定時(shí)初值
- ES = 1; //使能串口中斷
- EA = 1; //打開全局中斷開關(guān)
- while (1)
- {
- P1++;
- }
- }
- 這個(gè)就是了,下載一次后不用按復(fù)位鍵就能下載
復(fù)制代碼 |