⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单相带液晶显示电子表原程序.asm

📁 单相电子式液晶电能表源程序已经是成熟产品的程序。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;液晶显示单相电子表
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 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 + -