先上代码

volatile unsigned long g_timer0_delay_conut = 0;void main(void)
{DISI(); //Disable all unmasked interruptsNy8b072a_Gpio_Init();//Ny8b072a_Timer1_Init();//Ny8b072a_Timer2_Init();Ny8b072a_Timer3_Init();ENI(); // Enable all unmasked interrupts            while(1){//CLRWDT();    // Clear WatchDog/*LED1 = ~LED1;LED2 = ~LED2;LED3 = ~LED3;LED4 = ~LED4;*/App_Delay_Ms(1000);}
}//10bit count down , max 0x3FF
void Ny8b072a_Timer1_Init(void)
{//1MSTMRH = 0x30; // TIMER1 higt 2bit in TMRH bit4~5 msb TMR1 = 0xE8; // Load 0xFF to TMR1 (Initial Timer1 register) low 8bitT1CR1 = C_TMR1_Reload | C_TMR1_En; // Enable Timer1, Initial value reloaded from TMR1, Non-stop mode T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Div2; // Enable Prescaler1, Prescaler1 dividing rate = 1:2// Timer1 clock source is instruction clockINTE |= C_INT_TMR1;    // Enable Timer1 overflow interrupt
}//10bit count down , max 0x3FF
void Ny8b072a_Timer2_Init(void)
{//500usTMRH = 0x40;       //TIMER2 higt 2bit in TMRH bit6~7 msb TMR2 = 0xF4; // Load 0xFF to TMR2 (Initial Timer2 register) low 8bitT2CR1 = C_TMR2_Reload | C_TMR2_En;  // Enable Timer2, Initial value reloaded from TMR2, Non-stop mode T2CR2 = C_TMR2_ClkSrc_Inst | C_PS2_Div2; // Enable Prescaler2, Prescaler2 dividing rate = 1:2// Timer2 clock source is instruction clockINTE |= C_INT_TMR2;    // Enable Timer2 overflow interrupt
}//10bit count down , max 0x3FF
void Ny8b072a_Timer3_Init(void)
{//50usTM3RH = 0;  //TIMER3 higt 2bit in TM3RH bit4~5 msb TMR3 = 50;  // Load 0xFF to TMR3 (Initial Timer3 register) low 8bitT3CR1 = C_TMR3_Reload | C_TMR3_En;  // Enable Timer3, Initial value reloaded from TMR3, Non-stop mode T3CR2 = C_TMR3_ClkSrc_Inst | C_PS3_Div2; // Enable Prescaler3, Prescaler3 dividing rate = 1:2// Timer3 clock source is instruction clock//这里用 |= 会报错:如果其他中断讯号刚好在此时产生的话,使用 'BSR' 指令清除中断旗标有机会误清其他的中断旗标。 (201)INTE2 = C_INE_TMR3;   // Enable Timer3 overflow interrupt
}//! interrupt service routine
void isr(void) __interrupt(0)
{       if(INTFbits.T1IF){g_timer0_delay_conut ++;if(500 == g_timer0_delay_conut ) //1MS * 500 = 500ms{LED1 ^= 1;g_timer0_delay_conut= 0;}INTF= (unsigned char)~(C_INT_TMR1);   // Clear T1IF flag bit  }if(INTFbits.T2IF){ g_timer0_delay_conut ++;if(1000 == g_timer0_delay_conut ) //500us * 1000 = 500ms{LED1 ^= 1;g_timer0_delay_conut  = 0;}INTF= (unsigned char)~(C_INT_TMR2);   // Clear T2IF flag bit  }if(INTE2bits.T3IF){ g_timer0_delay_conut ++;if(10000 == g_timer0_delay_conut )//50us * 10000 = 500ms{LED1 ^= 1;g_timer0_delay_conut = 0;}INTE2= (unsigned char)~(C_INF_TMR3);  // Clear T3IF flag bit  }
}
时钟频率 指令周期 定时器分频 TMRH TMR1 中断计数 IO翻转周期
8M 4T C_PS1_Div2 0 50 10 000 500ms
8M 4T C_PS1_Div4 0 50 10 000 1000ms

表中第一行,定时器1的时间计算如下:
8 000 000 / 4 / 2 = 1 000 000,1 / 1 000 000 = 1us;
定时器1的初值计数50需要50us,这就是定时器1每次进中断的时间;
中断里10000 == g_time0_delay_conut需要的时间为 50 * 10 000 = 500 000us = 500ms。

表中第二行,定时器1的分频为4,验证时间为2分频的一倍,说明时间计算正确。

个人不建议把定时器初值设置过低(1us),太频繁的中断容易引起意想不到的BUG,根据自己实际使用需求来设置一个合理的值。

九齐NY8B072A单片机使用笔记(二)TIMER1/2/3定时器相关推荐

  1. 九齐NY8B072A单片机使用笔记(一)TIMER0定时器

    先上代码 //8bit count up , max 0xFF void Ny8b072a_Timer0_Init(void) {PCON1 = C_TMR0_Dis; // Disable Time ...

  2. 九齐NY8B072A单片机使用笔记(三)模拟串口RX

    因为这款单片机没有硬件串口,所以需要我们自己做软件模拟串口. 用PA3作为RX,因为PA3可以作为外部输入中断EXTI1. 本人首先用轮询的方式查PA3是否从高电平跳变到低电平(起始信号),但是因为还 ...

  3. 九齐新型单片机NY8A051F

      NY8A051F是九齐科技股份公司推出的以EPROM为记忆体的8位微控制器,专为多I/O口产品的应用而设计,例如遥控器,风扇,灯光控制或者游戏机周边等等.采用CMOS制程并同时提供客户低成本,高性 ...

  4. 九齐51单片机使用注意事项:不要用float

    在使用ADC计算电压值时用了float,NY8B072A堆栈直接炸了,用32机习惯了,一直想不通,查了手册才知道. 手册是:<NYC_NY8_UM_v1.5_SC.pdf> 链接:http ...

  5. 九齐单片机应用-小家电开发(1)

    ** 锂电类便携式小家电应用开发-打蛋器 1:应用需求:PWM输出,复位电压2.7V,重启电机电压3.0V 2:结合需求,选用九齐系列单片机中的051F作为主控芯片,配合9017给锂电进行充电. 3: ...

  6. 九齐单片机NY8B062D开发笔记(一)准备

    九齐单片机开发笔记 前言 过程 1.芯片介绍 2.开发环境: 3.例程template 4.源文件: 参考资料 前言 各位朋友们,由于九齐的仿真器买不到,这个系列暂时停止更新 由于价格和性能的追求,近 ...

  7. 九齐单片机NY8A051D程序之 PWM Output

    这个例程原本就是九齐的IDE自带的,我这里傻瓜式的操作给大家看看,另外附带他的源码,没有用的给删了,需要注意的是,这芯片C指令51单片机有那么一点点区别,PWM输出或者做那种进入低功耗的案子,都一定要 ...

  8. 密脚九齐单片机 SSOP20 NY8BM72A 2K ROM 九齐

    NY8BM72A 是以MTP作为记忆的8bit低单价九齐单片机,有18个IO口,12+1AD通道,2K ROM,4组计时器,3组PWM,3组蜂鸣器, 系統主頻提供 20.8M/19.2M/16M/14 ...

  9. 趣谈网络协议笔记-二(第十九讲)

    趣谈网络协议笔记-二(第十九讲) HttpDNS:网络世界的地址簿也会指错路 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 引用 dns缓存刷新时间是多久?dns本地缓存时间介绍 - 东大网管 ...

最新文章

  1. 视觉惯性SLAM:VINS-Mono
  2. 趋势畅想-搭载android系统的智能数码相机
  3. pycharm打开python文件如何自动创建项目_pycharm 怎么自动创建python头文件?
  4. iOS - Bundle 资源文件包
  5. 回归插补法_用均值替换、 回归插补及多重插补进行插补
  6. javaweb和ajax使用查询出来的数据做下拉菜单_区块链浏览器实用指南篇:利用链上数据把握减半行情...
  7. 算法高级(2)-多年以前的电脑算命是怎么回事?
  8. Java中的断言 Assert
  9. OpenCV-图像处理(03、Mat对象)
  10. 伴你装系统系列(上篇):Windows10
  11. Emmet的HTML语法(敲代码的快捷方式)
  12. xmpp 即时通讯协议研究
  13. java学生奖学金管理系统_java毕业设计_springboot框架的高校学生奖学金评定系统...
  14. .xmind用什么软件打开_xps用什么软件打开(xps文件打开方法)
  15. python教你画一棵树
  16. JDK下载与安装 (转载自静若止水博客)
  17. 使用Xcode的memory graph查找内存泄漏
  18. “+智能”时代 华为如何引领中国制造走向“智”变?
  19. 【转】总局公开回应质疑:TVOS不是安卓
  20. 班主任工作总结中职计算机网络,中职计算机班班主任工作计划

热门文章

  1. matlab短均线滞后项,均线理论的滞后性问题
  2. mysql as tmp,启动mysql时显示:/tmp/mysql.sock 不存在的解决办法
  3. python中view的用法_APIview使用
  4. 有些窗口底部被任务栏挡住了_开始使用 Tint2 吧,一款 Linux 中的开源任务栏
  5. django中间件及中间件实现的登录验证
  6. jQuery -- 光阴似箭(五):AJAX 方法
  7. Jquery中如何获取元素的文本,值,属性和内容
  8. HTML5中如何检查浏览器是否支持本地存储
  9. box-shadow技巧分享
  10. css中border制作各种形状