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

📄 main.lst

📁 SPI接口读写模块c程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V8.02   MAIN                                                                  02/25/2008 12:13:54 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.C COMPACT ROM(COMPACT) REGFILE(.\HY502B_SPI.ORC) BROWSE DEBUG OBJECTEX
                    -TEND

line level    source

   1          /****************************************************************************
   2          * File :  main.c                                                            *
   3          * COPYRIGHT BY HUOYAN LTD.COMPANY                                           *
   4          * Version:      V2.0                                                                    *
   5          *                                                                           *
   6          * Created:      07.Aug.2006                                                 *
   7          * Last Change:  25.DEC.2006                                                 *
   8          *                                                                           *
   9          * Author:       sun ,nil                                                    *
  10          *                                                                           *
  11          * Compiler:     KEIL C51 V7.10                                              *
  12          *                                                                           *
  13          * Description:  AT89S52 Firmware for HY502  Serial Reader                   *
  14          *   This project is designed for HY502XX                                    *
  15          *   OSC use 11.0592MHz crystal.                                                                                     *
  16          ****************************************************************************/
  17          
  18          /*******************  www.ehuoyan.com *************************************/
  19          /*-------------------------------------------------------------------------*/
  20          
  21          #include "main.h"        
  22          #include "hy502.h"
  23          
  24          // SPI 总线状态定义
  25          #define SPI_RDY  0xF0;            // 准备
  26          #define spibusy  0xaa             // 忙
  27          #define spiread  0xbb             // 读
  28          #define spiwrite 0xcc             // 写
  29          
  30          
  31          /////////////////////////////////////////////////////////////////////////////////////////////////////
  32          // 延时函数
  33          void delay(unsigned int x)
  34          {
  35   1              while(x)
  36   1              {
  37   2                      x--;
  38   2              }
  39   1      }
  40          
  41          ///////////////////////////////////////////////////////////////////////
  42          // Delay 50us
  43          ///////////////////////////////////////////////////////////////////////
  44          void delay_50us(uchar _50us)
  45          {
  46   1        RCAP2LH = RCAP2_50us;
  47   1        T2LH    = RCAP2_50us;
  48   1        ET2 = 0;      // Disable timer2 interrupt
  49   1        T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
  50   1      
  51   1        while (_50us--)
  52   1        {
  53   2              while (!TF2);
  54   2              TF2 = FALSE;
C51 COMPILER V8.02   MAIN                                                                  02/25/2008 12:13:54 PAGE 2   

  55   2        }
  56   1      
  57   1        TR2 = FALSE;
  58   1      }
  59          
  60          ///////////////////////////////////////////////////////////////////////
  61          // Delay 1ms
  62          ///////////////////////////////////////////////////////////////////////
  63          void delay_1ms (uint _1ms)
  64          {
  65   1      
  66   1        RCAP2LH = RCAP2_1ms;
  67   1        T2LH    = RCAP2_1ms;
  68   1        ET2 = 0;      // Disable timer2 interrupt
  69   1        T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
  70   1      
  71   1        while (_1ms--)
  72   1        {
  73   2              while (!TF2);
  74   2              TF2 = FALSE;
  75   2        }
  76   1        TR2 = FALSE;
  77   1      
  78   1      }
  79          
  80          ///////////////////////////////////////////////////////////////////////
  81          // Delay 10ms
  82          ///////////////////////////////////////////////////////////////////////
  83          void delay_10ms(unsigned int _10ms)
  84          {
  85   1        RCAP2LH = RCAP2_10ms;
  86   1        T2LH    = RCAP2_10ms;
  87   1        ET2 = 0;      // Disable timer2 interrupt
  88   1        T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
  89   1      
  90   1        while (_10ms--)
  91   1        {
  92   2              while (!TF2)
  93   2              {
  94   3               if(g_bReceCommandOk)            // change by lin 2006-08-21
  95   3                {
  96   4                      TR2 = FALSE;
  97   4                      TF2 = FALSE;
  98   4                      return;
  99   4                 }
 100   3              }
 101   2              TF2 = FALSE;
 102   2        }
 103   1        TR2 = FALSE;
 104   1      
 105   1      }
 106          
 107          /////////////////////////////////////////////////////////////////////////
 108          //beep(n);n为鸣叫的声音次数
 109          /////////////////////////////////////////////////////////////////////////
 110          void beep(uchar n)
 111          {
 112   1              uchar i;
 113   1              for(i=0;i<n;i++)
 114   1              {
 115   2                  BUZ=0;          //产生周期为1s的方波
 116   2                  delay_10ms(50);     //delay 0.5s
C51 COMPILER V8.02   MAIN                                                                  02/25/2008 12:13:54 PAGE 3   

 117   2                      BUZ=1;
 118   2                      delay_10ms(50);
 119   2                      BUZ=0;
 120   2              }
 121   1      }
 122          /////////////////////////////////////////////////////////////////////////
 123          /////////////////////////////////////////////////////////////////////////
 124          //LED闪烁次数
 125          ////////////////////////////////////////////////////////////////////////
 126          void splash(uchar n)
 127          {
 128   1              uchar i;
 129   1      
 130   1              for(i=0;i<n;i++)
 131   1              {
 132   2                      LED_YELLOW=1;
 133   2                      delay_10ms(50);     //delay 0.5s
 134   2                      LED_YELLOW=0;
 135   2                      delay_10ms(50);
 136   2                      LED_YELLOW=1;
 137   2              }
 138   1      }
 139          /******************* SPI FUNCTION DEFINE ************************************/
 140          /*****************************************************************************
 141          *function: send a byte over SPI bus
 142           发送一个字节
 143          *****************************************************************************/
 144          unsigned char SPIRWByte(unsigned char cSendByte)
 145          {
 146   1              unsigned char data i = 8;
 147   1              unsigned char cRecByte;
 148   1              while (i--)
 149   1              {
 150   2                      cRecByte += cRecByte;
 151   2                      SCL = 0;
 152   2                      MOSI = (bit)(cSendByte & 0x80);
 153   2                      cSendByte += cSendByte;
 154   2                      cRecByte |= (unsigned char) MISO ;
 155   2                      SCL = 1;
 156   2              }
 157   1              SCL = 1;
 158   1              return cRecByte;
 159   1      }
 160          
 161          
 162          /***** 查询SPI总线状态 *********/
 163          unsigned char spi_cStatus(void)
 164          {
 165   1              unsigned char cStatus;
 166   1              NSS=0;
 167   1              cStatus=SPIRWByte(spibusy);
 168   1      
 169   1              cStatus=SPIRWByte(0xFF);
 170   1              NSS=1;
 171   1      
 172   1              return cStatus;
 173   1      }
 174          
 175          /***** 读SPI总线数据 *********/
 176          unsigned char SPI_Read(unsigned char *cP)
 177          {
 178   1              unsigned char cCnt,cStatus;
C51 COMPILER V8.02   MAIN                                                                  02/25/2008 12:13:54 PAGE 4   

 179   1              unsigned char cCheckSum = 0;
 180   1      
 181   1              for (cCnt=0; cCnt<100; cCnt++)
 182   1              {
 183   2                      cStatus=spi_cStatus(); //查询SPI总线状态
 184   2                      if(cStatus==0xF0)
 185   2                      {
 186   3                              cCnt=253;
 187   3                      }
 188   2                      delay(10);        
 189   2              }
 190   1      
 191   1              if(cCnt==254)  //卡操作结束,可以回传数据
 192   1              {
 193   2                      NSS=0;
 194   2                      cCnt=SPIRWByte(spiread);
 195   2                      cP[0]=2;

⌨️ 快捷键说明

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