摘自:32位单片机C语言编程:基于PIC32
单片机系统在系统复位或者上电之后,会在执行main()函数之前先执行一小段由MPLAB C32链接器自动插入的初始化程序,即所谓的Startup(启动)代码或者crt0代码,也称为c0代码。启动代码负责基本的内务操作,包括栈的所有重要初始化等。
首先我们的任务是激活PIC32的一个或多个输出引脚。PIC32的输入/输出(I/O)引脚也被成组地配置在模块或者端口中,其中每一组最多包含16个引脚,这些模块被依次命名为A至H。我们按照顺序最先使用PortA。 用于控制这些端口的SFR中最重要的也是最容易使用的是与模块同名的寄存器(比如PORTA)。
PORTA代表控制寄存器,PortA代表整个外围设备模块。
根据p32mx795f512l.h,我们可以找到PORTA的数据结构如下:
typedef union {
struct {
unsigned RA0:1;
unsigned RA1:1;
unsigned RA2:1;
unsigned RA3:1;
unsigned RA4:1;
unsigned RA5:1;
unsigned RA6:1;
unsigned RA7:1;
unsigned :1;
unsigned RA9:1;
unsigned RA10:1;
unsigned :3;
unsigned RA14:1;
unsigned RA15:1;
}; struct {
unsigned w:32;
};
} __PORTAbits_t;
根据数据手册,如果将PORTA寄存器中的某位置设为1,那么对应的输出引脚就为逻辑高电平(3.3V),相反0则为逻辑低电平(0V)
这里附上相应的数据手册部分:
使用C语言赋值则使用如下语句即可:
#include
main()
{
PORTA=0xff;
}
然而我们发现用该代码在MPLAB IDE中build之后逐步运行,发现PORTA寄存器的值没有任何改变,一直是0x00000000。
接下来我们查询数据手册中关于PortA的部分
。。。