Mis primeros programas en assembler - Micros Designs
Mis primeros programas en assembler - Micros Designs
Mis primeros programas en assembler - Micros Designs
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