前面我们简单地介绍过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会亮一段时间。