㈠ 51单片机中断定时
30秒这个时间比较长,不知道你的晶振选用的什么频率。一般来说16位方式也很难做到30秒,所以需要借助一个全局的counter变量来辅助提升定时器位数。
㈡ 帮我解释一下单片机定时中断程序,每一条语句的详细详细含义。比如TMOD=0x11中的11是什么意思
TMOD是一个8位的寄存器,不能位寻址,所以必须整体写入用来控制定时器模式的,低四位用来控制定时器T0,高四位控制T1。对于每个定时器的四位寄存器,低两位用来定义定时器的工作方式,方式一方式二等;第三位是功能选择位,定义计时器为定时或计数;第四位为门控位,用来决定INTx引脚输入电平的影响,可以理解为是否引入外部控制来控制定时器的启停动作。
TMOD=0x11,转为二进制就是00010001,即T0和T1的最低两位均为01,工作方式为方式1--16位定时器或计数器。第三位为0,设定T0,T1为定时器,对内部脉冲进行计数,用来折算时间。第四位也是0,说明不参考INTx引脚电平,由内部寄存器来控制定时器的启停。
TH0和TL0,是T0的初值,分别写入计时器的高八位和低八位,定时器从这个值开始进行加1计算,直到16位寄存器计满溢出则输出中断。TH1和TL1对应T1。
TR是定时器启动位,TR0和TR1分别对应T0和T1,TR=1时定时器启动,TR=0时停止。这里要注意,前面说的门控位,如果门控位为1,则定时器的启动除TR=1以外,还要求INTx引脚输入1。
ET0可以理解为T0的中断开关,只有ET0=1的时候,T0才可能输出中断。
EA则是中断的总开关,EA=0的时候,所有的中断都无效。
写的很繁琐,要是看不懂可以继续问我。
㈢ 单片机定时器1的中断函数
void T0_init(void)
{
TMOD=0X10; //盯镇定时器1
ET1=0; //打开定时租则桥器1中断
EA=1; //打开总中断
TR1=0; //启动定时器1
TH1=0xxx; //算吧
TL1=0xxx;
}
void t0(void) interrupt 3
{
TF1=0;
time_count++;
TH1=0xxx; /弊猛/重装
TL1=0xxx;
}
㈣ 51单片机定时中断C语言的写法步骤,可追加分数
程序说明:51单片机定时器0工作于方式一,定时50ms中断一次
晶振为12M
#include
void
main
{
TOMD
=
0X01;
//配置定时器0工作于方式一
TH1
=
(65536-50000)/256;
//高八位装入初值
TL1
=
(65536-50000)%256;
//低八位装入初值
ET0
=
1;
//开定时器0中断
EA
=
1;
//开总中断
TR0
=
1;
//启动定时器0
while(1)
{
;
}
}
void
Timer0_int()
interrupt
1
{
//重新装初值
TH1
=
(65536-50000)/256;
//高八位装入初值
TL1
=
(65536-50000)%256;
//低八位装入初值
}
/***************************************************************************************************************/
上面是比较好理解的。如果实在要求简洁的话,看下面的,跟上面功能一样
#include
void
main
{
TOMD
=
0X01;
//配置定时器0工作于方式一
TH1
=
0x3c;
//高八位装入初值
TL1
=
0xb0;
//低八位装入初值
IE
=
0x82;//开总中断并开定时器0中断
TR0
=
1;
//启动定时器0
while(1)
{
;
}
}
void
Timer0_int()
interrupt
1
{
//重新装初值
TH1
=
0x3c;
//高八位装入初值
TL1
=
0xb0;
//低八位装入初值}
㈤ 单片机定时器中断程序,C语言程序设计
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar keyval;
uchar led1=0xfe,led2=0x55,led3=0x0f;
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
switch(keyval)
{
case 1:
P0=led1;
led1=_crol_(led1,1)
break;
case 2:
P0=led2;
led2=~led2;
break;
case 3:
P0=led3;
led3=~led3;
break;
default:break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key==0)
{
while(key==0);
keyval++;
keyval%=4;
}
}
}