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
相关产品推荐
相关产品推荐

