当前位置:文档之家› 单片机双机通信报告

单片机双机通信报告

单片机双机通信接口应用专业班级:电信设计者:??指导老师:?设计时间:2011-11-28 ~12-9一、实验目的与要求:课程设计目的:1.通过课程设计巩固、深化和扩展理论知识与初步的专业技能,提高综合运用知识的能力,逐步增强实际工程训练。

2.培养正确的设计思想,掌握课程设计的主要内容、步骤和方法。

3.培养获取信息和综合处理信息的能力、文字和语言表达能力以及协作工作能力。

4.提高运用所学的理论知识和技能解决实际问题的能力及其基本工程素质。

课程设计要求:1、能够根据设计任务和指标要求,综合运用单片机课程中所学到的理论知识与实践技能独立完成一个设计课题,了解并掌握单片机系统设计的一般设计方法,具备初步的独立设计能力;。

2、根据课题需要选择参考书籍,查阅手册、图表等有关文献资料。

要求通过独立思考、深入钻研课程设计中所遇到的问题,培养自己分析、解决问题的能力。

3、学会撰写课程设计总结报告。

4、通过课程设计,逐步形成严肃认真、一丝不苟、实事求是的工作作风和科学态度,培养学生树立一定的全局观点。

5、在课程设计过程中,要做到团结协作。

意义:单片机应用系统设计是单片机课程的实践性教学环节,既涉及到许多理论知识(设计原理与方法),又强调系统设计能力的锻炼,培养创新设计的能力,养成一丝不苟的工作作风,为今后从事单片机行业的工作打下基础。

二、功能要求:单片机双机通信接口应用。

设计电路并编写程序,完成单片机与单片机之间的通信,甲机发送键盘输入的键号,乙机接收键号并在最右边的LED以十六进制的方式显示出来,通信协议:以方式2工作,波特率为2400b/s,信息格式为8个数据位,无奇偶校验位。

三、方案论证:1、总体设计方案:甲机扫描键盘获得键值,乙机显示键盘的值,使用4*4的矩阵键盘,通信时,当有键按下,甲机先发送0AAH,乙机受到0AAH后发送0BBH表示可以接受,甲机只有收到0BBH后才发送键值,以保证通信的畅通与准确,波特率为2400b/s,故时钟频率为f osc=2400*64或者2400*32,选择不加倍,PCON=00h,仿真时设置如图1-1;甲机:扫描键盘,无键按下发送0FFH,让乙机继续等待,重新扫描;有键按下,先发送0AAH,接受0BBH后发送键值。

乙机:接受数据,不等于0AAH,继续接收数据;等于0AAH,就发送0BBH,然后接受键值并显示键值。

图1-1系统框图设计如图1-2所示:图1-2四、系统硬件设计:(一)、所用的元器件及其常识:按钮,LED数码管,AT89C51芯片。

系统硬件设计如图1-3所示:图1-3 系统硬件设计说明:甲机的与乙机的GND相连,两机RXD与TXD相连,乙机利用P1做I/O口接LED。

五、软件设计:1、程序流程图如图所示:1-4为甲机程序框图,1-5为乙机程序框图图1-4图1-52、程序:(1),甲级的c程序:/*甲机发送,串口控制字为10010000b,1. 单片机双机通信接口应用。

设计电路并编写程序,完成单片机与单片机之间的通信,甲机发送键盘输入的键号,乙机接收键号并在最右边的LED以十六进制的方式显示出来,通信协议:以方式2工作,波特率为2400b/s,信息格式为8个数据位,无奇偶校验位SM2为0,无论TB8和RB8为0或者1,都可以接收,使数据只有八位*/#include<reg52.h>#define uchar unsigned charvoid delay(uchar); // 延时程序uchar scan_key(void); // 键扫描程序void main(void){uchar i=0,j=0,k,keyvalue;SCON=0x90; //串口初始化,方式2,允许接收PCON=0x00; //电源控制,波特率不加倍while(1){keyvalue=scan_key(); //获取键值if(keyvalue==0x0ff) //判断是否有键按下,有键按下为0H到00fH,无键按下为0FFH{ //发送0FF,使乙机继续等待SBUF=0x0ff;while(TI==0){;}TI=0;}else //有键按下{while(1){SBUF=0x0aa; //发送0AAHwhile(TI==0){;}TI=0;while(RI==0){;}RI=0;k=SBUF;if(k==0x0bb) //收到0BBH代表乙机允许接收,不是继续发送0AAH{SBUF=keyvalue; //发送键值while(TI==0);TI=0;break; //发送完后跳出此循环,继续获取键值}} } } }void delay(uchar n) //延时子程序{char j;while(n--)for(j=1;j<122;j++){;}}uchar scan_key(void) // 键盘扫描{uchar i,j,temp_i,temp_j,key_value=0x0ff;uchar a,b;temp_i=0x10;temp_j=0x01;P1=0x0f0;a=P1;if(a!=0x0f0) //判断有无键按下以及消抖{delay(10);if(a!=0x0f0)for(i=0;i<4;i++)for(j=0;j<4;j++){b=~(temp_i<<i);P1=b;a=P1;if((a&(temp_j<<j))==0)key_value=i*4+j;} }return key_value;}(2)甲机汇编程序:ORG 0000HLJMP MAINORG 0100HMAIN: CLR A ;主程序MOV SCON,#90H ;串口初始化MOV PCON,#00H ;波特率不加倍LOOP: LCALL SCAN_KEYLOOP1: CJNE R7,#0FFH,YOUJIAN ;有键按下转移 MOV SBUF,#0FFHWAIT1: JNB TI,WAIT1CLR TISJMP LOOPYOUJIAN: MOV SBUF,#0AAH ;有键按下,先发AA再发键值WAIT2: JNB TI,WAIT2CLR TIWAIT3: JNB RI,WAIT3CLR RIMOV R6,SBUFCJNE R6,#0BBH,YOUJIANMOV SBUF,R7WAIT4: JNB TI,WAIT4CLR TILJMP LOOPDELAY:MOV R5,#04H ;延时子程序,10ms LOOP5:MOV R6,#0FAHLOOP6:DJNZ R6,LOOP6DJNZ R5,LOOP5RETSCAN_KEY:MOV R7,#0FFH ;键扫描通过R7返回 MOV A,#0F0HMOV P1,AMOV A,P1XRL A,#0F0HJZ LOOP1LCALL DELAYMOV A,P1XRL A,#0F0HJZ LOOP1KEY1: MOV A,#0FEHMOV P1,AMOV A,P1CJNE A,#0EEH,S01MOV R7,#00HLJMP LOOP1S01: CJNE A,#0DEH,S02MOV R7,#04HLJMP LOOP1S02: CJNE A,#0BEH,S03MOV R7,#08HLJMP LOOP1S03: CJNE A,#7EH,KEY2MOV R7,#0CHLJMP LOOP1KEY2: MOV A,#0FDHMOV P1,AMOV A,P1CJNE A,#0EDH,S04MOV R7,#01HLJMP LOOP1S04: CJNE A,#0DDH,S05MOV R7,#05HLJMP LOOP1S05: CJNE A,#0BDH,S06MOV R7,#09HLJMP LOOP1S06: CJNE A,#7DH,KEY3MOV R7,#0DHLJMP LOOP1KEY3: MOV A,#0FBHMOV P1,AMOV A,P1CJNE A,#0EBH,S07MOV R7,#02HLJMP LOOP1S07: CJNE A,#0DBH,S08MOV R7,#06HLJMP LOOP1S08: CJNE A,#0BBH,S09MOV R7,#0AHLJMP LOOP1S09: CJNE A,#7BH,KEY4MOV R7,#0EHLJMP LOOP1KEY4: MOV A,#0F7HMOV P1,AMOV A,P1CJNE A,#0E7H,S10MOV R7,#03HLJMP LOOP1S10: CJNE A,#0D7H,S11MOV R7,#07HLJMP LOOP1S11: CJNE A,#0B7H,S12MOV R7,#0BHLJMP LOOP1S12: CJNE A,#77H,S13MOV R7,#0FHLJMP LOOP1S13:LJMP LOOP1 ; RETEND(3)乙机C语言程序:/*串口控制字为10010000b,方式2;foc=2400*32(或者2400*64)SM2为0,无论TB8和RB8为0或者1,都可以接收,使数据只有八位 */#include<reg52.h>#define uchar unsigned charUchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00} ;void main(void){uchar i,j,k,h;SCON=0x90; //串口初始化PCON=0x00; //电源控制字,波特率不加倍P1=0x00; //初始状态不显示while(1){REN=1;while(RI==0){;} //接收RI=0;k=SBUF;if(k==0x0aa) //判断接收的是不是0AAH ,不是继续接收{SBUF=0x0bb; //是,发送0BBHwhile(TI==0){;}TI=0;while(RI==0){;} //接收键值RI=0;i=SBUF;P1=table[i]; //显示for(j=0;j<254;j++) //延时{for(h=0;h<254;h++){;}} } } }(4)乙机汇编程序:ORG 0000HAJMP MAINORG 0100HMAIN:MOV SCON,#90H ;串口初始化 MOV PCON,#00HMOV P1,#00HLOOP:SETB RENWAIT1:JNB RI,WAIT1 ;接收发送信号 CLR RIMOV A,SBUFCJNE A,#0AAH,LOOPMOV SBUF,#0BBHWAIT2:JNB TI,WAIT2CLR TIWAIT3:JNB RI,WAIT3CLR RIMOV A,SBUFMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P1,AMOV R5,#01HLOOP1:MOV R6,#0FAHLOOP2:MOV R7,#0FAHLOOP3:DJNZ R7,LOOP3DJNZ R6,LOOP2DJNZ R5,LOOP1LCALL LOOPTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;显示码表END六、仿真图:如图 1-6所示图1-6仿真图七、心得体会:通过这次单片机应用系统设计,培养了我们的独立设计能力,实际分析问题和动手能力,,获取信息和综合处理信息的能力、文字和语言表达能力以及协作工作能力,养成理论联系实际和一丝不苟的工作作风,使我们更加充分的了解了课本上所学不到的知识,并能够应用于实践当中。

相关主题