13.11.2012 Views

Mis primeros programas en assembler - Micros Designs

Mis primeros programas en assembler - Micros Designs

Mis primeros programas en assembler - Micros Designs

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Creación de Demoras:<br />

Ciclo de maquina:<br />

Es la unidad básica de tiempo que utiliza el microcontrolador y equivale a 4 ciclos de reloj. Ósea, si t<strong>en</strong>emos<br />

un oscilador de 4 MHz, el ciclo de reloj seria de 250 ns y el ciclo máquina de 1 us.<br />

Las instrucciones del microcontrolador necesitan 1 ciclo maquina excepto algunas excepciones, como son los<br />

comandos que incluy<strong>en</strong> saltos (goto, call, btfss, btfsc, return, etc) que necesitan dos ciclos máquina.<br />

Demoras mediante lazo simple<br />

Código<br />

1. Demora_xxus<br />

2. movlw 0xXX ; Cargamos valor XX que controla duración (1)<br />

3. movwf Contador ; Iniciamos Contador (1)<br />

4. Repeticion<br />

5. Decfsz Contador ; Decrem<strong>en</strong>ta contador y si es cero sale (1 si no<br />

sale, 2 si sale)<br />

6. goto Repeticion ; No es 0, repetimos (2)<br />

7. return ; Regresamos de la subrutina (2)<br />

Entre paréntesis se muestra el número de ciclos que demora cada instrucción.-<br />

De manera que el número de ciclos de instrucción Tsub consumidos por la rutina, incluy<strong>en</strong>do los 2 ciclos de la<br />

llamada (CALL) serán<br />

Tsub = [2 + 1 + 1 + (0xXX - 1)*(1 + 2) + 2 + 2] ciclos = (3*0xXX + 5) *Tcy<br />

Donde Tcy es la duración <strong>en</strong> segundos de un ciclo de instrucción. Utilizando un oscilador de 4 MHz la mayor<br />

duración posible es de 770 us, con 0xXX = 0xFF.-<br />

Demoras mediante Lazos anidados<br />

Para lograr demoras de mayor duración deb<strong>en</strong> utilizarse lazos anidados, poni<strong>en</strong>do un lazo de demora d<strong>en</strong>tro de<br />

otro.<br />

Código<br />

1. Demora_xx<br />

2. movlw 0xXX ; (1)<br />

3. movwf Contador1 ; (1)<br />

4. Repeticion1<br />

5. movlw 0xYY ; (1)<br />

6. movwf Contador2 ; (1)<br />

7. Repeticion2<br />

8. decfsz Contador2,1 ; (1 si no sale, 2 si sale)<br />

9. goto Repeticion2 ; (2)<br />

10. decfsz Contador1,1 ; (1 si no sale, 2 si sale)<br />

11. goto Repeticion1 ; (2)<br />

12. return ; (2)<br />

La duración de esta rutina <strong>en</strong> ciclos de reloj será<br />

Tsub = 2 + 1 + 1 + (0xXX-1)*[1 + 1 + (0xYY - 1)*(1 + 2) + 2 + 1 + 2] + [1 + 1 + (0xYY - 1)*(1 + 2) + 2 + 2<br />

+ 2] ciclos<br />

Lo cual se puede simplificar como sigue<br />

Autor: Suky Mail: inf.pic.suky@live.com.ar Web: www.micros-designs.com.ar

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

Saved successfully!

Ooh no, something went wrong!