📄 enc._c
字号:
/*****************************************************************
* 文件名: ENC.c
* 版本号:
* 创作日期: 2005.7.7
* 作者: wangzq
* 功能说明: 采集转速数值
* 其它说明: 使用AVR单片机Atmaga48, 晶振:8Mhz
*****************************************************************/
/*****************************************************************
* 修改日期:
* 修改人:
* 修改原因:
*******************************************************************/
//包含文件
#include "ENC.h"
//TIMER1 initialize - prescale:1
// WGM: 0) Normal, TOP=0xFFFF
// desired value:
// actual value: Out of range
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0x00 /*INVALID SETTING*/; //setup
TCNT1L = 0x00 /*INVALID SETTING*/;
OCR1AH = 0x00 /*INVALID SETTING*/;
OCR1AL = 0x00 /*INVALID SETTING*/;
OCR1BH = 0x00 /*INVALID SETTING*/;
OCR1BL = 0x00 /*INVALID SETTING*/;
ICR1H = 0x00 /*INVALID SETTING*/;
ICR1L = 0x00 /*INVALID SETTING*/;
TCCR1A = 0x00;
TCCR1B = 0xC1; //start Timer
}
#pragma interrupt_handler timer1_capt_isr:11
void timer1_capt_isr(void)
{
g_CntUpdate = ICR1L;
g_CntUpdate |=(int)ICR1H << 8;
if ((TIFR1&0x01) != 0) //判断定时器1溢出
{
g_TotalEnc++;
TIFR1 |= 0x01; //取消定时器1溢出标志位
}
if (g_CntOld < g_CntUpdate)
{
g_DeltaEnc = g_CntUpdate - g_CntOld;
}
else
{
g_DeltaEnc = (0x10000 - g_CntOld) + g_CntUpdate;
}
if (g_TotalEnc > 10)
g_TotalEnc = 10;
for (; g_TotalEnc != 0; g_TotalEnc--)
{
g_DeltaEnc += 0x10000;
}
/*
g_DeltaEnc *= 125;
g_DeltaEnc /=1000;
g_DeltaEnc *= 72;
g_DeltaEnc = 60000000 / g_DeltaEnc;
//if (g_DeltaEnc > 6000)
//g_DeltaEnc = 6000;
//g_DeltaEnc *= 0xff;
//g_DeltaEnc /=6000;
*/
g_TotalEnc = 0; //速度溢出标志清零
g_CntOld = g_CntUpdate; //准备下次采样
}
#pragma interrupt_handler timer1_ovf_isr:14
void timer1_ovf_isr(void)
{
g_TotalEnc ++; //速度溢出标志
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -