关于STC单片机的远程升级

关于STC单片机的远程升级

尽量写的通俗一点,有错误之处请不吝赐教。
我对单片机的理解:单片机是运算器+ram(失电后数据丢失)+rom(失电后数据依然保存)+外部设备(各种IO),它是以时序而工作的,并具有逻辑功能。可以用它(以底成本)实现复杂的任务。
学习单片机可以这样学习:
1.了解时序
2.了解RAM(单片机的寄存器),并关联相应IO(分类、分块)。
3.了解编程语句c或汇编。
4.综合逻辑功能(程式)及rom。
我们可以用以上知识,设计一个逻辑功能(应用在某种生产、服务或生活场景),当我们对逻辑功能进行维护时,要对rom进行重写,最简的方法是可以远程升级(也是比较复杂的方法,写成后可一劳永逸)。
从msc51到AT89C系列,最后选择了STC系列,原因有3,速度快,稳定,工作温度带宽大。
带入正题,STC单片机的远程升级,主要是利用了STC的ISP功能(每种系列带有ISP功能都可远程升级)。
STC的ISP功能使用串口1(rxd,txd,一般为P3^0,P3^1)作下载端口,也就是按STC的ISP协议写入主工作芯片的串口1,实现框图如下:

关于STC单片机的远程升级_第1张图片
注意事项:
1.ISP串口通讯是偶校验。
写法发送一个字节
void sendchr2(uchar s)
{
ACC=s; //(ACC累加器,会影响P位)
S2CON &=0xfd;
if§
{
S2CON=S2CON | 0x08;
}
else
{
S2CON =S2CON & 0xf7;
}
TB8 = P;
S2BUF=ACC;
while(!(S2CON & 0x02));
}
2.串口通讯用固定波特率最简,比如4800。
3.从单片机串口最好用中断方式**
附:ISP协议格式
包头 + 标识 + 数据包长度 + 命令 + 数据 + 校验和 + 包尾
起始帧:0x7F(只一个字节)
包头:0x46,0xB9,两字节
标识:PC机发送给MCU的为0x6A,MCU回应给PC的是0x68,标识后面还有一个字节固定为0x00,两字节
包长:为除包头外的数据包总长,一字节。
命令:一个字节。
数据:可以有也可以无,最多时有128个字节。
校验和:为两字节,除去包头其他数据校验和(字节相加的值)。
包尾:固定为0x16

你可能感兴趣的:(C51)