lianjinhui 发表于 2017-12-6 15:51 你就这么连上然后互相用uart通讯就行啊 |
HC6800-ES-V2.0 发表于 2017-12-6 08:49 我的电路图两个单片机有连接的,P3.0与P3.1交错连接 |
|
我有试验成功的例子: 由于你的两单片机要求一样,硬件一样,所以,只需要一个程序就可以了。两个单片机都下载同样的程序,功能也是一样的,符合你的要求。 不过,从你的电路图中,我没有看到两单片机连接的线路,你要注意哦。 我的程序对应的电路如图
程序如下: /* 串口实验:单片机与单片机之间的通讯,这是主机程序 */ #include<reg51.h> #define LED P2 #define JP P1 unsigned char JZ; bit AJ; void UsartConfiguration(); void Delay10ms(unsigned int c); void KeyDown(void); void main()//主函数 { UsartConfiguration(); Delay10ms(10); while(1) { KeyDown(); if (AJ==1) { AJ=0; SBUF = JZ; while (!TI); TI = 0; } } } void UsartConfiguration() { SCON=0X50; TMOD=0X20; PCON=0X80; TH1=0XF3; TL1=0XF3; TR1=1; EA=1; ES=1; } void Delay10ms(unsigned int c)//延时10ms { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } void KeyDown(void) { unsigned char a=0; JP=0x0f;//测试列 if(JP!=0x0f) { Delay10ms(1); if(JP!=0x0f) { AJ=1; switch(JP) { case(0X07): JZ=0;break; case(0X0b): JZ=1;break; case(0X0d): JZ=2;break; case(0X0e): JZ=3;break; } JP=0Xf0;//测试行 switch(JP) { case(0X70): JZ=JZ;break; case(0Xb0): JZ=JZ+4;break; case(0Xd0): JZ=JZ+8;break; case(0Xe0): JZ=JZ+12;break; } for (a=0;(a<50)&&(JP!=0xf0);a++) { Delay10ms(1); } } } } void FSSZ(void) interrupt 4 { RI=0; LED=~SBUF; Delay10ms(1); } |
gss0418 发表于 2017-12-5 17:20 你这个程序的仿真图有吗?可以发一下吗?谢谢 |
|
跟你的不一样 可以参考一下 ORG 0000H AJMP MAIN ORG 0023H AJMP INTRT ORG 0030H MAIN:MOV TMOD,#20H ;设置定时器1的工作方式 MOV TH1,#0E6H ;设置波特率1200 MOV TL1,#0E6H SETB TR1 ;启动定时器1 MOV SCON,#50H ;设置串口工作方式 CLR RI ;清除标志位 CLR TI ;清除标志位 SETB ES ;开串口中断 SETB EA ;开总中断 LOOP:JNB P3.2,S3OK ;检测按键是否按下 JNB P3.3,S4OK AJMP LOOP S3OK:MOV A,#0FBH ;点亮LED4 MOV SBUF,A JNB TI,$ ;等待发送完 SJMP LOOP2 S4OK:MOV A,#0F7H ;点亮LED5 MOV SBUF,A JNB TI,$ ;等待发送完 LOOP2:ACALL DELAY AJMP LOOP INTRT:PUSH ACC JNB TI,NEXT CLR TI AJMP OUT NEXT: CLR RI ;清标志 MOV A,SBUF ;读取接收的数据 MOV P1,A ;送P1口 OUT: POP ACC RETI DELAY:MOV R3,#60 ; 延时0.6秒 D1: MOV R4,#20 D2: MOV R5,#248 DJNZ R5,$ DJNZ R4,D2 DJNZ R3,D1 RET END ![]() |