新闻中心

EEPW首页>嵌入式系统>设计应用> 使用51的定时器模拟串口

使用51的定时器模拟串口

作者: 时间:2016-11-29 来源:网络 收藏
//-----------------------------------------//Timer interrupt routine for UARTvoid tm1() interrupt 3 using 1{if (RING){if (--RCNT == 0){RCNT = 3;//直到我看到了这里……//reset send baudrate counterif (--RBIT == 0){RBUF = RDAT; //save the data to RBUFRING = 0;//stop receiveREND = 1;//set receive completed flag}else//这TM不是坑爹吧{RDAT >>= 1;if (RXB) RDAT |= 0x80;//shift RX data to RX buffer}}}else if (!RXB){RING = 1;//set start receive flagRCNT = 4;//initial receive baudrate counterRBIT = 9;//initial receive bit number (8 data bits + 1 stop bit)}if (--TCNT == 0){TCNT = 3;//reset send baudrate counterif (TING)//judge whether sending{if (TBIT == 0){TXB = 0;//send start bitTDAT = TBUF; //load data from TBUF to TDATTBIT = 9;//initial send bit number (8 data bits + 1 stop bit)}else{TDAT >>= 1;//shift data to CYif (--TBIT == 0){TXB = 1;TING = 0;//stop sendTEND = 1;//set send completed flag}else{TXB = CY;//write CY to TX port}}}}}//-----------------------------------------//initial UART module variablevoid UART_INIT(){TING = 0;RING = 0;TEND = 1;REND = 0;TCNT = 0;RCNT = 0;}

唉,串口之争告一段落。我还是希望有硬件串口。

本文引用地址://m.amcfsurvey.com/article/201611/323424.htm

另外就是我实在不知道诡异的STC ISP串口是怎么在11.0592下面跑到115200的。本来加倍是溢出/16,那么它就算加倍的加倍,也就是/8……既然软件模拟不可能实现如此高的波特率。而且6T模式能到230400,我就认为他的SFR有串口四倍速选项。可惜老妖没有拿出来吹,或者说他也不知道。ISP程序也读不出。实在不知道是为啥……

顺便说一句,STC15系列的片子只要RAM越界就复位……

顺便提一个老妖的坑爹之处:

ISP定时常数不在表格中写出来……

而是:

/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*///#define ENABLE_IAP 0x80//if SYSCLK<30MHz//#define ENABLE_IAP 0x81//if SYSCLK<24MHz#define ENABLE_IAP 0x82//if SYSCLK<20MHz//#define ENABLE_IAP 0x83//if SYSCLK<12MHz//#define ENABLE_IAP 0x84//if SYSCLK<6MHz//#define ENABLE_IAP 0x85//if SYSCLK<3MHz//#define ENABLE_IAP 0x86//if SYSCLK<2MHz//#define ENABLE_IAP 0x87//if SYSCLK<1MHz


晕死……但是我为什么发现似乎0×83这个ISP常数到处可以用,1M的RC设置照样0×83下……

本文转自:http://www.rwzy.co.cc


上一页 1 2 下一页

关键词:51定时器模拟串

评论


技术专区

关闭