找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7456|回复: 2
收起左侧

[求助]请教一个报警程序

[复制链接]
ID:9793 发表于 2009-3-17 19:36 | 显示全部楼层 |阅读模式
请教大家一个问题
在下列程序中:
#include <reg51.h>
#include <intrins.h>
sbit SPK = P3^3;
unsigned char frq;
void delayms(unsigned char ms);
main()
{
 TMOD = 0x01;
 frq = 0x00;
 TH0 = 0x00;
 TL0 = 0xff; 
 TR0 = 1;
 IE = 0x82; 
 while(1)
 {
  frq++;
  delayms(1);
 }
}
void timer0() interrupt 1 using 1
{
 TH0 = 0xfe;
 TL0 = frq;
 SPK = ~SPK; 
}
void delayms(unsigned char ms)   // 延时子程序
{      
 unsigned char i;
 while(ms--)
 {
 for(i = 0; i < 120; i++);
 }
}
调试时,中断服务程序段为什么会循环运行两次,随着frq的值增大会循环运行3、4次。
中断服务程序如下:
void timer0() interrupt 1 using 1
{
 TH0 = 0xfe;
 TL0 = frq;
 SPK = ~SPK; 
}

谢谢!
回复

使用道具 举报

ID:3271 发表于 2009-3-19 20:19 | 显示全部楼层
TH0=256-frq;
TL0=frq;

你那样就不符合规律了

如果frq=256的话,0xfe+0xff 定时器就益出了
回复

使用道具 举报

ID:9793 发表于 2009-3-20 00:27 | 显示全部楼层
0xfe+0xff 定时器就益出?  不明白。
定时器0工作在工作方式1状态下,为16位,其中高低各8为。
在第一次定时器产生溢出,执行中断程序后,TH0、TL0重装(分别为oxfe,frq),
即使frq=255,中断返回执行时间也达不到255个机器周期,从而不会产生定时器溢出。
但是在调试时, “TH0 = 0xfe;TL0 = frq;SPK = ~SPK; ”程序段会重复运行。
不明白。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表