单片机在运行的时候能通过串口通讯更新内部的程序- /*------------------------------------------------------------------*/
- /* --- STC MCU International Limited -------------------------------*/
- /* --- STC IAP 系列单片机实现用户ISP 演示程序 ----------------------*/
- /* --- Mobile: -------------------------------------*/
- /* --- Fax: ----------------------------------------*/
- /* --- Tel: ----------------------------------------*/
- /* --- Web: www.STCMCU.com -----------------------------------------*/
- /* 如果要在程序中使用或者在文章中引用该程序,请在程序中或文章中注明 */
- /* 使用了宏晶科技的资料或程序 */
- /*------------------------------------------------------------------*/
- #include "reg51.h"
- #define FOSC 18432000L //系统时钟频率
- #define BAUD (256 - FOSC/32/115200) //定义串口波特率
- #define ISPPROGRAM 0xec00 //ISP下载程序入口地址
- /* 定义串口相关SFR */
- sfr AUXR = 0x8E; //波特率发生器控制寄存器
- sfr BRT = 0x9C; //波特率发生器定时器
- void (*IspProgram)() = ISPPROGRAM; //定义指针函数
- char cnt7f; //Isp_Check内部使用的变量
- void uart() interrupt 4 using 1 //串口中断服务程序
- {
- if (TI) TI = 0; //发送完成中断
- if (RI) //接收完成中断
- {
- if (SBUF == 0x7f)
- {
- cnt7f++;
- if (cnt7f >= 16)
- {
- IspProgram(); //调用下载模块(****重要语句****)
- }
- }
- else
- {
- cnt7f = 0;
- }
- RI = 0; //清接收完成标志
- }
- }
- void main()
- {
- SCON = 0x50; //定义串口模式为8bit可变,无校验位
- AUXR = 0x15; //波特率发生器12倍速,并启动波特率发生器定时器
- BRT = BAUD; //初始化波特率发生器定时器的定时初值
- ES = 1; //使能串口中断
- EA = 1; //打开全局中断开关
- while (1)
- {
- P1++;
- }
- }
- 这个就是了,下载一次后不用按复位键就能下载
复制代码 |