El código que hice es muy sencillo, es el típico que se utiliza para comprobar si un PIC funciona, la mayoría lo hizo el asistente de creación de proyectos de mi programa. Mi archivo main.c es el siguiente:
#include "C:\Users\Usuario\Documents\PIC\LED 2\main.h"
#define led pin_b0
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
do
{
output_high(led);
delay_ms(500);
output_low(led);
delay_ms(500);
}while(TRUE);
}
También adjunto el main.h a continuación:
#include <16F88.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES RESERVED //Used to set the reserved FUSE bits
#use delay(clock=1000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=8)
El archivo que invoca el main.h es la librería estándar para este PIC, que viene incluida con el programa.
Respecto a lo del oscilador, trabajo con el reloj interno del PIC, que he configurado para que funcione a 1MHz utilizando el asistente de creación de proyectos. ¿Necesito más tasa de refresco? Parece absurdo, pues lo único que tiene que hacer es esperar... Además, es capaz de esperar menos tiempo: he probado a cambiar en el código el tiempo de espera a 25ms y me lo redujo (a pesar de seguir siendo aproximadamente 30 veces más de lo que yo pedía). El problema es que necesito algo de precisión, pues tenía pensado utilizar el PIC para comunicarme con unos servos mediante el sistema de variación de anchos de pulso que utilizan.
Por cierto, lo he simulado en el Proteus con el .hex que he compilado y funciona sin problemas, lo cual es bastante desconcertante...
PD: Releyendo el primer mensaje, me he dado cuenta de que el dato que introduje es incorrecto: no multiplica el tiempo de espera por 3, sino por 30.