朋友们您好,我不知道发生了什么事情既不是switch-case也不是if,else语句对我有效我想给PORTB和PORTD一些数据当一些特定的数据到达我的“开关模块”中的PORTA寄存器之前我使用PINA而不是PORTA,但它仍然不起作用,但当我开始调试并通过提供PORTA=0b00001110提供一些数据时,它很容易给出值PORTB=0b00000010...请帮帮我..
/*
* robotic_arm.c
*
* Created: 2/3/2015 10:39:25 AM
* Author: Shrikant Vaishnav
*/
#define F_CPU 1600000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{ DDRA=0x00;//make PORTA as input
DDRB=0xFF;//make PORTB as output
DDRD=0XFF;//make PORTD as output
while(1)
{
switch(PORTA)
{
//First Three conditions for Robotic ARMs
case 0b00001110:
{
PORTB=0b00000010;
_delay_ms(50);
break;
}
case 0b00001101:
{
PORTB=0b00001000 ;
_delay_ms(50);
break;
}
case 0b00001011:
{
PORTB=0b00100000 ;
_delay_ms(50);
break;
}
//Condition for Direction Change of Motors of Robotic Arms
case 0b00000110:
{
PORTB=0b00000001;
_delay_ms(50);
break;
}
case 0b00000101:
{
PORTB=0b00000100;
_delay_ms(50);
break;
}
case 0b00000011:
{
PORTB=0b00100000;
_delay_ms(50);
break;
}
//Now Driving Robotic Car
case 0b00000010:
{
PORTD=0b00000010;
_delay_ms(50);
break;
}
case 0b00000001:
{
PORTD=0b00000001;
_delay_ms(50);
break;
}
default:
{
PORTB=0b00000000; //0ff motors when no signal sent
PORTD=0b00000000; //OFF DRIVING CAR
_delay_ms(50);
break;
}
}
}
return 0;
}发布于 2015-02-23 04:04:37
你确定PORTA的高位引脚都是0吗?如果不匹配,则所有案例都不会匹配。
你可以试试
switch(PINA & 0x0F)而不是。这将确保较高的引脚不会导致案例失败。
发布于 2015-02-24 00:39:01
请注意,要测试的寄存器不是PORTA,而是PINA。当引用硬件单元时,您必须区分“端口x”;当谈论访问特殊功能寄存器时,您必须区分PORTx。读取‘端口A’意味着读取PINA寄存器。
PORTx是设置输出的寄存器(或者,如果配置为输入),pull upsPINx是在引脚上保持当前输入电平的寄存器。(如果配置为输出,它们当然会获得与PORTx相同的值(但会有一些延迟)在现代AVR上,如果您想切换输出,也可以写入PIN寄存器。与读取PORT、XORing它并将其写回的正常方式相比,这节省了几个周期。
https://stackoverflow.com/questions/28659160
复制相似问题