📄 startup.lst
字号:
A51 MACRO ASSEMBLER STARTUP 05/18/2008 16:31:01 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN .\STARTUP.obj
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE C:\Keil\C51\EXAMPLES\c51\master\STARTUP.A51 SET(SMALL) DEBUG PRINT(.\START
UP.lst) OBJECT(.\STARTUP.obj) EP
LOC OBJ LINE SOURCE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
0030 33 SBB equ 30h ;帧头 总为68h
0031 34 SBTA equ 31h ;目标地址
0032 35 SBCMD equ 32h ;command
0033 36 SBDL equ 33h ;9=>sbdl>=1 34h-3ch存放发送的数据,不在长度范围内将
导致数据发送失败
003D 37 SBS equ 3dh ;校验和
003E 38 SBE equ 3eh ;帧尾 总为 55h
003F 39 addr equ 3fh ;数据发送目标地址
40
41
0040 42 RBB equ 40h ;类似发送缓冲区
0041 43 RBTA equ 41h
0042 44 RBCMD equ 42h
0043 45 RBDL equ 43h ;9=>rbdl>=1 44h-4ch存放接收的数据
004D 46 RBS equ 4dh
004E 47 RBE equ 4eh
004F 48 Rstatus equ 4fh ;接收状态字 代表目前接收的字节归属
0000 49 RBRDY bit 00h ;接收完成标志
50 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51
0000 52 org 00h
0000 020030 53 ljmp start
000B 54 org 0bh
000B 0200B7 55 ljmp T_0 ;T0用于判断下位机响应是否超时
0023 56 org 23h
A51 MACRO ASSEMBLER STARTUP 05/18/2008 16:31:01 PAGE 2
0023 020105 57 ljmp recieve
0030 58 org 30h
0030 59 start:
0030 75816F 60 mov sp,#6fh
0033 53877F 61 anl pcon,#7fh ;设置smod=0
0036 759890 62 mov scon,#90h ;串行方式2
0039 C29D 63 clr sm2 ;不论收到的rb8值是多少,都可以接收到数据
003B D2AF 64 setb ea ;开总中断
003D D2AC 65 setb es ;开串口中断
003F D2BC 66 setb ps ;串口中断优先
0041 758901 67 mov tmod,#01h ;定时器方式1
0044 D2A9 68 setb et0 ;开定时器中断
0046 C28C 69 clr tr0 ;暂时不计时
70
0048 780F 71 mov r0,#0fh ;重置所有下位机
004A 7901 72 mov r1,#1h ;数据长为1 (无用的数据,兼容用)
004C 753400 73 mov 34h,#00h ;任意值
004F 753FFF 74 mov addr,#0ffh ;广播地址
0052 D29B 75 setb TB8 ;所有mcu都可以接收到此信息
0054 1200EB 76 lcall write_SB
0057 120191 77 lcall Send ;发送
78
005A 753F00 79 mov addr,#00h
005D 80 next_mcu:
005D 1200DE 81 lcall next_addr ;取下一下位机地址
0060 7880 82 mov r0,#80h ;地址匹配命令
0062 7901 83 mov r1,#1h ;
0064 753400 84 mov 34h,#00h ;任意值
0067 D29B 85 setb TB8 ;所有下位机都可以接收到此信息
0069 1200EB 86 lcall write_SB
006C 120191 87 lcall Send ;发送
88
006F D28C 89 setb tr0 ;计时开始
0071 3000FD 90 jnb RBRDY,$
0074 C28C 91 clr tr0
0076 758C00 92 mov th0,#0
0079 758A00 93 mov tl0,#0
007C C200 94 clr RBRDY
95
007E 7401 96 mov a,#01h
0080 B542DA 97 cjne a,RBCMD,next_mcu ;不是slave机响应信息则说明该机不存在,测试下一地址
0083 7401 98 mov a,#01h
0085 B544D5 99 cjne a,44h,next_mcu ;接收到的数据不是01h说明slave机没有需要传送的数据,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -