📄 startup.lst
字号:
A51 MACRO ASSEMBLER STARTUP 05/18/2008 16:37:15 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\slave\STARTUP.A51 SET(SMALL) DEBUG PRINT(.\STARTU
P.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
0030 29 SBB equ 30h
0031 30 SBTA equ 31h ;本机地址
0032 31 SBCMD equ 32h
0033 32 SBDL equ 33h ;9=>sbdl>=1 34h-3ch存放发送的数据
003D 33 SBS equ 3dh
003E 34 SBE equ 3eh
003F 35 addr equ 3fh ;本机地址
0001 36 SBRDY bit 01h
37
38
0040 39 RBB equ 40h
0041 40 RBTA equ 41h ;上位机传送来的地址信息
0042 41 RBCMD equ 42h
0043 42 RBDL equ 43h ;9=>rbdl>=1 44h-4ch存放接收的数据
004D 43 RBS equ 4dh
004E 44 RBE equ 4eh
004F 45 Rstatus equ 4fh
0000 46 RBRDY bit 00h
47
0000 48 org 00h
0000 020030 49 ljmp start
0023 50 org 23h
0023 0200EA 51 ljmp recieve
0030 52 org 30h
0030 53 start:
0030 75815F 54 mov sp,#5fh
0033 53877F 55 anl pcon,#7fh
0036 759890 56 mov scon,#90h
0039 D2AF 57 setb ea
A51 MACRO ASSEMBLER STARTUP 05/18/2008 16:37:15 PAGE 2
003B D2AC 58 setb es
003D D2BC 59 setb ps
003F 753F01 60 mov addr,#01h ;本机地址设置为01h
61
62
63
64
65
0042 66 loop:
0042 D201 67 setb SBRDY ;测试用,假设有数据需要发送
0044 3000FD 68 jnb RBRDY,$
0047 C200 69 clr RBRDY
0049 74FF 70 mov a,#0ffh
004B B5410D 71 cjne a,RBTA,no_broadcast
004E 740F 72 mov a,#0fh
0050 B54205 73 cjne a,RBCMD,no_reset
0053 D29D 74 setb sm2
0055 020042 75 ljmp loop
0058 76 no_reset:
77 ;广播时候传送给所有slave mcu的指令 扩展用
0058 020042 78 ljmp loop
79
005B 80 no_broadcast:
005B E53F 81 mov a,addr
005D B5412A 82 cjne a,RBTA,isnot_me
0060 7480 83 mov a,#80h
0062 B54208 84 cjne a,RBCMD,no_set
0065 C29D 85 clr SM2 ;设置sm2=0
0067 1200BC 86 lcall response ;发送响应帧
006A 020042 87 ljmp loop
006D 88 no_set:
006D 7481 89 mov a,#81h
006F B54215 90 cjne a,RBCMD,no_permit
91
0072 753304 92 mov SBDL,#04h ;要发送的数据长度 (可以自行设置长度及数据值)
0075 753455 93 mov 34h,#55h ;要发送的数据
0078 753533 94 mov 35h,#33h ;要发送的数据
007B 753689 95 mov 36h,#89h ;要发送的数据
007E 753756 96 mov 37h,#56h ;要发送的数据
97
0081 12008F 98 lcall send_data
0084 020042 99 ljmp loop
100
0087 101 no_permit: ;非允许数据发送指令
102 ;其他指令 扩展用
103
0087 020042 104 ljmp loop
105
106
008A 107 isnot_me:
008A D29D 108 setb sm2
008C 020042 109 ljmp loop
110
111
112
113 ;;;;;;;;;;;;;;;;;;;;;;
008F 114 send_data:
115
008F 7882 116 mov r0,#82h
0091 A933 117 mov r1,SBDL ;SBDL 以及发送数据信息在其他地方设置
0093 300115 118 jnb SBRDY,error ;如果SBRDY不为1则mcu发生错误,SBRDY不为1,不可能进入
send_data程序,SBRDY为0断定错误发生
0096 1200D0 119 lcall write_SB
0099 120176 120 lcall Send
009C 3000FD 121 jnb RBRDY,$
009F 7401 122 mov a,#01h
A51 MACRO ASSEMBLER STARTUP 05/18/2008 16:37:15 PAGE 3
00A1 B54206 123 cjne a,RBCMD,no_response
00A4 C201 124 clr SBRDY
00A6 1201AB 125 lcall Clear_sendBuf
00A9 22 126 ret
00AA 127 no_response: ;等待下一次再进行数据传送
00AA 22 128 ret
129
130
131
00AB 132 error: ;出错,则重置
00AB 1201AB 133 lcall Clear_sendBuf
00AE 1201B5 134 lcall Clear_recieveBuf
00B1 C200 135 clr RBRDY
00B3 C201 136 clr SBRDY
00B5 753F01 137 mov addr,#01h
00B8 754F00 138 mov Rstatus,#00h
00BB 22 139 ret
140
141
142 ;;;;;;;;;;;;;;;;;;;;;;;;
00BC 143 response: ;发送响应帧
00BC 7801 144 mov r0,#01h
00BE 7901 145 mov r1,#1h
00C0 753400 146 mov 34h,#00h
00C3 300103 147 jnb SBRDY,SB_no_RDY
00C6 753401 148 mov 34h,#01h
00C9 149 SB_no_RDY:
00C9 1200D0 150 lcall write_SB
00CC 120176 151 lcall Send
00CF 22 152 ret
153 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
154
155
156
00D0 157 write_SB: ;写发送缓冲区
00D0 753068 158 mov SBB,#68h
00D3 853F31 159 mov SBTA,addr
00D6 8832 160 mov SBCMD,r0
00D8 8933 161 mov SBDL,r1
00DA E532 162 mov a,SBCMD
00DC 2533 163 add a,SBDL
00DE 7834 164 mov r0,#34h
00E0 165 add_datas:
00E0 26 166 add a,@r0
00E1 08 167 inc r0
00E2 D9FC 168 djnz r1,add_datas
00E4 F53D 169 mov SBS,a
00E6 753E55 170 mov SBE,#55h
00E9 22 171 ret
172
173
174
175
176
177
178
179
180
00EA 181 recieve: ;数据接收,与上位机程序一样
182
183
184
00EA 109917 185 jbc TI,is_Send
00ED C298 186 clr RI
00EF 7400 187 mov a,#00h
00F1 B54F11 188 cjne a,Rstatus,ignore_begin
A51 MACRO ASSEMBLER STARTUP 05/18/2008 16:37:15 PAGE 4
00F4 859940 189 mov RBB,sbuf
00F7 7468 190 mov a,#68h
00F9 B54004 191 cjne a,RBB,garbage_info
00FC 754F01 192 mov Rstatus,#01h
00FF 32 193 reti
0100 194 garbage_info:
0100 754F00 195 mov Rstatus,#00h
0103 32 196 reti
0104 197 is_Send:
0104 32 198 reti
0105 199 ignore_begin:
0105 7401 200 mov a,#01H
0107 B54F07 201 cjne a,Rstatus,ignore_addr
010A 859941 202 mov RBTA,sbuf
010D 754F02 203 mov Rstatus,#02h
0110 32 204 reti
0111 205 ignore_addr:
0111 7402 206 mov a,#02h
0113 B54F0A 207 cjne a,Rstatus,ignore_comm
0116 859942 208 mov RBCMD,sbuf
0119 754F03 209 mov Rstatus,#03h
011C 85424D 210 mov RBS,RBCMD
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -