HCS08入门之——键盘中断
0赞本实验主要学习键盘中断用到的几个寄存器:
1、PTxSC,IO口中断状态和控制寄存器。下面是以PTA口为例的寄存器描述:
2、PTxPS,IO口中断引脚选择寄存器,其每一位对应IO口的每一位。为0时引脚不用于产生中断,为1时引脚用于产生中断。
3、PTxES,IO口中断边沿选择寄存器,其每一位对应IO口的每一位。为0时引脚的下降沿产生中断,为1时引脚的上升沿产生中断。
实验现象:
按一下按键(如S2)对应的LED指示灯(D7)发光(熄灭),再一次按下按键对应的
LED指示灯熄灭(发光。
按一下SW1,D5点亮,再按一下SW1,D5熄灭
按一下SW2,D7点亮,再按一下SW2,D7熄灭
按一下SW3,D6点亮,再按一下SW3,D6熄灭
按一下SW4,D8点亮,再按一下SW4,D8熄灭
程序代码如下:
/*****************头文件****************************************/
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
byte kbi_value=0;//全局变量
/*********************变量和函数定义****************************/
void IO_INIT(void);
void KB_INIT(void);
void MCU_INIT(void);
void DELAY(word x);
/*********************主函数************************************/
void main(void) {
EnableInterrupts; /* enable interrupts */
MCU_INIT();
IO_INIT();
KB_INIT();
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
/***************************MCU初始化函数*******************************/
void MCU_INIT(void){
MCGC1=0x04; //内部时钟二分频,微调
MCGC2=0x40;
MCGTRM=0xa8;
SOPT1=0x42; //看门狗
SOPT2=0x00;
}
/***********************I/O初始化********************************/
void IO_INIT(void){
PTBDD = 0xFF;//LED输出
PTCDD_PTCDD3=1;
PTADD_PTADD7=0;//键盘输入
PTFDD_PTFDD7=0;
PTAPE_PTAPE7 = 1;//上拉使能
PTFPE_PTFPE7 = 1;//上拉使能
PTBD = 0xF0;
PTCD_PTCD3 = 1;
}
/************************KB初始化********************************/
void KB_INIT(void){
PTAPE_PTAPE7 = 1;
PTAPS_PTAPS7 = 1;
PTAES_PTAES7 = 0;
PTASC_PTAMOD = 0;
PTASC_PTAIE = 0;
PTASC_PTAACK = 1;
PTASC_PTAIE = 1;
}
/********************************键盘中断**************************/
interrupt 22 void KBI_ISR(void) {
PTASC_PTAACK=1;
if(PTAD_PTAD7==0) {
PTBD = ~PTBD;
}
}

