標(biāo)題: 沒(méi)有T1的STC15W408AS,只能用定時(shí)器T2作波特率發(fā)生器來(lái)實(shí)現(xiàn)自動(dòng)燒寫(xiě) [打印本頁(yè)]

作者: lmn2005    時(shí)間: 2021-11-4 09:29
標(biāo)題: 沒(méi)有T1的STC15W408AS,只能用定時(shí)器T2作波特率發(fā)生器來(lái)實(shí)現(xiàn)自動(dòng)燒寫(xiě)
近日在嘗試用軟件方式來(lái)實(shí)現(xiàn)STC15W408AS的自動(dòng)燒寫(xiě),結(jié)果被戲弄了。開(kāi)始按慣性思路,使用T1作為串口1波特率發(fā)生器,結(jié)果毫無(wú)動(dòng)靜,檢查了源碼,沒(méi)有發(fā)現(xiàn)什么問(wèn)題。后來(lái)查看了手冊(cè),才發(fā)現(xiàn)這芯片沒(méi)有T1(其實(shí)以前使用過(guò)這芯片,知道沒(méi)有T1,只是時(shí)間太久給忘了)。后來(lái)根據(jù)手冊(cè),使用T2作波特率發(fā)生器,并將波特率設(shè)置為2400,成功實(shí)現(xiàn)了軟件方式自動(dòng)燒寫(xiě)。
        T2是一個(gè)16位自動(dòng)重裝的定時(shí)器,只要設(shè)置一次初值即可。
具體的單片機(jī)程序如下:
sfr  T2H=0xD6;     // T2高八位
sfr  T2L=0xD7;     // T2代八位
sfr  IE2=0xDF;     //第2位為T(mén)2中斷允許位,只用串口通訊可以不用使用中斷
sfr  AUXR=0x8E;    //輔助寄存器
sfr  IAP_CONTR  = 0xc7;         //IAP控制寄存器
uchar   ge,ckval;
#define T2_temp_H  0xFF//2400bps
#define T2_temp_L   0xA0//
void main()
{
       AUXR &= 0xFB;           //定時(shí)器2時(shí)鐘為Fosc/12,即12T
       AUXR |= 0x01;            //選擇定時(shí)器2為波特率發(fā)生器
       PCON &= 0x7F;          //波特率不倍速
       SCON = 0x50;             //8位數(shù)據(jù),可變波特率   
       T2L=T2_temp_L;        //T2為16位自動(dòng)重裝定時(shí)器
       T2H=T2_temp_H;        //
       AUXR |= 0x10;            //啟動(dòng)定時(shí)器2
       ES=1;       //打開(kāi)串口中斷
       PS=1;       //串口中斷優(yōu)先      
       EA=1;       //打開(kāi)總中斷  
       while(1)
       {                    
              //其他程序
              if(ge>10)IAP_CONTR= 0x60; //重啟并自動(dòng)下載            
       }
}      
void UARTInterrupt( ) interrupt 4 //using 0
{
      ckval=SBUF;//接收到的串口數(shù)據(jù)
       RI=0;            
       if(ckval==0x7f)  {ge++;}   
}

作者: heicad    時(shí)間: 2021-11-5 05:48
好資料,51黑有你更精彩!!!
作者: perseverance51    時(shí)間: 2021-11-7 15:08
測(cè)試了并沒(méi)有實(shí)現(xiàn)所描述的免冷啟動(dòng),軟件復(fù)位自動(dòng)下載功能。
作者: 188610329    時(shí)間: 2021-11-7 16:42
perseverance51 發(fā)表于 2021-11-7 15:08
測(cè)試了并沒(méi)有實(shí)現(xiàn)所描述的免冷啟動(dòng),軟件復(fù)位自動(dòng)下載功能。

他這個(gè),波特率必須 2400, 就是說(shuō)你ISP上面,下載波特率 最高,最低,都必須2400(當(dāng)然,單片機(jī)也要設(shè)置2400波特率),不然,是不可能收到連續(xù)10次 0x7F的。

所以,用起來(lái)是比較麻煩的,相比起來(lái),如果調(diào)試過(guò)程中不需要用到串口(其實(shí)看他波特率2400應(yīng)該也沒(méi)有用到串口),那么,直接開(kāi)INT4中斷,然后如果要防止誤觸,INT4可以設(shè)置成需要累加10次,超過(guò)10次就 IAP_CONTR = 0x60; 會(huì)更簡(jiǎn)單省力,因?yàn)閷?duì)波特率完全沒(méi)有要求。
作者: lmn2005    時(shí)間: 2021-11-8 06:58
是的,我的程序沒(méi)有用到串口,所以將其設(shè)置為2400的波特率用來(lái)實(shí)現(xiàn)自動(dòng)燒寫(xiě),平時(shí)使用,串口一般都設(shè)置為9600。
作者: zmc419    時(shí)間: 2021-12-6 21:13
很好,自動(dòng)下載,做成個(gè)頭文件更好。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1