NurfürdenpersönlichenfürStudien,Forschung,,由于串口不够,需要用IO口来模拟出一个串口。经过若干曲折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总结的部分贴出来。程序硬件平台:,STC单片机(兼容51)/****************************************************************在单片机上模拟了一个串口,****************************************************************/#include<>#include<>#include<>typedefunsignedcharuchar;inti;ucharcodeinfo[]={0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};sbitnewTXD=P2^1;//(){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=}voidWaitTF0(void){while(!TF0);TF0=0;TH0=0xFE;//定时器重装初值fosc==0x7F;//定时器重装初值fosc=//TH0=0xFD;//定时器重装初值fosc=//TL0=0x7F;//定时器重装初值fosc=}voidWByte(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;}voidSendata(){for(i=0;i<sizeof(info);i++)//外层循环,遍历数组{WByte(info[i]);}}voidmain(){UartInit();while(
单片机IO口模拟串口程序(发送 接收) 来自淘豆网m.daumloan.com转载请标明出处.