//-----------------------------------------//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;}唉,串口之爭告一段落。我還是希望有硬件串口。
本文引用地址:http://m.butianyuan.cn/article/201611/323424.htm另外就是我實(shí)在不知道詭異的STC ISP串口是怎么在11.0592下面跑到115200的。本來加倍是溢出/16,那么它就算加倍的加倍,也就是/8……既然軟件模擬不可能實(shí)現(xiàn)如此高的波特率。而且6T模式能到230400,我就認(rèn)為他的SFR有串口四倍速選項(xiàng)。可惜老妖沒有拿出來吹,或者說他也不知道。ISP程序也讀不出。實(shí)在不知道是為啥……
順便說一句,STC15系列的片子只要RAM越界就復(fù)位……
順便提一個老妖的坑爹之處:
ISP定時常數(shù)不在表格中寫出來……
而是:
/*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
暈死……但是我為什么發(fā)現(xiàn)似乎0×83這個ISP常數(shù)到處可以用,1M的RC設(shè)置照樣0×83下……
本文轉(zhuǎn)自:http://www.rwzy.co.cc
評論