用t1作为中断写的程序,但运行不了,why?

2019-03-24 19:53发布

想编写一个p1.1输出方波为100ms(t1做中断)的程序,用汇编我调试好了,但是c却没反应!不知道哪里出错了    #include<reg51.h>
 sbit p0=P1^0;
void main()
 {
    TMOD=0X10;
 TH1=0X3C;
 TL1=0XB0;
 EA=1;
 ET1=1;
 TR1=1;
  }
  void int_3() interrupt 3
  {          
    p0=0;
 TH1=0X3C;
 TL1=0XB0;
   }
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
leang521
1楼-- · 2019-03-25 04:14
p0=0;
真的,您太有才了,真的
changming789
2楼-- · 2019-03-25 06:29
 精彩回答 2  元偷偷看……
leang521
3楼-- · 2019-03-25 12:05

缺少死循环单片机也是在运行的,不过因为MAIN在C中事实上是个函数,因此在函数末尾会进行子程序返回,即RET指令,但是在调用main前并没有入栈,因此RET指令将系统返回至C:0000地址,因此一切又从头开始,定时器被从新赐值,导致定时器永远不会溢出,永远不会中断,仅此而已。

 

中断函数不断对P1^0赐值,即使发生中断,P1^0输出也永远是0

林发扬
4楼-- · 2019-03-25 17:57
你好!我把它改成这样子,但是好像却是没有回到主程序
#include<reg51.h>
sbit p0=P1^0;
void main()
{
    TMOD=0X10;
TH1=0X3C;
TL1=0XB0;
EA=1;
ET1=1;
TR1=1;
while(!TF1)
;
  }
  void int_3() interrupt 3
  {         
    p0=0;
TH1=0X3C;
TL1=0XB0;
   }
该怎么样才可以有那样的效果?
谢谢!
wshwan
5楼-- · 2019-03-25 19:58
如果是想用中断,MAIN中最后进入死循环(while(1);)就可以了。中断中p0=0?那不是始终输出0了吗?不停的取反或者与‘1‘就可以了。
林发扬
6楼-- · 2019-03-26 00:30
只是运行一次,在中断那里停住了,怎么办?

一周热门 更多>