Вы находитесь на странице: 1из 9

Tema: Objetivo: Informe:

APLICACIONES DE TEMPORIZADORES/CONTADORES Implementar un sistema de semforos como aplicacin de temporizadores/contadores

Incluir en el programa realizado para la prctica lo que se necesite para que por medio de un pulsador se pueda cambiar a un modo de operacin donde solo funcionen las luces amarillas de forma intermitente. .include "m164pdef.inc" .def tempo=r16 .def conta=r17 .def estado1=r19 .def estado2=r20 .def aux=r21 .def modo=r22 .org 0x0 rjmp inicio .org 0x6 rjmp amarillos .org 0x1a rjmp segundo inicio: ;CONFIGURACION DE PUERTOS ldi tempo,0b11111111 out ddra,tempo out ddrd,tempo out ddrc,tempo ldi tempo,0b11111011 out ddrb,tempo

;ACTIVACION DEL STACK ldi tempo,high(ramend) out sph,tempo ldi tempo,low(ramend)

out spl,tempo ;CONFIGURACION DE PUERTO B COMO SALIDAS DE LOS PARLANTES ;UTILIZACION DE TIMER0 ;modo desconectado al principio ctc ldi tempo,0b00000010 out tccr0a,tempo ;modo ctc preescalador de 8 a 1 ldi tempo,0b00000010 out tccr0b,tempo ;relacion del ocr0a y ocr0b para obtener frecuencia de 2KHz ldi tempo,249 out ocr0a,tempo out ocr0b,tempo ;UTILIZACION DEL TIMER1 ;MODO TOGGLE Y CTC PARA INTERRUPCION DE 1SEG ldi tempo,0b01000000 sts tccr1a,tempo ;VALOR DEL 0CR1A QUE PRODUCE EL RETARDO DE 1SEGUNDO ldi tempo,low(65535) sts ocr1al,tempo ldi tempo,high(65535) sts ocr1ah,tempo ;MODO CTC Y PREESCALADOR DE RELACION 1:256 ldi tempo,0b00001101 sts tccr1b,tempo ;ACTIVASION DE INTERRUPCION EN EL TIMER1 ldi tempo,0b00000010 sts timsk1,tempo clr conta clr zl clr zh

;HABILITACION INTERRUPCION EXTERNA

ldi tempo,0b00100000 sts eicra,tempo ldi tempo,0b00000100 out eimsk,tempo ;tIMER2 PARA AMARILLOS INTERMITENTES ;HABILITACION GLOBAL DE INTERRUPCIONES sei lazo: cpi modo,1 breq salir321 ;MOSTRAR ESTADO DE SEMAFORO1 out portd,estado2 ;MOSTRAR ESTADO DE SEMAFORO2 out porta,estado1 salir321: rjmp lazo segundo: push r16 in r16,sreg push r16 ;APUNTO A LA TABLA DE OPERACION DE FUNCIONAMIENTO DEL PRIMER SEMAFORO ldi zl,low(tabla_semaforo1<<1) ldi zh,high(tabla_semaforo1<<1) inc conta mov aux,conta ;VERIFICO SI TRANSCURRERON LOS 60SEG DEL CICLO SI ES AS VUELVO A APUNTAR AL INICIO ;Y SE REPITE EL CICLO

cpi conta,60 brne seguir clr conta mov aux,conta ;SI NO HE CULMINADO CON EL CICLO SIGO AUMENTANDO seguir: add zl,aux clr aux adc zh,aux lpm estado2,z ;APUNTO A LA TABLA DE OPERACION DE FUNCIONAMIENTO DEL SEGUNDO SEMAFORO ldi zl,low(tabla_semaforo2<<1) ldi zh,high(tabla_semaforo2<<1) mov aux,conta ;VERIFICO SI TRANSCURRERON LOS 60SEG DEL CICLO SI ES AS VUELVO A APUNTAR AL INICIO ;Y SE REPITE EL CICLO cpi conta,60 brne seguir11 clr conta mov aux,conta seguir11: add zl,aux clr aux adc zh,aux ;CARGO EL VALOR DEL ESTADO lpm estado1,z

;AQUI SI VA A OBTENER EL ESTADO DE LA ALARMA ;EN 56SEG ALARMA1 APAGADA cpi conta,56 brne seguir1 ldi tempo,0b00010010 out tccr0a,tempo

;EN 57SEG ALARMA1 ENECENDIDA seguir1: cpi conta,57 brne seguir2 ldi tempo,0b00000010 out tccr0a,tempo ;EN 58SEG ALARMA1 APAGADA seguir2: cpi conta,58 brne seguir3 ldi tempo,0b00010010 out tccr0a,tempo ;EN 59SEG ALARMA1 ENECENDIDA seguir3: cpi conta,59 brne seguir7 ldi tempo,0b00000010 out tccr0a,tempo

;EN 27SEG ALARMA2 ENECENDIDA seguir7: cpi conta,27 brne seguir4 ldi tempo,0b01000010 out tccr0a,tempo

;EN 28SEG ALARMA2 APAGADA seguir4: cpi conta,28 brne seguir5 ldi tempo,0b00000010 out tccr0a,tempo ;EN 29SEG ALARMA2 ENECENDIDA seguir5: cpi conta,29 brne seguir6 ldi tempo,0b01000010 out tccr0a,tempo

;EN 30SEG ALARMA2 APAGADA seguir6: cpi conta,30 brne salir ldi tempo,0b00000010 out tccr0a,tempo salir: pop r16 out sreg,r16 pop r16 reti ;Amarillos intermitentes amarillos: push r16 in r16,sreg push r16 inc modo cpi modo,2 breq salir123 ldi tempo,0b00000010 out portd,tempo out porta,tempo rjmp fin salir123: clr modo fin: pop r16 out sreg,r16 pop r16 reti ;A CONTINUACION SE TAN LAS TABLAS QUE DESCRIBEN EL COMPORTAMIENTO ;DE LOS SEMAFOROS EN EL TIEMPO tabla_semaforo1: .db .db .db .db 0b00001001,0b00001001;1seg,2seg 0b00001001,0b00001001;3seg,4seg 0b00001001,0b00010001;5seg,6seg 0b00010001,0b00010001;7seg,8seg

.db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db

0b00010001,0b00010001;9seg,10seg 0b00010001,0b00010001;11seg,12seg 0b00010001,0b00010001;13seg,14seg 0b00010001,0b00010001;15seg,16seg 0b00010001,0b00010001;17seg,18seg 0b00010001,0b00010001;19seg,20seg 0b00010001,0b00010001;21seg,22seg 0b00010001,0b00010001;23seg,24seg 0b00010001,0b00000001;25seg,26seg 0b00010001,0b00000001;27seg,28seg 0b00010001,0b00001001; 29seg,30seg 0b00001100,0b00001100; 31seg,32seg 0b00001100,0b00001100; 33seg,34seg 0b00001100,0b00001100; 35seg,36seg 0b00001100,0b00001100; 37seg,38seg 0b00001100,0b00001100; 39seg,40seg 0b00001100,0b00001100; 41seg,42seg 0b00001100,0b00001100; 43seg,44seg 0b00001100,0b00001100; 45seg,46seg 0b00001100,0b00001100; 47seg,48seg 0b00001100,0b00001100; 49seg,50seg 0b00001100,0b00001100; 51seg,52seg 0b00001100,0b00001100; 53seg,54seg 0b00001100,0b00001010; 55seg,56seg 0b00001010,0b00001010; 57seg,58seg 0b00001010,0b00001010; 59seg 60seg

tabla_semaforo2: .db .db .db .db .db .db .db .db .db .db .db .db .db .db .db 0b00001100,0b00001100;1seg,2seg 0b00001100,0b00001100;3seg,4seg 0b00001100,0b00001100;5seg,6seg 0b00001100,0b00001100;7seg,8seg 0b00001100,0b00001100;9seg,10seg 0b00001100,0b00001100;11seg,12seg 0b00001100,0b00001100;13seg,14seg 0b00001100,0b00001100;15seg,16seg 0b00001100,0b00001100;17seg,18seg 0b00001100,0b00001100;19seg,20seg 0b00001100,0b00001100;21seg,22seg 0b00001100,0b00001100;23seg,24seg 0b00001100,0b00001010;25seg,26seg 0b00001010,0b00001010;27seg,28seg 0b00001010,0b00001010; 29seg,30seg

.db .db .db .db .db .db .db .db .db .db .db .db .db .db .db

0b00001001,0b00001001; 31seg,32seg 0b00001001,0b00001001; 33seg,34seg 0b00001001,0b00010001; 35seg,36seg 0b00010001,0b00010001; 37seg,38seg 0b00010001,0b00010001; 39seg,40seg 0b00010001,0b00010001; 41seg,42seg 0b00010001,0b00010001; 43seg,44seg 0b00010001,0b00010001; 45seg,46seg 0b00010001,0b00010001; 47seg,48seg 0b00010001,0b00010001; 49seg,50seg 0b00010001,0b00010001; 51seg,52seg 0b00010001,0b00010001; 53seg,54seg 0b00010001,0b00000001; 55seg,56seg 0b00010001,0b00000001; 57seg,58seg 0b00010001,0b00001001; 59seg 60seg

SIMULACIN EN PROTEUS

Conclusiones: Alexander Viteri Los temporizadores luego de ser habilitados permanecen corriendo mientras el microcontrolador realiza otras actividades, que a su vez son interrumpidas por una interrupcin generada por los timers (sean de desbordamiento del timer, o genereradas por los modos de comparacin). Al captar la interrupcin, el microprocesador realiza otra actividad especfica relacionada con ese estado de tiempo. Con el uso de timers se facilita el manejo del conteo del tiempo y se evitan los problemas que se dan al utilizar lazos de retardo que cualquier cambio en las lneas de programa produce un error de medicin de tiempo. Se obtuvo la seal PWM de 2KHz con el timer0 de 8 bits. Se puso en prctica y se observo la utilidad del modo CTC en ambos timers. Es necesario utilizar parlantes para lograr el efecto de la frecuencia y no usar bocinas. Este sistema de semforos puede ser implementado activando circuitos que manejen corrientes ms altas para encender mayor nmero de leds que es lo que ms se usa hoy en da. En ste caso de utiliz el timer1 de 16 bits para generar una interrupcin cada segundo y de acuerdo a esto ir extrayendo dos valores de la tabla (5 bits por cada puerto B y C). El manejo del preescalador para timer es esencial porque de ste nmero depende la precisin de la medicin del tiempo y adems de la calidad del cristal de 8MHz, que en ste microprocesador no es de buena calidad.

Wilmer Cruz Para aplicaciones de precisin en cuanto a tiempos no es suficiente con el cristal interno del microcontrolador, ya que este no es lo suficientemente preciso, por ende suele ser necesario de un cristal externo. Es preferible utilizar el cristal interno del microcontrolador ya que nos evitamos de diversos inconvenientes y solo en casos estrictamente necesarios debemos apelar al uso del dispositivo externo. Debemos tener en cuenta que en algunas ocasiones se utilizan los timers en el modo CTC acompaados de una cuenta externa de los ciclos de este modo. Este mtodo se usa para cuando queremos contar hasta un nmero que no alcanza el timer actuando por s solo. Se constituye por ende este como un ingenio muy vlido y aplicado muchas veces para generar una onda cuadrada de una determinada frecuencia. Por otra parte no debemos intentar aplicar este mecanismo para la generacin de una onda Fast PWM Phase Correct PWM ya que estas no son estrictamente cuentas secuenciales y por ello un ciclo entero del PWM debe ser generado con una sola rampa o triangulo segn sea el caso. Se comprob tambin que se debe tomar mucha atencin en la configuracin de las interrupciones de cambio de pin, ya que a cada puerto le corresponde una direccin al momento de que se da la interrupcin. Adems, en base a que se va a utilizar subrutinas se debe inicializar correctamente el Stack Pointer, y sobre todo al iniciar la interrupcin Salvar el estado, y antes de regresar Recuperar el Estado para que as el programa principal no se afecte. Es necesario tener una idea grfica de cmo se dan las cosas en un timer para poder programar de una mejor manera, ms razonadamente y de paso con esto tendremos la posibilidad de encontrar nuevos mtodos y formas particulares de emplear un timer segn nuestra conveniencia, ya que el micro es tan solo una herramienta verstil pero nosotros somos los encargados de sacarle menor o mayor provecho.

Вам также может понравиться