📄 at89c2051.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 + -