前几天我一直在学习其他的的单片机和跟测试组走流程,一直没空认真专研一下我第一次进公司的这块板子。当时只是专研了一些基础功能,我就以为我掌握得差不多了。但是昨天老大说的话才真是当头一棒,这块单片机的功能可不仅仅是中断、按键、定时器等。那些难的SPI、旋钮的识别、延迟函数、片区擦除、看门狗、CAN总线等,LCD点阵显示等。我才发现这么多东西要学,这块板子都未掌握就想着其他单片机,是不是有点好高骛远了。闲扯了这么多,就是总结一下,贵精不贵多。
上代码:
void EXIT_INIT(){
DDRJ_DDRJ2 = 0; //输入模式
PERJ_PERJ2 = 1; //设置PP2口设备启用
PPSJ_PPSJ2 = 0; //设置为上拉,下降沿触发 这里需要注意一下,这个按键是否有上拉或者下拉,要查看寄存器手册
PIEJ_PIEJ2 = 1; //设置中断使能
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt VectorNumber_Vportj void IRQ_ISR(void)
{
DisableInterrupts; //关闭中断
PIFJ_PIFJ2 = 1; //清除PP0的中断标志位
PTP = 0xFF; //关闭LED
//延时以至于可以观察到效果
EnableInterrupts; //打开中断
}
#pragma CODE_SEG DEFAULT
void main(void) {
/* put your own code here */
DDRP = 0XFF; //P组小灯设置为输出
//中断初始化
EXIT_INIT();
EnableInterrupts;
for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */
寄存器解读
① DDRJ_DDRJ2
本次使用的按键是J2,所以要将J2设置为输入模式
②PERJ_PERJ2 端口J拉动设备启用寄存器
输入时启用拉动装置
该位控制相关端口输入引脚上的拉动设备是否激活。如果使用引脚作为输出,则该位无效。
1拉动设备已启用
0拉动设备已禁用
综上所述,我们应该启用该引脚上的按键设备,激活上拉设备,(设备是否为上拉由寄存器PPSJ决定或者芯片引脚说明图)
③PPSJ_PPSJ2 端口J极性选择寄存器
上拉和下拉的选择主要靠寄存器手册进行查看

1 选择下拉电阻;上升沿触发
0 选择上拉电阻;下降沿触发
④PIEJ_PIEJ2 中断使能
⑤PIFJ_PIFJ2 标志位清空
如果设置了相关的中断启用位,则会发生中断
将逻辑“1”写入相应的位字段将清除
特别说明一下,这个J组的中断向量就是 :VectorNumber_Vportj。
如果你是使用CodeWarrior的图形化编程生成的中断是不一样的,他进行二次封装,直接在配置文件中生成你定义的中断,我之前看的时候就是没找到他是怎么使用系统的中断向量的,好像是直接使用汇编生成的吧。我也有点不确定。