📄 432_line_in_main_16m20060117.dt
字号:
INCLUDE "ET44M210_REG.H"
ORG 0X0000
JMP START
org 0x400
;********************************************************
INCLUDE "DEFINE_REG.H"
INCLUDE "ET83X432_CODEC.INC"
INCLUDE "K9F2808U0C.INC"
;********************************************************
START:
CALL IO_INITIAL
KEY_SCAN:
;JBC VOL_PORT,VOL_INC,$
;JBC VOL_PORT,VOL_DEC,$
;JBC KEY_PORT,PREV,$
;JBC KEY_PORT,MODE,$
JBS KEY_PORT,PLAY_STOP,$+3
CALL CHECK_PLAY_STOP_KEY
JBS KEY_PORT,MODE,$+3
CALL CHECK_MODE_KEY
JMP KEY_SCAN
;***********************************************************************************
CHECK_PLAY_STOP_KEY:
CALL CHECK_KEY_IN
MOV A,MEMORY_KEY_VALUE
SUB A,#00 ;MEMORY_KEY_VALUE==0 INDICATES KEY IN
JBC STATUS,Z,PLAY_STOP_KEY_OFF
WAIT_PLAY_STOP_KEY_RELEASE: ;KEY IN WAIT IT RELEASE
JBC KEY_PORT,PLAY_STOP,$
JMP MUSIC_PLAY
PLAY_STOP_KEY_OFF:
RET ;NO KEY IN,RETURN SCAN NEXT KEY
;***********************************************************************************
CHECK_MODE_KEY:
CALL CHECK_KEY_IN
MOV A,MEMORY_KEY_VALUE
SUB A,#0 ;MEMORY_KEY_VALUE==0 INDICATES KEY IN
JBS STATUS,Z,MODE_KEY_OFF
WAIT_MODE_KEY_RELEASE_FOR_START: ;KEY IN WAIT IT RELEASE
JBC KEY_PORT,MODE,$
JMP LINE_IN
MODE_KEY_OFF:
RET ;NO KEY IN,RETURN SCAN NEXT KEY
;***********************************************************************************
;***********************************************************************************
CHECK_KEY_IN:
MOV A,KEY_PORT
MOV MEMORY_KEY_VALUE,A
CALL DELAY_30mS
MOV A,MEMORY_KEY_VALUE
SUB A,KEY_PORT
JBS STATUS,Z,KEY_IN ;PRESS A KEY
NO_KEY_IN:
MOV A,#1 ;NO PRESS KEY
MOV MEMORY_KEY_VALUE,A
RET ;
KEY_IN:
CLR MEMORY_KEY_VALUE ;PRESS KEY
RET
;***********************************************************************************
LINE_IN:
ERASE_256_BLOCK:
CALL ZERO_ADDRESS
MOV A,#0X00
MOV BLOCK_ADDRESS_LOW,A
MOV A,#0X00
MOV BLOCK_ADDRESS_HIGH,A
MOV A,#00//10 ;00 erase 256 block
MOV MAX_BLOCK_NUM,A
CLR BLOCK_COUNT
CALL ERASE_MAX_NUM_BLOCK
;CALL ZERO_ADDRESS
;CALL READ_FIRST_HALF_PAGE_TO_BANK
CALL LINE_IN_SET_AND_START
CALL ZERO_ADDRESS
NEXT_512BYTES:
CALL READ_512_BYTES_FROM_FIFO
CALL PROGRAM_ONE_PAGE_FROM_BANK
CALL INC_PAGE_ADDRESS
SCAN_MODE_KEY_STOP_LINE_IN:
JBS KEY_PORT,MODE,NEXT_512BYTES
CALL CHECK_KEY_IN
MOV A,MEMORY_KEY_VALUE
SUB A,#0 ;MEMORY_KEY_VALUE==0 INDICATES KEY IN
JBS STATUS,Z,WAIT_MODE_KEY_RELEASE_FOR_STOP
JMP NEXT_512BYTES
WAIT_MODE_KEY_RELEASE_FOR_STOP:
JBC KEY_PORT,MODE,$
CALL DELAY_60MS
JMP LINE_IN_STOP
;***********************************************************************************
;***********************************************************************************
LINE_IN_STOP:
CALL StopCodecEncode
CALL ZERO_ADDRESS
CALL READ_FIRST_HALF_PAGE_TO_BANK
JMP KEY_SCAN
RET
;***********************************************************************************
MUSIC_PLAY:
CALL PLAY_SET_AND_START
CALL ZERO_ADDRESS
PLAY_NEXT_512BYTES:
CALL READ_FIRST_HALF_PAGE_TO_BANK
CALL INC_PAGE_ADDRESS
CALL WRITE_512_BYTES_TO_FIFO
SCAN_PLAY_KEY_STOP_PLAY:
JBS KEY_PORT,PLAY_STOP,PLAY_NEXT_512BYTES
CALL CHECK_KEY_IN
MOV A,MEMORY_KEY_VALUE
SUB A,#0 ;MEMORY_KEY_VALUE==0 INDICATES KEY IN
JBS STATUS,Z,WAIT_PLAY_KEY_RELEASE_FOR_PAUSE
JMP PLAY_NEXT_512BYTES
WAIT_PLAY_KEY_RELEASE_FOR_PAUSE:
JBC KEY_PORT,PLAY_STOP,$
CALL DELAY_60MS
JMP PLAY_STOP
;***********************************************************************************
;***********************************************************************************
PLAY_PAUSE:
CALL StopCodecDecode
JMP KEY_SCAN
INC_PAGE_ADDRESS:
INC ROW_ADDRESS_LOW
JBS STATUS,C,INCREMENT_ROW_ADDRESS_HIGH
JMP INC_PAGE_ADDRESS_END
INCREMENT_ROW_ADDRESS_HIGH:
INC ROW_ADDRESS_HIGH
INC_PAGE_ADDRESS_END:
RET
;*****************************************************************************************
READ_512_BYTES_FROM_FIFO:
MOV A,#1
MOV BANK_COUNT,A
BANK_INITIAL:
INC BANK_COUNT
MOV A,BANK_COUNT
MOV RAMBS1,A
MOV A,#0X80
MOV IAP1,A
NEXT_REG:
JBS PORTC,4,$
CLR FIFO_BYTE_COUNT
READ_32BYTES_NEXT_REG:
CALL READ_FIFO ;READ_FIFO TO BANK
INC IAP1
INC FIFO_BYTE_COUNT
MOV A,FIFO_BYTE_COUNT
SUB A,#32
JBS STATUS,Z,READ_32BYTES_NEXT_REG
MOV A,IAP1
;SUB A,#0X90
;JBS STATUS,Z,CHECK_528BYTES_END
;CONTINUE:
; MOV A,IAP1
SUB A,#00
JBS STATUS,Z,BANK_CHANG
JMP NEXT_REG
BANK_CHANG:
MOV A,BANK_COUNT
SUB A,#5//6
JBS STATUS,Z,WR_BANK_END
JMP BANK_INITIAL
;CHECK_528BYTES_END:
; MOV A,BANK_COUNT
; SUB A,#6
; JBS STATUS,Z,WR_BANK_END
; JMP CONTINUE
WR_BANK_END:
RET
;*****************************************************************************************
;*****************************************************************************************
WRITE_512_BYTES_TO_FIFO:
MOV A,#1
MOV BANK_COUNT,A
WRITE_FIFO_BANK_INITIAL:
INC BANK_COUNT
MOV A,BANK_COUNT
MOV RAMBS1,A
MOV A,#0X80
MOV IAP1,A
WRITE_FIFO_NEXT_REGISTER:
JBS PORTC,4,$ ;WRITE_FIFO FROM BANK
CLR FIFO_BYTE_COUNT
WRITE_32BYTES_NEXT_REGISTER:
MOV A,IAC1
MOV CodecData,A
CALL CodecWriteFiFo
INC IAP1
INC FIFO_BYTE_COUNT
MOV A,FIFO_BYTE_COUNT
SUB A,#32
JBS STATUS,Z,WRITE_32BYTES_NEXT_REGISTER
MOV A,IAP1
SUB A,#00
JBS STATUS,Z,WRITE_FIFO_BANK_CHANG
JMP WRITE_FIFO_NEXT_REGISTER
WRITE_FIFO_BANK_CHANG:
MOV A,BANK_COUNT
SUB A,#5//6
JBS STATUS,Z,WRITE_FIFO_BANK_END
JMP WRITE_FIFO_BANK_INITIAL
WRITE_FIFO_BANK_END:
RET
;*****************************************************************************************
READ_FIFO:
CALL CodecReadFiFo
MOV A,CodecData
MOV IAC1,A
RET
;*****************************************************************************************
WRITE_FIFO:
JBS PORTC,4,$
MOV A,IAC1
MOV CodecData,A
CALL CodecWriteFiFo
RET
;*****************************************************************************************
IO_INITIAL:
BANK 0 ;76543210
;SET CONTROL OF I/O
;************************************************
MOV A,#0b11110000 ;SET I/O PORT
MOV IOCA,A
MOV A,#0b00100000 ;SET I/O PORT FLASH READY/BUSY INPUT
MOV IOCB,A
MOV A,#0b00010000 ;SET I/O PORT
MOV IOCC,A
MOV A,#0b00000000 ;SET I/O PORT
MOV IOCD,A
MOV A,#0b00000000 ;SET I/O PORT
MOV IOCE,A
MOV A,#0b00001011 ;SET I/O PORT
MOV IOCF,A
;************************************************
;PULL HIGH CONTROL SET
;************************************************
MOV A,#0b11110000 ;SET I/O PORT
MOV PUCA,A
MOV A,#0b00100000 ;SET I/O PORT
MOV PUCB,A
MOV A,#0b00010000 ;SET I/O PORT
MOV PUCC,A
MOV A,#0b00001011 ;SET I/O PORT
MOV PUCF,A
;SET IO VALUE
;************************************************
MOV A,#0X00 ;SET OUT_VALUE
MOV PORTA,A
MOV A,#0X80 ;SET OUT_VALUE
MOV PORTB,A
MOV A,#0X00 ;SET OUT_VALUE
MOV PORTC,A
CLR PORTD
MOV A,#0X00 ;SET OUT_VALUE
MOV PORTE,A
MOV A,#0X00 ;SET OUT_VALUE
MOV PORTF,A
;************************************************
RET
;************************************************
DATA_PORT_OUT_INITIAL:
BANK 0 ;76543210
;SET CONTROL OF I/O
;************************************************
MOV A,#0b00000000 ;SET I/O PORT
MOV IOCD,A
RET
;************************************************
DATA_PORT_IN_INITIAL:
BANK 0 ;76543210
;SET CONTROL OF I/O
;************************************************
MOV A,#0b11111111 ;SET I/O PORT
MOV IOCD,A
;************************************************
RET
;************************************************
DELAY_3S:
CALL DELAY_1S
CALL DELAY_1S
CALL DELAY_1S
RET
DELAY_1S:
CALL DELAY_500MS
CALL DELAY_500MS
RET
DELAY_500mS:
CALL DELAY_30mS //1
CALL DELAY_30mS //2
CALL DELAY_30mS //3
CALL DELAY_30mS //4
CALL DELAY_30mS //5
CALL DELAY_30mS //6
CALL DELAY_30mS //7
CALL DELAY_30mS //8
CALL DELAY_30mS //9
CALL DELAY_30mS //10
CALL DELAY_30mS //11
CALL DELAY_30mS //12
CALL DELAY_30mS //13
CALL DELAY_30mS //14
CALL DELAY_30mS //15
CALL DELAY_30mS //16
CALL DELAY_20MS
RET
DELAY_480mS:
CALL DELAY_30mS //1
CALL DELAY_30mS //2
CALL DELAY_30mS //3
CALL DELAY_30mS //4
CALL DELAY_30mS //5
CALL DELAY_30mS //6
CALL DELAY_30mS //7
CALL DELAY_30mS //8
CALL DELAY_30mS //9
CALL DELAY_30mS //10
CALL DELAY_30mS //11
CALL DELAY_30mS //12
CALL DELAY_30mS //13
CALL DELAY_30mS //14
CALL DELAY_30mS //15
CALL DELAY_30mS //16
RET
DELAY_240mS:
CALL DELAY_30mS //9
CALL DELAY_30mS //10
CALL DELAY_30mS //11
CALL DELAY_30mS //12
DELAY_120mS:
CALL DELAY_30mS //13
CALL DELAY_30mS //14
DELAY_60mS:
CALL DELAY_30mS //15
CALL DELAY_30mS //16
RET
DELAY_30mS:
Call DELAY_3ms
Call DELAY_3ms
Call DELAY_3ms
Call DELAY_3ms
Call DELAY_3ms
Call DELAY_3ms
Call DELAY_3ms
Call DELAY_3ms
Call DELAY_3ms
Call DELAY_3ms
RET
DELAY_20MS:
CALL DELAY_6MS
CALL DELAY_6MS
CALL DELAY_6MS
CALL DELAY_2MS
DELAY_12mS:
Call DELAY_3ms
Call DELAY_3ms
DELAY_6mS:
Call DELAY_3ms
Call DELAY_3ms
Ret
DELAY_3ms:
CALL DELAY_1ms
DELAY_2ms:
CALL DELAY_1ms
CALL DELAY_1ms
RET
DELAY_1ms:
CALL DELAY_500us
CALL DELAY_500us
RET
DELAY_700us:
CALL DELAY_100us
CALL DELAY_100us
CALL DELAY_100us
CALL DELAY_100us
CALL DELAY_100us
CALL DELAY_100us
CALL DELAY_100us
RET
DELAY_500us:
CALL DELAY_100us
DELAY_400us:
CALL DELAY_100us
DELAY_300us:
CALL DELAY_100us
CALL DELAY_100us
CALL DELAY_100us
RET
DELAY_100us:
CALL DELAY_50us
CALL DELAY_50us
RET
DELAY_50us:
CALL DELAY_25us
CALL DELAY_25us
RET
DELAY_25us:
CALL DELAY_10us
CALL DELAY_10us
CALL DELAY_5us
RET
DELAY_30us:
CALL DELAY_10us
CALL DELAY_10us
CALL DELAY_10us
RET
DELAY_20us:
CALL DELAY_10us
CALL DELAY_10us
RET
DELAY_14us:
CALL DELAY_5us
CALL DELAY_5us
CALL DELAY_1us
CALL DELAY_1us
CALL DELAY_1us
CALL DELAY_1us
RET
DELAY_10us:
CALL DELAY_5us
CALL DELAY_5us
RET
DELAY_5US:
CALL DELAY_1US
CALL DELAY_1US
CALL DELAY_1US
CALL DELAY_1US
CALL DELAY_1US
RET
DELAY_1US: //1,2
MOV A,18 ;3
MOV RPTC ,A ;4
RPT ;5
NOP ;5+18=23
RET ;24
/* NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET */
;================================================
;Subsrute end
;================================================
;================================================
ORG 0X3FFF
DW 0X4012
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -