|
|
剛開(kāi)始學(xué)習(xí)C51單片機(jī),用STC進(jìn)行實(shí)驗(yàn),現(xiàn)在想用CH340C芯片和STC15W204S單片機(jī)diy一個(gè)免冷啟動(dòng)的自動(dòng)下載器。
擬用STC15W204S單片機(jī)檢測(cè)STC-ISP軟件點(diǎn)擊下載時(shí)候發(fā)出的0x7F串,檢測(cè)到足夠數(shù)量的0x7F后,單片機(jī)輸出控制信號(hào),用MOS管切斷下載器后面單片機(jī)的供電。
由于STC-ISP軟件是可以設(shè)置不同的最低波特率的,為了讓這個(gè)下載器能夠自適應(yīng)各種波特率設(shè)置值,到網(wǎng)上搜索了各種波特率自適應(yīng)方案的源碼,找到其中一段如下:
- void AutoUartBaud() //這個(gè)是變化的串口參數(shù)
- {
- ES=0;//關(guān)串口中斷
- switch(RSjishu)
- {
- case 0:
- T2L = 0x00; //設(shè)定定時(shí)初值//1200bps@22.1184MHz
- T2H = 0xEE; //設(shè)定定時(shí)初值
- break;
- case 1:
- T2L = 0x00; //設(shè)定定時(shí)初值//2400bps@22.1184MHz
- T2H = 0xF7; //設(shè)定定時(shí)初值
- break;
- case 2:
- T2L = 0x80; //設(shè)定定時(shí)初值//4800bps@22.1184MHz
- T2H = 0xFB; //設(shè)定定時(shí)初值
- break;
- case 3:
- T2L = 0xC0; //設(shè)定定時(shí)初值//9600bps@22.1184MHz
- T2H = 0xFD; //設(shè)定定時(shí)初值
- break;
- case 4:
- T2L = 0x80; //設(shè)定定時(shí)初值//14400bps@22.1184MHz
- T2H = 0xFE; //設(shè)定定時(shí)初值
- break;
- case 5:
- T2L = 0xE0; //設(shè)定定時(shí)初值//19200bps@22.1184MHz
- T2H = 0xFE; //設(shè)定定時(shí)初值
- break;
- case 6:
- T2L = 0x40; //設(shè)定定時(shí)初值//28800bps@22.1184MHz
- T2H = 0xFF; //設(shè)定定時(shí)初值
- break;
- case 7:
- T2L = 0x70; //設(shè)定定時(shí)初值//38400bps@22.1184MHz
- T2H = 0xFF; //設(shè)定定時(shí)初值
- break;
- case 8:
- T2L = 0xA0; //設(shè)定定時(shí)初值//57600bps@22.1184MHz
- T2H = 0xFF; //設(shè)定定時(shí)初值
- break;
- case 9:
- T2L = 0xD0; //設(shè)定定時(shí)初值//115200bps@22.1184MHz
- T2H = 0xFF; //設(shè)定定時(shí)初值
- break;
- }
- RSjishu++;
- if(RSjishu>9)RSjishu=0;
- delay(20);
- ES=1;//開(kāi)中斷
- }
復(fù)制代碼 原程序作者說(shuō)這程序是采用每0.1S改變一下串口的波特率,然后檢查是否有7F的值,如有就停止改變波特率。我沒(méi)看懂它是怎么檢查有沒(méi)有7F值的,然后怎么停下來(lái)不再改變波特率的,莫非是通過(guò)這個(gè)RSjishu變量來(lái)間接實(shí)現(xiàn)的?
初學(xué)者,可能問(wèn)題比較菜,請(qǐng)各位老師賜教。這只是我摘取的一段程序,原程序功能比較多,我沒(méi)有摘全。
|
|