1

我不明白为什么我的代码不起作用。它在我设置条件时有效,PORTA == 0x00但在PORTA == 0x01. 如何检查位是否高?下面是我的代码和原理图(晶体频率为 4MHz)。

#include<xc.h>

void main(){
    int cnt;
    int delay_cnt;
    TRISA = 1;                 // PortA as input
    TRISB = 0;                // PortB as output
    PORTB = 0x00;            // Initialize LED as off


    for(;;){                // Infinite loop
        if(PORTA == 0x01){
            for(cnt=0;cnt<3;cnt++){
                PORTB = 0x01; // Turns on LED
                for(delay_cnt=0;delay_cnt<10000;delay_cnt++); 
                PORTB = 0x00; // Turns off LED
                for(delay_cnt=0;delay_cnt<10000;delay_cnt++); 
            }
        }
    }
}

在此处输入图像描述

4

1 回答 1

1

在这种情况下if (PORTA == 0x01),您正在检查整个端口(8 位)。
如果您只想从端口检查位 0,请使用以下命令:

if (PORTAbits.RA0 == 1){

或者

if (PORTA & 0x01){
于 2022-02-11T06:08:37.390 回答