这个是在12T的8051上面用的模仿串口程序,合作22.1184M的晶振,加上6T的双倍速,波特率能够上38400……可是我以为和某些STC的芯片比,仍是差了一点,所以说,看官门看注释吧。敞开帧请发送没有接连低电平的字符,相似0×55,0xff,0x7f如此等等,假如有接连低电平很简单形成判别失误……这个程序能够用在STC的主动冷启动模块里(STC15F101系列就行,很廉价的,留意是八位装载形式趁便把T1X12关了~然后补偿能够趁便减小一点,趁便说一句,用AT89C51来做也行)。这个在24M/22.1184M/11.0592M均作业正常,11.0592能到9600,24能到38400。不过,我提个醒,假如看官们真拿这个做STC冷启的时分一定要约束波特率小于等于4800。要不然的话。串口正常通讯的时分,这个模块同步上去,把你的电断了,衔接掐了,然后估量你会拼命找程序是不是跑飞,糟蹋许多时刻,……
趁便说一句,这个程序也有别的一个用处,在晶振禁绝的时分依然能够和电脑以规范波特率通讯。办法便是规定好帧格局,然后上位机不断换波特率找到没有误码率的波特率,然后依据下位机的应对计算出下位机的时钟频率,这个是受了老妖ISP的启示才想到的~我们能够参阅我发布的另2篇文章:模仿串口主动丈量波特率的单片机程序http://www.51hei.com/mcu/1537.html,下面这个网页是用11.0592兆的晶振模仿串口接收发发送的现已经过自己测验http://www.51hei.com/mcu/1418.html
上代码:
/** 自适应波特率模仿串口程序,* BY 万致远@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){//发送启始位BYTE i=8;BYTE tmp=out;TR1=1;//开定时器TX1=0;WaitTF1();//发送8位数据位while(i--){TX1=(tmp&0x01); //先传低位tmp=tmp>>1;WaitTF1();}//发送校验位(无)//发送结束位TX1=1;WaitTF1();TR1=0;}