找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4820|回复: 7
收起左侧

两个中断存在,为什么单片机上不是我想要的结果

[复制链接]
ID:72462 发表于 2015-1-24 23:16 | 显示全部楼层 |阅读模式
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned int
#define LED P2
void delay_ms(uint xms);
uchar num1;
uchar num2;
void main()
{
LED=0xFE;
TMOD=0X11;
TH0=0x3C;
TL0=0xB0;
TH1=0x3C;
TL1=0xB0;
EA=1;
ET0=1;
TR0=1;
while(1);
delay_ms(600);
ET1=1;
TR1=1;
while(1);
}
void T0_time() interrupt 1
{
TH0=0x3C;
TL0=0xB0;  //重装初值
if(num1==10)
{
  num1=0;
  LED=_crol_(LED,1);
}
num1++;
}
void T1_time() interrupt 3
{
TH0=0x3C;
TL0=0xB0;  //重装初值
if(num2==10)
{
  num2=0;
  LED=_cror_(LED,1);
}
num2++;
}
void delay_ms(uint xms)
{
uint i,j;
for(i=xms;i>0;i++)
{
  for(j=110;j>0;j--)
  {
   ;
  }
}
}
回复

使用道具 举报

ID:58502 发表于 2015-1-24 23:17 | 显示全部楼层
你想要的啥结果
回复

使用道具 举报

ID:58502 发表于 2015-1-24 23:21 | 显示全部楼层
我算是明白了
void main()
{
LED=0xFE;
TMOD=0X11;
TH0=0x3C;
TL0=0xB0;
TH1=0x3C;
TL1=0xB0;
EA=1;
ET0=1;
TR0=1;
while(1);//程序执行到这里就进入死循环了
后面的delay_ms(600);
ET1=1;
TR1=1;
while(1);根本不会执行,所以程序只会执行定时器0中断而不会执行定时器1中断
回复

使用道具 举报

ID:72462 发表于 2015-1-24 23:38 | 显示全部楼层
那怎么改呢?求解答,我想要的就是先是左循环,再是右循环,初学定时器,别见怪哈!求怎么改?
回复

使用道具 举报

ID:72462 发表于 2015-1-24 23:38 | 显示全部楼层
liaolinhui 发表于 2015-1-24 23:21
我算是明白了
void main()
{

那怎么改呢?求解答,我想要的就是先是左循环,再是右循环,初学定时器,别见怪哈!求怎么改?
回复

使用道具 举报

ID:72751 发表于 2015-1-25 10:57 | 显示全部楼层
即使先左循环再右循环的话,也不需要使用两个定时器啊,使用两个定时器的话也要分时启动啊,先左边循环完成后再启动右循环,然后开启定时中断1,建议使用一个定时中断,使用循环标志位来控制左右循环

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:72462 发表于 2015-1-25 13:26 | 显示全部楼层
wind02072107 发表于 2015-1-25 10:57
即使先左循环再右循环的话,也不需要使用两个定时器啊,使用两个定时器的话也要分时启动啊,先左边循环完成 ...

哦哦哦,谢谢
回复

使用道具 举报

ID:142111 发表于 2016-10-9 23:07 | 显示全部楼层
中断的执行建议你去看看原理
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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