我是AVR编程的新手,我正在尝试使用atmega8实现一个尖锐的右转。我能够实现直线路径,但无法实现急转弯。这是我的代码:
`#include <avr/io.h>
#include<util/delay.h>
int main(void)
{
DDRC=0b00000000;
DDRB=0b11111111;
int count=1,right=1;
while(1)
{
if((PINC&=0b00011111)==0b00000000)
{
PORTB=0b00000110;
}
else if((PINC&=0b00011111)==0b00001110)
{
PORTB=0&00100111;
}
else if((PINC&=0b00011111)==0b00001100)
{
PORTB=0b00000111;
}
else if((PINC&=0b00011111)==0b00000110)
{
PORTB=0b00100110;
}
else if((PINC&=0b00011111)==0b00001111)
{
if(count)
{
PORTB=0b0010011;
_delay_ms(200);
count--;
}
else if(((PINC&=0b00011111)==0b00000110)&&~(count))
{
PORTB=0B00000111;
}
}
else if((PINC&=0b00011111)==0b00011110)
{
if(right)
{
PORTB=0b0010011;
_delay_ms(200);
right--;
}
else if(((PINC&=0b00011111)==0b00000110)&&~(right))
{
PORTB=0B00100110;
}
}
}
}
对于左右转弯,这似乎根本不起作用。 知道我哪里错了吗?
答案 0 :(得分:1)
在不理解您的计划的情况下(请参阅上面的评论),我猜这是因为您永久地写信给PIN
- if
- 条款中的注册人。
PINC&=0b00011111
表示:
PINC
- 值0b00011111
PINC
根据您的代码运行的AVR,您可以通过将1写入PINX
- 寄存器位来切换输出。如果DDR
配置为输入您切换上拉。对于较新的AVR核心,情况确实如此。对于旧的,它的未定义行为要写入PIN寄存器,因为它们被定义为只读。