
系统执行软件源程序代码.docx
16页系统执行软件源程序代码Prepared on 22 November 2020附录一系统执行软件源程序代一、 系统多机通信从机源程序代码***Lu Bo*ORG 0000HSJMP MAINORG 0023H ;串行口中断入口SJMP SJCS 主程序 MAIN: SLAVE EQU 12 DK EQUMOV SCON,#0B0HMOV TMOD,#20HMOV TL1,#0FDHMOV TH1,#0FDHMOV IE,#90HSETB TR1 LCALL WDCJSETB RS1CLR RS0LCALL BCDZHLCALL DISPLAYCLR RS1CLR RS0SJMP MAIN 串行口中断服务子程序 SJCS: CLR RI PUSH A PUSH PSW MOV A,SBUF XRL A,#SLAVE JZ SJCS0SJCS1: SETB SM2 POP PSW POP A RETISJCS0: CLR SM2MOV SBUF,#SLAVEJNB TI,$CLR TIJNB RI,$CLR RIMOV A,SBUFXRL A,#11HJZ SJCS2SJMP SJCS1SJCS2: MOV A,25HADD A,#1MOV SBUF,AJNB TI,$CLR TIMOV 22H,#00HSJMP SJCS1 18B20 温度采集子程序 WDCJ: MOV SP,#60HLCALL GET_TEMPMOV A,21HMOV C,00HRRC AMOV C,01HRRC AMOV C,02HRRC AMOV C,03HRRC AMOV 21H,AMOV 25H,ALCALL BCDZHLCALL DISPLAYAJMP MAIN 18B20 温度采集时序子程序 GET_TEMP: CLR EALCALL INTMOV A,#0CCHLCALL WRITEMOV A,#44HLCALL WRITELCALL INTMOV A,#0CCHLCALL WRITEMOV A,#0BEHLCALL WRITELCALL READMOV 21H,ALCALL READMOV 20H,ASETB EARET 18B20初始化子程序 INT: CLR EAL0: CLR DKMOV R2,#200L1: CLR DKDJNZ R2,L1SETB DKMOV R2,#30L4: DJNZ R2,L4CLR CORL C,DKJC L0MOV R6,#80L5: ORL C,DKJC L3DJNZ R6,L5SJMP L0L3: MOV R2,#200L2: DJNZ R2,L2RET 18B20 写命令子程序 WRITE: CLR EA MOV R3,#8WR1: SETB DKMOV R4,#8 RRC A CLR DKWR2: DJNZ R4,WR2 MOV DK,C MOV R4,#20WR3: DJNZ R4,WR3DJNZ R3,WR1SETB DKRET 18B20读数据子程序READ: CLR EA MOV R6,#8RE1: CLR DKMOV R4,#4NOPSETB DKRE2: DJNZ R4,RE2MOV C,DKRRC AMOV R5,#30RE3: DJNZ R5,RE3DJNZ R6,RE1SETB DKRET 八为十六转十进制子程序 BCDZH: INC 21H MOV A,21H MOV 30H,#12 JNB ,BCD0 MOV 30H,#11 CPL A ADD A,#1BCD0: MOV R1,#00HMOV R2,#00H CLR CBCD1: SUBB A,#64H JC BCD2INC R1 SJMP BCD1BCD2: ADD A,#64HBCD3: SUBB A,#0AH JC BCD4 INC R2SJMP BCD3BCD4: ADD A,#0AH MOV 31H,R1 MOV 32H,R2MOV 33H,ARET 四位数码子程序 DISPLAY: MOV R3,#4MOV R0,#30HMOV 3AH,#0f7HDISP0: MOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0D00HMOVX @DPTR,AMOV DPTR,#0E00HMOV A,3AHMOVX @DPTR,ARR AMOV 3AH,AACALL DY1msINC R0DJNZ R3,DISP0RET延时子程序 DY1ms: MOV R4,#50 LOOP: NOPNOPDJNZ R4,LOOPRET 10ms 延时子程序 DY10ms: MOV R4,#10LOOP0: MOV R5,#250LOOP1: NOPNOPDJNZ R5,LOOPDJNZ R4,LOOP0RET 十进制码表 TAB: DB 3fh,06h,5bh,4fh,66h ;0,1,2,3DB 6dh,7dh,07h,7fh,6fh ;4,5,6,7DB 058H,040H,00H ;8,9,C,-, 黑屏END二、系统多机通信主机源程序代码***Lu Bo*ORG 0000HSJMP MAIN 主程序 MAIN: MOV SP,#70HMOV SCON,#98HMOV TMOD,#20HMOV TL1,#0FDHMOV TH1,#0FDHMOV PCON,#00HMOV R6,#10MOV R7,#3MOV 55H,#00HSETB TR1LCALL BCDZHLCALL DISPLAYMAIN00: LCALL PCJCXLCALL SJCSMOV SCON,#50Hlcall serial_sendMOV SCON,#98HLCALL PCJCXLCALL SJCS11LCALL PCJCXSJMP MAIN00 通信子程序 SJCS: MOV A,R6 MOV SBUF,A LCALL BCDZH LCALL DISPLAY JNB TI,$CLR TI LCALL BCDZH LCALL DISPLAY JNB RI,$CLR RI MOV A,SBUFXRL A,R6JZ SJCS0SJCS00: LCALL BCDZH LCALL DISPLAY SETB TB8 SJMP SJCSSJCS0: CLR TB8 MOV 30H,R6 MOV A,#11H MOV SBUF,A LCALL BCDZH LCALL DISPLAY JNB TI,$ CLR TI JNB RI,$ CLR RI MOV A,SBUF MOV 44H,A LCALL SFJSJ SETB TB8 DJNZ 55H,SJCS RETSJCS11: MOV 55H,#00H INC R6 DJNZ R7,SJCS MOV R6,#10 MOV R7,#3 RETSFJSJ: CJNE R6,#11,SFJSJ3 MOV 62H,44H MOV 58H,44H SJMP SFJSJ0SFJSJ3: JC SFJSJ1 MOV 63H,44H MOV 58H,44H SJMP SFJSJ0SFJSJ1: MOV 61H,44H MOV 58H,44HSFJSJ0: RETPCJCX: MOV SCON,#50HJNB RI,HH1LJMP HH2HH1: LCALL BCDZHLCALL DISPLAYJNB RI,WW5HH2: CLR RIMOV A,SBUFWW1: CJNE A,#49,WW2mov 44h,61hlcall bcdzhlcall displayMOV 58H,61Hlcall serial_sendLJMP WW5 PC 机地址判别子程序 WW2: CJNE A,#50,WW3mov 44h,62hlcall bcdzhlcall displayMOV 58H,62Hlcall serial_sendLJMP WW5WW3: CJNE A,#51,WW4mov 44h,63hlcall bcdzhlcall displayMOV 58H,63Hlcall serial_sendLJMP WW5WW4: CJNE A,#52,WW5LJMP MAINWW5: MOV SCON,#98HRET 八为十六转十进制子程序 BCDZH: MOV A,44HMOV 31H,#15 JNB ,BCD0MOV 31H,#14CPL AADD A,#1BCD0: MOV R1,#00HMOV R2,#00HCLR CBCD1: SUBB A,#64HJC BCD2INC R1SJMP BCD1BCD2: ADD A,#64HBCD3: SUBB A,#0AHJC BCD4INC R2SJMP BCD3BCD4: ADD A,#0AHMOV 32H,R1MOV 33H,R2MOV 34H,ARET 六位数码子程序 DISPLAY: MOV R3,#6MOV 35H,#13MOV R0,#30HMOV 3AH,#0DFHDISP0: MOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0D00HMOVX @DPTR,AMOV DPTR,#0E00HMOV A,3AHMOVX @DPTR,ARR AMOV 3AH,AACALL DY1msINC R0DJNZ R3,DISP0RET延时子程序 DY1ms: MOV R4,#50 LOOP: NOPNOPDJNZ R4,LOOPRET10ms 延时子程序DY10ms: MOV R4,#10LOOP0: MOV R5,#250LOOP1: NOPNOPDJNZ R5,LOOPDJNZ R4,LOOP0RET PC机通信子程序 serial_send: NOPNOPNOPNOPDEC 58HMOV A,58Hmovb,#10; 温度值为 16 进制方式,控制范围不超过 100oCdivab;因此可只用两位十进制数表示movdptr,#ascii_tab; 分出十位在 acc 中,个位在 b 中movca,@a+dptr; 用查表法将数转换成 ascii 码mov sbuf,a ;LCALL BCDZH;LCALL DISPLAY; 启动串口发送 10 位的数据jnbti,$; 等待一帧发送结束,未完时 ti=0 ,结束时 ti=1clrti; 清除发送中断标志位mova,b; 取在 b 中的个位。
