左边的单片机是U3(发送机)U4是(接收机)
U3发送成功LED D1就会熄灭(闪烁)
U4接收成功LED D2也会熄灭(闪烁)
U4的P1端就会把U3发送过来的数据显示在八个LED上
不知道怎么回事接收不到数据 (但是U3好像能发送数据D1会闪烁)
U3代码
U3 代码文字版!!!
#include<reg51.h>
#include<intrins.h>
#define Nop() nop()
void DelayUs( int tu);
void DelayMs( int tm);
void SendByte(unsigned char dat);
void InitUATR(void);
sbit LED_1=P1^7;
sbit outdata=P2^7;
void DelayUs(int tu){ //延时US
while(--tu);
}
void DelayMs(int tm){ //延时MS
while(tm--){
DelayUs(248);
DelayUs(248);
}
}
void InitUATR(void){ //串行通信口初始化设置函数
SCON=0x50; //往SCON寄存器写入01010000 SM0=0 SM1=1 让串行通信口工作在方式1 REN=1允许接收数据
TMOD=0x20; //往TMOD寄存器写入00100000, M1=1 M0=0 让定时器T1工作在方式2(8位自动重装计数器)
TH1=0xfa; //往定时器T1的TH1寄存器写入重装值FAH,将串行同行波特率设为4.8kbit/s
TR1=1; //往TCON寄存器的TR1位写入1,启动定时器T1工作
PCON=0x00; //设置串行通信口的波特率保持不变(往PCON寄存器写入00h,SMOD 位=0 波特率保持不便)
EA=1; //IE寄存器开启总中断
ES=1; //IE寄存器打开串行通信口中断
}
void SendByte(unsigned char dat){ //发送字节函数
SBUF=dat;
while(TI==0);
if(TI==1){ //如果发送成功LED_1熄灭
LED_1=1;
}
TI=0; //手动清零中断TI=0
}
void main(void){
InitUATR(); //对串行通信口进行初始化设置
while(1){
LED_1=0;
DelayMs(100);
SendByte(0x00 ); //发送数据
DelayMs(100);
}
}
U4代码
U4文字代码
#include<reg51.h>
#define LEDP1 P1
void InitUATR(void);
unsigned char ReceiveByte();
sbit LED_3=P3^7;
void InitUATR(void){ //串行通信口初始化设置函数
SCON=0x50; //往SCON寄存器写入01010000 SM0=0 SM1=1 让串行通信口工作在方式1 REN=1允许接收数据
TMOD=0x20; //往TMOD寄存器写入00100000, M1=1 M0=0 让定时器T1工作在方式2(8位自动重装计数器)
TH1=0xfa; //往定时器T1的TH1寄存器写入重装值FAH,将串行同行波特率设为4.8kbit/s
TR1=1; //往TCON寄存器的TR1位写入1,启动定时器T1工作
PCON=0x00; //设置串行通信口的波特率保持不变(往PCON寄存器写入00h,SMOD 位=0 波特率保持不便)
EA=1; //IE寄存器开启总中断
ES=1; //IE寄存器打开串行通信口中断
}
unsigned char ReceiveByte(){ //接收函数
unsigned char dat;
if(RI==0){
LED_3=0;
}
while(RI==0);
if(RI==1){ //如果接收成功就将LED_3 D2熄灭
LED_3=1;
}
dat=SBUF;
return dat;
RI=0;
}
void main(void){
InitUATR();
while(1){
LEDP1=ReceiveByte();
}
}
更多回帖