用51單片機普通io口來模擬串口通信的原理圖:
0.png (23.68 KB, 下載次數: 53)
下載附件
2016-10-9 22:51 上傳
0.png (10.9 KB, 下載次數: 65)
下載附件
2016-10-9 22:54 上傳
仿真工程文件及所有完整程序等資料下載地址:
http://www.zg4o1577.cn/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;
- }
復制代碼 |