You are on page 1of 4

Eleven Seven Programming Class

/* WatchDog_Timer (Demonstration of the Watchdog Timer usage)


This code demonstrates how to embed Assembly language blocks
and how to clear the Watchdog timer. */

void main()
{
OPTION_REG = 0x0E; // assign prescaler to the WDT, with 1:64 rate
asm CLRWDT; // asm line, clear WatchDog Timer
PORTB = 0x0F; // Initialize PORTB
TRISB = 0; // Configure PORTB as output
Delay_ms(300); // Wait 0.3 seconds
PORTB = 0xF0; // Change PORTB value
while (1); // endless loop, WatchDog_Timer will reset PIC
}

/* This code demonstrates using interrupts in mikroC. Program turns on/off


LEDs on PORTB approximately each second using timer 0 interrupt. */
unsigned cnt, var;
void interrupt()
{
cnt++; // Increment value of cnt on every interrupt
TMR0 = 96;
INTCON = 0xA0; // Set T0IE, clear T0IF
}
void main() {
OPTION_REG = 0x84; // Assign prescaler to TMR0
TRISB = 0; // PORTB is output
PORTB = 0xFF; // Initialize PORTB
TMR0 = 96; // Timer0 initial value
INTCON = 0xA0; // Enable TMRO interrupt
cnt = 0; // Initialize cnt
var = 0x0F;

PIC Microcontroller Programming Page 1


Eleven Seven Programming Class

PORTB = var;
do {
if (cnt == 400) {
var = ~var;
PORTB = var; // Toggle PORTB LEDs
cnt = 0; // Reset cnt
}
} while(1);
}

/* This code demonstrates how to use TMR1 for interrupts. Program toggles
LEDs on PORTB. */

unsigned short cnt, var;


void interrupt() {
cnt++ ;
PIR1.TMR1IF = 0; // clear TMR1IF
TMR1H = 0x80;
TMR1L = 0x00;
}
void main() {
TRISB = 0X00; // PORTB is output
T1CON = 1; // Timer1 settings
PIR1.TMR1IF = 0; // clear TMR1IF
TMR1H = 0x80; // Initialize Timer1 register
TMR1L = 0x00;
PIE1.TMR1IE = 1; // enable Timer1 interrupt
var = 0xF0;
PORTB = var; // Initialize PORTB
cnt = 0; // initialize cnt
INTCON = 0xC0; // Set GIE, PEIE
do {
if (cnt == 76) { // if cnt is 76

PIC Microcontroller Programming Page 2


Eleven Seven Programming Class

var = ~var;
PORTB = var; // then toggle PORTB leds and
cnt = 0; // reset cnt
}
} while (1);
}

/* This code demonstrates using interrupts and TMR2. Program toggles LEDs on
PORTB and PORTD each second. */

unsigned short cnt, var1, var2;


void Toggle()
{
var 1= ~var1;
var2 = ~var2;
PORTB = var1; // toggle PORTB
PORTD = var2; // toggle PORTD
}

void interrupt() {
cnt++ ; // increment counter
PIR1.TMR2IF = 0; // clears TMR2IF
TMR2 = 0;
}

void main() {
cnt = 0; // initialize cnt
PORTB = 0xFF; // Initialize PORTB
TRISB = 0; // PORTB is output
PORTD = 0x00; // Initialize PORTD
TRISD = 0; // PORTD is output
T2CON = 0xFF; // Timer2 settings

PIC Microcontroller Programming Page 3


Eleven Seven Programming Class

TMR2 = 0; // Initialize Timer2 register


PIE1.TMR2IE = 1; // enable interupt
INTCON = 0xC0; // Set GIE, PEIE
while (1) { // endless loop
if (cnt > 30) { // if cnt is 76
Toggle(); // toggle values on PORTB, PORTD
cnt = 0; // reset cnt
}
}
}

PIC Microcontroller Programming Page 4

You might also like