📄 test.lst
字号:
ARM COMPILER V2.42, test 20/12/05 15:29:58 PAGE 1
ARM COMPILER V2.42, COMPILATION OF MODULE test
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe test.c THUMB BROWSE DEBUG TABS(4)
stmt level source
1 //#include <at91sam7s64.h>
2 #include <sam7s.h> //自定义的S64寄存器名函数
3 #include <delay.h> //自定义的DELAY函数
4
5
6 #define LCD_RS 8
7 #define LCD_RW 9
8 #define LCD_EN 10
9 //#define LCD_BACK_LIGHT PORTC.2
10
11
12 void LCD_init (void);
13 void LCD_en_write (void);
14 void LCD_write_char (uchar command,uchar data);
15
16
17 void io_set(uchar pin) //单个IO口置位函数
18 {
19 1 ulong io_data=1;
20 1 io_data=io_data<<pin;
21 1 PIO_SODR=io_data; //PIO_ODSR为IO线上置位寄存器,1有效,0无
22 1 }
23
24
25 void io_clear(uchar pin) //单个IO口清零函数
26 {
27 1 ulong io_data=1;
28 1 io_data=io_data<<pin;
29 1 PIO_CODR=io_data; //PIO_CODR为IO线上清零寄存器,1有效,0无
30 1 }
31
32
33 void LCD_init(void) //液晶初始化
34 {
35 1 unsigned char i=0;
36 1 delay_nms(1000);
37 1 for(i=0;i<5;i++)
38 1 {
39 2 LCD_write_char(1,0x38); //8位显示,5*7点阵字符
40 2 delay_nms(40);
41 2 }
42 1
43 1 LCD_write_char(1,0x06); //8位显示,5*7点阵字符
44 1 delay_nms(40);
45 1
46 1
47 1 LCD_write_char(1,0x01); //清屏
48 1 delay_nms(40);
49 1
50 1 // delay_nms(100);
51 1 LCD_write_char(1,0x0f); //显示开,光标开,闪烁开
52 1 delay_nms(40);
53 1
54 1 }
55
56 void LCD_write_char(uchar command,uchar data) // 写数据
57 {
58 1 uchar i=0,temp=0;
59 1 delay_nus(50);
ARM COMPILER V2.42, test 20/12/05 15:29:58 PAGE 2
60 1
61 1 if(command==0) io_set(LCD_RS); //RS=1
62 1 else io_clear(LCD_RS);
63 1
64 1 for(i=0;i<8;i++)
65 1 {
66 2
67 2 if(data&1) {io_set(i+24);} //把相应的IO口置位或者清零
68 2 else {io_clear(i+24);}
69 2 data=data>>1;
70 2 } //写入8位控制字
71 1 // LCD_DATA_PORT=data; //写8位控制字
72 1 delay_nus(20);
73 1 // LCD_en_write();
74 1 io_clear(LCD_EN);
75 1 delay_nus(200);
76 1 io_set(LCD_EN);
77 1 delay_nus(200);
78 1
79 1 }
80
81 void LCD_set_xy( unsigned char x, unsigned char y ) //写地址函数
82 {
83 1 unsigned char address;
84 1 if (y == 0) address = 0x80 + x;
85 1 else
86 1 address = 0xc0 + x;
87 1 LCD_write_char(1,address);
88 1 }
89
90
91
92 void main(void)
93 {
94 1 uint a=0;
95 1 PMC_PCER=0x0F; //PMC外设时钟使能
96 1 PIO_PER=0xffffffff; //PIOA0-31作为I/O使用
97 1 PIO_OER=0xffffffff; //I/O输出使能
98 1 delay_nus(10);
99 1 LCD_init(); //1602初始化
100 1
101 1 while(1)
102 1 {
103 2 LCD_set_xy(0,0);
104 2 LCD_write_char(0,'m');
105 2 LCD_write_char(0,'y');
106 2 LCD_write_char(0,'h');
107 2 LCD_write_char(0,'k');
108 2 LCD_write_char(0,'0');
109 2 LCD_write_char(0,'0');
110 2 LCD_write_char(0,'7');
111 2
112 2
113 2 delay_nms(1000);
114 2 LCD_set_xy(4,1);
115 2 LCD_write_char(0,'m');
116 2 LCD_write_char(0,'c');
117 2 LCD_write_char(0,'u');
118 2 LCD_write_char(0,'z');
119 2 LCD_write_char(0,'o');
120 2 LCD_write_char(0,'n');
121 2 LCD_write_char(0,'e');
122 2 LCD_write_char(0,'.');
123 2 LCD_write_char(0,'c');
124 2 LCD_write_char(0,'o');
125 2 LCD_write_char(0,'m');
ARM COMPILER V2.42, test 20/12/05 15:29:58 PAGE 3
126 2
127 2 delay_nms(1000);
128 2 }
129 1
130 1
131 1
132 1 }
ARM COMPILER V2.42, test 20/12/05 15:29:58 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN NUMBER (__startup)
*** PUBLICS:
PUBLIC delay_1us?T
PUBLIC delay_nus?T
PUBLIC delay_1ms?T
PUBLIC delay_nms?T
PUBLIC LCD_init?T
PUBLIC LCD_write_char?T
PUBLIC io_set?T
PUBLIC io_clear?T
PUBLIC LCD_set_xy?T
PUBLIC main
*** CODE SEGMENT '?PR?delay_1us?T?test':
9: }
00000000 4770 BX R14
00000002 ENDP ; 'delay_1us?T'
*** CODE SEGMENT '?PR?delay_nus?T?test':
7: void delay_nus(unsigned int n) ;
00000000 B530 PUSH {R4-R5,LR}
00000002 1C05 MOV R5,R0 ; n
00000004 ---- Variable 'n' assigned to Register 'R5' ----
12: {
00000004 ; SCOPE-START
13: unsigned int i=0;
00000004 2000 MOV R0,#0x0
00000006 1C04 MOV R4,R0 ; i
00000008 ---- Variable 'i' assigned to Register 'R4' ----
14: for (i=0;i<n;i++)
00000008 1C04 MOV R4,R0 ; i
0000000A E002 B L_3 ; T=0x00000012
0000000C L_4:
15: delay_1us();
0000000C F7FF BL delay_1us?T ; T=0x0001 (1)
0000000E FFF8 BL delay_1us?T ; T=0x0001 (2)
00000010 3401 ADD R4,#0x1
00000012 L_3:
00000012 1C29 MOV R1,R5 ; n
00000014 1C20 MOV R0,R4 ; i
00000016 4288 CMP R0,R1 ; i
00000018 D3F8 BCC L_4 ; T=0x0000000C
0000001A ; SCOPE-END
16: }
0000001A BC30 POP {R4-R5}
0000001C BC08 POP {R3}
0000001E 4718 BX R3
00000020 ENDP ; 'delay_nus?T'
*** CODE SEGMENT '?PR?delay_1ms?T?test':
19: {
00000000 ; SCOPE-START
21: for (i=0;i<1140;i++);
00000000 2000 MOV R0,#0x0
00000002 ---- Variable 'i' assigned to Register 'R0' ----
00000002 L_6:
00000002 3001 ADD R0,#0x1
00000004 1C01 MOV R1,R0 ; i
00000006 4800 LDR R2,=0x474
00000008 4291 CMP R1,R2 ; i
0000000A D3FA BCC L_6 ; T=0x00000002
0000000C ; SCOPE-END
22: }
ARM COMPILER V2.42, test 20/12/05 15:29:58 PAGE 5
0000000C 4770 BX R14
0000000E ENDP ; 'delay_1ms?T'
*** CODE SEGMENT '?PR?delay_nms?T?test':
00000000 B510 PUSH {R4,LR}
00000002 1C04 MOV R4,R0 ; n
00000004 ---- Variable 'n' assigned to Register 'R4' ----
25: {
00000004 ; SCOPE-START
26: unsigned int i=0;
00000004 2000 MOV R0,#0x0
00000006 1C03 MOV R3,R0 ; i
00000008 ---- Variable 'i' assigned to Register 'R3' ----
27: for (i=0;i<n;i++)
00000008 1C03 MOV R3,R0 ; i
0000000A E002 B L_13 ; T=0x00000012
0000000C L_14:
28: delay_1ms();
0000000C F7FF BL delay_1ms?T ; T=0x0001 (1)
0000000E FFF8 BL delay_1ms?T ; T=0x0001 (2)
00000010 3301 ADD R3,#0x1
00000012 L_13:
00000012 1C21 MOV R1,R4 ; n
00000014 1C18 MOV R0,R3 ; i
00000016 4288 CMP R0,R1 ; i
00000018 D3F8 BCC L_14 ; T=0x0000000C
0000001A ; SCOPE-END
29: }
0000001A BC10 POP {R4}
0000001C BC08 POP {R3}
0000001E 4718 BX R3
00000020 ENDP ; 'delay_nms?T'
*** CODE SEGMENT '?PR?io_set?T?test':
17: void io_set(uchar pin) //单个IO口置位函数
00000000 1C01 MOV R1,R0 ; pin
00000002 ---- Variable 'pin' assigned to Register 'R1' ----
18: {
00000002 ; SCOPE-START
19: ulong io_data=1;
00000002 2201 MOV R2,#0x1
00000004 ---- Variable 'io_data' assigned to Register 'R2' ----
20: io_data=io_data<<pin;
00000004 1C08 MOV R0,R1 ; pin
00000006 0600 LSL R0,R0,#0x18 ; pin
00000008 0E00 LSR R0,R0,#0x18
0000000A 4082 LSL R2,R0
21: PIO_SODR=io_data; //PIO_ODSR为IO线上置位寄存器,1有效,0无
0000000C 1C11 MOV R1,R2 ; io_data
0000000E 4800 LDR R0,=0xFFFFF430
00000010 6001 STR R1,[R0,#0x0]
00000012 ; SCOPE-END
22: }
00000012 4770 BX R14
00000014 ENDP ; 'io_set?T'
*** CODE SEGMENT '?PR?io_clear?T?test':
25: void io_clear(uchar pin) //单个IO口清零函数
00000000 1C01 MOV R1,R0 ; pin
00000002 ---- Variable 'pin' assigned to Register 'R1' ----
26: {
00000002 ; SCOPE-START
27: ulong io_data=1;
00000002 2201 MOV R2,#0x1
00000004 ---- Variable 'io_data' assigned to Register 'R2' ----
28: io_data=io_data<<pin;
00000004 1C08 MOV R0,R1 ; pin
00000006 0600 LSL R0,R0,#0x18 ; pin
00000008 0E00 LSR R0,R0,#0x18
ARM COMPILER V2.42, test 20/12/05 15:29:58 PAGE 6
0000000A 4082 LSL R2,R0
29: PIO_CODR=io_data; //PIO_CODR为IO线上清零寄存器,1有效,0无
0000000C 1C11 MOV R1,R2 ; io_data
0000000E 4800 LDR R0,=0xFFFFF434
00000010 6001 STR R1,[R0,#0x0]
00000012 ; SCOPE-END
30: }
00000012 4770 BX R14
00000014 ENDP ; 'io_clear?T'
*** CODE SEGMENT '?PR?LCD_init?T?test':
33: void LCD_init(void) //液晶初始化
00000000 B510 PUSH {R4,LR}
34: {
00000002 ; SCOPE-START
35: unsigned char i=0;
00000002 2400 MOV R4,#0x0
00000004 ---- Variable 'i' assigned to Register 'R4' ----
36: delay_nms(1000);
00000004 48FA LDR R0,=0x3E8
00000006 F7FF BL delay_nms?T ; T=0x0001 (1)
00000008 FFFB BL delay_nms?T ; T=0x0001 (2)
37: for(i=0;i<5;i++)
0000000A 2400 MOV R4,#0x0
0000000C E009 B L_18 ; T=0x00000022
0000000E L_19:
39: LCD_write_char(1,0x38); //8位显示,5*7点阵字符
0000000E 2001 MOV R0,#0x1
00000010 2138 MOV R1,#0x38
00000012 F7FF BL LCD_write_char?T ; T=0x0001 (1)
00000014 FFF5 BL LCD_write_char?T ; T=0x0001 (2)
40: delay_nms(40);
00000016 2028 MOV R0,#0x28
00000018 F7FF BL delay_nms?T ; T=0x0001 (1)
0000001A FFF2 BL delay_nms?T ; T=0x0001 (2)
41: }
0000001C 3401 ADD R4,#0x1
0000001E 0624 LSL R4,R4,#0x18
00000020 0E24 LSR R4,R4,#0x18
00000022 L_18:
00000022 1C20 MOV R0,R4 ; i
00000024 0600 LSL R0,R0,#0x18 ; i
00000026 0E00 LSR R0,R0,#0x18
00000028 2805 CMP R0,#0x5
0000002A DBF0 BLT L_19 ; T=0x0000000E
43: LCD_write_char(1,0x06); //8位显示,5*7点阵字符
0000002C 2001 MOV R0,#0x1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -