新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 再次發(fā)模擬串口,51自適應(yīng)波特率

        再次發(fā)模擬串口,51自適應(yīng)波特率

        作者: 時(shí)間:2016-11-29 來(lái)源:網(wǎng)絡(luò) 收藏
        這個(gè)是在12T的8051上面用的模擬串口程序,配合22.1184M的晶振,加上6T的雙倍速,波特率可以上38400……但是我認(rèn)為和某些STC的芯片比,還是差了一點(diǎn),所以說(shuō),看官門(mén)看注釋吧。開(kāi)啟幀請(qǐng)發(fā)送沒(méi)有連續(xù)低電平的字符,類(lèi)似0×55,0xff,0x7f如此等等,如果有連續(xù)低電平很容易造成判斷失誤……這個(gè)程序可以用在STC的自動(dòng)冷啟動(dòng)模塊里(STC15F101系列就行,很便宜的,注意是八位裝載模式順便把T1X12關(guān)了~然后補(bǔ)償可以順便減小一點(diǎn),順便說(shuō)一句,用AT89C51來(lái)做也行)。這個(gè)在24M/22.1184M/11.0592M均工作正常,11.0592能到9600,24能到38400。不過(guò),我提個(gè)醒,如果看官們真拿這個(gè)做STC冷啟的時(shí)候一定要限制波特率小于等于4800。要不然的話。串口正常通訊的時(shí)候,這個(gè)模塊同步上去,把你的電斷了,連接掐了,然后估計(jì)你會(huì)拼命找程序是不是跑飛,浪費(fèi)很多時(shí)間,……

        順便說(shuō)一句,這個(gè)程序也有另外一個(gè)用途,在晶振不準(zhǔn)的時(shí)候仍然可以和電腦以標(biāo)準(zhǔn)波特率通訊。方法就是規(guī)定好幀格式,然后上位機(jī)不停換波特率找到?jīng)]有誤碼率的波特率,然后根據(jù)下位機(jī)的應(yīng)答計(jì)算出下位機(jī)的時(shí)鐘頻率,這個(gè)是受了老妖ISP的啟發(fā)才想到的~大家可以參考我發(fā)布的另2篇文章:模擬串口自動(dòng)測(cè)量波特率的單片機(jī)程序http://www.51hei.com/mcu/1537.html,下面這個(gè)網(wǎng)頁(yè)是用11.0592兆的晶振模擬串口接收發(fā)發(fā)送的已經(jīng)通過(guò)本人測(cè)試http://www.51hei.com/mcu/1418.html

        本文引用地址:http://www.104case.com/article/201611/323397.htm

        上代碼:

        /** 自適應(yīng)波特率模擬串口程序,* BY 萬(wàn)致遠(yuǎn)@rwzy.co.cc* CRYSTAL:任意*/#include #include #include #define MIS_0 0#define MIS_2 1#define MIS_4 2#define MIS_8 3 #define MIS_16 4 BYTE min_mode;//減倍模式void WaitTF1(){while(!TF1);TF1=0;if(min_mode==MIS_2){// /2while(!TF1);TF1=0;}else if(min_mode == MIS_4){// /4while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;}else if(min_mode == MIS_8){// /8while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;}else if(min_mode == MIS_16){// /16while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;while(!TF1);TF1=0;}}void WByte(BYTE out){//發(fā)送啟始位BYTE i=8;BYTE tmp=out;TR1=1;//開(kāi)定時(shí)器TX1=0;WaitTF1();//發(fā)送8位數(shù)據(jù)位while(i--){TX1=(tmp&0x01);     //先傳低位tmp=tmp>>1;WaitTF1();}//發(fā)送校驗(yàn)位(無(wú))//發(fā)送結(jié)束位TX1=1;WaitTF1();TR1=0;}    				   
        				
                    
                        
        			
        							
        上一頁(yè) 1 2 下一頁(yè)

        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 绥江县| 井研县| 鹤庆县| 仙桃市| 苏尼特右旗| 鄂托克旗| 禄丰县| 隆尧县| 乌拉特后旗| 绥阳县| 白沙| 潞城市| 靖安县| 宜州市| 儋州市| 开远市| 乳源| 北流市| 合阳县| 自贡市| 广丰县| 乌拉特前旗| 河西区| 达日县| 沈丘县| 锡林浩特市| 金溪县| 新竹县| 雅江县| 海安县| 南丹县| 阿鲁科尔沁旗| 黎城县| 和平县| 云龙县| 安塞县| 奉新县| 资溪县| 昌宁县| 施甸县| 石阡县|