找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1545|回复: 5
收起左侧

LED-中断

[复制链接]
ID:116147 发表于 2016-4-23 16:09 | 显示全部楼层 |阅读模式
初学51单片机,团队安排我写一个程序:用按键控制led,但是用中断,去除消抖过程。我用外部中断实现了led的亮灭。我想用定时器中断代替延时函数。结果出错了。求教大神,前辈,指点一下。程序如下


#include<reg52.h>
#define LED P1
sbit KEY=P3^2;
#define uchar unsigned char //定义unsigned char 为 uchar
uchar cCounter; //记录外部中断次数的变量
uchar i;
int j;
uchar code Dis_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*******************中断初始化*********************/
void Open_Out0()
{
EA=1;   //打开总中断
EX0=1;   //打开外部中断0中断
IT0=0;   //电平触发
PT0=1;   //定时器中断高优先级
PX0=0;   //外部中断低优先级
}
/**********延时函数*********/
/*void Delay10ms(unsigned int c)   
{
    unsigned char a, b;
    for (;c>0;c--)
{
  for (b=38;b>0;b--)
  {
   for (a=130;a>0;a--);
  }      
}      
}*/
/********************定时器中断0中断***********************/
void Timer() interrupt 0
{
j=0;
if(j<1000)     //计时作用,代替延时函数
{
  j++;
  TH0=(65536-50000)/256;   //再装值
  TL0=(65536-50000)%256;
}
}
/*****************外部中断0中断*******************/
void Out_interrupt() interrupt 0
{
EX0=0;     //关闭外部中断
TMOD|= 0x00;   //定时器方式0
ET0=1;     //定时器中断打开
TR0=1;     //定时器开关打开
TH0=(65536-50000)/256;   //初装值
TL0=(65536-50000)%256;
i=cCounter%2;
cCounter++;
//Delay10ms(20);
switch(i)
{
case 0: LED=0x00; break;
case 1: LED=0xff; break;
}
EA=1;
}
/********************主函数*******************/
void main()
{
cCounter=2;
Open_Out0();
LED=0xff;
while(1)
{
}
}

如果大神单独指教,我学会了发红包表示感谢
回复

使用道具 举报

ID:113376 发表于 2016-4-23 19:41 | 显示全部楼层
本帖最后由 cyy998 于 2016-4-23 21:43 编辑

定时器中应该是interrupt 1 和interrupt 3 外部中断应该是interrupt 0和interrupt 2吧,我也是初学看教程和芯片资料都是这么写的。
这是我一个程序中用到的:
  1. void timer_TR0() interrupt 1
  2. {
  3.         TH0=(65536-50000)/256;
  4.         TL0=(65536-50000)%256;
  5.         time++;
  6. }
复制代码



评分

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

查看全部评分

回复

使用道具 举报

ID:7485 发表于 2016-4-23 20:19 | 显示全部楼层
interrupt 2和interrupt 4不是吧?
回复

使用道具 举报

ID:116147 发表于 2016-4-23 20:46 | 显示全部楼层
ahshmj 发表于 2016-4-23 20:19
interrupt 2和interrupt 4不是吧?

你好,我重新翻了一下书本,
外部中断0,1的中断编号分别是0,2。
定时器中断0,1的中断编号分别是1,3。
串行口中断的中断编号是4。
回复

使用道具 举报

ID:116147 发表于 2016-4-23 20:47 | 显示全部楼层
cyy998 发表于 2016-4-23 19:41
定时器中应该是interrupt 1 和interrupt 3 外部中断应该是interrupt 2和interrupt 4吧,我也是初学看教程和 ...

谢谢,你的提醒我发现了我的一个错误
回复

使用道具 举报

ID:113376 发表于 2016-4-23 21:44 | 显示全部楼层
ahshmj 发表于 2016-4-23 20:19
interrupt 2和interrupt 4不是吧?

记错了不好意思,已经改过来了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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