Posted By

JuanCastillo on 04/29/19


Tagged

codigo


Versions (?)

CODIGO DE ACCESO


 / Published in: Assembler
 

URL: CODIGOACCESO

Diseñar un sistema de 2 usuarios para abrir una puerta (garaje, casa, habitación, empresa, cuarto frio, etc) por medio del teclado matricial. Las contraseñas de seguridad para abrir la cerradura son los 4 últimos dígitos de la cédula de ciudadanía de 2 de los integrantes del grupo.

  1. //CODIGO DE ACCESO
  2. /*
  3. LABORATORIO 3 DE MICROPROCESADORE 1
  4.  
  5. PROFESOR: LEWIN LOPEZ
  6.  
  7. INTEGRANTES:
  8. JUAN SEBASTIAN CASTILLO CAMBINDO
  9. JONATHAN LOPEZ
  10. ANDRES TRUJILLO
  11.  
  12. PROBLEMA:
  13. A)Diseñar un sistema de 2 usuarios para abrir una puerta (garaje, casa, habitación, empresa, cuarto frio, etc) por medio del teclado matricial.
  14. Las contraseñas de seguridad para abrir la cerradura son los 4 últimos dígitos de la cédula de ciudadanía de 2 de los integrantes del grupo.
  15. 1.Inicialmente se muestra en la pantalla LCD el mensaje de bienvenida “Sistema de” “seguridad UV” (cada frase centrada en un renglón).
  16. 2.Debe presionar ‘#’ para que se borre el mensaje anterior y luego de 2 segundos muestra el mensaje “Digite clave” en el primer renglón centrado.
  17. 3.El usuario debe ingresar 4 dígitos numéricos para abrir la puerta. Cuando ingresa cada dígito se muestra un asterisco en las
  18. 4 casillas del centro del segundo renglón en forma progresiva mientras se ingresan los dígitos
  19. (lo mismo que ocurre en un cajero electrónico, datafono o clave de correo).
  20. 4.Cuando la clave es correcta se muestra en la pantalla LCD el mensaje: “Puerta” “Abierta!” (usar ambos renglones y siempre centrado),
  21. el motor (PAP) se encarga de abrir la puerta durante unos 4 segundos y luego se cierra con ayuda del mismo motor girando en sentido contrario,
  22. y se regresa al mensaje de bienvenida.
  23. 5.Cuando la clave es errada o incorrecta se muestra en la pantalla “Puerta” “Bloqueada!” (usar ambos renglones y siempre centrado),
  24. y luego debe presionarse la tecla ‘*para regresar al mensaje de bienvenida.
  25. */
  26.  
  27. .INCLUDE "M16DEF.INC"
  28. .DEVICE ATMEGA16
  29. .ORG $0000
  30.  
  31. JMP inicio
  32.  
  33. .ORG 0100
  34. m1a: .DB "SISTEMA DE ",0 // dejamos 3 espacios
  35. m1b: .DB "SEGURIDAD UV ",0 // dejamos 2 espacios
  36. m2: .DB "DIGITE CLAVE ",0 // dejamos 2 espacios
  37. m3: .DB "PUERTA ",0 // dejamos 5 espacios
  38. m3a: .DB "ABIERTA! ",0 // dejamos 4 espacios
  39. m3b: .DB "BLOQUEADA! ",0 // dejamos 3 espacios
  40. m4: .DB "************* ",0 // dejamos 6 espacios
  41.  
  42. inicio:
  43. //PILA
  44. LDI R16, HIGH(RAMEND)
  45. OUT SPH, R16
  46. LDI R16, LOW(RAMEND)
  47. OUT SPL, R16
  48.  
  49. //CONFIGURACION DE PUERTOS
  50. SER R16 //1 Como salidas
  51. OUT DDRA,R16 //LCD
  52. OUT DDRD,R16 //RS=D0 || RW=D1 || E=D2
  53. OUT DDRC,R16 //C4=IN1;C5=IN2;C6=IN3;C7=IN4;//MOTOR PAP //LED=C3 COMO SALIDAS
  54. LDI R16,$F0 //Alta=Salidas, Baja=Entradas
  55. OUT DDRB,R16 //TECLADO
  56. //INICIALIZACION
  57. CLR R16
  58. OUT PORTA,R16 //LCD OFF
  59. OUT PORTC,R16 //LED-MOTOR OFF
  60. OUT PORTD,R16
  61. //TECLADO
  62. LDI R16,$FF //RPULLUP TECLADO
  63. OUT PORTB,R16
  64. // LCD A 4 BITS
  65. SBI PORTA,5 //UN 1 EN EL PIN 5 DE LCD
  66. CBI PORTD,0 //RS=0
  67. CBI PORTD,1 //RW=0
  68. SBI PORTD,2 //E=1
  69. CALL espera2ms
  70. CBI PORTD,2 //E=0
  71. //CONFIGURACION COMANDOS LCD
  72. LDI R20,$28 //Modo 4 bits//2 lineas//5x7
  73. CALL comando
  74. LDI R20,$06 //Mov. cursos derecha//NO desplezamiento automatico
  75. CALL comando
  76. LDI R20,$0C //Pantalla Encendida//Cursos visible//Cursor con parpadeo
  77. CALL comando
  78. CLR R21
  79. CLR R25
  80. CLR R26
  81. CLR R27
  82.  
  83. menuinicial:
  84. ;Escribir en lcd
  85. LDI R20,$01 //BORRAMOS
  86. CALL comando
  87. ;Ubicar el cursor para escribir en el primer renglón
  88. LDI R20,$83
  89. CALL comando
  90. //Escribo el mensaje del primer renglón
  91. LDI ZH,HIGH(m1a<<1)
  92. LDI ZL,LOW(m1a<<1)
  93. CALL mostrar
  94. //Ubicar el cursor para escribir en el segundo renglón
  95. LDI R20,$C2
  96. CALL comando
  97. //Escribo el mensaje del segundo renglón
  98. LDI ZH,HIGH(m1b<<1)
  99. LDI ZL,LOW(m1b<<1)
  100. CALL mostrar
  101. JMP arranca
  102. ;/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////;
  103.  
  104. menuinicialsalto:
  105. JMP menuinicial
  106. ;FASE 1
  107. arranca:
  108. ;Programa principal
  109. CLR R16
  110. CLR R18
  111. CLR R19
  112.  
  113. linea1:
  114. LDI R16,$7F ;Rotar el 0 por B7
  115. OUT PORTB,R16
  116. JMP barrido
  117.  
  118. linea2:
  119. INC R19
  120. INC R18
  121. LDI R16,$BF ;Rotar el 0 por B6
  122. OUT PORTB,R16
  123. JMP barrido
  124.  
  125. linea3:
  126. INC R19
  127. INC R18
  128. LDI R16,$DF ;Rotar el 0 por B5
  129. OUT PORTB,R16
  130. JMP barrido
  131.  
  132. linea4:
  133. INC R19
  134. INC R18
  135. LDI R16,$EF ;Rotar el 0 por B4
  136. OUT PORTB,R16
  137. JMP barrido
  138.  
  139. nopresion:
  140. CLR R16
  141. OUT PORTC,R16 ;LED off
  142. JMP arranca
  143.  
  144. barrido:
  145. SBIS PINB,3 ;Leer el pin B3 y salta si es 0 o 1
  146. JMP presion
  147. INC R18
  148. CALL espera1ms
  149. SBIS PINB,2 ;Leer el pin B2 y salta si es 0 o 1
  150. JMP presion
  151. INC R18
  152. CALL espera1ms
  153. SBIS PINB,1 ;Leer el pin B1 y salta si es 0 o 1
  154. JMP presion
  155. INC R18
  156. CALL espera1ms
  157. SBIS PINB,0 ;Leer el pin B0 y salta si es 0 o 1
  158. JMP presion
  159. CALL espera1ms
  160. JMP quelinea
  161.  
  162. presion:
  163. CPI R18,$0C
  164. BREQ menuinicialsalto
  165. SBI PORTC,3 ;ENCIENDE LED
  166. CALL espera05s
  167. CBI PORTC,3 ;APAGA LED
  168. CPI R18,$0E ;COMPARA SI LA TECLA # ES PRESIONADA
  169. BREQ clave
  170. JMP arranca
  171.  
  172. quelinea:
  173. CPI R19,$00
  174. BREQ linea2
  175. CPI R19,$01
  176. BREQ linea3
  177. CPI R19,$02
  178. BREQ linea4
  179. CPI R19,$03
  180. BREQ nopresion
  181. ;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////;
  182. clave:
  183. LDI R20,$01 //BORRAMOS
  184. CALL comando
  185. CALL espera1s //ESPERAMOS 2 SEGUNDOS
  186. CALL espera1s
  187. LDI R20,$82 //2 ESPACIOS PARA INICIAR
  188. CALL comando
  189. LDI ZH,HIGH(m2<<1)
  190. LDI ZL,LOW(m2<<1)
  191. CALL mostrar //MUESTRA MENU DIGITE CLAVE
  192. CALL espera100ms
  193. LDI R20,$C6
  194. CALL comando
  195. JMP arrancaB
  196. ;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////;
  197. ;FASE 2
  198. arrancaB:
  199. ;Programa principal
  200. CLR R16
  201. CLR R18
  202. CLR R19
  203.  
  204. linea1B:
  205. LDI R16,$7F ;Rotar el 0 por B7
  206. OUT PORTB,R16
  207. JMP barridoB
  208.  
  209. linea2B:
  210. INC R19
  211. INC R18
  212. LDI R16,$BF ;Rotar el 0 por B6
  213. OUT PORTB,R16
  214. JMP barridoB
  215.  
  216. linea3B:
  217. INC R19
  218. INC R18
  219. LDI R16,$DF ;Rotar el 0 por B5
  220. OUT PORTB,R16
  221. JMP barridoB
  222.  
  223. linea4B:
  224. INC R19
  225. INC R18
  226. LDI R16,$EF ;Rotar el 0 por B4
  227. OUT PORTB,R16
  228. JMP barridoB
  229.  
  230. nopresionB:
  231. CLR R16
  232. OUT PORTC,R16 ;LED off
  233. JMP arrancaB
  234.  
  235. barridoB:
  236. SBIS PINB,3 ;Leer el pin B3 y salta si es 0 o 1
  237. JMP presionB
  238. INC R18
  239. CALL espera1ms
  240. SBIS PINB,2 ;Leer el pin B2 y salta si es 0 o 1
  241. JMP presionB
  242. INC R18
  243. CALL espera1ms
  244. SBIS PINB,1 ;Leer el pin B1 y salta si es 0 o 1
  245. JMP presionB
  246. INC R18
  247. CALL espera1ms
  248. SBIS PINB,0 ;Leer el pin B0 y salta si es 0 o 1
  249. JMP presionB
  250. CALL espera1ms
  251. JMP quelineaB
  252.  
  253. presionB:
  254. SBI PORTC,3 ;ENCIENDE LED
  255. CALL espera05s
  256. CBI PORTC,3 ;APAGA LED
  257.  
  258. ; ULTIMOS CUATRO DIGITOS DE CEDULA 1 (8266)
  259. CPI R18,$09 ;COMPARA SI LA TECLA 8 ES PRESIONADA
  260. BREQ cedula
  261.  
  262. ; ULTIMOS CUATRO DIGITOS DE CEDULA 2 (1924)
  263. CPI R18,$00 ; COMPARA SI LA TECLA 1 ES PRESIONADA
  264. BREQ cedula
  265. claveoculta:
  266. CALL asterisco
  267. JMP arrancaB
  268.  
  269. quelineaB:
  270. CPI R19,$00
  271. BREQ linea2B
  272. CPI R19,$01
  273. BREQ linea3B
  274. CPI R19,$02
  275. BREQ linea4B
  276. CPI R19,$03
  277. BREQ nopresionB
  278. ////////////////////////////////
  279. cedula:
  280. INC R26
  281. JMP claveoculta
  282. asterisco:
  283. //Escribo '*' en segundo renglón
  284. LDI ZH,HIGH(m4<<1)
  285. LDI ZL,LOW(m4<<1)
  286. ADD ZL,R18
  287. ADD R21,R18
  288. LPM R20,Z
  289. CALL dato
  290. INC R25
  291. CPI R21,$16 // LA SUMA DE PRESIONAR LA CLAVE 8266
  292. BREQ puertasi1 //DE LA CEDULA 1 -> 8=9|2=1|6=6|6=6
  293. // EN TOTAL LA SUMA NOS DA 22
  294. //22 EN BINARIO 0001-0110 = $16
  295.  
  296. CPI R21,$0F // LA SUMA DE PRESIONAR LA CLAVE 1924
  297. BREQ puertasi1 //DE LA CEDULA 2 -> 1=0|9=10|2=1|4=4
  298. // EN TOTAL LA SUMA NOS DA 15
  299. //15 EN BINARIO 0000-1111 = $0F
  300. CPI R25,$04
  301. BREQ puertano
  302. RET
  303.  
  304. puertano:
  305. ;Escribir en lcd
  306. LDI R20,$01 //BORRAMOS
  307. CALL comando
  308. ;Ubicar el cursor para escribir en el primer renglón
  309. LDI R20,$85
  310. CALL comando
  311. //Escribo el mensaje del primer renglón
  312. LDI ZH,HIGH(m3<<1)
  313. LDI ZL,LOW(m3<<1)
  314. CALL mostrar
  315. //Ubicar el cursor para escribir en el segundo renglón
  316. LDI R20,$C3
  317. CALL comando
  318. //Escribo el mensaje del segundo renglón
  319. LDI ZH,HIGH(m3b<<1)
  320. LDI ZL,LOW(m3b<<1)
  321. CALL mostrar
  322. CLR R21
  323. CLR R26
  324. CLR R25
  325. JMP arranca
  326. puertasi1:
  327. CPI R25,$04
  328. BREQ puertasi
  329. JMP arrancaB
  330. puertasi:
  331. CLR R25
  332. CPI R26,$01
  333. BREQ abrir
  334. CPI R26,$02
  335. BREQ abrir
  336. JMP clave
  337.  
  338. abrir:
  339. ;Escribir en lcd
  340. LDI R20,$01 //BORRAMOS
  341. CALL comando
  342. ;Ubicar el cursor para escribir en el primer renglón
  343. LDI R20,$85 //4 ESPACIOS
  344. CALL comando
  345. //Escribo el mensaje del primer renglón
  346. LDI ZH,HIGH(m3<<1)
  347. LDI ZL,LOW(m3<<1)
  348. CALL mostrar
  349. //Ubicar el cursor para escribir en el segundo renglón
  350. LDI R20,$C4
  351. CALL comando
  352. //Escribo el mensaje del segundo renglón
  353. LDI ZH,HIGH(m3a<<1)
  354. LDI ZL,LOW(m3a<<1)
  355. CALL mostrar
  356.  
  357. movermotor:
  358. LDI R16,$90 ;1001-0000
  359. OUT PORTC,R16
  360. CALL espera3ms
  361. LDI R16,$30 ;0011-0000
  362. OUT PORTC,R16
  363. CALL espera3ms
  364. LDI R16,$60 ;0110-0000
  365. OUT PORTC,R16
  366. CALL espera3ms
  367. LDI R16,$C0 ;1100-0000
  368. OUT PORTC,R16
  369. CALL espera3ms
  370.  
  371. INC R27
  372. CPI R27,$FF
  373. BREQ reset1
  374. JMP movermotor
  375.  
  376. reset1:
  377. LDI R16,$00
  378. OUT PORTC,R16
  379. CLR R27
  380. CALL espera4s
  381. JMP devuelta
  382.  
  383. devuelta:
  384. LDI R16,$C0 ;1100-0000
  385. OUT PORTC,R16
  386. CALL espera3ms
  387. LDI R16,$60 ;0110-0000
  388. OUT PORTC,R16
  389. CALL espera3ms
  390. LDI R16,$30 ;0011-0000
  391. OUT PORTC,R16
  392. CALL espera3ms
  393. LDI R16,$90 ;1001-0000
  394. OUT PORTC,R16
  395. CALL espera3ms
  396.  
  397. INC R27
  398. CPI R27,$FF
  399. BREQ reset2
  400. JMP devuelta
  401.  
  402. reset2:
  403. LDI R16,$00
  404. OUT PORTC,R16
  405. CLR R17
  406. JMP menuinicial
  407.  
  408. dato:
  409. SBI PORTD,0 ;RS=1
  410. JMP enter
  411.  
  412. comando:
  413. CBI PORTD,0 ;RS=0
  414.  
  415. enter:
  416. OUT PORTA,R20 ;COMANDO EN EL BUS DE DATOS
  417. SBI PORTD,2 ;E=1
  418. CALL espera2ms ;EL PULSO DURA 2 ms
  419. CBI PORTD,2 ;E=0
  420. SWAP R20
  421. OUT PORTA,R20 ;COMANDO EN EL BUS DE DATOS
  422. SBI PORTD,2 ;E=1
  423. CALL espera2ms ;EL PULSO DURA 2 ms
  424. CBI PORTD,2 ;E=0
  425. RET
  426.  
  427. mostrar:
  428. LPM R20,Z+
  429. CPI R20,$00
  430. BREQ fin
  431. CALL dato
  432. JMP mostrar
  433. fin: RET
  434.  
  435.  
  436. //////////////////////////////////////////////////////////////////////////////////////
  437. ///////////////////ESPERAS//////////////////////////////////////////////////
  438. //////////////////////////////////////////////////////////////////////////////////////
  439. espera2ms:
  440. ; =============================
  441. ; delay loop generator
  442. ; 8000 cycles:
  443. ; -----------------------------
  444. ; delaying 7998 cycles:
  445. ldi R23, $1F
  446. WGLOOP0: ldi R24, $55
  447. WGLOOP1: dec R24
  448. brne WGLOOP1
  449. dec R23
  450. brne WGLOOP0
  451. ; -----------------------------
  452. ; delaying 2 cycles:
  453. nop
  454. nop
  455. ; =============================
  456. RET
  457.  
  458. espera1ms:
  459. ; =============================
  460. ; delay loop generator
  461. ; 4000 cycles:
  462. ; -----------------------------
  463. ; delaying 3999 cycles:
  464. ldi R22, $1F
  465. WGLOOP0A: ldi R23, $2A
  466. WGLOOP1A: dec R23
  467. brne WGLOOP1A
  468. dec R22
  469. brne WGLOOP0A
  470. ; -----------------------------
  471. ; delaying 1 cycle:
  472. nop
  473. ; =============================
  474. RET
  475.  
  476. espera1s:
  477. ; =============================
  478. ; delay loop generator
  479. ; 4000000 cycles:
  480. ; -----------------------------
  481. ; delaying 3999996 cycles:
  482. ldi R22, $24
  483. WGLOOP0B: ldi R23, $BC
  484. WGLOOP1B: ldi R24, $C4
  485. WGLOOP2B: dec R24
  486. brne WGLOOP2B
  487. dec R23
  488. brne WGLOOP1B
  489. dec R22
  490. brne WGLOOP0B
  491. ; -----------------------------
  492. ; delaying 3 cycles:
  493. ldi R22, $01
  494. WGLOOP3B: dec R22
  495. brne WGLOOP3B
  496. ; -----------------------------
  497. ; delaying 1 cycle:
  498. nop
  499. ; =============================
  500. RET
  501.  
  502. espera100ms:
  503. ; =============================
  504. ; delay loop generator
  505. ; 400000 cycles:
  506. ; -----------------------------
  507. ; delaying 399999 cycles:
  508. ldi R22, $97
  509. WGLOOP0C: ldi R23, $06
  510. WGLOOP1C: ldi R24, $92
  511. WGLOOP2C: dec R24
  512. brne WGLOOP2C
  513. dec R23
  514. brne WGLOOP1C
  515. dec R22
  516. brne WGLOOP0C
  517. ; -----------------------------
  518. ; delaying 1 cycle:
  519. nop
  520. ; =============================
  521. RET
  522.  
  523. espera4s:
  524. ; =============================
  525. ; Warteschleifen-Generator
  526. ; 16000000 Zyklen:
  527. ; -----------------------------
  528. ; warte 15999993 Zyklen:
  529. ldi R23, $53
  530. WGLOOP0D: ldi R24, $FB
  531. WGLOOP1D: ldi R25, $FF
  532. WGLOOP2D: dec R25
  533. brne WGLOOP2D
  534. dec R24
  535. brne WGLOOP1D
  536. dec R23
  537. brne WGLOOP0D
  538. ; -----------------------------
  539. ; warte 6 Zyklen:
  540. ldi R23, $02
  541. WGLOOP3D: dec R23
  542. brne WGLOOP3D
  543. ; -----------------------------
  544. ; warte 1 Zyklus:
  545. nop
  546. ; =============================
  547. RET
  548.  
  549. espera3ms:
  550. ; =============================
  551. ; delay loop generator
  552. ; 120000 cycles:
  553. ; -----------------------------
  554. ; delaying 119997 cycles:
  555. ldi R22, $C7
  556. WGLOOP0E: ldi R23, $C8
  557. WGLOOP1E: dec R23
  558. brne WGLOOP1E
  559. dec R22
  560. brne WGLOOP0E
  561. ; -----------------------------
  562. ; delaying 3 cycles:
  563. ldi R22, $01
  564. WGLOOP2E: dec R22
  565. brne WGLOOP2E
  566. ; =============================
  567. RET
  568.  
  569. espera05s:
  570. ; =============================
  571. ; delay loop generator
  572. ; 2000000 cycles:
  573. ; -----------------------------
  574. ; delaying 1999998 cycles:
  575. ldi R22, $12
  576. WGLOOP0F: ldi R23, $BC
  577. WGLOOP1F: ldi R24, $C4
  578. WGLOOP2F: dec R24
  579. brne WGLOOP2F
  580. dec R23
  581. brne WGLOOP1F
  582. dec R22
  583. brne WGLOOP0F
  584. ; -----------------------------
  585. ; delaying 2 cycles:
  586. nop
  587. nop
  588. ; =============================
  589. RET
  590. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Report this snippet  

You need to login to post a comment.