打印

请教,为什么计数没反应?

[复制链接]
657|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
海灰婷|  楼主 | 2015-3-16 22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//电机转速表设计
#include<reg51.h>    //包含单片机寄存器的头文件
unsigned char code tab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //定义字符数组显示数字
unsigned char data yy[2]={0,0}        ;
unsigned int v;   //储存电机转速
unsigned char count;  //储存定时器T0中断次数
bit flag;      //计满1秒钟标志位
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;
sbit P33=P3^3;
/******************************************************************************
函数功能:延时                        
******************************************************************************/
void delay1ms(unsigned char m)
{
   unsigned char i,j;       
         for(i=0;i<m;i--)
          for(j=0;j<=110;j++)
           ;                 
}
/******************************************************************************
函数功能:显示数值                        
******************************************************************************/
void display_val(unsigned int x)
{
        yy[9]=x/1000;         //取千位
        yy[8]=(x%1000)/100;   //取百位
    yy[7]=(x%100)/10;     //取十位
    yy[6]=x%10;   //取个位
       
        P3=0;
        P30=1;
    P2=tab1[yy[9]];
    delay1ms(5);
    P3=0;
   
        P31=1;
    P2=tab1[yy[8]];
    delay1ms(5);
    P3=0;
       
        P32=1;
    P2=tab1[yy[7]];
    delay1ms(5);
    P3=0;

        P33=1;
    P2=tab1[yy[6]];
    delay1ms(5);
    P3=0;


}
/*******************************************************
函数功能:主函数
********************************************************/
void main()
{
    TMOD=0x51;                //定时器T1工作于计数模式1,定时器T0工作于计时模式1;
        TH0=(65536-46083)/256;    //定时器T0的高8位设置初值,每50ms产生一次中断
        TL0=(65536-46083)%256;    //定时器T0的低8位设置初值,每50ms产生一次中断
        EA=1;                     //开总中断
        ET0=1;                    //定时器T0中断允许
        TR0=1;                   //启动定时器T0
        IT0=1;
        count=0;                  //将T0中断次数初始化为0
         while(1)                 //无限循环
          {
                 TR1=1;            //定时器T1启动
                  TH1=0;            //定时器T1高8位赋初值0
                  TL1=0;            //定时器T1低8位赋初值0
                  flag=0;           //时间还未满1秒钟
                  while(flag==0)    //时间未满等待
                        ;
                 v=(TH1*256+TL1)*60/2; //计算速度,每周产生2个脉冲
                 display_val(v);        //显示速度
    }                       
}
/*******************************************************
函数功能:定时器T0的中断服务函数
********************************************************/
void Time0(void) interrupt 1 using 1 //定时器T0的中断编号为1,使用第1组工作寄存器
  {
    count++;          //T0每中断1次,count加1
         if(count==20)     //若累计满20次,即计满1秒钟
          {
       flag=1;        //计满1秒钟标志位置1
                 count=0;       //清0,重新统计中断次数
          }
    TH0=(65536-46083)/256;   //定时器T0高8位重新赋初值
         TL0=(65536-46083)%256;   //定时器T0低8位重新赋初值
       
  }  

相关帖子

沙发
海灰婷|  楼主 | 2015-3-20 22:21 | 只看该作者
有哪位大侠指教?

使用特权

评论回复
板凳
cauhorse| | 2015-3-20 23:51 | 只看该作者
楼主先把你要做的事情(程序要实现的功能)、预想的实现原理以及你目前的设计思路给出来;
不然别人还得猜测你写这段代码的意图。

使用特权

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

本版积分规则

1

主题

3

帖子

0

粉丝