| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 370 人关注过本帖
标题:求助一个关于51单片机的C语言程序
只看楼主 加入收藏
whilewater
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2012-12-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
求助一个关于51单片机的C语言程序
求助一个程序
程序要求是,一个用AT89x51单片机控制利用霍尔传感器测电机转速,然后将数据发送给
数码管。大体程序已经完成,但是,一直用KEIL调试不成,烧到单片机里无法操作。可能其中有些许错误,希望有这方面的大神对小弟小小的指导一下。

 #include"at89x51.h"
 #define uint  unsigned int
 #define uchar unsigned char
  uchar code duanma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管
  uchar code zifu[9]={"zhuansu= "}; //转速字符空格
  uchar code  enter[] = {"/n"};  //换行字符

  uint fan100;//转速值
  uchar fan[3];//存转速的百十个位
  uint  count;
  uint  T0count;//进入T0的中断次数
  void delay_ms(uint z)
   {
    uint x,y;             //延时程序
    for(x=z;x>0;x--)
      for(y=240;y>0;y--);
         }
  void init_es (void)//初始化串口
  {
    SCON=0x40;       //方式1
    TH1 = 0xfd;      //晶振11.059     波特率9600
    TL1 = 0xfd;
    TMOD= 0X20;
    TR1 =1;
    }

   void init_T0(void)         //初始化定时器
    {
        TMOD =    0x21;
        TH0  =  0X3c;
        TL0  =  0Xb0;
      }

    void  display_LED(void)  //数码管动态显示
    {
     P0=0x01;
     P1=duanma[fan[0]];
     delay_ms(100);
     P0= 0x20;
     P1=duanma[fan[1]];
     delay_ms(100);
     P0=0x40;
     P1=duanma[fan[2]];
     delay_ms(100);
        }

    void sent_es(void)   //串口发送函数
    {
      uchar ii;
     for(ii=0;ii<9;ii++)
     { SBUF =zifu[ii];
        while(RI==0);
         RI=0;
       }
     for(ii=0;ii<3;ii++)       //再发送百位
     { SBUF =fan[ii]+0x30;
         while(RI==0);
          RI=0;
       }                      //等待发送完毕

     for(ii=0;ii<2;ii++)       //再发送十位
      { SBUF =fan[ii]+0x30;
         while(RI==0);
          RI=0;
       }                      //等待发送完毕

     for(ii=0;ii<1;ii++)       //再发送个位
      { SBUF =fan[ii]+0x30;
         while(RI==0);
          RI=0;
       }                      //等待发送完毕

     for(ii=0;ii<2;ii++)     //发送换行
      { SBUF =enter[ii];
         while(RI==0);
          RI=0;
        }                      //等待发送完毕
       }

     /* 主函数*/
       void  main()
     { count =0;                          //初始化
       init_es ();
       init_T0();
       T0count=0;
       IP= 2 ;                          //INT0的优先级最低
       IE = 0X83;                          //开中断
       IT0=1;
       while(1)
       { display_LED();                  // 无限循坏数码管 等待中断发生
          }
      }
        /*串口*/
   void int0interrupt(void)     interrupt 0
   {
     count++;
   }
   void T0interrupt(void)     interrupt 1
   {
      TH0  = 0x3c ;
      TL0  = 0xb0 ;
      T0count++;
      if(T0count>20 )
      { T0count=0;
       fan100=count;
       count=0;
       fan[0] =  fan100/100;
       fan[1] = (fan100%100)/10;
       fan[2] =  fan100%10;
       sent_es();
       }
      }
搜索更多相关主题的帖子: 单片机 include C语言 
2012-12-05 17:53
whilewater
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2012-12-5
收藏
得分:0 
在线等啊
2012-12-05 17:56
zhu1991
Rank: 2
等 级:论坛游民
帖 子:17
专家分:79
注 册:2012-11-29
收藏
得分:0 
1:你使用的中断是电平触发模式的
2:你的计数的中断的优先级最好比T0的中断优先级要高一点
3:程序没有什么错误,没有看到你出现的情况,不好判定到底哪里出问题
2012-12-05 18:15
whilewater
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2012-12-5
收藏
得分:0 
回复 3楼 zhu1991
我用试验箱模拟得到的结果,将时钟调快之后,一直是8 8 8,从左到右如流水灯样闪烁,在KEIL中模拟的时候中断无法打开。请问您有什么解决办法么?请指教
2012-12-05 18:21
suijishu
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:66
专家分:144
注 册:2012-12-1
收藏
得分:0 
以下是引用zhu1991在2012-12-5 18:15:58的发言:

1:你使用的中断是电平触发模式的
2:你的计数的中断的优先级最好比T0的中断优先级要高一点
3:程序没有什么错误,没有看到你出现的情况,不好判定到底哪里出问题
level trigger是怎么看出来的啊,请教大牛!!!
2012-12-05 18:52
whilewater
Rank: 1
等 级:新手上路
帖 子:8
专家分:7
注 册:2012-12-5
收藏
得分:0 
有大人来么
2012-12-05 21:03
zhu1991
Rank: 2
等 级:论坛游民
帖 子:17
专家分:79
注 册:2012-11-29
收藏
得分:0 
回复 5楼 suijishu
TCON中设置外部中断触发模式,0为电平触发模式,1为跳变沿触发模式,你的TCON都没有设置,故采用默认值!!!所以是电平触发。
2012-12-06 14:29
zhu1991
Rank: 2
等 级:论坛游民
帖 子:17
专家分:79
注 册:2012-11-29
收藏
得分:20 
回复 4楼 whilewater
显示888是由于你的显示扫描时间所致,修改数码管的扫描时间即可。KELL中可以自动模拟定时器的中断,外部中断要人工的给,在调试模式下,点击外设菜单里面的IO端口,将相应的端口置0或者置1,即可模拟外部中断了。。。
2012-12-06 14:35
快速回复:求助一个关于51单片机的C语言程序
数据加载中...
 
   



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

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