打印

高手看一下这个程序有没有什么问题

[复制链接]
1686|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
善解人意|  楼主 | 2009-8-8 13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚刚入门学习单片机,请高手们多提一些意见,小弟不胜感激.
#include<reg52.h>  //头文件
void  isr_int (void ); //中断服务函数声明
unsigned char scan_num;
void delay(unsigned int ms)// 延时函数
{
   unsigned char k;
   while(ms--)
   {
    for(k=0;k<100;k++);
   }
}
void main (void ) //主函数
{
   unsigned char i;
   P1=0xff;
   IT0=0;   //设置INT0低电平触发方式
   EA=1;   //开CPU中断
   EX0=1;   //开EX0中断
   while (1)
   {
scan_num = 0xfe;
     for(i=0;i<7;i++)
     {
       P1 = scan_num;
    scan_num = (scan_num<<1)|0x01;
       delay(1000);
  }
     for(i=0;i<7;i++)
     {
       P1 = scan_num;
    scan_num = (scan_num>>1)|0x80;
       delay(1000);
  }
   }
}
void isr_int (void) interrupt 0  //中断服务函数
  {
    unsigned int f;
    EX0=0;
for(f=0;f<50000;f++);
    {
     delay(1000);
    }
   EX0=1;
   }

相关帖子

沙发
dld2| | 2009-8-8 13:07 | 只看该作者
看不懂。

使用特权

评论回复
板凳
chen3bing| | 2009-8-8 13:27 | 只看该作者
完成什么功能?

使用特权

评论回复
地板
贺信| | 2009-8-8 17:48 | 只看该作者
俺也初学,,板凳听课

使用特权

评论回复
5
冷漠| | 2009-8-8 18:13 | 只看该作者
真逗。外部一个触发就让这个流水灯中断停止50,000秒!5万秒钟?
另外,中断函数是不用说明的。以下语句多余。
void  isr_int (void ); //中断服务函数声明

其它小问题,你这个流水灯转起来了吗?

使用特权

评论回复
6
dudongdao| | 2009-8-8 18:49 | 只看该作者
我知道了,他是想有中断之后流水灯就停止~~  可以的~~ 没问题~~

使用特权

评论回复
7
冷漠| | 2009-8-8 19:26 | 只看该作者

还有问题:

本帖最后由 冷漠 于 2009-8-8 19:28 编辑

如果在中断中调用了  delay(1000);就要考虑一下了。
主函数中也有  delay(1000);那么当主函数正在调用  delay(1000);时,中断发生,递归调用  delay(1000);可重调用reentrant发生了。

没有哪个程序员愿意自己的程序出现可重调用函数。很糟糕的情况。看书上写的吧。

使用特权

评论回复
8
红金龙吸味| | 2009-8-8 22:35 | 只看该作者
看见delay(1000)就咔嚓

使用特权

评论回复
9
善解人意|  楼主 | 2009-8-10 09:44 | 只看该作者
流水灯是跑起了,但是和我开始想的不一样,是中断之后流小灯就停止,现在是中断这后就延时5S,高手们可以说一下,是不是要中断之后要进入堆栈,下一次中断将恢复.

使用特权

评论回复
10
winhi| | 2009-8-10 10:19 | 只看该作者
要先有思想,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

62

主题

324

帖子

0

粉丝