📄 com.lst
字号:
A51 MACRO ASSEMBLER COM 10/12/2006 09:00:39 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN COM.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE COM.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*
2 ;* 单片机接收主机的数据,然后将数据传送到P0口, 并传回给主机; *
3 ;* 当按下K1时, 单片机发送字www.hificat.com" 给主机 *
*
4 ;* *
5 ;* 注意:演示此程序需要配合串口调试软件 *
6 ;* *
7
8
0094 9 K1 EQU P1.4 ; 按键端口
10 ; 变量定义
0050 11 KEY_S EQU 50H ; 当前的按键状态
0051 12 KEY_V EQU 51H ; 上次的按键状态
13
14
0000 15 ORG 0000H
0000 020003 16 LJMP MAIN
17
0003 18 MAIN:
0003 758920 19 MOV TMOD,#20H ; 定时器1工作于8位自动重载模式,用于产生波特率
0006 758DFD 20 MOV TH1,#0FDH
0009 758BFD 21 MOV TL1,#0FDH ; 波特率9600
22
000C 759850 23 MOV SCON,#50H ; 设定串行口工作方式
000F 5387EF 24 ANL PCON,#0EFH ; 波特率不倍增
25
0012 D28E 26 SETB TR1 ; 启动定时器1
0014 75A800 27 MOV IE,#0 ; 禁止任何中断
28
0017 755101 29 MOV KEY_V,#01H ;
30
001A 31 MAIN_RX:
001A 309809 32 JNB RI,MAIN_KEY ; 是否有数据到来
001D C298 33 CLR RI
001F E599 34 MOV A,SBUF ; 暂存接收到的数据
0021 F580 35 MOV P0,A ; 数据传送到P0口
0023 120055 36 LCALL SEND_CHAR ; 回传接收到的数据
37
0026 38 MAIN_KEY:
0026 12003B 39 LCALL SCAN_KEY ; 扫描按键
0029 60EF 40 JZ MAIN_RX
002B 12005D 41 LCALL DELAY_15MS ; 延时去抖动
002E 12003B 42 LCALL SCAN_KEY
0031 60E7 43 JZ MAIN_RX
0033 855051 44 MOV KEY_V,KEY_S ; 保存键值
0036 120045 45 LCALL PROC_KEY ; 键处理
0039 80DF 46 SJMP MAIN_RX
47 ;===============================================================================
003B 48 SCAN_KEY:
49 ; 扫描按键, (在此实例中仅扫描按键K1)
50 ; 传入参数: 无
51 ; 返回值: 无
003B E4 52 CLR A
003C A294 53 MOV C,K1
003E 92E0 54 MOV ACC.0, C
0040 F550 55 MOV KEY_S,A
0042 6551 56 XRL A,KEY_V ; 检查按键状态是否改变
0044 22 57 RET
A51 MACRO ASSEMBLER COM 10/12/2006 09:00:39 PAGE 2
58 ;===============================================================================
0045 59 PROC_KEY:
60 ; 按键处理子程序 --- 发送字符串到PC
61 ; 传入参数: KEY_V --- 按键值
62 ; 返回值: 无
0045 20940C 63 JB K1,END_PROC_KEY ; K1未按下时,直接返回
0048 900068 64 MOV DPTR,#TAB_WWW ; 字串表格地址
65
004B 66 SEND_STRING:
004B E4 67 CLR A
004C 93 68 MOVC A,@A+DPTR
004D 6005 69 JZ END_PROC_KEY ; 查到00H时,表示字串结束
004F 1155 70 ACALL SEND_CHAR
0051 A3 71 INC DPTR ; 下一字符
0052 80F7 72 SJMP SEND_STRING
0054 73 END_PROC_KEY:
0054 22 74 RET
75
76 ;===============================================================================
0055 77 SEND_CHAR:
78 ; 传送一个字符
79 ; 传入参数: ACC(要发送的数据)
80 ; 返回值: 无
0055 F599 81 MOV SBUF,A
0057 3099FD 82 JNB TI,$ ; 等特数据传送
005A C299 83 CLR TI ; 清除数据传送标志
005C 22 84 RET
85 ;===============================================================================
86 ; 扫描按键, (在此实例中仅扫描按键K1)
87 ; 传入参数: 无
88 ; 返回值: 无
005D 89 DELAY_15MS:
005D 7F0F 90 MOV R7,#15
005F 91 DELAY15MS_1:
005F 7EE8 92 MOV R6,#0E8H
0061 93 DELAY15MS_2:
0061 00 94 NOP
0062 00 95 NOP
0063 DEFC 96 DJNZ R6,DELAY15MS_2
0065 DFF8 97 DJNZ R7,DELAY15MS_1
0067 22 98 RET
99
100
0068 101 TAB_WWW:
0068 7777772E 102 DB "www.hificat.com"
006C 68696669
0070 6361742E
0074 636F6D
0077 0A0D 103 DB 0AH,0DH ;换行/回车
0079 00 104 DB 00H
105 END
A51 MACRO ASSEMBLER COM 10/12/2006 09:00:39 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
DELAY15MS_1. . . . C ADDR 005FH A
DELAY15MS_2. . . . C ADDR 0061H A
DELAY_15MS . . . . C ADDR 005DH A
END_PROC_KEY . . . C ADDR 0054H A
IE . . . . . . . . D ADDR 00A8H A
K1 . . . . . . . . B ADDR 0090H.4 A
KEY_S. . . . . . . N NUMB 0050H A
KEY_V. . . . . . . N NUMB 0051H A
MAIN . . . . . . . C ADDR 0003H A
MAIN_KEY . . . . . C ADDR 0026H A
MAIN_RX. . . . . . C ADDR 001AH A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
PCON . . . . . . . D ADDR 0087H A
PROC_KEY . . . . . C ADDR 0045H A
RI . . . . . . . . B ADDR 0098H.0 A
SBUF . . . . . . . D ADDR 0099H A
SCAN_KEY . . . . . C ADDR 003BH A
SCON . . . . . . . D ADDR 0098H A
SEND_CHAR. . . . . C ADDR 0055H A
SEND_STRING. . . . C ADDR 004BH A
TAB_WWW. . . . . . C ADDR 0068H 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
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -