-----------------------------------------------------------------------------------
#ifndef __PIC18F4580_h
#define __PIC18F4580_h
#include
#include
#include
#include
#include
#define InterruptEnableINTCONbits.PEIE = 1,INTCONbits.GIE = 1
#define InterruptDisable INTCONbits.PEIE = 0,INTCONbits.GIE = 0
extern void IntTimer0(void);
#endif
--------------------------------------------------------------------------------------
【PIC定时器中断】 #include"PIC18F4580.h"
#pragma interrupt SelectHPrioInt
#pragma code HiPrio_Int = 0x08
void HighPrioInt(void)
{
_asm
goto SelectHPrioInt
_endasm
}
#pragma code
void SelectHPrioInt (void)
{
if(INTCONbits.TMR0IF)
{
IntTimer0();
}
}
---------------------------------------------------------------------------------------------
#include"PIC18F4580.h"
#pragma config OSC =IRCIO67, WDTPS = 1024, WDT = ON,PBADEN = OFF,DEBUG = OFF,MCLRE = OFF,LVP = OFF
#define u16 unsigned int
#define u8 unsigned char
#define LED LATCbits.LATC2
void WdtReset(void)
{
_asm
CLRWDT
_endasm
}
void delay_n_ms(u16 n)//8MHz时钟下的ms延时
{
T1CON = 0xB0;
//16位定时器,系统8分频
while(n!=0)
{
TMR1L = 0x31;
TMR1H = 0xF8;
PIR1bits.TMR1IF = 0;
//标志位清空
T1CONbits.TMR1ON = 1;
//使能定时器
n--;
while(!PIR1bits.TMR1IF){;
}
T1CONbits.TMR1ON =0;
//关闭定时器
}
}
void InitTimer0(void)
{
T0CON = 0x05;
//系统64分频
TMR0L = 0XEF;
//1秒中断
TMR0H = 0x85;
INTCONbits.TMR0IE = 1;
//打开定时器0中断
INTCON2bits.TMR0IP = 1;
//设置优先级为最高
T0CONbits.TMR0ON =1;
//打开定时器0
INTCONbits.TMR0IF = 0;
//标志位清空
T0CONbits.TMR0ON = 1;
}
void IntTimer0(void)
{
TMR0L = 0XEF;
TMR0H = 0x85;
T0CONbits.TMR0ON =1;
LED=~LED;
WdtReset();
INTCONbits.TMR0IF = 0;
}
void main(void)
{
OSCCON = 0x72;
//OSCCON = 0x72;
设置OSC时钟输出=8M
//OSCCON = 0x62;
设置OSC时钟输出=4M
//OSCCON = 0x52;
设置OSC时钟输出=2M
//OSCCON = 0x42;
设置OSC时钟输出=1M
//OSCCON = 0x32;
设置OSC时钟输出=500KHz
//OSCCON = 0x22;
设置OSC时钟输出=250KHz
//OSCCON = 0x12;
设置OSC时钟输出=125KHz
//OSCCON = 0x02;
设置OSC时钟输出=31KHz(from either INTOSC/256 or INTRC directly)
InterruptDisable;
InitTimer0();
InterruptEnable;
TRISC=0X00;
//TRISC寄存器被赋值,PORTC每一位都为输出
LED=0;
for(;
;
)
{
//LED=0;
//delay_n_ms(500);
//LED=1;
//delay_n_ms(500);
}
}
推荐阅读
- pic
- PIC 1508 TIM2的定时器使用
- 浅析PIC单片机定时器
- PIC 1508 TIM1的定时器门控的理解
- PIC 1508 WDT使用
- PIC 1508 EEPROM
- PIC 1508 TIM0的定时器使用
- PIC 1508 DAC使用
- PIC 1508 TIM1的定时器中断使用