中易网

单片机中断程序不运行 求解 不中断 问题在那里????

答案:3  悬赏:20  
解决时间 2021-02-18 09:51
#include<reg51.h>
#define uchar unsigned char
uchar a;
void dd() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;

}
void main()
{
P1=0;

TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
if(a==200)
{
P1=0xff;
a=0;
}
最佳答案
程序跑飞了,你把if()放在while(1)这个空的无限循环里面就可以了。单片机在运行的过程中要不停的执行程序,你写的这个程序开启中断之后,定时器刚开始计时、还没有来得急申请中断就就执行完了。他没有事干,就又从头开始。如此反复,永远不可能到中断。
#include<reg51.h>
#define uchar unsigned char
uchar a;
void dd() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;

}
void main()
{
P1=0;

TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(a==10)
{
P1=0xff;
// a=0;
}
if(a==20){P1=0x00;a=0;}
}
}
帮你加了个while(1)后可以中断,a=200时间太长了,观察不方便,为了让你方便看出来。就帮里在while里面改了几句,你用的话改回来就行了。
至于上面为什么跑飞了,你如果想深入可以再问我。
全部回答
一般而言,计时器的值是一个字,也就是双字节,最大值是65535. 计数器在每一个周期增加1.这个周期和芯片的晶振有关,你查一下单片机的及晶振资料就知道是多少了。假设一个周期是2微妙。那么每隔2微妙计数器增加1.如果你设置计数器的初始值是55535,那么第一个周期过后,也就是2微妙后计数器的值变为55536.当过10000个周期后,计数器的值从55535增加到65535,再增加一个数,计数器就会产生中断。这时时间过了10000*2微秒,也就是20毫秒。那么你就产生了一个精确的时间20毫秒。循环50次就是20微秒*50=1秒。
你这个语句中少了while所以程序一开始执行的时候就执行了一遍就结束了。 以后写的时候最好要加while,如果什么都不执行也要加 while(1){//这里是你想要执行的语句} 这样程序才会一直检测执行
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我有一张国航知音卡,想看看累积里程,没有密码
怎么区分直流电的正负极
宁波市软件产业园D座在哪里啊,我有事要去这
最好看的商战电视剧有哪些
亚子精品童装超市地址在哪,我要去那里办事
和white中的i发音相同的单词有哪些
湖北武汉1040阳光工程什么人可以做成功
谁有《轩辕剑之天之痕》的电视剧百度云盘资源
8只鸽子要飞回3个鸽舍,至少有几只鸽子要飞进
什么样的股票做T+0最合适哪个最快?
潜水呼吸器一级头是什么意思
产后50天很容易出汗,是气虚的表现吗
惠州经济职业技术学院 2011
问:我要去马来西亚,在网上办的电子签证,需
怎么把pdf转成excel,试了好多种,都没效果,
推荐资讯
请问宜春学院艺术类宿舍是几人间?
西亚斯卫浴在哪里啊,我有事要去这个地方
红黄蓝济南阳光100亲子园我想知道这个在什么
汽车电瓶可以用来打鱼吗?是12V45A的
海贼王最新一期漫画里,为什么鸟笼停止了一段
用塑料袋装的虫子 不停的往女的身上倒,女的
申通快递(落云路营业部)地址在什么地方,想过
南小东淖我想知道这个在什么地方
李易峰是不是让人喜爱的歌手,他是不是歌手呢
匡家桥地址有知道的么?有点事想过去
电脑开机就一个光标在跳开不了机
新亮广告怎么去啊,有知道地址的么
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?