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

📄 at89c2051.lst

📁 单片机模拟串行通讯程序at89c2051串口,经KEIL测试OK。
💻 LST
字号:
A51 MACRO ASSEMBLER  AT89C2051                                                            06/29/2007 15:32:23 PAGE     1


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

LOC  OBJ            LINE     SOURCE

                       1     ;模拟串行通讯程序
                       2     
  00B2                 3      io_rxd  equ  p3.2           ;模拟rxd,中断接收
  0090                 4      io_txd  equ  p1.0           ;模拟txd
  007E                 5      ar_sbuf equ  7eh            ;模拟串行接收存储单元
  007F                 6      at_sbuf equ  7fh            ;模拟串行发送存储单元
  0000                 7      a_ri    bit  0                    ;模拟串行接收标志位,a_ri="1",表示已接收新数据
  0001                 8      a_ti    bit  1                    ;模拟串行发送标志位,a_ti="1",表示已发送新数据
                       9     
0000                  10              org 0000h
0000 020030           11                  ljmp start        ;复位入口
0003                  12              org 0003h
0003 020042           13                  ljmp a_asi          ;模拟串行接收中断入口
                      14     
0030                  15              org 0030h
0030 758130           16     start:   mov sp,#30h
0033 D2B8             17                   setb px0            ;置模拟串行接收(int0)最高级中断
0035 D2A8             18              setb ex0             ;允许int0中断
0037 D2AF             19              setb ea              ;总中断允许
                      20     ;......
0039                  21     main:
                      22     ;......
0039 757F00           23              mov at_sbuf,#0      ;将要发送的数据存入at_sbuf
003C 120070           24              lcall a_aso            ;调模拟串行发送子程序
                      25     ;......
003F 020039           26              ljmp main
                      27     
                      28     ;模拟串行接收中断程序
0042 C0D0             29     a_asi:   push psw             ;psw保护入栈
0044 C0E0             30              push acc             ;acc保护入栈
0046 D2D3             31             setb rs0              ;更换工作寄存器组
0048 D2D4             32             setb rs1              ;或使用其它未被使用的工作寄存器组
004A 7F08             33             mov r7,#8            ;接收8位数据位
                      34     ;接收起始位
004C 12009D           35             lcall a_delay05t ;调1/2位周期延时子程序
004F 12008A           36             lcall a_test_bit  ;调逻辑检测子程序
0052 5005             37             jnc a_asi2            ;起始位正确转a_asi2,起始位逻辑应为“0”
                      38     ;程序返回出口
0054 D0E0             39     a_asi1:  pop acc                ;acc保护出栈
0056 D0D0             40              pop psw               ;psw保护出栈
0058 32               41              reti                      ;开中断返回
                      42     ;接收8位数据位
0059 1200A2           43     a_asi2:  lcall a_delay10t ;调位周期延时子程序       
005C 12008A           44              lcall a_test_bit  ;调逻辑检测子程序
005F 13               45              rrc a                     ;数据位暂存于累加器中
0060 DFF7             46              djnz r7,a_asi2       ;8位数据未接收完循环至a_asi2
                      47     ;接收终止位
0062 1200A2           48              lcall a_delay10t  ;调位周期延时子程序     
0065 12008A           49              lcall a_test_bit  ;调逻辑检测子程序
0068 50EA             50              jnc a_asi1             ;终止位不正确转a_asi1
006A D200             51                  setb a_ri               ;模拟串行接收标志位a_ri置位
006C F57E             52              mov ar_sbuf,a      ;8位接收数据存入模拟串行接收存储器ar_sbuf
006E 80E4             53                  sjmp a_asi1           ;转中断出口返回
                      54     
                      55     ;模拟串行发送子程序
0070 C2AF             56     a_aso:   clr ea                   ;禁止所有中断
0072 7C09             57     a_aso1:  mov r4,#9            ;8位数据+1位终止位
0074 C290             58              clr io_txd            ;模拟串口输出逻辑"0",输出起始位
A51 MACRO ASSEMBLER  AT89C2051                                                            06/29/2007 15:32:23 PAGE     2

0076 00               59               nop
0077 E57F             60                   mov a,at_sbuf     ;模拟发送数据存储器内容送累加器
0079 D3               61              setb c                  ;终止位在c中,置终止位
007A 1200A7           62     a_aso2:  lcall a_delay10t1  ;调位周期延时子程序
007D 13               63               rrc a                        ;取发送逻辑至c中
007E 9290             64               mov io_txd,c           ;由模拟串行口发送
0080 DCF8             65               djnz r4,a_aso2        ;未发送完循环至a_aso2
0082 1200A7           66                   lcall a_delay10t1  ;调位周期延时子程序
0085 D201             67               setb a_ti                 ;模拟串新接收标志位置位
0087 D2AF             68               setb ea                    ;开中断
0089 22               69               ret                           ;返回
                      70     
                      71     ;模拟串行接收逻辑检测子程序,三取二
008A 20B208           72     a_test_bit: jb io_rxd,a_test_bit1   ;第1次检测为“1”,转a_test_bit1
008D 30B203           73                         jnb io_rxd,a_test_bitl ;两次检测都为“0”,转a_test_bitl
0090 20B208           74                         jb io_rxd,a_test_bith   ;第3次检测为"1",转a_test_bith
0093 C3               75     a_test_bitl:clr c                              ;检测逻辑在c中,c清零
0094 22               76                  ret                                 ;返回
0095 20B203           77     a_test_bit1:jb io_rxd,a_test_bith   ;两次检测都为“1”,转a_test_bith
0098 30B2F8           78                          jnb io_rxd,a_test_bitl ;第3次检测为"0",转a_test_bitl
009B D3               79     a_test_bith:setb c                            ;检测逻辑在c中,c置位
009C 22               80                   ret                                ;返回
                      81     
                      82     ;模拟串行通讯程序延时子程序
                      83     ;时钟频率=11.0592MHz,波特率=9600pbs
                      84     
009D 7D0C             85     A_DELAY05T: MOV R5,#12
009F DDFE             86     A_DELAY05T1:DJNZ R5,$
00A1 22               87                 RET
00A2 7D26             88     A_DELAY10T: MOV R5,#38
00A4 00               89                 NOP
00A5 80F8             90                 SJMP A_DELAY05T1
00A7 7D2A             91     A_DELAY10T1:MOV R5,#42
00A9 80F4             92                 SJMP A_DELAY05T1
*** WARNING #A41 IN 92 (AT89C2051.ASM, LINE 92): MISSING 'END' STATEMENT
A51 MACRO ASSEMBLER  AT89C2051                                                            06/29/2007 15:32:23 PAGE     3

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


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

ACC. . . . . . . .  D ADDR   00E0H   A   
AR_SBUF. . . . . .  N NUMB   007EH   A   
AT_SBUF. . . . . .  N NUMB   007FH   A   
A_ASI. . . . . . .  C ADDR   0042H   A   
A_ASI1 . . . . . .  C ADDR   0054H   A   
A_ASI2 . . . . . .  C ADDR   0059H   A   
A_ASO. . . . . . .  C ADDR   0070H   A   
A_ASO1 . . . . . .  C ADDR   0072H   A   
A_ASO2 . . . . . .  C ADDR   007AH   A   
A_DELAY05T . . . .  C ADDR   009DH   A   
A_DELAY05T1. . . .  C ADDR   009FH   A   
A_DELAY10T . . . .  C ADDR   00A2H   A   
A_DELAY10T1. . . .  C ADDR   00A7H   A   
A_RI . . . . . . .  B ADDR   0020H.0 A   
A_TEST_BIT . . . .  C ADDR   008AH   A   
A_TEST_BIT1. . . .  C ADDR   0095H   A   
A_TEST_BITH. . . .  C ADDR   009BH   A   
A_TEST_BITL. . . .  C ADDR   0093H   A   
A_TI . . . . . . .  B ADDR   0020H.1 A   
EA . . . . . . . .  B ADDR   00A8H.7 A   
EX0. . . . . . . .  B ADDR   00A8H.0 A   
IO_RXD . . . . . .  B ADDR   00B0H.2 A   
IO_TXD . . . . . .  B ADDR   0090H.0 A   
MAIN . . . . . . .  C ADDR   0039H   A   
P1 . . . . . . . .  D ADDR   0090H   A   
P3 . . . . . . . .  D ADDR   00B0H   A   
PSW. . . . . . . .  D ADDR   00D0H   A   
PX0. . . . . . . .  B ADDR   00B8H.0 A   
RS0. . . . . . . .  B ADDR   00D0H.3 A   
RS1. . . . . . . .  B ADDR   00D0H.4 A   
SP . . . . . . . .  D ADDR   0081H   A   
START. . . . . . .  C ADDR   0030H   A   


REGISTER BANK(S) USED: 0 

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

⌨️ 快捷键说明

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