¿Usar el chip Elan 153 para hacer una marquesina y encender y encender automáticamente las luces en secuencia?
Hardware: EM78P153, el pin 4 está conectado a 5 V, el pin 11 está conectado a tierra, un condensador 104 está conectado entre los pines 4-11, salida P60-P67
Software:
; =========================================== ====== ========================
;Nombre de archivo: LedRun.dt
;CPU: EM78P153S
Edición: 1.0
Fabricado por: yingang /burn_life
=============== === ================================================= === =====
; Definición de registro del sistema:
; ====================== === ================================================= = p>
IO_P5 equ 0x05; registro de control del puerto 5
IO_P6 equ 0x06; registro de control del puerto 6
IO_CONT equ 0; p> IO_PD equ 0x0b; registro de control PD (0 es válido) * P62 P61 P60 * P52 P51 P50
IO_PH equ 0x0d; registro de control PH (0 es válido) P60~P67 (excepto P63) p>
IO_OD equ 0x0c; registro de control OC P60~P67 (excepto P63)
IO_WDT equ 0x0e; registro de control WTD WDTE EIS * * * * * *
IO_IM equ; 0x0f; registro de máscara de interrupción * * * * * EXIE ICIE TCIE
;----------------------- ----- --------------------------------------------- ----- ---------------
PTRTARGET equ 0x00; resultado de direccionamiento indirecto
TCC equ 0x01; p>
PC equ 0x02; Contador de programa PC
ESTADO equ 0x03; Registro de estado GP PS1 PS0 T P Z DC C
PTR equ 0x04; p> PORT5 equ 0x05; registro de datos de Port5
PORT6 equ 0x06; registro de datos de Port6
INTF equ 0x0f;
TCIF
STARTADRESS equ 0x10
ENDADRESS equ 0x2f
;====================== ==================================================== ==
; Definición de variable de capa de aplicación:
delaycount1 EQU 0x21; para rutina de retraso
delaycount2 EQU 0x22; bitCount EQU 0x23; para Led_Run
shiftReg EQU 0x24
========================== ==================================================== =======
ORG 0000h
nop
jmp principal 3 encendido
***** ************************************************** * *****************************
;Borrar memoria
;* *** ************************************************* *******************************
Clr_Ram:
mov a, @0x10 ;78P153: Dirección inicial
mov PTR, a
otra vez:
clr PTRTARGET
mov a, PTR
inc PTR
and a, @0x2f
xor a, @0x2f; 78P153: dirección final
jbs STATUS, 2 p>
jmp otra vez
ret
; =========================== ====== ============================================== ====== ==
; inicialización del puerto IO
; ======================= ======== =========================================== ======== ====
Init_CPUIO:
mov a, @11111111B; P6 no tiene pull-up
iow IO_PH
mov a, @ 11111111B; Sin menú desplegable
iow IO_PD
mov a, @00000000B Sin drenaje abierto
iow IO_OD;
mov a, @00000000B ;Puerto6 = bajo
mov PORT6, a
mov a, @00000000B ;
t
iow IO_P6
mov a, @00000000B
mov PORT5, a
mov a, @00000000B P5 salida 0;
iow IO_P5
clr INTF
ret
; ================ ==================================================== =================
;Programa de retraso
;=============== = ================================================== = ==================
Retraso150ms:
MOV A, @0XE0
Retardo MOV1, A
loop22:
MOV A, @0XFF
MOV delaycount2, A
loop11:
wdtc
nop
Retardo DJZ2
Bucle JMP11
Retardo DJZ1
Bucle JMP22
RET
;----------------------------------------- ---- --------------------------
;Programa de marquesina
;-- -------------------------------------------------- ------------------
Led_Run:
mov a, @8
mov bitCount, a
mov a, 0x01
mov shiftReg, a
Led_Left:
mov a, shiftReg salida a P6
mov PORT6, a
rlc shiftReg; desplazamiento a la izquierda
llamada Delay150ms; intervalo 150ms
djz bitCount
jmp Led_Left
;------------------------------------------
mov a, @8;
mov bitCount, a
Led_Right:
mov a, shiftReg
mov PORT6 , a ; Salida a P6
rrc shiftReg ; Desplazamiento a la derecha
call Delay150ms
djz bitCount
jmp Led_Right
p >ret
org 0300H
;*************************** *** ****************************
*****************************
; Programa principal
***; ************************************************** * ****************************
Principal:
no
llamar a Clr_Ram
;------------------------------------ - ----------------------
llamar a Init_CPUIO
nop
MainLoop: p>
wdtc
llamar a Led_Run
jmp MainLoop
finalizar