使用串口通信。具体功能描述如下:采用USART,波特率为9600,一个单片机发送数字,一个单片机接收,并把接收的数字用数码管显示。
单片机源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int //宏定义
- bit tt;
- uchar aa;
- void display(uchar aa);
- void delay(uint c);
- void init();
- sbit Ledshi = P2^0; //十位数码管使能端
- sbit Ledge = P2^1; //个位数码管使能端
- uchar ma[]=
- {
- 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f
- }; //编码0~9
- void main()
- {
- init();
- while(1)
- {
- while(tt)
- {
- display(aa);
- delay(20);
- }
- }
- }
- void init()
- {
- PCON &= 0x7F; //波特率不加倍
- TMOD=0x20; //定时器1工作方式2
- TH1=0xfd;
- TL1=0xfd; //给定时器定初值,设置波特率为9600
- TR1=1; //开启定时器1工作
- SCON=0x50; //允许串行口接收数据,设置串行口工作方式1
- EA=1;
- ES=1; //打开串行口中断
- ET1=0; //禁止定时器1中断
- }
- void display(uchar aa) //显示函数
- {
- uchar shi,ge;
- shi=aa/10; //取十位
- ge=aa%10; //取个位
- P0=ma[shi]; //送十位值
- P2=0xbf; //选择段选位置
- delay(5);
- P0=0; //数码管消影
- P2=0xff;
- P0=ma[ge]; //送个位值
- P2=0x7f; //选择段选位置
- delay(5);
- P0=0; //数码管消影
- P2=0xff;
- }
- void delay(uint c) //延时函数
- {
- uchar i,j;
- for(i=0;i<c;i++)
- for(j=0;j<110;j++);
- }
- void receive() interrupt 4
- {
- aa=SBUF;
- tt = 1; //接受一次后打开显示
- ES = 0; //关闭串行中断
- RI = 0; //清除串行接受标志位
- }
复制代码
所有资料51hei提供下载:
51单片机串口通信.zip
(18.6 KB, 下载次数: 154)
|