microcontrolador mc68hc11
microcontrolador mc68hc11
microcontrolador mc68hc11
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
MICROCONTROLADOR 68HC11: Fundamentos, recursos y programación.<br />
MICROBÓTICA.<br />
En el siguiente ejemplo se utiliza el comparador 5 para realizar una pausa. La pausa se realiza mediante<br />
espera activa .Se hace parpadear el led.<br />
; +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
; ¦ DELAY.ASM (C) GRUPO J&J. Marzo 1997 ¦<br />
; ¦−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−¦<br />
; ¦ Programa ejemplo para ser ejecutado en la tarjeta CT6811. ¦<br />
; ¦ Este programa se debe cargar en la RAM interna del 6811. ¦<br />
; ¦ ¦<br />
; ¦ Ejemplo de utilización del comparador 5 para realizar una pausa ¦<br />
; ¦ múltiplo de 10ms exactos mediante espera activa. ¦<br />
; +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
TMSK1 EQU $22<br />
TFLG1 EQU $23<br />
TCTL1 EQU $20<br />
TOC5 EQU $1E<br />
TMSK2 EQU $24<br />
TCNT EQU $0E<br />
PORTA EQU $00<br />
TIEMPO EQU 20000 ; Número de tics de reloj necesarios para generar un<br />
; retraso de 10 ms. Cada tic de reloj son 500ns = 0.5microseg<br />
; 20000*0.5 = 10000microseg = 10mseg.<br />
ORG $0000<br />
LDX #$1000<br />
LDAA #$40<br />
STAA PORTA,X<br />
; Encender el led.<br />
bucle LDAA #50 ; Esperar 50 unidades de tiempo = 500mseg<br />
BSR delay<br />
LDAA PORTA,X ; Cambiar de estado el led.<br />
EORA #$40<br />
STAA PORTA,X<br />
BRA bucle<br />
;+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
;¦ Subrutina para de espera. ¦<br />
;¦ ENTRADAS: Acumulador A contiene el número de unidades de tiempo ¦<br />
;¦ a esperar. Cada unidad de tiempo son 10ms. ¦<br />
;+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
delay<br />
fin_delay<br />
RTS<br />
CMPA #0 ; ¿Queda alguna unidad de tiempo por esperar <br />
BEQ fin_delay ; No−−> terminar<br />
DECA<br />
; Si−−> queda una unidad menos<br />
BSR delay10 ; Esperar una unidad de tiempo<br />
BRA delay<br />
; Repetir<br />
;+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
;¦ Subrutina para esperar 10ms. ¦<br />
;+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+<br />
delay10<br />
PSHA<br />
LDD TCNT,X<br />
; Escribir en comparador 5 el valor del<br />
ADDD #TIEMPO<br />
STD TOC5,X<br />
; temporizador principal más el número de<br />
; tics de reloj necesarios para una pausa<br />
; de 10ms.<br />
BSET TFLG1,X $08 ; Poner a cero flag del comparador 5<br />
oc5 BRCLR TFLG1,X $08 oc5 ; Esperar a que se activa flag del comparador<br />
PULA<br />
RTS<br />
END<br />
; Terminar<br />
La subrutina delay10 realiza exactamente una pausa de 10ms utilizando el comparador 5. En este ejemplo<br />
no se han utilizado interrupciones. El funcionamiento de la rutina delay10 es el siguiente: primero se lee el valor de<br />
temporizador. A este valor se le añade el número correspondiente a un retraso de 10ms. El resultado se introduce en<br />
el comparador 5. El temporizador seguirá ’contando’. Cuando se iguale al valor que se había depositado en el<br />
comparador querrá decir que ha transcurrido el intervalo de tiempo que se quería. El flag del comparador 5 se activa.<br />
La subrutina delay10 espera a que este flag se active. Cuando se active este flag habrán transcurrido exactamente<br />
10ms.<br />
¿Qué valor hay que sumar al valor del temporizador para que se produzca una pausa de 10ms. El<br />
temporizador se incrementa cada 500ns = 0.5 microsegundos. Se dice que un tic del temporizador tiene un periodo de<br />
500ns. Para conseguir un retraso de 10ms se necesitará que transcurran 20000 tics (20000 * 0.5 microseg = 10000<br />
microseg = 10 mseg). Con un valor de 2000 tics se obtendría un retraso de 1ms.<br />
LXXI