这个程序编译的时候提示如下错误:
ADC结果 控制PWM.c(40): error C202: 'ADC_POWER': undefined identifier。
请问怎么解决?
/*********************主函数**************************/
#include "STC12C5A60S2.H" // 包含STC12C5A60S2寄存器定义文件
void PWM_init();
void ADC_init();
void ADC_Value(); //ADC结果赋值
void LED_display(); //led显示
void Update_PWM(); //PWM输出
void main()
{
ADC_init(); //ADC初始化
PWM_init(); //PWM初始化
while(1)
{
ADC_Value(); //ADC结果赋值
LED_display(); //led显示
Update_PWM(); //PWM输出
}
}
/****************************************************/
/************************ADC初始化函数*********************/
void ADC_init()
{
P1M1=0x20;
P1M0=0; //I/O口模式为P1.5仅为输入(高阻),作为A/D使用,P1其他口为准双向
//P1.1为准双向口,作为PWM使用
// P1ASF=0x20; //设置P1.5端口为模拟输入
// CLK_DIV=0x00; // MCK0_S1=0, MCK0_S1=0 : 主时钟不对外输出时钟
//ADRJ=0 :10位A/D转换结果的高8位存放于ADC_RES中,低2位存放于ADC_RESL的低2位中;
//Tx_Rx=0 :串口1为正常工作方式
//CLKS2=0 , CLKS1=0 , CLKS0=0 :主时钟频率/1,不分频
ADC_RES = 0; //清除之前ADC结果
ADC_RESL = 0; //清除之前ADC结果
ADC_CONTR = ADC_POWER | ADC_SPEEDLL; //ADC电源打开;
//转换速度:540个时钟周期
delay(2); //延时,等待ADC_CONTR设置完成
}
/********************************************************/
/******************获取ADC结果**********************/
uchar Get_ADC_result()
{
uchar ch = 5; //模拟输入通道号5(P1.5)
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
//ADC电源打开;转换速度:540个时钟周期
//模拟输入通道P1.5;ADC开始
_nop_();
_nop_();
_nop_();
_nop_(); //等待ADC_CONTR设置完成
while(!(ADC_CONTR&ADC_FLAG)); //等待ADC结束标志位置1
ADC_CONTR &= ~ADC_FLAG; //关闭ADC
return ADC_RES; //返回ADC结果
}
/*******************ADC结果赋值*******************/
void ADC_Value()
{
adc = Get_ADC_result(); //ADC结果赋值
}
/******************PWM初始化***********************/
void PWM_init()
{
ACC = P_SW1;
ACC &= ~( CCP_S0 | CCP_S1 ); //将P_SW1的运算结果放入累加器
P_SW1 = ACC; //CCP在(P1.2/ECI,P1.1/CCP0,P1.0/CCP1,P3.7/CCP2)
CCON = 0x00; //PCA定时器停止运行,
//PCA计数器溢出标志位CF清零, //模块中断标志位清零
CMOD = 0x02; //空闲模式PCA计数器继续工作
//PCA计数器时钟源:系统时钟频率SYSclk/2
//禁止PCA计数器中断使能(计数器CCON中CF位)
PCA_PWM0 = 0x00; //PCA模块0工作在8位PWM
}
/********************PCA计数器复位***********************/
void PCA_reset()
{
CL = 0x00;
CH = 0x00; //重置PCA计数器
}
/*********************PWM更新**********************/
void Update_PWM()
{
if(adc <= 11)
{ //PWM0输出占空比(100H-CCAP0L)/100H)
PCA_reset(); //PCA计数器复位
CCAP0H = CCAP0L = 17; //PWM0输出占空比(100H-CCAP0L)/100H)
CCAPM0 = 0x42; //PCA比较/捕获寄存器模块0(P1.1)允许比较器功能
CR = 1; //工作在PWM模式 //PCA计数器开始运行
}
if(adc > 11 && adc <= 22) //
{
PCA_reset(); //PCA计数器复位
CCAP0H = CCAP0L = 9.6 * adc - 54; //
CCAPM0 = 0x42;
CR = 1;
}
if(adc > 22 && adc <= 35)
{
PCA_reset(); //PCA计数器复位
CCAP0H = CCAP0L = 1.19 * adc + 132; //
CCAPM0 = 0x42;
CR = 1;
}
if(adc > 35 && adc <= 68)
{
PCA_reset(); //PCA计数器复位
CCAP0H = CCAP0L = 0.33 * adc + 163; //
CCAPM0 = 0x42;
CR = 1;
}
if(adc > 68 && adc <= 108)
{
PCA_reset(); //PCA计数器复位
CCAP0H = CCAP0L = 0.106 * adc + 178.6; //
CCAPM0 = 0x42;
CR = 1;
}
if(adc > 108)
{
PCA_reset(); //PCA计数器复位
CCAP0H = CCAP0L = 165; //
CCAPM0 = 0x42;
CR = 1;
}
}
|