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

📄 main.lst

📁 基于c8051f040一个多机通讯程序,开发环境keil
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  04/25/2008 10:51:19 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /************************************************************************************
   2          *  Copyright (c) 2004,西安铭朗电子科技有限责任公司
   3          *            All rights reserved.
   4          *
   5          * 文件名称: main.c
   6          * 文件标识: none
   7          * 适用器件: C8051F040
   8          * 
   9          * 摘 要: 本文件是串口0、1测试程序,将跳线器JP7、JP11短接。使用外部22.1184MHz晶振。
  10          *             功能:Uart驱动程序,包括初始化、波特率设置,单字节发送接收、字符串发送接受等。
  11          *         程序运行时向PC机发送"WWW.MLARM.COM";接收到PC机的数据后,再将该数据发送
  12          *                 回PC机。按开发板上键盘,将该键值发送到PC机.串口调试最好应用支持中文格式
  13          *                 的串口调试助手,否则不能正常显示。
  14          * 
  15          * 当前版本:1.2
  16          * 作 者:张宁强
  17          * 完成日期:2006年1月10日
  18          *
  19          * 历史版本:1.0 
  20          * 原作者 : 李林利 卢阳
  21          * 完成日期:2005年6月1日
  22          *************************************************************************************/
  23          
  24          /************************************************************************************/
  25          // 引用外部头文件
  26          
  27          #include "c8051f040.h"
  28          #include "Const.h"
  29          #include "uart.h" 
  30          #include "delay.h"
  31          
  32          //sbit LED=P3^7;
  33          // CAN Protocol Register Index for CAN0ADR, from TABLE 18.1 of the C8051F040
  34          // datasheet
  35          ////////////////////////////////////////////////////////////////////////////////
  36          #define CANCTRL            0x00                 //Control Register
  37          #define CANSTAT            0x01                 //Status register
  38          #define ERRCNT             0x02                 //Error Counter Register
  39          #define BITREG             0x03                 //Bit Timing Register
  40          #define INTREG             0x04                 //Interrupt Low Byte Register
  41          #define CANTSTR            0x05                 //Test register
  42          #define BRPEXT             0x06                 //BRP Extension         Register
  43          ////////////////////////////////////////////////////////////////////////////////
  44          //IF1 Interface Registers
  45          ////////////////////////////////////////////////////////////////////////////////
  46          #define IF1CMDRQST         0x08                 //IF1 Command Rest      Register
  47          #define IF1CMDMSK          0x09                 //IF1 Command Mask      Register
  48          #define IF1MSK1            0x0A                 //IF1 Mask1             Register
  49          #define IF1MSK2            0x0B                 //IF1 Mask2             Register
  50          #define IF1ARB1            0x0C                 //IF1 Arbitration 1     Register
  51          #define IF1ARB2            0x0D                 //IF1 Arbitration 2     Register
  52          #define IF1MSGC            0x0E                 //IF1 Message Control   Register
  53          #define IF1DATA1           0x0F                 //IF1 Data A1           Register
  54          #define IF1DATA2           0x10                 //IF1 Data A2           Register
  55          #define IF1DATB1           0x11                 //IF1 Data B1           Register
C51 COMPILER V7.50   MAIN                                                                  04/25/2008 10:51:19 PAGE 2   

  56          #define IF1DATB2           0x12                 //IF1 Data B2           Register
  57          ////////////////////////////////////////////////////////////////////////////////
  58          //IF2 Interface Registers
  59          ////////////////////////////////////////////////////////////////////////////////
  60          #define IF2CMDRQST         0x20                 //IF2 Command Rest      Register
  61          #define IF2CMDMSK          0x21                 //IF2 Command Mask      Register
  62          #define IF2MSK1            0x22                 //IF2 Mask1             Register
  63          #define IF2MSK2            0x23                 //IF2 Mask2             Register
  64          #define IF2ARB1            0x24                 //IF2 Arbitration 1     Register
  65          #define IF2ARB2            0x25                 //IF2 Arbitration 2     Register
  66          #define IF2MSGC            0x26                 //IF2 Message Control   Register
  67          #define IF2DATA1           0x27                 //IF2 Data A1           Register
  68          #define IF2DATA2           0x28                 //IF2 Data A2           Register
  69          #define IF2DATB1           0x29                 //IF2 Data B1           Register
  70          #define IF2DATB2           0x2A                 //IF2 Data B2           Register
  71          ////////////////////////////////////////////////////////////////////////////////
  72          //Message Handler Registers
  73          ////////////////////////////////////////////////////////////////////////////////
  74          #define TRANSREQ1          0x40                 //Transmission Rest1 Register
  75          #define TRANSREQ2          0x41                 //Transmission Rest2 Register
  76          
  77          #define NEWDAT1            0x48                 //New Data 1            Register
  78          #define NEWDAT2            0x49                 //New Data 2            Register
  79          
  80          #define INTPEND1           0x50                 //Interrupt Pending 1   Register
  81          #define INTPEND2           0x51                 //Interrupt Pending 2   Register
  82          
  83          #define MSGVAL1            0x58                 //Message Valid 1       Register
  84          #define MSGVAL2            0x59                 //Message Valid 2       Register
  85          
  86          ////////////////////////////////////////////////////////////////////////////////
  87          //Global Variables
  88          ////////////////////////////////////////////////////////////////////////////////
  89          
  90          //#define QUENEUART 4
  91          //#define QUENECAN  8                           //两个缓存队列的数组大小,用常量表示,方便修改
  92                                                          //xdata最大可以64K,但是F040有4K+256B的内部RAM,所以此处xdata可取4K范围
  93                          //idata为内部256B快速寻址RAM区域    pdata为外部寻址空间   data为idata中的前128B   bdata是data中的16B
  94          
  95          char data MsgNum,status;
  96          unsigned char xdata CAN_Data[8],UART_Data[4],CAN_Datachannel[64];
  97          unsigned int data pp=0,able1=0,able2=0;
  98          unsigned int data ii,jjj=0;pcan=0,puart=0,puart1=0;canlength=0,func=0,pchanh=0,pchanl=0,channelable=0;
  99          bit bdata nexten=1;
 100          
 101          unsigned long data BDR;
 102          sbit LED = P1^3;
 103          sfr16 CAN0DAT = 0xD8;
 104          
 105          
 106          
 107          ////////////////////////////////////////////////////////////////////////////////
 108          // Function PROTOTYPES
 109          ////////////////////////////////////////////////////////////////////////////////
 110          
 111          // Initialize Message Object
 112          void clear_msg_objects (void);
 113          void init_msg_object_TX (char MsgNum,ID);
 114          void init_msg_object_RX (char MsgNum,ID);
 115          void start_CAN (void);
 116          void receive_data (char MsgNum);
 117          void CAN_trans (char MsgNum);
C51 COMPILER V7.50   MAIN                                                                  04/25/2008 10:51:19 PAGE 3   

 118          
 119          
 120          /************************************************************************************
 121          //  系统初始化功能子程序
 122          *************************************************************************************/
 123          /************************************************************************************
 124          //  系统初始化功能子程序
 125          *************************************************************************************/
 126          /***********************************************************************************
 127          * 函数名称:SYSCLK_Init;
 128          *
 129          * 函数功能描述:系统时钟初始化,使用外部22.1184MHz晶振作为时钟源,using the PLL;
 130          *                       This routine initializes the system clock to use an external 22.1184 MHz 
 131          *               crystal oscillator multiplied by a factor of 9/2 using the PLL as its 
 132          *               clock source. The resulting frequency is 22.1184 MHz * 8/2 = 88.45 MHz
 133          *              
 134          * 输入参数:none;
 135          *
 136          * 返回数据:none;
 137          *
 138          * 注意:    none;
 139          ************************************************************************************/
 140          
 141          void SYSCLK_Init (void)
 142          {
 143   1       
 144   1        int n;                        // local variable used in delay FOR loop.
 145   1        char data SFRPAGE_SAVE = SFRPAGE;     // Save Current SFR page
 146   1        SFRPAGE = CONFIG_PAGE;        // switch to config page to config oscillator
 147   1      
 148   1        OSCXCN  = 0x77;               // start external oscillator; 22.1 MHz Crystal
 149   1                                      // system clock is 22.1 MHz / 2 = 11.05 MHz
 150   1        for (n=0;n<255;n++);          // delay about 1ms
 151   1        while ((OSCXCN & 0x80) == 0); // wait for oscillator to stabilize
 152   1        CLKSEL |= 0x01;               // switch to external oscillator
 153   1        OSCICN = 0x00;                   // Disable the internal osc.
 154   1        SFRPAGE = SFRPAGE_SAVE;          // Restore SFR page
 155   1      
 156   1      }
 157          
 158          /***********************************************************************************
 159          * 函数名称:PORT_Init;
 160          *
 161          * 函数功能描述:配置端口初始化,配置交叉开关和端口;
 162          *              
 163          * 输入参数:none;
 164          *
 165          * 返回数据:none;
 166          *
 167          * 注意:    none;
 168          ************************************************************************************/
 169          void PORT_Init (void)
 170          {
 171   1              char data SFRPAGE_SAVE = SFRPAGE;    // Save Current SFR page
 172   1         
 173   1              SFRPAGE  = CONFIG_PAGE;        //Port SFR's on Configuration page
 174   1              XBR3     = 0x80;     // Configure CAN TX pin (CTX) as push-pull digital output
 175   1              XBR0   =   0x05;                    //设置XBR0
 176   1              XBR1   =   0x14;                    //设置XBR1
 177   1              XBR2   =   0x44;                    //打开交叉开关和弱上拉
 178   1              P0MDOUT = 0x10;                                         //设置P0口输出
 179   1              P1MDOUT = 0x00;                                         //设置P1口输出
C51 COMPILER V7.50   MAIN                                                                  04/25/2008 10:51:19 PAGE 4   

 180   1              P1|=0x08;
 181   1              P3MDOUT = 0xff;                                         //设置P3口输出
 182   1              P4MDOUT = 0xff;                                 //设置P4为输出口
 183   1              P5MDOUT = 0x00;                                 //设置P5为输入口
 184   1              P5 = 0xff;
 185   1              P6MDOUT = 0xff;                                 //设置P6为输出口
 186   1              P7MDOUT = 0x3b;                                 //设置P7为输出口,P7.2为数字输入
 187   1       

⌨️ 快捷键说明

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