?? zj927.s43
字號:
;..................................................................
;
; This program is bulit for the CPCR
; which design by Sixms.
;
; Title: CPCR program
; MCU: Msp430f133
; CREATE by: Sixms
; Company: YIWENKEJI
; SUPPORT TEL: 020-89225322-231
; Version: 1.03A
; Data: 2004/10/1
;
;..................................................................
#include "msp430x13X.h"
;..................................................................
CH1WIDTH EQU 200H
CH1RANGE EQU 202H
CH1FREQ EQU 204H
CH1TIME EQU 206H
CH2WIDTH EQU 208H
CH2RANGE EQU 20AH
CH2FREQ EQU 20CH
CH2TIME EQU 20EH
CH2PULSE EQU 210H
CH3WIDTH EQU 212H
CH3RANGE EQU 214H
CH3FREQ EQU 216H
CH3TIME EQU 218H
CH4WIDTH EQU 21AH
CH4RANGE EQU 21CH
CH4FREQ EQU 21EH
CH4TIME EQU 220H
DELAYTIME EQU 232H
POINTTIMER EQU 234H
SHOWFREQ EQU 236H
SHOWFREQ2 EQU 238H
SHOWFREQ3 EQU 23AH
WAVEFREQ EQU 23CH
WAVETIME EQU 23EH
DADATA EQU 240H
DACONT EQU 241H
KEY_CODE EQU 242H
RELAY_CODE EQU 243H
LED_CODE EQU 244H
STATE EQU 24AH
TIMER1 EQU 24CH
TIMER2 EQU 24DH
TATIMER EQU 24EH
LCDBUF EQU 250H ;250H-255H WAS THE LCDBUF
TIMERDATA EQU 25EH
DOT EQU 270H
S_START EQU 1
S_HELP EQU 2
S_INPHASE EQU 4
S_POINT EQU 8
S_POINTSEL EQU 10H
S_WAVE EQU 20H
S_WAVEGAP EQU 40H
KEY_UP EQU 1
KEY_DOWN EQU 2
KEY_INPHASE EQU 4
KEY_START EQU 5
KEY_HELP EQU 6
KEY_WAVE EQU 7
KEY_TIME EQU 8
KEY_POINT EQU 9
WR EQU 1
S EQU 2
A EQU 4
B EQU 8
CH4 EQU 10H
CH3 EQU 20H
CH2 EQU 40H
CH1 EQU 80H
BAT EQU 1
POWER EQU 2
CSLCD EQU 4
STR EQU 8
D EQU 40H
CLK EQU 80H
CLKLCD EQU 40H
DLCD EQU 80H
A0 EQU 1
A1 EQU 2
A2 EQU 4
A3 EQU 8
A4 EQU 10H
A5 EQU 20H
A6 EQU 40H
A7 EQU 80H
WAVEGAPI EQU 25 ;1 / ( 25 * 2MS ) = 20 Hz
WAVEGAPII EQU 125 ;1 / ( 125 * 2MS) = 4 Hz
WAVEGAPC EQU 5000 ;5000 * 2MS = 10 S
;******************************************************************
ORG 0E000H
RESET MOV.W #300H,SP ;設置堆棧
STOPWDT MOV.W #WDTPW+WDTHOLD,&WDTCTL ;停止看門狗
SETUPCLK
MOV.B #00H,&BCSCTL2 ;
MOV.B #73H,&DCOCTL
SETUPIO MOV.B #0FFH,&P1DIR ;設置各個IO口的輸入輸出方式
MOV.B #0FFH,&P2DIR
MOV.B #0DEH,&P3DIR
MOV.B #030H,&P3SEL ;P3.4,P3.5為串口
MOV.B #0FBH,&P4DIR
MOV.B #0F8H,&P5DIR
MOV.B #000H,&P6DIR
MOV.B #0FFH,&P6SEL ;P6口采用外圍模塊ADC12
BIC.B #0F0H,&P2OUT
BIS.B #POWER,&P3OUT
RESETINI CALL #RESETDA
CALL #RESETTIMER
CALL #RESETHELP
CALL #RESETLCD
MOV #0,&DOT
RESETLED MOV #05508H,&LED_CODE
RESETRELAY BIC.B #0F0H,&P2OUT
MOV.B #01H,&RELAY_CODE
RESETKEY MOV.B #00H,&KEY_CODE
BIS.B #A,&P2OUT
BIC.B #B,&P2OUT
CALL #SETUPTA
MOV #1000,&DELAYTIME
CALL #BZ
JMP MAINLOOP
;---------------------------------------------------------------
RESETHELP
MOV #18,&CH1WIDTH
MOV #0,&CH1RANGE
MOV #375,&CH1FREQ
MOV #0,&CH1TIME
MOV #37,&CH2WIDTH
MOV #0,&CH2RANGE
MOV #1500,&CH2FREQ
MOV #0,&CH2TIME
MOV #4,&CH2PULSE
MOV #18,&CH3WIDTH
MOV #0H,&CH3RANGE
MOV #100,&CH3FREQ
MOV #0,&CH3TIME
MOV #18,&CH4WIDTH
MOV #0H,&CH4RANGE
MOV #100,&CH4FREQ
MOV #0,&CH4TIME
MOV #80,&SHOWFREQ
MOV #20,&SHOWFREQ2
MOV #0,&WAVEFREQ
MOV #0,&WAVETIME
MOV.B #3,&250H
MOV.B #0AH,&251H
MOV.B &SHOWFREQ,&252H
MOV.B &SHOWFREQ2,&253H
MOV.B #00H,&254H
MOV.B #0,&TIMER1
MOV.B #0,&TIMER2
MOV.B #01H,&RELAY_CODE
BIC #0FFFBH,&LED_CODE
BIS #05508H,&LED_CODE ;@@@@@@@@@
BIC #S_START,&STATE
BIS #S_HELP,&STATE
BIC #S_INPHASE,&STATE
BIC #S_WAVE,&STATE
BIC #S_POINT,&STATE
RET
;----------------------------------------------------------------
RESETINPHASE
MOV #18,&CH1WIDTH
MOV #0,&CH1RANGE
MOV #375,&CH1FREQ
MOV #0,&CH1TIME
MOV #37,&CH2WIDTH
MOV #0,&CH2RANGE
MOV #1500,&CH2FREQ
MOV #0,&CH2TIME
MOV #4,&CH2PULSE
MOV #18,&CH3WIDTH
MOV #28H,&CH3RANGE
MOV #0,&CH3TIME
MOV #18,&CH4WIDTH
MOV #0H,&CH4RANGE
MOV #100,&CH4FREQ
MOV #0,&CH4TIME
MOV #80,&SHOWFREQ
MOV #20,&SHOWFREQ2
MOV #750,&WAVEFREQ
MOV #0,&WAVETIME
MOV.B #3,&250H
MOV.B #0AH,&251H
MOV.B &SHOWFREQ,&252H
MOV.B &SHOWFREQ2,&253H
MOV.B #00H,&254H
MOV.B #0,&TIMER1
MOV.B #0,&TIMER2
MOV.B #3,&RELAY_CODE
BIC #0FFFBH,&LED_CODE
BIS #0A502H,&LED_CODE ;@@@@@@@@@@@@@@@@@
BIC #S_HELP,&STATE
BIS #S_INPHASE,&STATE
BIC #S_POINT,&STATE
RET
;---------------------------------------------------------------
RESETPOINT1 MOV #26,&CH1WIDTH
MOV #2DH,&CH1RANGE
MOV #10H,&CH2RANGE
MOV #28H,&CH3RANGE
MOV #0FH,&CH4RANGE
MOV #100,&CH1FREQ
MOV #0,&CH1TIME
MOV #0,&SHOWFREQ
MOV #15,&SHOWFREQ2
MOV #5,&SHOWFREQ3
MOV #3000,&WAVEFREQ
MOV #0,&WAVETIME
MOV #15,&POINTTIMER
MOV.B &POINTTIMER,&TIMER2
MOV.B #60,&TIMER1
MOV.B #0H,&250H
MOV.B #09H,&251H
MOV.B #00H,&252H
MOV.B #5,&253H
MOV.B &POINTTIMER,&254H
MOV #0AAA0H,LED_CODE
BIS.B #S_POINT,&STATE
BIC.B #S_HELP,&STATE
BIC.B #S_WAVE,&STATE
BIC.B #S_INPHASE,&STATE
BIC.B #S_POINTSEL,&STATE
RET
RESETPOINT2 MOV #26,&CH1WIDTH
MOV #34H,&CH1RANGE
MOV #2DH,&CH2RANGE
MOV #32H,&CH3RANGE
MOV #1EH,&CH4RANGE
MOV #100,&CH1FREQ
MOV #0,&CH1TIME
MOV #0,&SHOWFREQ
MOV #15,&SHOWFREQ2
MOV #5,&SHOWFREQ3
MOV #3000,&WAVEFREQ
MOV #0,&WAVETIME
MOV #15,&POINTTIMER
MOV.B &POINTTIMER,&TIMER2
MOV.B #60,&TIMER1
MOV.B #0H,&250H
MOV.B #09H,&251H
MOV.B #00H,&252H
MOV.B #5,&253H
MOV.B &POINTTIMER,&254H
MOV #0AA60H,LED_CODE
BIS.B #S_POINT,&STATE
BIC.B #S_HELP,&STATE
BIC.B #S_INPHASE,&STATE
BIC.B #S_WAVE,&STATE
BIS.B #S_POINTSEL,&STATE
RET
;----------------------------------------------------------------
RESETWAVE MOV.B #0,&250H
MOV.B #9,&251H
MOV.B #20,&252H
MOV.B #04H,&253H
MOV.B &POINTTIMER,&254H
RET
RESETWAVE2
MOV #0,&SHOWFREQ
MOV #15,&SHOWFREQ2
MOV #5,&SHOWFREQ3
MOV #3000,&WAVEFREQ
MOV #0,&WAVETIME
MOV.B &POINTTIMER,&TIMER2
MOV.B #60,&TIMER1
MOV.B #0,&250H
MOV.B #09H,&251H
MOV.B #0,&252H
MOV.B #5,&253H
MOV.B &POINTTIMER,&254H
RET
;----------------------------------------------------------------
RESETLCD MOV.B #3,&250H
MOV.B #0AH,&251H
MOV.B &SHOWFREQ,&252H
MOV.B &SHOWFREQ2,&253H
MOV.B #00H,&254H
CALL #LCD_RESET
RET
;----------------------------------------------------------------
RESETTIMER MOV.B #0,&TIMER1
MOV.B #0,&TIMER2
MOV #1600,&TATIMER
RET
;----------------------------------------------------------------
RESETDA MOV.B #0FFH,&DADATA
MOV.B #0H,&DACONT
CALL #DA
MOV.B #1H,&DACONT
CALL #DA
RET
;----------------------------------------------------------------
SETUPTA MOV.W #TASSEL1+TACLR,&TACTL
SETUPC0 MOV.W #CCIE,&CCTL0
MOV.W &TATIMER,&CCR0
BIS.W #MC0,&TACTL
SETUPTB MOV.W #TBSSEL0+TBCLR,&TBCTL
SETUPTBC0 MOV.W #CCIE,&TBCCTL0
MOV.W #32768,&TBCCR0
BIS.W #MC0,&TBCTL
EINT
RET
;---------------------------------------------------------------
MAINLOOP
CALL #KEY
CALL #LED_CONTROL
CALL #LCD_CONTROL
CALL #MAIN
CALL #BATTER
JMP MAINLOOP
;************************************************************
;
; BATTER
;
;************************************************************
BATTER
BIT.B #BAT,&P3IN
JC BATTER1
BIS.B #4H,&251H
JMP BATTER2
BATTER1 BIC.B #04H,&251H
BATTER2 RET
;************************************************************
;
; MAIN
;
;************************************************************
MAIN BIT #S_POINT,&STATE
JC MAIN1
MOV #85,R11
MOV &CH2PULSE,R12
CALL #MPYU
MOV &CH2FREQ,R11
CALL #DIVIDE
MOV R12,&CH2RANGE
MAIN1
BIT.B #04H,&P4IN
JC MAIN2
BIS.B #04H,&LED_CODE
JMP MAIN3
MAIN2 BIC.B #04H,&LED_CODE
MAIN3
CMP.B #KEY_START,&KEY_CODE
JEQ KEYSTART
CMP.B #KEY_UP,&KEY_CODE
JEQ KEYUP
CMP.B #KEY_DOWN,&KEY_CODE
JEQ KEYDOWN
CMP.B #KEY_HELP,&KEY_CODE
JEQ KEYHELP
CMP.B #KEY_INPHASE,&KEY_CODE
JEQ KEYINPHASE
CMP.B #KEY_WAVE,&KEY_CODE
JEQ KEYWAVE
CMP.B #KEY_POINT,&KEY_CODE
JEQ KEYPOINT
CMP.B #KEY_TIME,&KEY_CODE
JEQ KEYTIME
RET
;----------------------------------------------------------
KEYSTART MOV.B #0,&KEY_CODE
MOV #1000,&DELAYTIME
CALL #BZ
BIT.B #S_START,&STATE
JC KEYSTART1
BIS #S_START,&STATE
BIS.B #04H,&LED_CODE
BIS.B #0F0H,&P2OUT
BIC.B #POWER,&P3OUT
RET
KEYSTART1 BIC #S_START,&STATE
BIC.B #0F0H,&P2OUT
BIC.B #04H,&LED_CODE
BIC.B #080H,&251H
BIS.B #POWER,&P3OUT
RET
;----------------------------------------------------------
KEYUP MOV.B #0,&KEY_CODE
MOV #100,&DELAYTIME
CALL #BZ
BIT #S_HELP,&STATE
JC KEYUP_H1
BIT #S_INPHASE,&STATE
JC KEYUP_H1
BIT #S_POINT,&STATE
JC KEYUP_P
RET
KEYUP_H1
CMP #96,&SHOWFREQ
JHS KEYUP_H2
ADD #04H,&SHOWFREQ
JMP KEYUP_H3
KEYUP_H2 MOV #96,&SHOWFREQ
KEYUP_H3 MOV #1,R11 ;HEART PULSE PREQ * ( 1/4 ) = BREATH PULSE PFEQ
MOV &SHOWFREQ,R12
CALL #MPYU
MOV #4,R11
CALL #DIVIDE
MOV R12,&SHOWFREQ2
MOV #30000,R14 ;30000 / HEART PULSE PREQ = INTERRUPT TIMES
CLR R15
MOV &SHOWFREQ,R11
CALL #DIVIDE
MOV R12,&CH1FREQ
MOV #30000,R14 ;30000 / BREATH PULSE PREQ = INTERRUPT TIMES
CLR R15
MOV &SHOWFREQ2,R11
CALL #DIVIDE
MOV R12,&CH2FREQ
MOV.B &SHOWFREQ,&252H
MOV.B &SHOWFREQ2,&253H
RET
KEYUP_P BIT #S_WAVE,&STATE
JC KEYUP_P4
CMP #20,&SHOWFREQ3
JHS KEYUP_P2
INC &SHOWFREQ3
JMP KEYUP_P3
KEYUP_P2 MOV #20,&SHOWFREQ3
KEYUP_P3 MOV &SHOWFREQ3,R11
DEC R11
MOV.B FREQ_TAB(R11),R11
MOV.B R11,&253H
MOV #500,R14
CLR R15
CALL #DIVIDE
MOV R12,&WAVEFREQ
KEYUP_P4 RET
FREQ_TAB DB 1,2,3,4,5,6,7,8,9,10
DB 15,20,30,40,50,60,70,80,90,99
;---------------------------------------------------------
KEYDOWN MOV.B #0,&KEY_CODE
MOV #100,&DELAYTIME
CALL #BZ
BIT #S_HELP,&STATE
JC KEYDOWN_H1
BIT #S_INPHASE,&STATE
JC KEYDOWN_H1
BIT #S_POINT,&STATE
JC KEYDOWN_P
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -