ESCUELA POLITECNICA NACIONAL SISTEMAS MICROPROCESADOS NOMBRES: Wilmer Villegas Cristian Ayala FECHA: 1 6 – 0 4 – 2012 Realizar un los pórticos por PINA6 incrementar
programa utilizando las interrupciones de cambio de estado de (otras interrupciones externas), el pr ograma es un contador que sea para decrementar un contador y por el PINA7 sea para mi contador.
PROGRAMA EN AVR: .include"m164pdef.inc"
; garantizo pull-up
; declaramos las variables que vamos a usar en el programa .def tempo=r17 .def conta=r18 .def aux=r19 .def ant=r20 .def act=r21
in tempo,mcucr andi tempo,0b11101111 out mcucr,tempo ; activo el stack pointer ldi r16,high(ramend) out sph,r16 ldi r16,low(ramend) out spl,r16 ; habilitación de las interrupciones en cada pórtico ldi tempo,0b00000001 sts PCICR,tempo ; habilitación las interrupciones por cada pin del pórtico ldi tempo,0b11000000 sts PCMSK0,tempo ; habilitacion global de interrupciones Sei ; cargo el estado anterior del pórtico de entrada para el uso de las interrupciones in ant,pina clr conta
; pongo los interrupciones
vectores
.org 0x00 j mp m a i n .org 0x08 j mp c h e q u e a r main: ; declaro el pórtico b como salida ser tempo out ddrb,tempo ; declaro el pórtico a como entrada clr tempo out ddra,tempo ; pongo mis entradas como pull-up ldi tempo,0b11000000 out porta,tempo
de
lazo: out portb,conta rjmp lazo
; subrutina de interrupcion donde chequeo que pin va a ser usado chequear: ; salvo el estado de la bandera push tempo in tempo,sreg push tempo ; guardo el estado actual del pórtico de entrada a in act,pina ; realizo la or exclusiva para saber que pin a cambiado de estado eor act,ant ; compare los pines que voy a usar cpi act,0b01000000 breq subir cpi act,0b10000000 breq bajar rjmp salir subir: ;inc aux ;sbrs aux,0
;rjmp salir inc conta ldi r22,255 cp conta,r22 brlo salir ldi conta,255 rjmp salir
bajar: ;inc aux ;sbrs aux,0 ;rjmp salir dec conta brne salir clr conta rjmp salir salir: pop tempo out sreg,tempo pop tempo reti
SIMULACION EN PROTEUS:
DIAGRAMA DE FUJO: