-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcodigodelpic.txt
426 lines (335 loc) · 11.9 KB
/
codigodelpic.txt
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created: lu. may. 20 2019
; Processor: PIC10F200
; Compiler: MPASM (Proteus)
;====================================================================
#include p10f200.inc ; Include register definition file
__config 0x000 ;
radix dec ; números en decimal por defecto
;====================================================================
; DEFINITIONS
;====================================================================
;direccion equ 0x07
;----------------------------------- Registros especiales ----------------------------------------
;Direcc equ 0x60
;====================================================================
; VARIABLES
;====================================================================
cblock 0x10 ;Primera posicion libre
CNT ;CONTADOR DE RETARDOS
CNTBIT ;CONTADOR DE BITS
DATO ;DATO A TRANSMITIR
LEDROJO
LEDVERDE
BOTON
PREGUNTA1
PREGUNTA2
COMANDO
RESPUESTA
TMP
TEMP
COUNT
SERBUF
BOTONMEMORY
endc
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
RST code 0x0
MOVLW 0xE
TRIS GPIO
movlw 0x0F ;Prescaler 1/128 para WDT
option
CLRW
;====================================================================
; CODE SEGMENT
;====================================================================
loop_main:
;CALL RXBYTE ;prueba de comunicacion
;MOVLW 0x62 ;b
; CALL TXBYTE
;FINI: GOTO FINI
;FURRRULA NEXT 5
CALL RXBYTE ;guarda byte en PREGUNTA
MOVF COMANDO, W ;Muevo PREGUNTA a W
XORLW 0x81 ;Calulo la XOR entre el valor de W y 0x81
BTFSS STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
GOTO loop_main ;si no son iguales, vuelva a empezar
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
CALL RXBYTE ;captura del byte
MOVF RESPUESTA, W
CALL TXBYTE
MOVF COMANDO, W ;transmitimos el byte guardado en COMANDO a W
BCF STATUS, 2 ;limpiamos flag Z
XORLW 0x00 ;comparo con la mascara 0x00 para ver si es el comando 000 el recibido
BTFSC STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
CALL TX7
MOVF COMANDO, W
BCF STATUS, 2
XORLW 0x01
BTFSC STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
CALL TX1
MOVF COMANDO, W
BCF STATUS, 2
XORLW 0x02
BTFSC STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
CALL TX2
MOVF COMANDO, W
BCF STATUS, 2
XORLW 0x03
BTFSC STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
CALL TX3
MOVF COMANDO, W
BCF STATUS, 2
XORLW 0x05
BTFSC STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
CALL TX4
MOVF COMANDO, W
BCF STATUS, 2
XORLW 0x06
BTFSC STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
CALL TX5
MOVF COMANDO, W
BCF STATUS, 2
XORLW 0x07
BTFSC STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
CALL TX6
MOVF COMANDO, W
BCF STATUS, 2
XORLW 0x04
BTFSC STATUS, 2 ;Compruebo si son iguales fijandome en el flag Z
CALL TX8
;GOTO loop_dale
;MOVLW 0xF ;apago uart
;TRIS GPIO
BSF GPIO, 0
GOTO loop_main
FIN:
goto FIN
TX1:
;MOVLW 0xC
;TRIS GPIO
;BCF GPIO, 2
MOVLW 0x04
XORWF GPIO, W
TRIS GPIO
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RETLW 0
;--------------------------------------------------------
TX2:
;MOVLW 0xA
;TRIS GPIO
;BCF GPIO, 1
MOVLW 0x02
XORWF GPIO, W
TRIS GPIO
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RETLW 0
;-----------------------------------------------------
TX3:
MOVLW 0x8
TRIS GPIO
;
;BCF GPIO, 2
;BCF GPIO, 1
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RETLW 0
;--------------------------------------------------------
TX4:
;MOVLW 0xC
;TRIS GPIO
BSF GPIO, 2
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RETLW 0
;--------------------------------------------------------
TX5:
;MOVLW 0xA
;TRIS GPIO
BSF GPIO, 1
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RETLW 0
;-----------------------------------------------------
TX6:
MOVLW 0xE
TRIS GPIO
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
BSF GPIO, 1
RETLW 0
;---------------------------------------------------------
; METODO para capturar el estado de las GPIO del PIC
TX7:
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RETLW 0
;-----------------------------------------------------
TX8:
CLRF BOTONMEMORY
MOVF BOTONMEMORY, W
MOVWF RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 1 ;Compruebo el gpio1, si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RLF RESPUESTA, F ;Roto RESPUESTA a la izquierda para almacenar el siguiente valor
MOVLW 0 ;Cargo 0 en W
BTFSC GPIO, 2 ;Compruebo el gpio2 si esta a 0 salto la siguiente
MOVLW 1 ;si esta a 1 cargo 1 en W
IORWF RESPUESTA, F ;hago una OR entre W y RESPUESTA y guardo en RESPUESTA
RETLW 0
;--------------------------------------------------------
TXBYTE:
MOVWF DATO
MOVLW 8
MOVWF CNTBIT
BCF GPIO,0
MOVLW 7
MOVWF CNT
loop_reetardo: DECFSZ CNT , F
GOTO loop_reetardo
txbit:
MOVF DATO,W
MOVWF GPIO
RRF DATO, F
MOVLW 6
MOVWF CNT
loop_retardo2: DECFSZ CNT, F
GOTO loop_retardo2
nop
DECFSZ CNTBIT ,F
GOTO txbit
BSF GPIO,0
MOVLW 6
MOVWF CNT
loop_retardo3: DECFSZ CNT, F
GOTO loop_retardo3
RETLW 0
RXBYTE:
MOVLW 0x01
BTFSS GPIO, 3 ;Compruebo si son iguales fijandome en el flag Z
IORWF BOTONMEMORY, f
BTFSC GPIO,0
GOTO RXBYTE
MOVLW 8
MOVWF CNTBIT
CLRF COMANDO
CALL half_baud
BTFSC GPIO,0
GOTO RXBYTE
RXBYTE1:
CALL baud
BCF STATUS,0
RRF COMANDO, F
BTFSC GPIO, 0
BSF COMANDO, 7
DECFSZ CNTBIT ,F
GOTO RXBYTE1
CALL baud
MOVF COMANDO, W
RETLW 0
baud:
movlw D'2' ; 1 US (BAUD RATE CONSTANT)
movwf COUNT ; 1 US
baud1:
decfsz COUNT,F ; 1 US (+ 1 US MORE IF SKIP)
goto baud1 ; 2 US
; FALL THRU...AFTER 1+1+3x68+1 = 207 US
half_baud:
movlw D'2' ; 1 US
movwf COUNT ; 1 US
hbaud1:
decfsz COUNT,F ; 1 US (+ 1 US MORE IF SKIP)
goto hbaud1 ; 2 US
retlw 0 ; ...AFTER 1+1+3x68+1 = 207 US (X2=414 US)
;====================================================================
END