- #include <REGX52.H>
- #include "LCD1602.h"
- #include "Key.h"
- #include "AT24C02.h"
- #include "Delay.h"
- #include "string.h"
- #define Address(x) (0xA0|(x<<1))
-
- sfr ISP_CONTR = 0xE7;
- unsigned char Data[4];
-
- unsigned char reset_char[] = "@STCISP#"; // 复位字符
- unsigned char ReceiveData[20]; // 接收数据缓冲区
- unsigned char ReceiveIndex = 0; // 当前接收字节索引
-
- void UartInit() //4800bps@11.0592MHz
- {
- PCON &= 0x7F; //波特率不倍速
- SCON = 0x50; //8位数据,可变波特率
- TMOD &= 0x0F; //清除定时器1模式位
- TMOD |= 0x20; //设定定时器1为8位自动重装方式
- TL1 = 0xFA; //设定定时初值
- TH1 = 0xFA; //设定定时器重装值
- ET1 = 0; //禁止定时器1中断
- TR1 = 1; //启动定时器1
- //开启中断
- EA=1; //总中断控制
- ES=1; //串口中断
- }
-
- void Uart_SendByte(unsigned char Byte)
- {
- SBUF = Byte; // 向缓存器中写入内容
- while (TI == 0); // 等待发送完成
- TI = 0; // 清除发送中断标志
- }
-
- void Uart_Routine(void) interrupt 4 // 串口接收中断
- {
- unsigned char byte;
-
- //LCD_ShowString(2,1,"INTTERRUPT");
- if (RI) // 如果接收到数据
- {
- RI = 0; // 清除接收中断标志
- byte = SBUF; // 读取接收到的数据
-
- // 存入ReceiveData数组
- if (ReceiveIndex < sizeof(ReceiveData) - 1) // 确保不越界
- {
- ReceiveData[ReceiveIndex++] = byte;
- ReceiveData[ReceiveIndex] = '\0'; // 添加字符串结束符
- }
-
- // 检查是否接收到复位字符
- if (strcmp((const char *)ReceiveData, (const char *)reset_char) == 0)
- {
- ISP_CONTR = 0x60;
- LCD_ShowString(2, 1, "reset");
-
- ReceiveIndex = 0; // 重置接收索引
- }
- }
- }
-
- void main()
- {
- LCD_Init();
- UartInit();
-
- LCD_ShowString(1, 1, "Hello!");
-
- while (1)
- {
-
- }
- }
复制代码
试了一下,还真可以通过发送命令直接下载,但如果有一个新的程序下载进去,都必须把这段代码加上啊,有没有什么别的办法
|