标准51单片机,比如STC89C52RC只有一个串口,当我们需要多串口通信时就有些捉襟见肘了,在不赠加成本的基础上最好的办法就是模拟一个串口;在这个项目中我们采用的单片机型号为STC12C5A60S2,晶振为11.0592MHZ,12倍频,同样适用于STC89C52RC,大家如果有兴趣可以自己下载源码应用,以下是工程源码:
- #include<stc12c5a60s2.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit RXD=P3^2;
- sbit TXD=P3^1;
- sbit led=P1^0;
- uchar buf;
- void delayms(unsigned int ms)
- {
- unsigned int De_Cnt;
- while( (ms--) != 0)
- {
- for(De_Cnt = 0; De_Cnt < 950; De_Cnt++);
- }
- }
- void T0_init(void)
- {
- TMOD|=0x01;
- TH0=0XFF;
- TL0=0XA0;
- IE|=0X81;
- TF0=0;
- IT0=1;
- TR1=1 ;
- }
- void waitTF0()
- {
- while(!TF0);
- TF0=0;
- TH0=0XFF;
- TL0=0XA0;
- }
- uchar readbyte()
- {
- uchar output=0;
- uchar i=8;
- TR0=1;
- TH0=0XFF;
- TL0=0XA0;
- TF0=0;
- waitTF0();
- while(i--)
- {
- output>>=1 ;
- if(RXD) output|=0x80;
- waitTF0();
- }
- TR0=0;
- return output;
- }
- void int0() interrupt 0
- {
- EX0=0;
- buf=readbyte();
- IE0=0;
- EX0=1;
- }
- void main()
- {
- T0_init();
- while(1)
- {
- delayms(300);
- if(buf=='A') led=0;
- else led=1;
- }
- }
复制代码
原理图: 无
仿真: 无
Keil代码:
程序.7z
(20.16 KB, 下载次数: 19)
|