You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PIC18F4520编程:PORTD位0为高电平时如何读取PORTC低4位数据

现有代码错误修正

你当前的代码存在几个基础语法/逻辑错误,先逐一修正:

  • C语言区分大小写,Void需改为void,If需改为if
  • PIC18F4520的PORTD是8位端口,你给TRISD赋值的0b111111111是9位,多写了一个1,改为0b11111111即可
  • 语句末尾缺分号、代码块缺闭合大括号,属于C语言基础语法问题,补全即可
  • TRISC的注释标注错误,你要读取的是PORTC低四位,不是PORTA的引脚

PORTC低4位读取实现

要提取PORTC第03位的4位二进制数据,直接用`PORTC`和`0x0F`(二进制`0b00001111`)做按位与操作即可,该操作会自动清零PORTC高4位,仅保留你需要的低4位数值,读取到的结果取值范围为015,对应二进制0000~1111。


完整参考代码

#include <xc.h>
// 可根据你的硬件配置调整芯片配置位,以下为示例
#pragma config OSC = INTIO67   // 内部时钟,按需修改为你的实际时钟配置
#pragma config WDT = OFF       // 关闭看门狗,按需调整

void main(void) {
    TRISD = 0b11111111;        // PORTD全设为输入,确保RD0为输入模式
    TRISC = 0b11111111;        // PORTC全设为输入,确保RC0~RC3为输入模式
    unsigned char recv_data;   // 存储读取到的4位数据
    
    while(1) {
        if(PORTDbits.RD0 == 1) {
            // 核心读取逻辑:按位与清零高4位,保留RC0~RC3的数值
            recv_data = PORTC & 0x0F;
            // 此处可添加你拿到recv_data后的后续业务逻辑
        }
    }
}

补充说明

如果使用XC8编译器,也可以直接用RD0简写替代PORTDbits.RD0,写法更简洁。

内容的提问来源于stack exchange,提问作者stephen curry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:45:00