单片机接口设计上位机班级:电0901-2姓名:学号:20092368指导老师:组员:负责任务:主机硬件部分实习时间:2012.6.13—6.23一、设计要求1.定时呼叫下面每一个下位机(如5秒)应答则表示通,显示:地址_P(如1_P)不应答表示不通,显示:地址_E(如3_E)2.可通过按键决定反复呼叫某个地址3.通过按键控制要某地址的数据并显示(要数据命令为AAH)4.通过按键控制修改某地址的数据并显示(修改定值或指示电梯楼层命令为55H)5.显示下位机报警,如:1:FF二、硬件系统设计1、整体电路图主机仿真图:从机仿真图:2说明:1、单片机的引脚资源分配:18、19脚接12M晶振,9脚接按键复位,20脚接地,40脚接VCC,P1.0、P1.1、 P1.2、P1.3、P1.4、P1.5、P1.6接7个控制开关和按钮, P1.7接发光二极管,P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7接共阴极数码管字形码控制端,P2.0,、P2.1、 P2.2、 P2.3接数码管驱动电路75452,RXD和TXD接口用于通信接口与从机相连。
当从机程序运行时,显示从0号机到3号机反复查询,按住P1.4,2、主机反复查询从机,查询从机由P1.0和P1.1决定;按住P1.5,主机接收从机发送的数据,如1234并显示;按住P1.6,主机发送修改信息给从机,如1111并显示。
从机应答则显示1-PP,无应答则显示0-EE等。
3、整体实物电路图三、软件系统说明1、软件流程图说明:图中只画出了查询过程,还有定时5s后调用M0,并发送非法命令03H。
2、软件清单:1、工作寄存器分配:R0:用于发送数据寻址,初值:30HR1:用于接收数据寻址,初值:40HR2:用于存放通信地址R3:用于存放命令R4:用于存放数据传输个数R5:用于存放定时器中断次数R5、R6、R7:用于DELY延时2、I/O分配P0:数码管显示的字形码输出P1:接控制开关和按钮P2:数码管显示的片选P3:通行口P3.0、P3.13、程序代码主机程序部分ORG 0000HLJMP MAINORG 000BHLJMP T0ORG 0023HLJMP CUKORG 0030HMAIN:MOV TMOD,#21HMOV TH0,#4CHMOV TL0,#00HMOV R5,#100MOV TL1,#0A0HMOV TH1,#0A0HMOV PCON,#00HMOV SCON,#0D8H ;选择串行口方式3SETB TR1 ;开T1定时器,产生波特率SETB EACLR ESSETB ET0MOV 30H,#01HMOV 31H,#01HMOV 32H,#01HMOV 33H,#01HLCALL DSP1 ;开始显示横杠等待SETB TR0MOV R2,#0FFHMOV P1,#0FFH ;将P1口电平抬高,P1作输入MOV A,P1AA:JB ACC.4,BB ;查询P1.4口,判断是否反复呼叫CLR TR0ANL A,#0FHMOV R2,AMOV R3,#03HLCALL M0 ;调用通信子程序SETB TR0BB:MOV P1,#0FFHMOV A,P1JB ACC.5,CC ;查询P1.5,判断是否向下位机要数据CLR TR0ANL A,#0FHMOV R2,AMOV R3,#0AAHLCALL M0 ;调用通信子程序SETB TR0CC:MOV P1,#0FFHMOV A,P1JB ACC.6,AA ;查询P1.5,判断是否向下位机传数据CLR TR0ANL A,#0FHMOV R2,AMOV R3,#55HLCALL M0 ;调用通信子程序SETB TR0AJMP AAORG 0100HT0:MOV TL0,#00H ;T0中断服务程序MOV TH0,#4CHDJNZ R5,TMINC R2MOV R3,#03HMOV R4,#4LCALL M0 ;定时5S 后,调用通信子程序MOV R5,#100TM:RETICUK:JNB TI,C1 ;串行口中断服务程序CLR TIC1:MOV A,SBUFCJNE A,#0FFH,DD ;判断下位机发的数据是否为报警LCALL DSPF ;调用报警显示子程序DD:RETI;通信服务子程序M0:MOV R0,#30H ;初始化,传输数据和接收数据首地址MOV R1,#40HMOV R4,#4 ;存放4个数据MOV SCON,#0D8HM1:CJNE R2,#3,EE ;判断查询的下位机的数是否超过范围SJMP FFEE:JC FFMOV R2,#0FF:MOV A,R2MOV SBUF,A ;发送地址GG:LCALL DELY1 ;延时JNB RI,M2 ;判断是否能正常通信CLR RIMOV A,SBUF ;判断下位机是否收到XRL A,R2JZ M3 ;建立一对一连接M2:LCALL FALL ;连接失败,显示EELCALL DSP1 ;显示横杆等待SETB TB8SJMP BACKM3:LCALL SUCC ;连接成功,显示PPLCALL DSP1 ;显示横杆等待CLR TB8CLR TB8MOV SBUF,R3 ;发送指令JNB RI,$CLR RIMOV A,SBUF ;接收下位机状态字JNB ACC.2,AELCALL DSPFLCALL DELYRETAE:JNB ACC.7,M4 ;下位机收到的命令是否合法SJMP BACKM4:CJNE R3,#55H,M5JNB ACC.0,M2 ;下位机接收收是否就绪MOV R0,#30HMOV R4,#4TRAN:MOV SBUF,@R0 ;主机向下位机发送数据JNB TI,$CLR TILCALL DELYINC R0DJNZ R4,TRANMOV R0,#30HLCALL OUT ;调用OUT发送数据显示LCALL DSP1RETM5:JNB ACC.1,M2 ;下位机发送是否就绪MOV R1,#40HMOV R4,#4RECE:JNB RI,$ ;主机接收数据CLR RIMOV A,SBUFMOV @R1,AINC R1DJNZ R4,RECEMOV R1,#40HLCALL IN ;调用IN 接收数据显示LCALL DSP1BACK:RETDSP1:MOV P2,#00000000B ;显示等待横杆子程序MOV P0,#0BFHLCALL DELYRETDSPF: mov 60h,#0F0hya1: MOV DPTR,#TABL ;显示报警错误子程序MOV A,R2MOVC A,@A+DPTRMOV P0,AMOV P2,#11111110BLCALL DELYMOV P2,#11111101BMOV P0,#0BFHLCALL DELYMOV P2,#11110011BMOV P0,#8EHLCALL DELYdjnz 60h,ya1RETSUCC: mov 60h,#0F0hya2: MOV DPTR,#TABL ;显示连接成功主程序MOV A,R2MOVC A,@A+DPTRMOV P0,AMOV P2,#11111110BLCALL DELYMOV P2,#11111101BMOV P0,#0BFHLCALL DELYMOV P2,#11110011BMOV P0,#8CHLCALL DELYdjnz 60h,ya2RETFALL: mov 60h,#40hya3:MOV DPTR,#TABL ;显示连接失败子程序MOV A,R2MOVC A,@A+DPTRMOV P0,AMOV P2,#11111110BLCALL DELYMOV P2,#11111101BMOV P0,#0BFHLCALL DELYMOV P2,#11110011BMOV P0,#86HLCALL DELYdjnz 60h,ya3RETOUT: mov 60h,#0a0hya4: MOV DPTR,#TABL ;显示发送数据子程序MOV A,@R0MOVC A,@A+DPTRMOV P0,AMOV P2,#11111110BLCALL DELYINC R0MOV A,@R0MOV DPTR,#TABLMOVC A,@A+DPTRMOV P0,AMOV P2,#11111101BLCALL DELYINC R0MOV A,@R0MOV DPTR,#TABLMOVC A,@A+DPTRMOV P0,AMOV P2,#11111011BLCALL DELY2INC R0MOV A,@R0MOV DPTR,#TABLMOVC A,@A+DPTRMOV P0,AMOV P2,#11110111BLCALL DELYmov r0,#30hdjnz 60h,ya4RETIN:mov 60h,#0a0hya5: MOV DPTR,#TABL ;显示接收数据子程序MOV A,@R1MOVC A,@A+DPTRMOV P0,AMOV P2,#11111110BLCALL DELYINC R1MOV A,@R1MOV DPTR,#TABLMOVC A,@A+DPTRMOV P0,AMOV P2,#11111101BLCALL DELYINC R1MOV A,@R1MOV DPTR,#TABLMOVC A,@A+DPTRMOV P0,AMOV P2,#11111011BLCALL DELYINC R1MOV A,@R1MOV DPTR,#TABLMOVC A,@A+DPTRMOV P0,AMOV P2,#11110111BLCALL DELYmov r1,#40hdjnz 60h,ya5BACK1: RETDEL Y:MOV R6,#0aH ;延时子程序DELYDY:MOV R7,#0aaHDJNZ R7,$DJNZ R6,DYRETDELY2:MOV R6,#20H ;延时子程序DELY2DY2:MOV R7,#06aHDJNZ R7,$DJNZ R6,DY2RETDELY1:MOV 50H,#0FFH ;延时子程序DELY1XX:MOV 51H,#0FFHDJNZ 51H,$DJNZ 50H,XXSETB 00HRETTABL:DB 0C0H 0F9H 0A4H 0B0H 99H 92H 82H 0F8H 80H 90HEN从机程序部分:ORG 0000HSJMP MAINORG 0003HAJMP INT0ORG 0030HMAIN:MOV TMOD,#21HMOV SCON,#0D8HMOV TH1,#0CCHMOV TL1,#0CCHMOV 40H,#01HMOV 41H,#02HMOV 42H,#03HMOV 43H,#04HSETB TR1SETB EX0SETB IT0SETB EACLR ESSSIO:JNB RI,$CLR RIMOV A,SBUFMOV P1,AXRL A,#01HJZ AASJMP SSIOAA: MOV A,#01HMOV SBUF,AJNB TI,$CLR TIJNB RI,$CLR RICLR CMOV A,SBUFCJNE A,#55H,CASE1MOV A,#01HMOV SBUF,AJNB TI,$CLR TIJNB RI,$CLR RIMOV R0,#40HMOV R6,#4REC: MOV A,@R0MOV A,SBUFJNB RI,$CLR RIINC R0DJNZ R6,RECSJMP SSIOCASE1:JC CASE2MOV A,#02HMOV SBUF,AJNB TI,$CLR TIMOV R0,#40HMOV R7,#4SENT: MOV A,@R0MOV SBUF,AJNB TI,$CLR TIINC R0DJNZ R7,SENTSJMP SSIOCASE2:MOV A,#80HMOV SBUF,AJNB TI,$CLR TISJMP SSIOINT0:MOV A,#04HMOV SBUF,AJNB TI,$CLR TIRETI四、收获十天的课程设计在忙忙碌碌中结束了,说实话,我在这次课程设计中出的力并不多,但还是收获了很多。