电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

单片机IO口模拟串口程序(发送+接收)VIP专享VIP免费

单片机IO口模拟串口程序(发送+接收)_第1页
单片机IO口模拟串口程序(发送+接收)_第2页
单片机IO口模拟串口程序(发送+接收)_第3页
前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口。经过若干曲折并参考了一些现有的资料,基本上完成了。现在将完整的测试程序,以及其中一些需要总结的部分贴出来。程序硬件平台:11.0592M晶振,STC单片机(兼容51)/****************************************************************在单片机上模拟了一个串口,使用P2.1作为发送端*把单片机中存放的数据通过P2.1作为串口TXD发送出去***************************************************************/#include#include#includetypedefunsignedcharuchar;inti;ucharcodeinfo[]={0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55};sbitnewTXD=P2^1;//模拟串口的发送端设为P2.1voidUartInit(){SCON=0x50;//SCON:serailmode1,8-bitUARTTMOD|=0x21;//T0工作在方式1,十六位定时PCON|=0x80;//SMOD=1;TH0=0xFE;//定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bpsfosc=11.0592MHzTL0=0x7F;//定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bpsfosc=11.0592MHz//TH0=0xFD;//定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bpsfosc=18.432MHz//TL0=0x7F;//定时器0初始值,延时417us,目的是令模拟串口的波特率为2400bpsfosc=18.432MHz}voidWaitTF0(void){while(!TF0);TF0=0;TH0=0xFE;//定时器重装初值fosc=11.0592MHzTL0=0x7F;//定时器重装初值fosc=11.0592MHz//TH0=0xFD;//定时器重装初值fosc=18.432MHz//TL0=0x7F;//定时器重装初值fosc=18.432MHz}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#include#includetypedefunsignedcharuchar;//这里用来切换晶振频率,支持11.0592MHz和18.432MHz//#defineF18_432#defineF11_0592uchartmpbuf2[64]={0};//用来作为模拟串口接收数据的缓存struct{ucharrecv:6;//tmpbuf2数组下标,用来将模拟串口接收到的数据存放到tmpbuf2中ucharsend:6;//tmpbuf2数组下标,用来将tmpbuf2中的数据发送到串口}tmpbuf2_point={0,0};sbitnewRXD=P3^2;//模拟串口的接收端设为P3.2voidUartInit(){SCON=0x50;//SCON:serailmode1,8-bitUARTTMOD|=0x21;//TMOD:timer1,mode2,8-bitreload,自动装载预置数(自动将TH1送到TL1);T0工作在方式1,十六位定时PCON|=0x80;//SMOD=1;#ifdefF11_0592TH1=0xE8;//Baud:2400fosc=11.0592MHz2400bps为从串口接收数据的速率TL1=0xE8;//计数器初始值,fosc=11.0592MHz因为TH1一直往TL1送,所以这个初值的意义不大TH0=0xFF;//定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bpsfosc=11.0592MHzTL0=0xA0;//定时器0初始值,延时208us,目的是令模拟串口的波特率为9600bpsfosc=11.0592MHz#endif#ifdefF18_432TH1=0xD8;//Baud:2400fosc=18.432MHz2400bps为从串口接收数据的速率TL1=0xD8;//计数器初始值,fosc=18.432MHz因为TH1一直往TL1送,所以这个初值的意义不大TH0=0xFF;//定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bpsfosc=18.432MHzTL0=0x60;//定时器0初始值,延时104us,目的是令模拟串口的波特率为9600bpsfosc=18.432MHz#endifIE|=0x81;//中断允许总控制位EA=1;使能...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

文章天下+ 关注
实名认证
内容提供者

各种文档应有尽有

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部