设计内容:甲、乙两个单片机进行方式3串行通信。要求实现以下功能: 甲机有8个按键K0~K7,读取按键的不同状态,讲数据发送给乙机,从而控制8个LED灯(LED0~LED7)显示不同状态。 a) 甲机K0按下,乙机的LED0灯亮;甲机K1按下,乙机的LED1灯亮;……;甲机K6按下,乙机的LED6灯亮;甲机K7按下,乙机的LED7灯亮。如果甲机有多个按键按下去,对应乙机的多个灯亮。 b) 甲乙单片机都采用方式3进行串行通信。甲机采用方式3比方式1多1个可编程控制位TB8,该位作为奇偶校验位。乙机接收到的8位二进制数据有可能出错,需要进行奇偶校验。需校验接收到的RB8与自己计算所得的校验位是否一致。自我选择甲乙两机采用奇校验还是偶校验。报告中需要说明。 c) 乙机校验相同,接收数据;校验不同,拒绝接收数据。这里不要求甲机重新发送数据,只是等待甲机新数据发送过来。 d) 甲机连接虚拟仪器,显示发送的数据。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
- 甲机:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit p=PSW^0;
- void delay(uint i){
- uchar t;
- while(i--){
- for(t=0;t<120;t++);
- }
- }
- void main(){
- SCON=0xc0;
- PCON=0x00;
- TMOD=0x20;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1;
- P1=0xff;
- while(1){
- ACC=P1;
- TB8=p;
- SBUF=P1;
- while(!TI);
- TI=0;
- delay(200);
- }
- }
- 乙机:
- #include<reg51.h>
- sbit p=PSW^0;
- #define uchar unsigned char
- #define uint unsigned int
- void delay(uint i){
- uchar t;
- while(i--){
- for(t=0;t<120;t++);
- }
- }
- void main(){
- SCON=0xd0;
- PCON=0x00;
- TMOD=0x20;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1;
- P0=0x00;
- while(1){
- while(!RI);
- RI=0;
- ACC=SBUF;
- if(RB8==p){
- P0=SBUF;
- }
- delay(200);
- }
- }
复制代码
全部资料51hei下载地址:
51双机通信.rar
(31.81 KB, 下载次数: 81)
|