📄 light.asm
字号:
;============================================================================
; PROJECT = 78K0S/KA1+ Low Pin Count - DemoKit-KA1
; MODULE = light.asm
; DEVICE = uPD78F9222
; DATE = 29.07.2005
; ===========================================================================
; Description: This sample programs plays one of eight predefined lightshows.
; After the program-start-signal, the program plays the first
; lightshow. By pressing button SW1 the next show is selected.
; Pressing button SW2 restarts the application
;
; ===========================================================================
;--------------------------------
;- MACRO DEFINITION -
;--------------------------------
PUSH_STACK MACRO
PUSH AX
PUSH HL
PUSH BC
PUSH DE
ENDM
POP_STACK MACRO
POP DE
POP BC
POP HL
POP AX
ENDM
;--------------------------------
;- I/O DEFINE -
;--------------------------------
LED1 EQU P2.3
LED2 EQU P13.0
LED3 EQU P4.5
LED4 EQU P12.3
;--------------------------------
;- SYMBOL DECLARATION -
;--------------------------------
ram_start EQU 0FE7FH
ram_end EQU 0FEFFH
stack EQU 0FEFFH
;--------------------------------
;- RAM DECLARATION -
;--------------------------------
DATA DSEG at 0FE80H
Timer80Flag: DS 1
IntP0Flag: DS 1
value: DS 1
number: DS 1
counter: DS 1
i: DS 1
pattern: DS 1
;--------------------------------
;- VECTOR TABLE -
;--------------------------------
INT0 CSEG at 0000H
DW Start
INT1 CSEG at 001AH
INTTM80: DW Inttm80
INT2 CSEG at 0008H
INTP0: DW Intp0
;--------------------------------
PROG CSEG at 80H
Start:
DI
Initial:
MOV PCC, #0
MOV PPCC, #0
MOV IF0, #00
MOV IF1, #00
MOV MK0, #0FFH
MOV MK1, #0FFH
MOV LSRCM,#01H
MOV OSTS, #0
MOV WDTM, #70H
CLR1 TCE80
MOV TMC80,#06H
MOV CR80, #06H
CLR1 TMIF80
CLR1 TMMK80
MOV INTM0,#00
CLR1 PMK0
CLR1 PMC2.3
CLR1 PM2.3
CLR1 PM4.5
CLR1 PM12.3
CLR1 LED1
CLR1 LED2
CLR1 LED3
CLR1 LED4
SET1 LED1
SET1 LED2
SET1 LED3
SET1 LED4
MOVW AX, #stack
MOVW SP, AX
MOVW HL, #ram_start
Ram_clear:
MOV A,#0
MOV [HL],A
INCW HL
MOVW AX,HL
CMPW AX,#ram_end
BC $Ram_clear
EI
Main_loop:
MOV A, IntP0Flag
CMP A, #00H
BZ $Call_show
MOV IntP0Flag, #00H
MOV A, counter
CMP A, #07H
BZ $Clear_counter
INC counter
BR Call_show
Clear_counter:
MOV counter, #00H
Call_show:
MOV A, counter
CMP A, #00H
BZ $Call_show1
CMP A, #01H
BZ $Call_show2
CMP A, #02H
BZ $Call_show3
CMP A, #03H
BZ $Call_show4
CMP A, #04H
BZ $Call_show5
CMP A, #05H
BZ $Call_show6
CMP A, #06H
BZ $Call_show7
CMP A, #07H
BZ $Call_show8
BR Exit_call_show
Call_show1:
CALL !Show1
BR Exit_call_show
Call_show2:
CALL !Show2
BR Exit_call_show
Call_show3:
CALL !Show3
BR Exit_call_show
Call_show4:
CALL !Show4
BR Exit_call_show
Call_show5:
CALL !Show5
BR Exit_call_show
Call_show6:
CALL !Show6
BR Exit_call_show
Call_show7:
CALL !Show7
BR Exit_call_show
Call_show8:
CALL !Show8
BR Exit_call_show
Exit_call_show:
BR Main_loop
;================================
;- SUB-program -
;================================
Wait:
CALL !Restart_TM80
Wait_Loop1:
MOV A, number
CMP A, #00H
BZ $Wait_exit
Wait_Loop0:
MOV A, Timer80Flag
CMP A, #00H
BZ $Wait_Loop0
MOV Timer80Flag, #00H
DEC number
MOV A, number
CMP A, #00H
BNZ $Wait_Loop1
Wait_exit:
RET
;--------------------------------
Restart_TM80:
MOV Timer80Flag, #00H
CLR1 TCE80
SET1 TCE80
RET
;---------------------------------
Drive_LED:
MOV A, value
ROR A,1
ROR A,1
ROR A,1
RORC A,1
BNC $LED1_off
CLR1 LED1
BR Next1
LED1_off:
SET1 LED1
Next1:
MOV A, value
ROR A,1
ROR A,1
RORC A,1
BNC $LED2_off
CLR1 LED2
BR Next2
LED2_off:
SET1 LED2
Next2:
MOV A, value
ROR A,1
RORC A,1
BNC $LED3_off
CLR1 LED3
BR Next3
LED3_off:
SET1 LED3
Next3:
MOV A, value
RORC A,1
BNC $LED4_off
CLR1 LED4
BR Next4
LED4_off:
SET1 LED4
Next4:
RET
;---------------------------------
Inttm80:
PUSH_STACK
MOV Timer80Flag, #01H
POP_STACK
RETI
;----------------------------------------
Intp0:
PUSH_STACK
MOV IntP0Flag, #01H
POP_STACK
RETI
;-----------------------------------------
Show1:
MOV pattern, #01H
MOV value, #01H
CALL !Drive_LED
MOV i, #00H
Show1_loop1:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROL A, 1
MOV pattern, A
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show1_loop1
MOV i, #00H
Show1_loop2:
MOV value, #08H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show1_loop2
MOV pattern, #08H
MOV i, #00H
Show1_loop3:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROR A, 1
MOV pattern, A
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show1_loop3
MOV i, #00H
Show1_loop4:
MOV value, #01H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show1_loop4
RET
;-----------------------------------------
Show2:
MOV pattern, #01H
MOV value, #01H
CALL !Drive_LED
MOV i, #00H
Show2_loop1:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROL A, 1
ADD A, #01H
MOV pattern, A
MOV number, #02H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show2_loop1
MOV pattern, #08H
MOV i, #00H
Show2_loop2:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROR A, 1
ADD A, #08H
MOV pattern, A
MOV number, #02H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show2_loop2
RET
;---------------------------------------
Show3:
MOV i, #00H
Show3_loop1:
MOV value, #09H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show3_loop1
MOV i, #00H
Show3_loop2:
MOV value, #06H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show3_loop2
RET
;------------------------------------------
Show4:
MOV pattern, #01H
MOV value, #01H
CALL !Drive_LED
MOV i, #00H
Show4_loop1:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROL A, 1
MOV pattern, A
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show4_loop1
MOV pattern, #08H
MOV i, #00H
Show4_loop2:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROR A, 1
MOV pattern, A
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show4_loop2
RET
;---------------------------------------------
Show5:
MOV pattern, #01H
MOV value, #01H
CALL !Drive_LED
MOV i, #00H
Show5_loop1:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROL A, 1
ADD A, #01H
MOV pattern, A
MOV number, #02H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show5_loop1
MOV pattern, #0fH
MOV i, #00H
Show5_loop2:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROL A, 1
MOV pattern, A
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show5_loop2
MOV pattern, #0F0H
MOV value, #0F0H
CALL !Drive_LED
MOV i, #00H
Show5_loop3:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROR A, 1
MOV pattern, A
MOV number, #02H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show5_loop3
MOV pattern, #0fH
MOV i, #00H
Show5_loop4:
MOV A, pattern
MOV value, A
CALL !Drive_LED
MOV A, pattern
ROR A, 1
MOV pattern, A
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #04H
BNZ $Show5_loop4
RET
;--------------------------------------------
Show6:
MOV value, #05H
CALL !Drive_LED
MOV number, #03H
CALL !Wait
MOV value, #0AH
CALL !Drive_LED
MOV number, #03H
CALL !Wait
RET
;-----------------------------------------
Show7:
MOV value, #09H
CALL !Drive_LED
MOV number, #02H
CALL !Wait
MOV value, #06H
CALL !Drive_LED
MOV number, #02H
CALL !Wait
RET
;---------------------------------------
Show8:
MOV i, #00H
Show8_loop1:
MOV value, #0CH
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #06H
BNZ $Show8_loop1
MOV i, #00H
Show8_loop2:
MOV value, #03H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
MOV value, #00H
CALL !Drive_LED
MOV number, #01H
CALL !Wait
INC i
MOV A, i
CMP A, #06H
BNZ $Show8_loop2
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -