前一阵一直在做单片机的程序, 由于串口不够,需要用IO口来模拟出一个串口。 经过若干曲折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总结的部分贴出来。程序硬件平台: ,STC单片机(兼容 51)/**************************************************************** 在单片机上模拟了一个串口,使用 ***************************************************************/#include <>#include <>#include <>typedef unsigned char uchar;int i;ucharcodeinfo[]={0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};sbitnewTXD=P2^1;//模拟串口的发送端设为 UartInit(){SCON=0x50; //SCON:serailmode1,8-bitUARTTMOD|=0x21; //T0 工作在方式1,十六位定时PCON|=0x80; //SMOD=1;TH0 = 0xFE; // 定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bpsfosc= =0x7F; // 定时器0初始值,延时 417us,目的是令模拟串口的波特率为2400bpsfosc=// TH0 =0xFD;// 定时器0初始值,延时417us,目的是令模拟串口的波特率2400bpsfosc=//TL0=0x7F;//定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bpsfosc=}void WaitTF0( void){while (!TF0);TF0=0;TH0=0xFE;// 定时器重装初值fosc==0x7F;// 定时器重装初值fosc=//TH0=0xFD;// 定时器重装初值fosc=//TL0=0x7F;// 定时器重装初值fosc=}void WByte(ucharinput){发送启始位ucharj=8;TR0=1;newTXD=(bit)0;WaitTF0();发送8位数据位while (j--){newTXD=(bit)(input&0x01);WaitTF0();input=input>>1;//先传低位}发送校验位(无)发送结束位newTXD=(bit)1;WaitTF0();TR0=0;}void Sendata(){for(i=0;i<sizeof(info);i++) //外层循环,遍历数组{WByte(info[i]);}}void main(){UartInit();while (1){Sendata();}}#################
单片机io口模拟串口程序(发送 接收) 来自淘豆网m.daumloan.com转载请标明出处.