双机通信实验报告
实验三 双机通信试验
一、实验目的
UART 串行通信接口技术应用 二、实验实现的功能
用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。 三、系统硬件设计
四、系统软件设计 #include
#define uint unsigned int #define uchar unsigned char #define M 20
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit GREEN_A=P2^0; sbit YELLOW_A=P2^1; sbit RED_A=P2^2; sbit GREEN_B=P2^3; sbit YELLOW_B=P2^4; sbit RED_B=P2^5; sbit GREEN_C=P2^6; sbit YELLOW_C=P2^7;
sbit RED_C=P3^2; sbit GREEN_D=P3^3; sbit YELLOW_D=P3^4; sbit RED_D=P3^5; sbit W1=P0^0; sbit W2=P0^1; sbit W3=P0^2; sbit W4=P0^3; sbit H1=P3^6; sbit L1=P0^5; sbit H2=P3^7; sbit L2=P0^6; sbit L3=P0^7; sbit D9=P3^2;
sbit D10=P3^3; sbit D11=P3^4; sbit D12=P3^5;
uchar key,n=M,wei=0,j=0; uchar i=1;
void delay(uint i)
{ uint j,k;
for(j=2*i;j>0;j--) for(k=2*i;k>0;k--) ; }
void LED_display_0(uchar i) {
W4=0,P1=tab[i]; }
unsigned char keyscan() { H1=0;H2=0; L1=1;L2=1;L3=1;
if(L1==0||L2==0||L3==0) { delay(10); if(L1==0||L2==0||L3==0) {
H1=0;H2=1;
if(L1==0) key=1; else if(L2==0) key=2; else if(L3==0) key=3; H1=1;H2=0;
if(L1==0) key=4; else if(L2==0) key=5; else if(L3==0) key=6; H1=0;H2=0;
while(L1==0||L2==0||L3==0);
} }
return key; }
void uart_init() { TMOD=0X20; TH1=0XF4; TL1=0XF4; SCON=0Xd0; PCON=0X00; TR1=1; ES=1; EA=1; }
void main() { uart_init(); key=0; while(1) {
keyscan();if(key!=0) SBUF=key,delay(4),key=0; LED_display_0(i); } }
void inttle() interrupt 4 { if(TI) TI=0;
if(RI) i=SBUF,delay(4),RI=0; }
五、实验过程中遇到的问题及解决方法 问题1:如何判断哪个键按下并送出对应数字?
解决:利用矩阵式键盘扫描按键;将扫描值写入SBUF中发送数据。 问题2:如何接受数字并显示?
解决:运用中断,REN=1接收数据,并在数码管第一位显示。 问题3:上电后中断部分程序未执行?
解决:在串行口中断程序里,令RI=0; //清除串行接收中断标志位
指导老师签字:日期: