51 IO口模拟串口通讯C源程

来源:本站
导读:目前正在解读《51 IO口模拟串口通讯C源程》的相关信息,《51 IO口模拟串口通讯C源程》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51 IO口模拟串口通讯C源程》的详细说明。
简介:本文给大家分享了51 IO口模拟串口通讯C源程。

#include 51.h>sbit BT_SND =P1^0;sbit BT_REC =P1^1;/**********************************************IO 口模拟232通讯程序使用两种方式的C程序 占用定时器0**********************************************/#define MODE_QUICK#define F_TM F0#define TIMER0_ENABLE TL0=TH0; TR0=1;#define TIMER0_DISABLE TR0=0;sbit ACC0= ACC^0;sbit ACC1= ACC^1;sbit ACC2= ACC^2;sbit ACC3= ACC^3;sbit ACC4= ACC^4;sbit ACC5= ACC^5;sbit ACC6= ACC^6;sbit ACC7= ACC^7;void IntTimer0() interrupt 1{F_TM=1;}//发送一个字符void PSendChar(unsigned char inch){#ifdef MODE_QUICKACC=inch;F_TM=0;BT_SND=0; //start bitTIMER0_ENABLE; //启动while(!F_TM);BT_SND=ACC0; //先送出低位F_TM=0;while(!F_TM);BT_SND=ACC1;F_TM=0;while(!F_TM);BT_SND=ACC2;F_TM=0;while(!F_TM);BT_SND=ACC3;F_TM=0;while(!F_TM);BT_SND=ACC4;F_TM=0;while(!F_TM);BT_SND=ACC5;F_TM=0;while(!F_TM);BT_SND=ACC6;F_TM=0;while(!F_TM);BT_SND=ACC7;F_TM=0;while(!F_TM);BT_SND=1;F_TM=0;while(!F_TM);TIMER0_DISABLE; //停止timer#elseunsigned char ii;ii=0;F_TM=0;BT_SND=0; //start bitTIMER0_ENABLE; //启动while(!F_TM);while(ii<8){if(inch&1){BT_SND=1;}else{BT_SND=0;}F_TM=0;while(!F_TM);ii++;inch>>=1;}BT_SND=1;F_TM=0;while(!F_TM);#endifTIMER0_DISABLE; //停止timer}//接收一个字符unsigned char PGetChar(){#ifdef MODE_QUICKTIMER0_ENABLE;F_TM=0;while(!F_TM); //等过起始位ACC0=BT_REC;TL0=TH0;F_TM=0;while(!F_TM);ACC1=BT_REC;F_TM=0;while(!F_TM);ACC2=BT_REC;F_TM=0;while(!F_TM);ACC3=BT_REC;F_TM=0;while(!F_TM);ACC4=BT_REC;F_TM=0;while(!F_TM);ACC5=BT_REC;F_TM=0;while(!F_TM);ACC6=BT_REC;F_TM=0;while(!F_TM);ACC7=BT_REC;F_TM=0;while(!F_TM){if(BT_REC){break;}}TIMER0_DISABLE; //停止timerreturn ACC;#elseunsigned char rch,ii;TIMER0_ENABLE;F_TM=0;ii=0;rch=0;while(!F_TM); //等过起始位while(ii<8){rch>>=1;if(BT_REC){rch|=0x80;}ii++;F_TM=0;while(!F_TM);}F_TM=0;while(!F_TM){if(BT_REC){break;}}TIMER0_DISABLE; //停止timerreturn rch;#endif}//检查是不是有起始位bit StartBitOn(){return (BT_REC==0);}void main(){unsigned char gch;TMOD=0x22; /*定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装) */PCON=00;TR0=0; //在发送或接收才开始使用TF0=0;TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 执行的timer是//104.167*11.0592/12= 96TL0=TH0;ET0=1;EA=1;PSendChar(0x55);PSendChar(0xaa);PSendChar(0x00);PSendChar(0xff);while(1){if(StartBitOn()){gch=PGetChar();PSendChar(gch);}}}

提醒:《51 IO口模拟串口通讯C源程》最后刷新时间 2024-03-14 00:57:48,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51 IO口模拟串口通讯C源程》该内容的真实性请自行鉴别。