proteus仿真计时器中断出现问题,无法实现中断。

Mark0904 2010-05-15 05:04:53

这是我的电路图。。
下面是我的代码
#include<reg52.h>
#include<intrins.h>
#define UINT unsigned int

UINT cnt = 0;
void main()
{
TMOD = 0X01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
EA = 1;
ET0 = 1;
TR0 = 1;
P1 = 0x0f;
if(cnt == 2)
{
cnt = 0;
P1 = ~P1;
}

}

void timer0() interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
cnt++;
}

我的芯片是AT89C52
运行后一直是前4个led灯亮,无法实现计时中断。。请问怎么回事呢。是不是电路图出现问题了。请大家帮帮忙啊。。
...全文
950 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mark0904 2010-05-15
  • 打赏
  • 举报
回复

Peasant_Lee
谢谢你了。。
就是这里出现问题了。。
唉呀。真晕。。竟然忘了加个大循环。。
谢谢。。
Mark0904 2010-05-15
  • 打赏
  • 举报
回复
http://hiphotos.baidu.com/e3399/pic/item/475f84da53fed50f32fa1c37.jpg
原理图在这里。。怎么看不到呢?
Peasant_Lee 2010-05-15
  • 打赏
  • 举报
回复
首先,原理图看不到。你的代码有问题。因为你的代码的判断没有在循环中判断。你开启了中断之后,应该要在循环中判断计数值 cnt 是否等于 2。
修改如何:

。。。。
。。。。
TR0 = 1;
P1 = 0x0f;
while(1)
{
if(cnt == 2)
{
cnt = 0;
P1 = ~P1;
}
}

这样,程序经常在while(1)中跑,才会检测cnt的值。还有,顺便讲讲,为了以后的代码扩大后,减少漏洞,你判断cnt的值,不应该是等于,而是大于或者等于。if(cnt >= 2)
Mark0904 2010-05-15
  • 打赏
  • 举报
回复
我刚学单片机。近来在看郭天祥的视频。。
想自己画电路图来尝试一下。就实现不了中断了。。
如果是我的电路图出现问题了,那应该怎么改呢。我问的问题很菜。请大家帮帮我啊。。

27,509

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧