![]() |
發布時間: 2017-12-5 14:30
正文摘要:兩個單片機之間的通信:在A機的4*4鍵盤(0——f)上按下一個按鍵,在B機數碼管上顯示相應的數據;在B機按下操作,在A機數碼管顯示相應的數據. 哪位大神能幫寫一下實現這個功能的匯編語言程序或者C語言程序嗎 ... |
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 ![]() |