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

📄 lcd-zegarek-hh.mm.ss.txt

📁 又一个国外的一个关于msp430f449开源项目资料---源码之五
💻 TXT
字号:
                      #include  <msp430x44x.h>

; CPU registers used
#define RXTXI2C R4 ; I2C Receive/Transmit Register
#define ADDRI2C R5 ; I2C Address Register
#define DATAI2C R6 ; I2C Data Register
#define BITI2C R7 ; I2C Bit Counter Register

;
; Definitions for I2C bus
RTCADDR1 equ 11010000b ; Adres RTC wpisywania 
RTCADDR2 equ 11010001b; Adres RTC czytania
RTCREG   equ 07h
SCL      equ 001h ; P2.0 controls SCL line (pull-up)
SDA      equ 002h ; P2.1 controls SDA line (pull-up)



ORG 0F000h
RESET mov.w #300h,SP ; Initialize stack-pointer
SetupLCD    mov.b   #LCDON+LCD4MUX+LCDSG0_7,&LCDCTL ; LCD on, 4-Mux, select pins S0-S27
SetupBT     mov.b   #BT_fLCD_DIV32,&BTCTL  ; freqLCD = ACLK/128
SetupIO     mov.b   #0FCh,&P5SEL            ; COMx and Rxx selected

SetupADC12  mov.w   #SHT0_2+ADC12ON,&ADC12CTL0     ; Sampling time, ADC12 on
            mov.w   #SHP,&ADC12CTL1         ; Use sampling timer
            mov.w   #01h,&ADC12IE           ; Enable interrupt
            bis.w   #ENC,&ADC12CTL0         ;
            bis.b   #01h,&P6SEL             ; P6.0 ADC option select

call #Init_Sys ; Initialize system

;;;;;;;;;; Testowanie uk砤du;;;;;;;;;;;;;

mov.b #RTCADDR1,RXTXI2C ; Load RTC WRITE Address
call  #I2C_Start        ; Generate Start Condition
call  #I2C_TX
call  #I2C_Stop         ; Generate Stop Condition

;;;;;;;;;;Wpisywanie danych do RTC;;;;;;;;;;;;;;;;;;

mov.b #RTCADDR1,RXTXI2C ; Reload RTC WRITE Address
call  #I2C_Start        ; Repeat Start
call  #I2C_TX
mov.b #RTCREG,RXTXI2C   ; Load RTC reg Byte
call  #I2C_TX
mov.b #00010000b,RXTXI2C
call  #I2C_TX
call  #I2C_Stop
JMP   ZEGAR
;------------------------------------------------------------------------------
Init_Sys; Subroutine sets up Modules and Control Registers
;------------------------------------------------------------------------------
mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
mov.b #121,&SCFQCTL          ; (121+1) x 2 x 32768 = 7.99 MHz
ret                          ; Return to Main

;------------------------------------------------------------------------------
Write_I2C
;------------------------------------------------------------------------------

mov.b R4,RXTXI2C ; Load Out-Going Data
call #I2C_TX ; Send Data and Acknowledge
ret ; Return from subroutine
;------------------------------------------------------------------------------
I2C_Start; enter SDA=1, SCL=x
; exit SDA=1, SCL=0
;------------------------------------------------------------------------------
bic.b #SCL+SDA,&P2DIR ; SCL and SDA to input direction
bic.b #SCL+SDA,&P2OUT ; SCL=1, SDA=1
bis.b #SDA,&P2DIR ; SDA=0
bis.b #SCL,&P2DIR ; SCL=0
ret
;------------------------------------------------------------------------------
I2C_TX; enter SDA=x, SCL=0
; exit SDA=1, SCL=0
;------------------------------------------------------------------------------
            mov #08,BITI2C ; number of bits to transfer
I2C_TX_Bit  rla.b RXTXI2C ; data bit -> carry
            jc I2C_TX1 ; test carry for 1 or 0
I2C_TX0     bis.b #SDA,&P2DIR ; SDA=0
            jmp I2C_TXx ; Toggle SCL
I2C_TX1     bic.b #SDA,&P2DIR ; SDA=1
            jmp I2C_TXx
I2C_TXx     bic.b #SCL,&P2DIR ; SCL=1
            nop ; delay to meet I2C spec
            nop ;
            bis.b #SCL,&P2DIR ; SCL=0
            dec BITI2C ; all bits read?
            jnz I2C_TX_Bit ; continue until 8 bits are sent
            bic.b #SDA,&P2DIR ; SDA=1, release SDA line for acknowledge
;
TX_Ackn     bic.b #SCL,&P2DIR ; SCL=1
            nop ; delay to meet I2C spec
            nop ;
            bis.b #SCL,&P2DIR ; SCL=0
            ret ; Return from subroutine
;------------------------------------------------------------------------------
I2C_Stop; enter SDA=x, SCL=0
; exit SDA=1, SCL=1
;------------------------------------------------------------------------------
bis.b #SDA,&P2DIR ; SDA = 0
bic.b #SCL,&P2DIR ; SCL = 1
bic.b #SDA,&P2DIR ; SDA = 1
I2C_End ret ; Return from subroutine
ZEGAR:
;-----------------------------------------------------------------------------
        ;    ORG     01100h                  ; Program Start

SetupP1    
           mov.b #0FFh,&P2DIR
           mov.b #0FFh,&P3DIR
           MOV.B #0x00,&P1IFG
           MOV.B #0x00,&P1SEL
           MOV.B #0x00,&P1OUT
           MOV.B #0x04,&P1DIR
           MOV.B #00,&P1IES
           MOV.B #0x01,&P1IE
           
           clr R10
           clr R8
           
            push R6 
            mov #00,R9 
WEITER      mov.b #0x00,LCDMEM(R9) 
            inc R9 
            cmp #20,R9 
            jnz WEITER 
            pop R9 
            clr R9
            clr R4
            clr R5
            clr R6
            clr R7
            call #Zerowanie
            EINT
          
          
 
Mainloop:  BIT.B #01,&P1IFG        ; Testet ob der Interrupt von Bit.0 ausgel鰏t wurde       ; Enter LPM0, enable interrupts
           nop
           nop
           nop
          jmp Mainloop
P1_ISR; 
          
sekundy    BIC.B #01h,&P1IFG     
           
            
            mov.b #6,R13
            call #LCD
            mov.b #7,R13
            mov.b POZ_TAB(R13),R14            ; Toggle P5.1
            mov.b R4,0(R14)
            mov.b #8,R13
            mov.b POZ_TAB(R13),R14            ; Toggle P5.1
            mov.b R4,0(R14)
            RLA R4
            CMP #130,R4
            JGE restart
            
            
            
            jmp dalej
restart    
            mov.b #16,R4
            
dalej                             
           mov.b #6,R13
           ;call #LCD
           INC R10   ;zwieksz sekundy
           bis.b #128,LCDM12
           CMP #11,R10
           JL spr
           dec R13   ;zmien pozycje lcd na 5
           inc R8
           mov.b R8,R10
           call #LCD
           bis.b #128,LCDM12 ; dwukropek
           inc R13   ;zmien pozycje LCD na 6
           CLR R10
           inc R10;;;;
spr        CMP #6,R8
           JEQ Minuty
           jmp wyjscie
Minuty:   
           dec R13    ; zmien pozycje na 5
           CLR R10
           call #LCD  ; wyzeroj lCD na pozycji 5
           inc R5
           mov.b R5,R10
           dec R13    ;zmien pozycje LCD na 4
           call #LCD
           bis.b #128,LCDM16
           INC R10   ;zwieksz minuty
           CMP #11,R10 ; sprawdz
           JL spr1
           clr R5
           mov.b #0,R10
           call #LCD
           dec R13   ;zmien pozycje lcd na 3
           inc R9
           mov.b R9,R10
           call #LCD
           bis.b #128,LCDM16
           CLR R10
           inc R10;;;;
spr1       mov.b #6,R13  ; ustaw na pozycji 6
           clr R8
           clr R10
           inc R10
           CMP #6,R9   ; sprawdz
           JEQ Godziny
           jmp wyjscie
Godziny:   
           clr R9
           mov.b #3,R13    ; zmien pozycje na 3
           CLR R10
           call #LCD  ; wyzeroj lCD na pozycji 3
           inc R6
           mov.b R6,R10
           dec R13    ;zmien pozycje LCD na 2
           call #LCD
           INC R10   ;zwieksz minuty
           CMP #11,R10 ; sprawdz
           JL spr2
           clr R6
           mov.b #0,R10
           call #LCD
           dec R13   ;zmien pozycje lcd na 1
           inc R7
           mov.b R7,R10
           call #LCD
           CLR R10
           inc R10;;;;
spr2       mov.b #6,R13  ; ustaw na pozycji 6
           CMP #2,R7   ; sprawdz wartosc dziesietna godzin
           JEQ godz
           jmp wyjscie
godz       CMP #4,R6 
           call #Zerowanie

wyjscie:    bis.w   #ADC12SC,&ADC12CTL0     ; Start sampling/conversion
            ;bis.w   #GIE,SR          ; LPM0, ADC12_ISR will force exit
            reti


Zerowanie  clr R10
           clr R8
           clr R5
           clr R9
           clr R6
           clr R7
           mov.b #6,R13         ;pozycja wyswietlacza
           mov.b #0,R10
           call # LCD
           dec R13 ;5
           call #LCD
           bis.b #128,LCDM12
           dec R13 ;4
           call #LCD
           dec R13 ;3
           call #LCD
           bis.b #128,LCDM16
           dec R13 ;2
           call #LCD
           dec R13 ;1
           call #LCD
           mov.b #7,R13    ;ustaw spowrotem na pozycje 6
           mov.b #16,R4
           ret
LCD
          
      
            mov.b POZ_TAB(R13),R12
            mov.b #0,R15
            CMP R15,R10
            JEQ zero
            inc R15
            CMP R15,R10
            JEQ jeden
            inc R15
            CMP R15,R10
            JEQ dwa
            inc R15
            CMP R15,R10
            JEQ trzy
            INC R15
            CMP R15,R10
            JEQ cztery
            inc R15
            CMP R15,R10
            JEQ Piec
            inc R15
            CMP R15,R10
            JEQ szesc
            INC R15
            CMP R15,R10
            JEQ siedem
            inc R15
            CMP R15,R10
            JEQ osiem
            inc R15
            CMP R15,R10
            JEQ dziewiec
            inc R15
            CMP R15,R10
            JEQ dziesiec
            
            
zero        mov.b   R12,R11
            inc R11
            mov.b   #240,0(R12)
            mov.b   #96,0(R11)
           
            ret
            
jeden       mov.b   R12,R11
            inc R11
            mov.b   #96d,0(R12)  ;R5- pozycja nieparzystych liczb LCDM   
            mov.b   #00,0(R11)
            ret
            
dwa         mov.b   R12,R11
            inc R11
            mov.b   #210,0(R12)
            mov.b   #36,0(R11)   ;R4- pozycja parzystych liczb LCDM
            ret
            
trzy        mov.b   R12,R11
            inc R11
            mov.b   #242,0(R12)
            mov.b   #000,0(R11)
            ret
            
cztery      mov.b   R12,R11
            inc R11
            mov.b   #98,0(R12)
            mov.b   #68,0(R11)
            ret
            
Piec        mov.b   R12,R11
            inc R11
            mov.b   #178,0(R12)
            mov.b   #68,0(R11)
            ret
            
szesc       mov.b   R12,R11
            inc R11
            mov.b   #178,0(R12)
            mov.b   #100,0(R11)
            ret
            
siedem      mov.b   R12,R11
            inc R11
            mov.b   #224,0(R12)
            mov.b   #0,0(R11)
            ret
            
osiem       mov.b   R12,R11
            inc R11
            mov.b   #242,0(R12)
            mov.b   #100,0(R11)
            ret
            
dziewiec    mov.b   R12,R11
            inc R11
            mov.b   #242,0(R12)
            mov.b   #68,0(R11)
            ret
            
dziesiec    mov.b   R12,R11
            inc R11
            mov.b   #240,0(R12)
            mov.b   #96,0(R11)
           
            ret
            
ADC12_ISR;  Exit any LPMx on reti
           
            mov R4,R13
            bis.w   #ADC12SC,&ADC12CTL0
            mov.b   #01,R14  
	    bis.b   R4,R14
            mov.b   #1,R4
            mov.b   R14,LCDMEM(R4)
            
            cmp.w   #0Ah,&ADC12MEM0       ; ADC12MEM = A0 > 0.5AVcc?
            jl     ADC12_ISR_1             ;
            mov.b   #9,R14
            bis.b   R13,R14
            mov.b   #1,R4
            mov.b   R14,LCDMEM(R4)
            
            
            cmp.w   #3FFh,&ADC12MEM0       ; ADC12MEM = A0 > 0.5AVcc?
            jl     ADC12_ISR_1             ;                   
	    mov.b   #13,R14
            bis.b   R13,R14
            mov.b   #1,R4
            mov.b   R14,LCDMEM(R4)
            
            cmp.w   #08FFh,&ADC12MEM0       ; ADC12MEM = A0 > 0.5AVcc?
            jl     ADC12_ISR_1             ;
	    mov.b   #15,R14
            bis.b   R13,R14
            mov.b   #1,R4
            mov.b   R14,LCDMEM(R4) 
            
ADC12_ISR_1 ;bic.w   #CPUOFF,0(SP)            
            mov R13,R4 
            bic.w   #ADC12SC,&ADC12CTL0
            reti
            
            
POZ_TAB
        
    DB   165   ;1

    DB   163   ;2

    DB   161   ;3

    DB   159   ;4

    DB   157   ;5

    DB   155   ;6

    DB   153   ;7
    
    DB   145    ; antenka 8
    
    DB   146    ; strzalki 9
    
  
    
 ;------------------------------------------------------------------------------
;           Interrupt Vectors
;------------------------------------------------------------------------------
            ORG     0FFEEh                  ; ADC12 Vector
            DW      ADC12_ISR               ;
            ORG     0FFE8h
            DW      P1_ISR 
            ORG     0FFFEh                  ; RESET Vector
            DW      RESET                   ;
            END

⌨️ 快捷键说明

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