Мне нужно установить PORTC во временную переменную, которая изменяется с помощью набора операторов if, но битовая последовательность, назначенная PORTC в самом конце, - все нули, поэтому я предполагаю, что ни одно из выражений в операторах if не было оцененов true, где я проверяю, является ли битовая последовательность меньше или равна шестнадцатеричной.
#include <avr/io.h>
unsigned char GetBit(unsigned char x, unsigned char k) {
return ((x & (0x01 << k)) != 0);
}
unsigned char SetBit(unsigned char x, unsigned char k, unsigned char b) {
return (b ? x | (0x01 << k) : x & ~(0x01 << k));
}
int main(void)
{
/* Replace with your application code */
DDRA = 0x00; PORTA = 0x0F;
DDRC = 0xFF; PORTC = 0x00;
unsigned char tmpa = 0x00;
unsigned char tmpc = 0x00;
tmpa = tmpa | PORTA;
tmpc = tmpc | PORTC;
while (1)
{
if (tmpa <= 0x02) //less than or equal to 2
{
SetBit(tmpc, 5, 1);
SetBit(tmpc, 6, 1);
}
if (tmpa <= 0x04) //less than or equal to 4
{
SetBit(tmpc, 4, 1);
SetBit(tmpc, 6, 1);
}
if (tmpa <= 0x06) //less than or equal to 6
SetBit(tmpc, 3, 1);
if (tmpa <= 0x09) //less than or equal to 9
SetBit(tmpc,2,1);
if (tmpa <= 0x0C)
SetBit(tmpc,1,1); //less than or equal to 12
if (tmpa <= 0x0F)
SetBit(tmpc,0,1); //less than or equal to 15
PORTC = PORTC | tmpc; ////////PORTC ends up being all zeros
asm("break");
}
}