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

📄 fet4xx_rtcwlcd.s43

📁 MSP430电能测量程序,用的是电力线载波通讯.即PLC
💻 S43
📖 第 1 页 / 共 2 页
字号:
              ret
#else		//__CROSSWORKS__

_Char2LCD:
Char2LCD        
              sub    #'0',R15                  ;subtract offset of char '0'
_BCD2LCD:
BCD2LCD
              rla    R15                       ;transform for word table
              mov    LCD_Tab(R15),R15          ;LCD value to R15
_Direct2LCD:
Direct2LCD              
              rla    R14                       ;position for word table (2 bytes per char)
              mov.b  R15,LCDM2(R14)            ;low byte to LCD
              swpb   R15
              mov.b  R15,LCDM3(R14)            ;high byte to LCD
              add    #2,R14                    ;increase R14 (LCD mem pointer) 

              ret
			  
;-------------------------------------------------------------------------------
_setPoint:
setPoint
              rla    R15                       ;position for word table (2 bytes per char)
              bis.b  #dp,LCDM2(R15)            ;low byte to LCD
              ret


;-------------------------------------------------------------------------------
_setColon:
setColon
              rla    R15                       ;position for word table (2 bytes per char)
              bis.b  #colon,LCDM2(R15)         ;Turn on colon
              ret
#endif


;-------------------------------------------------------------------------------
_SetupClock:
SetupClock    ;Configure modules and control registers 
;-------------------------------------------------------------------------------
_SetupLCD:      
SetupLCD      
#if	(LCD_SIZE == 7)
              mov.b   #LCDON+LCD4MUX+LCDP2+LCDP0,&LCDCTL ; Softbaugh LCD 4Mux, S0-S31
#else	
			  mov.b   #LCDON+LCD4MUX+LCDP2,&LCDCTL ; STK LCD 4Mux, S0-S15
#endif

#ifdef P5SEL_
              mov.b  #0FCh,&P5SEL              ; Enable R(LCD) + COM Lines
#endif

SetupBT       mov.b  #BT_ADLY_1000,&BTCTL      ;Basic Timer interrupt = 1 second
              bis.b  #BTFRFQ1,&BTCTL           ;set fLCD = ACLK / 128
              mov.b  #BTIE,&IE2                ;enable Basic Timer interrupt
              
ClearRAM      
              mov.b  #00h,SEC                  ;preload SEC        # rolls over
              mov.b  #00h,MIN                  ;preload MIN        # to 12:00 @     
              mov.b  #012h,HOUR                ;preload HOUR       # 1st second

              mov.b  #01h,DAY                  ;preload DAY
              mov.b  #01h,MONTH                ;preload MONTH
              mov.b  #03h,YEAR                 ;preload YEAR


ClearLCD      mov    #20,R15                   ;20 LCD memory bytes to clear
Clear1        mov.b  #0,LCDM1(R15)             ;write zeros in LCD RAM locations
                                               ;so clear display
              dec    R15                       ;all LCD mem clear?
              jc     Clear1                    ;more LCD mem to clear, use JC
                                               ;to get memory location 0  
              ret          


;-------------------------------------------------------------------------------
;             Basic Timer causes 1 second interrupt. Mode bits changed on stack
;             so CPU is returned in active upon return from the interrupt
;-------------------------------------------------------------------------------
BT_ISR
              
              call   #UpdateClock              ;update hours and minutes each
                                               ;second even if not displayed 
 			  call   #_DisplayNextData		   ; Switch to next display mode 
											   ;  every few seconds
	          bic    #LPM3,0(SP)			   ; clear LPM on Stack 


			  reti


;-------------------------------------------------------------------------------
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; LCD  Definitions
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

LCD_TYPE 
; Top Digit at LCD
;SB LCD
ta      equ     10h     
tb      equ     01h
tc      equ     04h
td      equ     08h
te      equ     40h
tf      equ     20h
tg      equ     02h
tdp     equ     80h

_TLCD_Tab:
TLCD_Tab DB   ta+tb+tc+td+te+tf            ; displays "0"
         DB   tb+tc                        ; displays "1"
         DB   ta+tb+td+te+tg               ; displays "2"
         DB   ta+tb+tc+td+tg               ; displays "3"
         DB   tb+tc+tf+tg                  ; displays "4"
         DB   ta+tc+td+tf+tg               ; displays "5"
         DB   ta+tc+td+te+tf+tg            ; displays "6"
         DB   ta+tb+tc                     ; displays "7"
         DB   ta+tb+tc+td+te+tf+tg         ; displays "8"
         DB   ta+tb+tc+td+tf+tg            ; displays "9"
         DB   ta+tb+tc+te+tf+tg            ; displays "A"
         DB   tc+td+te+tf+tg               ; displays "B" 
         DB   ta+td+te+tf                  ; displays "C"
         DB   tb+tc+td+te+tg               ; displays "D" 
         DB   ta+td+te+tf+tg               ; displays "E"
         DB   ta+te+tf+tg                  ; displays "F"

         even                              ; succeeding .text sections must be even aligned! 

;SB LCD
a       equ     08h     
b       equ     04h
c       equ     02h
d       equ     01h
e       equ     20h
f       equ     40h
dp      equ     10h
colon   equ     80h

g       equ     4000h
h       equ     8000h
j       equ     0800h
k       equ     0400h
m       equ     0200h
n       equ     0100h
q       equ     2000h   ;1000h
p       equ     1000h   ;2000h

;--- character definitions
; decode special Char to be placed at end of the table
CHAR_SPACE equ  LCD_sp
_CHAR_SPACE equ  LCD_sp
CHAR_MINUS equ  LCD_mi
_CHAR_MINUS equ  LCD_mi

LCD_sp  DW   0                          ; displays " " 
        DW	 j+p;						; displays "!"
        DW	 b+f;						; displays """
        DW	 a+b+c+d+e+f+g+j+m+p;		; displays "#"
        DW	 a+f+g+m+c+d+j+p;			; displays "$"
        DW	 c+f+k+q;`					; displays "%"
        DW	 d+h+j+n+q;					; displays "&"
        DW	 j;							; displays "'"
        DW	 j+k+n+p;					; displays "("
        DW	 h+j+p+q;					; displays ")"
        DW	 g+h+j+k+m+n+p+q;			; displays "*"
        DW	 g+j+m+p;					; displays "+"
        DW	 q;							; displays "," 
LCD_mi  DW	 g+m;                       ; displays "-" 
        DW	 dp;						; displays "."
        DW	 k+q;						; displays "/"
_LCD_Tab:
LCD_Tab DW   a+b+c+d+e+f +k+q            ; displays "0" with diagonal slash
        DW   b+c                        ; displays "1"
        DW   a+b+d+e+g+m                ; displays "2"
        DW   a+b+c+d+g+m                ; displays "3"
        DW   b+c+f+g+m                  ; displays "4"
        DW   a+c+d+f+g+m                ; displays "5"
        DW   a+c+d+e+f+g+m              ; displays "6"
        DW   a+b+c                      ; displays "7"
        DW   a+b+c+d+e+f+g+m            ; displays "8"
        DW   a+b+c+d+f+g+m              ; displays "9"
        DW   colon		                 ; displays ":" 
        DW   colon+q	                 ; displays ";" 
        DW   k+n                        ; displays "<" 
        DW   d+g+m                      ; displays "="
        DW   h+q                        ; displays ">" 
        DW   a+b+m+p                    ; displays "?"
        DW   a+b+d+e+f+g+m              ; displays "@"
        DW   a+b+c+e+f+g+m              ; displays "A"
        DW   c+d+e+f+g+m                ; displays "B" 
        DW   a+d+e+f                    ; displays "C"
        DW   b+c+d+e+g+m                ; displays "D" 
        DW   a+d+e+f+g                  ; displays "E"
        DW   a+e+f+g                    ; displays "F"
        DW   a+c+d+e+f+m                ; displays "G"
        DW   b+c+e+f+g+m                ; displays "H"
        DW   j+p +a+d	                 ; displays "I"
        DW   b+c+d+e                    ; displays "J"
        DW   e+f+g+k+n                  ; displays "K"
        DW   d+e+f                      ; displays "L"
        DW   b+c+e+f+h+k                ; displays "M"
        DW   e+f+h+n+c+b                ; displays "N" 
        DW   a+b+c+d+e+f			     ; displays "O" big
        DW   a+b+e+f+g+m                ; displays "P"
        DW   a+b+c+d+e+f+n              ; displays "Q"
        DW   e+f+a+b+m+g+n              ; displays "R" 
        DW   a+c+d+f+g+m                ; displays "S"
        DW   a+j+p			             ; displays "T" 
        DW   c+d+e+f+b                  ; displays "U" 
        DW   e+f+q+k		             ; displays "V"
        DW   e+f+q+n+c+b				 ; displays "W"
        DW   h+n+q+k                    ; displays "X"
        DW   h+k+p                      ; displays "Y"
        DW   a+k+q+d                    ; displays "Z" 

	    DW   e+f+a+d+h+q                ; displays "[" 
        DW   h+n                        ; displays "\" 
        DW   a+d+b+c+k+n                ; displays "]"
        DW   a+f+b                      ; displays "^" 
        DW   d							; displays "_"
        DW   h							; displays "`"

_LCD_Tab_Length equ	$ - _LCD_Tab
LCD_Tab_Length equ	$ - LCD_Tab
       
LCD_Tab_End
        even                            ; succeeding .text sections must be even aligned! 


;-------------------------------------------------------------------------------
;             Interrupt vectors
;-------------------------------------------------------------------------------
#if !defined(__CROSSWORKS__)
              COMMON INTVEC
#else
              RSEG   INTVEC
              KEEP
#endif            
              ORG    BASICTIMER_VECTOR         ;Basic Timer Vector
              DW     BT_ISR                                         

              END     


⌨️ 快捷键说明

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