#include
void PIC18F_High_isr(void);/*中断服务函数声明*/
void PIC18F_Low_isr(void);
#pragma code high_vector_section=0x8
void high_vector (void)
{
_asm goto PIC18F_High_isr _endasm/*通过一条跳转指令(汇编指令),跳转到中断服务函数(中断服务程序)处*/
}
#pragma code low_vector_section=0x18
/*低优先级中断响应时,会自动跳转到0x18处*/
void low_vector (void)
{
_asm goto PIC18F_Low_isr _endasm
}
#pragma code
/*---高优先级中断服务程序---*/
#pragma interrupt PIC18F_High_isr
void PIC18F_High_isr (void)
{
TMR0L=20;/*TMR0重新置初值*/
PORTBbits.RB4=~PORTBbits.RB4;
INTCONbits.TMR0IF=0; /*TMR0溢出标志清零*/
}
/*---低优先级中断服务程序---*/
#pragma interruptlow PIC18F_Low_isr
void PIC18F_Low_isr (void)
{
}
void main(void)/*主函数*/
{
TRISBbits.TRISB4=0;//B4输出
PORTBbits.RB4=1; //B4输出高电平
INTCONbits.GIE=0;/*关全局中断*/
RCONbits.IPEN=1; /*使能中断优先级*/
T0CON=0b01001000;/*TMR0设置:停止运行、8位定时,F=FOSC,无预分频*/
//T0CONbits.TMR0ON=0/*禁止Timer0*/
//T0CONbits.T08BIT=1/*Timer0 被配置为8位定时计数器*/
//T0CONbits.T0CS=0/*内部指令周期时钟(CLKO)作为时钟源*/
//T0CONbits.PSA=0/*未分配Timer0预分频器*/
TMR0L=20;/*TMR0置初值*/
INTCONbits.TMR0IF=0;/*Timer0溢出标志清零*/
INTCONbits.TMR0IE=1;/*允许Timer0溢出中断*/
INTCON2bits.TMR0IP=1;/*Timer0中断为高优先级*/
T0CONbits.TMR0ON=1;/*启动TMR0*/
INTCONbits.GIE=1;/*开全局中断*/
while(1)
{
}
}
完整资料打包(含仿真):
PIC单片机1-5程序及仿真合集-单片机文档类资源-CSDN下载