Hola chicos, alguien me podría echar una manito tengo un código de un Dimmer hecho por mi en un pic 16f84a y quiero pasarlo a un pic 16F877A para agregarle una entrada análoga para registrar un voltaje porque el pic 84 no tiene entradas análogas.
les pongo el código y así les pueda servir a alguien también.
El código esta hecho en proton ide.
Desde ya muchas gracias
les pongo el código y así les pueda servir a alguien también.
El código esta hecho en proton ide.
Desde ya muchas gracias
Código:
Device 16F84A
XTAL=4
EData 30
ON_HARDWARE_INTERRUPT GoTo Interrupcion \' Cuando ocurre la interrupcion salta a Interrupcion
Symbol T0IE = INTCON.5 \' Habilitacion TMR0
Symbol T0IF = INTCON.2 \' Flag TMR0
Symbol GIE = INTCON.7 \' Interrupciones globales habilitadas
Symbol INTF = INTCON.1 \' Flag rb0
Symbol INTE = INTCON.4 \' Habilitar interrupcion b0
Symbol T0CS = OPTION_REG.5 \' Timer0 reloj interno o externo
Symbol INTEDG = OPTION_REG.6 \' Flanco ascendente rb0
Input PORTA
Output PORTB \' Puerto B como salida
Input PORTB.0 \' Puerto B.0 como entrada
Symbol Triac = PORTB.1 \' Simbolo triac
LCD_DTPIN PORTB.4 \' Puerto B salida datos B4 B5 B6 B7
LCD_RSPIN PORTB.2 \' Puerto B1 pin rs del lcd
LCD_ENPIN PORTB.3 \' Puerto B2 pin Enable del LCD
LCD_INTERFACE = 4 \' Configuracion LCD
LCD_LINES 2 \' Configuracion LCD
LCD_TYPE 0 \' Configuracion LCD
Dim Porcentaje As Byte
Dim contador As Byte
GoTo Inicio: \' Ir a inicio
Interrupcion: \' Interrupcion
If INTF = 1 Then \' Si se produjo la interrupcion de portb0
Low Triac \' Apago el triac
INTE = 0 \' Desabilito interrrupcion rb0
INTF = 0 \' Borro el flag de rb0
contador = 100 - Porcentaje \' Contador es una variable que se usa para
\'generar el retardo desde el punto cero hasta
\'el disparo es igual a porcentaje + 10 \'
\'ya que 10 es 1ms demora del transistor antes de cero
TMR0 = 165 \' El timer deberia ser de 100 pulsos cada vez osea
\'255- 100 + algunas instrucciones que ya pasaron
T0CS = 0 \' El timer cuenta con el reloj interno comienza a contar
T0IE = 1 \' Abilito la interrupcion del timer
ElseIf T0IF = 1 Then \' Si se desbordo el timer
T0IF = 0 \' Borro el flag del timer
TMR0 = TMR0 + 150 \' Cargo Timer con el valor actual mas 150 que serian 100 instrucciones de resto
Dec contador \' Decremento contador
If contador = 0 Then \' Si contador = 0
T0IE = 0 \' Desabilito la interrupcion del timer
INTE = 1 \' Habilito la interrupcion RB0
High Triac \' Prendo el triac
EndIf
EndIf
Context Restore \' Restaurar variables y volver al lugar donde se detuvo
Inicio:
Porcentaje = ERead 0 \' Leo posicion 0 de eeprom
GIE = 1 \' Habilito interrupcion general
INTE = 1 \' Habilito interrupcion RB0
programa:
Print At 1,1, "Porcentaje "
Print At 1,14, @Porcentaje
Print At 2,1, "lectura"
Print At 2,14, @ERead 0
DelayMS 100
If PORTA.1 = 1 And Porcentaje < 99 Then
Inc Porcentaje
EWrite 0, [Porcentaje ]
ElseIf PORTA.0 = 1 And Porcentaje > 1 Then
Dec Porcentaje
EWrite 0, [Porcentaje ]
End If
GoTo programa
Última edición por un moderador: