Compré una placa de desarrollo de Matrix Multimedia, HP488 ( hoja de datos ), pero no sé por qué fallo con un programa pequeño.
El programa debe encender un led con un retraso (4 segundos) usando TMR0. Entonces, a partir de mis cálculos, usando la fórmula: Freq. out = Freq. osc / [prescaler * (256 - TMR0) * count] El preescalador es 1: 256; TMR0 es 0, y el oscilador de frecuencia es 4Mhz (osccon = 0b01100000) Una instrucción se ejecuta en 4 ciclos de reloj. Entonces el reloj de frecuencia es 4Mhz / 4 = 1Mhz. cuenta = 61. Utilizo el IDE de sourceBoost, y el compilador es BoostC.
Mira mi código:
#include<system.h>
unsigned int counter = 0;
void Delay(void)
{
if(intcon & 2) // check if TMR0IF is set
{
clear_bit( intcon, 2 ); // if TMR0IF is set, clear this bit
counter = counter + 1; // increments the counter
if(counter == 61)
{
counter = 0;
portb = ~portb; // flash the Led 0 of Port B
}
}
}
void main(void)
{
trisb = 0x00; // set all pins of Port B as output
portb = 0x01; // RB0 is high
tmr0 = 0; // the value of TMR0 register is zero.
cmcon = 0x07; // comparators is off.
option_reg = 0b00000111; // prescaler is assigned to the WDT, prescaler 1:256
intcon = 0b10100000; // GIE - enable, TMR0IE - enable
while(1)
{ }
}
El programa compila bien, carga bien, pero no me muestres el parpadeo del led. Que estoy haciendo mal ? ¿Hay alguna configuración que no conozca?