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

📄 main.lst

📁 周立功单片机上的源程序
💻 LST
字号:
A51 MACRO ASSEMBLER  MAIN                                                                 06/29/2006 13:50:34 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.asm
                       3     ;       串行口通信方式3例程
                       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 0200A9           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                                                                 06/29/2006 13:50:34 PAGE     2

0044 D200             59             SETB    _TI_
0046 7598D0           60             MOV     SCON, #0xD0     ;串行口方式3(9位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 309820           85             JNB     RI, UartINTSVC_TI
006C AA99             86             MOV     R2, SBUF
006E C298             87             CLR     RI
0070 EA               88             MOV     A, R2           ;开始判断校验位
0071 A2D0             89             MOV     C, P
0073 309A01           90             JNB     RB8, UartINTSVC_next
0076 B3               91             CPL     C
0077                  92     UartINTSVC_next:
0077 4013             93             JC      UartINTSVC_TI
0079 7430             94             MOV     A, #UartBuf     ;校验通过,保存数据
007B 2558             95             ADD     A, BufP1
007D 0558             96             INC     BufP1
007F F8               97             MOV     R0, A
0080 EA               98             MOV     A, R2
0081 F6               99             MOV     @R0, A
0082 E558            100             MOV     A, BufP1
0084 C3              101             CLR     C
0085 9428            102             SUBB    A, #SIZE
0087 4003            103             JC      UartINTSVC_TI
0089 755800          104             MOV     BufP1, #0
                     105             ;处理发送中断
008C                 106     UartINTSVC_TI:
008C 309904          107             JNB     TI, UartINTSVC_end
008F C299            108             CLR     TI
0091 D200            109             SETB    _TI_
                     110             ;恢复寄存器
0093                 111     UartINTSVC_end:
0093 D002            112             POP     0x02
0095 D000            113             POP     0x00
0097 D0D0            114             POP     PSW
0099 D0E0            115             POP     ACC
                     116             ;中断返回
009B 32              117             RETI
                     118     
                     119     
                     120     ;*************************************************************************
                     121     ;函数:void UartSendChar(unsigned char c)
                     122     ;功能:通过串行口发送单个字节
                     123     ;参数:
                     124     ;       c:被发送的字节数据,取值0x00~0xFF
A51 MACRO ASSEMBLER  MAIN                                                                 06/29/2006 13:50:34 PAGE     3

                     125     ;*************************************************************************
                     126     ;c = R7
009C                 127     UartSendChar:
009C 3000FD          128             JNB     _TI_, $
009F C200            129             CLR     _TI_
00A1 EF              130             MOV     A, R7
00A2 A2D0            131             MOV     C, P
00A4 929B            132             MOV     TB8, C
00A6 F599            133             MOV     SBUF, A
00A8 22              134             RET
                     135     
                     136     
                     137     ;*************************************************************************
                     138     ;函数:void main()
                     139     ;功能:主函数
                     140     ;*************************************************************************
00A9                 141     main:
                     142     ;       UartInit();
00A9 12002C          143             LCALL   UartInit
                     144     ;       for (;;)
00AC                 145     main_for:
                     146     ;       {
                     147     ;               if ( BufP2 != BufP1 )
00AC E559            148                     MOV     A, BufP2
00AE 6558            149                     XRL     A, BufP1
00B0 6016            150                     JZ      main_endif
                     151     ;               {
                     152     ;                       UartSendChar(UartBuf[BufP2++]);
00B2 7430            153                             MOV     A, #UartBuf
00B4 2559            154                             ADD     A, BufP2
00B6 0559            155                             INC     BufP2
00B8 F8              156                             MOV     R0, A
00B9 E6              157                             MOV     A, @R0
00BA FF              158                             MOV     R7, A
00BB 12009C          159                             LCALL   UartSendChar
                     160     ;                       if ( BufP2 >= SIZE )
00BE E559            161                             MOV     A, BufP2
00C0 C3              162                             CLR     C
00C1 9428            163                             SUBB    A, #SIZE
00C3 4003            164                             JC      main_endif
                     165     ;                       {
                     166     ;                               BufP2 = 0;
00C5 755900          167                                     MOV     BufP2, #0
                     168     ;                       }
                     169     ;               }
00C8                 170     main_endif:
                     171     ;       }
00C8 80E2            172             SJMP    main_for
                     173     
                     174     
                     175     ;*************************************************************************
                     176     ;程序结束
                     177     ;*************************************************************************
                     178             END
                             
A51 MACRO ASSEMBLER  MAIN                                                                 06/29/2006 13:50:34 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   00A9H   A   
MAIN_ENDIF . . . .  C ADDR   00C8H   A   
MAIN_FOR . . . . .  C ADDR   00ACH   A   
P. . . . . . . . .  B ADDR   00D0H.0 A   
PCON . . . . . . .  D ADDR   0087H   A   
PREMAIN. . . . . .  C ADDR   0026H   A   
PSW. . . . . . . .  D ADDR   00D0H   A   
RB8. . . . . . . .  B ADDR   0098H.2 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   
TB8. . . . . . . .  B ADDR   0098H.3 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   0093H   A   
UARTINTSVC_NEXT. .  C ADDR   0077H   A   
UARTINTSVC_TI. . .  C ADDR   008CH   A   
UARTSENDCHAR . . .  C ADDR   009CH   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 + -