'*************************************************************************************************
'Ejemplo para practicas con PWM por software
'Pic16F628A
'*************************************************************************************************
'Declaración del modo de trabajo del Pic (FUSES O CONFIGURACIÓN DE BITS):
'Oscilador Externo tipo XT, tramo media/baja velocidad:
'_BOREN_ON, _CP_OFF, _DATA_CP_OFF, _PWRTE_ON, _WDT_OFF, _LVP_OFF, _MCLRE_OFF, _XT_OSC
'Define CONF_WORD = 0x3f41 'Para cristal externo tipo XT
'Oscilador interno, por defecto suele ser 4Mhz:
'_BOREN_ON, _CP_OFF, _DATA_CP_OFF, _PWRTE_ON, _WDT_OFF, _LVP_OFF, _MCLRE_OFF, _INTOSC_OSC_NOCLKOUT
Define CONF_WORD = 0x3f50
'-------------------------------------------------------------------------------------------------
Define CLOCK_FREQUENCY = 4 'Indica al compilador la frecuencia a la que se trabaja
'-------------------------------------------------------------------------------------------------
'Configuración de módulos del Pic
AllDigital
TRISA = 0 'Los pin que no se usan se configuran como salidas
TRISB = 0 'Los pin que no se usan se configuran como salidas
TRISB.0 = 0
PORTB.0 = 0
'El pin RA5 de este Pic ignora las configuraciones porque solo puede
'trabajar como entrada, por lo que siempre hay que polarizarlo a nivel 1 o 0
'cuando trabaja como digital como es en este caso.
'--------------------------------------------------------------------------------------------------
'Declaración de varialbles globales
Dim nivel As Byte
nivel = 5
'--------------------------------------------------------------------------------------------------
'Rutina principal del programa
main:
Call _pwm_rb0(nivel)
nivel = nivel + 50
If nivel > 245 Then nivel = 5
Goto main
End
'Definición de Subrutinas o de Funciones
Proc _pwm_rb0(_power As Byte)
Const periodo = 255
Dim t_low As Byte
If _power > 0 Then RB0 = 1
WaitUs _power
RB0 = 0
WaitUs t_low
End Proc