目录
一、中断是什么?
二、外部中断
1.中断寄存器及中断优先级
3.外部中断
4.定时器中断
5.串行口通信
5.1串口相关寄存器
总结
一、中断是什么?
? ? ? 中断系统是为使CPU具有对外界紧急时间的实时处理能力而设置的。
? ? ? 当中央处理器cpu正在处理某件事情的过程中外界发生了紧急事件请求,需要cpu暂停当前的工作,而转去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称之为中断。
二、外部中断
1.中断寄存器及中断优先级
EA 总中断控制
EX0 外部中断0控制允许位
IPH,IP? 优先级控制位
2.定时器/计数器0/1控制寄存器TCON
TF1/TF0? 定时器T0/T1溢出标志位
FR1/FR0 定时器1/0运行控制位
IT1/IT0 外部中断中断类型选择位,选择下降沿或低电平触发
IE1/IE0 外部中断请求源标志(cpu)控制
3.外部中断
#include <reg51.h>
#include"public.h"
#define led_all P2
sbit led=P2^2 ;
sbit key=P3^2;
sbit key1=P3^3;
void exin0() //外部中断0初始化函数
{
EA=1; //打开总中断
EX0=1; // 外部中断0中断允许位
IT0=1; //外部中断0中断源类型选择位,可选择低电平触发或下降沿触发
}
void exin1() //外部中断1初始化函数
{
EA=1; //打开总中断
EX1=1; // 外部中断0中断允许位
IT1=1; //外部中断0中断源类型选择位,可选择低电平触发或下降沿触发
}
int main() //主函数
{
exin0();
exin1(); //调用中断初始化
while(1)
{ //空循环
}
return 0;
}
void int0() interrupt 0 //中断函数
{
delay_ms(1); //消抖
if(key==0) //触发
led=!led; //led翻转
}
void int1() interrupt 2 //中断函数
{
delay_ms(1); //消抖
if(key1==0) //触发
led_all=~led_all; //led_all翻转
}
4.定时器中断
#include <reg51.h>
#include"public.h"
sbit led=P2^2 ;
void time0_init() //定时器0初始化函数
{
TMOD=0x01; //定时器模式控制 写入gate0=0定时器计数 设置定时器从内部时钟输入
TH0=0xfc; //设置寄存器初值高8位
TL0=0x18; //设置寄存及初值低8位
ET0=1; //打开定时器0中断允许
EA=1; //打开定时器总中断
TR0=1; //打开定时器T0运行控制位
}
int main()
{
time0_init();
while(1)
{
}
return 0;
}
void time0() interrupt 1 //中断函数time0
{
static int i=0; //静态局部变量i
TH0=0xfc; //初值初始化
TL0=0x18;
i++; //次数
if(i==1000) //1s
{
i=0;
led=!led; //led翻转
}
}
5.串行口通信
51单片机内部集成有一个功能很强的全双工串行通信口,设有两个相互独立的接收和发送缓冲器,可以同时发送和接收数据,发送缓冲器只能写入而不能读出,接收缓存器只能读出而不能写入,因而两个缓冲器可以公用一个地址码(99H)两个缓冲器统称串行通信特殊功能寄存器SBUF。
5.1串口相关寄存器
SCON 串口控制寄存器
SBUF 串口通信缓冲器
PCON 电源控制寄存器
IE(ES) 串口中断允许位
IPH/IP 中断优先级寄存器
SADEN/SADDR 从机地址控制寄存器
#include <reg51.h>
#include"public.h"
sbit led=P2^2 ;
void uart_init() //串口初始化函数
{
TMOD|=0x20; //定时器1
PCON=0x80; //
SCON=0x50; //串口控制寄存器配置
TH1=0xfa; //设置寄存器初值高8位
TL1=0xfa; //设置寄存及初值低8位
ES=1; //串口中断允许
EA=1; //打开总中断
TR1=1; //打开定时器运行控制位
}
int main()
{
uart_init();
while(1)
{
}
return 0;
}
void uart() interrupt 4 //中断函数urat
{
int rec=0;
RI=0;
rec=SBUF;
SBUF=rec;
while(!TI);
TI=0;
}
总结
|