我从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 /编译器的一些基本知识。也许在设置中...
任何想法或文档建议都非常感谢!
非常感谢!
答案 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)