SFR(特殊功能寄存器)
-
定义:
SFR是80C51单片机中各功能部件对应的寄存器,用于存放相应功能部件的控制命令,状态或数据。它是80C51单片机中最具有特殊的部分,所有80C51系列功能的增加和扩展几乎都是通过增加特殊功能寄存器SFR来达到目的的。(来源于百度百科)
-
作用:设计SFR可以执行一定的功能(比如中断)
-
设置方法:二进制0和1赋值,比如
IT0=1
中断
-
定义
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。(百度百科)
-
作用:提高了单片机的效率等
-
种类:外部中断,定时器中断等
中断设置函数
-
定义:配置中断寄存器的函数
-
作用:配置寄存器使得单片机开启相应的中断
-
举例
void Int0Init()//中断设置函数 { IT0=1;//跳变沿出发方式(下降沿) //IT1=1;//跳变沿出发方式(下降沿) 中断1 EX0=1;//打开INT0的中断允许。 //EX1=1;//打开INT1的中断允许。 EA=1;//打开总中断 }
中断号和中断函数
- 中断函数:当中断发生的之后单片机会干什么
- 中断号:每种中断都对应一个唯一一个中断号,并且中断具有优先级
- 外部中断0:0(优先级最高)
- 定时器中断0:1
- 外部中断1:2
- 定时器中断1:3
- 串口中断:4(优先级最低)
外部中断
- P3^2口是外部中断0,P3^3是外部中断1
- 中断设置函数包括(跳变方式:上升,下降;打开中断和总中断)
- 中断函数就是单片机发生中断之后进行的行为
void Int0Init()//中断设置函数
{
IT0=1;//跳变沿出发方式(下降沿)
//IT1=1;//跳变沿出发方式(下降沿) 中断1
EX0=1;//打开INT0的中断允许。
//EX1=1;//打开INT1的中断允许。
EA=1;//打开总中断
}
void main()
{
Int0Init(); // 设置外部中断0
while(1);
}
void Int0() interrupt 0 //中断函数(中断发生的时候发生什么)
//void Int0() interrupt 2 //中断函数(中断发生的时候发生什么)
{
delay(1000); //延时消抖
if(k3==0)
{
led=~led;
}
}
定时器中断
- 定时器可以用来精确计时
- 和外部中断一样,也有中断函数和中断号(定时器0中断号为1)
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main()
{
Timer0Init(); //定时器0初始化
while(1);
}
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
串口中断
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void main()
{
UsartInit(); // 串口初始化
while(1);
}
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}