/*Includes*/
#include "p18F4550.h"
#include "delays.h"
/* Para utilizar demoras en nuestro código debemos incluir la librería delays.h. En ella tenemos 4 funciones:
Delay10TCYx(i) -> 10.Tcy.i genera una demora de 10 ciclos de instrucciones * i
Delay100TCYx(i) -> 100.Tcy.i genera una demora de 100 ciclos de instrucciones * i
Delay1KTCYx(i) -> 1000.Tcy.i genera una demora de 1000 ciclos de instrucciones * i
Delay10KTCYx(i) -> 10000.Tcy.i genera una demora de 10000 ciclos de instrucciones * i
i puede tomar un valor de 1 a 255. Si se toma valor 0 i es 256
Para calcular el tiempo que queremos debemos tener en cuenta la frecuencia a la que trabaja el pic
(la frecuencia del cristal de cuarzo).
TCY se calcula como 4/fosc
donde fosc = frecuencia de oscilador
Ejemplo con cristal de 4mhz
En este caso 4*10^6(4MHz),
por lo tanto TCY 4/4000000 = 1/10^6 = 0,000001sec
1 TCY = 0,000001seg
1.000.000 TCY= 1 seg
para calcular un segundo
1seg * 1 TCY
------------------- = 1.000.000 TCYs
0,000001seg
calculo del valor de i usando la función Delay10KTCYx(i)= i equivale a 10000 TCYs
1.000.000 TCYs
------------------- = 100i
10.000 TCY
Delay10KTCYx(100); //dura 1 seg
ejemplo con cristal de 20mhz
TCY se calcula como 4/fosc
En este caso 20*10^6(20MHz), por lo tanto TCY = 4/20*10^6 = 0,0000002
1 TCY = = 0,0000002seg
para calcular un segundo
1seg * 1 TCY
------------------- = 5.000.000 TCYs
0,0000002seg
calculo del valor de i usando la función Delay10KTCYx(i)= i equivale a 10000 TCYs
5.000.000 TCYs
------------------- = 500i
10.000 TCY
divido 500 entre 255 para separar el tiempo en n Delay10KTCYx(i) ya que i puede tomar valores de 1 a 255
Delay10KTCYx(255); // usando los dos delay llego al segundo
Delay10KTCYx(245); //
para medio segundo uso 250 y 250
*/
/* Bits de configuración*/
#pragma config PLLDIV = 5 // 20 MHz crystal on board
#pragma config FOSC = HS // using an external, high speed crystal, PLL module is disabled
#pragma config FCMEN = OFF // Fail-safe clock monitor disabled
#pragma config IESO = OFF // Internal/External Oscillator switchover disabled
#pragma config PWRT = OFF // Power-up Timer disabled
#pragma config BOR = OFF // Brown-out reset disabled
#pragma config BORV = 3 // Brown-out voltage at minimum setting
#pragma config VREGEN = ON // USB voltage regulator enabled
#pragma config WDT = OFF // Watchdog timer hardware disabled, software controlled
#pragma config WDTPS = 32768 // Watchdog timer postscale 1:32768 (max)
#pragma config MCLRE = OFF // MCLR pin disabled, RE3 input pin disabled
#pragma config LPT1OSC = OFF // Low power timer 1 oscillator bit low-- timer 1 configured for higher power operation
#pragma config PBADEN = OFF // PORTB <4:0> pins are configured as digitial I/O on reset
#pragma config CCP2MX = ON // CCP2 input/output is multiplexed with RC1 (vs RB3)
#pragma config STVREN = ON // Stack full/underflow will cause reset
#pragma config LVP = OFF // Single supply ICSP disabled
#pragma config XINST = OFF // Instruction set extension and indexed addressing mode disabled (legacy mode)
#pragma config DEBUG = OFF // Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
#pragma config CP0 = OFF // Code protection bits-- Block 0 (000800 - 001FFFh) not code-protected
#pragma config CP1 = OFF // (002000 - 003FFFh)
#pragma config CP2 = OFF // (004000 - 004FFFh)
#pragma config CPB = OFF // Boot block (000000 - 0007FFh) not code-protected
#pragma config CPD = OFF // Data EEPROM not code-protected
#pragma config WRT0 = OFF // Block 0 not write-protected
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRTB = OFF // Boot block not write-protected
#pragma config WRTC = OFF // Configuration register not write-protected
#pragma config WRTD = OFF // EEPROM not write-protected
#pragma config EBTR0 = OFF // Block 0 not protected from table reads executed in other blocks
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTRB = OFF
/*declaración de variables*/
unsigned char i; //Para contar 0 titilaciones.-
/*declaración de funciones*/
/*****Programa principal******/
void main(void)
{
ADCON1=0x0F;//Todos entrada/salida digitales. - equivalente en binario ADCON1= 0b00001111
TRISA=0x00; //Todos como salida- - equivalente en binario TRISA = 0b00000000
LATA=0x00; //Leds apagados.- - equivalente en binario LATA = 0b00000000
while(1)
{
for(i=1;i<=100;++i)
{
LATA=0xfF; // equivalente en binario LATA = 0b11111111
Delay10KTCYx(250); // espero medio segundo
LATA=0x00; // equivalente en binario LATA = 0b00000000
Delay10KTCYx(250); // espero medio segundo
LATB=0xfF; // equivalente en binario LATB = 0b11111111
Delay10KTCYx(250); // espero medio segundo
}
}
}