找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3334|回复: 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--)
  {
   ;
  }
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 | 只看该作者
那怎么改呢?求解答,我想要的就是先是左循环,再是右循环,初学定时器,别见怪哈!求怎么改?
回复

使用道具 举报

5#
ID:72462 发表于 2015-1-24 23:38 | 只看该作者
liaolinhui 发表于 2015-1-24 23:21
我算是明白了
void main()
{

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

使用道具 举报

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

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:72462 发表于 2015-1-25 13:26 | 只看该作者
wind02072107 发表于 2015-1-25 10:57
即使先左循环再右循环的话,也不需要使用两个定时器啊,使用两个定时器的话也要分时启动啊,先左边循环完成 ...

哦哦哦,谢谢
回复

使用道具 举报

8#
ID:142111 发表于 2016-10-9 23:07 | 只看该作者
中断的执行建议你去看看原理
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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