AVR单片机(学习ing)-ATMEGA16的定时/计数器
5)定时器/ 计数器中断屏蔽寄存器- TIMSK
• Bit 7 – OCIE2: T/C2 输出比较匹配中断使能
当OCIE2 和状态寄存器的全局中断使能位I 都为"1” 时,T/C2 的输出比较匹配A 中断使
能。当T/C2 的比较匹配发生,即TIFR 中的OCF2 置位时,中断服务程序得以执行。
• Bit 6 – TOIE2: T/C2 溢出中断使能
当TOIE2 和状态寄存器的全局中断使能位I 都为"1” 时,T/C2 的溢出中断使能。当T/C2
发生溢出,即TIFR 中的TOV2 位置位时,中断服务程序得以执行。
6)定时器/ 计数器 中断标志寄存器- TIFR
• Bit 7 – OCF2: 输出比较标志 2
当T/C2 与OCR2( 输出比较寄存器2) 的值匹配时,OCF2 置位。此位在中断服务程序里
硬件清零,也可以通过对其写1 来清零。当SREG 中的位I、OCIE2 和OCF2 都置位时,
中断服务程序得到执行。
• Bit 6 – TOV2: T/C2 溢出标志
当T/C2 溢出时, TOV2 置位。执行相应的中断服务程序时此位硬件清零。此外, TOV2
也可以通过写1 来清零。当SREG 中的位I、TOIE2 和TOV2 都置位时,中断服务程序
得到执行。在PWM 模式中,当T/C2 在0x00 改变记数方向时, TOV2 置位。
这里也用到特殊功能寄存器:补充:
好了,现在基本上好了~~累死了
下面就是实验了,哈哈
4位秒表啊~~~吼吼
先贴张图片看看那
然后就是Proteus仿真~~~
出了点问题~~整了半天~~哭
个人认为是个Bug~~你懂得,我以前用51的时候就有这个问题,显示不完整,可能是更新太快了~
初始化:
然后是按下INT0:
最后是按下S1:
基本上就这点吧~~这里边比较难理解的就是那个去取反的重定义!!!!再IAR工具的应用里会有介绍(就是持续更新的那个~~毕竟有很多要更新的~~)
然后就是程序了~~
//------------------------------------------------------------------------------
//4位显示秒表试验
//使用INT0键进行计时的开始和停止,使用S1键作为计时值得清除。定时器T0被用作扫描4
//位数码管(1ms),定时器T1则用来计时(10ms)
#include"ioavr.h"
#include"intrinsics.h"
typedef unsigned char uchar;
typedef unsigned int
__flash uchar seg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
__flash uchar act[4]={0xfe,0xfd,0xfb,0xf7};
uint
uchar flag_start;
uchar i;
#define CPL_BIT(x,y)
#define s1
#define xtal
//------------------------------------------------------------------------------
//延时1ms的函数,没有参数传递
void
{
}
//------------------------------------------------------------------------------
//延时nms的函数,有参数传递
void
{
}
//------------------------------------------------------------------------------
//端口定义函数,用来定义ABCD四个端口的输入输出
void
{
}
//------------------------------------------------------------------------------
//T0的初始化定义
void
{
}
//------------------------------------------------------------------------------
//T1的初始化函数
void
{
}
//------------------------------------------------------------------------------
//按键检测函数
void
{
}
//------------------------------------------------------------------------------
//芯片初始化函数,包含上面的所有初始化,以及没有涉及的
void device_init()
{
}
//------------------------------------------------------------------------------
//main
void
{
}
//------------------------------------------------------------------------------
//INT0
#pragma vector=INT0_vect
__interrupt void
{
}
//------------------------------------------------------------------------------
//TIMER0_OVF
#pragma vector=TIMER0_OVF_vect
__interrupt void
{
}
//------------------------------------------------------------------------------
//TIMER1_OVF
#pragma vector=TIMER1_OVF_vect
__interrupt void
{
}
AVR单片机ATMEGA16定时计数 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)