?? password clock.lst
字號:
文件:PASSWORD CLOCK.ASM 盛群編譯器版本 2.86 頁次1
1 0000 ;;*****************************************************
2 0000 ;@************ Filename : CLOCK.ASM ***************
3 0000 ;@****************** OSC:1MHz *********************
4 0000 ;@****************** HT48RA0-2 ****************
5 0000 ;;*****************************************************
6 0000 ;************************************************************
7 0000 ;控制口的結構:
8 0000 ;PB1 -- SCL
9 0000 ;PB0 -- SDA
10 0000 ;;4 scan line for output PA3~PA6
11 0000 ;;3 data line for input PB2~PB4
12 0000 ;;key matrix=3x4 12keys
13 0000 ;;PB5 is for "#" input
14 0000 ;;SYSTEM VOLT = 3V
15 0000 ;;WDT DISABLE
16 0000 ;;PB0~PB4 NO WAKEUP ,PB5 WAKEUP
17 0000 ;*************************************************************
18 0000
19 0000 # include ht48ra0-2.inc
20 0000
21 0000 ;=====================================
22 0000 ;equ定義區間
23 0000 debounce_num equ 16
24 0000 scl equ pb.1 ;時鐘信號引腳定義
25 0000 sda equ pb.0 ;串列資料引腳定義
26 0000 read_out equ [3ch] ;寫暫存器
27 0000 write_in equ [3dh] ;讀暫存器
28 0000 word_address equ [3eh]
29 0000 data_8 equ [3fh]
30 0000 ;---------------------------
31 0000
32 0000 ;---------------------------
33 0000 ;宏定義
34 0000 ;延遲宏,延遲100微秒
35 0000 d_1 macro
36 0000 local label
37 0000 mov a,64h
38 0000 mov delay,a
39 0000 label:
40 0000 sdz delay
41 0000 jmp label
42 0000 endm
43 0000 ;*************************************************************
44 0000 SAMPLE .SECTION 'DATA'
45 0000
46 0000 ;; --- Temp RAM ---
47 0000 00 a_SR10 DB ? ;;WORK Temp Register
48 0001 00 a_SR11 DB ? ;;
49 0002 00 temp_num DB ?
50 0003
51 0003 ;;------CODE RAM---------
52 0003
53 0003 0008[ array_data db 8 dup (?) ;;8 bit password
00
]
54 000B
55 000B ;;--------- Program RAM --------
文件:PASSWORD CLOCK.ASM 盛群編譯器版本 2.86 頁次2
56 000B 00 COLUMMN DB ? ;;Scan Key Colummn Step Number
57 000C 00 KEY_CODE0 DB ? ;;Save Previous Key Number
58 000D 00 KEY_CODE DB ? ;;Scan Key Number
59 000E 00 COL_VALUE DB ? ;;Read on column value to a_COL_VALUE
60 000F 00 KD_TEMP DB ? ;;Key Debounce Check Times
61 0010 00 NKD_TEMP DB ? ;;Key Release Confirm Times
62 0011 00 KEY_DATA DB ? ;;PA temp register
63 0012 00 KEY_DATA1 DB ?
64 0013 00 delay db ?
65 0014 00 delay0 db ?
66 0015 00 delay1 db ?
67 0016 00 t_count db ?
68 0017 00 t_count1 db ?
69 0018 00 release_num db ? ;;count release key
70 0019
71 0019 ;;--- User FLAG define ---
72 0019 00 fg_SendActive dbit ;;VALIDITY KEY Flag
73 0019 fg_PressRec dbit ;;Check Column Multi_Key Flag
74 0019 fg_REPEAT dbit ;;REPEAT KEY Flag
75 0019 fg_Multi_Key dbit ;;INVALID KEY Flag
76 0019 release_flg dbit
77 0019 flg_chang_key dbit
78 0019 flg_chang_personal dbit
79 0019 flg_chang_manage dbit
80 001A 00 flg_chang dbit
81 001B ;*************************************************************
82 001B
83 0000 code .section at 0 'code'
84 0000
85 0000
86 0000 org 00h
87 0000 START:
88 0000 1F92 SET PA
89 0001 0F20 MOV a, 20H
90 0002 0081 MOV MP0, a
91 0003 0F50 mov a, 50H
92 0004 CLR_RAM:
93 0004 1F00 CLR R0
94 0005 1481 INC MP0
95 0006 1785 SDZ ACC
96 0007 2804 JMP CLR_RAM
97 0008
98 0008 0F70 mov a,070h
99 0009 0080 R mov t_count,a
100 000A 0F50 mov a,050h
101 000B 0080 R mov t_count1,a
102 000C 0F7F mov a,07fh
103 000D 0080 R mov release_num,a
104 000E
105 000E ini_clock:
106 000E 0FF0 MOV a, offset personal_clock
107 000F 0087 mov tblp,a
108 0010 0F00 mov a,00h ;寫入00H為要操作的eeprom的位址
109 0011 00BE mov word_address,a
110 0012 ini_personal_clock:
111 0012 1DBD tabrdl write_in
112 0013 216F call ht24_write
113 0014 1487 inc TBLP
114 0015 14BE inc word_address
115 0016 0FF8 mov a,offset personal_clock+8
文件:PASSWORD CLOCK.ASM 盛群編譯器版本 2.86 頁次3
116 0017 0407 xor a,TBLP
117 0018 1085 sz acc
118 0019 2812 jmp ini_personal_clock
119 001A
120 001A 0FE0 MOV a, offset manage_clock
121 001B 0087 mov tblp,a
122 001C 0F10 mov a,010h ;寫入10H為要操作的eeprom的位址
123 001D 00BE mov word_address,a
124 001E ini_manage_clock:
125 001E 1DBD tabrdl write_in
126 001F 216F call ht24_write
127 0020 1487 inc TBLP
128 0021 14BE inc word_address
129 0022 0FE8 mov a,offset manage_clock+8
130 0023 0407 xor a,TBLP
131 0024 1085 sz acc
132 0025 281E jmp ini_manage_clock
133 0026
134 0026 3492 CLR PA.1
135 0027 3512 CLR PA.2
136 0028 0F00 R mov a, offset array_data
137 0029 0081 mov mp0, a
138 002A
139 002A
140 002A ;@*********** Polling System Event ***********
141 002A MAIN_PROC:
142 002A 2067 CALL SCAN_KEY_PROC ;SCAN KEY PROCEDURE
143 002B
144 002B 0F0B mov a,0bh ;* key
145 002C 0400 R xor a,key_code
146 002D 1085 sz acc
147 002E 2830 jmp $+2
148 002F 2951 jmp release_proc
149 0030
150 0030 3C00 R sz fg_repeat
151 0031 2855 jmp SLEEP
152 0032
153 0032 3C00 R SZ fg_Multi_Key ;Check Invalid Key
154 0033 282A JMP MAIN_PROC ;
155 0034
156 0034 0F0C mov a,0ch ;red key
157 0035 0400 R xor a,key_code
158 0036 1085 sz acc
159 0037 283B jmp $+4
160 0038 3000 R set flg_chang_key
161 0039 3000 R set flg_chang_personal
162 003A 282A jmp main_proc
163 003B
164 003B 0F0A mov a,0ah ;"0" key
165 003C 0400 R xor a,key_code
166 003D 1085 sz acc
167 003E 2842 jmp $+4
168 003F 3400 R clr flg_chang_personal
169 0040 3000 R set flg_chang_manage
170 0041 282A jmp main_proc
171 0042
172 0042 1080 R SZ KEY_CODE ;Check NO Key Press
173 0043 2845 jmp judge
174 0044 2855 jmp sleep
175 0045
文件:PASSWORD CLOCK.ASM 盛群編譯器版本 2.86 頁次4
176 0045
177 0045 judge:
178 0045 3092 set pa.1
179 0046 2360 call delay30ms
180 0047 3492 clr pa.1
181 0048
182 0048 0F70 mov a,070h
183 0049 0080 R mov t_count,a
184 004A 0F50 mov a,050h
185 004B 0080 R mov t_count1,a
186 004C
187 004C 3C00 R sz release_flg
188 004D 2951 jmp release_proc ;;deal with “*” key
189 004E 3C00 R sz flg_chang_key
190 004F 2913 jmp manage_code ;;input mange password
191 0050 3C00 R sz flg_chang_manage
192 0051 2932 jmp chang_manage_proc ;;change mange password
193 0052 3C00 R sz flg_chang_personal
194 0053 28F5 jmp chang_personal_proc ;;change personal password
195 0054 28DA JMP personal_code ;;input personal password
196 0055
197 0055 SLEEP:
198 0055 3C12 sz pa.0
199 0056 2858 jmp $+2
200 0057 2B56 jmp low_voltage ;;deal with low_voltage
201 0058
202 0058 1780 R sdz t_count1 ;\
203 0059 282A JMP MAIN_PROC ; \
204 005A 1780 R sdz t_count ; /if no key code wait 25s
205 005B 2858 JMP $-3 ;/
206 005C
207 005C 3E94 sz PB.5
208 005D 0002 halt ;System Halt
209 005E 3400 R CLR release_flg
210 005F 3400 R CLR flg_chang_key
211 0060 3400 R CLR flg_chang_manage
212 0061 3400 R CLR flg_chang_personal
213 0062 0F70 mov a,070h
214 0063 0080 R mov t_count,a
215 0064 0F50 mov a,050h
216 0065 0080 R mov t_count1,a
217 0066 282A JMP MAIN_PROC ;Any Key WakeUp
218 0067 ;@************* SUBROUTINE[xx]: Scan 12 Key Matrix (3x4) ************
219 0067
220 0067 SCAN_KEY_PROC:
221 0067 ;;--- READ KEY PROCEDURE ---
222 0067 ;;Initiate Process
223 0067 1F00 R clr KEY_CODE ;
224 0068 3400 R clr fg_PressRec ;
225 0069 1F00 R clr COLUMMN ;
226 006A 3400 R clr fg_Multi_Key ;
227 006B
228 006B 0FF9 mov a,0f9h
229 006C 0092 mov pa,a
230 006D 0FFD mov a,0fdh
231 006E 0080 R mov key_data,a
232 006F 0F0C mov a,0ch
233 0070 0080 R mov key_data1,a
234 0071 NEXT_COLUMN:
235 0071 0700 R mov a,key_data1
文件:PASSWORD CLOCK.ASM 盛群編譯器版本 2.86 頁次5
236 0072 0400 R xor a,key_data
237 0073 1880 R rl key_data1
238 0074 0080 R mov key_data,A
239 0075 0092 mov PA,A ;Scan Column PA PORT OUTPUT
240 0076 0000 NOP
241 0077 0000 Nop ;
242 0078 ;;--- READ PB PORT ---
243 0078 0714 MOV A,PB ;;Read on column value to a_COL_VALUE
244 0079 0080 R mov COL_VALUE,A ;;
245 007A 0F01 mov A,1
246 007B 0080 R mov a_SR11,A
247 007C 0FFB mov A,11111011b ;;
248 007D 0080 R mov a_SR10,A ;; This column value to ACC
249 007E 3800 R SNZ COL_VALUE.4
250 007F 2887 JMP KEY_ROW_4
251 0080 3800 R SNZ COL_VALUE.3
252 0081 2889 JMP KEY_ROW_3
253 0082 3800 R SNZ COL_VALUE.2
254 0083 288B JMP KEY_ROW_2
255 0084 2885 jmp $+1
256 0085 0000 nop
257 0086 2892 JMP COL_WITHOUT_KEY
258 0087 KEY_ROW_4:
259 0087 1880 R rl a_SR10 ;; a_SR10 rotate to "11101111b"
260 0088 1480 R inc a_SR11
261 0089 KEY_ROW_3:
262 0089 1880 R rl a_SR10 ;; a_SR10 rotate to "11110111b"
263 008A 1480 R inc a_SR11
264 008B KEY_ROW_2:
265 008B 0F1C mov a,01ch
266 008C 0680 R andm a,a_SR10
267 008D 0600 R AND a,COL_VALUE
268 008E
269 008E 0400 R xor A,a_SR10 ;;Check ROW Multi-Key
270 008F 3D0A SZ z
271 0090 2896 JMP COL_WITH_KEY
272 0091 COL_ERROR_KEY:
273 0091 3000 R set fg_Multi_Key
274 0092
275 0092 COL_WITHOUT_KEY:
276 0092 2893 jmp $+1
277 0093 2894 jmp $+1
278 0094 2895 jmp $+1
279 0095 28A1 JMP READY_2_NEXT_COLUMN
280 0096 COL_WITH_KEY: ;;KEY NUMBER PROCESS
281 0096 0F02 mov a,2 ;;\
282 0097 0080 R mov temp_num,a ;; \
283 0098 0700 R mov a,COLUMMN ;; \
284 0099 0300 R add a,COLUMMN ;; /COLUMMN * 3 --> ACC
285 009A ;MOV COLUMMN,a ;; /
286 009A 1780 R sdz temp_num ;; /
287 009B 2899 jmp $-2 ;;/
288 009C 0300 R add A,a_SR11 ;;
289 009D 0080 R mov KEY_CODE,A ;;
290 009E 3C00 R SZ fg_PressRec ;;Check Column Multi-Key
291 009F 3000 R set fg_Multi_Key ;;
292 00A0 3000 R set fg_PressRec ;;
293 00A1 READY_2_NEXT_COLUMN:
294 00A1 1480 R inc COLUMMN
295 00A2 0700 R mov A,COLUMMN
文件:PASSWORD CLOCK.ASM 盛群編譯器版本 2.86 頁次6
296 00A3 0C04 xor A,4
297 00A4 390A SNZ z
298 00A5 2871 JMP NEXT_COLUMN
299 00A6 0000 nop
300 00A7 READ_KEY_COMPLETE:
301 00A7
302 00A7 ;@************* SUBROUTINE[xx]: Check Key Active ************
303 00A7 ;@--- Scan Key Complete, Check key valid ? ---
304 00A7 CHECK_KEY_ACTIVE:
305 00A7 1080 R SZ KEY_CODE ;;If a_KEY_NUM = ffh, invalid key
306 00A8 28AA JMP VALID_KEY_CHK
307 00A9 28C3 JMP INVALID_KEY_CHK
308 00AA ;@--------------------------
309 00AA VALID_KEY_CHK:
310 00AA 1080 R SZ KEY_CODE0 ;;Check New Key
311 00AB 28AD JMP VALID_KEYC_PRO
312 00AC 28D2 JMP KEY_DEB
313 00AD
314 00AD VALID_KEYC_PRO:
315 00AD 0700 R mov A,KEY_CODE
316 00AE 0400 R xor A,KEY_CODE0 ;; Check Repeat key
317 00AF 390A SNZ z
318 00B0 28B8 JMP VALID_SEND_KEY
319 00B1 ;;----------------------------
320 00B1 VALID_RPSEND_KEY:
321 00B1 3800 R snz fg_Multi_key ;Check Multi-Key Clear KEY_CODE
322 00B2 28B5 JMP REPEAT_KEY
323 00B3 1F00 R clr KEY_CODE
324 00B4 0003 ret
325 00B5
326 00B5 REPEAT_KEY:
327 00B5 3000 R SET fg_REPEAT ;;SET Repeat Flag
328 00B6 28B7 jmp $+1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -