/*
* File: DLY1.c
*
*/
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator).
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled).
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled).
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR enabled).
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial
Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for
programming).
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data
EEPROM code protection off).
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write
protection off; all program memory may be written to by EECON control).
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code
protection off).
#include <xc.h> // Include the header file.
int COUNT = 0; // COUNT is declared as an integer with
value = 0
int DLY = 0; //
void main(void) //
{ //
PORTC = 0; // Clear PORTC bits
TRISC = 0x03; // Makes RC0 and RC1 of PORTC as inputs
PORTD = 0; // Clear PORTD bits
TRISD = 0xFE; // Make RD0 of PORTD as output
ADCON0 = 0x00; // This makes ADCON0 offTe various TMR1
control bits
OPTION_REG = 0x07; // This sets various TMR0 configuration
INTCON , TMR0IE = 1; //
while (1) // This makes the previous steps
executed only once
{ //
DLY: { //
while (!T0IF); // Stays here upto 256 and then T0IF =
1
T0IF = 0; // Resetting the T0IF over flow flag
COUNT ++; // Increments the counter
if (COUNT == 137) // When Count reaches 137, execute the
next instruction //
{ //
COUNT = 0; //
TMR0 = 0; // Timer starts from 0
while (TMR0 < 137); // do nothing while the TMR0 counts up
to 137. Execute the next instruction when it exceeds 137
} //
} //
PORTD, RD0 = 0; //
while (PORTC,RC0 == 0); // Do nothing while RC0 = low and stay
here. Executes the next instruction When RC0 = 1
goto DLY; //
PORTD, RD0 = 1; //
} //
} //
/*
RC1 = 1, RC0 = 0 LED OFF
RC0 = 0, RC1 = 0 LED OFF
RC1 = 1, RC0 = 1 LED Flashes
RC0 = 1, RC1 = 0 LED ON
*
There are two methods of writing program which I have got from an authorized
text book
But both are wrong. The MPLAB XC8 ver.5. will not identify those statements in
brackets.
while (PORTB.0 == 0); // Wait until PORTB.0 becomes 1
while (PORTB.0); // Same instruction as the previous one
The correct usage is:
while(PORTD,RD0 == 0)
*
Also a statement like PORTD,RD0 = 0 is same as (PORTD,RD0 = 0)
Also a statement like while (PORTC == 0x00); denotes the whole bits are zero and
while (PORTC,RC0 == 0) refers a particular bit which is RC0 of PORTC.
Also a statement like PORTD = 0x01; is same as PORTD,RD0 = 0
*/