fet110_549.s43

来自「msp430p1110」· S43 代码 · 共 70 行

S43
70
字号
#include  "msp430x11x1.h"
;******************************************************************************
;   MSP-FET430x110 Demo - Software SPI Interface TLC549 Set P1.0 if > 0.5*Vcc  
;
;   Description: Read a TLC549 ADC with reference to Vcc using software SPI and 
;   store the 8-bit digital code in ADCData(R11).  The TLC549 is sampled in a 
;   continous loop. If ADCData > 0.5*Vcc, P1.0 set, else reset. 
;   ACLK = n/a, MCLK = SMCLK = default DCO ~ 800k 
;   //** VCC must be at least 3v for TLC549 **//
; 
;                        MSP430F1121
;                     -----------------
;                 /|\|              XIN|-  
;                  | |                 | 
;                  --|RST          XOUT|-
;       TLC549       |                 |
;     ----------     |                 |
;    |        CS|<---|P2.0         P1.0|-->LED
;  ~>| AIN+  CLK|<---|P2.1             |
;    |        DO|--->|P2.3             |    
;
#define     ADCData  R11                  
#define     Counter  R12                  
CS          equ      001h                    ; P2.0 - Chip Select
CLK         equ      002h                    ; P2.1 - Clock
DO          equ      008h                    ; P2.3 - Data Out
;
;   M.Buccini
;   Texas Instruments, Inc
;   January 2002
;*****************************************************************************
;----------------------------------------------------------------------------- 
            ORG     0F000h                  ; Program Start
;----------------------------------------------------------------------------- 
RESET       mov.w   #0300h,SP               ; Initialize 'x112x stack
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop Watchdog Timer
SetupP2     mov.b   #CS,&P2OUT              ; /CS set, - P2.x reset
            bis.b   #CS+CLK,&P2DIR          ; /CS and CLK outputs
SetupP1     bis.b   #001h,&P1DIR            ; P1.0 output
                                            ;
Mainloop    call    #Meas_549               ; Call subroutine
            bic.b   #01h,&P1OUT             ; P1.0 = 0
            cmp.w   #07Fh,ADCData           ; ADCData > 0.5Vcc?
            jlo     Mainloop                ; Again
            bis.b   #01h,&P1OUT             ; P1.0 = 1
            jmp     Mainloop                ; Again
                                            ;
;----------------------------------------------------------------------------- 
Meas_549;   Subroutine to read TLC549, data is shifted into ADCData 
;           (R11), Counter (R12) is used as a bit counter. 
;----------------------------------------------------------------------------- 
            mov.w   #8,Counter              ; 8 data bits
            clr.w   ADCData                 ; Clear data buffer
            bic.b   #CS,&P2OUT              ; /CS reset, enable ADC
ADC_Loop    bit.b   #DO,&P2IN               ; (4) DO -> C (carry)
            rlc.w   ADCData                 ; (1) C -> ADCData
            bis.b   #CLK,&P2OUT             ; (4) Clock high
            bic.b   #CLK,&P2OUT             ; (4) Clock low
            dec.w   Counter                 ; (1) All bits shifted in?
            jnz     ADC_Loop                ; (2) If not --> ADC_Loop
            bis.b   #CS,&P2OUT              ; /CS set, disable ADC 
            ret                             ; Return from subroutine
                                            ;
;----------------------------------------------------------------------------- 
;           Interrupt Vectors Used MSP430x11x1         
;----------------------------------------------------------------------------- 
            ORG     0FFFEh                  ; MSP430 RESET Vector
            DW      RESET                   ; 
            END

⌨️ 快捷键说明

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