属于外设的中断系统,所以在用的时候属于低优先级的中断,要开很多寄存器:外设中断允许,定时器中断1允许。。。。。。。。
#include __CONFIG(1,XT) ;
//晶振为外部4M __CONFIG(2,WDTDIS) ;
//看门狗关闭 __CONFIG(4,LVPDIS) ;
//禁止低电压编程 #define uchar unsigned char #define uint unsigned int
char shuma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int count=0;
char sec=0;
//中断函数 void interrupt k(void) { if(TMR1IF==1) //判断是否产生中断 { TMR1IF=0;
TMR1H=0xff;
//注意要重新装初值 TMR1L=0x06;
count++;
if(count==4000) { count=0;
sec++;
if(sec>9) sec=0;
} } }
void display() { PORTD=shuma[sec];
}
void main(void) { ADCON1=0X06;
TRISD=0B00000000;
IPEN=0;
//关闭中断优先级 PEIE=1;
//允许所有未被关闭的外设中断 T1CON=0x01;
//使能定时器中断1 TMR1IE=1;
//使能当前定时器中断1 TMR1IF=0;
//软件清中断标志位 TMR1H=0xff;
//必须手动计算,不能靠左移,右移等完成 TMR1L=0x06;
//必须手动计算,不能靠左移,右移等完成 GIE=1;
//开总中断 while(1) { display();
} }
推荐阅读
- PIC之休眠问题
- PIC单片机之看门狗
- PIC单片机之SPI从机框架
- PIC CCP_PWM 呼吸灯
- PIC单片机之PWM
- 关于PIC16F877A PWM计算的问题
- PIC单片机-PWM波
- PIC单片机|PIC单片机的PWM波的简单调制+proteus仿真实现直流电机的启动