![]() |
發(fā)布時間: 2017-12-5 14:30
正文摘要:兩個單片機(jī)之間的通信:在A機(jī)的4*4鍵盤(0——f)上按下一個按鍵,在B機(jī)數(shù)碼管上顯示相應(yīng)的數(shù)據(jù);在B機(jī)按下操作,在A機(jī)數(shù)碼管顯示相應(yīng)的數(shù)據(jù). 哪位大神能幫寫一下實(shí)現(xiàn)這個功能的匯編語言程序或者C語言程序嗎 ... |
lianjinhui 發(fā)表于 2017-12-6 15:51 你就這么連上然后互相用uart通訊就行啊 |
HC6800-ES-V2.0 發(fā)表于 2017-12-6 08:49 我的電路圖兩個單片機(jī)有連接的,P3.0與P3.1交錯連接 |
我有試驗(yàn)成功的例子: 由于你的兩單片機(jī)要求一樣,硬件一樣,所以,只需要一個程序就可以了。兩個單片機(jī)都下載同樣的程序,功能也是一樣的,符合你的要求。 不過,從你的電路圖中,我沒有看到兩單片機(jī)連接的線路,你要注意哦。 我的程序?qū)?yīng)的電路如圖 ![]() ![]() 程序如下: /* 串口實(shí)驗(yàn):單片機(jī)與單片機(jī)之間的通訊,這是主機(jī)程序 */ #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()//主函數(shù) { 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 發(fā)表于 2017-12-5 17:20 你這個程序的仿真圖有嗎?可以發(fā)一下嗎?謝謝 |
跟你的不一樣 可以參考一下 ORG 0000H AJMP MAIN ORG 0023H AJMP INTRT ORG 0030H MAIN:MOV TMOD,#20H ;設(shè)置定時器1的工作方式 MOV TH1,#0E6H ;設(shè)置波特率1200 MOV TL1,#0E6H SETB TR1 ;啟動定時器1 MOV SCON,#50H ;設(shè)置串口工作方式 CLR RI ;清除標(biāo)志位 CLR TI ;清除標(biāo)志位 SETB ES ;開串口中斷 SETB EA ;開總中斷 LOOP:JNB P3.2,S3OK ;檢測按鍵是否按下 JNB P3.3,S4OK AJMP LOOP S3OK:MOV A,#0FBH ;點(diǎn)亮LED4 MOV SBUF,A JNB TI,$ ;等待發(fā)送完 SJMP LOOP2 S4OK:MOV A,#0F7H ;點(diǎn)亮LED5 MOV SBUF,A JNB TI,$ ;等待發(fā)送完 LOOP2:ACALL DELAY AJMP LOOP INTRT:PUSH ACC JNB TI,NEXT CLR TI AJMP OUT NEXT: CLR RI ;清標(biāo)志 MOV A,SBUF ;讀取接收的數(shù)據(jù) 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 ![]() |
Powered by 單片機(jī)教程網(wǎng)