首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XC8的PIC18 IO端口noobie问题

XC8的PIC18 IO端口noobie问题
EN

Stack Overflow用户
提问于 2019-04-25 01:20:33
回答 3查看 467关注 0票数 0

我在AVR工作多年,用PIC18F46K42开始了我的第一个PIC项目。使用实际的MPLABv5.15和XC8编译器v2.05 (设置为C99标准)。(在microchip论坛上注册在几天内不起作用...)

现在,我遇到了一些基本问题,无法让简单的IO端口访问正常工作:

首先将RC6设置为输出:

代码语言:javascript
复制
TRISC = 0b10111111; 

现在正在尝试读取IO端口RC6:

代码语言:javascript
复制
uint8_t LEDstate = PORTCbits_t.RC6; // auto completition of PORTC.. command by xc8

=>编译错误:意外的类型名称'PORTCbits_t':需要表达式

编译器根本无法识别在许多教程中发布的命令"PORTCbits.RC6“,但没有"_t”

然后尝试写入IO端口RC6:

代码语言:javascript
复制
LATCbits_t.LATC6 = 0; // auto completition of LATC.. command by xc8

=>编译错误:需要标识符或'(‘

编译器根本无法识别命令"LATCbits.LATC6“,但没有"_t”,该命令也在许多教程中发布

阅读xc8手册和数据手册并没有真正的帮助...我想,我在这个IDE /编译器中遗漏了一些基本的东西。也许在设置中..。

非常感谢您对文档的任何想法或建议!

非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-18 05:29:41

您可能需要考虑使用MCC (MPLAB Code Configurator)。这将使使用外围设备变得更容易-即使是简单的引脚I/O。

它还可以更容易地跟踪您的资源。

您可以为引脚创建别名,然后MCC将为您提供干净的宏,如下所示:

代码语言:javascript
复制
#define LEDState_SetHigh()            do { LATCbits.LATC6 = 1; } while(0)
票数 0
EN

Stack Overflow用户

发布于 2019-04-25 02:00:42

..._t是错误的,它是一个类型定义。看一下部件标题(pic18lf46k42.h),第46579行。在下一行定义的实际端口结构称为PORTCbits。为了识别这个名称,您需要在源代码中输入#include <xc.h>,并确保在MPLAB项目中设置了正确的部分。

我一直在使用这个符号,它总是有效的,假设引脚存在,并且满足上述两个条件。示例:

https://github.com/felis/stirrer/blob/f-desk/board_control/code/stirrer/bsp.h#L58

票数 1
EN

Stack Overflow用户

发布于 2019-09-26 23:02:40

正如奥列格所提到的,..._t是不正确的。将这一行改为下面的一行,它将不会出现任何问题。

代码语言:javascript
复制
uint8_t LEDstate = PORTCbits.RC6; // auto completition of PORTC.. command by xc8

我刚刚在你的芯片上尝试了下面的代码,它编译起来没有任何问题。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <stdint.h>

int main(int argc, char** argv) {
    uint8_t LEDstate = PORTCbits.RC6; // auto completition of PORTC.. command by xc8
    return (EXIT_SUCCESS);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55835445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档