#include "reg51h"
sbit a1=P3^2;
int Xn,SUM;
void time0_initial() //定时
{
TMOD=0x01;
TH0=(65535-5000)/256; //定时器0定时5ms
TL0=(65535-5000)%256;
EA=1;
}
void interrupt_0_initial()
{
IT0=0;
EX0=1;
EA=1;
}
void main(void)
{
interrupt_0_initial();
time0_initial() ;
while(1);
}
void time0() interrupt 1
{
TH0=(65535-5000)/256; //定时器0定时5ms
TL0=(65535-5000)%256;
Xn++;
}
void interrupt_0() interrupt 0
{
do
{
ET0=1;
TR0=1;
}while(a1==0)
ET0=0;
TR0=0;
SUM=Xn;
Xn=0;
}
51单片机有5个中断源,其中两个定时器均为中断源,一个是T0,一个是T1
定时器中断是当定时或计数满时向CPU提出中断请求,T0的中断服务子程序入口地址是000BHT0中断就是定时器中断,也就是Timer0,分内部外部,内部用单片机本身的晶振频率,外部给单片机P34一个脉冲信号作为T0的定时器的工作频率,单片机内部有两个定时器中断T0和T1
5个中断源,分别是T0,T1,外部中断INT0,和INT1,还有一个就是串口中断
定时器中断工作原理是分别给TH0,TL0(或者TH1,TL1)一个值,然后取决于你在选择定时器中断方式上是16位还是8位,还是自动从新赋值的工作方式,然后每经过一个机器周期,定时器在你所给定的值得基础上加1,一直加到0xFFFF,然后产生溢出,去执行你所编写的程序,如果你设定的不是自动重装初值的工作方式在定时器子程序最后或者开始,手动附上初值
定时器工作方式的优点我感觉是提高CPU的工作效率,不像外部中断一直扫描终端程序,判断你是否给中断信号,定时器就相反不会扫描,只等待加到满为止采取执行
设置中进行更改。定时器是嵌入式系统的心脏,一点也不为过。定时器,不仅使用在rtos领域,在任务的运行、等待、延时、资源的获取方面都有广泛的影响。
1、首先打开设置。
2、然后点击更改时间。
3、、最后点击更改即可。
下列程序,已经经过实验,可以满足题目要求
ORG 0000H
SJMP MAIN
ORG 000BH
SJMP T0_INT
MAIN:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #(65536-50000) / 256 ;定时50ms@12MHz
MOV TL0, #(65536-50000) MOD 256 ;
SETB TR0 ;启动T0
MOV IE, #82H ;开中断
;第一秒钟L0,L2亮,第二秒钟L1,L3亮,第三秒L4,L6亮,第四秒钟L5,L7亮,
;第五秒L0,L2,L4,L6亮,第六秒钟,L1,L3,L5,L7亮,第七秒钟八个二极管全亮,第八秒钟全灭
MOV 30H, #11111010B
MOV 31H, #11110101B
MOV 32H, #10101111B
MOV 33H, #01011111B
MOV 34H, #10101010B
MOV 35H, #01010101B
MOV 36H, #00000000B
MOV 37H, #11111111B
MOV R0, #30H
MOV R7, #20
M_LOOP:
SJMP M_LOOP ;无限循环
T0_INT:
MOV TL0, #(65536-50000) MOD 256 ;
MOV TH0, #(65536-50000) / 256 ;定时50ms@12MHz
DJNZ R7, T0_END
MOV R7, #20
MOV P1, @R0
INC R0
CJNE R0, #38H, T0_END
MOV R0, #30H
T0_END:
RETI
END ;完
以上就是关于外部中断和定时器中断在一起的程序怎么写全部的内容,包括:外部中断和定时器中断在一起的程序怎么写、单片机的T0中断是什么、嵌入式系统定时器中断程序时间怎么改等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)