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

📄 uart.lst

📁 网上收集的嵌入式操作系统后在51上写的一个简单的操作系统
💻 LST
字号:
C51 COMPILER V8.02   UART                                                                  05/10/2008 17:06:53 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE UART.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************
   2          本程序只供学习使用,未经作者许可,不得用于其它任何用途
   3          
   4          UART.c file
   5          
   6          Created by Computer-lov
   7          Date: 2005.12.12
   8          
   9          Edit date:2006.2.24
  10          
  11          Version V1.1
  12          Copyright(C) Computer-lov 2005-2015
  13          All rigths reserved
  14          
  15          ******************************************************/
  16          
  17          #include "at89x52.h"
  18          
  19          #include "OS_core.h"
  20          
  21          #include "UART.h"
  22          
  23          #include "MAIN.h"
  24          
  25          
  26          //打印机占用标志,使用打印前,设置为非0值(实际使用任务ID号+1),避免打印混乱
  27          unsigned char printer_used;
  28          
  29          //////////////////////////////串口初始化函数,9600bps波特率,使用24M晶体///////////////
  30          void UART_init(void)
  31          {
  32   1      
  33   1       TMOD=(TMOD & 0x0F)|0x20;         //定时器1工作在模式2
  34   1      
  35   1       SCON=0x50;    //串口工作在模式1
  36   1      
  37   1       ES=0;         //禁止串行中断
  38   1      
  39   1       PCON|=0x80;    //串口波特率加倍
  40   1      
  41   1       TH1=0xF3;    
  42   1       TL1=0xF3;     //串口波特率为9600
  43   1      
  44   1       TR1=1;        //启动定时器1
  45   1       REN=1;        //允许接收 
  46   1       
  47   1       printer_used=0;
  48   1      }
  49          ////////////////////////////////////////////////////////////////////////////////////////
  50          
  51          
  52          //////////////////////////////// 通过串口发送1字节数据/////////////////////////////////
  53          void send_a_byte(unsigned char a_byte)
  54          {
  55   1       TI=0;              //清TI
C51 COMPILER V8.02   UART                                                                  05/10/2008 17:06:53 PAGE 2   

  56   1       SBUF=a_byte;       //发送数据
  57   1       while(!TI);        //等待发送完毕
  58   1      }
  59          /////////////////////////////////////////////////////////////////////////////////////////
  60          
  61          ///////////////////////////////   从串口接收一字节数据  /////////////////////////////////
  62          unsigned char get_a_byte(void)
  63          {
  64   1       unsigned char temp;          //临时变量
  65   1       while(1)                     //一直等待,直到接收到数据才返回
  66   1        {
  67   2         OS_Enter_Critical();       //进入临界段
  68   2         if(RI)                     //如果串口收到数据
  69   2          {                         //如果收到,则
  70   3           temp=SBUF;               //读回数据
  71   3           RI=0;                    //清RI
  72   3           OS_Exit_Critical();      //退出临界段
  73   3           return temp;             //返回数据
  74   3          }
  75   2         else
  76   2          {                        //如果未收到,则
  77   3           OS_Exit_Critical();      //退出临界段
  78   3           OS_Delay(1);          //延迟一个时钟节拍
  79   3          }
  80   2        }
  81   1      }
  82          /////////////////////////////////////////////////////////////////////////////////////////
  83          
  84          ////////////////////////////// 发送一个字符串 ///////////////////////////////////////////
  85          //////////////////入口参数: s-要发送的字符串的指针(字符串长度不得大于255)/////////////
  86          /////////////////////////////////////    newline-是否需要换行  0-不换行  非0-换行////////
  87          void prints(unsigned char * s,unsigned char newline)
  88          {
  89   1       unsigned char i;
  90   1       i=0;
  91   1       while(s[i]!=0)    //判断字符串是否结束
  92   1        {
  93   2         TI=0;
  94   2         SBUF=s[i];      //发送一字节
  95   2         while(!TI);     //等待该发送完毕
  96   2         i++;            //移到下字节
  97   2        }
  98   1       if(newline)       //如果需要换行
  99   1        {
 100   2         send_a_byte(13);
 101   2         send_a_byte(10);   //发送回车换行
 102   2        }
 103   1      }
 104          ////////////////////////////////////////////////////////////////////////////////////////////
 105          
 106          //////////////////////////////////  请求打印机服务  ////////////////////////////////////////
 107          void get_printer(void)
 108          {
 109   1       while(1)
 110   1        {
 111   2         OS_Enter_Critical();   //进入临界段
 112   2         if(printer_used==0)    //如果打印机没有被占用
 113   2          {
 114   3           printer_used=OS_Current_ID+1;   //则占用打印机,之所以加1,是为了使0号任务也能使用打印机
 115   3                                        //当一个任务被删除,需要检查是否占有资源时要特别注意,
 116   3                                        //读得的此号,要减1才是任务的ID号
 117   3      
C51 COMPILER V8.02   UART                                                                  05/10/2008 17:06:53 PAGE 3   

 118   3           OS_Exit_Critical();  //退出临界段
 119   3           return;              //返回
 120   3          }
 121   2         else                   //如果打印机已经被占用
 122   2          {
 123   3           OS_Exit_Critical();  //退出临界段
 124   3           OS_Delay(1);    //等待1个时钟节拍后再检查
 125   3          }
 126   2        }
 127   1      }
 128          ////////////////////////////////////////////////////////////////////////////////////////////
 129          
 130          //////////////////////////   让出打印机的使用权 ////////////////////////////////////////////
 131          void give_up_printer(void)
 132          {
 133   1       OS_Enter_Critical();
 134   1       printer_used=0;        //让出打印机使用权
 135   1       OS_Exit_Critical();
 136   1       OS_Delay(1);           //延迟一个时钟,让别的设备有机会获取打印机
 137   1      }
 138          ///////////////////////////////////////////////////////////////////////////////////////////
 139          
 140          ////////////////////////////  检查任务是否占有该资源,如果占有,则释放之  //////////////////
 141          //////////////////////////// 入口参数:任务的ID号 /////////////////////////////////////////
 142          ///////////////////////  返回:0-没有找到应该释放的资源 任务号ID+1:成功释放资源 ///////////
 143          unsigned char release_printer(unsigned char Task_ID)
 144          {
 145   1       if(printer_used==Task_ID+1)    //确认资源被该任务使用中
 146   1        {
 147   2         printer_used=0;              //释放资源
 148   2         return Task_ID+1;            //返回代号
 149   2        }
 150   1       else
 151   1        {
 152   2         return 0;                   //返回0,表示没有找到应删除的资源
 153   2        }
 154   1      }
 155          ///////////////////////////////////////////////////////////////////////////////////////////


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    226    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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