sábado, 29 de septiembre de 2007

CONTADOR ASCENDENTE DESCENDENTE

El programa posee cuatro opciones controladas por dos switch, cada una de estas opciones controla el estado del puerto 2, ya sea poniéndolo a cero a uno o convirtiéndolo en un contador ascendente o descendente. Es muy útil para la aplicación de proyectos diversos con selección de opciones con varios pines.


DIAGRAMA DEL CIRCUITO


El circuito fue diseño en PROTEUS, así que el armarlo físicamente debes de colocar el cristal en el micro además de colocar el reset y el EA pin 31 a Vcc, no lo olvides.




CÓDIGO FUENTE DEL PROGRAMA

; - - - - - - - - - - - - - - - - - - - - - - - -
; Contador Ascendente Descendente
; - - - - - - - - - - - - - - - - - - - - - - - -
;p1 .1.0 Acccion
; 0 0 p2 todo cero
; 0 1 p2 contador ascendente
; 1 0 p2 contador descendente
; 1 1 p2 todo uno
; - - - - - - - - - - - - - - - - - - - - - - - -
; Raul Alejandro Quispe Larico
; Cel 72097633
; raulalejandroql@yahoo.es
; - - - - - - - - - - - - - - - - - - - - - - - -
contador equ 30h
org 0000h
inicio:
mov contador,#00h
mov dptr,#tabla ; carga el menu de opciones
leer:
mov a,p1 ; cargar del puerto
anl a,#00000011b ; limpiar los bits no necesarios
rl a ; multiplicar por 2
jmp @a+dptr

tabla:
ajmp todocero
ajmp ascendente
ajmp descendente
ajmp todouno
;--------------------------------------------------------------
todocero:
;--------------------------------------------------------------
mov contador,#00h
mov p2,contador
ajmp leer
;--------------------------------------------------------------
ascendente:
;--------------------------------------------------------------
inc contador
mov p2,contador
acall retardo
ajmp leer
;--------------------------------------------------------------
descendente:
;--------------------------------------------------------------
dec contador
mov p2,contador
acall retardo
ajmp leer
;--------------------------------------------------------------
todouno:
;--------------------------------------------------------------
mov contador,#0ffh
mov p2,contador
ajmp leer
;--------------------------------------------------------------
retardo:
;--------------------------------------------------------------
MOV R3,#0aeH
Sal0: MOV R4,#0aeH
Sal1: MOV R5,#07H
Sal2: DJNZ R5,Sal2
DJNZ R4,SAL1
DJNZ R3,SAL0
RET
end

Para cualquier consulta escriba a raualejandroql@gmail.com y visite nuestro FORO-Microcontroladores para poder intercambiar opiniones y dudas al respecto.

GENERACIÓN DE CÓDIGOS : Ej.- JOHNSON

Este programa usa una tabla que tiene grabada en la EEPROM interna, esa tabla para este ejemplo es el código johnson, pero puede modificarse para cualquier otra tabla, generando cualquier otro código por lo tanto muy útil. El manejo de tablas en el microcontrolador es vital para la realización de proyectos, pues suelen ser nuestras constantes en los programas, como por ejemplo un mensaje ante un determinado evento o un valor determinado. Por ejemplo el mensaje en un LCD o el código en un Display o matriz de leds ETC.

DIAGRAMA DEL CIRCUITO





CÓDIGO FUENTE DEL PROGRAMA

; * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CODIGO JOHNSON DE 8 BITS *
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Descripcion:
; Este codigo muestra por el puerto denominado P1
; el codigo johnson de 8 bits con un retardo
; calculado de aproximadamente 1 segundo para un
; cristal de 11.0592Mhz
; - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Autor :
; Raul Alejandro Quispe Larico
; Cel: 72097633
; Email: raulalejandroql@yahoo.es
; http://es.geocities.com/raulalejandroql
; - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;---------------------------------------------------------
; Programa Principal
;---------------------------------------------------------
org 0000h ; direccion del reseteo
ajmp inicio
org 0050h ; inicio de programa
inicio:
mov DPTR,#johnson ; carga al data pointer
; puntero de datos con la
; direccion de la tabla
; codigo johnson
mov r0,#0 ; inicio de puntero para
; la tabla en cero
bucle:
mov a,r0 ; pasa la direcion de la tabla
; para sacar el dato de johnson
movc a,@a+DPTR ; saca el dato al acumulador
mov p1,a ; mostrando por el puerto
acall retardo ; retardo para visualizar en los
; leds (llamado a sub programa)
inc r0 ; se incrementa el siguiente dato
; a sacar en la tabla
cjne r0,#10h,bucle ; se consulta para saber cuantos
; datos de la tabal se sacaron
ajmp inicio ; reinicia el programa
;---------------------------------------------------------
; Retardo para 1 segundo con cristal = 11.0592Mhz;
;---------------------------------------------------------
retardo:
mov r3,#0aeh
sal0: mov r4,#0aeh
sal1: mov r5,#007h
sal2: djnz r5,sal2
djnz r4,sal1
djnz r3,sal0
ret
;---------------------------------------------------------
; Tabla de datos de codigo johnson
;---------------------------------------------------------
johnson:
db 00000000b ; datos en binario
db 00000001b
db 00000011b
db 00000111b
db 00001111b
db 00011111b
db 00111111b
db 01111111b
db 11111111b
db 11111110b
db 11111100b
db 11111000b
db 11110000b
db 11100000b
db 11000000b
db 10000000b
end

Para cualquier consulta escriba a raulalejandroql@gmail.com y visite nuestro FORO-Microcontroladores para poder intercambiar opiniones y dudas al respecto.

ROTACIÓN DE LED'S CON ATMEL AT89CXX


Este programita es bastante sencillo, se realiza un corrimiento de led's y se puede controlar el sentido de rotación del mismo a través de uno de los pines. El puerto por donde se muestra la rotación es el puerto 1, pero este puede cambiarse para que el desplazamiento se muestre en cualquiera de los otros, si es en el puerto 0 se debe utilizar una red de resistencias (mejor véase: Tutorial de Atmel de esta misma pagina). Este es uno de los inicios para utilizar los motores paso a paso que veremos mas adelante


DIAGRAMA DEL CIRCUITO





CÓDIGO FUENTE DEL PROGRAMA



; * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* CODIGO Rotacion de leds
; * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Descripcion:
; Esta rotacion se muestra por el puerto P1
; el sentido de la rotacion lo determina el pin
; p3.0 si este es 1 entonces rotacion a la izqui-
; erda si es 0 rotacion a la derecha
; cristal de 11.0592Mhz
; - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Autor :
; Raul Alejandro Quispe Larico
; Cel: 72097633
; Email: raulalejandroql@yahoo.es
; http://es.geocities.com/raulalejandroql
; - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;---------------------------------------------------------
; Programa Principal
;---------------------------------------------------------
org 0000h ; direccion del reseteo
ajmp inicio
org 0050h ; inicio de programa
inicio:
mov a,#00000001b ; cargando con 1 bit
mostrar:
mov p1,a
acall retardo
jb p3.0,izquierda
derecha:
rr a
ajmp mostrar
izquierda:
rl a
ajmp mostrar
;---------------------------------------------------------
; Retardo para 1 segundo con cristal = 11.0592Mhz;
;---------------------------------------------------------
retardo:
mov r3,#0aeh
sal0: mov r4,#0aeh
sal1: mov r5,#007h
sal2: djnz r5,sal2
djnz r4,sal1
djnz r3,sal0
ret
end
Para cualquier consulta escriba a raulalejandroql@gmail.com y visite nuestro FORO-Microcontroladores para poder intercambiar opiniones y dudas al respecto.