当前位置:文档之家› 系统执行软件源程序代码

系统执行软件源程序代码

系统执行软件源程序代码Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT附录一系统执行软件源程序代码一、系统多机通信从机源程序代码***Lu Bo*-------------------------------------------------------------------------------------------------------------------------------------ORG 0000HSJMP MAINORG 0023H ;串行口中断入口SJMP SJCS------------------主程序----------------------------------------------------------------------------------------------------------MAIN: SLAVE EQU 12DK EQUMOV SCON,#0B0HMOV TMOD,#20HMOV TL1,#0FDHMOV TH1,#0FDHMOV IE,#90HSETB TR1LCALL WDCJSETB RS1CLR RS0LCALL BCDZHLCALL DISPLAYCLR RS1CLR RS0SJMP MAIN------------------串行口中断服务子程序----------------------------------------------------------------------------------SJCS: CLR RIPUSH APUSH PSWMOV A,SBUFXRL A,#SLAVEJZ SJCS0SJCS1: SETB SM2POP PSWPOP ARETISJCS0: 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 EAMOV R3,#8WR1: SETB DKMOV R4,#8RRC ACLR DKWR2: DJNZ R4,WR2MOV DK,CMOV R4,#20WR3: DJNZ R4,WR3DJNZ R3,WR1SETB DKRET-------------------18B20读数据子程序READ: CLR EAMOV R6,#8RE1: CLR DKMOV R4,#4NOPSETB DKRE2: DJNZ R4,RE2MOV C,DKRRC AMOV R5,#30RE3: DJNZ R5,RE3DJNZ R6,RE1SETB DKRET-----------------八为十六转十进制子程序-----------------------------------------------------------------------------------BCDZH: INC 21HMOV A,21HMOV 30H,#12JNB ,BCD0MOV 30H,#11CPL 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 31H,R1MOV 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,#50LOOP: 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,R6MOV SBUF,ALCALL BCDZHLCALL DISPLAYJNB TI,$CLR TILCALL BCDZHLCALL DISPLAYJNB RI,$CLR RIMOV A,SBUFXRL A,R6JZ SJCS0SJCS00: LCALL BCDZHLCALL DISPLAYSETB TB8SJMP SJCSSJCS0: CLR TB8MOV 30H,R6MOV A,#11HMOV SBUF,ALCALL BCDZHLCALL DISPLAYJNB TI,$CLR TIJNB RI,$CLR RIMOV A,SBUFMOV 44H,ALCALL SFJSJSETB TB8DJNZ 55H,SJCSRETSJCS11: MOV 55H,#00HINC R6DJNZ R7,SJCSMOV R6,#10MOV R7,#3RETSFJSJ: CJNE R6,#11,SFJSJ3 MOV 62H,44HMOV 58H,44HSJMP SFJSJ0SFJSJ3: JC SFJSJ1MOV 63H,44HMOV 58H,44HSJMP SFJSJ0SFJSJ1: MOV 61H,44HMOV 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,#15JNB ,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,#50LOOP: NOPNOPDJNZ R4,LOOPRET--------------------10ms延时子程序-----------------------------------------------------------------------------------------DY10ms: MOV R4,#10LOOP0: MOV R5,#250LOOP1: NOPNOPDJNZ R5,LOOPDJNZ R4,LOOP0RET--------------------PC机通信子程序------------------------------------------------------------------------------------------serial_send: NOPNOPNOPNOPDEC 58HMOV A,58Hmov b,#10 ;温度值为16进制方式,控制范围不超过100oCdiv ab ;因此可只用两位十进制数表示mov dptr,#ascii_tab ;分出十位在acc中,个位在b中movc a,@a+dptr ;用查表法将数转换成ascii码mov sbuf,a;LCALL BCDZH;LCALL DISPLAY ;启动串口发送10位的数据jnb ti,$ ;等待一帧发送结束,未完时ti=0,结束时ti=1clr ti ;清除发送中断标志位mov a,b ;取在b中的个位movc a,@a+dptrmov sbuf,a;LCALL BCDZH;LCALL DISPLAY ;启动串口发送个位的数据jnb ti,$clr tiSETB TB8RETascii_tab:db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h ;0—9ASCII码表TAB: DB 3fh,06h,5bh,4fh,66h ;0,1,2,3DB 6dh,7dh,07h,7fh,6fh ;4,5,6,7DB 77H,7CH,39H,058H,040H,00H ;8,9,A,b,C,c-,黑屏END三、计算机实验室温控系统PC机应用程序代码:(Visual Basic)-------------------------------------------------------------------------------------------------------------------------------------Dim x As IntegerDim y As IntegerDim T As IntegerDim C As IntegerDim I As Integer------------------------------------------------------------------------------------------------------------------------------------Private Sub button_now1_Click()= + "1" '发送数据T = 10' = "1"For I = 1 To 2 '延时NextEnd Sub-------------------------------------------------------------------------------------------------------------------------------------Private Sub button_now2_Click()= + "2" '发送数据T = 11' = "2"For I = 1 To 2 '延时NextEnd Sub------------------------------------------------------------------------------------------------------------------------------------Private Sub button_now3_Click()= + "3" '发送数据T = 12' = "2"For I = 1 To 2 '延时NextEnd Sub-------------------------------------------------------------------------------------------------------------------------------------Private Sub Button_RECV_C_Click()= ""= + "9"End Sub------------------------------------------------------------------------------------------------------------------------------------Private Sub Button_SEND_C_Click()= ""End Sub-------------------------------------------------------------------------------------------------------------------------------------Private Sub Button_SEND_Click()Dim x As StringIf = "" Then '发送数据不能为空x = MsgBox("发送数据不能为空", 16)Exit Sub------------------------------------------------------------------------------------------------------------------------------------End IfIf Not Then '保证串口打开x = MsgBox("请打开串口", 9)= TrueEnd If= '发送数据For I = 1 To 200 '延时NextEnd SubPrivate Sub Check1_Click()If = 1 Thenx = 1Elsex = 0End IfEnd Sub------------------------------------------------------------------------------------------------------------------------------------Private Sub cmdquit_Click()Open "C:\" For Output As #2Print #2,Close #2EndEnd Sub------------------------------------------------------------------------------------------------------------------------------------Private Sub Form_Load() '端口设置= 1= "9600,n,8,1"= 0= 1024= 512= True= 0= 1= 0= 0= ""= ""End Sub------------------------------------------------------------------------------------------------------------------------------------Private Sub MSComm_OnComm()Select Case ' 检查串口事件 '错误处理Case comEventOverrun= ""= ""Exit SubCase comEventRxOver= ""= ""Exit SubCase comEventTxFull= ""Exit SubCase comEvReceiveDim str As Stringb = Date$a = Time$ ' Mid(Date$, 1, 4) & Mid(Date$, 6, 2) & Mid(Date$, 9, 2)str =If T = 10 Then= "NOW1 " + " " + str + "℃"= ""= ""Open "C:\" For Append As #1Print #1, b + " " + a + " " + str + "℃"Close #1T = 13ElseIf T = 11 Then= ""= "NOW2" + " " + str + "℃"= ""Open "C:\" For Append As #1Print #1, b + " " + a + " " + str + "℃"Close #1T = 13ElseIf T = 12 Then= ""= ""= "NOW3" + " " + str + "℃"Open "C:\" For Append As #1Print #1, b + " " + a + " " + str + "℃"Close #1T = 13Else= + b + " " + a + " " + str + "℃" + " "Open "C:\" For Append As #1Print #1, b + " " + a + " " + str + "℃"Close #1End IfEnd SelectEnd Sub------------------------------------------------------------------------------------------------------------------------------------Private Sub Timer1_Timer()If x = 1 ThenEnd If End Sub。

相关主题