26.12.2014 Views

microcontrolador mc68hc11

microcontrolador mc68hc11

microcontrolador mc68hc11

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!