📄 uart.lst
字号:
ARM COMPILER V2.50a, UART 25/04/06 04:24:57 PAGE 1
ARM COMPILER V2.50a, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe UART.c ARM BROWSE DEBUG TABS(4)
stmt level source
1 /**********************************************************************
2 UART.c file
3 ADuC7027的串口函数
4 作者:Computer-lov
5 建立日期:2006-3-22
6 修改日期:2006-3-22
7 版本:V1.0
8 版权所有,盗版必究。
9 Copyright(C) Computer-lov 2006-2016
10 All rights reserved
11 **********************************************************************/
12
13 #include <../My_type.h>
14 #include <ADuC7027.H>
15 #include "UART.H"
16
17 //////////////////////////////////////////////////////////////////////
18 void UART_init(void)
19 {
20 1 GP1CON=0x00000011; //P1.0 P1.1设置为串口功能
21 1
22 1 COMIEN0=0x00; //禁止所有串口中断
23 1
24 1 COMCON0=0x83; //1 stop bit,8 data bits 最高位置1,寻址COMDIV1寄存器
25 1 COMDIV1=0x00;
26 1 COMDIV2=0x0000;
27 1 COMDIV0=0x44; //19200 bps
28 1 //COMDIV0=0x88; //9600bps
29 1 COMCON0=0x03; //最高位置0,寻址COMTX寄存器。
30 1 //因为COMTX寄存器跟COMDIV1寄存器共用一个地址,由COMCON0
31 1 }
32 //////////////////////////////////////////////////////////////////////
33
34 //////////////////////////////////////////////////////////////////////
35 void send_a_byte(uint8 a_byte)
36 {
37 1 while(!(COMSTA0 & 0x40)); //等待发送完毕
38 1 COMTX=a_byte;
39 1 }
40 //////////////////////////////////////////////////////////////////////
41
42 ////////////////////////////// 发送一个字符串 ///////////////////////////////////////////
43 //////////////////入口参数: s-要发送的字符串的指针(字符串长度不得大于255)/////////////
44 ///////////////////////////////////// newline-是否需要换行 0-不换行 非0-换行////////
45 void prints(uint8 * s,uint32 newline)
46 {
47 1 unsigned char i;
48 1 i=0;
49 1 while(s[i]!=0) //判断字符串是否结束
50 1 {
51 2 while(!(COMSTA0 & 0x40)); //等待发送完毕
52 2 COMTX=s[i];
53 2 i++; //移到下字节
54 2 }
55 1 if(newline) //如果需要换行
56 1 {
57 2 send_a_byte(13);
58 2 send_a_byte(10); //发送回车换行
59 2 }
ARM COMPILER V2.50a, UART 25/04/06 04:24:57 PAGE 2
60 1 }
61 ////////////////////////////////////////////////////////////////////////////////////////////
62
63 /////////////////////////////////////////////////////////////////////////////////
64 void cls(void)
65 {
66 1 send_a_byte(0x0C); //超级终端清屏指令
67 1 send_a_byte(0x0C);
68 1 }
69 //////////////////////////////////////////////////////////////////////////////////
70
71
72 const uint8 HEX_TABLE[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
73
74 //////////////////////////将一个16位的整数按十六进制发到串口/////////////////////////////////
75 void print_uint16(uint16 number)
76 {
77 1 send_a_byte('0'); //发送0x
78 1 send_a_byte('x');
79 1 send_a_byte(HEX_TABLE[(number>>12) & 0x0F]); //依次发送各部分
80 1 send_a_byte(HEX_TABLE[(number>>8) & 0x0F]);
81 1 send_a_byte(HEX_TABLE[(number>>4) & 0x0F]);
82 1 send_a_byte(HEX_TABLE[(number) & 0x0F]);
83 1 send_a_byte(' ');
84 1 }
85 //////////////////////////////////////////////////////////////////////////////////
ARM COMPILER V2.50a, UART 25/04/06 04:24:57 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** PUBLICS:
PUBLIC UART_init?A
PUBLIC send_a_byte?A
PUBLIC prints?A
PUBLIC cls?A
PUBLIC print_uint16?A
PUBLIC HEX_TABLE
*** DATA SEGMENT '?CON?UART':
00000000 HEX_TABLE:
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?UART_init?A?UART':
20: GP1CON=0x00000011; //P1.0 P1.1设置为串口功能
00000000 E3A01011 MOV R1,#0x11
00000004 E5100000 LDR R0,=0xFFFFF404
00000008 E5801000 STR R1,[R0,#0x0]
22: COMIEN0=0x00; //禁止所有串口中断
0000000C E3A01000 MOV R1,#0x0
00000010 E5100000 LDR R0,=0xFFFF0704
00000014 E5801000 STR R1,[R0,#0x0]
24: COMCON0=0x83; //1 stop bit,8 data bits 最高位置1,寻址COMDIV1寄存器
00000018 E3A02083 MOV R2,#0x83
0000001C E5100000 LDR R0,=0xFFFF070C
00000020 E5802000 STR R2,[R0,#0x0]
25: COMDIV1=0x00;
00000024 E5100000 LDR R0,=0xFFFF0704
00000028 E5801000 STR R1,[R0,#0x0]
26: COMDIV2=0x0000;
0000002C E5100000 LDR R0,=0xFFFF072C
00000030 E5801000 STR R1,[R0,#0x0]
27: COMDIV0=0x44; //19200 bps
00000034 E3A01044 MOV R1,#0x44
00000038 E5100000 LDR R0,=0xFFFF0700
0000003C E5801000 STR R1,[R0,#0x0]
29: COMCON0=0x03; //最高位置0,寻址COMTX寄存器。
00000040 E3A01003 MOV R1,#0x3
00000044 E5100000 LDR R0,=0xFFFF070C
00000048 E5801000 STR R1,[R0,#0x0]
31: }
0000004C E12FFF1E BX R14
00000050 ENDP ; 'UART_init?A'
*** CODE SEGMENT '?PR?send_a_byte?A?UART':
35: void send_a_byte(uint8 a_byte)
00000000 E1A01000 MOV R1,R0 ; a_byte
00000004 ---- Variable 'a_byte' assigned to Register 'R1' ----
ARM COMPILER V2.50a, UART 25/04/06 04:24:57 PAGE 4
37: while(!(COMSTA0 & 0x40)); //等待发送完毕
00000004 L_1:
00000004 E5100000 LDR R0,=0xFFFF0714
00000008 E5900000 LDR R0,[R0,#0x0]
0000000C E3100040 TST R0,#0x0040
00000010 0AFFFFFB BEQ L_1 ; Targ=0x4
38: COMTX=a_byte;
00000014 E1A00001 MOV R0,R1 ; a_byte
00000018 E1A01C00 MOV R1,R0,LSL #24 ; a_byte
0000001C E1A01C21 MOV R1,R1,LSR #24
00000020 E5100000 LDR R0,=0xFFFF0700
00000024 E5801000 STR R1,[R0,#0x0]
39: }
00000028 E12FFF1E BX R14
0000002C ENDP ; 'send_a_byte?A'
*** CODE SEGMENT '?PR?prints?A?UART':
45: void prints(uint8 * s,uint32 newline)
00000000 E92D4010 STMDB R13!,{R4,LR}
00000004 ---- Variable 'newline' assigned to Register 'R1' ----
00000004 ---- Variable 's' assigned to Register 'R0' ----
46: {
00000004 ; SCOPE-START
48: i=0;
00000004 E3A02000 MOV R2,#0x0
00000008 ---- Variable 'i' assigned to Register 'R2' ----
49: while(s[i]!=0) //判断字符串是否结束
00000008 EA00000D B L_5 ; Targ=0x44
51: while(!(COMSTA0 & 0x40)); //等待发送完毕
0000000C L_12:
0000000C L_9:
0000000C E5103000 LDR R3,=0xFFFF0714
00000010 E5933000 LDR R3,[R3,#0x0]
00000014 E3130040 TST R3,#0x0040
00000018 0AFFFFFB BEQ L_9 ; Targ=0xC
52: COMTX=s[i];
0000001C E1A03002 MOV R3,R2 ; i
00000020 E1A04C03 MOV R4,R3,LSL #24 ; i
00000024 E1A04C24 MOV R4,R4,LSR #24
00000028 E1A03000 MOV R3,R0 ; s
0000002C E7D33004 LDRB R3,[R3,+R4]
00000030 E1A04003 MOV R4,R3
00000034 E5103000 LDR R3,=0xFFFF0700
00000038 E5834000 STR R4,[R3,#0x0]
53: i++; //移到下字节
0000003C E2822001 ADD R2,R2,#0x0001 ; i
00000040 E20220FF AND R2,R2,#0x00FF
54: }
00000044 L_5:
00000044 E1A03002 MOV R3,R2 ; i
00000048 E1A04C03 MOV R4,R3,LSL #24 ; i
0000004C E1A04C24 MOV R4,R4,LSR #24
00000050 E1A03000 MOV R3,R0 ; s
00000054 E7D33004 LDRB R3,[R3,+R4]
00000058 E3530000 CMP R3,#0x0000
0000005C 1AFFFFEA BNE L_12 ; Targ=0xC
55: if(newline) //如果需要换行
00000060 E1A00001 MOV R0,R1 ; newline
00000064 E3500000 CMP R0,#0x0000 ; newline
00000068 0A000003 BEQ L_13 ; Targ=0x7C
57: send_a_byte(13);
0000006C E3A0000D MOV R0,#0xD
00000070 EBFFFFE2 BL send_a_byte?A ; Targ=0x0
58: send_a_byte(10); //发送回车换行
00000074 E3A0000A MOV R0,#0xA
00000078 EBFFFFE0 BL send_a_byte?A ; Targ=0x0
59: }
ARM COMPILER V2.50a, UART 25/04/06 04:24:57 PAGE 5
0000007C L_13:
0000007C ; SCOPE-END
60: }
0000007C E8BD0010 LDMIA R13!,{R4}
00000080 E8BD0008 LDMIA R13!,{R3}
00000084 E12FFF13 BX R3
00000088 ENDP ; 'prints?A'
*** CODE SEGMENT '?PR?cls?A?UART':
64: void cls(void)
00000000 E92D4000 STMDB R13!,{LR}
66: send_a_byte(0x0C); //超级终端清屏指令
00000004 E3A0000C MOV R0,#0xC
00000008 EBFFFFFC BL send_a_byte?A ; Targ=0x0
67: send_a_byte(0x0C);
0000000C E3A0000C MOV R0,#0xC
00000010 EBFFFFFA BL send_a_byte?A ; Targ=0x0
68: }
00000014 E8BD0008 LDMIA R13!,{R3}
00000018 E12FFF13 BX R3
0000001C ENDP ; 'cls?A'
*** CODE SEGMENT '?PR?print_uint16?A?UART':
75: void print_uint16(uint16 number)
00000000 E92D4000 STMDB R13!,{LR}
00000004 E1A02000 MOV R2,R0 ; number
00000008 ---- Variable 'number' assigned to Register 'R2' ----
77: send_a_byte('0'); //发送0x
00000008 E3A00030 MOV R0,#0x30
0000000C EBFFFFFB BL send_a_byte?A ; Targ=0x0
78: send_a_byte('x');
00000010 E3A00078 MOV R0,#0x78
00000014 EBFFFFF9 BL send_a_byte?A ; Targ=0x0
79: send_a_byte(HEX_TABLE[(number>>12) & 0x0F]); //依次发送各部分
00000018 E1A00002 MOV R0,R2 ; number
0000001C E1A01800 MOV R1,R0,LSL #16 ; number
00000020 E1A01821 MOV R1,R1,LSR #16
00000024 E1A01621 MOV R1,R1,LSR #12
00000028 E201100F AND R1,R1,#0x000F
0000002C E5100000 LDR R0,=HEX_TABLE ; HEX_TABLE
00000030 E7D00001 LDRB R0,[R0,+R1]
00000034 EBFFFFF1 BL send_a_byte?A ; Targ=0x0
80: send_a_byte(HEX_TABLE[(number>>8) & 0x0F]);
00000038 E1A00002 MOV R0,R2 ; number
0000003C E1A01800 MOV R1,R0,LSL #16 ; number
00000040 E1A01821 MOV R1,R1,LSR #16
00000044 E1A01421 MOV R1,R1,LSR #8
00000048 E201100F AND R1,R1,#0x000F
0000004C E5100000 LDR R0,=HEX_TABLE ; HEX_TABLE
00000050 E7D00001 LDRB R0,[R0,+R1]
00000054 EBFFFFE9 BL send_a_byte?A ; Targ=0x0
81: send_a_byte(HEX_TABLE[(number>>4) & 0x0F]);
00000058 E1A00002 MOV R0,R2 ; number
0000005C E1A01800 MOV R1,R0,LSL #16 ; number
00000060 E1A01821 MOV R1,R1,LSR #16
00000064 E1A01221 MOV R1,R1,LSR #4
00000068 E201100F AND R1,R1,#0x000F
0000006C E5100000 LDR R0,=HEX_TABLE ; HEX_TABLE
00000070 E7D00001 LDRB R0,[R0,+R1]
00000074 EBFFFFE1 BL send_a_byte?A ; Targ=0x0
82: send_a_byte(HEX_TABLE[(number) & 0x0F]);
00000078 E1A00002 MOV R0,R2 ; number
0000007C E1A01800 MOV R1,R0,LSL #16 ; number
00000080 E1A01821 MOV R1,R1,LSR #16
00000084 E201100F AND R1,R1,#0x000F
00000088 E5100000 LDR R0,=HEX_TABLE ; HEX_TABLE
0000008C E7D00001 LDRB R0,[R0,+R1]
00000090 EBFFFFDA BL send_a_byte?A ; Targ=0x0
ARM COMPILER V2.50a, UART 25/04/06 04:24:57 PAGE 6
83: send_a_byte(' ');
00000094 E3A00020 MOV R0,#0x20
00000098 EBFFFFD8 BL send_a_byte?A ; Targ=0x0
84: }
0000009C E8BD0008 LDMIA R13!,{R3}
000000A0 E12FFF13 BX R3
000000A4 ENDP ; 'print_uint16?A'
Module Information Static
----------------------------------
code size = ------
data size = ------
const size = 16
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -