中断就像是你在生活中正在做一件事时,正好有事要做,你放下手中的工作去做另外一件事,做完这件事后,回来断续来完成你刚才没有完成的事。
对于串行口接收和发送中断,是由硬盘自动置位SCON中的中断请求标志TI(发送)和RI(接收)
中断又分为内部中断和外部中断。
外部中断中的中断控制寄存器----TCON
D7 D6 D5 D4 D3 D2 D1 D0
TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
其中TF1和TF0是对串行接收/发送中断;TR1和TR0是进行运行控制的;
IE1和IE0是中断请求标志位,外部中断INT0和INT1;
IT1和IT0是定时器/计数请求标志位。
中断允许寄存器IE
D7 D6 D5 D4 D3 D2 D1 D0
EA | - | - | ES | ET1 | EX1 | ET0 | EX0 |
EA:CPU的中断开放标志;
ES:串行口中断允许;
ET1和ET0:定时器/计数器T1和T0的溢出中断允许位;
EX1和EX0:外部中断0,1中断允许位
中断优先级寄存器IP
D7 D6 D5 D4 D3 D2 D1 D0
- | - | - | PS | PT1 | PX | PT0 | PX0 |
PS:串行口中断优先级控制位
PT1和PT0是定时器T1,T0中断优先级控制,
PT1=1时T1为高优先级,PT1=0时T1为低优先级;
PT0=1时T0为高优先级,PT0=0时T0为低优先级;
PX1和PX0:是外部中断1,0中断优先级控制
PX1=1时外部中断1为高优先级,PX1=0时外部中断1为低优先级;
PX0=1时外部中断0为高优先级,PX0=0时外部中断0为低优先级;
中断优先级默认的由高到低的排列
中断源
外部中断0
定时器T0中断
外部中断1
定时器T1中断
串行口中断
中断响应时间:
调用指令本身需要两个机器周期,乘法指令MUL和除法指令DIV需要4个机器周期。外部中断响应时间总是在3~8个机器周期之间。
单片机的触发方式有两种:电平触发和边沿触发方式
电平触发方式中,外部中断源口的电平逻辑直接给中断标志寄存器;
边沿触发方式:中断口线上一个由高到低的跳变记录在标志寄存器中;
IT0=0,为电平触发方式,一脚INT0上低电平有效
IT0=1,为跳沿触发方式,引脚INT0上的电平从高到低的负跳变有效。
IT1=0,为电平触发方式,一脚INT1上低电平有效
IT1=1,为跳沿触发方式,引脚INT1上的电平从高到低的负跳变有效。
中断服务程序及例程
Interrupt表示函数是一个中断服务函数,
中断源 中断编号
外部中断0 0
定时器T0 1
外部中断1 2
定时器T1 3
串行口中断 4
定时器T2 5
Using中断服务程序中的工作寄存器组号0~3;
定时/计数器的的方式寄存器TMOD
D7 D6 D5 D4 D3 D2 D1 D0
CATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
T1方式字段 T0方式字段
工作方式M1,M0
M1 M0 功能说明
0 0 方式0,为13位的定时/计数器
0 1 方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器
1 0 方式2为自动重装初值的8位计数方式
1 1 方式3,T0在该方式时成为两个8位定时/计数器,T1在该方式时停止计数
方式0的工作原理: 计数个数与计数初值N=213-X
中断溢出为13位,当TR0=1时,GATE=0, 与 INT0引脚或门得到1,再与TR0与门,使开关1导通,
计数器开始,每运行一次,TH0和TL0都会自动加1,并把1转给TF0。
当连接T0引脚时,计数初值为a,晶振频率为12MHZ,定时时间为t=(213-a)us。
方式1的工作原理: 计数个数与计数初值 N=216-X
中断溢出为16位,当TR0=1时,GATE=0, 与 INT0引脚或门得到1,再与TR0与门,使开关1导通,
计数器开始,每运行一次,TH0和TL0都会自动加1,并把1转给TF0。
当连接T0引脚时,计数初值为a,晶振频率为12MHZ,定时时间为t=(216-a)us。
方式2的工作原理:计数个数与计数初值 X=28-X
中断溢出为16位,当TR0=1时,GATE=0, 与 INT0引脚或门得到1,再与TR0与门,使开关1导通,
计数器开始,每运行一次,TH0和TL0都会自动加1,并把1转给TF0。
当连接T0引脚时,计数初值为a,晶振频率为12MHZ,定时时间为t=(216-a)us。
工作方式2特别适合于用作较精确的脉冲信号发生器。
方式3的工作原理:
定时器T1处于方式3时相当于TR1=0,停止计数。当TR1=1时,每计数一次就把1赋给TF1 。
中断溢出为16位,当当TR0=1时,GATE=0, 与 INT0引脚或门得到1,再与TR0与门,使开关1导通,
计数器开始,每运行一次,TTL0都会自动加1,并把1转给TF0。
当连接T0引脚时,计数初值为a,晶振频率为12MHZ,定时时间为t=(216-a)us。
工作方式2特别适合于用作较精确的脉冲信号发生器。
溢出的时候进入中断,也就是从0xFFFF到0x0000的时候,标准51的晶振频率除以12就是计时器加1的频率,如果你用的是12MHz的晶体,那就是每隔1us你的计时器自动加1,所以最大能计时的时间范围就是从0x0000到0xFFFF,也就是从0到65535,65.5ms左右,你要每秒定时,或者你用频率很低的晶振,或者你要设置一个变量来计数,把定时器设置到50ms (TH0=(65536-50000)/32)一中断,然后在中断中给变量加1,等变量到20,就证明到1秒了,再执行你的程序。