SE – uC: PIC16F84A – Práctica #7

Requisitos del Programa

Realizar un programa que genere una onda cuadrada con un periodo de 100ms, 75ms en 5v y 25ms en 0v. Utilizando el TMR0 con su bandera de interrupción para medir el tiempo.

Planeación

Primero definiré los puertos de entrada y salida:

Entradas: NA

Salidas: PORTB.0

Para realizar este programa necesitamos utilizar y configurar el TMR0 para realizar la medición del tiempo. Para configurar el TMR0 se utiliza el registro OPTION_REG donde lo establecí de la siguiente manera:

T0CS= 0 Timer (No contador)

T0SE= X No importa su valor

PSA= 0 Pre escala activada

PS2-PS0 = 000 Escala = 1:2

Entonces OPTION_REG = 1000 0000 = 0x80

Para calcular cuantas veces se debe desbordar el TMR0 lo calcule de la siguiente manera:

Diagrama de Flujo

Código Fuente

;--------------------------------------------------------------
;	NOMBRE DEL PROGRAMA:
;			Practica #7
;	DESCRIPCION: 
;			Generador de onda cuadrada
;
;	POR:	Omar Gurrola
;
;	FECHA:	Miercoles 24/10/06
;	HORA:	09:59 AM
;--------------------------------------------------------------
;	Configuracion para el GRABADOR

	__CONFIG	_CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
	
;_CP_ON / _OFF		Proteccion del Codigo
;_PWRTE_ON / _OFF	Reset mediante Power-Up Timer
;_WDT_ON / _OFF		WatchDog
;_LP_OSC			Oscilador de bajo Consumo (35Khz a 200Khz)
;_XT_OSC			Oscilador de Cristal (100khz a 4Mhz
;_HS_OSC			Oscilador de Alta velocidad (4Mhz a 20Mhz)
;_RC_OSC			Oscilador Resistencia-Capacitor ()
;--------------------------------------------------------------
;	Definiciones y Declaracion del Micro
	LIST	P=16F84A		;Procesador utilizado
	INCLUDE	<P16F84A.INC>	;Definicion de algunos operandos
;--------------------------------------------------------------
;	Declaracion de Constantes, Variables y Base
	RADIX	HEX		;Base Hexadecimal
	
	#DEFINE	BANK_0	BCF	STATUS,RP0	;Ir al banco 0
	#DEFINE	BANK_1	BSF	STATUS,RP0	;Ir al Banco 1

    CBLOCK	0X0C
		CONT
		ULT
		PULSO
	ENDC	
;--------------------------------------------------------------
;	Vectores de Interrupcion

	ORG	0			;Ensamblar en la Dir 0
	GOTO	PROGRAMA	
	ORG 5			;Ensamblar en la Dir 5
;--------------------------------------------------------------
;	PROGRAMA
;--------------------------------------------------------------
PROGRAMA
	BANK_1
	CLRF	TRISB			;PORTB = 0 = Salidas
	MOVLW	0X80
	MOVWF	OPTION_REG		;OPTION_REG = 0x80 = 1000 0000
	BANK_0

INICIO
	MOVLW	D'146'
	MOVWF	CONT			;CONT = 146 * 2 * 256 = 74,752us
	BSF		PULSO,0			;PULSO.0 = 1
	CALL 	PULSOS			;CALL PULSOS
	MOVLW	D'49'
	MOVWF	CONT			;CONT = 49 * 2 * 256 = 25,088us
	BCF		PULSO,0			;PULSO.0 = 0
	CALL 	PULSOS			;CALL PULSOS
	GOTO 	INICIO

PULSOS
	MOVF	PULSO,W
	MOVWF	PORTB			;PORTB = PULSOS
DEC
	CLRF	TMR0			;TMR0 = 0
	BCF		INTCON,T0IF		;INTCON.T0IF = 0
SDEC
	BTFSS	INTCON,T0IF		;INTCON.T0IF = 1 ?
	GOTO	SDEC			;NO, GOTO SDEC
	DECFSZ	CONT,F			;SI, CONT-- = 0 ?
	GOTO 	DEC				;NO, GOTO DEC
	RETURN					;SI, RETURN
	
	END						;Fin del programa

Galería

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: