📄 cst0015.asm
字号:
;Update : 2006-7-26 9:42
;Power on device is working
;LST=CM8A21
;Fosc =IRC455kHz , SYSTEM CLK = 455MHz/2 = 4.3956us
W EQU 00H
R EQU 01H
FSR_D EQU 00H
TCC EQU 01H
PCL EQU 02H
STATUS EQU 03H
C EQU 0
DC EQU 1
Z EQU 2
PD EQU 3
TO EQU 4
GP0 EQU 5
GP1 EQU 6
GP2 EQU 7
FSRP EQU 04H
CMPCON EQU 07H
;IOST
PA EQU 05H
CLOCK EQU 3
PB EQU 06H
IR EQU 5
UP_DN EQU 6
OUT EQU 7 ;UART Output port
PCON EQU 0AH
AWUCON EQU 0BH
BWUCON EQU 0CH
IRCYCLE EQU 0DH
IRDUTY EQU 0EH
R10 EQU 010H
DLY_DT0 EQU 011H
DLY_DT1 EQU 012H
LOOP_TIME EQU 013H
KEY_REG EQU 015H
HAVE_KEY_REG EQU 016H
HAVE_HOLD_REG EQU 017H
CODE_H EQU 018H
CODE_L EQU 019H
DATA_H EQU 01AH
DATA_L EQU 01BH
NOP_TEMP EQU 01CH
LOOP_REG EQU 01DH
DATA_TEMP EQU 01EH
DATA_FLAG EQU 01FH
SAVE_KEY_REG EQU 020H
BIT_DATA EQU 021H
CHECK_SUM EQU 022H
SAVE_TIMER EQU 023H
KEY_RELEASE_REG EQU 024H
HOLD_REG EQU 025H
TEMP1 EQU 026H
LENGTH_DATA EQU 027H
ON_OFF EQU 028H
;***********************************************
ORG 01FFH
LGOTO POWER_ON
ORG 000H
;*********************************
IR_KEY_TAB_1: ;CHECK_IR_DATA_H
ADDAR PCL,1
RETIA 011H ;0-PLAY
RETIA 0DH ;1-VOL+
RETIA 015H ;2-VOL-
RETIA 012H ;3-NEXT
RETIA 010H ;4-PREV
RETIA 09H ;5-MUTE
RETIA 0AH ;6-SHUF
RETIA 08H ;7-REPEAT
RETIA 02H ;8-MENU
RETIA 05H ;9-SELCT
RETIA 00H ;A-POWER
RETIA 04H ;B- UP
RETIA 06H ;C- DN
IPOD_TAB_1:
ADDAR PCL,1
RETIA 01H ;0-PLAY
RETIA 02H ;1-VOL+
RETIA 04H ;2-VOL-
RETIA 08H ;3-NEXT
RETIA 010H ;4-PREV
RETIA 04H ;5-MUTE
RETIA 080H ;6-SHUF
RETIA 01H ;7-REPEAT
RETIA 040H ;8-MENU
RETIA 080H ;9-SELCT
RETIA 02H ;A-POWER ON
RETIA 01H ;B- UP
RETIA 02H ;C- DN
IPOD_TAB_2:
ADDAR PCL,1
RETIA 0FAH ;0-PLAY
RETIA 0F9H ;1-VOL+
RETIA 0F7H ;2-VOL-
RETIA 0F3H ;3-NEXT
RETIA 0EBH ;4-PREV
RETIA 0F6H ;5-MUTE
RETIA 07AH ;6-SHUF
RETIA 0F8H ;7-REPEAT
RETIA 0B9H ;8-MENU
RETIA 079H ;9-SELCT
RETIA 0F7H ;A-POWER ON
RETIA 0F7H ;B- UP
RETIA 0F6H ;C- DN
CHECK_KEY:
MOVIA 0DH
SUBAR KEY_REG,0
BTRSC STATUS,C
LGOTO MAIN_LOOP
MOVR KEY_REG,0
LCALL IPOD_TAB_1
MOVAR BIT_DATA
MOVR KEY_REG,0
LCALL IPOD_TAB_2
MOVAR CHECK_SUM
MOVIA 003H ;3 CMD
MOVAR LENGTH_DATA
MOVIA 01H
SUBAR KEY_REG,0
BTRSC STATUS,Z
LGOTO DO_VOL_ADD_KEY
MOVIA 02H
SUBAR KEY_REG,0
BTRSC STATUS,Z
LGOTO DO_VOL_SUB_KEY
MOVIA 05H
SUBAR KEY_REG,0
BTRSS STATUS,C
LGOTO DA_TO_IPOD
MOVIA 004H ;4 CMD
MOVAR LENGTH_DATA
MOVIA 07H
SUBAR KEY_REG,0
BTRSS STATUS,C
LGOTO DA_TO_IPOD
MOVIA 006H ;6 CMD
MOVAR LENGTH_DATA
MOVIA 0BH
SUBAR KEY_REG,0
BTRSC STATUS,C
LGOTO DA_TO_IPOD
MOVIA 005H ;5 CMD
MOVAR LENGTH_DATA
MOVIA 00AH
SUBAR KEY_REG,0
BTRSS STATUS,Z
LGOTO DA_TO_IPOD
BTRSS ON_OFF,0
LGOTO DA_TO_IPOD
MOVIA 04H ;POWER OFF
MOVAR BIT_DATA
MOVIA 0F5H
MOVAR CHECK_SUM
LGOTO DA_TO_IPOD
;*********************************
POWER_ON:
NOP
CLRWDT
MOVIA 020H ;00100000H
IOST PCON ;Disable WDT/IROUT
;NORMAL/PB.0 is Input pin
;Enable LVDT
MOVIA 000H
IOST PA ;PA SET OUTPUT
MOVIA 0F7H ;PA3 OUTPUT 0
MOVAR PA
MOVIA 023H ;PB0\PB1SET INPUT,PB2\PB3\PB4\PB5\PB6\PB7 is OUTPUT
IOST PB
MOVIA 08BH ;1000,1011
MOVAR PB
MOVIA 000H
OPTION
MOVIA 000H
IOST AWUCON ;Disable the input falling wake-up function of PA
MOVIA 03H ;Enable the input falling wake-up function of PB.0~PB.1
IOST BWUCON
LCALL DELAY_10MS
LCALL DELAY_10MS
LCALL DELAY_10MS
LCALL DELAY_10MS
CLRR ON_OFF
;---------------------------------------------------------
MAIN_LOOP:
MOVIA 023H ;0010 0011
IOST PB
MOVIA 0FFH
MOVAR PB
CLRR LOOP_TIME
CLRR KEY_RELEASE_REG
MOVIA 0FFH
MOVAR KEY_REG
MOVAR SAVE_KEY_REG
LCALL SCAN_KEY
BTRSC HAVE_KEY_REG,1
LGOTO CHECK_KEY
LCALL SCAN_IR
BTRSC HAVE_KEY_REG,0
LGOTO CHECK_KEY
LGOTO MAIN_LOOP
;---------------------------------
DA_TO_IPOD:
MOVIA 0FFH ; 0XFF 0x55 0x03 0x02 0x00 0x10 0xEB
MOVAR R10
LCALL SENT_A_BYTE
;
MOVIA 055H
MOVAR R10
LCALL SENT_A_BYTE
;
MOVR LENGTH_DATA,0
MOVAR R10
LCALL SENT_A_BYTE
;
MOVIA 002H
MOVAR R10
LCALL SENT_A_BYTE
;
MOVIA 003H
SUBAR LENGTH_DATA,1
SUB_NEXT:
MOVIA 000H
MOVAR R10
LCALL SENT_A_BYTE
MOVR LENGTH_DATA,0
BTRSC STATUS,Z
LGOTO SENT_NEXT
DECR LENGTH_DATA,1
LGOTO SUB_NEXT
;
SENT_NEXT:
MOVR BIT_DATA,0
MOVAR R10
LCALL SENT_A_BYTE
;
MOVR CHECK_SUM,0
MOVAR R10
LCALL SENT_A_BYTE
;
LCALL DELAY_10MS
BCR PA,CLOCK
BTRSC KEY_RELEASE_REG,0
LGOTO MAIN_LOOP
;
LOOSE_KEY:
BTRSC HAVE_KEY_REG,0
GOTO CHECK_LOOSE_IR_KEY
CHEK_LOOSE_KEY:
LCALL SCAN_KEY
BTRSC HAVE_KEY_REG,1
LGOTO CHECK_KEY
LGOTO KEY_RELEASE
CHECK_LOOSE_IR_KEY:
CLRR TCC
MOVIA 07H ;256分频
OPTION
SCAN_108MS:
CLRWDT ;检测108MS内看有没有松开按键
LCALL SCAN_IR
BTRSC HAVE_KEY_REG,0
LGOTO CHECK_KEY
MOVIA 060H ;96*256*4.3956=108ms
SUBAR TCC,0
BTRSS STATUS,C
LGOTO SCAN_108MS
LGOTO KEY_RELEASE
;=====================================================
DO_VOL_ADD_KEY:
;BTRSC HAVE_KEY_REG,0
;LGOTO ADD_2111
MOVIA 00H
SUBAR LOOP_TIME,0
BTRSS STATUS,Z
LGOTO ADD_IPOD
ADD_2111:
BSR PB,UP_DN ;ADD THE VOLUME FOR HWD2111
BCR PA,CLOCK
NOP
BSR PA,CLOCK
ADD_IPOD:
BTRSC HAVE_KEY_REG,0
LGOTO TIME_1
INCR LOOP_TIME,1
BTRSC LOOP_TIME,4
CLRR LOOP_TIME
LGOTO ADD_IPOD_1
TIME_1: INCR LOOP_TIME,1
BTRSC LOOP_TIME,1
CLRR LOOP_TIME
ADD_IPOD_1:
;MOVIA 02H ;0XFF 0x55 0x03 0x02 0x00 0x02 0xF9
;MOVAR BIT_DATA
;MOVIA 0F9H
;MOVAR CHECK_SUM
LGOTO DA_TO_IPOD
;====================================================
DO_VOL_SUB_KEY:
MOVIA 00H
SUBAR LOOP_TIME,0
BTRSS STATUS,Z
LGOTO ADD_IPOD
SUB_2111:
BCR PB,UP_DN ;SUB THE VOLUME FOR HWD2111
BCR PA,CLOCK
NOP
BSR PA,CLOCK
LGOTO ADD_IPOD
;====================================================
;DO_NEXT_KEY:
; MOVIA 08H ;0XFF 0x55 0x03 0x02 0x00 0x08 0xF3
; MOVAR BIT_DATA
; MOVIA 0F3H
; MOVAR CHECK_SUM
; LGOTO DA_TO_IPOD
;====================================================
;DO_PRE_KEY:
; MOVIA 010H
; MOVAR BIT_DATA
; MOVIA 0EBH
; MOVAR CHECK_SUM
; LGOTO DA_TO_IPOD
;============================================================
KEY_RELEASE:
CLRR LOOP_TIME
BCR PA,CLOCK
BSR PB,UP_DN
MOVIA 0FFH
MOVAR PB
BSR KEY_RELEASE_REG,0
MOVIA 00H ;+ 0XFF 0x55 0x03 0x02 0x00 0x00 0xFB
MOVAR BIT_DATA
MOVIA 0FBH
MOVAR CHECK_SUM
MOVIA 03H
MOVAR LENGTH_DATA
LGOTO DA_TO_IPOD
;========================================9600
SENT_A_BYTE:
BCR PB,OUT ;START BIT
MOVIA 08H
MOVAR NOP_TEMP
NOP
NOP
NOP
SEN: LCALL DELAY_13US
RRR R10,1 ;SENT 8BIT DATA
BTRSS STATUS,C
LGOTO SKIP_0
SKIP_1: NOP
BSR PB,OUT
LGOTO CH_8BIT
SKIP_0: BCR PB,OUT
NOP
NOP
CH_8BIT:
DECRSZ NOP_TEMP,1
LGOTO SEN
LCALL DELAY_23US_1
NOP
NOP
BSR PB,OUT ;STOP BIT
LCALL DELAY_23US_1
RETURN
;=================================
DELAY_13US: ;23-10=13
MOVIA 002H ;2+2+3*2-1+2+2=13
MOVAR DLY_DT0
DLY52US_LP1:
DECRSZ DLY_DT0,001H
LGOTO DLY52US_LP1
NOP
NOP
RETURN
DELAY_23US_1: ;2+4+3*3-1+2=16
NOP
NOP
MOVIA 003H
MOVAR DLY_DT0
DLY52US1_LP1:
DECRSZ DLY_DT0,001H
LGOTO DLY52US1_LP1
RETURN
;=================================
DELAY_10MS:
MOVIA 005H
MOVAR DLY_DT1
DELAY_10MS_LP1:
MOVIA 05BH ;91*5=455*5*4.3956=10ms
MOVAR DLY_DT0
DELAY_10MS_LP0:
NOP
NOP
DECRSZ DLY_DT0,001H
LGOTO DELAY_10MS_LP0
DECRSZ DLY_DT1,001H
LGOTO DELAY_10MS_LP1
RETURN
;========================================
SCAN_IR: BTRSC PB,IR
LGOTO RET_IR_1
CLRR LOOP_REG
CLRR DATA_TEMP
CLRR CODE_H
CLRR CODE_L
CLRR DATA_H
CLRR DATA_L
MOVIA 01H
MOVAR DATA_FLAG
MOVR TCC,0
MOVAR SAVE_TIMER
CLRR TCC
MOVIA 03H ;16
OPTION
CHECK_READER_L: CLRWDT
BTRSC PB,IR
LGOTO LOAD_READER_L
MOVIA 09CH ;156*16*4.3956=11000us
SUBAR TCC,0
BTRSC STATUS,C
LGOTO RET_IR ;>=156
LGOTO CHECK_READER_L
LOAD_READER_L:
MOVR TCC,0
MOVAR NOP_TEMP
CLRR TCC
MOVIA 03H ;16
OPTION
MOVIA 063H ;99*16*4.3956=7000us
SUBAR NOP_TEMP,0
BTRSS STATUS,C
LGOTO RET_IR ;<63
CHECK_READER_H: CLRWDT
BTRSS PB,IR
LGOTO LOAD_READRE_H
MOVIA 05CH ;92*16*4.3956=6470us
SUBAR TCC,0
BTRSC STATUS,C
LGOTO RET_IR ;>92
LGOTO CHECK_READER_H
LOAD_READRE_H: MOVR TCC,0
MOVAR NOP_TEMP
CLRR TCC
MOVIA 00H ;2
OPTION
MOVIA 032H ;50*16*4.3956=3500us
SUBAR NOP_TEMP,0
BTRSC STATUS,C
LGOTO RECEIVE_DATA_CODE;>3500us
MOVIA 015H ;21*16*4.3956=1500us
SUBAR NOP_TEMP,0
BTRSC STATUS,C
LGOTO REPEAD_KEY ;>1500us
LGOTO RET_IR
REPEAD_KEY:
CLRWDT
BTRSC PB,IR
LGOTO REPEAD_KEY_H
MOVIA 062H ;98*2*4.3956=860uS
SUBAR TCC,0
BTRSC STATUS,C
LGOTO RET_IR ;>=860us
LGOTO REPEAD_KEY
REPEAD_KEY_H: MOVIA 01DH ;29*2*4.3956=260us
SUBAR TCC,0
BTRSS STATUS,C
LGOTO RET_IR ;<360uS
MOVR SAVE_KEY_REG,0 ;有重复按键
MOVAR KEY_REG
BSR HAVE_KEY_REG,0
BCR HAVE_KEY_REG,1
RETIA 0
;========================================================
; Receive data
;========================================================
RECEIVE_DATA_CODE:
CLRWDT
BTRSC PB,IR
LGOTO READ_CODE_L
MOVIA 062H ;98*2*4.3956=860uS
SUBAR TCC,0
BTRSC STATUS,C
LGOTO RET_IR ;>=860us
LGOTO RECEIVE_DATA_CODE
READ_CODE_L:
MOVR TCC,0
MOVAR NOP_TEMP
CLRR TCC
MOVIA 00H ;2
OPTION
MOVIA 01DH ;29*2*4.3956=260us
SUBAR NOP_TEMP,0
BTRSS STATUS,C
LGOTO RET_IR ;<260uS
ADJ_0_1: CLRWDT
BTRSS PB,IR
LGOTO READ_CODE_H
MOVIA 0E3H ;227*2*4.3956=2.000mS
SUBAR TCC,0
BTRSS STATUS,C
LGOTO ADJ_0_1
LGOTO RET_IR ;>=2000uS
READ_CODE_H:
MOVR TCC,0
MOVAR NOP_TEMP
CLRR TCC
MOVIA 00H ;2
OPTION
MOVIA 01DH ;29*2*4.3956=260us
SUBAR NOP_TEMP,0
BTRSS STATUS,C
LGOTO RET_IR
COM_0_1: CLRWDT
MOVIA 08CH ;140*4*2=1.120mS
SUBAR NOP_TEMP,0
RRR DATA_TEMP,1;if260US<nop_temp<1.120MS,c=0;if1.120MS=<nop_temp<2.0MS,c=1
INCR LOOP_REG,1
BTRSS LOOP_REG,3 ;8
LGOTO RECEIVE_DATA_CODE
CLRR LOOP_REG
BTRSC DATA_FLAG,0
LGOTO LOAD_CODE_H
BTRSC DATA_FLAG,1
LGOTO LOAD_CODE_L
BTRSC DATA_FLAG,2
LGOTO LOAD_DATA_H
BTRSC DATA_FLAG,3
LGOTO LOAD_DATA_L
LGOTO RET_IR
LOAD_CODE_H: MOVR DATA_TEMP,0
MOVAR CODE_H
BCR STATUS,C
RLR DATA_FLAG,1
LGOTO RECEIVE_DATA_CODE
LOAD_CODE_L: MOVR DATA_TEMP,0
MOVAR CODE_L
BCR STATUS,C
RLR DATA_FLAG,1
LGOTO RECEIVE_DATA_CODE
LOAD_DATA_H: MOVR DATA_TEMP,0
MOVAR DATA_H
BCR STATUS,C
RLR DATA_FLAG,1
LGOTO RECEIVE_DATA_CODE
LOAD_DATA_L: MOVR DATA_TEMP,0
MOVAR DATA_L
CHECK_IR_KEY: MOVIA 00H ;用户码为00FF
SUBAR CODE_H,0
BTRSS STATUS,Z
LGOTO RET_IR
MOVIA 0FFH
SUBAR CODE_L,0
BTRSS STATUS,Z
LGOTO RET_IR
CHECK_IR_DATA: CLRR KEY_REG
LOOP_CHECK: MOVR KEY_REG,0
LCALL IR_KEY_TAB_1
MOVAR TEMP1
SUBAR DATA_H,0
BTRSC STATUS,Z
LGOTO HAVE_IR
INCR KEY_REG,1
MOVIA 0DH
SUBAR KEY_REG,0
BTRSC STATUS,C
LGOTO RET_IR
LGOTO LOOP_CHECK
HAVE_IR: MOVIA 0FFH
XORAR TEMP1,0
SUBAR DATA_L,0
BTRSS STATUS,Z
LGOTO RET_IR
HAVE_IR_RET: MOVIA 0AH
SUBAR KEY_REG,0
BTRSS STATUS,Z
GOTO IPOD_POWER_ON
MOVIA 01H
XORAR ON_OFF,1
GOTO IR_KEY_NEXT
IPOD_POWER_ON: BCR ON_OFF,0
IR_KEY_NEXT: BSR HAVE_KEY_REG,0
MOVR KEY_REG,0
MOVAR SAVE_KEY_REG ;SAVE TO CKECK REPEAT KEY
RETIA 0
RET_IR: MOVR SAVE_TIMER,0
MOVAR TCC
MOVIA 07H ;256分频
OPTION
RET_IR_1: CLRWDT
CLRR HAVE_KEY_REG
MOVIA 0FFH
MOVAR KEY_REG
RETIA 0
;=================================================================================
SCAN_KEY: MOVIA 023H
IOST PB
MOVIA 0FFH
MOVAR PB
BTRSS PB,0
GOTO NO_KEY_RET
MOVIA 0EBH
MOVAR PB
BTRSS PB,0
GOTO DELAY_20MS
BTRSS PB,1
GOTO DELAY_20MS
LGOTO NO_KEY_RET
NO_KEY_RET: CLRR HAVE_KEY_REG
MOVIA 0FFH
MOVAR KEY_REG
RETIA 0
DELAY_20MS: BTRSC HAVE_KEY_REG,1
RETIA 0
LCALL DELAY_10MS
LCALL DELAY_10MS
CLRR KEY_REG
MOVIA 0FFH
MOVAR PB
BTRSS PB,0
GOTO NO_KEY_RET
MOVIA 0FFH
MOVAR PB
BTRSS PB,1
GOTO HAVE_KEY_RET
INCR KEY_REG,1
MOVIA 0EFH
MOVAR PB
BTRSS PB,0
GOTO HAVE_KEY_RET
INCR KEY_REG,1
BTRSS PB,1
LGOTO HAVE_KEY_RET
INCR KEY_REG,1
MOVIA 0FBH
MOVAR PB
BTRSS PB,0
LGOTO HAVE_KEY_RET
INCR KEY_REG,1
BTRSS PB,1
LGOTO HAVE_KEY_RET
LGOTO NO_KEY_RET
HAVE_KEY_RET: BSR HAVE_KEY_REG,1
RETIA 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -