📄 main.lst
字号:
ARM COMPILER V2.53, Main 03/03/09 22:31:59 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE Main
OBJECT MODULE PLACED IN Main.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe Main.c THUMB DEBUG TABS(4)
stmt level source
1 //ARM7 实验1 GPIO 完成时间2009 2 25
2 //程序由周立功修改而来
3 //Adam
4
5
6 #include <LPC213x.h>
7
8 #define uint32 unsigned int
9
10 #define BEEP 1 << 7 // P0.7控制蜂鸣器,低电平蜂鸣
11
12 const uint32 LED1 = (1 << 18); // P1.18控制LED1,低电平点亮
13
14 /* LED8~LED1 8个LED分别由P1.25~P1.18控制 */
15 const uint32 LEDS8 = (0xFF << 18); // P1[25:18]控制LED8~LED1,低电平点亮
16 const uint32 KEY1 = 1 << 16; // P0.16连接KEY1AD
17
18 //*******************************************************************************************************
-**
19 //** 函数名称 :DelayNS()
20 //** 函数功能 :长软件延时
21 //** 入口参数 :dly 延时参数,值越大,延时越久
22 //** 出口参数 :无
23 //*******************************************************************************************************
-**
24
25 void DelayNS (uint32 dly)
26 {
27 1 uint32 i;
28 1
29 1 for ( ; dly>0; dly--)
30 1 for (i=0; i<50000; i++);
31 1 }
32
33 /* 流水灯花样,低电平点亮,注意调用时候用了取反操作 */
34 const uint32 LED_TBL[] = {
35 0x00, 0xFF, // 全部熄灭后,再全部点亮
36 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, // 依次逐个点亮
37 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐个叠加
38 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐个递减
39 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 两个靠拢后分开
40 0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 从两边叠加后递减
41 };
42
43 int main (void)
44 {
45 1 unsigned int i=0,j=0;
46 1
47 1 PINSEL0 = 0x00000000; // 设置管脚连接GPIO
48 1 IO0DIR = BEEP; // 设置BEEP控制口为输出
49 1 PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接GPIO
50 1 IO1DIR |= LED1; // 设置LED1控制口为输出
51 1
52 1 //单个IO口控制实验
53 1
54 1
55 1 for(i=0;i<3;i++)
56 1 {
57 2 IO0SET = BEEP; // BEEP停止蜂鸣
ARM COMPILER V2.53, Main 03/03/09 22:31:59 PAGE 2
58 2 IO1CLR = LED1; // LED1点亮
59 2 DelayNS(30);
60 2 IO0CLR = BEEP; // BEEP 蜂鸣
61 2 IO1SET = LED1; // LED1熄灭
62 2 DelayNS(15);
63 2 }
64 1 IO0SET = BEEP; // BEEP停止蜂鸣
65 1
66 1 //算法流水灯
67 1 IO1DIR = LEDS8; // 设置LED1控制口为输出
68 1 for (j=0; j<2; j++)
69 1 {
70 2 for (i=0; i<8; i++)
71 2 { /* 流水灯花样显示 */
72 3 IO1SET = ~(LEDS8 & (7 << (18+i)));
73 3 DelayNS(10);
74 3 IO1CLR = LEDS8 & (7 << (18+i));
75 3 DelayNS(10);
76 3 }
77 2
78 2 }
79 1
80 1 //数据流水灯
81 1 for (j=0; j<2; j++)
82 1 {
83 2 for (i=0; i<42; i++)
84 2 { /* 流水灯花样显示 */
85 3 IO1SET = ~((LED_TBL[i]) << 18);
86 3 DelayNS(10);
87 3 IO1CLR = ((LED_TBL[i]) << 18);
88 3 DelayNS(10);
89 3 }
90 2 }
91 1
92 1 //IO口取反实验
93 1 for (j=0; j<4; j++)
94 1 {
95 2 if ((IO1SET&LED1)==0)
96 2 IO1SET=LED1;
97 2 else
98 2 IO1CLR=LED1;
99 2 DelayNS(40);
100 2
101 2 }
102 1
103 1 //特殊方式控制IO PHILIPS不推荐
104 1 for (j=0; j<10; j++)
105 1 {
106 2 IO1PIN = 0xA5 << 18; // 点亮LED1,LED3,LED5,LED7,其余熄灭
107 2 DelayNS(50);
108 2 IO1PIN = 0x5A << 18; // 点亮LED2,LED4,LED6,LED8,其余熄灭
109 2 DelayNS(10);
110 2 }
111 1
112 1 //特殊方式控制IO 配合读取IO口寄存器的值 PHILIPS不推荐
113 1 for (j=0; j<30; j++)
114 1 {
115 2 IO1PIN = ~IO1SET; // 点亮LED1,LED3,LED5,LED7,其余熄灭
116 2 DelayNS(10);
117 2 }
118 1
119 1 //按键实验 按下蜂鸣器响
120 1 while (1)
121 1 {
122 2 if ((IO0PIN & KEY1) == 0) IO0CLR = BEEP; // 如果KEY1按下,蜂鸣器鸣叫
123 2 else IO0SET = BEEP; // 松开则停止蜂鸣
ARM COMPILER V2.53, Main 03/03/09 22:31:59 PAGE 3
124 2 }
125 1
126 1
127 1 return 0;
128 1 }
ARM COMPILER V2.53, Main 03/03/09 22:31:59 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC DelayNS?T
PUBLIC main
PUBLIC LED1
PUBLIC LEDS8
PUBLIC KEY1
PUBLIC LED_TBL
*** DATA SEGMENT '?CON?Main':
00000000 LED1:
00000000 BEGIN_INIT
00000000 00040000 DD 0x40000
00000004 END_INIT
00000004 LEDS8:
00000004 BEGIN_INIT
00000004 03FC0000 DD 0x3FC0000
00000008 END_INIT
00000008 KEY1:
00000008 BEGIN_INIT
00000008 00010000 DD 0x10000
0000000C END_INIT
0000000C LED_TBL:
0000000C BEGIN_INIT
0000000C 00000000 DD 0x0
00000010 000000FF DD 0xFF
00000014 00000001 DD 0x1
00000018 00000002 DD 0x2
0000001C 00000004 DD 0x4
00000020 00000008 DD 0x8
00000024 00000010 DD 0x10
00000028 00000020 DD 0x20
0000002C 00000040 DD 0x40
00000030 00000080 DD 0x80
00000034 00000001 DD 0x1
00000038 00000003 DD 0x3
0000003C 00000007 DD 0x7
00000040 0000000F DD 0xF
00000044 0000001F DD 0x1F
00000048 0000003F DD 0x3F
0000004C 0000007F DD 0x7F
00000050 000000FF DD 0xFF
00000054 000000FF DD 0xFF
00000058 0000007F DD 0x7F
0000005C 0000003F DD 0x3F
00000060 0000001F DD 0x1F
00000064 0000000F DD 0xF
00000068 00000007 DD 0x7
0000006C 00000003 DD 0x3
00000070 00000001 DD 0x1
00000074 00000081 DD 0x81
00000078 00000042 DD 0x42
0000007C 00000024 DD 0x24
00000080 00000018 DD 0x18
00000084 00000018 DD 0x18
00000088 00000024 DD 0x24
0000008C 00000042 DD 0x42
00000090 00000081 DD 0x81
00000094 00000081 DD 0x81
00000098 000000C3 DD 0xC3
0000009C 000000E7 DD 0xE7
ARM COMPILER V2.53, Main 03/03/09 22:31:59 PAGE 5
000000A0 000000FF DD 0xFF
000000A4 000000FF DD 0xFF
000000A8 000000E7 DD 0xE7
000000AC 000000C3 DD 0xC3
000000B0 00000081 DD 0x81
000000B4 END_INIT
*** CODE SEGMENT '?PR?DelayNS?T?Main':
25: void DelayNS (uint32 dly)
00000000 ---- Variable 'dly' assigned to Register 'R0' ----
26: {
00000000 ; SCOPE-START
29: for ( ; dly>0; dly--)
00000000 E006 B L_3 ; T=0x00000010
30: for (i=0; i<50000; i++);
00000002 L_10:
00000002 2100 MOV R1,#0x0
00000004 ---- Variable 'i' assigned to Register 'R1' ----
00000004 L_6:
00000004 3101 ADD R1,#0x1
00000006 1C0A MOV R2,R1 ; i
00000008 4800 LDR R3,=0xC350
0000000A 429A CMP R2,R3 ; i
0000000C D3FA BCC L_6 ; T=0x00000004
0000000E 3801 SUB R0,#0x1
00000010 L_3:
00000010 1C01 MOV R1,R0 ; dly
00000012 2900 CMP R1,#0x0 ; dly
00000014 D8F5 BHI L_10 ; T=0x00000002
00000016 ; SCOPE-END
31: }
00000016 4770 BX R14
00000018 ENDP ; 'DelayNS?T'
*** CODE SEGMENT '?PR?main?Main':
43: int main (void)
00000000 B500 PUSH {LR}
44: {
00000002 ; SCOPE-START
45: unsigned int i=0,j=0;
00000002 2000 MOV R0,#0x0
00000004 1C05 MOV R5,R0 ; i
00000006 ---- Variable 'i' assigned to Register 'R5' ----
00000006 1C04 MOV R4,R0 ; j
00000008 ---- Variable 'j' assigned to Register 'R4' ----
47: PINSEL0 = 0x00000000; // 设置管脚连接GPIO
00000008 2200 MOV R2,#0x0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -