Esta practica es simple y toma dos recursos del Área Teórica, el manejo de tablas y el calculo de retardos, con estas dos simples clases teóricas se ha diseñado un cronometro de 00:00 a 90:00, minutos y segundos respectivamente.
A este circuito de bajo coste se le pueden dar muchas aplicaciones como un timer para el encendido u apagado de dispositivos, un contador de elementos, etc, obviamente modificando el código.
Dejo a consideración del estudiante alguna aplicación o sugerencia de aplicación que desee se codifique.
Circuito
Código
; Curso de Microcontroladores 8051
; Programa : cronometro
; Descripcion : simple cronometro en minutos y segundos
; hasta 90:00 minutos y segundos
; Autor : Raul Alejandro QL
conta equ 30h
contb equ 31h
contc equ 32h
contd equ 33h
onoff equ p3.7
org 0000h
iniciar:
; inicializacion de variables
mov conta,#00h
mov contb,#00h
mov contc,#00h
mov contd,#00h
acall mostrar
seg:
nop
; * * on / off
jb onoff, seg
;seg:
inc contd
acall mostrar
acall seg05
acall seg05
mov r7,contd
cjne r7,#9d,seg
mov contd,#0
inc contc
acall mostrar
acall seg05
acall seg05
mov r7,contc
cjne r7,#6d,seg
mov contc,#0
inc contb
acall mostrar
acall seg05
acall seg05
mov r7,contb
cjne r7,#10d,seg
mov contb,#0
inc conta
acall mostrar
acall seg05
acall seg05
mov r7,conta
cjne r7,#6d,seg
ajmp $ ; llego al limite
; * * * * * * * * * * * * * * * * * * *
mostrar:
; * * * * * * * * * * * * * * * * * * *
mov dptr, #tabla ; dptr = direccion de la "tabla"
; mostrar en display's
mov a,conta
movc a,@a+dptr
cpl a
mov p0,a
mov a,contb
movc a,@a+dptr
cpl a
mov p1,a
mov a,contc
movc a,@a+dptr
cpl a
mov p2,a
mov a,contd
movc a,@a+dptr
cpl a
mov p3,a
ret
; * * * * * * * * * * * * * * * * * * *
tabla: ; esta es la direccion inicial de tabla
; * * * * * * * * * * * * * * * * * * *
db 3fh ; 0
db 06h ; 1
db 5Bh ; 2
db 4fh ; 3
db 66h ; 4
db 6dh ; 5
db 7dh ; 6
db 07h ; 7
db 7fh ; 8
db 6fh ; 9
; * * * * * * * * * * * * * * * * * * * * * * * *
; retardo de 500 micro segundos (500us)
; * * * * * * * * * * * * * * * * * * * * * * * *
; tiempo = sec * 12 periodos
; 12MHz 1 ciclo de maquina
; * * * * * * * * * * * * * * * * * * * * * * * *
; tiempo = 0.5 s = 500000us
; ciclos de maquina
; * * * * * * * * * * * * * * * * * * * * * * * *
seg05: ;(2) = 2
mov r6,#0fah ;(1) = 1
xx: mov R7,#09h ;(1)*r6[250] = 250
nop ;(1)*r6(250) = 250
nop ;(1)*r6(250) = 250
nop ;(1)*r6(250) = 250
nop ;(1)*r6(250) = 250
nop ;(1)*r6(250) = 250
xxx: nop ;(1)*r6[250]*r7[249] = 62250
nop ;(1)*r6[250]*r7[249] = 62250
nop ;(1)*r6[250]*r7[249] = 62250
nop ;(1)*r6[250]*r7[249] = 62250
nop ;(1)*r6[250]*r7[249] = 62250
nop ;(1)*r6[250]*r7[249] = 62250
djnz R7,xxx ;(2)*r6[250]*r7[249] = 124500
djnz r6,xx ;(2)*r6[250] = 500
ret ;(2) = 2
; ----------------------------------
; 500005 * 1us = 500005us = 0.5seg
end
Vídeo Tutorial
Compartir
Comentar
Descargar