Anda di halaman 1dari 6

void interrupt

tc_int (void)

// interrupt function

{
if(INTCONbits.T0IF && INTCONbits.T0IE)
// if timer flag is set & interrupt en

{
abled

TMR0 -= 250;

// reload the timer - 250uS per inter

INTCONbits.T0IF = 0;
LATCbits.LATC0 = 1;
//PORTC = 0x1;
//PORTA = 0x2;

// clear the interrupt flag

rupt
// toggle a bit to say we're alive

}
}

/*****************************
Dependencies: xc.h
Processor:
PIC16f1829
Complier:
XC8 v1.00 or higher
*****************************/
#include <xc.h>
void main(void)
{
TRISCbits.TRISC0 = 0;
LATCbits.LATC0 = 1;
OPTION_REGbits.T0CS = 0;

// set as an output
//output high RC0
//Timer increments on instruction cl

ock
INTCONbits.T0IE = 1;
OPTION_REGbits.INTEDG = 0;
INTCONbits.INTE = 1;
INTCONbits. GIE = 1;

// Enable interrupt on TMR0 overflow


// falling edge trigger the interrupt
// enable the external interrupt
// Global interrupt enable

while (1);
}
void interrupt

tc_int (void)

// interrupt function

{
{
abled

if(INTCONbits.T0IF && INTCONbits.T0IE)


// if timer flag is set & interrupt en
TMR0 -= 250;

// reload the timer - 250uS per inter

INTCONbits.T0IF = 0;
LATCbits.LATC0 ^= 1;

// clear the interrupt flag


// toggle a bit to say we're alive

rupt
}
}

/*****************************
Dependencies: xc.h
Processor:
PIC18f4520

Complier:
XC8 v1.00 or higher
*****************************/
#include <xc.h>
int tick_count=0x0;
void main(void)
{
TRISCbits.TRISC0 = 0; //set us an output.
LATCbits.LATC0 = 1;

//output high;

T1CON = 0x01;
PIE1bits.TMR1IE = 1;
INTCONbits.PEIE = 1;
RCONbits.IPEN=0x01;
IPR1bits.TMR1IP=0x01;
upt Priority bit
INTCONbits.GIE = 1;
PIR1bits.TMR1IF = 0;
T0CON=0X00;
INTCONbits.T0IE = 1;
INTCON2bits.TMR0IP=0x00;
T0CONbits.TMR0ON = 1;
while (1);
}
void interrupt tc_int(void)
{
if (TMR1IE && TMR1IF)
{
TMR1IF=0;
++tick_count;
TRISC=1;
LATCbits.LATC0 ^= 0x01;
}
}

//Configure Timer1 interrupt

// TMR1 high priority ,TMR1 Overflow Interr

// Enable interrupt on TMR0 overflow

// High priority interrupt

void interrupt low_priority LowIsr(void)


{
if(INTCONbits.T0IF && INTCONbits.T0IE)
is enabled
{
TMR0 -= 250;
//
t
INTCONbits.T0IF = 0;
//
ADCON1=0x0F;
TRISB=0x0CF;
LATBbits.LATB5 = 0x01;
//
}
if (TMR1IE && TMR1IF)
{
TMR1IF=0;
++tick_count;
TRISC=0;
LATCbits.LATC0 ^= 0x01;
}
}

//Low priority interrupt


// If Timer flag is set & Interrupt
Reload the timer - 250uS per interrup
Clear the interrupt flag
Toggle a bit

#define _XTAL_FREQ 20000000


// PIC18F4550 Configuration Bit Settings
// CONFIG1L
#pragma config PLLDIV = 5
// PLL Prescaler Selection bits (Divide by 5 (2
0 MHz oscillator input))
#pragma config CPUDIV = OSC1_PLL2// System Clock Postscaler Selection bits ([Pr
imary Oscillator Src: /1][96 MHz PLL Src: /2])
#pragma config USBDIV = 2
// USB Clock Selection bit (used in Full-Speed
USB mode only; UCFG:FSEN = 1) (USB clock source comes from the 96 MHz PLL divide
d by 2)
// CONFIG1H
#pragma config FOSC = HS
// Oscillator Selection bits (HS oscillator (HS
))
#pragma config FCMEN = OFF
// Fail-Safe Clock Monitor Enable bit (Fail-Saf
e Clock Monitor disabled)
#pragma config IESO = OFF
// Internal/External Oscillator Switchover bit
(Oscillator Switchover mode disabled)
// CONFIG2L
#pragma config PWRT = OFF
//
#pragma config BOR = OFF
//
disabled in hardware and software)
#pragma config BORV = 3
//
g)
#pragma config VREGEN = ON
//
e regulator enabled)

Power-up Timer Enable bit (PWRT disabled)


Brown-out Reset Enable bits (Brown-out Reset
Brown-out Reset Voltage bits (Minimum settin
USB Voltage Regulator Enable bit (USB voltag

// CONFIG2H
#pragma config WDT = OFF
// Watchdog Timer Enable bit (WDT disabled (con
trol is placed on the SWDTEN bit))
#pragma config WDTPS = 32768
// Watchdog Timer Postscale Select bits (1:3276
8)
// CONFIG3H
#pragma config CCP2MX = ON
// CCP2 MUX bit (CCP2 input/output is multiplex
ed with RC1)
#pragma config PBADEN = ON
// PORTB A/D Enable bit (PORTB<4:0> pins are co
nfigured as analog input channels on Reset)
#pragma config LPT1OSC = OFF
// Low-Power Timer 1 Oscillator Enable bit (Tim
er1 configured for higher power operation)
#pragma config MCLRE = ON
// MCLR Pin Enable bit (MCLR pin enabled; RE3 i
nput pin disabled)
// CONFIG4L
#pragma config STVREN = ON
// Stack Full/Underflow Reset Enable bit (Stack
full/underflow will cause Reset)
#pragma config LVP = OFF
// Single-Supply ICSP Enable bit (Single-Supply
ICSP disabled)
#pragma config ICPRT = OFF
// Dedicated In-Circuit Debug/Programming Port
(ICPORT) Enable bit (ICPORT disabled)
#pragma config XINST = OFF
// Extended Instruction Set Enable bit (Instruc
tion set extension and Indexed Addressing mode disabled (Legacy mode))
// CONFIG5L
#pragma config CP0 = OFF

// Code Protection bit (Block 0 (000800-001FFFh

) is not
#pragma
) is not
#pragma
) is not
#pragma
) is not

code-protected)
config CP1 = OFF
code-protected)
config CP2 = OFF
code-protected)
config CP3 = OFF
code-protected)

// Code Protection bit (Block 1 (002000-003FFFh


// Code Protection bit (Block 2 (004000-005FFFh
// Code Protection bit (Block 3 (006000-007FFFh

// CONFIG5H
#pragma config CPB = OFF
// Boot Block Code Protection bit (Boot block (
000000-0007FFh) is not code-protected)
#pragma config CPD = OFF
// Data EEPROM Code Protection bit (Data EEPROM
is not code-protected)
// CONFIG6L
#pragma config WRT0 = OFF
h) is not write-protected)
#pragma config WRT1 = OFF
h) is not write-protected)
#pragma config WRT2 = OFF
h) is not write-protected)
#pragma config WRT3 = OFF
h) is not write-protected)

// Write Protection bit (Block 0 (000800-001FFF


// Write Protection bit (Block 1 (002000-003FFF
// Write Protection bit (Block 2 (004000-005FFF
// Write Protection bit (Block 3 (006000-007FFF

// CONFIG6H
#pragma config WRTC = OFF
// Configuration Register Write Protection bit
(Configuration registers (300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF
// Boot Block Write Protection bit (Boot block
(000000-0007FFh) is not write-protected)
#pragma config WRTD = OFF
// Data EEPROM Write Protection bit (Data EEPRO
M is not write-protected)
// CONFIG7L
#pragma config EBTR0 = OFF
01FFFh) is not protected from
#pragma config EBTR1 = OFF
03FFFh) is not protected from
#pragma config EBTR2 = OFF
05FFFh) is not protected from
#pragma config EBTR3 = OFF
07FFFh) is not protected from

//
table
//
table
//
table
//
table

Table
reads
Table
reads
Table
reads
Table
reads

Read Protection bit (Block


executed in other blocks)
Read Protection bit (Block
executed in other blocks)
Read Protection bit (Block
executed in other blocks)
Read Protection bit (Block
executed in other blocks)

0 (000800-0
1 (002000-0
2 (004000-0
3 (006000-0

// CONFIG7H
#pragma config EBTRB = OFF
// Boot Block Table Read Protection bit (Boot b
lock (000000-0007FFh) is not protected from table reads executed in other blocks
)
// Global includes
#include <xc.h>
#define LED LATD0
bit flash;
unsigned long tickcnt;
unsigned char TMRcnt, V_TMRcnt, V_TMRH, V_TMRL;
void interrupt low_priority pic_isr(void) {
// Timer0 interrupt?

if (TMR0IF) {
if (TMRcnt) TMRcnt--;
else {
_delay(5);
TMR0H = V_TMRH;
TMR0L = V_TMRL;
TMRcnt = V_TMRcnt;
flash = !flash;
if (flash)
tickcnt++; // Increase counter each second
else
asm("nop");
LED = flash;
}
TMR0IF = 0; //Reset Timer0 interrupt flag
}
}
void main(void) {
ADCON1 = 0x0F;
TRISA = 0x00;
TRISB = 0x00;
TRISD = 0x00;
// LED configuration
TRISDbits.TRISD0 = 0; // Configure RD0, as an output
////////////////////////////
// Timer0 configuration
////////////////////////////
T0CONbits.TMR0ON = 0; // Stop the timer
T0CONbits.T08BIT = 0; // Run in 16-bit mode
T0CONbits.T0CS = 0; // Use system clock to increment timer
T0CONbits.PSA = 0; // A prescaler is assigned for Timer0
T0CONbits.T0PS2 = 1; // Use a 1:32 prescaler
T0CONbits.T0PS1 = 0;
T0CONbits.T0PS0 = 0;
INTCONbits.TMR0IE = 0; // Disable Timer0 interrupt
INTCONbits.TMR0IF = 0; // Disable Timer0 interrupt flag
INTCONbits.GIEH = 1; // Global Interrupt Enable - high priority interrupts
INTCONbits.GIEL = 1; // Global Interrupt Enable - low priority interrupts
INTCON2bits.TMR0IP = 0; //Set Timer0 interrupt priority as low
INTCONbits.TMR0IE = 1; //Enables the TMR0 overflow interrupt
//////////////////////////////////////////

V_TMRcnt = 1;
V_TMRH = 206;
V_TMRL = 213;
TMR0H = V_TMRH;
TMR0L = V_TMRL;
TMRcnt = V_TMRcnt;
LED = 1;
flash = 1;
tickcnt = 0;
T0CONbits.TMR0ON = 1; // Start the timer
while (1) {
}
}

Anda mungkin juga menyukai