STC89C52的中断

中断分为四个步骤:中断请求->中断响应->中断处理->中断返回

数据输入输出传送方式
1.无条件传送 (led)
2.查询传送方式(温度传感器,ADC采样转换)
3.中断传送方式(IRQ)
4.直接储存器存取方式(DMA)

5个中断源
外部中断源(2个)
INT0-由P3.2端口引入,低电平或下降沿引起。
INT1-由P3.3端口引入,低电平或下降沿引起。
这两个外部中断源标识和它们的触发方式控制位由特殊功能寄存器TCON的低4位控制。
内部中断源(3个)
T0-定时器/计数器0中断,由T0回零溢出引起。
T1-定时器/计数器0中断,由T1回零溢出引起。
TI/RI-串口IO中断,串行端口完成一帧字符发送或接收后引起。
这3个内部中断源的控制位分别锁存在特殊功能寄存器TCON和SCON中。
STC89C52的中断_第1张图片

1.允许中断

中断允许寄存器IE和XICON(特殊功能寄存器sfr)
STC89C52的中断_第2张图片
EA可位寻址

2.配置中断方式

STC89C52的中断_第3张图片

3.编写中断处理函数

中断优先级:外部中断0(入口号0)>T0溢出中断(入口号1)>外部中断1(入口号2)>T1溢出中断(入口号3)>串行口中断(入口号4)
void int1() interrupt 2 关键字interrupt 和入口号
{

}

#include 
sbit key=P3^3;
sbit led=P1^0;
void main()
{
     
   IT1=0;
   EX1=1;
   EA=1;
   while(1)
   {
     }
}
void int1() interrupt 2
{
     
  led=~led;
}

定时器相关
两个16位定时器/计数器:定时器0(T0为P3.4)和定时器1(T1为P3.5)
这里说的16位是指定时/计数器内部分别有16位的计数寄存器。
当工作在定时模式时,每经过一个机器周期内部的16位计数寄存器的值就会加1,当这个寄存器装满溢出时,我们可以计算出工作在定时模式时的最高单次定时时间为65535*1.085us=时间(单位us)
当工作在计数器模式时,T0(P3.4引脚),T1(P3.5引脚)每来一个脉冲计数寄存器加1。

使用步骤
启动定时器/计数器(通过TCON控制器)
设置定时器/计数器工作模式(通过TMOD控制器)
查询定时器/计数器是否溢出(读TCON内TF位)
TMOD 地址:89H 复位值:00H 不可位寻址
STC89C52的中断_第4张图片

#include 
sbit time0=P3^4;
sbit led=P1^0;
int i=0;
void main()
{
     
  EA=1;
  ET0=1;
  TR0=1;
  TMOD=0x01;
  TH0=(65535-46082)/256;
  TL0=(65535-46082)%256;
  while(1)
  {
     
//    if(TF0==1)
//	{
     
//	    TF0=0;
//		TH0=(65535-46082)/256;
//	    TL0=(65535-46082)%256;
//		i++;
//	    if(i==20)
//	      {
     
//		    i=0;
//	        led=~led;	
//	      }
//	}   
  }
}
void timer0() interrupt 1
{
     
 TH0=0x4b;
 TL0=0xfd;
 i++;
 if(i==20)
   {
     
     i=0;
    led=~led;
   
   }
}

串口中断
串行通信又可分为异步通信和同步通信
异步通信指发送和接收设备使用各自的时钟 ,以字符(构成的帧)为单位进行传输的,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传输的,即字符之间不一定有位间隔的整数倍的关系,但同一字符内的各位之间的距离均为位间隔的整数倍
起始位 +数据 +终止位
同步时钟根据时钟发数据

串行通信中常见的错误校验
奇偶检验
代码和校验
循环冗余校验

传输速率
比特率是每秒传输二进制代码的位数,单位是位/秒(bps)
如9600bps,每个字节8位( 不带起始位和终止位的),9600/8=1200个字节,波特率位9600时,每秒钟传输1200字节

串行接口的结构
STC89C52的中断_第5张图片
串行口工作之前需要对相关寄存器进行配置,设定其工作模式
1.设置T1的工作方式(编程TMOD的寄存器);
2.计算T1的初始值,装载TH1,TL1;
3.启动T1(编程TCON中的TR1位);
4.确定串行口控制(编程SCON寄存器);
5.如需串行口在中断方式工作时,要进行中断设置编程IE寄存器。

与串口通信相关的寄存器
STC89C52的中断_第6张图片
(附图)
IE寄存器:EA ES
SCON寄存器:
STC89C52的中断_第7张图片STC89C52的中断_第8张图片
其中SM0和SM1决定了不同的工作方式。
STC89C52的中断_第9张图片
波特率计算方式
STC89C52的中断_第10张图片

#include 
sbit led=P1^0;
int num=0;
void main()
{
     
  EA=1;		   //串口初始化
  ES=1;
  SM0=0;SM1=1;  //串口工作方式1,8位uart波特率可变
  REN=1;     //串口允许接收
  //设置定时器产生的波特率
  TR1=1;
  TMOD=0x20; //
  TH1=0xfd;
  TL1=0xfd;
  while(1)
  {
     
  }
}
void uart() interrupt 4
{
     
  if(RI)
  {
     
    num=SBUF;
	SBUF=num;
    led=~led;
	RI=0;
  }
}

你可能感兴趣的:(51单片机,单片机)