📄 adc._c
字号:
/*****************************************************************
* 文件名: ADC.c
* 版本号:
* 创作日期: 2005.7.7
* 作者: fengzm
* 功能说明: 可采集7个AD通道的值,使用了RC滤波;
* 其它说明: 使用AVR单片机Atmaga48, 晶振:8Mhz
调用ADC文件的时候只需要输入通道号即可,如ADC(7);
*****************************************************************/
/*****************************************************************
* 修改日期: 2005.7.8
* 修改人: wangzq
* 修改原因: 优化代码
定时器0溢出触发A/D转换
修改g_AdcNum改变通道号,默认值0;
g_ValueAdc返回A/D转换后的滤波值;
g_AdcEnd 0xff表示当前返回值有效;
*******************************************************************/
//包含文件
#include "ADC.h"
// ADC initialize
// Conversion time: 13uS,CLOCK/8;
void adc_init(void)
{
ADCSRA = 0x00; //disable adc
ADMUX = 0x00; //select adc input 0
ACSR = 0x80; //not need the compare function
ADCSRB = 0x04; //定时器0溢出触发转换
}
#pragma interrupt_handler adc_isr:22
void adc_isr(void)
{
dword j;
j =ADCL; //Read 8 low bits first (impo
j |=(int)ADCH << 8; //read 2 high bits and shift into topbyte
j *= ADCK; //RC filtering
j += (10-ADCK) * g_ValueAdc;
j /=10;
g_ValueAdc = j;
g_AdcEnd = 0xff; //set the flag of end
ADMUX = g_AdcNum; //通道选择
}
//************************************************
//踏板信号转换为对应的控制值
//前踩:200-6000 对应10-300
//待机:高位 10
//后一:高位 11
//后二:高位 01
//************************************************
word AdcPedal(word adcp)
{
byte i;
dword get;
i = 0;
if (adcp <= PEDAL_STOP)
{
i = 0x3;
adcp = 0;
}
if ((adcp>PEDAL_STOP) && (adcp<PEDAL_STARTL))
{
i = 0x2;
adcp = 0;
}
if (adcp >= PEDAL_STARTL)
{
if (adcp > PEDAL_STARTH)
{
adcp = PEDAL_STARTH;
}
get = adcp - PEDAL_STARTL;
get *= 5800; //(6000-200)/20;
get /= (PEDAL_STARTH - PEDAL_STARTL);
get += 200; //200/20;
adcp = get;
}
if (i == 3) //后一状态
{
adcp |= 0xC000;
}
if (i == 2) //待机状态
{
adcp |= 0x8000;
}
return adcp; //返回脚踏板转速值
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -