?? uart.lst
字號(hào):
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的串口函數(shù)
4 作者:Computer-lov
5 建立日期:2006-3-22
6 修改日期:2006-3-22
7 版本:V1.0
8 版權(quán)所有,盜版必究。
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設(shè)置為串口功能
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 //因?yàn)镃OMTX寄存器跟COMDIV1寄存器共用一個(gè)地址,由COMCON0
31 1 }
32 //////////////////////////////////////////////////////////////////////
33
34 //////////////////////////////////////////////////////////////////////
35 void send_a_byte(uint8 a_byte)
36 {
37 1 while(!(COMSTA0 & 0x40)); //等待發(fā)送完畢
38 1 COMTX=a_byte;
39 1 }
40 //////////////////////////////////////////////////////////////////////
41
42 ////////////////////////////// 發(fā)送一個(gè)字符串 ///////////////////////////////////////////
43 //////////////////入口參數(shù): s-要發(fā)送的字符串的指針(字符串長(zhǎng)度不得大于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) //判斷字符串是否結(jié)束
50 1 {
51 2 while(!(COMSTA0 & 0x40)); //等待發(fā)送完畢
52 2 COMTX=s[i];
53 2 i++; //移到下字節(jié)
54 2 }
55 1 if(newline) //如果需要換行
56 1 {
57 2 send_a_byte(13);
58 2 send_a_byte(10); //發(fā)送回車換行
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); //超級(jí)終端清屏指令
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 //////////////////////////將一個(gè)16位的整數(shù)按十六進(jìn)制發(fā)到串口/////////////////////////////////
75 void print_uint16(uint16 number)
76 {
77 1 send_a_byte('0'); //發(fā)送0x
78 1 send_a_byte('x');
79 1 send_a_byte(HEX_TABLE[(number>>12) & 0x0F]); //依次發(fā)送各部分
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設(shè)置為串口功能
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)); //等待發(fā)送完畢
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) //判斷字符串是否結(jié)束
00000008 EA00000D B L_5 ; Targ=0x44
51: while(!(COMSTA0 & 0x40)); //等待發(fā)送完畢
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++; //移到下字節(jié)
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); //發(fā)送回車換行
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); //超級(jí)終端清屏指令
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'); //發(fā)送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]); //依次發(fā)送各部分
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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -