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

📄 text1.c

📁 单片机测量相位和频率的程序,使用了RTX51 TINY操作系统
💻 C
字号:
/******************************************************************************/
/*                                                                            */
/*   Task 0:  Create other Tasks and Count up Every 5 ticks                   */
/*                                                                            */
/******************************************************************************/

#include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */

#include <reg52.h>

typedef unsigned char uchar;
 
uchar Led1Data;      

uchar Led2Data;     

uchar Led3Data;   

uchar Led4Data;

uchar TH2DataTmp;

uchar TL2DataTmp;

uchar TH1DataTmp;

uchar TL1DataTmp;


uchar Timeflag1;
uchar Timeflag2;



uchar LedTable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 

uchar bdata flagp;
sbit  flag0=flagp^0;
sbit  flag1=flagp^1;

void MCUInit(void);
void LedProgram(void);
void FrequnceOut(void);

/******************************************************************************/
/*       Task 0 'job0':  RTX-51 tiny starts execution with task 0            */
/******************************************************************************/
void job0 (void) _task_ 0  {                  
  os_create_task (1);                 /* start task 1                         */
 // os_create_task (2);                 /* start task 2                         */
 // os_create_task (3);                 /* start task 3                         */
  MCUInit();

  while (1)  {                        /* endless loop                         */
    LedProgram();                    /* led                                    */
    os_wait2 (K_TMO, 1);            /* wait for timeout: 5 ticks            */
  }
}

void job1 (void) _task_ 1  {
  while (1)  {                        /* endless loop                         */
    os_wait1 (K_SIG);                 /* wait for sigle                            */
    FrequnceOut();
	Timeflag1 = 0;
    Timeflag2 = 0;
    TH2 = 0;
    TL2 = 0;
    IE0 = 0;
    EX0 = 1;
  }
}


void LedProgram(void)
{
  P2 |= 0x3f;
  P0 = LedTable[Led1Data];
  P2 &= 0xfb;
  os_wait2 (K_TMO, 1);
  P2 |= 0x3f;
  P0 = LedTable[Led2Data]&0x7f;
  P2 &= 0xf7;
  os_wait2 (K_TMO, 1);
  P2 |= 0x3f;
  P0 = LedTable[Led3Data];
  P2 &= 0xef;
  os_wait2 (K_TMO, 1);
  P2 |= 0x3f;
  P0 = LedTable[Led4Data];
  P2 &= 0xdf;
  os_wait2 (K_TMO, 1);
  P2 |= 0x3f;
}


void MCUInit(void)
{
  IE  |= 0xa1;
  TCON|= 0x05;
  IP   = 0x25;
  TMOD|= 0x11;
 //T2CON= 0x01;
}

void FrequnceOut(void)
{
  unsigned long  FTemp;
  unsigned long DataTmp;
  
  //FTemp    =((TH1DataTmp*256+TL1DataTmp)/(Timeflag*65536+TH2DataTmp*256+TL2DataTmp))*3600;
  FTemp    = /*Timeflag2*65536+*/TH1DataTmp*256+TL1DataTmp;
  FTemp   *= 3600;
  DataTmp  = Timeflag1*65536+TH2DataTmp*256+TL2DataTmp;
  DataTmp  = FTemp/DataTmp;
  Led4Data = (DataTmp%10000)/1000;
  Led3Data = (DataTmp/100)%10;
  Led2Data = DataTmp%100/10;
  Led1Data = DataTmp%10;
  flag0    = 0;
}



void Int0Interrupt(void) interrupt 0 
{
  if(flag0 == 0){
    TR2 = 1;
    TR1 = 1;
	//ET2 = 1;
    IE1 = 0;
    EX1 = 1;
   // EXEN2 = 1;
   // EXF2= 0;
	flag0 = 1;
   }
   else {
    TR2 = 0;
    //ET2 = 0;
    EX0 = 0;
	TH2DataTmp = TH2;
	TL2DataTmp = TL2;
	flag0 = 0;
	isr_send_signal(1);
   }
}



void Int1Interrupt(void) interrupt 2 
{
    TR1 = 0;
    EX1 = 0;
	TH1DataTmp = TH1;
	TL1DataTmp = TL1;
	TH1        =  0;
    TL1        =  0;
}


void Timer2Interrupt(void) interrupt 5 
{
  if(TF2==1){
    Timeflag1++;
    TF2 = 0;
  }/* 
  else if(EXF2==1){
    Timeflag2  = Timeflag1;
    EXEN2 = 0;
    EXF2  = 0;
    TH1DataTmp = RCAP2H;
	TL1DataTmp = RCAP2L;
   }*/
}

⌨️ 快捷键说明

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