找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3362|回復: 5
打印 上一主題 下一主題
收起左側(cè)

沒有T1的STC15W408AS,只能用定時器T2作波特率發(fā)生器來實現(xiàn)自動燒寫

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71233 發(fā)表于 2021-11-4 09:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
近日在嘗試用軟件方式來實現(xiàn)STC15W408AS的自動燒寫,結(jié)果被戲弄了。開始按慣性思路,使用T1作為串口1波特率發(fā)生器,結(jié)果毫無動靜,檢查了源碼,沒有發(fā)現(xiàn)什么問題。后來查看了手冊,才發(fā)現(xiàn)這芯片沒有T1(其實以前使用過這芯片,知道沒有T1,只是時間太久給忘了)。后來根據(jù)手冊,使用T2作波特率發(fā)生器,并將波特率設(shè)置為2400,成功實現(xiàn)了軟件方式自動燒寫。
        T2是一個16位自動重裝的定時器,只要設(shè)置一次初值即可。
具體的單片機程序如下:
sfr  T2H=0xD6;     // T2高八位
sfr  T2L=0xD7;     // T2代八位
sfr  IE2=0xDF;     //第2位為T2中斷允許位,只用串口通訊可以不用使用中斷
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;           //定時器2時鐘為Fosc/12,即12T
       AUXR |= 0x01;            //選擇定時器2為波特率發(fā)生器
       PCON &= 0x7F;          //波特率不倍速
       SCON = 0x50;             //8位數(shù)據(jù),可變波特率   
       T2L=T2_temp_L;        //T2為16位自動重裝定時器
       T2H=T2_temp_H;        //
       AUXR |= 0x10;            //啟動定時器2
       ES=1;       //打開串口中斷
       PS=1;       //串口中斷優(yōu)先      
       EA=1;       //打開總中斷  
       while(1)
       {                    
              //其他程序
              if(ge>10)IAP_CONTR= 0x60; //重啟并自動下載            
       }
}      
void UARTInterrupt( ) interrupt 4 //using 0
{
      ckval=SBUF;//接收到的串口數(shù)據(jù)
       RI=0;            
       if(ckval==0x7f)  {ge++;}   
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發(fā)
ID:262 發(fā)表于 2021-11-5 05:48 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:795427 發(fā)表于 2021-11-7 15:08 | 只看該作者
測試了并沒有實現(xiàn)所描述的免冷啟動,軟件復位自動下載功能。
回復

使用道具 舉報

地板
ID:624769 發(fā)表于 2021-11-7 16:42 | 只看該作者
perseverance51 發(fā)表于 2021-11-7 15:08
測試了并沒有實現(xiàn)所描述的免冷啟動,軟件復位自動下載功能。

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

所以,用起來是比較麻煩的,相比起來,如果調(diào)試過程中不需要用到串口(其實看他波特率2400應該也沒有用到串口),那么,直接開INT4中斷,然后如果要防止誤觸,INT4可以設(shè)置成需要累加10次,超過10次就 IAP_CONTR = 0x60; 會更簡單省力,因為對波特率完全沒有要求。
回復

使用道具 舉報

5#
ID:71233 發(fā)表于 2021-11-8 06:58 | 只看該作者
是的,我的程序沒有用到串口,所以將其設(shè)置為2400的波特率用來實現(xiàn)自動燒寫,平時使用,串口一般都設(shè)置為9600。
回復

使用道具 舉報

6#
ID:137736 發(fā)表于 2021-12-6 21:13 | 只看該作者
很好,自動下載,做成個頭文件更好。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表