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

📄 main_uart.lst

📁 这是一个读取ID卡的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAIN_UART                                                             07/29/2005 22:35:14 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN_UART
OBJECT MODULE PLACED IN main_uart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe main_uart.c DB OE SMALL ROM(LARGE)

stmt level    source

   1          #include <intrins.h>
   2          #include <ctype.h>
   3          #include <absacc.h>
   4          #include <reg52.h>
   5          #include <stdio.h>
   6          #include <stdlib.h>
   7          #include <string.h>
   8          sbit P1_0=P1^0;
   9          sbit P3_2=P3^2;
  10          sbit P1_1=P1^1;
  11          sbit P1_7=P1^7;
  12          sbit T_CLK = P1^4; /*实时时钟时钟线引脚 */
  13          sbit T_IO = P1^3; /*实时时钟数据线引脚 */
  14          sbit T_RST = P1^2; /*实时时钟复位线引脚 */
  15          sbit ACC0 = ACC^0;
  16          sbit ACC7 = ACC^7;
  17          #define      uchar              unsigned char  
  18          #define      WriteIO(addr,value)     XBYTE[addr]=value
  19          #define          STORAGE_LEN  65536
  20          
  21          unsigned char Buff[6];  
  22          unsigned char i = 0;
  23          
  24          
  25          /********************************************
  26          * flash 读
  27          *********************************************/
  28          uchar Flash_Byte_Read( unsigned int byteaddr )
  29          {
  30   1              uchar value;
  31   1              P1_7 = 0;
  32   1              value = XBYTE[byteaddr];
  33   1              P1_7 = 1;
  34   1              return value;
  35   1      }
  36          
  37          /********************************************
  38          * flash 擦除
  39          *********************************************/
  40          void Flash_Sec_Erase( unsigned int secaddr )
  41          {
  42   1              uchar temp1, temp2;
  43   1              P1_7 = 0;
  44   1              WriteIO( 0x5555 , 0xAA );
  45   1              WriteIO( 0x2AAA , 0x55 );
  46   1              WriteIO( 0x5555 , 0x80 );
  47   1              WriteIO( 0x5555 , 0xAA );
  48   1              WriteIO( 0x2AAA , 0x55 );
  49   1              WriteIO( secaddr ,0x30 );
  50   1              P1_7 = 1;
  51   1              do
  52   1              {
  53   2                      temp1 = Flash_Byte_Read( secaddr );
  54   2                      temp2 = Flash_Byte_Read( secaddr );
  55   2              }
C51 COMPILER V7.06   MAIN_UART                                                             07/29/2005 22:35:14 PAGE 2   

  56   1              while( (temp1 & 0x40) != (temp2 & 0x40) );
  57   1      }
  58          
  59          
  60          /********************************************
  61          * flash 写
  62          *********************************************/
  63          void Flash_Byte_Program( unsigned int byteaddr , uchar value )
  64          {
  65   1              uchar temp1;
  66   1              uchar temp2;
  67   1              P1_7 = 0;
  68   1              WriteIO( 0x5555 , 0xAA );
  69   1              WriteIO( 0x2AAA , 0x55 );
  70   1              WriteIO( 0x5555 , 0xA0 );
  71   1              WriteIO( byteaddr , value );
  72   1              P1_7 = 1;
  73   1              do
  74   1              {
  75   2                      temp1 = Flash_Byte_Read( byteaddr );
  76   2                      temp2 = Flash_Byte_Read( byteaddr );
  77   2              }
  78   1              while( (temp1 & 0x40) != (temp2 & 0x40) );      
  79   1      /*
  80   1              do
  81   1              {
  82   1                      temp1 = Flash_Byte_Read( byteaddr );
  83   1              }while( !(temp1 & 0x80) );
  84   1      */
  85   1      }
  86          void Get_Record( unsigned int startaddr , unsigned char *record )
  87          {
  88   1              uchar i = 0;
  89   1      
  90   1              startaddr += 8192; //0-8K用于和程序空间是重复的。
  91   1      
  92   1              for( i = 0 ; i < 8 ; i ++ )
  93   1              {
  94   2                      record[i] = Flash_Byte_Read( startaddr + i );
  95   2              }
  96   1      }
  97          void Put_Record( unsigned int startaddr , unsigned char *record )
  98          {
  99   1              uchar i = 0;
 100   1      
 101   1              startaddr += 8192; //0-8K用于和程序空间是重复的。
 102   1      
 103   1              if( !(startaddr & 0xFFF) )
 104   1              {//一个新的sector
 105   2                      Flash_Sec_Erase( startaddr );
 106   2              }
 107   1      
 108   1              for( i = 0 ; i < 8 ; i ++ )
 109   1              {
 110   2      /*
 111   2                      if( (startaddr+i) & 0xFFF )
 112   2                      {//一个新的sector
 113   2                              Flash_Sec_Erase( (startaddr+i)>>12 );
 114   2                      }
 115   2      */
 116   2                      Flash_Byte_Program( startaddr + i , record[i] );
 117   2              }
C51 COMPILER V7.06   MAIN_UART                                                             07/29/2005 22:35:14 PAGE 3   

 118   1      }
 119          /******************************************************************** 
 120          *
 121          * 名称: v_RTInputByte
 122          * 说明: 
 123          * 功能: 往DS1302写入1Byte数据
 124          * 调用:
 125          * 输入: ucDa 写入的数据 
 126          * 返回值: 无
 127          ***********************************************************************/
 128          void v_RTInputByte(uchar ucDa) 
 129          { 
 130   1              uchar i;
 131   1              ACC = ucDa;
 132   1              for(i=8; i>0; i--)
 133   1              {
 134   2                      T_IO = ACC0; /*相当于汇编中的 RRC */ 
 135   2                      T_CLK = 1;
 136   2                      T_CLK = 0;
 137   2                      ACC = ACC >> 1; 
 138   2              } 
 139   1      }
 140          /******************************************************************** 
 141          *
 142          * 名称: uchar uc_RTOutputByte
 143          * 说明: 
 144          * 功能: 从DS1302读取1Byte数据
 145          * 调用: 
 146          * 输入: 
 147          * 返回值: ACC
 148          ***********************************************************************/
 149          uchar uc_RTOutputByte(void) 
 150          { 
 151   1              uchar i;
 152   1              for(i=8; i>0; i--)
 153   1              {
 154   2                      ACC = ACC >>1; /*相当于汇编中的 RRC */
 155   2                      ACC7 = T_IO;
 156   2                      T_CLK = 1;
 157   2                      T_CLK = 0;
 158   2              } 
 159   1              return(ACC); 
 160   1      }
 161          /******************************************************************** 
 162          *
 163          * 名称: v_W1302
 164          * 说明: 先写地址,后写命令/数据
 165          * 功能: 往DS1302写入数据
 166          * 调用: v_RTInputByte() 
 167          * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
 168          * 返回值: 无
 169          ***********************************************************************/
 170          void v_W1302(uchar ucAddr, uchar ucDa)
 171          {
 172   1              T_RST = 0;
 173   1              T_CLK = 0;
 174   1              T_RST = 1;
 175   1              v_RTInputByte(ucAddr); /* 地址,命令 */
 176   1              v_RTInputByte(ucDa); /* 写1Byte数据*/
 177   1              T_CLK = 1;
 178   1              T_RST =0;
 179   1      } 
C51 COMPILER V7.06   MAIN_UART                                                             07/29/2005 22:35:14 PAGE 4   

 180          /******************************************************************** 
 181          *
 182          * 名称: uc_R1302
 183          * 说明: 先写地址,后读命令/数据
 184          * 功能: 读取DS1302某地址的数据
 185          * 调用: v_RTInputByte() , uc_RTOutputByte()
 186          * 输入: ucAddr: DS1302地址
 187          * 返回值: ucDa :读取的数据

⌨️ 快捷键说明

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