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

📄 lcd.s43

📁 DESCRIPTION : 0.2S级三相电子式电能表 功能: (1)、LCD显示 (2)、内部通讯:通讯规约采用部颁规约(DL/T645-1997) (3)、红外通讯:通讯规约
💻 S43
📖 第 1 页 / 共 3 页
字号:
            rrc.b   R6
            rra.b   R6
            add.b   #04h,R6
            add.w   R6,PC
            ret
            nop
            br      #RECMOD0_0X
            br      #RECMOD0_1X
            br      #RECMOD0_2X
            br      #RECMOD0_3X
            br      #RECMOD0_4X
            br      #RECMOD0_5X
            br      #RECMOD0_6X
            br      #RECMOD0_7X
            br      #RECMOD0_8X
            br      #RECMOD0_9X 
            br      #RECMOD0_AX
            br      #RECMOD0_BX
            br      #RECMOD0_CX
            br      #RECMOD0_DX
            br      #RECMOD0_EX
            br      #RECMOD0_FX
                                                 
RECMOD0_1X
RECMOD0_2X
RECMOD0_3X
RECMOD0_4X
RECMOD0_5X
RECMOD0_6X
RECMOD0_7X
RECMOD0_9X
RECMOD0_BX
RECMOD0_DX
RECMOD0_EX
RECMOD0_FX
            ret

;主站->从站:01h
RECMOD0_0X



                
            ret
;从站应答:81h
RECMOD0_8X
            ret
;从站应答:A1h
RECMOD0_AX
            ret
;从站应答:C1h
RECMOD0_CX
            ret
;==================================================================================================
;----------"轮显编码=0001 内容=(当前)正向有功总电能"
Disp_0001
            mov.b   TabDig1(R5),&LCDM1       ;FF
           
            ret
;----------"轮显编码=0005"
Disp_0005
            mov.b   TabDig1(R5),&LCDM1       ;FF
            
            ret

;----------"轮显编码=0006"

;----------"轮显编码=0007"
            ;-----------Timer_A 设置
TimeA_Initial
            mov.w   	#TASSEL0+TACLR,&TACTL              		;选ACLK/1=8000H、清零
            mov.w   	#8000H,&TACCR0                               	;1s=1000,1000us  32768=8000H
            mov.w   	#200,&TACCR1                                	;18.75us

            mov.w   	#OUTMOD2+OUTMOD1+OUTMOD0+CCIE,&TACCTL0      	;设为比较模式,输出模式7,开中断00F0H
            mov.w   	#OUTMOD2+OUTMOD1+OUTMOD0+CCIE,&TACCTL1     	;设为比较模式,输出模式7,开中断00F0H
            mov.w   	#CM1+SCS+CAP+CCIE,&TACCTL2                  	;设为捕获模式,下降沿,开中断

            bis.w   	#MC0,&TACTL                                 	;启动Timer_A增计数模式
            bic.w   	#COV+CCIFG,TACCTL2                          
            ret
            ;-----------端口初始化
Port_Initial
            mov.b   	#0H,&P1SEL          		;设为IO(ADC)
            mov.b   	#0FFH,&P1DIR                   	;设为输出
            mov.b   	#0H,&P2SEL          		;设为IO(ADC)
            mov.b   	#0FFH,&P2DIR                   	;设为输出
            mov.b   	#0H,&P3SEL          		;设为IO(ADC)
            mov.b   	#0FFH,&P3DIR                   	;设为输出
            mov.b   	#0H,&P4SEL          		;设为IO(ADC)
            mov.b   	#0FFH,&P4DIR                   	;设为输出
            mov.b   	#0H,&P5SEL          		;设为IO(ADC)
            mov.b   	#0FFH,&P5DIR                   	;设为输出
            mov.b   	#0H,&P6SEL          		;设为IO(ADC)
            mov.b   	#0FFH,&P6DIR                   	;设为输出


            bic.b       #BIT0,&P1SEL
            bis.b       #BIT0,&P1DIR
            bis.b       #BIT1,&P1SEL
            bis.b       #BIT1,&P1DIR


;            mov.b   	#0FFH,&P4SEL          		;设为外围功能模块(ADC)
;            mov.b   	#000H,&P4DIR                   	;设为输入

            bis.b       #BIT5,&P1SEL
            bis.b       #BIT5,&P1DIR

            bis.b       #BIT0+BIT1+BIT2+BIT3+BIT4,&P5SEL
            bis.b       #BIT0+BIT1+BIT2+BIT3+BIT4,&P5DIR
            bis.b       #BIT5+BIT6+BIT7,&P5SEL
            bic.b       #BIT5+BIT6+BIT7,&P5DIR
            mov.b       #BTFRFQ0,&BTCTL                     ;08H
	    bis.b       #SDA+SCL,&P0DIR                     ;I2C初始化,设置SDA为输出
            ret
Uart1_Initial
            ;-----------UART1 设置
            mov.b   	#10h,&UCTL1                  	;设置8位数据位,UART模式
            mov.b   	#30h,&UTCTL1           		;选择主系统时钟
            mov.b   	#08h,&URCTL1                    ;
            mov.b   	#03h,&UBR11                    ;波特率设置:9600  03h  19200  01h
            mov.b   	#041h,&UBR01               	;                  41h         a0h
            mov.b   	#049h,&UMCTL1                   ;调整控制寄存器    49h         b6h
            bis.b   	#URXIE1+UTXIE1,&IE2             ;打开UART1收发中断
            mov.b  	#URXIFG1+UTXIFG1,&ME2           ;清除UART1收发中断标志
            ret
Uart0_Initial
            ;-----------UART0 设置
            mov.b   	#10h,&UCTL0                  	;设置8位数据位,UART模式
            mov.b   	#30h,&UTCTL0           		;选择主系统时钟
            mov.b   	#08h,&URCTL0                    ;
            mov.b   	#03h,&UBR10                    ;波特率设置:9600  03h  19200  01h
            mov.b   	#041h,&UBR00               	;                  41h         a0h
            mov.b   	#049h,&UMCTL0                   ;调整控制寄存器    49h         b6h
            bis.b   	#URXIE0+UTXIE0,&IE2             ;打开UART1收发中断
            mov.b  	#URXIFG0+UTXIFG0,&ME2           ;清除UART1收发中断标志
            ret
;-----------LCD Initial
LCD_Initial_ON
            mov.b   #LCDSG0_7+LCD4MUX+LCDON,&LCDCTL
            RET
LCD_Initial_OFF
           mov.b   #LCDOGOFF,&LCDCTL 
           RET
LowerPowerMode3
           bis         #LPM3,SR                ;设置为低功耗模式3
           ret
;-----------LCD全部显示-------
LCD_Display_OFF
            mov.w   #LCDM20,R4
            sub.w   #LCDM1,R4
            inc.b   R4
            mov.w   #LCDM1,R5
LCD_OFF
            clr.b   0(R5)
            inc.w   R5
            dec.w   R4
            jnz     LCD_OFF
            RET
;-----------LCD全部关闭-------
LCD_Display_ON
            mov.w   #LCDM20,R4
            sub.w   #LCDM1,R4
            inc.b   R4
            mov.w   #LCDM1,R5
LCD_ON
            mov.b   #0ffh,0(R5)
            inc.w   R5
            dec.w   R4
            jnz     LCD_ON
            RET
;-----------数字5-10表格-----------------
TabDig      DB      a+b+c+d+e+f         ;显示"0"      
            DB      b+c                 ;显示"1"
            DB      a+b+d+e+g           ;显示"2"
            DB      a+b+c+d+g           ;显示"3"
            DB      b+c+f+g             ;显示"4"            
            DB      a+c+d+f+g           ;显示"5"                        
            DB      a+c+d+e+f+g         ;显示"6"            
            DB      a+b+c               ;显示"7"            
            DB      a+b+c+d+e+f+g       ;显示"8"            
            DB      a+b+c+d+f+g         ;显示"9"
            DB      a+b+c+e+f+g         ;显示"A"
            DB      c+d+e+f+g           ;显示"B"
            DB      a+d+e+f             ;显示"C"
            DB      b+c+d+e+g           ;显示"D"
            DB      a+d+e+f+g           ;显示"E"
            DB      a+e+f+g             ;显示"F"
            DB      0                   ;显示" "
;-----------数字1-4,11-13表格-----------
TabDig1     DB      a1+b1+c1+d1+e1+f1   ;显示"0"      
            DB      b1+c1               ;显示"1"
            DB      a1+b1+d1+e1+g1      ;显示"2"
            DB      a1+b1+c1+d1+g1      ;显示"3"
            DB      b1+c1+f1+g1         ;显示"4"            
            DB      a1+c1+d1+f1+g1      ;显示"5"                        
            DB      a1+c1+d1+e1+f1+g1   ;显示"6"            
            DB      a1+b1+c1            ;显示"7"            
            DB      a1+b1+c1+d1+e1+f1+g1;显示"8"            
            DB      a1+b1+c1+d1+f1+g1   ;显示"9"            
            DB      a1+b1+c1+e1+f1+g1   ;显示"A"
            DB      c1+d1+e1+f1+g1      ;显示"B"
            DB      a1+d1+e1+f1         ;显示"C"
            DB      b1+c1+d1+e1+g1      ;显示"D"
            DB      a1+d1+e1+f1+g1      ;显示"E"
            DB      a1+e1+f1+g1         ;显示"F"
            DB      0                   ;显示" "
;-----------LCD DISPLAY1--------------------------------------------------            
;-----------轮显编码------------------------------------------------



;-------------------------------------------------------------------------            
            align   2                   ;
disp1
;            mov.b   &Second,Disp_Digital
;            and.w   #0fh,Disp_Digital
            cmp.w   #10h,Disp_Digital
            jlo     disp1_0
            mov.w   #0h,Disp_Digital
disp1_0
            MOV     Disp_Digital,R5
            mov.b   TabDig(R5),R6     ;FF
            mov.b   R6,&LCDM13      ;FF
            mov.b   R6,&LCDM14      ;FF
            mov.b   R6,&LCDM15      ;FF
            mov.b   R6,&LCDM16      ;FF
            mov.b   R6,&LCDM17      ;FF
            mov.b   R6,&LCDM18      ;FF

            mov.b   TabDig1(R5),R6           ;FF
            mov.b   R6,&LCDM1       ;FF
            mov.b   R6,&LCDM2       ;FF
            mov.b   R6,&LCDM3       ;FF
            mov.b   R6,&LCDM4       ;FF
            mov.b   R6,&LCDM10      ;FF
            mov.b   R6,&LCDM11      ;FF
            mov.b   R6,&LCDM12      ;FF
            mov.b   R6,&LCDM19      ;FF
            CALL    #Delay_1s

            inc.w   Disp_Digital
            RET

;-----------段码测试------------------------------------------------
disp2
            MOV     #0H,R4
            MOV     #1H,R5
disp2_0
            mov.b   R5,&LCDM18     ;LCDM1--LCDM20==>SEG1/2--SEG39/40
            RLA.B   R5
            INC.B   R4
            CMP.b   #9H,R4
            JNE     disp2_0
            RET
disp3
            mov.b   Second,R6     ;FF
            mov.b   TabDig(R5),R6     ;FF
            mov.b   R6,&LCDM13      ;FF
            mov.b   R6,&LCDM14      ;FF
            mov.b   R6,&LCDM15      ;FF
            mov.b   R6,&LCDM16      ;FF
            mov.b   R6,&LCDM17      ;FF
            mov.b   R6,&LCDM18      ;FF

            mov.b   TabDig1(R5),R6           ;FF
            mov.b   R6,&LCDM1       ;FF
            mov.b   R6,&LCDM2       ;FF
            mov.b   R6,&LCDM3       ;FF
            mov.b   R6,&LCDM4       ;FF
            mov.b   R6,&LCDM10      ;FF
            mov.b   R6,&LCDM11      ;FF
            mov.b   R6,&LCDM12      ;FF
            mov.b   R6,&LCDM19      ;FF
            ;CALL    #LCD_Display
            CALL    #Delay_05s

            RET

;-----------LCD--------------------------------------------------            
;-----------延时子程序-------
Delay1
            mov.w   #0A69h,R11
Delay2
            dec.w   R11
            jnz     Delay2
            dec.w   R12
            jnz     Delay1
            RET
Delay_001s                              ;0.01s
            mov.w   #0ah,R12
            call    #Delay1
            RET
Delay_01s                               ;0.1s
            mov.w   #064h,R12
            call    #Delay1
            RET
Delay_02s                               ;0.2s
            mov.w   #0C8h,R12
            call    #Delay1
            RET
Delay_05s                               ;0.5s
            mov.w   #01F4h,R12
            call    #Delay1
            RET
Delay_1s                                ;1s
            mov.w   #03E8h,R12
            call    #Delay1
            RET
Delay_2s                                ;2s
            mov.w   #07D0h,R12
            call    #Delay1
            RET
Delay_3s                                ;3s
            mov.w   #0BB8h,R12
            call    #Delay1
            RET
Delay_5s                                ;5s
            mov.w   #1388h,R12
            call    #Delay1
            RET
Delay_8s                                ;8s
            mov.w   #1F40h,R12
            call    #Delay1
            RET
Delay_10s                               ;10s
            mov.w   #2710h,R12
            call    #Delay1
            RET
;------------------

        
;******************************************************************
;   串行接收中断1
;******************************************************************
;DLT/T645多功能电能表通讯规约                                                                                      ;
;帧格式:68H A0 A1 A2 A3 A4 A5 68H Ctl Len DI0 DI1 CS 16H                                                           ;
;COMM_FLAG:
;   Uart0:  BIT0--recive head
;           BIT1--recive ok
;   Uart1:  BIT8--recive head
;           BIT9--recive ok
;
        ORG 3000H
RECEIVE1
	push	R4
	push	R5
	push    R6
        clr.w   R4
	mov.b	&U1RXBUF,R4
        bit.w   #rxdok1,&COMM_FLAG    ;Uart1
        jnz     RCEXIT1
	bit.w	#headok1,&COMM_FLAG
	jnz	RCBYTE10
	cmp.b	#68H,R4               ;判别帧起始符1(68H)
	jnz	RCEXIT1
	bis.w	#headok1,&COMM_FLAG
	mov.w	#1H,&RXDPTR1
	mov.w	#RXDBUF1,R5
	mov.b	R4,0(R5)
	mov.b   R4,&CS1
	jmp	RCEXIT1
RCBYTE10
	mov.w	#RXDBUF1,R5
	add.w	&RXDPTR1,R5
	mov.b	R4,0(R5)
	inc.w	&RXDPTR1
        cmp.w   #08H,&RXDPTR1
        jnz     RCBYTE14
	cmp.b   #68H,R4               ;判别帧起始符8(68H)
	jeq     RCEXIT1CS
RCBYTE10_0                            ;68 xx ... xx 68 A0 A1 A2 A3 A4 A5 68 CTL LEN
        cmp.w   #1,&RXDPTR1
        jeq     RCEXITERR1
	mov.w	#RXDBUF1,R5
	add.w	&RXDPTR1,R5
	mov.b	0(R5),R4
        add.w   R4,&CS1
	mov.w	#RXDBUF1,R5
	mov.b	0(R5),R4
        sub.w   R4,&CS1
	inc.w	R5
	mov.w	#RXDBUF1,R6
	dec.w	&RXDPTR1
        mov.w   &RXDPTR1,R4
RCBYTE10_1
	mov.b	0(R5),0(R6)
	inc.w	R5
	inc.w	R6
	dec.b   R4  
	jnz     RCBYTE10_1
	mov.w	#RXDBUF1,R5
	mov.b	0(R5),R4
	cmp.b   #68H,R4
	jne     RCBYTE10_0
RCBYTE14
        cmp.w   #0AH,&RXDPTR1
        jnz     RCBYTE18
        mov.w   R4,&RXDLEN1
        add.w   #0CH,&RXDLEN1
        cmp.b   #RXDLENMAX,&RXDLEN1
        jhs     RCEXITERR1
	jmp	RCEXIT1CS
RCBYTE18
        jlo     RCEXIT1CS
	cmp.w	&RXDLEN1,&RXDPTR1
        jnz     RCBYTE1C
        cmp.b   R4,&CS1
        jeq     RCEXIT1CS
	jmp	RCEXITERR1
RCBYTE1C
        jlo     RCEXIT1CS
        cmp.B   #16H,R4
        jeq     RCEXIT1OK
	bic.w	#headok1,&COMM_FLAG
RCEXIT1OK
	bis.w	#rxdok1,&COMM_FLAG
RCEXIT1CS
        add.w   R4,&CS1
RCEXIT1
	pop     R6
	pop	R5
	pop	R4
	reti
RCEXITERR1
	bic.w	#headok1,&COMM_FLAG
        pop     R6
	pop	R5
	pop	R4
	reti
;******************************************************************
;   串行发送中断1
;******************************************************************
;---------------------------------------------     
TRANSMIT1
	push    R4
	bit.W   #txdbegin1,&COMM_FLAG
	jz      NOTSENBEGIN1
	mov.w   &TXDPTR1,R4
	cmp.W   R4,&TXDLEN1
 	jhs     SENDOVER1
	add.w   #TXBUF1,R4
	mov.b   0(R4),&U1TXBUF
	inc.w   &TXDPTR1
	pop     R4
	reti
SENDOVER1
	bic.w	#txdbegin1,&COMM_FLAG
NOTSENBEGIN1
	pop	R4           
        reti		
;******************************************************************
;   串行接收中断0
;******************************************************************
RECEIVE0
	push	R4

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -