标题:
程序这样写是单片机定时器不工作还是写得有问题?
[打印本页]
作者:
木示
时间:
2024-4-24 22:02
标题:
程序这样写是单片机定时器不工作还是写得有问题?
用STC8G1K08A单片机的定时器0 写了定时亮灯的程序,但发觉不产生定时作用。以下是定时器0的程序。请各位大佬指导一下。
bit FLAG = 0; //计数完成标志位
sbit led=P5^4;
uint count; //计数变量1
uint count2; //计数变量2
uint count3; //计数变量3
/*****************定时器0函数*******************/
void Timer0_Init(void) //50毫秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xB0; //设置定时初始值
TH0 = 0x3C; //设置定时初始值
TF0 = 0; //清除TF0标志
ET0 = 1;
TR0 = 1; //定时器0开始计时
}
void led0()
{
led=0; //灯亮
count = 0;
count2 = 1;
count3 = 11; //定时1分钟
TR0 = 1; //启动定时器0
}
void led1()
{
led=0;//灯亮
count = 0;
count2 = 30; //
count3 = 11; //定时0.5小时
TR0 = 1; //启动定时器0
}
void led2()
{
led=0;//灯亮
count = 0;
count2 = 0; //
count3 = 11; //定时1小时
TR0 = 1; //启动定时器0
}
void led3()
{
led=0;//灯亮
EA=0;//关闭外部中断,
count = 0;
count2 = 0; //
count3 = 8; //定时4小时
TR0 = 1; //启动定时器
}
/********************** Timer0中断函数************************/
void Timer0_Isr()interrupt 1 using 1
{
TL0 = 0xB0;
TH0 = 0x3C; //50MS
count++;
if(count==1200) //60S 1200
{
count=0;
count2++;
if(count2==60) //60分钟 60
{
count2=0;
count3++;
if(count3==12)// 12小时
{
count3=0;
led=1;
EA=1;
FLAG = 1; //计数时间到标志 可重新检测外围的是否有中断
}
}
}
}
复制代码
作者:
cy009
时间:
2024-4-25 00:25
"EA=1"放进中断函数里不对呵
作者:
xiaobendan001
时间:
2024-4-25 07:23
EA要先打开,否则任何中断都进不去吧
作者:
heyanrog
时间:
2024-4-25 09:20
单片机一开机上电要打开中断,后面的中断才能响应,
void Timer0_Isr()interrupt 1 using 1
{EA=0;
.....
.....
EA=1;
}
.....
EA=1;
void main()
{
while(1){};
}
或者
void main()
{EA=1;
while(1){};
}
作者:
lkc8210
时间:
2024-4-25 10:21
main()函数呢?被吞了?
作者:
十梦九你
时间:
2024-7-2 14:17
EA ET0没开怎么进中断
作者:
xiaobendan001
时间:
2024-7-2 14:37
heyanrog 发表于 2024-4-25 09:20
单片机一开机上电要打开中断,后面的中断才能响应,
void Timer0_Isr()interrupt 1 using 1
{EA=0;
EA=1;
void main()
{
while(1){};
}
这样也行?
作者:
zh_junwei
时间:
2024-7-2 15:16
在主程序里面打开中断总开关,不然是不会产生中断的
作者:
xiangran
时间:
2024-7-2 15:36
EA要先打开,否则任何中断都进不去吧
作者:
yaosongjin
时间:
2024-7-2 16:07
主函数都不写?编译能通过吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1