zoukankan      html  css  js  c++  java
  • 使用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  ,分别表示等待超时,等待间隔,等待信号。

  • 相关阅读:
    Codeforces Round #281 (Div. 2) A. Vasya and Football(模拟)
    自动生成代码工具
    导入导出维护计划
    收集错误日志方法
    C#常用控件和属性
    人民币转换
    身份证验证
    设置下拉列表项的默认值
    清除维护任务
    清除MSSQL历史记录
  • 原文地址:https://www.cnblogs.com/lizunicon/p/1492907.html
Copyright © 2011-2022 走看看