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

📄 serio.lst

📁 DS1302时钟芯片的驱动程序。希望对各位仁兄有用
💻 LST
字号:
C51 COMPILER V8.02   SERIO                                                                 10/31/2008 10:53:39 PAGE 1   


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

line level    source

   1          //串口子程序
   2          /*******************************************************************/
   3          #include <reg52.h>
   4          #include "serio.h"
   5          #include "ds1302.h"
   6          uchar count=0;
   7          struct time clock1;
   8          struct time *tm1;
   9          /*******************************************************************/
  10          //initial uart  串口初始化
  11          void UART0_Init()
  12          {
  13   1      SCON = 0x50;  //串行方1(波特率可变10位异步通信方式),串行接收允许
  14   1      //SCON: serail mode 1, 8-bit UART, REN=1,Buard=(2^SMOD)(Timer1 溢出率 )/32
  15   1      TMOD |= 0x20; //TMOD:timer1 mode 2,8 位reload   //定时器1,模式2,8位自动装入计数初值方式,高8位为初值,只
             -由低8位计数
  16   1      PCON |= 0x80; //SMOD=1;  //波特率增加一倍
  17   1      TH1 = 0xFd;   //fosc=11.0592MHz,smod=0, Baud:4.8k--TH:F4,9.6K--TH:FD;
  18   1      TL1 = 0xFd;   //fosc=11.0592MHz,smod=1, Baud:19.2K--TH:FD;              由公式可求得其为波特率为19200
  19   1      IE |= 0x90;   //ea=1,es=1,Enable Serial Interrupt        开启串行口中断
  20   1      TR1 = 1;      // timer 1 run  启动T1
  21   1      }
  22          /*******************************************************************/
  23          
  24          //send one byte to pc发送一字节到PC
  25          void UART0_SendByte(uchar da)
  26          {
  27   1      EA = 0;                   //关闭中断
  28   1      SBUF = da;                //数据缓冲寄存器的数据为DA
  29   1      while(TI==0);     //如果发送中断无,则进入死循环
  30   1      TI=0;                     //如果发送中断有,则装发送中断置为0(无)
  31   1      EA = 1;                   //开启总中断
  32   1      }
  33          
  34          /******************************************************************/
  35          
  36          //send one string to pc发送一串字符到PC
  37          void UART0_SendStr(uchar *str)
  38          {
  39   1      uchar i;
  40   1      i=0;
  41   1      while((*(str+i))!='\0') //如果字符串内容不为0,则往下执行
  42   1       {
  43   2        UART0_SendByte(*(str+i));
  44   2        i=i+1;
  45   2       }
  46   1      }
  47          //******************************************************************//
  48          
  49          void receive(void) interrupt 4
  50          {
  51   1      uchar temp;
  52   1      EA=0;
  53   1      if(RI)
  54   1      {
C51 COMPILER V8.02   SERIO                                                                 10/31/2008 10:53:39 PAGE 2   

  55   2      temp=SBUF;
  56   2      switch(count)
  57   2      {
  58   3      case 0:if(temp==0x30)count=1;else count=0;break;
  59   3      
  60   3      case 1:if(temp==0x30)count=2;else count=0;break;
  61   3      
  62   3      case 2:if(temp==0x30)count=3;else count=0;break;
  63   3      
  64   3      case 3:clock1.year=(temp&0x0f)<<4;count=4;break;
  65   3      
  66   3      case 4:clock1.year=(temp&0x0f)+clock1.year;count=5;break;
  67   3      
  68   3      case 5:clock1.month=(temp&0x0f)<<4;count=6;break;
  69   3      
  70   3      case 6:clock1.month=(temp&0x0f)+clock1.month;count=7;break;
  71   3      
  72   3      case 7:clock1.date=(temp&0x0f)<<4;count=8;break;
  73   3      
  74   3      case 8:clock1.date=(temp&0x0f)+clock1.date;count=9;break;
  75   3      
  76   3      case 9:clock1.hour=(temp&0x0f)<<4;count=10;break;
  77   3      
  78   3      case 10:clock1.hour=(temp&0x0f)+clock1.hour;count=11;break;
  79   3      
  80   3      case 11:clock1.minute=(temp&0x0f)<<4;count=12;break;
  81   3      
  82   3      case 12:clock1.minute=(temp&0x0f)+clock1.minute;count=13;break;
  83   3      
  84   3      case 13:clock1.sec=(temp&0x0f)<<4;count=14;break;
  85   3      
  86   3      case 14:clock1.sec=(temp&0x0f)+clock1.sec;count=15;break;
  87   3      
  88   3      case 15:clock1.week=(temp&0x0f);tm1=&clock1;SetTime(tm1);count=0;break;
  89   3      }
  90   2      RI=0;
  91   2      }
  92   1      else
  93   1      TI=0;
  94   1      EA=1;
  95   1      }
  96          /*******************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    416    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       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 + -