单片机学习小组
直播中

母猪会上树

11年用户 908经验值
擅长:电源/新能源
私信 关注

如何用TIMER1输入捕获功能设计的频率计?

如何用tiMER1输入捕获功能设计的频率计?

回帖(1)

李蛹

2022-1-24 11:37:30
一,打开文件(可以随文下载放置在文档中打开)。(如下图1所示)

图1
二,调整原理图大小,适合可视,另存工程文件。(如下图2,3,4所示)

图2

图3

图4
三,点击Source Code标签。(如下图5所示)

图5
四,编辑main.c 代码如Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a07_TIMER1频率计 (如下图6所示)

图6
五,Main.c 代码:
//-----------------------------------------------------------------
// 名称: 用TIMER1输入捕获功能设计的频率计
//-----------------------------------------------------------------
// 说明: 本例运行时,切换不同的频率输入,然后按下K1按键,数码管上将
// 显示当前频率值.两次捕获的时间差值即为当前输入频率的周期,
// 周期倒数即可得到当前频率.
//
//-----------------------------------------------------------------
//#define F_CPU 1000000UL //1M晶振
#include
#include
#include
#define INT8U unsigned char
#define INT16U unsigned int
extern INT8U Display_Buffer[];
extern INT16U CAPi, CAPj;
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------
int main()
{
INT8U LastKey= 0xff;
DDRA= 0xff;
DDRB= 0xff;
DDRC= 0x00; PORTC= 0xff;
DDRD= 0x00; PORTD= 0xff;
TCCR1B= _BV(ICNC1) | _BV(ICES1);
sei();
while(1) {
if(LastKey != PINC) {
TIMSK =_BV(TICIE1);
TCCR1B |= 0x01;
LastKey= PINC;
}
Show_FRQ_ON_DSY();
}
}
//------------------------------------------------------------------
// T1输入捕获中断子程序
//------------------------------------------------------------------
ISR (TIMER1_CAPT_vect)
{
INT8U i;
if(CAPi== 0) CAPi= ICR1;
else {
CAPj= ICR1- CAPi;
CAPj= 1000000UL/ CAPj;
TIMSK= 0xfc;
for(i= 3; i !=0xff; i–) {
Display_Buffer= CAPj % 10;
CAPj /= 10;
}
TCNT1= CAPi= CAPj= 0;
}
}
Myfunc01.h:
//******************************************************************************************
#ifndef MYFUNC01_H
#define MYFUNC01_H
//#define F_CPU 2000000UL
#include
#include
#include
#define INT8U unsigned char
#define INT16U unsigned int
//共阴数码管0-9的数字编码,最后一位为黑屏
static INT8U SEG_CODE[] =
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
void Show_FRQ_ON_DSY();
#endif
六,点击构建工程按钮,编译工程。(如下图7所示)

图7
七,点击窗口左下方仿真按钮,可见虚拟数字屏显示。 (如下图8,9,10所示)

图8

图9

图10
八,选择release,点击构建工程按钮,编译工程生成Hex文件。(如下图11所示)

图11
附件Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a07_TIMER1频率计在已安装Proteus8.9的计算机文件夹中打开即可
举报

更多回帖

发帖
×
20
完善资料,
赚取积分