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

📄 cst0015.asm

📁 ipod MP3 30管脚 接口通信Demp源程序
💻 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 + -