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

📄 main.lst

📁 UART基本收发
💻 LST
字号:
A51 MACRO ASSEMBLER  MAIN                                                                 09/27/2006 14:44:10 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN main.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE main.A51 SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;***********************************************************************************
                       2     ;程序名称:简单的串行口收发
                       3     ;硬件接法:RXD和TXD通过RS-232电平转换电路接到电脑的串行口上
                       4     ;运行效果:开机时向电脑发送Hello,然后接收电脑发出的字符并回显
                       5     ;***********************************************************************************
                       6     
                       7     
                       8     ;***********************************************************************************
                       9     ;定义波特率(取值1200、2400、4800、9600、19200等)
                      10     ;***********************************************************************************
  2580                11     BaudRate        EQU     9600
                      12     
                      13     
                      14     ;***********************************************************************************
                      15     ;复位入口
                      16     ;***********************************************************************************
0000                  17             ORG     0x0000
0000 020003           18             LJMP    PreMain
                      19     
                      20     
                      21     ;***********************************************************************************
                      22     ;程序段:PreMain
                      23     ;功能:进入主程序之前的初始化操作
                      24     ;***********************************************************************************
0003                  25     PreMain:
0003 758130           26             MOV     SP, #0x30
0006 020035           27             LJMP    main
                      28     
                      29     
                      30     ;***********************************************************************************
                      31     ;函数:void UartInit()
                      32     ;功能:串行口初始化
                      33     ;***********************************************************************************
0009                  34     UartInit:
0009 759850           35             MOV     SCON, #0x50     ;串口方式1(8位UART),允许接收
000C 438780           36             ORL     PCON, #0x80     ;波特率加倍
000F 53890F           37             ANL     TMOD, #0x0F     ;设置T1为8位自动重装定时器,用于产生波特率
0012 438920           38             ORL     TMOD, #0x20
0015 758BFA           39             MOV     TL1, #(256-57600/BaudRate)      ;根据波特率设置T1初值
0018 858B8D           40             MOV     TH1, TL1
001B D28E             41             SETB    TR1             ;启动T1
001D 22               42             RET
                      43     
                      44     
                      45     ;***********************************************************************************
                      46     ;函数:void UartSendChar(char c)
                      47     ;功能:通过串行口发送单个字节
                      48     ;参数:c = R7,是被发送的字节数据,取值0x00~0xFF
                      49     ;***********************************************************************************
001E                  50     UartSendChar:
001E 8F99             51             MOV     SBUF, R7        ;数据写入SBUF,同时启动硬件发送过程
0020 3099FD           52             JNB     TI, $           ;等待发送完毕
0023 C299             53             CLR     TI              ;清除发送标志
0025 22               54             RET
                      55     
                      56     
                      57     ;***********************************************************************************
                      58     ;函数:void UartSendStr(char *s)
A51 MACRO ASSEMBLER  MAIN                                                                 09/27/2006 14:44:10 PAGE     2

                      59     ;功能:通过串行口发送单个字节
                      60     ;参数:*s = (R6,R7),是被发送的字符串
                      61     ;***********************************************************************************
0026                  62     UartSendStr:
0026 8E83             63             MOV     DPH, R6
0028 8F82             64             MOV     DPL, R7
002A                  65     UartSendStr_Loop:
002A E4               66             CLR     A
002B 93               67             MOVC    A, @A+DPTR
002C A3               68             INC     DPTR
002D 6005             69             JZ      UartSendStr_end         ;遇到字符串结束标志0x00时,停止发送
002F FF               70             MOV     R7, A
0030 111E             71             CALL    UartSendChar
0032 80F6             72             SJMP    UartSendStr_Loop
0034                  73     UartSendStr_end:
0034 22               74             RET
                      75     
                      76     
                      77     ;***********************************************************************************
                      78     ;函数:void main()
                      79     ;功能:主函数
                      80     ;***********************************************************************************
0035                  81     main:
0035 1109             82             CALL    UartInit        ;串行口初始化
0037 7E00             83             MOV     R6, #HIGH(main_String)
0039 7F48             84             MOV     R7, #LOW(main_String)
003B 1126             85             CALL    UartSendStr     ;发送Hello字符串
003D                  86     main_Loop:
003D 3098FD           87             JNB     RI, $           ;等待接收数据
0040 C298             88             CLR     RI              ;清除接收标志
0042 AF99             89             MOV     R7, SBUF        ;读取接收到的数据
0044 111E             90             CALL    UartSendChar    ;回送收到的数据
0046 80F5             91             SJMP    main_Loop
0048                  92     main_String:
0048 48656C6C         93             DB      'Hello',0x0D,0x0A,0x00
004C 6F0D0A00                
                      94     
                      95     
                      96     ;***********************************************************************************
                      97     ;程序结束
                      98     ;***********************************************************************************
                      99             END
                             
A51 MACRO ASSEMBLER  MAIN                                                                 09/27/2006 14:44:10 PAGE     3

SYMBOL TABLE LISTING
------ ----- -------


N A M E             T Y P E  V A L U E   ATTRIBUTES

BAUDRATE . . . . .  N NUMB   2580H   A   
DPH. . . . . . . .  D ADDR   0083H   A   
DPL. . . . . . . .  D ADDR   0082H   A   
MAIN . . . . . . .  C ADDR   0035H   A   
MAIN_LOOP. . . . .  C ADDR   003DH   A   
MAIN_STRING. . . .  C ADDR   0048H   A   
PCON . . . . . . .  D ADDR   0087H   A   
PREMAIN. . . . . .  C ADDR   0003H   A   
RI . . . . . . . .  B ADDR   0098H.0 A   
SBUF . . . . . . .  D ADDR   0099H   A   
SCON . . . . . . .  D ADDR   0098H   A   
SP . . . . . . . .  D ADDR   0081H   A   
TH1. . . . . . . .  D ADDR   008DH   A   
TI . . . . . . . .  B ADDR   0098H.1 A   
TL1. . . . . . . .  D ADDR   008BH   A   
TMOD . . . . . . .  D ADDR   0089H   A   
TR1. . . . . . . .  B ADDR   0088H.6 A   
UARTINIT . . . . .  C ADDR   0009H   A   
UARTSENDCHAR . . .  C ADDR   001EH   A   
UARTSENDSTR. . . .  C ADDR   0026H   A   
UARTSENDSTR_END. .  C ADDR   0034H   A   
UARTSENDSTR_LOOP .  C ADDR   002AH   A   


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -