【发布时间】:2018-02-21 02:32:51
【问题描述】:
我是这个领域的初学者。我的目标是根据电位器改变 8 个 LED(连接到 PORTA)的输出。我已经将电位器的中间线连接到PF0,也就是ADC0。我还将另外两条线连接到 5V 和接地。
我知道芯片或连接没有问题,因为 LED 工作正常。
但是无论我如何更改下面的代码(我的意思是稍微更改 ADMUX 和 ADCSRA 寄存器)都不会显示任何输出!
我正在使用带有 16MHZ 时钟的 atmega128。下面是我要解决的代码。
#include <asf.h>
#include <avr/io.h>
#define F_CPU 16000000L
int init_board(void)
{
DDRA=0xff;
PORTA=0x01;
}
int ADC_init(void)
{
//ADCSRA
ADCSRA = 0b10000111;
//ADMUX
ADMUX = 0b01100000; // middle line connected to ADC0
}
int main (void)
{
init_board();
ADC_init();
ADCSRA |= (ADSC >> 1);
while(1)
{
if(ADSC == 0)
{
uint8_t disp_value = ADCL;
PORTA = disp_value;
delay_ms(200);
ADCSRA |= (ADSC >> 1);
}
}
}
我不知道为什么代码不起作用。
我想是因为它没有正确设置我的寄存器,但我已经按照 atmega128 数据表上的所有说明进行操作。
【问题讨论】:
-
ericlippert.com/2014/03/05/how-to-debug-small-programs 即请为您的每一行添加评论,解释(向您自己和其他读者)该行的作用。作为副作用,您可能会从精通 C 但不熟悉您的设备的读者那里获得帮助。