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

📄 main.txt

📁 基于ARM的电梯控制程序
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -omain.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips main.c]

                          ARM

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  IRQ_UART0 PROC
;;;19     void  __irq IRQ_UART0(void)
;;;20     {     
000000  e92d500f          PUSH     {r0-r3,r12,lr}
000004  e59f02dc          LDR      r0,|L1.744|
000008  e5d00008          LDRB     r0,[r0,#8]
00000c  e200000f          AND      r0,r0,#0xf
000010  e3500004          CMP      r0,#4
000014  1a000002          BNE      |L1.36|
000018  e3a00001          MOV      r0,#1
00001c  e59f12c8          LDR      r1,|L1.748|
000020  e5c10000          STRB     r0,[r1,#0]  ; rcv_new
                  |L1.36|
000024  e59f02bc          LDR      r0,|L1.744|
000028  e5d00000          LDRB     r0,[r0,#0]
00002c  e59f12bc          LDR      r1,|L1.752|
000030  e5c10000          STRB     r0,[r1,#0]  ; UART0_Receive
000034  e5d10000          LDRB     r0,[r1,#0]  ; UART0_Receive
000038  ebfffffe          BL       UART0_SendByte
00003c  e59f12ac          LDR      r1,|L1.752|
000040  e5d10000          LDRB     r0,[r1,#0]  ; UART0_Receive
000044  ebfffffe          BL       SendoutputData
000048  e3a00000          MOV      r0,#0
00004c  e5000fd0          STR      r0,[r0,#-0xfd0]
000050  e8bd500f          POP      {r0-r3,r12,lr}
000054  e25ef004          SUBS     pc,lr,#4
;;;21        if( 0x04==(U0IIR&0x0F) )rcv_new = 1;// 设置接收到新的数据标志,必须读取U0IIR来清除中断
;;;22           
;;;23     	  UART0_Receive[0] = U0RBR;         // 读取FIFO的数据
;;;24           
;;;25     	  UART0_SendByte(UART0_Receive[0]);
;;;26     
;;;27     	  SendoutputData(UART0_Receive[0]);
;;;28     	  
;;;29     	VICVectAddr = 0x00;              	// 中断处理结束
;;;30     }  
                          ENDP

                  I2C_Init PROC
;;;37     void  I2C_Init(uint32 fi2c)
;;;38     {  if(fi2c>400000) fi2c = 400000;
000058  e92d4010          PUSH     {r4,lr}
00005c  e1a04000          MOV      r4,r0
000060  e59f028c          LDR      r0,|L1.756|
000064  e1540000          CMP      r4,r0
000068  9a000000          BLS      |L1.112|
00006c  e1a04000          MOV      r4,r0
                  |L1.112|
000070  e59f0280          LDR      r0,|L1.760|
000074  e5900000          LDR      r0,[r0,#0]
000078  e3c000f0          BIC      r0,r0,#0xf0
00007c  e3800050          ORR      r0,r0,#0x50
000080  e59f1270          LDR      r1,|L1.760|
000084  e5810000          STR      r0,[r1,#0]
000088  e1a01004          MOV      r1,r4
00008c  e59f0268          LDR      r0,|L1.764|
000090  ebfffffe          BL       __aeabi_uidivmod
000094  e2800001          ADD      r0,r0,#1
000098  e59f1260          LDR      r1,|L1.768|
00009c  e00100a0          AND      r0,r1,r0,LSR #1
0000a0  e59f125c          LDR      r1,|L1.772|
0000a4  e1c101b0          STRH     r0,[r1,#0x10]
0000a8  e1a01004          MOV      r1,r4
0000ac  e59f0248          LDR      r0,|L1.764|
0000b0  ebfffffe          BL       __aeabi_uidivmod
0000b4  e59f1244          LDR      r1,|L1.768|
0000b8  e00100a0          AND      r0,r1,r0,LSR #1
0000bc  e59f1240          LDR      r1,|L1.772|
0000c0  e1c101b4          STRH     r0,[r1,#0x14]
0000c4  e3a0002c          MOV      r0,#0x2c
0000c8  e5c10018          STRB     r0,[r1,#0x18]
0000cc  e3a00040          MOV      r0,#0x40
0000d0  e5c10000          STRB     r0,[r1,#0]
0000d4  e3a00000          MOV      r0,#0
0000d8  e5000ff4          STR      r0,[r0,#-0xff4]
0000dc  e3a00029          MOV      r0,#0x29
0000e0  e3a01000          MOV      r1,#0
0000e4  e5010e00          STR      r0,[r1,#-0xe00]
0000e8  e3a00000          MOV      r0,#0
0000ec  e5100ff0          LDR      r0,[r0,#-0xff0]
0000f0  e3800c02          ORR      r0,r0,#0x200
0000f4  e5010ff0          STR      r0,[r1,#-0xff0]
0000f8  e8bd4010          POP      {r4,lr}
0000fc  e12fff1e          BX       lr
;;;39     
;;;40        PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 设置I2C控制口有效
;;;41     
;;;42        I2SCLH = (Fpclk/fi2c + 1) / 2;	// 设置I2C时钟为fi2c
;;;43        I2SCLL = (Fpclk/fi2c) / 2;
;;;44        I2CONCLR = 0x2C;
;;;45        I2CONSET = 0x40;					// 使能主I2C
;;;46        
;;;47        /* 设置I2C中断允许 */
;;;48        VICIntSelect = 0x00000000;		// 设置所有通道为IRQ中断
;;;49        VICVectCntl0 = 0x29;				// I2C通道分配到IRQ slot 0
;;;50        //VICVectAddr0 = (int)IRQ_I2C;	    // 设置I2C中断向量地址	
;;;51        VICIntEnable |= 0x0200;           // 使能I2C中断 
;;;52     }
                          ENDP

                  open PROC
;;;60     void open(void)
;;;61     {
000100  e92d4010          PUSH     {r4,lr}
000104  e3a020f6          MOV      r2,#0xf6
000108  e3a010a1          MOV      r1,#0xa1
00010c  e3a00080          MOV      r0,#0x80
000110  ebfffffe          BL       Display
000114  e3a020e7          MOV      r2,#0xe7
000118  e3a010b5          MOV      r1,#0xb5
00011c  e3a00081          MOV      r0,#0x81
000120  ebfffffe          BL       Display
000124  e3a020dd          MOV      r2,#0xdd
000128  e3a010cc          MOV      r1,#0xcc
00012c  e3a00082          MOV      r0,#0x82
000130  ebfffffe          BL       Display
000134  e3a020d8          MOV      r2,#0xd8
000138  e3a010bf          MOV      r1,#0xbf
00013c  e3a00083          MOV      r0,#0x83
000140  ebfffffe          BL       Display
000144  e3a020c6          MOV      r2,#0xc6
000148  e3a010d6          MOV      r1,#0xd6
00014c  e3a00084          MOV      r0,#0x84
000150  ebfffffe          BL       Display
000154  e3a020b5          MOV      r2,#0xb5
000158  e3a010cf          MOV      r1,#0xcf
00015c  e3a00085          MOV      r0,#0x85
000160  ebfffffe          BL       Display
000164  e3a020b3          MOV      r2,#0xb3
000168  e3a010cd          MOV      r1,#0xcd
00016c  e3a00086          MOV      r0,#0x86
000170  ebfffffe          BL       Display
000174  e3a020f6          MOV      r2,#0xf6
000178  e3a010a1          MOV      r1,#0xa1
00017c  e3a00087          MOV      r0,#0x87
000180  ebfffffe          BL       Display
000184  e3a020f6          MOV      r2,#0xf6
000188  e3a010a1          MOV      r1,#0xa1
00018c  e3a00090          MOV      r0,#0x90
000190  ebfffffe          BL       Display
000194  e3a020bc          MOV      r2,#0xbc
000198  e3a010b5          MOV      r1,#0xb5
00019c  e3a00091          MOV      r0,#0x91
0001a0  ebfffffe          BL       Display
0001a4  e3a020a6          MOV      r2,#0xa6
0001a8  e3a010ca          MOV      r1,#0xca
0001ac  e3a00092          MOV      r0,#0x92
0001b0  ebfffffe          BL       Display
0001b4  e3a020ba          MOV      r2,#0xba
0001b8  e3a010a3          MOV      r1,#0xa3
0001bc  e3a00093          MOV      r0,#0x93
0001c0  ebfffffe          BL       Display
0001c4  e3a020d4          MOV      r2,#0xd4
0001c8  e3a010d5          MOV      r1,#0xd5
0001cc  e3a00094          MOV      r0,#0x94
0001d0  ebfffffe          BL       Display
0001d4  e3a020fa          MOV      r2,#0xfa
0001d8  e3a010b9          MOV      r1,#0xb9
0001dc  e3a00095          MOV      r0,#0x95
0001e0  ebfffffe          BL       Display
0001e4  e3a020fc          MOV      r2,#0xfc
0001e8  e3a010be          MOV      r1,#0xbe
0001ec  e3a00096          MOV      r0,#0x96
0001f0  ebfffffe          BL       Display
0001f4  e3a020f6          MOV      r2,#0xf6
0001f8  e3a010a1          MOV      r1,#0xa1
0001fc  e3a00097          MOV      r0,#0x97
000200  ebfffffe          BL       Display
000204  e3a020f6          MOV      r2,#0xf6
000208  e3a010a1          MOV      r1,#0xa1
00020c  e3a00088          MOV      r0,#0x88
000210  ebfffffe          BL       Display
000214  e3a020e8          MOV      r2,#0xe8
000218  e3a010c9          MOV      r1,#0xc9
00021c  e3a00089          MOV      r0,#0x89
000220  ebfffffe          BL       Display
000224  e3a020c6          MOV      r2,#0xc6
000228  e3a010bc          MOV      r1,#0xbc
00022c  e3a0008a          MOV      r0,#0x8a
000230  ebfffffe          BL       Display
000234  e3a020ba          MOV      r2,#0xba
000238  e3a010a3          MOV      r1,#0xa3
00023c  e3a0008b          MOV      r0,#0x8b
000240  ebfffffe          BL       Display
000244  e3a020d6          MOV      r2,#0xd6
000248  e3a010c1          MOV      r1,#0xc1
00024c  e3a0008c          MOV      r0,#0x8c
000250  ebfffffe          BL       Display
000254  e3a020ea          MOV      r2,#0xea
000258  e3a010ba          MOV      r1,#0xba
00025c  e3a0008d          MOV      r0,#0x8d
000260  ebfffffe          BL       Display
000264  e3a020c9          MOV      r2,#0xc9
000268  e3a010b7          MOV      r1,#0xb7
00026c  e3a0008e          MOV      r0,#0x8e
000270  ebfffffe          BL       Display
000274  e3a020f6          MOV      r2,#0xf6
000278  e3a010a1          MOV      r1,#0xa1
00027c  e3a0008f          MOV      r0,#0x8f
000280  ebfffffe          BL       Display
000284  e3a02010          MOV      r2,#0x10
000288  e28f1078          ADR      r1,|L1.776|
00028c  e3a00098          MOV      r0,#0x98
000290  ebfffffe          BL       DispChars
000294  e8bd4010          POP      {r4,lr}
000298  e12fff1e          BX       lr
;;;62        Display(0x80,0xA1,0xF6);//口
;;;63        Display(0x81,0xB5,0xE7);//电
;;;64        Display(0x82,0xCC,0xDD);//梯
;;;65        Display(0x83,0xBF,0xD8);//控
;;;66        Display(0x84,0xD6,0xC6);//制
;;;67        Display(0x85,0xCF,0xB5);//系
;;;68        Display(0x86,0xCD,0xB3);//统
;;;69        Display(0x87,0xA1,0xF6);//口
;;;70        
;;;71        Display(0x90,0xA1,0xF6);//口
;;;72        Display(0x91,0xB5,0xBC);//导
;;;73        Display(0x92,0xCA,0xA6);//师
;;;74        Display(0x93,0xA3,0xBA);//:
;;;75        Display(0x94,0xD5,0xD4);//赵
;;;76        Display(0x95,0xB9,0xFA);//国
;;;77        Display(0x96,0xBE,0xFC);//军
;;;78        Display(0x97,0xA1,0xF6);//口
;;;79        
;;;80        Display(0x88,0xA1,0xF6);//口
;;;81        Display(0x89,0xC9,0xE8);//设
;;;82        Display(0x8a,0xBC,0xC6);//计
;;;83        Display(0x8b,0xA3,0xBA);//:
;;;84        Display(0x8c,0xc1,0xd6);//林
;;;85        Display(0x8d,0xBA,0xEA);//宏
;;;86        Display(0x8e,0xB7,0xC9);//飞
;;;87        Display(0x8f,0xA1,0xF6);//口
;;;88        
;;;89        DispChars(0x98,(uint8 *)"ThankYouForUsing",0x10);
;;;90     }
                          ENDP

                  main PROC
;;;96     int main(void)
;;;97     {  
00029c  e92d4010          PUSH     {r4,lr}
0002a0  ebfffffe          BL       IOInit
0002a4  e3a00000          MOV      r0,#0
0002a8  ebfffffe          BL       RcvinputData
0002ac  e59f1068          LDR      r1,|L1.796|
0002b0  e1c100b0          STRH     r0,[r1,#0]  ; IO_input
0002b4  ebfffffe          BL       InitLcm
0002b8  ebfffffe          BL       UART0_Ini
0002bc  ebfffffe          BL       open
0002c0  e3a00055          MOV      r0,#0x55
0002c4  ebfffffe          BL       UART0_SendByte
0002c8  e59f0050          LDR      r0,|L1.800|
0002cc  ebfffffe          BL       I2C_Init
0002d0  e59f1044          LDR      r1,|L1.796|
0002d4  e1d110b0          LDRH     r1,[r1,#0]  ; IO_input
0002d8  e20100ff          AND      r0,r1,#0xff
0002dc  ebfffffe          BL       UART0_SendByte
0002e0  e1a00000          MOV      r0,r0
                  |L1.740|
0002e4  eafffffe          B        |L1.740|
                  |L1.744|
0002e8  e000c000          DCD      0xe000c000
                  |L1.748|
0002ec  00000000          DCD      rcv_new
                  |L1.752|
0002f0  00000000          DCD      UART0_Receive
                  |L1.756|
0002f4  00061a80          DCD      0x00061a80
                  |L1.760|
0002f8  e002c000          DCD      0xe002c000
                  |L1.764|
0002fc  00a8c000          DCD      0x00a8c000
                  |L1.768|
000300  0000ffff          DCD      0x0000ffff
                  |L1.772|
000304  e001c000          DCD      0xe001c000
                  |L1.776|
000308  6e616854          DCB      "Than"
00030c  756f596b          DCB      "kYou"
000310  55726f46          DCB      "ForU"
000314  676e6973          DCB      "sing"
000318  00000000          DCB      "\0\0\0\0"
                  |L1.796|
00031c  00000000          DCD      IO_input
                  |L1.800|
000320  00004e20          DCD      0x00004e20
;;;98        IOInit();
;;;99        IO_input=RcvinputData(0);//IO口输出全为0,获取输入IO值。
;;;100       InitLcm();
;;;101       UART0_Ini();
;;;102       open();//开机信息显示
;;;103       UART0_SendByte(0x55);
;;;104       I2C_Init(20000);
;;;105       
;;;106       UART0_SendByte(IO_input);
;;;107       while(1)
;;;108        {;
;;;109    	  }
;;;110       
;;;111    }
                          ENDP



                          AREA ||.data||, DATA, ALIGN=1

                  ||.data$0||
                  UART0_Receive
                          DCB      0x00,0x00,0x00,0x00
                          DCDU     0x00000000
                  rcv_new
                          DCB      0x00
                          DCB      0x00
                  IO_input
                          DCB      0x00,0x00

⌨️ 快捷键说明

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