用51单片机普通io口来模拟串口通信的原理图:
仿真工程文件及所有完整程序等资料下载地址:
http://www.51hei.com/bbs/dpj-56304-1.html
2个单片机的源程序:
- #include <AT89X51.H>
- #define uchar unsigned char
- #define RXD P1_0
- #define TXD P1_1
- //计数器初始化
- void S2INI(void)
- {
- TMOD |=0x02; //计数器0,方式2
- TH0=0xA0; //预值为256-96=140,十六进制A0
- TL0=TH0;
- TR0=1; //开始计数
- TF0=0;
- }
- //查询计数器溢出标志位
- void WaitTF0( void )
- {
- while(!TF0);
- TF0=0;
- }
- void WByte(uchar input)
- {
- //发送启始位
- uchar i=8;
- TR0=1;
- TXD=(bit)0;
- WaitTF0();
- //发送8位数据位
- while(i--)
- {
- TXD=(bit)(input&0x01); //先传低位
- WaitTF0();
- input=input>>1;
- }
- //发送校验位(无)
- //发送结束位
- TXD=(bit)1;
- WaitTF0();
- TR0=0;
- }
- void delay()
- {
- uchar i,j,k;
- for(i=100;i>0;i--)
- for(j=20;j>0;j--)
- for(k=248;k>0;k--);
- }
- void main(void)
- {
- S2INI();
- while(1)
- {
- WByte(0x7f);
- delay();
- WByte(0xff);
- delay();
- }
- }
复制代码- #include <reg51.h>
- //初始化串行口
- void csh()
- {
- SM0=0;
- SM1=1;
- REN=1;
- TI=0;
- RI=0;
- PCON=0;
- TH1=0xFD;
- TL1=0XFD;
- TMOD=0X20;
- EA=1;
- ET1=0;
- ES=1;
- TR1=1;
- }
- void main()
- {
- csh();
- while(1)
- {;}
- }
- void intrr() interrupt 4
- {
- char temp;
- temp=SBUF;
- P1=temp;
- RI=0;
- }
复制代码 |