专栏中心

EEPW首页 > 专栏 > MPLAB C18学习 简单的Timer0定时器中断程序

MPLAB C18学习 简单的Timer0定时器中断程序

发布人:0750long 时间:2009-07-25 来源:工程师 发布文章
MPLAB C18学习 简单的Timer0定时器中断程序

 

注意:本人刚学C18,不能保证程序没有错误!

#include <p18cxxx.h>

#pragma config WDT = OFF

void timer0(void);

#pragma code timer_interrupt = 0x08      //把GOTO指令放在高优先级中断向量处
void timer_interrupt(void)
{
    _asm                                                   //通过汇编的GOTO指令跳转到中断服务程序

                                                            //C语言里的goto只在函数内部有效
    goto timer0
    _endasm
}

#pragma code                                         //切换回普通代码段

volatile unsigned char counter = 0;           //有可能中断函数和普通程序都要用的变量要

                                                            //用volatile声明,以使编译器不对其进行优化

#pragma interrupt timer0
void timer0(void)
{
    INTCONbits.T0IF = 0;                      //清除T0中断标志,必须操作
    TMR0H = 0x3c;                                 //重置定时器初值,这里也是要先TMR0H再L
    TMR0L = 0xb0;
    counter++;
}

void main(void)
{
    //INTCONbits.PEIE = 0;
    //RCONbits.IPEN = 1;
    INTCONbits.T0IF = 0;        //与INTCONbits.TMR0IF = 0;等价,清除T0中断标志
    T0CONbits.T08BIT = 0;      //设定T0为16位模式
    T0CONbits.T0CS = 0;         //选择内部指令时钟为时钟源,也是定时器计数器选

                                              //择位,0即为定时器
    T0CONbits.PSA = 1;           //选择不使用分频器
    TMR0H = 0x3c;                   //设定T0的定时初值,这里因为外部时钟设定为

                                              //4MHz,PIC单片机的机器周期为4个时钟周期,即

                                              //1μs,定时器定时时间为(0xFFFF-0x3CB0+1)*1μs=

                                              //50ms
    TMR0L = 0xb0;                   //注意,必须先定义TMR0H,再定义TMR0L。
    INTCONbits.T0IE = 1;        //与INTCONbits.TMR0IE = 1;等价,打开定时器中断
    INTCONbits.GIE = 1;          //打开全局中断使能
    T0CONbits.TMR0ON = 1;  //打开T0
    while(1);
}

结果:

点击看大图

定时器溢出产生中断3次后,运行时间为150.180000ms

关于需要先定义TMR0H再定义TMR0L:

TMR0H只是Timer0高字节的缓存,在写入TMR0L时才会写入。这样是能一次读取Timer0的所有位,防止在读取低字节时高字节有变化。

 

参考资料:MPLAB C18 C编译器用户指南,PIC18Fxx2数据手册

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

「硅通膨」世代到来! 台积电、NVIDIA供应链点亮AI惊奇秀

智能计算 2026-04-21

180度E-Bike解决方案(基于78K0R MCU)

视频 2012-07-03

创新不止,创芯不已:第六届ICDIA创芯展8月南京盛大启幕!

EDA/PCB 2026-04-21

HT49系列单片机蜂鸣器的使用 说明及源程序

精准触控+压感“芯”体验 汇顶发布全新Newton Touchpad压力触控板方案

智能家居解决方案

视频 2012-07-03

HT49系列PFD的使用说明 说明及源程序

Sandisk闪迪携全新CFexpress 4.0 Type B 存储卡及升级版闪迪至尊超极速™ SD UHS-II 存储卡系列亮相NAB 2026

马斯克“对线”魏哲家:对Terafab的可行性存在分歧

库克正式官宣卸任苹果CEO

2026-04-21

78K0微波炉解决方案

视频 2012-07-03

应用的RF4CE协议的射频遥控器系统

视频 2012-07-03

UALink 2.0发布:GPU网络标准新进展

华为麒麟9030S芯片首发

2026-04-21

HT49系列Timebase的使用说明 说明及源程序

HT49控制93LC46读写 说明及源程序

AI驱动内存供应重配,电子制造业面临供应挑战

180度E-Bike解决方案(基于R8C MCU)

视频 2012-07-03

IDC:智能手机内存短缺将重创2026年出货量

HT49系列 IO 口的应用 说明及源程序

更多 培训课堂
更多 焦点
更多 视频

技术专区