⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icp._c

📁 AVR单片机的电机测速程序
💻 _C
字号:
#include "includes.h"
//---------------------------------------------------
unsigned int  Cnt_Old=0;
unsigned int  Cnt_New=0;


unsigned int Motor_Period=0;
unsigned int Cnt_Delta=0;
unsigned char Motor_Period_Hbyte=0;
unsigned char Motor_Period_Lbyte=0;
unsigned char Icr1L_Value=0;
unsigned char Icr1H_Value=0;
unsigned char Flag=0;
//--------------------------------------------------
//Timer1初始化和ICP中断处理函数
void Timer1_Init(void)
{
TCCR1B=0x00;             //停止计数器
TCCR1B=0b11000010;       //时钟为系统时钟8分频,为1us
TIMSK|=0b00100000;       //使能ICP中断
}
/*******************************************/
#pragma interrupt_handler Timer1_Capt_Isr:6
void Timer1_Capt_Isr(void)
{
CLI();
Icr1L_Value=ICR1L;
Icr1H_Value=ICR1H;
Cnt_New=Icr1L_Value+(256*Icr1H_Value);//获得现在计数值
if(Cnt_New>=Cnt_Old)       //判断新老计数值关系 
 {                        //新值大于老值
 Cnt_Delta=Cnt_New-Cnt_Old;
 }
else                      //新值小于老值
 {
 Cnt_Delta=0xffff-Cnt_Old+Cnt_New;
 }
Cnt_Old=Cnt_New;
Motor_Period=Cnt_Delta*T0_CLK;//计算周期值
Motor_Period_Hbyte=((unsigned char)((Motor_Period& 0xff00)>>8));//计算周期高字节
Motor_Period_Lbyte=((unsigned char)(Motor_Period&0x00ff));//计算周期低字节
if(Motor_Period_Lbyte=0xff)//避免与帧头重复
 {
 Motor_Period_Lbyte=0xfe;
 }
Flag++;
if(Flag%100==0)
 {
 Usart_Tx(0xff);//上传帧头
 Usart_Tx(Motor_Period_Hbyte);//上传周期高字节
 Usart_Tx(Motor_Period_Lbyte);//上传周期低字节
 }
SEI();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -