中断函数

中断函数不需要在main函数前定义

1
2
3
4
5
6
7
8
9
10
11
12
13
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=1;
//设置为边沿触发方式
//默认情况下是电平触发方式,即IT0=0;
//"IT0=1;"等价于"TCON=0x01;"
//"IT0=0;"等价于"TCON=0x00;"
void exter0 interrupt 0
// iterrupt是关键字,表明这是中断函数。其后的数字代表终端函数的编号(范围是0~4)
//这里的编号是0,表明是外部中断对应的中断函数
{

}

定时/计数器应用举例

在中断函数内部定时器仍会计时,所以要尽量控制中断函数内代码长度小于计时时长

1
2
3
4
5
6
7
8
9
10
11
12
13
14
TMOD=0x01;
//前四位控制定时器1,后四位控制定时器0
//这里表示令定时器0处于工作方式“1”下
TH0=(256*256-50000)/256;TL0=(256*256-50000)%256;
//设置定时时长为50000微秒
EA=1;//打开总中断
ET0=1;//打开定时器0中断
TR0=1;//启动定时器0,开始计时

void timer0() interrupt 1
//编号为1,表明是定时器0对应的中断函数
{

}

键盘

按键在断开和闭合时,触点会出现”抖动“现象

常用函数

循环左移函数_crol_

1
2
3
4
5
6
7
#include<intrins.h>//该函数所在的头文件

int tmp=0xfe;

tmp=_crol_(tmp,1);
//_crol_函数可以使数字循环左移
//这里把tmp循环左移一位,即变成0xfd