📄 uart.lst
字号:
ARM COMPILER V2.50a, UART 25/08/06 23:22:56 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 THUMB DEBUG TABS(4)
stmt level source
1 /**********************************************************************
2 UART.c file
3 LPC213X的串口函数
4 作者:Computer-lov
5 建立日期:2006-3-22
6 修改日期:2006-5-11
7 最后修改时间:2006-08-25
8 版本:V1.0
9 版权所有,盗版必究。
10 Copyright(C) Computer-lov 2006-2016
11 All rights reserved
12 **********************************************************************/
13
14 #include "CPU.H"
15
16 #include "My_type.h"
17 #include "UART.H"
18
19 //////////////////////////////////////////////////////////////////////
20 void UART_init(void)
21 {
22 1 PINSEL0 = 0x00000005; //设置串口0的相应引脚
23 1
24 1 U0IER=0; //禁止串口0所有中断
25 1
26 1 U0LCR = 0x83; //8个数据位,无奇偶校验,1个停止位,DLAB=1
27 1
28 1 #define Fpclk (5*11059200)/*Pclk为5*11059200Hz*/
29 1
30 1 #define BitRate 57600 /*波特率设置为57600bps*/
31 1
32 1
33 1 U0DLM=(Fpclk/16/BitRate)/256;
34 1 U0DLL=(Fpclk/16/BitRate)%256;
35 1
36 1 U0LCR = 0x03; // DLAB = 0
37 1 }
38 //////////////////////////////////////////////////////////////////////
39
40 //////////////////////////////往串口0发送一字节数据//////////////////////////////
41 void send_a_byte(uint8 a_byte)
42 {
43 1 while (!(U0LSR & 0x20)); //等待发送完毕
44 1 U0THR=a_byte;
45 1 }
46 //////////////////////////////////////////////////////////////////////
47
48 /////////////////////////从串口0读取一字节数据//////////////////////////////////
49 /*int get_a_byte(void) //
50 {
51 while (!(U0LSR & 0x01));
52 return (U0RBR);
53 }*/
54 //////////////////////////////////////////////////////////////////////
55
56
57 ////////////////////////////// 发送一个字符串 ///////////////////////////////////////////
58 //////////////////入口参数: s-要发送的字符串的指针(字符串长度不得大于255)/////////////
59 ///////////////////////////////////// newline-是否需要换行 0-不换行 非0-换行////////
ARM COMPILER V2.50a, UART 25/08/06 23:22:56 PAGE 2
60 void prints(uint8 * s,uint32 newline)
61 {
62 1 unsigned char i;
63 1 i=0;
64 1 while(s[i]!=0) //判断字符串是否结束
65 1 {
66 2 while (!(U0LSR & 0x20)); //等待发送完毕
67 2 U0THR=s[i];
68 2 i++; //移到下字节
69 2 }
70 1 if(newline) //如果需要换行
71 1 {
72 2 send_a_byte(13);
73 2 send_a_byte(10); //发送回车换行
74 2 }
75 1 }
76 ////////////////////////////////////////////////////////////////////////////////////////////
77
78 /////////////////////////////////////////////////////////////////////////////////
79 void cls(void)
80 {
81 1 send_a_byte(0x0C); //超级终端清屏指令
82 1 send_a_byte(0x0C);
83 1 }
84 //////////////////////////////////////////////////////////////////////////////////
85
86
87 //转换成十六进制时用的表
88 const uint8 HEX_TABLE[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
89
90 //////////////////////////将一个16位的整数按十六进制发到串口/////////////////////////////////
91 void print_uint16(uint16 number)
92 {
93 1 send_a_byte('0'); //发送0x
94 1 send_a_byte('x');
95 1 send_a_byte(HEX_TABLE[(number>>12) & 0x0F]); //依次发送各部分
96 1 send_a_byte(HEX_TABLE[(number>>8) & 0x0F]);
97 1 send_a_byte(HEX_TABLE[(number>>4) & 0x0F]);
98 1 send_a_byte(HEX_TABLE[(number) & 0x0F]);
99 1 send_a_byte(' ');
100 1 }
101 //////////////////////////////////////////////////////////////////////////////////
102
103 /////////////////////////将一个32位的整数按十进制发送到串口/////////////////////////////
104 void print_uint32(uint32 number)
105 {
106 1 uint8 buf[12];
107 1 uint32 i;
108 1
109 1 for(i=0;i<10;i++) //转换成字符串
110 1 {
111 2 buf[9-i]=(number%10)+'0';
112 2 number/=10;
113 2 }
114 1 for(i=0;i<9;i++) //将前面的0转换成空格
115 1 {
116 2 if(buf[i]=='0')
117 2 {
118 3 buf[i]=' ';
119 3 }
120 2 else
121 2 {
122 3 break;
123 3 }
124 2 }
125 1 buf[10]=' ';
ARM COMPILER V2.50a, UART 25/08/06 23:22:56 PAGE 3
126 1 buf[11]=0; //字符串结束符
127 1 prints(buf,0);
128 1 }
129 //////////////////////////////////////////////////////////////////////////////////////////
130
ARM COMPILER V2.50a, UART 25/08/06 23:22:56 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (?C?UDIV?T)
*** PUBLICS:
PUBLIC UART_init?T
PUBLIC send_a_byte?T
PUBLIC prints?T
PUBLIC cls?T
PUBLIC print_uint16?T
PUBLIC print_uint32?T
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?T?UART':
22: PINSEL0 = 0x00000005; //设置串口0的相应引脚
00000000 2105 MOV R1,#0x5
00000002 4800 LDR R0,=0xE002C000
00000004 6001 STR R1,[R0,#0x0]
24: U0IER=0; //禁止串口0所有中断
00000006 2100 MOV R1,#0x0
00000008 4800 LDR R0,=0xE000C004
0000000A 7001 STRB R1,[R0,#0x0]
26: U0LCR = 0x83; //8个数据位,无奇偶校验,1个停止位,DLAB=1
0000000C 2283 MOV R2,#0x83
0000000E 4800 LDR R0,=0xE000C00C
00000010 7002 STRB R2,[R0,#0x0]
33: U0DLM=(Fpclk/16/BitRate)/256;
00000012 4800 LDR R0,=0xE000C004
00000014 7001 STRB R1,[R0,#0x0]
34: U0DLL=(Fpclk/16/BitRate)%256;
00000016 213C MOV R1,#0x3C
00000018 4800 LDR R0,=0xE000C000
0000001A 7001 STRB R1,[R0,#0x0]
36: U0LCR = 0x03; // DLAB = 0
0000001C 2103 MOV R1,#0x3
0000001E 4800 LDR R0,=0xE000C00C
00000020 7001 STRB R1,[R0,#0x0]
37: }
00000022 4770 BX R14
00000024 ENDP ; 'UART_init?T'
*** CODE SEGMENT '?PR?send_a_byte?T?UART':
41: void send_a_byte(uint8 a_byte)
00000000 1C02 MOV R2,R0 ; a_byte
ARM COMPILER V2.50a, UART 25/08/06 23:22:56 PAGE 5
00000002 ---- Variable 'a_byte' assigned to Register 'R2' ----
43: while (!(U0LSR & 0x20)); //等待发送完毕
00000002 L_1:
00000002 4800 LDR R0,=0xE000C014
00000004 7800 LDRB R0,[R0,#0x0]
00000006 2120 MOV R1,#0x20
00000008 4208 TST R0,R1
0000000A D0FA BEQ L_1 ; T=0x00000002
44: U0THR=a_byte;
0000000C 1C11 MOV R1,R2 ; a_byte
0000000E 4800 LDR R0,=0xE000C000
00000010 7001 STRB R1,[R0,#0x0]
45: }
00000012 4770 BX R14
00000014 ENDP ; 'send_a_byte?T'
*** CODE SEGMENT '?PR?prints?T?UART':
60: void prints(uint8 * s,uint32 newline)
00000000 B510 PUSH {R4,LR}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -