网上下了几个STC不断电下载程序,验证通不过,于是反复调试,在普中开发板上验证通过。做成了头文件,方便使用。
普中开发板用普中自动下载软件,会自动断电然后上电,下载也很方便。为了学习STC不断电下载,从网上下了很多程序,在普中开发板上STC_ISP验证通不过,于是将网上的程序进行组合,形成了一的头文件,编译后代码大小90B原理:stcisp电脑端启动时,连续发送0x7f.串口检查下载命令到10次,单片机通过软件复位到引导区。使用普中开发板,STC90C516RD 11.059M晶体,程序加入包含头文件,主程序调用串口初始化函数。主程序中串口功能仍然可用。第一次使用要用普中自动下载软件下载,或STC_ISP_V483断电下载。以后用STC_ISP_V483最高最低都用4800波特率,可不断电下载
网上程序不可用的原因:可能ISP_contro=0Xe0;数值不是这个。 或者波特率不是4800,STC_ISP版本不对,欢迎大家实验。
单片机源程序如下:
- #ifndef _STCISP_
- #define __STCISP_H__
- sfr ISP_contro = 0xE7;
- unsigned char receiveData,n;
- void UsartConfiguration()
- {
- TMOD&=0x0F; //把TMOD高4位清0
- TMOD|=0x20; //将TMOD的M1位置1,设置成自动装入的8位定时器
- PCON=0X80; //波特率加倍
- TH1=0XF3; //计数器初始值设置,注意波特率是4800的
- TL1=0XF3;
- TR1=1; //打开计数器
- SCON=0x50; //10位异步收发,波特率由定时器控制,允许串口接收
- ES=1; //允许串口中断
- //**************************
- //***开全局中断设置****
- //串口接口UART设置了中断允许,此处要开全局中断
- EA=1; //开全局中断
- }
- void UART_SER (void) interrupt 4
-
- {
-
- if(RI == 1) //查看是否接收到数据
- {
- receiveData = SBUF; //读取数据
- RI = 0; //清除标志位
- if(receiveData == 0x7f)
- {
- if(n++>=10)
- {
- ISP_contro=0Xe0;
- //NOP(5);
- }
- }
-
- }
- }
- #endif
复制代码
- * 实 验 名 : STC不断电下载
- * 实验说明 : STC不断电下载,串口检查下载命令10次,单片机通过软件复位到引导区。
- * 连接方式 :
- * 注 意 : STC90C516RD 11.059M晶体,STC_ISP_V483下载最高最低都用4800波特率
- 使用时包含头文件,主程序调用串口初始化函数。
- *******************************************************************************/
- #include<reg51.h>
- #include"stc-isp.h"
- /*******************************************************************************
- * 函 数 名 : main
- * 函数功能 : 主函数
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void main()
- {
- UsartConfiguration();
- while(1)
- {
- //你的代码
- }
- }
复制代码
上图Keil代码工程下载:
OK-STC不断电下载头文件.7z
(8.45 KB, 下载次数: 9)
|