⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8051与8253测速.c

📁 利用89c51和8253可以测速
💻 C
字号:
#include<AT89X51.H>
#define  uchar unsigned char
#define  uint  unsigned int
#define  ulong  unsigned long

#define CT1 0x7d00             /*8253计数器#1端口地址*/
#define CT2 0x7e00             /*8253计数器#2端口地址*/
#define CWR 0x7f00             /*8253计数器CWR控制字端口地址*/

sfr WDTRST = 0xA6;

code uchar NH=0x1f,NL=0xff;  /*8253#1、#2的初值为8192,即2的13次*/
code uchar dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /*共阳段码*/

char xdata *com_ct1=CT1,*com_ct2=CT2,*com_cwr=CWR;  

void delay(void)
{
   uint i;
   for(i=2500;i>0;i--)
   ;
}


void main(void)
{   
/********定义与转速计算有关的值********/
   uint data k1,k2;     /*8253#1和#2的计数值*/ 
   uchar data temH1,temL1,temH2,temL2; /*8253#1和#2锁存值*/     
   ulong data m,n;             /*计数值和转速值*/
   uchar data ng,ns,nb,nq;     /*转速值的个、十、百、千位*/
                        
/*8253与显示初始化,设定三通初值、工作方式*/
  
   *com_cwr= 0x74 ;            /*8253#1工作方式2,二进制计数*/
   *com_ct1= NL ;              /*先写低8位,再写高8位*/
   *com_ct1= NH ; 
   *com_cwr= 0xb4 ;            /*8253#2工作方式2,二进制计数*/       
   *com_ct2= NL ;
   *com_ct2= NH ;
   
   WDTRST=0x1E;                /*初始化看门狗*/
   WDTRST=0xE1;

   IE=0x81;                    /*只允许INT0中断*/
   IT0=1;                      /*选择INT0脉冲触发方式*/               

}

/************** 外部中断0*****************/
void INT_INT0 (void) interrupt IE0_VECTOR 
{
   *com_cwr= 0x44 ;            /*锁存#1和#2的值*/
   *com_cwr= 0x84 ;

   temL1=*com_ct1;             /*先读低8位,再读高8位*/
   temH1=*com_ct1;
   temL2=*com_ct2;
   temH2=*com_ct2;

   *com_cwr= 0x74 ;            /*8253#1和#2重新置初值并计数*/
   *com_ct1= NL ;              /*先写低8位,再写高8位*/
   *com_ct1= NH ; 
   *com_cwr= 0xb4 ;                   
   *com_ct2= NL ;
   *com_ct2= NH ;
           
   k1=0x2000 - temH1<<8-temL1; /*存储计数值*/
   k2=0x2000 - temH2<<8-temL2; 

   m=k2<<13+k1;                /*计算ALE脉冲的计数值*/
   n=120000000/m;              /*计算转速值*/

   nq=n/1000;                  /*存储转速值*/
   nb=n/100%10;
   ns=n%100/10;
   ng=n%10;
           
/************** 显示程序 *****************/
   do
   {  
      WDTRST=0x1E;              /*喂狗指令*/
      WDTRST=0xE1;

         P3_5=1; P3_3=0; P3_1=0; P3_0=0;     /*显示千位*/
      P1=dispcode[nq];
      delay();
         P3_5=0; P3_3=1; P3_1=0; P3_0=0;     /*显示百位*/
      P1=dispcode[nb];
      delay();
         P3_5=0; P3_3=0; P3_1=1; P3_0=0;     /*显示十位*/
      P1=dispcode[ns];
      delay();
         P3_5=0; P3_3=0; P3_1=0; P3_0=1;     /*显示个位*/
      P1=dispcode[ng];
      delay();

   }while(1);

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -