使用RTX51 Tiny系统给串口发送——显示时间

  1  /* *************************************************************
  2                      设计一个时钟程序 使用RTX51 Tiny 系统 
  3                                        串口发送显示时间
  4  ************************************************************** */
  5 
  6  #include < rtx51tny.h > // 记得一定要包括这个头文件
  7  #include < sst89x5xxrd2.h >
  8 
  9  #define  INIT_0 0 /* 任务号0  INIT_0            */
 10  #define  chuli_1 1                   
 11  #define  UARTSEND_2 2  /* 任务号2  UARTSEND_2         */
 12 
 13  #define  u8 unsigned  char
 14  #define  u16 unsigned  int
 15 
 16  u8 Time[] = { ' 0 ' , ' 0 ' , ' : ' , ' 0 ' , ' 0 ' , ' : ' , ' 0 ' , ' 0 ' , '   ' }; // 时间格式 00:00:00
 17 
 18  void  UARTInt() // 串口初始化
 19  {
 20                 
 21     SCON = " 0x40 " ;   /*  串口模式1 8位数据 波特率可变 */
 22     TMOD = " 0x21 " ;
 23     PCON = " 0x00 " ;
 24     TH1 = 0xFA ;     /* 定时器1 工作方式2  自动装载 波特率 9600 */
 25     TL1 = 0xFA ;
 26     ET1 = 0 ;
 27     TR1 = 1 ;     
 28  }
 29 
 30  void  init ( void )_task_ INIT_0  // 任务0 初始化系统
 31  {
 32     UARTInt();
 33     BB = " 0 " ;
 34     //  Timer1_int();
 35     os_create_task(chuli_1); // 创建任务1
 36     os_create_task(UARTSEND_2); // 创建任务2
 37     os_delete_task(INIT_0); // 删除不再执行的任务0
 38    }
 39 
 40  void  dis  ( void )_task_ chuli_1 // 任务1
 41  {
 42       while ( 1 )
 43      {
 44       Time[ 7 ] = Time[ 7 ] ++ ;
 45 
 46     if (Time[ 7 ] == 0x3A )   // 秒个位
 47      {
 48       Time[ 7 ] = 0x30 ;
 49       Time[ 6 ] ++ // 进位
 50      }
 51 
 52      if (Time[ 6 ] == 0x36 )   // 秒十位
 53        {
 54       Time[ 6 ] = 0x30 ;
 55    Time[ 4 ] ++ ;
 56      }
 57 
 58       if (Time[ 4 ] == 0x3A )   // 分个位
 59        {
 60       Time[ 4 ] = 0x30 ;
 61    Time[ 3 ] ++ ;
 62      }
 63 
 64       if (Time[ 3 ] == 0x36 )   // 分十位
 65        {
 66       Time[ 3 ] = 0x30 ;
 67       Time[ 1 ] ++ ;
 68      }
 69 
 70      if (Time[ 0 ] == ' 2 ' )
 71    { 
 72       if (Time[ 1 ] == ' 4 ' )
 73      {
 74       Time[ 1 ] = ' 0 ' ;
 75       Time[ 0 ] = ' 0 ' ;
 76      }
 77     }
 78        if (Time[ 1 ] == 0x3A )   // 小时个位
 79        {
 80       Time[ 1 ] = 0x30 ;
 81    Time[ 0 ] ++ ;
 82      }
 83   
 84       if (Time[ 0 ] == 0x33 )   // 小时十位
 85         {
 86       Time[ 0 ] = 0x30 ;
 87      }
 88      os_wait(K_IVL, 200 , 0 );                // 等待1s    
 89      os_send_signal(UARTSEND_2); // 发送信号给任务2 
 90    }   
 91 
 92 
 93  void  send  ( void )_task_ UARTSEND_2    // 任务2
 94  {
 95     u8 i;
 96      while ( 1 )
 97     {
 98       os_wait(K_SIG, 0 , 0 ); // 接收信号 才开始执行任务2
 99        for (i = 0 ;i < 9 ;i ++ )          // 发送时间 
100    {
101     SBUF = " Time " [i];
102      while ( ! TI);  // 等待发送完毕
103     TI = " 0 " ;
104    }
105       }     
106  }
107 
108 

 

 

心得:

 1、我觉得定义任务的名称也最好加上任务的序号,像任务1 定义为 chuli_1

 2、开始一定要建立一个任务,一定要使用至少一个系统函数。

 3、每个任务里的程序一定是类似与while(1)循环结构,程序是从任务0开始执行。

4、os_create_task(n); n的范围是0~15 作用的建立一个任务,任务的优先级系统默认全是0,即最低级;

5、os_delete_task(n);是删除一个任务,让它不再执行。

6、os_wait(a,b,c);是个等待函数,a有3中形式,K_TMO,K_IVl,K_SIG  ,分别表示等待超时,等待间隔,等待信号。

 

 

你可能感兴趣的:(时间)