初级会员
- 积分
- 73
- 金钱
- 73
- 注册时间
- 2014-12-5
- 在线时间
- 0 小时
|
5金钱
可变电阻左右两脚电源+、-,中间脚接PD5,旋动时万用表测得PD5电压是有变动的。
但调试时ADC_DRH一直为0,是哪里出了问题了?
是硬件接错了还是代码有问题?
都搞了两天了,不懂……
代码如下,求解!
#include <stm8s105k4.h>
unsigned char timer_count;
unsigned char AD_Value;
void CLK_HSI_Init(void)
{
CLK_ECKR = 0X00;//Disable extern HSE
CLK_ICKR = 0X01;//enable HSI
CLK_SWR = 0XE1;//chose HSI 16MHZ
CLK_CKDIVR = 0X18; //Fmaster=16MHZ/8 Fcpu= Fmaster=2MHZ
}
void GPIO_Init(void)
{
PE_DDR |= 0x20; //PE5接LED的
PE_CR1 |= 0x20;
PE_CR2 &=~(0x20);
}
void Tim4_Init(void) //TIM4:10MS产生一次溢出中断
{
TIM4_IER = 0x00; //禁止中断
TIM4_PSCR =0x07; //计数器时钟=主时钟/2^7=2Mhz/128 (计数器周期64us)
TIM4_CNTR =0; //设定计数器的初值
TIM4_ARR =156; //设定重装载时的寄存器值(10ms/64us=156.25)
TIM4_EGR = 0x01; //计数器重新初始化并产生寄存器更新
TIM4_CR1 = 0x01; //允许计数器工作
TIM4_SR &= 0xFE; //清除更新标志
TIM4_IER = 0x01; ; //允许更新中断
}
/***************ADC初始化:
void ADC_Init(void)
{
ADC_CR2 = 0x00;//禁止外部触发转换(选择软件启动)、数据左对齐
ADC_CR1 = 0x00;//FADC=FMASTER/2、单次转换、ADC转换开关关
ADC_TDRL = 0x20;//关闭 (AIN5)施密特触发器
}
//ADC单次转换:
void ADC_check(void)
{
unsigned char i;
ADC_CSR = 0x05; //选择通道AIN5
ADC_CR1 |= 0x01; // First set ADON to power on the ADC module.
i = 12; //Wait >7us to ensure the ADC power on finished.
while(i--);
ADC_CR1 |= 0x01; // Set ADON again to start AD convert.
while(!(ADC_CSR & 0x80)); //Waiting for AD convert finished (EOC=1).
AD_Value=ADC_DRH; //取高8位
ADC_CSR &= 0x7F; //第8位EOC置0
}
main()
{
CLK_HSI_Init();
GPIO_Init();
Tim4_Init();
ADC_Init();
_asm("rim"); // 允许CPU全局中断
while (1) ;
}
@far @interrupt void TIM4_UPD_OVF_IRQHandler (void)
{
timer_count++;//10ms一次
TIM4_SR &= 0xFE; // 清除更新标志
ADC_check();
if (timer_count>AD_Value) //以测得的数值控制LED闪烁频率
{
PE_ODR^=0x20; //LED取反
timer_count=0;
}
return;
}
|
|