void INT0()interrupt 0 using 1
{....
.....
}
interrupt 0 指明是外部中断0;
interrupt 1 指明是定时器中断0;
interrupt 2 指明是外部中断1;
interrupt 3 指明是定时器中断1;
interrupt 4 指明是串行口中断;
using 0 是第0组寄存器;
using 1 是第1组寄存器;
using 2 是第2组寄存器;
using 3 是第3组寄存器;
51单片机内的寄存器是R0--R7(不是R0-R3)
R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1、RS0位决定的。
using 0时设置 RS1=0,RS0 =0,用第0组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(00H)....R7(07H)
using 1时设置 RS1=0,RS0 =1,用第1组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(08H)....R7(0FH)
using 2时设置 RS1=1,RS0 =0,用第2组寄存器,R0--R7的在数据存储区里的实际地址是08H-0FH。R0(10H)....R7(17H)
using 3时设置 RS1=1,RS0 =1,用第3组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(18H)....R7(1FH)
比方说定时100ms,分别用查询法和中断法实现
查询法
#include<reg52.h>
void main()
{
TMOD=0X01;//定时器0方式1
TH0=(65536-10000)%256;//定时器器初值
TL0=(65536-10000)/256;
ET0=0;//关定时器0中断
TR0=1;
while(TF0==0);//若定时完成则中断标志位TF0为1,在此不断查询TF0
TR0=1;//完成定时关闭定时器
while(1); //等待
}
中断法
#include<reg52.h>
void main()
{
TMOD=0X01;//定时器0方式1
TH0=(65536-10000)%256;//定时器器初值
TL0=(65536-10000)/256;
EA=1;//开总中断
ET0=1;//关定时器0中断
TR0=1;//打开定时器
while(1); //等待
}
void isr_timer0 interrupt 1
{
TR0=0;//关闭定时器
}
另一个实例:P3.2口接有一个按键,未按下为高电平,按下则为低电平,当按下键时点亮一个led灯
查询法
#include<reg52.h>
sbit led=P1^1;//led是共阴极接法
sbit key=P3^2//按键接到p3.0口
void main()
{
led=0;//熄灭所有灯
while(key==1);//没有键按下则等待(不断查询p3.0的状态)
led=1;//点亮灯
while(1);
}
中断法
#include<reg52.h>
sbit led=P1^1;//led是共阴极接法
void main()
{
led=0;//熄灭所有灯
while(1);
}
void isr_led interrupt 0
{
led0=1;//点亮灯
}