📄 uart.lst
字号:
ARM COMPILER V2.42, uart 17/01/09 22:24:15 PAGE 1
ARM COMPILER V2.42, COMPILATION OF MODULE uart
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe uart.c THUMB BROWSE DEBUG TABS(4)
stmt level source
1 #include "main.h"
2
3
4 void UartInit()
5 {
6 1 GP1CON = 0x11; //SIN SOUT LINK TO P1.0,P1.1
7 1 COMCON0 = 0x83; //SETTING TO ACCESS DIV0 AND DIV1
8 1 COMDIV0 = 0x44; //baute rate at 19200 bps
9 1 COMDIV1 = 0x0;
10 1 COMCON0 = 0X03; //SET TO OUT DIV0 AND DIV1
11 1 }
12 /**************************************
13 * 应用程序在uart口输出数据(查询方式)
14 *************************************/
15 void SendByte(unsigned char Bdata)
16 {
17 1 while(!(COMSTA0 & 0x40));
18 1 COMTX = Bdata;
19 1 }
20 /*****************************************
21 * User在PC串口终端输入数据 范围0x0 - 0xFF
22 * 应用程序在uart口读入数据 (查询方式)
23 *****************************************/
24 unsigned char GetData()
25 {
26 1 unsigned char tmp = 0xFF;
27 1 PrintStr("please input the command code:");
28 1 while(!(COMSTA0 & 0x01));
29 1 tmp = COMRX;
30 1 SendHex(tmp);
31 1 NewLine();
32 1 return tmp;
33 1 }
34 /*******************************************************
35 * 通过Uart输出十六进制数据,如:0xAA 范围(0x00 - 0xFF)
36 *******************************************************/
37 unsigned char HexList[16] = {'0','1','2','3','4','5','6','7',
38 '8','9','A','B','C','D','E','F'};
39 void SendHex(int num)
40 {
41 1 SendByte('0');
42 1 SendByte('x');
43 1 SendByte(HexList[num/16]);
44 1 SendByte(HexList[num%16]);
45 1 }
46 /*************************
47 * 串口终端输出数据
48 * 数大小范围 0 - 99999
49 *************************/
50 void SendNum(int num)
51 {
52 1 if(num >= 10){
53 2 if(num >=100){
54 3 if(num >= 1000){
55 4 if(num>= 10000){
56 5 SendByte(num / 10000 + 0x30);
57 5 num = num % 10000;
58 5 }
59 4 SendByte(num / 1000 + 0x30);
ARM COMPILER V2.42, uart 17/01/09 22:24:15 PAGE 2
60 4 num = num % 1000;
61 4 }
62 3 SendByte(num / 100 + 0x30);
63 3 num = num % 100;
64 3 }
65 2 SendByte(num / 10 + 0x30);
66 2 }
67 1 SendByte(num % 10 + 0x30);
68 1 }
69 /****************************
70 * out put a string
71 ****************************/
72 void PrintStr(unsigned char *p)
73 {
74 1 int i = 0;
75 1 while( p[i] != 0){
76 2 SendByte(p[i]);
77 2 i++;
78 2 }
79 1 }
80 /**************************
81 * 换行
82 **************************/
83 void NewLine()
84 {
85 1 SendByte(0x0D);
86 1 SendByte(0x0A);
87 1 }
ARM COMPILER V2.42, uart 17/01/09 22:24:15 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (?C?SDIV?T)
*** PUBLICS:
PUBLIC UartInit?T
PUBLIC SendByte?T
PUBLIC SendHex?T
PUBLIC SendNum?T
PUBLIC PrintStr?T
PUBLIC NewLine?T
PUBLIC GetData?T
PUBLIC HexList
*** DATA SEGMENT '?CON?uart':
00000000 ??S_1:
00000000 DB 'please input the command code:',0x00
*** DATA SEGMENT '?DT0?uart':
00000000 HexList:
00000000 BEGIN_INIT
00000000 30 DB 0x30
00000001 31 DB 0x31
00000002 32 DB 0x32
00000003 33 DB 0x33
00000004 34 DB 0x34
00000005 35 DB 0x35
00000006 36 DB 0x36
00000007 37 DB 0x37
00000008 38 DB 0x38
00000009 39 DB 0x39
0000000A 41 DB 0x41
0000000B 42 DB 0x42
0000000C 43 DB 0x43
0000000D 44 DB 0x44
0000000E 45 DB 0x45
0000000F 46 DB 0x46
00000010 END_INIT
*** CODE SEGMENT '?PR?UartInit?T?uart':
6: GP1CON = 0x11; //SIN SOUT LINK TO P1.0,P1.1
00000000 2111 MOV R1,#0x11
00000002 4800 LDR R0,=0xFFFFF404
00000004 6001 STR R1,[R0,#0x0]
7: COMCON0 = 0x83; //SETTING TO ACCESS DIV0 AND DIV1
00000006 2183 MOV R1,#0x83
00000008 4800 LDR R0,=0xFFFF070C
0000000A 6001 STR R1,[R0,#0x0]
8: COMDIV0 = 0x44; //baute rate at 19200 bps
0000000C 2144 MOV R1,#0x44
0000000E 4800 LDR R0,=0xFFFF0700
00000010 6001 STR R1,[R0,#0x0]
9: COMDIV1 = 0x0;
00000012 2100 MOV R1,#0x0
00000014 4800 LDR R0,=0xFFFF0704
00000016 6001 STR R1,[R0,#0x0]
10: COMCON0 = 0X03; //SET TO OUT DIV0 AND DIV1
00000018 2103 MOV R1,#0x3
0000001A 4800 LDR R0,=0xFFFF070C
0000001C 6001 STR R1,[R0,#0x0]
11: }
0000001E 4770 BX R14
00000020 ENDP ; 'UartInit?T'
*** CODE SEGMENT '?PR?SendByte?T?uart':
15: void SendByte(unsigned char Bdata)
ARM COMPILER V2.42, uart 17/01/09 22:24:15 PAGE 4
00000000 1C01 MOV R1,R0 ; Bdata
00000002 ---- Variable 'Bdata' assigned to Register 'R1' ----
17: while(!(COMSTA0 & 0x40));
00000002 L_1:
00000002 4800 LDR R0,=0xFFFF0714
00000004 6800 LDR R0,[R0,#0x0]
00000006 2240 MOV R2,#0x40
00000008 4210 TST R0,R2
0000000A D0FA BEQ L_1 ; T=0x00000002
18: COMTX = Bdata;
0000000C 1C08 MOV R0,R1 ; Bdata
0000000E 0601 LSL R1,R0,#0x18 ; Bdata
00000010 0E09 LSR R1,R1,#0x18
00000012 4800 LDR R0,=0xFFFF0700
00000014 6001 STR R1,[R0,#0x0]
19: }
00000016 4770 BX R14
00000018 ENDP ; 'SendByte?T'
*** CODE SEGMENT '?PR?GetData?T?uart':
24: unsigned char GetData()
00000000 B510 PUSH {R4,LR}
25: {
00000002 ; SCOPE-START
26: unsigned char tmp = 0xFF;
00000002 24FF MOV R4,#0xFF
00000004 ---- Variable 'tmp' assigned to Register 'R4' ----
27: PrintStr("please input the command code:");
00000004 4800 LDR R0,=??S_1 ; ??S_1
00000006 F7FF BL PrintStr?T ; T=0x0001 (1)
00000008 FFFB BL PrintStr?T ; T=0x0001 (2)
28: while(!(COMSTA0 & 0x01));
0000000A L_5:
0000000A 4800 LDR R0,=0xFFFF0714
0000000C 6800 LDR R0,[R0,#0x0]
0000000E 2101 MOV R1,#0x1
00000010 4208 TST R0,R1
00000012 D0FA BEQ L_5 ; T=0x0000000A
29: tmp = COMRX;
00000014 4800 LDR R0,=0xFFFF0700
00000016 6804 LDR R4,[R0,#0x0]
00000018 0624 LSL R4,R4,#0x18
0000001A 0E24 LSR R4,R4,#0x18
30: SendHex(tmp);
0000001C 1C20 MOV R0,R4 ; tmp
0000001E 0600 LSL R0,R0,#0x18 ; tmp
00000020 0E00 LSR R0,R0,#0x18
00000022 F7FF BL SendHex?T ; T=0x0001 (1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -