使用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  ,分别表示等待超时,等待间隔,等待信号。

原文地址:https://www.cnblogs.com/lizunicon/p/1492907.html