Hy.
Quiero hacer un programa que alterne un led usando el modo de comparación, establecer salida en coincidencia (se establece el bit CCP1IF). No sé si es posible lo que quiero hacer. De todos modos el RB0 siempre está encendido. Lo sé, debe estar ENCENDIDO porque cuando el valor cargado en el registro ccpr1 coincide con el valor del registro tmr1, se establece el RB0. Pero si quieres restablecer la salida RB0? He hecho esto en la función de interrupción () escribiendo la siguiente instrucción: ccp1con = 0b00001001; Y ahora el RB0 permanece siempre apagado.
#include <system.h>
#pragma DATA _CONFIG1, _EXTRC_CLKOUT & _WDT_OFF & _LVP_OFF
void interrupt()
{
if((pir1 & 0x01) && (pir1 & 0x04))
{
clear_bit(pir1, 0); // clear TMR1IF
clear_bit(pir1, 2); // clear CCP1IF
ccp1con = 0b00001001; // clear output on match
}
}
void main()
{
trisb = 0xf0;
portb = 0x00;
tmr1h = 0;
tmr1l = 0;
ccpr1l = 0x60;
ccpr1h = 0xEA;
cmcon = 0x07;
t1con = 0b00000001; // prescaler = 1
intcon = 0b11000000;
pie1 = 0b00000101;
ccp1con = 0b00001000; // set output on match
while(1)
{
}
}