📄 单相带液晶显示电子表原程序.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;液晶显示单相电子表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NUMBYTE EQU 0CH ;
SUBAH EQU 0DH ;读存高位地址寄存区
SUBAL EQU 0EH ;读存低位地址寄存区
MTRD EQU 0FH ;数据指针
TXONE EQU 35H ;存放通讯首地址
GESHU EQU 34H ;脉冲个数的存储区
BIAS EQU 52H ;
RC256 EQU 30H ;
SYSEN EQU 02H ;
LCDON EQU 06H ;
SYSDIS EQU 00H ;
WDTEN EQU 0EH ;
WDTDIS EQU 0AH ;
CLRWDT EQU 1CH ;
IRQEN EQU 10H ;
IRQDIS EQU 00H ;
DISBUFF EQU 5AH ;显示的电表数据
LCDBITCNT EQU 3CH
LCDCOMMAND EQU 3DH
LCDADR EQU 3EH
LCDBYTECNT EQU 3FH
CS BIT P1.0 ;
WRITE1 BIT P1.1 ;
SDATA1 BIT P1.2 ;
READ1 BIT P1.7 ;
IRQ BIT P1.3 ;看门狗信号(未用)
MCH BIT 01H ;脉冲到来判断标志
TXAV BIT 02H ;数据存储标志
TXDA BIT 03H ;数据完整标志
TRUE BIT 04H ;设置与读表地址命令标志
TXST BIT 05H ;通讯开始标志
ERROR BIT 06H ;奇偶校验出错标志
ADDRE BIT 07H ;是本表标志
ACK BIT 08H ;通讯应答标志
ORG 0000H
AJMP STAR ;开始主程序
ORG 0003H
JMP DIODIA ;掉电保护程序
ORG 000BH
JMP TIME0 ;定时器0
ORG 0023H
JMP UART ;串行口中断
STAR: MOV SP,#60H
CLR A
MOV R0,#01H
BEG: MOV @R0,A
INC R0
CJNE R0,#00H,BEG
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTI1621: MOV LCDCOMMAND ,#BIAS ;
ACALL SEND1621COM
MOV LCDCOMMAND ,#RC256 ;
ACALL SEND1621COM
MOV LCDCOMMAND ,#SYSEN ;
ACALL SEND1621COM
MOV LCDCOMMAND ,#LCDON ;
ACALL SEND1621COM
NOP
NOP
DATAREA: MOV MTRD,#37H ;
MOV SUBAH,#00H
MOV SUBAL,#0BH
MOV NUMBYTE,#04H
LCALL READE
JNB ACK,DATAREA
CLR ACK
ABC: LCALL SJZH
NOP
NOP
LCALL BRUSHLCD ;
NOP
NOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;读掉电前脉冲个数
BEG1: MOV MTRD,#34H ;
MOV SUBAH,#00H ;
MOV SUBAL,#03H
MOV NUMBYTE,#01H
LCALL READE
JNB ACK,BEG1
CLR ACK
CLR C
MOV A,34H
CJNE A,#20H,BEG2
MOV 34H,#00H
JMP BEG3
BEG2: JC BEG3
MOV 34H,#00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;通讯开始
BEG3: MOV TXONE,#22H ;通讯首地址
MOV TMOD,#21H ;定时器1工作方式2,定时器0工作方式1
MOV PCON,#00H
MOV SCON,#0D0H ;串行口通讯方式2
MOV TH1,#0E8H
MOV TL1,#0E8H ;通讯波特率1200
MOV TH0,#0FEH
MOV TL0,#33H ;定时器500微秒
SETB PX0 ;外部中断0优先级设置
SETB TR0 ;启动计时0
SETB TR1 ;启动计时1
SETB ET0 ;0中断允许
SETB EX0 ;外部中断0允许
SETB ES ;串行口中断允许
SETB EA ;允许中断
MAIN0: JNB TXAV,MAIN1 ;
LCALL DATSAV ;
LCALL SJZH ;
LCALL BRUSHLCD
CLR TXAV
MAIN1: JNB TXST,MAIN0 ;
JNB TXDA,MAIN2 ;
CLR ES ;
LCALL TXACK ;
CLR ERROR
CLR TXDA ;
CLR TXST ;
MOV TXONE,#22H
SETB ES ;
MAIN2: JMP MAIN0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;定时器0中断服务程序
TIME0: PUSH A
PUSH DPL
PUSH DPH
PUSH PSW
MOV TL0,#33H
MOV TH0,#0FEH ;
CLR C
MOV C,P3.7 ;
JC AA1
CLR MCH ;
JMP AA3
AA1: ANL C,MCH
JC AA3
INC 34H
MOV A,34H
CJNE A,#20H,AA2
SETB TXAV ;
MOV 34H,#00H
AA2: SETB MCH ;
AA3: POP PSW
POP DPH
POP DPL
POP A
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;串行口中断服务程序,接收数据
UART: PUSH A
PUSH PSW
PUSH 00H
PUSH DPL
PUSH DPH
CLR PSW.3
SETB PSW.4
CLR RI
JB TXDA,UARTED1 ;通讯数据完整判断
MOV A,SBUF
JNB TXST,UART00 ;是否有数据
JNB PSW.0,LOOP1 ;奇偶判断
JMP LOOP2
LOOP1: JB RB8,UARTE
JMP LOOP2
UARTE: SETB ERROR ;奇偶判断出错标志
LOOP2: MOV R0,TXONE ;通讯首地址
MOV @R0,A
CJNE R0,#29H,LLOOP
CJNE @R0,#68H,LOOP4 ;判断是否为第二个68
LLOOP: CJNE R0,#2DH,LLOOP1
CJNE @R0,#16H,LLOOP1
JMP LOOP4
LLOOP1: CJNE R0,#2EH,LOOP8
CJNE @R0,#16H,LOOP8
MOV A,2BH
CJNE A,#01H,LOOP8
JMP LOOP3
LOOP8: CJNE R0,#2FH,LOOP6 ;结束判断
CJNE @R0,#16H,LOOP6
MOV A,2AH
CJNE A,#01H,LOOP6
MOV 2FH,#00H
JMP LOOP3
LOOP6: CJNE R0,#30H,LOOP9
CJNE @R0,#16H,LOOP9
MOV A,2BH
CJNE A,#03H,LOOP9
JMP LOOP3
LOOP9: CJNE R0,#31H,LOOP10
CJNE @R0,#16H,LOOP10
MOV A,2BH
CJNE A,#04H,LOOP10
JMP LOOP3
LOOP10: CLR C
CJNE R0,#33H,loop7
CJNE @R0,#16H,LOOP4
mov 33h,#00h
JMP LOOP3
UARTED1: JMP UARTED
UART00: JMP UART0
loop7: jc loop5
jmp loop4
LOOP5: INC R0 ;
MOV TXONE,R0
JMP UARTED
LOOP3: SETB TXDA ;
JMP UARTED
LOOP4: CLR A
MOV R0,#22H
BEGG: MOV @R0,A
INC R0
CLR C
CJNE R0,#34H,BEGG1
JMP BEGG2
BEGG1: JC BEGG
BEGG2: MOV TXONE,#22H
CLR TXST
JMP UARTED
UART0: CJNE A,#68H,UARTED
SETB TXST ;
MOV R0,TXONE
MOV @R0,A
INC R0
MOV TXONE,R0
UARTED:POP DPH
POP DPL
POP 00H
POP PSW
POP A
RETI
; 接受到的数据放在以22为开头的单元 以33为结束
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;通讯应答
TXACK: JB ERROR,TXACK5
LCALL PDDZ ;调用地址判断子程序
JNB TRUE,TXAC3
CLR TRUE
MOV A,2AH
CJNE A,#0AH,TXAC2 ;设置表地址命令判断
MOV A,2BH
CJNE A,#06H,TXAC2 ;数据域长度
LCALL DZCC
JMP TXACK5
TXAC2: MOV A,2AH ;
CJNE A,#01H,TXACK5
MOV A,2CH
CJNE A,#65H,TXACK5 ;读电表地址判断
MOV A,2DH
CJNE A,#0F3H,TXACK5
LCALL DZYD
JMP txack5
TXAC3: JNB ADDRE,TXACK5
CLR ADDRE
MOV A,2AH
CJNE A,#01H,TXACK1
MOV A,2CH ;读电表数据判断
CJNE A,#43H,TXACK2
MOV A,2DH
CJNE A,#0C3H,TXACK2
LCALL DUSJ
JMP txack5
;TXAC4: MOV A,2CH
;CJNE A,#4CH,TXACK2
; MOV A,2DH
;CJNE A,#0F4H,TXACK2
;LCALL DUCZ ;读电表初值判断
; JMP txack5
TXACK1:MOV A,2AH
CJNE A,#04H,TXACK2
MOV A,2CH
CJNE A,#4CH,TXACK2
MOV A,2DH
CJNE A,#0F4H,TXACK2
LCALL SEBZ ;设电表初值子程序
jmp txack5
TXACK2:LCALL CHUCUO
TXACK5: RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;出错
CHUCUO: MOV 40H,#68H
CHUCUO1: MOV MTRD,#41H
MOV SUBAH,#00H
MOV SUBAL,#10H
MOV NUMBYTE,#06H
LCALL READE
JNB ACK,CHUCUO1
CLR ACK
MOV 47H,#68H
MOV 48H,#0C1H
MOV 49H,#01H
MOV 4AH,#35H
MOV R2,#0AH ; 校验和 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV R0,#40H
MOV A,@R0
CHUCUO2: INC R0
ADD A,@R0
DJNZ R2,CHUCUO2
MOV 4BH,A
MOV 4CH,#16H
MOV R2,#0DH ; 发送数据
MOV R0,#40H
CLR P3.3
NOP
NOP
LCALL FASON
NOP
NOP
SETB P3.3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;设电表初值子程序
SEBZ: MOV A,2EH
CLR C
SUBB A,#33H
MOV 2EH,A
MOV A,2FH
CLR C
SUBB A,#33H
MOV 2FH,A
MOV A,30H
CLR C
SUBB A,#33H
MOV 30H,A
MOV A,31H
CLR C
SUBB A,#33H
MOV 31H,A
MOV MTRD,#2EH
MOV SUBAH,#00H
MOV SUBAL,#17H
MOV NUMBYTE,#04H
LCALL WRITE ;存到表底区
MOV MTRD,#2EH
MOV SUBAH,#00H
MOV SUBAL,#0BH
MOV NUMBYTE,#04H
LCALL WRITE ;存到数据区
MOV 40H,#68H
SEBZ1: MOV MTRD,#41H
MOV SUBAH,#00H
MOV SUBAL,#10H
MOV NUMBYTE,#06H
LCALL READE
JNB ACK,SEBZ1
CLR ACK
MOV 47H,#68H
MOV 48H,#84H
MOV 49H,#00H
MOV R2,#09H ; 校验和 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV R0,#40H
MOV A,@R0
SEBZ2: INC R0
ADD A,@R0
DJNZ R2,SEBZ2
MOV 4AH,A
MOV 4BH,#16H
MOV R2,#0CH ; 发送数据
MOV R0,#40H
CLR P3.3
NOP
NOP
LCALL FASON
NOP
NOP
SETB P3.3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;读电表初值子程序
;DUCZ: MOV 40H,#68H
; MOV 47H,#68H
; MOV 48H,#81H
; MOV 49H,#06H
; MOV 4AH,#19H
; MOV 4BH,#0C1H
;DUCZ1: MOV MTRD,#41H
;MOV SUBAH,#00H
; MOV SUBAL,#10H
; MOV NUMBYTE,#06H
;LCALL READE
; JNB ACK,DUCZ1
; CLR ACK ; 读表地址
;DUCZ2: MOV MTRD,#4CH
;MOV SUBAH,#00H
;MOV SUBAL,#17H
;MOV NUMBYTE,#04H
;LCALL READE
;JNB ACK,DUCZ2
;CLR ACK ; 读电表初值,初值放在17到1A中
;MOV A,4AH ;
;ADD A,#33H ;
;MOV 4AH,A ;
;MOV A,4BH ;
;ADD A,#33H ;
;MOV 4BH,A ;
;MOV A,4CH ;
;ADD A,#33H
;MOV 4CH,A
;MOV A,4DH
;ADD A,#33H
;MOV 4DH,A
;MOV A,4EH
;ADD A,#33H
;MOV 4EH,A
;MOV A,4FH
;ADD A,#33H
;MOV 4FH,A
;MOV R2,#0FH ; 校验和 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;MOV R0,#40H
;MOV A,@R0
;WAIT1: INC R0
;ADD A,@R0
;DJNZ R2,WAIT1
;MOV 50H,A
;MOV 51H,#16H
;MOV R2,#12H ; 发送数据
;MOV R0,#40H
;CLR P3.5
;NOP
;NOP
;LCALL FASON
;NOP
;NOP
;SETB P3.5
;RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;表地址存储子程序,表地址减33存储
DZCC: MOV A,2CH
CLR C
SUBB A,#33H
MOV 2CH,A
MOV A,2DH
CLR C
SUBB A,#33H
MOV 2DH,A
MOV A,2EH
CLR C
SUBB A,#33H
MOV 2EH,A
MOV A,2FH
CLR C
SUBB A,#33H
MOV 2FH,A
MOV A,30H
CLR C
SUBB A,#33H
MOV 30H,A
MOV A,31H
CLR C
SUBB A,#33H
MOV 31H,A
DZCC2: MOV MTRD,#2CH
MOV SUBAH,#00H
MOV SUBAL,#10H
MOV NUMBYTE,#06H
LCALL WRITE
NOP
NOP
NOP
MOV 40H,#68H
DZCC3: MOV MTRD,#41H
MOV SUBAH,#00H
MOV SUBAL,#10H
MOV NUMBYTE,#06H
LCALL READE
JNB ACK,DZCC3
CLR ACK
MOV 47H,#68H
MOV 48H,#8AH
MOV 49H,#00H
MOV R2,#09H ; 校验和 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV R0,#40H
MOV A,@R0
WAIT2: INC R0
ADD A,@R0
DJNZ R2,WAIT2
MOV 4AH,A
MOV 4BH,#16H
MOV R2,#0CH ; 发送数据
MOV R0,#40H
CLR P3.3
NOP
NOP
LCALL FASON
NOP
NOP
SETB P3.3
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;读数据应答子程序
DUSJ: MOV 40H,#68H
DUSJ1: MOV MTRD,#41H
MOV SUBAH,#00H
MOV SUBAL,#10H
MOV NUMBYTE,#06H
LCALL READE
JNB ACK,DUSJ1
CLR ACK
MOV 47H,#68H
MOV 48H,#81H
MOV 49H,#06H
MOV 4AH,#10H
MOV 4BH,#90H
DUSJ2: MOV MTRD,#4CH
MOV SUBAH,#00H
MOV SUBAL,#0BH
MOV NUMBYTE,#04H
LCALL READE
JNB ACK,DUSJ2
CLR ACK
MOV A,4AH
ADD A,#33H
MOV 4AH,A
MOV A,4BH
ADD A,#33H
MOV 4BH,A
MOV A,4CH
ADD A,#33H
MOV 4CH,A
MOV A,4DH
ADD A,#33H
MOV 4DH,A
MOV A,4EH
ADD A,#33H
MOV 4EH,A
MOV A,4FH
ADD A,#33H
MOV 4FH,A
MOV R2,#0FH ; 校验和 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -