sábado, 16 de junio de 2012
SUBRUTINA
Es un conjunto de instrucciones al que se tiene acceso desde cualquier tipo del programa principal. es decir una subrutina es un subprograma que se ejecuta cada vez que el programa principal lo necesite.
call xxxx // llamado de la subrutina xxxx.
xxxxx
.......
........
........
return // se sale de la subrutina y retorna al programa principal.
LIBRERÍAS CON SUBRUTINA DE RETARDO
En la mayoría de los proyectos es necesario controlar el tiempo es por eso que los retardos son probablemente las subrutinas mas utilizadas dentro los programas.
Para calcular el tiempo checar pag. 170 del libro microcontrolador 16f84a.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
realice la librería del mismo libro:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CBLOCK
R_ContA
R_ContB
R_ContC
ENDC
Retardo_10micros
nop
nop
nop
nop
nop
Retardo_5micros
nop
Retardo_4micros
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;RETARDOS de 20 hasta 500 microsegundos
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,;;;
Retardo_500micros
nop
movlw d'164'
goto RetardoMicros
Retardo_200micros
nop
movlw d'64'
goto RetardoMicros
Retardo_100micros
movlw d'31'
goto RetardoMicros
Retardo_50micros
nop
movlw d'14'
goto RetardoMicros
Retardo_20micros
movlw d'5'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RetardoMicros
movwf R_ContA
Rmicros_Bucle
decfsz R_ContA,F
goto Rmicros_Bucle
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;RETARDOS de 1ms hasta 200ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Retardo_200ms
movlw d'200'
goto Retardos_ms
Retardo_100ms
movlw d'100'
goto Retardos_ms
Retardo_50ms
movlw d'50'
goto Retardos_ms
Retardo_20ms
movlw d'20'
goto Retardos_ms
Retardo_10ms
movlw d'10'
goto Retardos_ms
Retardo_5ms
movlw d'5'
goto Retardos_ms
Retardo_2ms
movlw d'2'
goto Retardos_ms
Retardo_1ms
movlw d'1'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Retardos_ms
movwf R_ContB
R1ms_BucleExterno
movlw d'249'
movwf R_ContA
R1ms_BucleInterno
nop
decfsz R_ContA,F
goto R1ms_BucleInterno
decfsz R_ContB,F
goto R1ms_BucleExterno
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;RETARDOS de 0.5 hasta 20 segundos
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Retardo_20s
movlw d'200'
goto Retardo_1Decima
Retardo_10s
movlw d'100'
goto Retardo_1Decima
Retardo_5s
movlw d'50'
goto Retardo_1Decima
Retardo_2s
movlw d'20'
goto Retardo_1Decima
Retardo_1s
movlw d'10'
goto Retardo_1Decima
Retardo_500ms
movlw d'5'
Retardo_1Decima
movwf R_ContC
R1Decima_BucleExterno2
movlw d'100'
movwf R_ContB
R1Decima_BucleExterno
movlw d'249'
movwf R_ContA
R1Decima_BucleInterno
nop
decfsz R_ContA,F
goto R1Decima_BucleInterno
decfsz R_ContB,F
goto R1Decima_BucleExterno
decfsz R_ContC,F
goto R1Decima_BucleExterno2
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Lo guarde con la terminación .INC lo cual indica que es una librería.
TEMPORIZADOR 0-9 SEGUNDOS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
LIST P=16F84A
INCLUDE<P16F84A.INC>
CBLOCK 0x0E
ENDC
status equ 0x03
porta equ 0x05
portb equ 0x06
trisa equ 0x85
trisb equ 0x86
org 0
inicio
bsf status,5
clrf trisb
movlw b'11111'
movwf trisa
bcf status,5
clrf portb
ini
movlw b'00111111'
movwf portb
principal
btfsc porta,0
goto principal
call Retardo_10micros
btfsc porta,0
goto principal
goto activar
deje
btfss porta,0
goto deje
goto principal
activar
call Retardo_1s ; llamado de la subrutina del retardo 1 segundo la cual se encuentra en la librería.
movlw b'0000110' ; 1
movwf portb
call Retardo_1s
movlw b'1011011' ; 2
movwf portb
call Retardo_1s
movlw b'1001111' ; 3
movwf portb
call Retardo_1s
movlw b'1100110' ; 4
movwf portb
call Retardo_1s
movlw b'1101101' ; 5
movwf portb
call Retardo_1s
movlw b'1111101' ; 6
movwf portb
call Retardo_1s
movlw b'0000111' ; 7
movwf portb
call Retardo_1s
movlw b'1111111' ; 8
movwf portb
call Retardo_1s
movlw b'1101111' ; 9
movwf portb
call Retardo_1s
goto ini
INCLUDE <retardos.inc> ; se incluye la librería de retardos en el programa principal.
END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MATERIAL:
1- Pushbutton.
1- Resistor de 10k.
1- Display 7 segmentos ánodo común.
1- Pic 16f84a.
1- Cristal de 4Mhz.
2- Capacitores cerámicos de 22pf.
7- Resistores de 220.
SIMULACIÓN:
Se necesita apretar el push para que empiece el conteo.
VIDEO DE LA SIMULACION:
En el ejemplo nadamas se utilizo la subrutina de un segundo pero de la misma forma se pueden mandar a llamar cualquier subrutina de la librería o se pueden ir anidando.
Se puede incluir la librería al realizar un
proyecto en mplab o copiar la librería en la misma carpeta en que vas a
guardar tu programa principal(.asm).
DESCARGAR LIBRERÍA Y PROGRAMA SIMULADO EN PROTEUS:
Etiquetas:
lenguje asm,
practicas simuladas
|
0
comentarios
Suscribirse a:
Entradas (Atom)