找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1612|回复: 7
打印 上一主题 下一主题
收起左侧

关于51单片机中断的问题,求大神帮忙解决,谢谢

[复制链接]
跳转到指定楼层
楼主
ID:358564 发表于 2019-4-29 11:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
sbit LED=P3^7;
sbit LED1=P3^6;
unsigned char second;
unsigned char tcount ,t,a;
void delay(unsigned int c);
void time_int();
void main()
{
   int d;
   time_int();
   a=1;
   
   delay(100);


   for(d=0;d<3;d++)
   {
     LED1=0;
     LED=0;
     delay(100);
     LED1=1;
     LED=1;
     delay(100);
   }
  while(1);
}
void t0() interrupt 1 using 0
{


  int i;
  TH0=0Xd8;                //重装50ms初值,TH0=(65536-50000)/256
  TL0=0Xf0;                //              TL0=(65536-50000)/256
  if(a==1)
  {
  
   while(1)
  {
   for(i=0;i<3;i++)
   {
   LED=0;
   delay(1000);  
   LED=1;
   delay(1000);
   }
  a=0; break;
  }


   if(a==0)
{ while(1) //本段程序功能为显示
  {
  
         LED1=0;
         delay(1000);
     LED1=1;
         delay(1000);
         break;


}
}
        
}


}


void time_int()
{


        TMOD=0x01;        //定时器0工作在工作方式1下
        TH0=0Xd8;        //设置50ms定时时计数器的初值,TH0=(65536-50000)/256
        TL0=0Xf0;        //                            TL0=(65536-50000)/256
        EA=1;                //CPU开总中断
        ET0=1;                //T0开中断
        TR0=1;                //启动T0
          tcount=0;
          second=0;
        t=0;




}
void delay(unsigned int c)
{
unsigned int x,y;
for(x=c;x>0;x--)
   for(y=110;y>0;y--);
}










这是一个中断的实验
当检测到a==1的时候,进入中断,当执行完中断的函数后,为何不能
执行主函数的

for(d=0;d<3;d++)
   {
     LED1=0;
     LED=0;
     delay(100);
     LED1=1;
     LED=1;
     delay(100);
   }




我是菜鸟,求大神解答下,谢谢!!!


shiyan.rar

41.75 KB, 下载次数: 6

程序和仿真

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:522450 发表于 2019-4-29 11:53 | 只看该作者
再看看书吧

中断都没有初始化,没有再主函数打开中断

初值装的也不对,算不出来数值直接用人家的算式写上去吧,我算的分别是0x3c和0xb0

中断函数也是不对的

你编译都不可能通过的吧,怎么可能通过呢

好多错,T0也不是随意就可以携程t0吧,严格区别大小写的吧
回复

使用道具 举报

板凳
ID:45334 发表于 2019-4-29 12:48 | 只看该作者
执行了三次后,主程序停在了 while(1);这里了,只在中断里转悠
回复

使用道具 举报

地板
ID:493238 发表于 2019-4-29 13:18 | 只看该作者
你中断是什么问题
回复

使用道具 举报

5#
ID:518788 发表于 2019-4-29 14:19 | 只看该作者
程序没怎么看,但是这个函数的顺序有问题,你自己定义的函数必须写在主函数的上面,不然编译的时候也会报错的,至于你的程序中有没有问题没太在意,你改下顺序看下
回复

使用道具 举报

6#
ID:282850 发表于 2019-4-29 14:35 | 只看该作者
一看就是新手,程序问题很大。为什么进Time中断后会用while(1),而且是2个,逻辑混乱。进time中断是因为a==1吗,不是。是定时器计数溢出后触发中断。50ms中断要怎么观测,要想清楚。就算是进入中程序的while(1)(第3个!!!),又如何观测。
回复

使用道具 举报

7#
ID:358564 发表于 2019-4-30 09:23 | 只看该作者
zf@@zf 发表于 2019-4-29 13:18
你中断是什么问题

编译是通过了,就是没有没有执行

for(d=0;d<3;d++)
   {
     LED1=0;
     LED=0;
     delay(100);
     LED1=1;
     LED=1;
     delay(100);
   }


不知啥问题
回复

使用道具 举报

8#
ID:358564 发表于 2019-4-30 09:26 | 只看该作者
f556 发表于 2019-4-29 14:35
一看就是新手,程序问题很大。为什么进Time中断后会用while(1),而且是2个,逻辑混乱。进time中断是因为a= ...

我真的很菜,可以写个简单的我看下吗?   会感激你的  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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