📄 serial-eeprom-example.lst
字号:
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 1
MCS-51 Family Macro Assembler A S E M - 5 1 V 1.3
=====================================================
Source File: E:\Electronics\MiCrOConTroller\Micro Programming\M-IDE\serial-eeprom\serial-eeprom-example.asm
Object File: E:\Electronics\MiCrOConTroller\Micro Programming\M-IDE\serial-eeprom\serial-eeprom-example.hex
List File: E:\Electronics\MiCrOConTroller\Micro Programming\M-IDE\serial-eeprom\serial-eeprom-example.lst
Line I Addr Code Source
1:
2: ;a 93CS46 serial EEPROM connected to port 1
3:
4: ;when done accessing, cs and di should be left low
5: ;and sk should be left high. pe and pre should be
6: ;left low, but that really isn't as important
7: ;when data is output on the do pin, di must be low
8:
9: B 90 cs bit p1.0 ;0x90 ; p1.0 - CS - Chip Select
10: B 91 sk bit p1.1 ;0x91 ; p1.1 - SK - Clock
11: B 92 di bit p1.2 ;0x92 ; p1.2 - DI - Data Input
12: B 93 do bit p1.3 ;0x93 ; p1.3 - DO - Data Output
13: B 94 pe bit p1.4 ;0x94 ; p1.4 - PE - Program Enable
14: B 95 pre bit p1.5 ;0x95 ; p1.5 - PRE - Protect Reg. En.
15:
16: ;********************************************************
17: ; some initial setup
18: ;********************************************************
19:
20: N 0030 stack equ 30h
21: N 00FD baud_const equ 253 ;19200 baud w/ 11.0592 MHz cyrstal
22:
23: 0000 D2 94 setb pe
24: 0002 D2 95 setb pre
25: 0004 C2 92 clr di
26: 0006 D2 93 setb do
27: 0008 C2 90 clr cs
28: 000A D2 91 setb sk
29:
30: ;********************************************************
31: ; The user interface
32: ;********************************************************
33:
34: 000C main:
35: 000C 90 00 14 mov dptr, #menu_mesg
36: 000F 12 01 9B lcall pstr
37: 0012 80 30 sjmp main_loop
38: 0014 0D 0A menu_mesg: db 13,10
39: 0016 20 72 20 3D db " r = read eeprom",13,10
001A 20 72 65 61
001E 64 20 65 65
0022 70 72 6F 6D
0026 0D 0A
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 2
Line I Addr Code Source
40: 0028 20 65 20 3D db " e = edit eeprom memory",13,10
002C 20 65 64 69
0030 74 20 65 65
0034 70 72 6F 6D
0038 20 6D 65 6D
003C 6F 72 79 0D
0040 0A
41: 0041 0D 0A 00 db 13,10,0
42:
43: 0044 main_loop:
44:
45: 0044 12 01 57 lcall cin
46: 0047 B4 72 17 cjne a, #'r', main2
47: 004A 90 00 53 mov dptr, #readmesg
48: 004D 12 01 9B lcall pstr
49: 0050 02 00 84 ljmp readit
50: 0053 72 65 61 64 readmesg: db "read eeprom",13,10,0
0057 20 65 65 70
005B 72 6F 6D 0D
005F 0A 00
51: 0061 B4 65 1E main2: cjne a, #'e', main3
52: 0064 90 00 6D mov dptr, #editmesg
53: 0067 12 01 9B lcall pstr
54: 006A 02 00 C4 ljmp editit
55: 006D 65 64 69 74 editmesg: db "edit eeprom memory",13,10,0
0071 20 65 65 70
0075 72 6F 6D 20
0079 6D 65 6D 6F
007D 72 79 0D 0A
0081 00
56: 0082 main3:
57: 0082 80 C0 sjmp main_loop
58:
59:
60: 0084 readit:
61: 0084 78 00 mov r0, #0
62:
63: 0086 readback:
64: 0086 E8 mov a, r0
65: 0087 54 07 anl a, #00000111b
66: 0089 70 11 jnz readbk2
67: 008B 12 01 67 lcall newline
68: 008E E8 mov a, r0
69: 008F 12 01 74 lcall phex
70: 0092 74 3A mov a, #':'
71: 0094 12 01 5F lcall cout
72: 0097 74 20 mov a, #' '
73: 0099 12 01 5F lcall cout
74: 009C readbk2:
75: 009C 12 02 C7 lcall read
76: 009F EA mov a, r2
77: 00A0 12 01 74 lcall phex
78: 00A3 EB mov a, r3
79: 00A4 12 01 74 lcall phex
80: 00A7 74 20 mov a, #' '
81: 00A9 12 01 5F lcall cout
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 3
Line I Addr Code Source
82: 00AC 08 inc r0
83: 00AD B8 40 D6 cjne r0, #64, readback
84: 00B0 12 01 67 lcall newline
85:
86: 00B3 12 04 77 lcall wen
87: 00B6 12 03 5D lcall pren
88: 00B9 78 00 mov r0, #0
89: 00BB 12 04 3D lcall prwrite
90: 00BE 12 04 B9 lcall wds
91:
92: 00C1 02 00 44 ljmp main_loop
93:
94:
95: 00C4 editit:
96:
97: 00C4 90 01 28 mov dptr, #locmesg
98: 00C7 12 01 9B lcall pstr
99: 00CA 12 02 3A lcall ghex8
100: 00CD 54 3F anl a, #00111111b
101: 00CF C0 E0 push acc
102: 00D1 12 01 67 lcall newline
103: 00D4 90 01 3F mov dptr, #valmesg
104: 00D7 12 01 9B lcall pstr
105: 00DA 12 01 AF lcall ghex16
106: 00DD EB mov a, r3
107: 00DE C0 E0 push acc
108: 00E0 EA mov a, r2
109: 00E1 C0 E0 push acc
110: 00E3 12 01 67 lcall newline
111:
112: 00E6 12 04 77 lcall wen ;turn on write enable mode
113: 00E9 12 03 5D lcall pren ;enable the protect register
114: 00EC 12 03 9F lcall prclear ;turn off write protection
115:
116: 00EF D0 E0 pop acc
117: 00F1 FB mov r3, a
118: 00F2 D0 E0 pop acc
119: 00F4 FA mov r2, a
120: 00F5 D0 E0 pop acc
121: 00F7 F8 mov r0, a
122:
123: 00F8 12 03 0D lcall write ;write test two bytes
124: 00FB 12 04 B9 lcall wds
125: 00FE 90 01 1C mov dptr, #wrote1
126: 0101 12 01 9B lcall pstr
127: 0104 EA mov a, r2
128: 0105 12 01 74 lcall phex
129: 0108 EB mov a, r3
130: 0109 12 01 74 lcall phex
131: 010C 90 01 23 mov dptr, #wrote2
132: 010F 12 01 9B lcall pstr
133: 0112 E8 mov a, r0
134: 0113 12 01 74 lcall phex
135: 0116 12 01 67 lcall newline
136:
137: 0119 02 00 44 ljmp main_loop
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 4
Line I Addr Code Source
138:
139: 011C 77 72 6F 74 wrote1: db "wrote ", 0
0120 65 20 00
140: 0123 20 74 6F 20 wrote2: db " to ",0
0127 00
141:
142: 0128 57 6F 72 64 locmesg: db "Word location (0-63): ",0
012C 20 6C 6F 63
0130 61 74 69 6F
0134 6E 20 28 30
0138 2D 36 33 29
013C 3A 20 00
143: 013F 31 36 20 62 valmesg: db "16 bit value to write: ",0
0143 69 74 20 76
0147 61 6C 75 65
014B 20 74 6F 20
014F 77 72 69 74
0153 65 3A 20 00
144:
145:
146: ;********************************************************
147: ; built-in UART subroutines
148: ;********************************************************
149:
150:
151: 0157 30 98 FD cin: jnb ri, cin
152: 015A C2 98 clr ri
153: 015C E5 99 mov a, sbuf
154: 015E 22 ret
155:
156: 015F 30 99 FD cout: jnb ti, cout
157: 0162 F5 99 mov sbuf, a
158: 0164 C2 99 clr ti
159: 0166 22 ret
160:
161: 0167 C0 E0 newline:push acc
162: 0169 74 0D mov a, #13
163: 016B 31 5F acall cout
164: 016D 74 0A mov a, #10
165: 016F 31 5F acall cout
166: 0171 D0 E0 pop acc
167: 0173 22 ret
168:
169: 0174 phex:
170: 0174 phex8:
171: 0174 C0 E0 push acc
172: 0176 C4 swap a
173: 0177 54 0F anl a, #15
174: 0179 24 F6 add a, #246
175: 017B 50 02 jnc phex_b
176: 017D 24 07 add a, #7
177: 017F 24 3A phex_b: add a, #58
178: 0181 31 5F acall cout
179: 0183 D0 E0 pop acc
180: 0185 C0 E0 phex1: push acc
181: 0187 54 0F anl a, #15
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 5
Line I Addr Code Source
182: 0189 24 F6 add a, #246
183: 018B 50 02 jnc phex_c
184: 018D 24 07 add a, #7
185: 018F 24 3A phex_c: add a, #58
186: 0191 31 5F acall cout
187: 0193 D0 E0 pop acc
188: 0195 22 ret
189:
190: 0196 space:
191: 0196 74 20 mov a, #' '
192: 0198 31 5F acall cout
193: 019A 22 ret
194:
195: 019B PSTR: ;print string
196: 019B C0 E0 PUSH ACC
197: 019D E4 PSTR1: CLR A
198: 019E 93 MOVC A,@A+DPTR
199: 019F 60 0B JZ PSTR2
200: 01A1 A2 E7 mov c, acc.7
201: 01A3 54 7F anl a, #01111111b
202: 01A5 31 5F acall cout
203: 01A7 40 03 Jc pstr2
204: 01A9 A3 inc dptr
205: 01AA 80 F1 SJMP PSTR1
206: 01AC D0 E0 PSTR2: POP ACC
207: 01AE 22 RET
208:
209: ;carry set if esc pressed
210: ;psw.5 set if return pressed w/ no input
211: 01AF ghex16:
212: 01AF 7A 00 mov r2, #0 ;start out with 0
213: 01B1 7B 00 mov r3, #0
214: 01B3 7C 04 mov r4, #4 ;number of digits left
215: 01B5 C2 D5 clr psw.5
216:
217: 01B7 ghex16c:
218: 01B7 12 01 57 lcall cin
219: 01BA 12 02 7E lcall upper
220: 01BD B4 1B 02 cjne a, #27, ghex16d
221: 01C0 D3 setb c ;handle esc key
222: 01C1 22 ret
223: 01C2 B4 08 02 ghex16d:cjne a, #8, ghex16f
224: 01C5 80 03 sjmp ghex16k
225: 01C7 B4 7F 0D ghex16f:cjne a, #127, ghex16g ;handle backspace
226: 01CA BC 04 02 ghex16k:cjne r4, #4, ghex16e ;have they entered anything yet?
227: 01CD 80 E8 sjmp ghex16c
228: 01CF 12 01 5F ghex16e:lcall cout
229: 01D2 51 0B acall ghex16y
230: 01D4 0C inc r4
231: 01D5 80 E0 sjmp ghex16c
232: 01D7 B4 0D 07 ghex16g:cjne a, #13, ghex16i ;return key
233: 01DA BC 04 02 cjne r4, #4, ghex16h
234: 01DD D2 D5 setb psw.5
235: 01DF C3 ghex16h:clr c
236: 01E0 22 ret
237: 01E1 FD ghex16i:mov r5, a ;keep copy of original keystroke
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 6
Line I Addr Code Source
238: 01E2 51 1C acall asc2hex
239: 01E4 40 D1 jc ghex16c
240: 01E6 CD xch a, r5
241: 01E7 12 01 5F lcall cout
242: 01EA ED mov a, r5
243: 01EB C0 E0 push acc
244: 01ED 31 FA acall ghex16x
245: 01EF D0 E0 pop acc
246: 01F1 2A add a, r2
247: 01F2 FA mov r2, a
248: 01F3 E4 clr a
249: 01F4 3B addc a, r3
250: 01F5 FB mov r3, a
251: 01F6 DC BF djnz r4, ghex16c
252: 01F8 C3 clr c
253: 01F9 22 ret
254:
255: 01FA ghex16x: ;multiply r3-r2 by 16 (shift left by 4)
256: 01FA EB mov a, r3
257: 01FB C4 swap a
258: 01FC 54 F0 anl a, #11110000b
259: 01FE FB mov r3, a
260: 01FF EA mov a, r2
261: 0200 C4 swap a
262: 0201 54 0F anl a, #00001111b
263: 0203 4B orl a, r3
264: 0204 FB mov r3, a
265: 0205 EA mov a, r2
266: 0206 C4 swap a
267: 0207 54 F0 anl a, #11110000b
268: 0209 FA mov r2, a
269: 020A 22 ret
270:
271: 020B ghex16y: ;divide r3-r2 by 16 (shift right by 4)
272: 020B EA mov a, r2
273: 020C C4 swap a
274: 020D 54 0F anl a, #00001111b
275: 020F FA mov r2, a
276: 0210 EB mov a, r3
277: 0211 C4 swap a
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -