?? comok.asm
字號:
;**********************************************************
; (485) COMINIT 串行口中斷子程序
;
; 使用第二組寄存器
; R3 485 接收字符數
; R4 485 接收幀長度數
; R5 485 發送字符數
; R6 485 發送幀字符總數
;**********************************************************
COMINIT: PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
;
SETB RS0 ; 使用第二組寄存器
CLR RS1 ;
;
JB RI,COM_RXD ; 接收中斷
JNB TI,COMINIT0
LJMP COM_TXD ; 發送中斷
COMINIT0: LJMP COMEND
;
COM_RXD: CLR RI
JNB RB8,COM_RXDX
CLR C
MOV A,SBUF
CJNE A,#0F8H,COM_RXD04 ; 地址是否為下傳地址?
CLR RB8 ; 是 置接收數據幀狀態
SETB biRXDDA
SETB biF8FLG ; 置下傳地址狀態
LJMP COMEND
;
;COM_RXD01: CJNE A,#0FDH,COM_RXD02 ; 地址是否廣播地址?
; CLR RB8 ; 是 置接收數據幀狀態
; LJMP COMEND
;
;COM_RXD02: CJNE A,#0FBH,COM_RXD03 ; 地址是否叫號器廣播地址?
; CLR RB8 ; 是 置接收數據幀狀態
; LJMP COMEND
;
;COM_RXD03: CJNE A,#0FEH,COM_RXD04 ; 地址是否新掛設備地址?
; ;**********
; ;判斷本機地址是否新掛設備 是發送新掛設備信息
; LJMP COMEND
;
COM_RXD04: SUBB A,yCOMADR
JNZ COMEND ; 地址是否本機地址? 否退出
;
;
COM_RXD1: CLR RB8 ; 是 置接收數據幀狀態
SETB biRXDDA
LJMP COMEND
;
;
; 接收信息幀 到0100H~01FFH
COM_RXDX: JNB biRXDDA,COMEND
CLR C
MOV A,SBUF
MOV R7,A ; R7 接收字符暫存
JB biCOMPRO,COMEND ; 接收等待處理 退出接收中斷
JB biRXDFLG,COM_RXDX1
CJNE A,#0EAH,COMEND ; 未接收幀狀態 判斷是否幀頭 否放棄
MOV DPTR,#D_RXD485
MOVX @DPTR,A
MOV A,#01H
MOV R3,A ; R3=接收字符數
;
MOV R4,#05H ; 預置信息幀長度=5
SETB biRXDFLG
SJMP COMEND
;
COM_RXDX1: CLR C
MOV A,R3
CJNE A,#01H,COM_RXDX10 ; 接收是否地址字節?
JNB biF8FLG,COM_RXDX10 ; 是否下傳幀
CLR biF8FLG
CLR C
MOV A,R7
SUBB A,yCOMADR ; 下傳幀判是否本機地址 否 退出接收
JNZ COM_RXDX31
MOV A,R3
;
COM_RXDX10:MOV DPL,A
MOV DPH,#01H
MOV A,R7 ; R7 接收字符暫存
MOVX @DPTR,A
INC R3
CJNE R3,#04H,COM_RXDX2
ADD A,#02H ;
MOV R4,A ; 寫 幀信息長度+3=幀長度 ->R4
SJMP COMEND
COM_RXDX2: CLR C
MOV A,R3 ; 接收幀字節數= 幀信息長度+3 ? 相等 接收幀完畢 待處理
SUBB A,R4
JNZ COM_RXDX3
SETB biCOMPRO ; 置處理通訊幀標志=1
SETB RB8
CLR biRXDDA
SJMP COMEND
COM_RXDX3: CLR C
MOV A,#31
SUBB A,R3
JNC COM_RXDX4 ; 接收字節數>32 ? >32 清接收狀態 重新接收
CLR C
COM_RXDX31:CLR biRXDFLG
SETB RB8
COM_RXDX4: SJMP COMEND
;
;
COMEND: POP DPL
POP DPH
POP PSW
POP ACC
RETI
;
;
COM_TXD: CLR TI
CLR P1.4
CLR P1.5
CLR biTXDFLG ; 發送字節全部發送完畢 ,清發送狀態
CLR biINFFLG ;
;
COM_TXD1: SJMP COMEND
;
;
;********************************************************************
; COM_PRO 通訊處理子程序
;********************************************************************
COM_PRO: CLR C
MOV DPTR,#D_RXD485
INC DPTR
MOVX A,@DPTR ; A= 數據幀中 目的地址
CJNE A,#0FDH,COMPRO01 ; 是否廣播地址 是進入通訊處理
SJMP COMPRO03
COMPRO01: CJNE A,#0FBH,COMPRO02 ; 是否叫號器廣播地址 是進入通訊處理
SJMP COMPRO03
COMPRO02: CLR C
SUBB A,yCOMADR
JZ COMPRO03 ; 是否本機地址 是進入通訊處理
;
CLR C
LJMP COMPROEND ; 不是上述地址 放棄處理此幀
;
COMPRO03: INC DPTR
MOVX A,@DPTR ; A =命令字
;
CJNE A,#018H,COMPRO04
LJMP COMPRO1 ; 呼叫號碼(代碼)顯示
COMPRO04: CJNE A,#010H,COMPRO05
LJMP COMPRO2 ; 漢字點陣顯示
COMPRO05: CJNE A,#021H,COMPRO06
COMPRO06:
COMPROEND: CLR biRXDFLG
CLR biCOMPRO
RET
;
; 呼叫號碼(代碼)顯示
COMPRO1: INC DPTR
INC DPTR
MOVX A,@DPTR
MOV 50H,A ;50H 顯示字符個數
MOV R7,A
INC DPTR
MOVX A,@DPTR
MOV 51H,A ; 51H閃爍標志
INC DPTR
MOVX A,@DPTR
MOV 52H,A ; 52H閃爍次數
;
INC DPTR
INC DPTR
;
MOV R7,#04
MOV R0,#54H ; 顯示字符代碼->53H~5AH
COMPRO11: INC DPTR
MOVX A,@DPTR
MOV @R0,A
INC R0
DJNZ R7,COMPRO11
;
CLR C
MOV A,54H
CJNE A,#01CH,COMPRO12
; 顯示暫停服務
SETB biSTOP
MOV 51H,#00H
MOV 50H,#04H
MOV 53H,#08DH
MOV 54H,#08EH
MOV 55H,#08FH
MOV 56H,#090H
LCALL VIS_BUF ; 顯示50H~5AH字符
CLR biFRMFS
LJMP COMPROEND
;
COMPRO12: CJNE A,#018H,COMPRO16
; 顯示開啟服務
MOV 51H,#00H
MOV 50H,#04H
MOV 53H,#085H
MOV 54H,#086H
MOV 55H,#087H
MOV 56H,#088H
LCALL VIS_BUF ; 顯示50H~5AH字符
CLR biFRMFS
CLR biSTOP
LJMP COMPROEND
;
COMPRO16: CLR C
JB biSTOP,COMPRO19
MOV 53H,#84H
MOV 58H,#83H
LCALL VIS_BUF ; 顯示50H~5AH字符
;
CLR C
MOV A,51H
JZ COMPRO19
; 需閃爍 ******
LCALL FLASH_VIS ; 閃爍顯示
SETB biFRMFS
MOV yFLSHDEL,52H
;
COMPRO19: LJMP COMPROEND
;
;
; 漢字點陣顯示
COMPRO2:
COMPRO29: LJMP COMPROEND
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -