首页 > 解决方案 > 如何在特定位置翻转特定位并携带该值以便稍后在程序中再次执行

问题描述

我的计划是设置 PORTA= 0x0F 因此 PORTA= 00001111 然后在 if 循环中翻转 PORTC 中的符号所以现在 PORT C 是 00001111 然后另一个 if 循环说如果 PORTC 的 0-3 = 1 然后设置 PORTC7=1 显示为 PORTC= 10001111

#include <avr/io.h>
#ifdef _SIMULATE_
#include "simAVRHeader.h"
#endif

int main(void) {
    DDRA = 0x00; PORTA = 0xFF; // Configure port A's 8 pins as inputs
    DDRC = 0xFF; PORTC = 0x00; // Configure port C's 8 pins as outputs, initialize to 0s
    while (1)
{


    if(!(PINA & 0x01)){
        PORTC |= 0x01;
    }
    if(!(PINA & 0x02)){
        PORTC |= 0x02;
    }
    if(!(PINA & 0x04)){
        PORTC |= 0x04;
        }
    if(!(PINA & 0x08)){
        PORTC |= 0x08;
        }

    if(PORTC==0x0F)
    {
        PORTC |= 0x80;
    }
    

}

return 0;
}

标签: cembedded

解决方案


要启用某个位,请使用 OR ( |) 与该位。

要禁用某个位,请使用 AND ( &) 与除该位之外的所有内容,使用按位 NOT ( ~)。

要更改位的值(0 到 1 或 1 到 0),请使用按位异或 ( ^)。

这是一个例子:

#include <stdint.h>

int main ()
{
  uint8_t bits = 0x00;
  uint8_t mask = 0x01;
  //enable bit
  bits |= mask;
  //disable bit
  bits &= ~mask;
  //flip bit
  bits ^= mask;
  //flip bit again
  bits ^= mask;
  return 0;
}

推荐阅读