| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 674 人关注过本帖
标题:下面是单片机的一部分程序,求大侠们告诉一下,大概的意思是什么
只看楼主 加入收藏
攸诺
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-2-19
结帖率:50%
收藏
已结贴  问题点数:12 回复次数:4 
下面是单片机的一部分程序,求大侠们告诉一下,大概的意思是什么
void delay(uint c)
{
   uint i,j;
    for(i=0;i<c;i++)
      for(j=0;j<100;j++);   
}
 //interrupt 1
void t0(void) interrupt 0 using 1
{
  delay(2);
   if(INT0==0)
    {
      r++;
      if(r==2)
       {
          r=0;
       }
      r%=2;
      if(r==0)
       {
        P0=0xeb;
        P1=0x00;
        P2=0xff;
       }while(1)
        {
           if(INT0==0|INT1==0|T0==0)
          {
          delay(2);
          if(INT0==0|INT1==0|T0==0)
              break;
          }
        };      
    }
}
想问一下,这个程序是的意思大体上的什么的,是怎么运行的,谢谢
搜索更多相关主题的帖子: void 单片机 
2012-03-17 20:02
chenliangjs
Rank: 2
等 级:论坛游民
帖 子:34
专家分:89
注 册:2012-1-14
收藏
得分:6 
上面的那个delay是个延时。。。下面的那个函数是个中断。。。不过。。。你能不能把程序贴全啊。。。
2012-03-17 20:09
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:6 
1. delay就是用一个固定的loops_per_calibration = c * 100来算一个软件延时,具体依赖不同的SYS_CLK,c值不同
2. t0是一个timer中断
P0=0xeb;
P1=0x00;
P2=0xff;
这几个GPIO口我也不知道干吗用的,为什么要这么配,看datasheet.
3.  if(INT0==0|INT1==0|T0==0)
判断中断标志位
延时2s再判断,这什么逻辑?
4. 运行么,delay就是看控制器的时序,需要的地方delay一下
中断么,timer一般是溢出中断,高电平有效,相应管脚被拉高,通知CPU中断到了,请求处理中断,没看到开中断的代码么...
51好象是电平触发的中断,也没看到关中断的代码

技术问题,请不要以短消息方式提问
2012-03-17 20:17
攸诺
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-2-19
收藏
得分:0 
回复 2楼 chenliangjs
#include <reg51.h>
#include <stdio.h>
#define uchar     unsigned char
#define uint      unsigned int

uchar h;      
uint r=0;
uint s;
uchar code  dis[]={                           
    0Xc0,/*0*/
    0Xf9,/*1*/
    0Xa4,/*2*/
    0Xb0,/*3*/
    0X99,/*4*/
    0X92,/*5*/
    0X82,/*6*/
    0Xf8,/*7*/
    0X80,/*8*/
    0X90,/*9*/
    0Xff,/*NULL*/
};
void delay(uint c)
{
   uint i,j;
    for(i=0;i<c;i++)
      for(j=0;j<100;j++);   
}
 //interrupt 1
void t0(void) interrupt 0 using 1
{
  delay(2);
   if(INT0==0)
    {
      r++;
      if(r==2)
       {
          r=0;
       }
      r%=2;
      if(r==0)
       {
        P0=0xeb;
        P1=0x00;
        P2=0xff;
       }while(1)
        {
           if(INT0==0|INT1==0|T0==0)
          {
          delay(2);
          if(INT0==0|INT1==0|T0==0)
              break;
          }
        };      
    }
}
 //interrupt 2
void t1(void) interrupt 2 using 1
{
  delay(2);
   if(INT1==0)
    {
      r++;
      if(r==2)
       {
          r=0;
       }
      r%=2;
      if(r==0)
       {
        P0=0xdd;
        P1=0x00;
        P2=0xff;
       }while(1)
        {
           if(INT1==0|INT0==0|T0==0)
          {
           delay(2);
           if(INT1==0|INT0==0|T0==0)
              break;
          }
        };      
    }
}

//interrupt 3
void t2(void) interrupt 1 using 1
{
  TH0=0xff;
  TL0=0xff;
    delay(2);
     if(T0==0)
       {
        P0=0xdb;
        P1=0x00;
        P2=0xff;
       }while(1)
        {
           if(INT0==0|INT1==0)
          {     
            delay(2);
            if(INT0==0|INT1==0)
              break;
          }
        };
}
void main(void)
{
  TMOD=0x06;
  TH0=0xff;
  TL0=0xff;
  TR0=1;
  EA=1;
  EX0=1;
  EX1=1;
  ET0=1;
 while(1)
{
    P0=0xeb;
     for(h=28;h>0;h--)
     {
       for(s=248;s>0;s--)
       {
        P1=0x00;
        P2=0xff;
        P1=0x01;
        P2=dis[h/10];
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x02;
        P2=dis[h%10];
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x04;
        P2=dis[(h+2)/10];
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x08;
        P2=dis[(h+2)%10];
         delay(1);
       }
     }
    delay(248);
    P0=0xf3;
     for(h=3;h>0;h--)
     {
        delay(392);
         P0=0xf3;
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0xaa;
        P2=dis[(h-1)%10];
         delay(600);
        P0=0xfb;
     }
    delay(248);     
    P0=0xdd;
     for(h=38;h>0;h--)
     {
       for(s=248;s>0;s--)
       {        
        P1=0x00;
        P2=0xff;
        P1=0x01;
        P2=dis[(h+2)/10];
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x02;
        P2=dis[(h+2)%10];
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x04;
        P2=dis[h/10];
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0x08;
        P2=dis[h%10];
         delay(1);
       }
     }
    delay(248);
    P0=0xde;
     for(h=3;h>0;h--)
     {
        delay(392);
        P0=0xde;
         delay(1);
        P1=0x00;
        P2=0xff;
        P1=0xaa;
        P2=dis[(h-1)%10];
        delay(600);
        P0=0xdf;      
     }
     delay(248);     
   }  
}
这个就是全贴,麻烦看一下哈,谢谢哦
2012-03-19 15:02
攸诺
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-2-19
收藏
得分:0 
回复 3楼 zaixuexi
你好,刚刚有在回复2楼的时候,有写全部的代码了,麻烦看一下,谢谢哦
2012-03-19 15:05
快速回复:下面是单片机的一部分程序,求大侠们告诉一下,大概的意思是什么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054098 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved