Anda di halaman 1dari 4

ENSAMBLADOR_0

MI PRIMER APORTE A LA COMUNIDAD

TODA SUGERENCIA SERA BIENVENIDA

;
;por la linea del puertb3 se generan varias ondas cuadrada por tanto cada semipe-
;riodo dura 500 mms.Los tiempos de temporizacion se consiguen mediante la
utilizacion
;del Timer0 del pic.
;a la linea de salida se puede conectar un altavoz, tal como se indica en el esquema
;correspondiente, con lo que se escuchara un pitido.
;el calculo de la carga del TMR0 se hara de forma simple despreciando el tiempo
que tardan
;en ejecutarse las instrucciones.

;configuracion

__CONFIG _CP_OFF& _WDT_OFF& _PWRTE_ON& _XT_OSC


LIST P=16F84A
INCLUDE "P16F84A.INC"

CBLOCK 0X0C
ENDC

#DEFINE salidaPORTB,3
TMR0_carga250mms EQU -d'125' ;wave 2KHz
TMR0_carga125mms EQU -d'62' ;wave 4KHz
TMR0_carga625mms EQU -d'156' ;wave 0.8KHz

Carga EQU d'255'


Extension EQU 0x10

;programa

ORG 0X00
inicio
bsf STATUS,RP0 ;acceso al banco 1.
bcf salida;esta linea se configura como salida.
here movlw b'00000000'
movwf OPTION_REG ;un prescaler de 2 se asigna al TMR0 (bit 3 del
registro)
bcf STATUS,RP0 ;acceso al banco 0.

movlw Carga
movwf Extension
wave2K

bsf salida;la salida pasa a nivel alto.


call TMR0_250mms ;durante este tiempo.
bcf salida;la salida pasa a nivel bajo
call TMR0_250mms ;durante este tiempo.
decfsz Extension,F ;Este registro permite percibir la onda en 255 ciclos
(de tal modo de escuchar algo)
goto wave2K

movlw Carga
movwf Extension
wave4k
bsf salida;la salida pasa a nivel alto.
call TMR0_125mms ;durante este tiempo.
bcf salida;la salida pasa a nivel bajo
call TMR0_125mms ;durante este tiempo.
decfsz Extension ;Este registro permite percibir la onda en 255 ciclos
(de tal modo de escuchar algo)
goto wave4k

movlw b'00000001'
movwf OPTION_REG

movlw Carga
movwf Extension
wave.8k
bsf salida;la salida pasa a nivel alto.
call TMR0_625mms ;durante este tiempo.
bcf salida;la salida pasa a nivel bajo
call TMR0_625mms ;durante este tiempo.
decfsz Extension ;Este registro permite percibir la onda en 255 ciclos
(de tal modo de escuchar algo)
goto wave.8k

goto here
;subrutina TMR0_500mms
------------------------------------------------------------------------------------
;
;como el pic trabaja a una frecuencia de 4 Mhz, el TMR0 evoluciona cada
microsegundo.
;para conseguir un retardo de 500mms con un prescaler de 2 el TMR0 debe contar
250 impulsos.
;efectivamente: 1mms x 250 x 2 = 500mms
;
;comprobando con la ventana Stopwatch del simulador se obtienen uno tiempos
para la onda cuadrada
;de 511mms para el nivel alto 513mms para el bajo.
;

TMR0_250mms
movlw TMR0_carga250mms ;carga el TMR0.
movwf TMR0
bcf INTCON,T0IF ;reseteo del flag de desbordamiento del TMR0.
TMR0_rebosamiento
btfss INTCON,T0IF ;se ha producido desbordamiento?
goto TMR0_rebosamiento ;todavia no.Repite
return

TMR0_125mms
movlw TMR0_carga125mms ;carga el TMR0.
movwf TMR0
bcf INTCON,T0IF ;reseteo del flag de desbordamiento del TMR0.
TMR0_rebosamiento1
btfss INTCON,T0IF ;se ha producido desbordamiento?
goto TMR0_rebosamiento1 ;todavia no.Repite
return

TMR0_625mms
movlw TMR0_carga625mms ;carga el TMR0.
movwf TMR0
bcf INTCON,T0IF ;reseteo del flag de desbordamiento del TMR0.
TMR0_rebosamiento2
btfss INTCON,T0IF ;se ha producido desbordamiento?
goto TMR0_rebosamiento2 ;todavia no.Repite
return

;comprobando en la ventana Stopwatch del simulador se obtienen unos tiempos


para la onda
;cuadrada de 511mms para el nivel alto y 513mms para el bajo.

INCLUDE "C:\Program Files (x86)\Microchip\MPASM


Suite\bibliotecasub\RETARDO.INC"

END