📄 lspeech_demo.asm
字号:
;;/////////////////////////////////////////////////////////////////
;;/////////////////////////////////////////////////////////////////
;; This is a demo program for single ROM Bodies.
;;
;; (For JA21003-JA21018, JA23048 and JA23060)
;;
;;
;; General Function:
;;
;; PWM Mode
;;
;; I/O--
;; 1. PB are direct inputs
;; 2. PA are outputs
;; Sound--
;; 1. PB0 plays speech1
;; 2. PB1 plays speech2
;; 3. PB2 stops sound
;;
;;
;; Interrupt Used:
;; Timer0 --> play speech
;; 1mS --> keyscan and melody envelop slop
;;
;; Date: 2004/04/12
;;/////////////////////////////////////////////////////////////////
;;/////////////////////////////////////////////////////////////////
;;==========================================
;; H A R D W A R E S E T T I N G S
;; D A T A A L L O C A T E
;;==========================================
.INCLUDE INH/LHardware.inh
.INCLUDE INH/JazMacroLib.inh
.INCLUDE LSpeech_Demo.IDX
;;==========================================
;; P R O G R A M S T A R T
;;==========================================
ORG PROG_START
;;=========================================
;; J A Z T E K M O D U L E S
;;=========================================
.INCLUDE Module/KeyIn.asm
.INCLUDE Module/KeyAction.asm
.INCLUDE Module/LSpeech.asm
;;=========================================
;; P R O G R A M S T A R T H E R E
;;=========================================
V_START:
LDA #$80
STA D_DA1
STA D_DA2
M_HardwareInitial
;;--------------------------------
;; Set the Stack pointer to $FF
;;--------------------------------
M_InitialStackPoint
;;------------------------------
;; CLEAR ALL RAM
;;------------------------------
M_ClearRAM
;;------------------------------
LDA #$00
STA D_PAC ;; Set PA0-PA7 as Output
STA D_PAR
STA D_PA
LDA #$FF
STA D_PBR ;; Set PB pull-hi resister enable
STA D_PBC ;; Set PB0-PB7 as Input
LDA #$0F
STA R_KeySet
LDA R_Maflag ;; Set PWM mode
ORA #B_Pwm
STA R_Maflag
LDA #$80
STA R_Dac0Buf
M_Enable1msInt ;; Enable 1ms interrupt
;;**********************************************
;; M O N I T O R L O O P
;;**********************************************
F_MainLoopService:
JSR F_Wait1msInt
JSR F_KeyIn
JSR F_UserProgram
JMP F_MainLoopService
;;**********************************************
;;**********************************************
F_Wait1msInt:
LDA R_SystemFlag
AND #B_Hardware1mS
BEQ F_Wait1msInt
RTS
;;==============================================
F_UserProgram:
L_ChkHaltDelay:
LDA R_SystemFlag
AND #B_Delay80mS
BEQ L_ChkKeyChange
JSR F_HaltDelay
L_ChkKeyChange:
LDA R_SystemFlag
AND #B_KeyChange
BEQ L_ChkCh1Play
L_KeyChanged:
LDA R_SystemFlag
AND #%11100101
STA R_SystemFlag
JSR F_KeyAction
;;-----------------------------------------
L_ChkCh1Play:
M_TestCh1Playing ;; C=1 --> Ch1 is playing
BCC L_NoPlay
RTS
L_NoPlay:
LDA R_SystemFlag
AND #B_Delay80mS
BNE L_ChkDelayEnd
LDA R_SystemFlag
ORA #B_Delay80mS
STA R_SystemFlag
LDA #80
STA R_DelayCnt
RTS
;;-----------------------------------
L_ChkDelayEnd:
LDA R_SystemFlag
AND #B_DelayOK
BNE L_DelayOK
RTS
L_DelayOK:
LDA R_SystemFlag
AND #%11100111
STA R_SystemFlag
F_Sleep:
LDA D_PB
LDA #B_PbI
STA D_INTC
LDA #B_PowerHalt+B_PowerStop
STA D_POWERC
NOP
NOP
NOP
LDA #$80
STA D_DA1
STA D_DA2
STA R_Dac0Buf
LDA #0
STA D_INTC
M_Enable1msInt ;; Enable 1ms interrupt
JMP F_MainLoopService
;;=====================================================
;; Function: F_HaltDelay
;; to check key and debounce again before "sleep"
;;=====================================================
F_HaltDelay:
DEC R_DelayCnt
BNE L_HaltDelayOut
LDA R_SystemFlag
ORA #B_DelayOK
STA R_SystemFlag
L_HaltDelayOut:
RTS
;;======================================================
;; I N T E R R U P T S E R V I C E R O U T I N E
;;======================================================
V_IRQ:
SEI
PHA
TXA
PHA
;;------------------------------
L_ChkTMR0Int:
LDA D_INTF
AND #B_Tmr0F ;; check TMR0F(B1)
BEQ L_ChkTMR1Int
M_Tmr0IntSpeech
;;------------------------------
L_ChkTMR1Int:
; LDA D_INTF
; AND #B_Tmr1F ;; check TMR1F (B2)
; BEQ L_Chk1msInt
; M_Tmr1IntMelody
;;------------------------------
L_Chk1msInt:
LDA D_INTF
AND #B_1msF ;; check 1msF (B6)
BEQ L_IntfOut
M_1msInt
;;------------------------------
L_IntfOut:
LDA D_INTF
BNE L_ChkTMR0Int
PLA
TAX
PLA
CLI
RTI
;;=========================================
;; V E C T O R T A B L E
;;=========================================
ORG $FFFC
DW V_START
DW V_IRQ
;;*****************************************
;; E N D O F P R O G R A M
;;*****************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -