📄 lcd.s43
字号:
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 + -