軟件:
;=========================================================================
;File name: LedRun.dt
;CPU : EM78P153S
;Edition : 1.0
;Made by : yingang /burn_life
;=========================================================================
;系統寄存器定義:
;=========================================================================
IO_P5 equ 0x05 ;Port5控制寄存器
IO_P6 equ 0x06 ;Port6控制寄存器
IO_CONT equ 0 ;INT,TCC,Prescaler
IO_PD equ 0x0b ;PD控制寄存器(0有效) * P62 P61 P60 * P52 P51 P50
IO_PH equ 0x0d ;PH控制寄存器(0有效) P60~P67(除P63)
IO_OD equ 0x0c ;OC控制寄存器 P60~P67(除P63)
IO_WDT equ 0x0e ;WTD控制寄存器 WDTE EIS * * * * * *
IO_IM equ 0x0f ;中斷屏蔽寄存器 * * * * * EXIE ICIE TCIE
;---------------------------------------------------------------------------------------------------
PTRTARGET equ 0x00 ;間接尋址結果
TCC equ 0x01 ;定時/計數器
PC equ 0x02 ;程序計數器PC
STATUS equ 0x03 ;狀態寄存器 GP PS1 PS0 T P Z DC C
PTR equ 0x04 ;間接尋址指針
PORT5 equ 0x05 ;Port5數據寄存器
PORT6 equ 0x06 ;Port6數據寄存器
INTF equ 0x0f ;中斷狀態寄存器 * * * * * EXIF ICIF TCIF
STARTADRESS equ 0x10
ENDADRESS equ 0x2f
;=========================================================================
;應用層變量定義:
delaycount1 EQU 0x21 ;for delay routine
delaycount2 EQU 0x22 ;for delay routine
bitCount EQU 0x23 ;for Led_Run
shiftReg EQU 0x24
;===================================================================================
ORG 0000h
nop
jmp Main ;3 power on
;***********************************************************************************
;清除內存
;***********************************************************************************
Clr_Ram :
mov a, @0x10 ;78P153: Start adress
mov PTR, a
again:
clr PTRTARGET
mov a, PTR
inc PTR
and a,@0x2f
xor a,@0x2f ;78P153: end adress
jbs STATUS, 2
jmp again
ret
;===================================================================================
;IO口初始化
;===================================================================================
Init_CPUIO :
mov a,@11111111B ;P6無上拉
iow IO_PH
mov a,@11111111B ;無下拉
iow IO_PD
mov a,@00000000B ;無開漏
iow IO_OD
mov a,@00000000B ;Port6 = low
mov PORT6,a
mov a,@00000000B ;Port6 = Output
iow IO_P6
mov a,@00000000B
mov PORT5,a ;
mov a, @00000000B ;P5輸出 0
iow IO_P5
clr INTF
ret
;===================================================================================
;延時程序
;===================================================================================
Delay150ms:
MOV A,@0XE0
MOV delaycount1,A
loop22:
MOV A,@0XFF
MOV delaycount2,A
loop11:
wdtc
nop
DJZ delaycount2
JMP loop11
DJZ delaycount1
JMP loop22
RET
;---------------------------------------------------------------------
;跑馬燈程序
;---------------------------------------------------------------------
Led_Run:
mov a,@8 ;
mov bitCount,a
mov a,0x01
mov shiftReg,a
Led_Left:
mov a,shiftReg ;輸出到P6
mov PORT6,a
rlc shiftReg ;左移
call Delay150ms ;間隔150ms
djz bitCount
jmp Led_Left
;---------------------------------------
mov a,@8 ;
mov bitCount,a
Led_Right:
mov a,shiftReg
mov PORT6,a ;輸出到P6
rrc shiftReg ;右移
call Delay150ms ;間隔150ms
djz bitCount
jmp Led_Right
ret
org 0300H
;***********************************************************************************
;主程序
;***********************************************************************************
Main:
nop
call Clr_Ram
;-----------------------------------------------------------
call Init_CPUIO
nop
MainLoop:
wdtc
call Led_Run
jmp MainLoop
end