前面我们简单地介绍过HC18M003的中断处理用寄存器。这次我们就做一个小例子,学习学习中断处理过程。我们采用的是SSTOP20封装的HC18M003,因此在程序中我们使用PA0作为输出,控制LED的亮灭。用PC1作为外部中断的触发脚,使用下降沿方式触发,代码如下:
1、main.c
#include"holychip_define.h"
/*********************************************
工作电源
当CPU运行在4M时,BOR必须使能为3.0V及以上;
当CPU运行在8M时,BOR必须使能为4.2V;
**********************************************/
// 延时毫秒
void delay(unsigned int d) {
unsigned int i;
for(;d > 0;d --)
for(i = 205;i > 0;i --);
}
void main(void) {
/*********************************系统初始化*******************************************/
OSCCON = 0x04; //Fosc=32MHz,Fcpu=4MHz(Fosc四分频,2T)
/**********************************IO初始化********************************************/
ANSELA = 0x01; // PA0设为数字模式
TRISA = 0x01; // PA0设为输出模式
ANSELC = 0x02; // PC1设为数字模式
TRISC = 0x00; // PC1设为输入模式
WPUC = 0x02; // PC1设置为上拉模式
/*********************************INT0初始化*******************************************/
INTMAP = 0x01; // INT0端口映射PC1
OPTION = 0x00; // INT0下降沿触发
INTE = 1; // 允许INT0中断
INTF = 0; // INT0中断标志位置0
GIE = 1; // 打开总中断
while(1) {
// 灭掉LED
PORTA0 = 1;
}
}
/***************************************************************************************
* @说明 INT0中断服务函数
* @参数 无
* @返回值 无
* @注 无
***************************************************************************************/
void interrupt Int0_Isr(void) {
if(INTF) {
PORTA0 = 0;
delay(200); // 中断处理很快,LED亮200ms,是为了证明中断处理被执行
INTF = 0; // 清除中断标志位
}
}
2、holychip_define.h
#ifndef __holychip_define__ #define __holychip_define__ #include"hc18m003.h" #endif
依然是使用芯圣自己的IDE,将程序编译后,下载到芯片中。然后重新建立芯片的测试环境,也就是去掉下载连接,给开发板接上电源。上电开始测试后,会看到,当PC1上产生下降沿的时候,连接在PA0上的LED会亮一段时间。
我要赚赏金
