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

📄 main.lst

📁 基于ARM的电梯控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.40a,  main                                                                 19/07/07  01:23:00  PAGE 1   


ARM COMPILER V2.40a, COMPILATION OF MODULE main
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\ARM\BIN\CA.exe main.c THUMB DEBUG TABS(4) 

stmt  level    source

    1          /****************************************************************************
    2          * 文件名:
    3          * 功能:
    4          *      
    5          * 说明:
    6          ****************************************************************************/
    7          #include "config.h"
    8          
    9          /************************     全局变量声明区   ************************/ 
   10          uint16 IO_input;
   11          uint8 UART0_Receive[8]={0};
   12          uint8 rcv_new = 0;
   13          /****************************************************************************
   14          * 名称:IRQ_UART0()
   15          * 功能:串口UART0接收中断。
   16          * 入口参数:无
   17          * 出口参数:无
   18          ****************************************************************************/
   19          void   IRQ_UART0(void)__irq
   20          {     
   21   1         if( 0x04==(U0IIR&0x0F) )rcv_new = 1;// 设置接收到新的数据标志,必须读取U0IIR来清除中断
   22   1            
   23   1            UART0_Receive[0] = U0RBR;         // 读取FIFO的数据
   24   1            
   25   1            UART0_SendByte(UART0_Receive[0]);
   26   1      
   27   1            SendoutputData(UART0_Receive[0]);
   28   1            
   29   1          VICVectAddr = 0x00;                 // 中断处理结束
   30   1      }  
   31          /****************************************************************************
   32          * 名称:I2C_Init()
   33          * 功能:主模式I2C初始化,包括初始化其中断为向量IRQ中断。
   34          * 入口参数:fi2c        初始化I2C总线速率,最大值为400K
   35          * 出口参数:无
   36          ****************************************************************************/
   37          void  I2C_Init(uint32 fi2c)
   38          {  if(fi2c>400000) fi2c = 400000;
   39   1      
   40   1         PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 设置I2C控制口有效
   41   1      
   42   1         I2SCLH = (Fpclk/fi2c + 1) / 2;   // 设置I2C时钟为fi2c
   43   1         I2SCLL = (Fpclk/fi2c) / 2;
   44   1         I2CONCLR = 0x2C;
   45   1         I2CONSET = 0x40;                 // 使能主I2C
   46   1         
   47   1         /* 设置I2C中断允许 */
   48   1         VICIntSelect = 0x00000000;       // 设置所有通道为IRQ中断
   49   1         VICVectCntl0 = 0x29;             // I2C通道分配到IRQ slot 0
   50   1         VICVectAddr0 = (int)IRQ_I2C;     // 设置I2C中断向量地址  
   51   1         VICIntEnable |= 0x0200;           // 使能I2C中断 
   52   1      }
   53          
   54          /****************************************************************************
   55          * 名称:开机画面
   56          * 功能:显示信息。
   57          * 入口参数:无
   58          * 出口参数:无
   59          ****************************************************************************/
ARM COMPILER V2.40a,  main                                                                 19/07/07  01:23:00  PAGE 2   

   60          void open(void)
   61          {
   62   1         Display(0x80,0xA1,0xF6);//口
   63   1         Display(0x81,0xB5,0xE7);//电
   64   1         Display(0x82,0xCC,0xDD);//梯
   65   1         Display(0x83,0xBF,0xD8);//控
   66   1         Display(0x84,0xD6,0xC6);//制
   67   1         Display(0x85,0xCF,0xB5);//系
   68   1         Display(0x86,0xCD,0xB3);//统
   69   1         Display(0x87,0xA1,0xF6);//口
   70   1         
   71   1         Display(0x90,0xA1,0xF6);//口
   72   1         Display(0x91,0xB5,0xBC);//导
   73   1         Display(0x92,0xCA,0xA6);//师
   74   1         Display(0x93,0xA3,0xBA);//:
   75   1         Display(0x94,0xD5,0xD4);//
   76   1         Display(0x95,0xB9,0xFA);//
   77   1         Display(0x96,0xBE,0xFC);//
   78   1         Display(0x97,0xA1,0xF6);//口
   79   1         
   80   1         Display(0x88,0xA1,0xF6);//口
   81   1         Display(0x89,0xC9,0xE8);//设
   82   1         Display(0x8a,0xBC,0xC6);//计
   83   1         Display(0x8b,0xA3,0xBA);//:
   84   1         Display(0x8c,0xc1,0xd6);//
   85   1         Display(0x8d,0xBA,0xEA);//
   86   1         Display(0x8e,0xB7,0xC9);//
   87   1         Display(0x8f,0xA1,0xF6);//口
   88   1         
   89   1         DispChars(0x98,(uint8 *)"ThankYouForUsing",0x10);
   90   1      }
   91          /****************************************************************************
   92          * 名称:main()
   93          * 功能:
   94          ****************************************************************************/
   95          //  TargetResetInit();
   96          int main(void)
   97          {  
   98   1         IOInit();
   99   1         IO_input=RcvinputData(0);//IO口输出全为0,获取输入IO值。
  100   1         InitLcm();
  101   1         UART0_Ini();
  102   1         open();//开机信息显示
  103   1         UART0_SendByte(0x55);
  104   1         I2C_Init(20000);
  105   1         
  106   1         UART0_SendByte(IO_input);
  107   1         while(1)
  108   1          {;
  109   2            }
  110   1         
  111   1      }
  112          
ARM COMPILER V2.40a,  main                                                                 19/07/07  01:23:00  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (DispChars?T)
 EXTERN CODE16 (Display?T)
 EXTERN CODE16 (InitLcm?T)
 EXTERN CODE32 (IRQ_I2C?A)
 EXTERN CODE16 (IOInit?T)
 EXTERN CODE16 (SendoutputData?T)
 EXTERN CODE16 (RcvinputData?T)
 EXTERN CODE16 (UART0_Ini?T)
 EXTERN CODE16 (UART0_SendByte?T)
 EXTERN CODE32 (UART0_SendByte?A)
 EXTERN CODE32 (SendoutputData?A)
 EXTERN CODE16 (?C?UDIV?T)
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         I2C_Init?T
 PUBLIC         IRQ_UART0?A
 PUBLIC         open?T
 PUBLIC         main
 PUBLIC         IO_input
 PUBLIC         UART0_Receive
 PUBLIC         rcv_new



*** DATA SEGMENT '?CON?main':
 00000000          ??S_1:
 00000000            DB          'ThankYouForUsing',0x00

*** DATA SEGMENT '?DT0?main':
 00000000          IO_input:
 00000000            DS          2
 00000002          UART0_Receive:
 00000002           BEGIN_INIT
 00000002  00        DB          0x0
 00000003            SPACE       7
 0000000A           END_INIT
 0000000A          rcv_new:
 0000000A           BEGIN_INIT
 0000000A  00        DB          0x0
 0000000B           END_INIT



*** CODE SEGMENT '?PR?IRQ_UART0?A?main':
   19: void   IRQ_UART0(void)__irq
 00000000  E92D5F0F  STMDB       R13!,{R0-R3,R8-R12,LR}
   21:    if( 0x04==(U0IIR&0x0F) )rcv_new = 1;// 设置接收到新的数据标志,必须读取U0IIR来清除中断
 00000004  E5100000  LDR         R0,=0xE000C008
 00000008  E5900000  LDR         R0,[R0,#0x0]
 0000000C  E200000F  AND         R0,R0,#0x000F
 00000010  E3500004  CMP         R0,#0x0004
 00000014  1A000002  BNE         L_1  ; Targ=0x24
 00000018  E3A01001  MOV         R1,#0x1
 0000001C  E5100000  LDR         R0,=rcv_new ; rcv_new
 00000020  E5C01000  STRB        R1,[R0,#0x0] ; rcv_new
 00000024          L_1:
   23:       UART0_Receive[0] = U0RBR;         // 读取FIFO的数据
 00000024  E5100000  LDR         R0,=0xE000C000
 00000028  E5D01000  LDRB        R1,[R0,#0x0]
 0000002C  E5100000  LDR         R0,=UART0_Receive ; UART0_Receive
 00000030  E5C01000  STRB        R1,[R0,#0x0] ; UART0_Receive
   25:       UART0_SendByte(UART0_Receive[0]);
 00000034  E5100000  LDR         R0,=UART0_Receive ; UART0_Receive
 00000038  E5D00000  LDRB        R0,[R0,#0x0] ; UART0_Receive
 0000003C  EBFFFFEF  BL          UART0_SendByte?A  ; Targ=0x0
   27:       SendoutputData(UART0_Receive[0]);
ARM COMPILER V2.40a,  main                                                                 19/07/07  01:23:00  PAGE 4   

 00000040  E5100000  LDR         R0,=UART0_Receive ; UART0_Receive
 00000044  E5D00000  LDRB        R0,[R0,#0x0] ; UART0_Receive
 00000048  EBFFFFEC  BL          SendoutputData?A  ; Targ=0x0
   29:     VICVectAddr = 0x00;                 // 中断处理结束
 0000004C  E3A01000  MOV         R1,#0x0
 00000050  E5100000  LDR         R0,=0xFFFFF030
 00000054  E5801000  STR         R1,[R0,#0x0]
   30: }  
 00000058  E8BD5F0F  LDMIA       R13!,{R0-R3,R8-R12,LR}
 0000005C  E25EF004  SUBS        R15,R14,#0x0004
 00000060          ENDP ; 'IRQ_UART0?A'


*** CODE SEGMENT '?PR?I2C_Init?T?main':
   37: void  I2C_Init(uint32 fi2c)
 00000000  B500      PUSH        {LR}
 00000002  1C03      MOV         R3,R0 ; fi2c
 00000004  ---- Variable 'fi2c' assigned to Register 'R3' ----
   38: {  if(fi2c>400000) fi2c = 400000;
 00000004  1C18      MOV         R0,R3 ; fi2c
 00000006  4800      LDR         R1,=0x61A80
 00000008  4288      CMP         R0,R1 ; fi2c
 0000000A  D900      BLS         L_2  ; T=0x0000000E
 0000000C  4800      LDR         R3,=0x61A80
 0000000E          L_2:
   40:    PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 设置I2C控制口有效
 0000000E  4800      LDR         R0,=0xE002C000
 00000010  6801      LDR         R1,[R0,#0x0]
 00000012  20F0      MOV         R0,#0xF0
 00000014  4381      BIC         R1,R0
 00000016  2050      MOV         R0,#0x50
 00000018  4301      ORR         R1,R0
 0000001A  4800      LDR         R0,=0xE002C000
 0000001C  6001      STR         R1,[R0,#0x0]
   42:    I2SCLH = (Fpclk/fi2c + 1) / 2;   // 设置I2C时钟为fi2c
 0000001E  1C19      MOV         R1,R3 ; fi2c
 00000020  4800      LDR         R0,=0xA8C000
 00000022  F7FF      BL          ?C?UDIV?T  ; T=0x0001  (1) ; ?C?UDIV?T
 00000024  FFED      BL          ?C?UDIV?T  ; T=0x0001  (2) ; ?C?UDIV?T
 00000026  1C08      MOV         R0,R1
 00000028  1C02      MOV         R2,R0
 0000002A  3201      ADD         R2,#0x1
 0000002C  0852      LSR         R2,R2,#0x1
 0000002E  4800      LDR         R1,=0xE001C010
 00000030  800A      STRH        R2,[R1,#0x0]
   43:    I2SCLL = (Fpclk/fi2c) / 2;
 00000032  0841      LSR         R1,R0,#0x1
 00000034  4800      LDR         R0,=0xE001C014
 00000036  8001      STRH        R1,[R0,#0x0]
   44:    I2CONCLR = 0x2C;
 00000038  212C      MOV         R1,#0x2C

⌨️ 快捷键说明

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