使用串口通信。具體功能描述如下:采用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, 下載次數: 157)
2019-11-17 17:32 上傳
點擊文件名下載附件
|