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

📄 main.lst

📁 周立功单片机上的源程序
💻 LST
字号:
A51 MACRO ASSEMBLER  MAIN                                                                 07/01/2006 11:27:56 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;*************************************************************************
                       2     ;       main.c
                       3     ;       串行口通信方式1例程
                       4     ;*************************************************************************
                       5     
                       6     
                       7     ;*************************************************************************
                       8     ;定义全局变量
                       9     ;*************************************************************************
  0028                10     SIZE    EQU     40              ;定义接收缓冲区大小
  0030                11     UartBuf DATA    0x30            ;定时接收缓冲区
  0058                12     BufP1   DATA    0x30+SIZE       ;定义接收缓冲区下标变量
  0059                13     BufP2   DATA    0x30+SIZE+1
  0000                14     _TI_    BIT     0x20.0          ;定义发送辅助标志
                      15     
                      16     
                      17     ;*************************************************************************
                      18     ;复位入口
                      19     ;*************************************************************************
0000                  20             ORG     0x0000
0000 020026           21             LJMP    PreMain
                      22     
                      23     
                      24     ;*************************************************************************
                      25     ;串行口中断入口
                      26     ;*************************************************************************
0023                  27             ORG     0x0023
0023 020061           28             LJMP    UartINTSVC
                      29     
                      30     
                      31     ;*************************************************************************
                      32     ;进入主程序之前的初始化
                      33     ;*************************************************************************
0026                  34     PreMain:
0026 758159           35             MOV     SP, #(0x2F+SIZE+2)      ;设置堆栈起始位置
0029 02009B           36             LJMP    main
                      37     
                      38     
                      39     ;*************************************************************************
                      40     ;函数:void UartInit()
                      41     ;功能:串行口初始化
                      42     ;*************************************************************************
002C                  43     UartInit:
002C C002             44             PUSH    0x02
002E C2AF             45             CLR     EA
0030 E4               46             CLR     A
0031 F558             47             MOV     BufP1, A
0033 F559             48             MOV     BufP2, A
0035 FA               49             MOV     R2, A
0036 7830             50             MOV     R0, #UartBuf
0038                  51     UartInit_for:
0038 F6               52             MOV     @R0, A
0039 08               53             INC     R0
003A 0A               54             INC     R2
003B BA28FA           55             CJNE    R2, #SIZE, UartInit_for
003E C28E             56             CLR     TR1
0040 D2B0             57             SETB    RXD
0042 D2B1             58             SETB    TXD
A51 MACRO ASSEMBLER  MAIN                                                                 07/01/2006 11:27:56 PAGE     2

0044 D200             59             SETB    _TI_
0046 759850           60             MOV     SCON, #0x50     ;串行口方式1(8位Uart),允许接收
0049 438780           61             ORL     PCON, #0x80     ;波特率加倍
004C 53890F           62             ANL     TMOD, #0x0F
004F 438920           63             ORL     TMOD, #0x20     ;设置T1为8位自动重装定时器
0052 74FA             64             MOV     A, #0xFA
0054 F58D             65             MOV     TH1, A
0056 F58B             66             MOV     TL1, A          ;设置波特率为9600
0058 D28E             67             SETB    TR1             ;启动定时器T1
005A D2AC             68             SETB    ES              ;使能串行口中断
005C D2AF             69             SETB    EA
005E D002             70             POP     0x02
0060 22               71             RET
                      72     
                      73     
                      74     ;*************************************************************************
                      75     ;函数:void UartINTSVC() interrupt 4
                      76     ;功能:串行口中断服务函数
                      77     ;*************************************************************************
0061                  78     UartINTSVC:
                      79             ;保护寄存器
0061 C0E0             80             PUSH    ACC
0063 C0D0             81             PUSH    PSW
0065 C000             82             PUSH    0x00
0067 C002             83             PUSH    0x02
                      84             ;处理接收中断
0069 309817           85             JNB     RI, UartINTSVC_TI
006C AA99             86             MOV     R2, SBUF
006E C298             87             CLR     RI
0070 7430             88             MOV     A, #UartBuf
0072 2558             89             ADD     A, BufP1
0074 0558             90             INC     BufP1
0076 F8               91             MOV     R0, A
0077 EA               92             MOV     A, R2
0078 F6               93             MOV     @R0, A
0079 E558             94             MOV     A, BufP1
007B C3               95             CLR     C
007C 9428             96             SUBB    A, #SIZE
007E 4003             97             JC      UartINTSVC_TI
0080 755800           98             MOV     BufP1, #0
                      99             ;处理发送中断
0083                 100     UartINTSVC_TI:
0083 309904          101             JNB     TI, UartINTSVC_end
0086 C299            102             CLR     TI
0088 D200            103             SETB    _TI_
                     104             ;恢复寄存器
008A                 105     UartINTSVC_end:
008A D002            106             POP     0x02
008C D000            107             POP     0x00
008E D0D0            108             POP     PSW
0090 D0E0            109             POP     ACC
                     110             ;中断返回
0092 32              111             RETI
                     112     
                     113     
                     114     ;*************************************************************************
                     115     ;函数:void UartSendChar(unsigned char c)
                     116     ;功能:通过串行口发送单个字节
                     117     ;参数:
                     118     ;       c:被发送的字节数据,取值0x00~0xFF
                     119     ;*************************************************************************
                     120     ;c = R7
0093                 121     UartSendChar:
0093 3000FD          122             JNB     _TI_, $
0096 C200            123             CLR     _TI_
0098 8F99            124             MOV     SBUF, R7
A51 MACRO ASSEMBLER  MAIN                                                                 07/01/2006 11:27:56 PAGE     3

009A 22              125             RET
                     126     
                     127     
                     128     ;*************************************************************************
                     129     ;函数:void main()
                     130     ;功能:主函数
                     131     ;*************************************************************************
009B                 132     main:
                     133     ;       UartInit();
009B 12002C          134             LCALL   UartInit
                     135     ;       for (;;)
009E                 136     main_for:
                     137     ;       {
                     138     ;               if ( BufP2 != BufP1 )
009E E559            139                     MOV     A, BufP2
00A0 6558            140                     XRL     A, BufP1
00A2 6016            141                     JZ      main_endif
                     142     ;               {
                     143     ;                       UartSendChar(UartBuf[BufP2++]);
00A4 7430            144                             MOV     A, #UartBuf
00A6 2559            145                             ADD     A, BufP2
00A8 0559            146                             INC     BufP2
00AA F8              147                             MOV     R0, A
00AB E6              148                             MOV     A, @R0
00AC FF              149                             MOV     R7, A
00AD 120093          150                             LCALL   UartSendChar
                     151     ;                       if ( BufP2 >= SIZE )
00B0 E559            152                             MOV     A, BufP2
00B2 C3              153                             CLR     C
00B3 9428            154                             SUBB    A, #SIZE
00B5 4003            155                             JC      main_endif
                     156     ;                       {
                     157     ;                               BufP2 = 0;
00B7 755900          158                                     MOV     BufP2, #0
                     159     ;                       }
                     160     ;               }
00BA                 161     main_endif:
                     162     ;       }
00BA 80E2            163             SJMP    main_for
                     164     
                     165     
                     166     ;*************************************************************************
                     167     ;程序结束
                     168     ;*************************************************************************
                     169             END
                             
A51 MACRO ASSEMBLER  MAIN                                                                 07/01/2006 11:27:56 PAGE     4

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


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

ACC. . . . . . . .  D ADDR   00E0H   A   
BUFP1. . . . . . .  D ADDR   0058H   A   
BUFP2. . . . . . .  D ADDR   0059H   A   
EA . . . . . . . .  B ADDR   00A8H.7 A   
ES . . . . . . . .  B ADDR   00A8H.4 A   
MAIN . . . . . . .  C ADDR   009BH   A   
MAIN_ENDIF . . . .  C ADDR   00BAH   A   
MAIN_FOR . . . . .  C ADDR   009EH   A   
PCON . . . . . . .  D ADDR   0087H   A   
PREMAIN. . . . . .  C ADDR   0026H   A   
PSW. . . . . . . .  D ADDR   00D0H   A   
RI . . . . . . . .  B ADDR   0098H.0 A   
RXD. . . . . . . .  B ADDR   00B0H.0 A   
SBUF . . . . . . .  D ADDR   0099H   A   
SCON . . . . . . .  D ADDR   0098H   A   
SIZE . . . . . . .  N NUMB   0028H   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   
TXD. . . . . . . .  B ADDR   00B0H.1 A   
UARTBUF. . . . . .  D ADDR   0030H   A   
UARTINIT . . . . .  C ADDR   002CH   A   
UARTINIT_FOR . . .  C ADDR   0038H   A   
UARTINTSVC . . . .  C ADDR   0061H   A   
UARTINTSVC_END . .  C ADDR   008AH   A   
UARTINTSVC_TI. . .  C ADDR   0083H   A   
UARTSENDCHAR . . .  C ADDR   0093H   A   
_TI_ . . . . . . .  B ADDR   0020H.0 A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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