XC8的PIC18 IO端口noobie问题

时间:2019-04-24 17:20:33

标签: pic mplab xc8

我从AVR来了很多年,并以PIC18F46K42开始了我的第一个PIC项目。 将实际的MPLAB v5.15与XC8编译器v2.05(设置为C99标准)一起使用。 (在微芯片论坛上注册几天不起作用...)

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

首先将RC6设置为输出:

TRISC = 0b10111111; 

现在尝试读取IO-Port RC6:

uint8_t LEDstate = PORTCbits_t.RC6; // auto completition of PORTC.. command by xc8

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

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

然后尝试写入IO-Port RC6:

LATCbits_t.LATC6 = 0; // auto completition of LATC.. command by xc8

=>合并错误:预期的标识符或'('

许多教程中也发布了命令“ LATCbits.LATC6,不带“ _t”,但编译器也无法识别

阅读xc8手册和数据表并没有真正的帮助... 我想,我错过了此IDE /编译器的一些基本知识。也许在设置中...

任何想法或文档建议都非常感谢!

非常感谢!

3 个答案:

答案 0 :(得分:1)

..._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 :(得分:1)

如Oleg所述,..._ t不正确。将行更改为下面的行,它将编译没有问题。

uint8_t LEDstate = PORTCbits.RC6; // auto completition of PORTC.. command by xc8

我刚刚在您的芯片上尝试了以下代码,并且编译时没有任何问题。

#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);
}

答案 2 :(得分:0)

您可能要考虑使用MCC(MPLAB代码配置器)。它将使使用外围设备的事情变得更容易-甚至只是简单的引脚I / O。

这也使跟踪资源变得更加容易。

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

#define LEDState_SetHigh()            do { LATCbits.LATC6 = 1; } while(0)