单片机源程序如下:
- /******************************************************************
- 功能:采用USART串口通信,波特率为9600,一个单片机发送数字
- 一个单片机接收,并把接收的数字用数码管显示。接收!!!
- 作者:cs天涯
- ******************************************************************/
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- bit flag;
- uchar num;
- void display(uchar num);
- void delay(uint z);
- void init();
- uchar code table[]=
- {
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};//编码0~9AbCdEF
- void main()
- {
- init();
- while(1)
- {
- while(flag)
- {
- display(num);
- delay(5);
- }
- }
- }
- void init()
- {
- PCON &= 0x7F; //波特率不加倍
- TMOD=0x20; //定时器1工作方式2
- TH1=0xfd;
- TL1=0xfd; //给定时器定初值,设置波特率为9600
- TR1=1; //开启定时器1工作
- SCON=0x50;//0101 0000 允许串行口接收数据,设置串行口工作方式1
- EA=1;
- ES=1; //打开串行口中断
- ET1=0; //禁止定时器1中断
- }
- void display(uchar num)
- {
- uchar shi,ge;
- shi=num/10; //取十位
- ge=num%10; //取个位
- P0=table[shi]; //送十位值
- P2=0xbf;//1011 1111 //选择段选位置
- delay(5);
- P0=0; //数码管消影
- P2=0xff;
- P0=table[ge]; //送个位值
- P2=0x7f;//0111 1111 //选择段选位置
- delay(5);
- P0=0; //数码管消影
- P2=0xff;
- }
- void delay(uint z) //延时函数
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void receive() interrupt 4
- {
- num=SBUF;
- flag = 1; //接受一次后打开显示
- ES = 0; //关闭串行中断
- RI = 0; //清除串行接受标志位
- }
- 发送程序:
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar num; //=2939可以不要
- void init();
- void delay(int z);
- void send(uchar num); //声明子函数的时候要加分号
- void main()
- {
- init(); //调用子函数的时候要加分号
- while(1)
- {
- send(39); //发送函数
- delay(10); //发送后延时一下,保证发送频率不过快
- }
- }
- void init()
- {
- PCON&=0x7F; // 设置波特率不加倍
- TMOD=0x20; //设置定时器1工作方式 2
- TH1=0xfd;
- TL1=0xfd; //设定定时器1工作方式2的初值 (关计算还没讲) 波特率为9600
- TR1=1; //开定时器1,开启波特率发生器
- SM0=0;
- SM1=1; //设定串口通信工作方式1
- EA=1; //开总中断
- }
- void delay(int z) //晶振11.592.延时z毫秒
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void send(uchar num)
- {
- SBUF=num; //把发送的内容写进sbuf,自动发送 ,发送数据时TI为0,!0为1
- while(!TI); //!逻辑非,发送完数据,发送完数据时TI为1.!1为0,停止发送
- TI=0; //TI需要软件清零
- }
复制代码
所有资料51hei提供下载:
单片机串口通信.zip
(37.19 KB, 下载次数: 258)
|