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

📄 text1.lst

📁 C8051F120读写SPI接口的AT45DB081,输入和输出由UART完成.内含UART和SPI的读写驱动.载发环境为KEIL
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   TEXT1                                                                 09/08/2008 08:59:36 PAGE 1   


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

line level    source

   1          /////////////////////////////////////
   2          //  Generated Initialization File  //
   3          /////////////////////////////////////
   4          
   5          #include "C8051F120.h"
   6          #include<stdio.h>
   7          #include<string.h>
   8          
   9          #define UART_BUF_LEN 40    //数据缓冲长度
  10          unsigned char UART_R_COUNT=0,UART_T_COUNT=0,R_OK=0,T_OK=0,U_STR_LEN=0;
  11          unsigned char SBUF_temp=0;
  12          unsigned char UART_BUF[UART_BUF_LEN];
  13          unsigned char str1[]={" I love you ,China ! Come on ! Beijing ! "};
  14          
  15          sbit CS1=P3^0;
  16          sbit WP1=P3^1;
  17          sbit RDY1=P3^2;
  18          sbit RST1=P3^3;
  19          
  20          sbit CS2=P3^4;
  21          
  22          unsigned char spi_flag=1;
  23          
  24          // Peripheral specific initialization functions,
  25          // Called from the Init_Device() function
  26          
  27          void Reset_Sources_Init() //复位源设置
  28          {
  29   1          EA=0;                                 //关总中断
  30   1          WDTCN     = 0xDE;     //关看门狗
  31   1          WDTCN     = 0xAD;
  32   1      }
  33          
  34          void Timer_Init()                //定时器设置
  35          {
  36   1          SFRPAGE   = TIMER01_PAGE;
  37   1         
  38   1          TMOD      = 0x20;   //定时器1:8位自动重载
  39   1          CKCON     = 0x10;   //定时器1使用系统时钟
  40   1          TL1       = 0xF3;   //波特率设为115200
  41   1          TH1       = 0xF3;   
  42   1              TR1       = 1;      //起动定时器1  TCON=0x40;
  43   1      }
  44          
  45          void UART_Init()                //串口设置
  46          {
  47   1          SFRPAGE   = UART0_PAGE;      
  48   1          SCON0     = 0x50;    //UART0工作在方式1,8位可变波特率,允许接收中断 REN0=1;
  49   1          SSTA0     = 0x10;    //禁止2分频,发送、接收时钟都由定时器1产生
  50   1      }
  51          
  52          void SPI_Init()
  53          {
  54   1        
  55   1          SFRPAGE   = SPI0_PAGE;
C51 COMPILER V8.02   TEXT1                                                                 09/08/2008 08:59:36 PAGE 2   

  56   1          SPI0CFG   = 0x77;  //(CKPOL=1, CKPHA=1),SCK 在空闲状态时处于高电平,在SCK 周期的第一个边沿采样数据,
  57   1          SPI0CKR   = 0x01;  //时钟频率为5MHz                  
  58   1              SPI0CN    = 0x07;  //3 线单主方式,使能SPI0
  59   1      
  60   1      }
  61          
  62          
  63          void Port_IO_Init()               //交叉开关设置
  64          {
  65   1          SFRPAGE   = CONFIG_PAGE;
  66   1              P0MDOUT   = 0x14;
  67   1          P3MDOUT   = 0xFF;
  68   1          XBR0      = 0x06;    //使能UART0和SPI0
  69   1          XBR2      = 0x40;    //交叉开关总使能
  70   1      }
  71          
  72          void Oscillator_Init()   //时钟设置
  73          {
  74   1          int i = 0;
  75   1          SFRPAGE   = CONFIG_PAGE;
  76   1          OSCXCN    = 0x67;
  77   1          for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
  78   1          while ((OSCXCN & 0x80) == 0);
  79   1          OSCICN    = 0x83;
  80   1          CLKSEL    = 0x01;
  81   1      
  82   1          //SFRPAGE   = CONFIG_PAGE;
  83   1          //OSCICN    = 0x83;  //使用内部24。5M时钟,不分频
  84   1      }
  85          
  86          void Interrupts_Init()   //中断使能设置
  87          {
  88   1          ES0=1;                               //1:开放串口中断
  89   1              //EIE1      = 0x01;      //开放SPI0中断
  90   1          EA=1;                //开放总中断
  91   1      }
  92          
  93          // Initialization function for device,
  94          // Call Init_Device() from your main program
  95          void Init_Device(void)
  96          {
  97   1          Reset_Sources_Init();          //复位源设置
  98   1              Port_IO_Init();                    //交叉开关设置
  99   1              Oscillator_Init();                  //时钟设置
 100   1          Timer_Init();                           //定时器设置
 101   1          UART_Init();                                //串口设置
 102   1              SPI_Init();                                //SPIO设置
 103   1          Interrupts_Init();            //中断使能设置
 104   1      }
 105          
 106          
 107          void delay1ms(int time)
 108          {
 109   1          int i,j;
 110   1          for (j = time;j > 0; j--)
 111   1          for (i = 0; i < 2999; i++);  // Wait 1ms for initialization
 112   1      }
 113          
 114          void send_UART_char( unsigned char ch)  
 115          { 
 116   1         SBUF0=ch;  
 117   1         while(TI0==0);  
C51 COMPILER V8.02   TEXT1                                                                 09/08/2008 08:59:36 PAGE 3   

 118   1         TI0=0;  
 119   1      }  
 120          
 121          //向串口发送一个字符串,strlenth为该字符串长度,str_start为发送字符串的起始位置, 
 122          void send_UART_string(unsigned char *str,unsigned int str_start)
 123          {
 124   1          unsigned char k=0;
 125   1              unsigned int strlenth=0;
 126   1          ES0=0;       //关串口中断
 127   1              strlenth=strlen(str);  //计算字符串长度
 128   1          k=str_start;
 129   1              do 
 130   1            {
 131   2               send_UART_char(*(str+k));
 132   2               k++;
 133   2            }while(k<strlenth);
 134   1              ES0=1;   //关串口中断
 135   1      }
 136          
 137          
 138          
 139          
 140          void UART0_interrpt() interrupt 4       using 2    //c8051f12x数据手册第130页
 141          {       
 142   1          if(RI0==1)
 143   1                 {
 144   2                        UART_BUF[UART_R_COUNT]=SBUF0;
 145   2                        RI0=0;
 146   2                        UART_R_COUNT++;
 147   2                        if(UART_R_COUNT==U_STR_LEN)
 148   2                          {
 149   3                                 REN0=0; //UART 接收禁止
 150   3                             R_OK=1;//接收满
 151   3                             UART_R_COUNT=0;//接收计数复位
 152   3                          }
 153   2                 }
 154   1              if(TI0==1)
 155   1                 {
 156   2                        TI0=0;
 157   2                        UART_T_COUNT++; 
 158   2                        if(UART_T_COUNT==U_STR_LEN)
 159   2                              {
 160   3                                 REN0=1;      //UART 接收允许
 161   3                                 T_OK=1;      //发送完成
 162   3                         UART_T_COUNT=0;//发送计数复位
 163   3                              }
 164   2                      
 165   2                 }
 166   1      }

⌨️ 快捷键说明

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