當前位置:編程學習大全網 - 編程語言 - 用義隆153芯片 做跑馬燈 自動循環順序點燈?

用義隆153芯片 做跑馬燈 自動循環順序點燈?

硬件:EM78P153,4腳接+5V,11腳接地,4-11腳之間接壹個104電容,P60-P67輸出

軟件:

;=========================================================================

;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

  • 上一篇:萬年歷C語言程序?
  • 下一篇:什麽大學有基因工程專業
  • copyright 2024編程學習大全網