⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.lst

📁 keil开发平台下的ADUC7027的功能模块代码。
💻 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 + -