- UID
- 848425
|
写了一个按键中断的程序,一按按键就退出整个程序,想在中断后继续运行整个程序。
#define led PORTB
#define ledd DDRB
#define key_up PTIH_PTIH2
#define key_left PTIH_PTIH3
#define key_right PTIH_PTIH4
#define key_down PTIH_PTIH5
#define key_up_d DDRH_DDRH2
#define key_left_d DDRH_DDRH3
#define key_right_d DDRH_DDRH4
#define key_down_d DDRH_DDRH5
#define kb_p PTIH //输出端口
#define kb_d DDRH //输出方向
#define kb_pe PERH //上拉 下拉 电阻
#define kb_ps PPSH //上升沿 下降沿
#define kb_ie PIEH //中断使能
#define kb_if PIFH //中断标志
#define uchar unsigned char
#define uint unsigned int
uchar data=0x01;
uchar direction=1;
uchar time=5;
void delayms(uint xms);
void led_init(void);
void key_init(void);
void main(void) {
DisableInterrupts;
led_init();
key_init();
EnableInterrupts;
for(;;) {
delayms(time);
if(direction==1){
data=data<<1;
if(data==0)
data=0x01;
} else{
data=data>>1;
if(data==0)
data=0x80;
}
led=~data;
} /* loop forever */
/* please make sure that you never leave main */
}
/*延时函数*/
void delayms(uint xms){
uint ii,jj;
for(ii=xms;ii>0;ii--)
for(jj=40000;jj>0;jj--);
}
/*点亮led*/
void led_init(void){
ledd=0xff;
led=~data;
}
/*按键初始化*/
void key_init(void){
key_up_d=0;
key_left_d=0;
key_right_d=0;
key_down_d=0;
kb_ps=0x00; //下降沿
kb_ie=0xff; //中断禁止
kb_if=0xff; //清除中断标志
}
/*按键中断函数*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 25 key_interrupts(void){
//kb_if=0xff; //清除中断标志
//kb_ie=0x00;
/*if(key_up==0){
time-=1;
if(time==0)
time=1;
}
if(key_down==0){
time+=1;
if(time>10)
time=10;
}*/
if(key_left==0)
direction=0;
if(key_right==0)
direction=1;
//kb_ie=0xff;
asm {
pula;
rti;
}
}
#pragma CODE_SEG DEFAULT |
|