📄 cv870.asm
字号:
;**************************************************
;DEFINE THE SPECIAL REGISTER
;**************************************************
INDF EQU 0X00
TCC EQU 0X01
PC EQU 0X02
;------------------------------------
STATUS EQU 0X03
C EQU 0 ;CARRY FLAG,1=CARRY
DC EQU 1 ;AUXILIARY CARRY FLAG,1=AUXILIARY CARRY
Z EQU 2 ;ZERO FLAG,1=LOGIC OPERATION IS ZERO
P EQU 3 ;POWER DOWN BIT
T EQU 4 ;TIME-OUT BIT
PS0 EQU 5 ;
PS1 EQU 6 ;PS1-PS0 PAGE SELECT BIT
GP EQU 7 ;GENERAL READ/WRITE BIT
;------------------------------------
FSR EQU 0X04
;------------------------------------
R3F EQU 0X0F
TCIF EQU 0 ;TCC OVERFLOWING INTERRUPT FLAG
ICIF EQU 1
EXIF EQU 2 ;EXTERNAL INTERRUPT FLAG
;------------------------------------
P5 EQU 0X05
SDA EQU 1
SCK EQU 2
SCE EQU 3
P6 EQU 0X06
KEY EQU 1
IOCB EQU 0X0B ;ENABLE THE WAKE-UP FUNCTION OF P6 PORT
IOCC EQU 0X0C
IOCD EQU 0X0D
;-------------------------------------
IOCE EQU 0X0E ;WDT CONTROL REGISTER
WUE EQU 0 ;ENABLE WAKE-UP FUNCTION OF P74~P75,0=ENABLE,1=DISABLE
ROC EQU 3 ;R-OPTION SETTING,1=ENABLE,0=DISABLE
SLPC EQU 4
WDTE EQU 5 ;ENABLE WDT TIMER,0=DISABLE,1=ENABLE
ODE EQU 6 ;OPEN-DRAIN OF P76 AND P77 PINS,0=DISABLE,1=ENABLE
;---------------------------------------
IOCF EQU 0X0F ;INTERRUPT MASK REGISTER
TCIE EQU 0 ;TCIF INTERRUPT ENABLE BIT,0=DISABLE,1=ENABLE
ICIE EQU 1
EXIE EQU 2 ;EXIF INTERRUPT ENABLE BIT,0=DISABLE,1=ENABLE
;---------------------------------------
CONT EQU 0X01
;**************************************************
;DEFINE THE GENERAL PURPOSE REGISTER
;**************************************************
COUNT EQU 0X10
TEMP EQU 0X11
flag EQU 0X12
key_up EQU 0
flag_setup EQU 0X13
;**************************************************
;FOLLOWING IS THE PROGRAM AREA
;**************************************************
ORG 0X000 ;
JMP MAIN
ORG 0X008 ;HARDWARE INTERRUPT ADDRESS
JMP HW_INT ;HARDWARE INTERRUPT
ORG 0X010
;***************************************************
;THE HARDWARE INTERRUPT PROGRAM(/INT)
;USED REGISTER:
;WRITE BY liguangtao
;2005-08-16
;***************************************************
HW_INT:
RETI
;***************************************************
;THE MAIN PROGRAM
;WRITE BY liguangtao
;2005-08-16
;***************************************************
MAIN:
NOP
CALL INIT_MCU
MAIN_PROCESS:
CALL delay_20ms
BS P5,0
JBC flag,key_up
jmp Frequ_setup1
JBC P6,KEY
jmp Frequ_setup0
BS flag,key_up
BC flag,5
BC STATUS,C
RRC flag_setup
JBC STATUS,C
BS flag_setup,3
jmp Frequ_setup_end
Frequ_setup0:
BC flag,key_up
jmp Frequ_setup_end
Frequ_setup1:
CALL delay_20ms
CALL delay_20ms
JBC P6,KEY
BC flag,key_up
Frequ_setup_end:
JBC flag,5
jmp MAIN_PROCESS
BS flag,5
CALL delay_20ms
BC P5,0
CALL delay_20ms
mode_1:
JBS flag_setup,0
JMP mode_2
CALL delay_20ms
BS P5,SCE
CALL delay_6us
CALL delay_6us
MOV A,@0X62
CALL SendData
MOV A,@0X69
CALL SendData
MOV A,@0XDC
CALL SendData
MOV A,@0X9C
CALL SendData
CALL delay_6us
CALL delay_6us
BC P5,SCE
CALL delay_2us
BS P5,SCK
BS P5,SDA
JMP MAIN_PROCESS
mode_2:
JBS flag_setup,3
JMP mode_3
CALL delay_20ms
BS P5,SCE
CALL delay_6us
CALL delay_6us
MOV A,@0X62
CALL SendData
MOV A,@0X6B
CALL SendData
MOV A,@0X1C
CALL SendData
MOV A,@0X9C
CALL SendData
CALL delay_6us
CALL delay_6us
BC P5,SCE
CALL delay_2us
BS P5,SCK
BS P5,SDA
JMP MAIN_PROCESS
mode_3:
JBS flag_setup,2
JMP mode_4
CALL delay_20ms
BS P5,SCE
CALL delay_6us
CALL delay_6us
MOV A,@0X62
CALL SendData
MOV A,@0X6C
CALL SendData
MOV A,@0X5C
CALL SendData
MOV A,@0X9C
CALL SendData
CALL delay_6us
CALL delay_6us
BC P5,SCE
CALL delay_2us
BS P5,SCK
BS P5,SDA
JMP MAIN_PROCESS
mode_4:
JBS flag_setup,1
JMP MAIN_PROCESS
CALL delay_20ms
BS P5,SCE
CALL delay_6us
CALL delay_6us
MOV A,@0X62
CALL SendData
MOV A,@0X6D
CALL SendData
MOV A,@0X9C
CALL SendData
MOV A,@0X9C
CALL SendData
CALL delay_6us
CALL delay_6us
BC P5,SCE
CALL delay_2us
BS P5,SCK
BS P5,SDA
JMP MAIN_PROCESS
;***************************************************
;INITIALIZE THE MCU
;WRITE BY MARK.PENG
;2003-12-14
;***************************************************
INIT_MCU:
DISI ;DISABLE INTERRUPT
MOV A,@0B01000111 ;@0X07
CONTW
MOV A,@0B00000000 ;SET I/O DIRECTION,1=INPUT,0=OUTPUT
IOW P5
MOV A,@0B11111111
IOW P6
MOV A,@0XFF
IOW IOCB
MOV A,@0X00
IOW IOCC
MOV A,@0X00
IOW IOCD
MOV A,@0X00
IOW IOCE
MOV A,@0X00
IOW IOCF
MOV A,@0X11
MOV FSR,A
MOV A,@0X1F
MOV COUNT,A
CLR_GENERAL_REG: ;CLEAR ALL OF THE USER'S RAM
CLR INDF
INC FSR
DJZ COUNT
JMP CLR_GENERAL_REG
CLR_GENERAL_REG_END:
BS flag_setup,0
BC P5,SCE
BS P5,SCK
BS P5,SDA
ENI
RET
;***************************************************
;INITIALIZE THE MCU
;WRITE BY MARK.PENG
;2003-12-14
;***************************************************
SendData:
MOV TEMP,A
MOV A,@0x08
MOV count,a
LOOP1:
BC P5,SCK
call delay_2us
RLC TEMP
JBC STATUS,C
BS P5,sda
JBS STATUS,C
BC P5,sda
call delay_2us
BS P5,SCK
call delay_4us
DJZ count
JMP LOOP1
RET
;*****************************************************************
;used: the delay for key
;reg:
;wrt: ProBoy
;date: 2001.07.03
;*****************************************************************
delay_20ms:
MOV A,@0XC0
MOV COUNT,A
LOOP:
CALL delay_6us
DJZ COUNT
JMP LOOP
RET
delay_6us:
JMP $+1
JMP $+1
delay_5us:
JMP $+1
JMP $+1
delay_45us:
delay_4us:
JMP $+1
JMP $+1
JMP $+1
delay_3us:
JMP $+1
JMP $+1
JMP $+1
delay_2us:
JMP $+1
JMP $+1
JMP $+1
JMP $+1
ret
;----------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -