中断源 | 默认中断级别 | |
外部中断0 INT0 | 最高 | interrupt 0 |
定时器0中断 T0 | 1 | interrupt 1 |
外部中断1 INT1 | 2 | interrupt 2 |
定时器1中断 T1 | 3 | interrupt 3 |
串口中断 TX/RX | 4 | interrupt 4 |
与中断系统相关的特殊寄存器:
中断寄存器就是用于存贮中断状态的,包含是否启用中断或者是否发生中断。
1)中断允许控制寄存器(IE)------------------ 控制各中断的开放和屏蔽
2)中断优先级控制寄存器(IP)----------------设置各中断的优先级
3)定时器/计数器控制寄存器(TCON)------定时器和外部中断的控制
4)串行口控制寄存器(SCON)----------------串行中断的控制
中断类型分为三类:
1)T0、T1是2个定时器/计数器中断,由片内定时器提供;
2)INT0、INT1是2个外部中断,由引脚P3.2和P3.2提供;
3)RX、TX为串行口中断所用,由片内串口提供。
串口初始化
void uart_init(void)
{
T2CON=0x30; //用定时器2做串口0的波特率发生器
RCAP2H=(65536-22118400/baud_rate/32)/256;
RCAP2L=(65536-22118400/baud_rate/32)%256;
SCON=0x50; //串口0工作在模式3 M0=1 SM1=1 在11位异步收发模式 接收允许
TR2=1; //开启定时器2
ES=0; //关闭串口中断
EA=1; //打开总中断
}
void UART0(void) interrupt 4
{
...
}
11.0592M晶振下 baut=f/{32*[65536-(RCAP2H,RCAP2L)]}
fee0--1200 ff70--2400 ffb8--4800 ffdc---9600 ffee--19200 fff7--38400 fffa--57600 fffd--115200
22.1184M晶振下
fdc0--1200 fee0--2400 ff70--4800 ffb8---9600 ffdc---19200 ffee--38400 fff4--57600 fffa--115200
定时器初始化
void Timer_init(void) //定时器0定时10ms
{
TMOD|=0x01; //T0定时 16位 TR0控制
TH0=0xb8;
TL0=0x00;
TR0=1; //开启定时器
ET0=1; //T0中断开
EA=1; //打开总中断
}
void time_0(void) interrupt 1
{
TL0=0x00;
TH0=0xb8;
}
定时器计算方法:
22118400M/12=1843200 每秒1843200次
10ms=0.01s = 18432次
65536-18432= 47104 = B800