Advertisement
Guest User

Untitled

a guest
Nov 13th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     RS           EQU    P3.5  ;SE CAMBIO
  2.                 RW           EQU    P3.6 ;SE CAMBIO
  3.                 E            EQU    P3.7 ;SE CAMBIO
  4.                 DBUS         EQU    P1
  5.                 CURSOR       EQU    7FH
  6.                 COLUMN       EQU    7EH
  7.                 BUFFER       EQU    7DH
  8.                
  9.                 ORG  0000H
  10.                 JMP PRINCIPAL
  11.                
  12.                 ORG  0003H
  13.                 JMP EX0ISR ;INT0 VECTOR ORG 0003H
  14.                
  15.                 ORG 0013H
  16.                 JMP EX1ISR
  17.                
  18.                 ORG  0040H
  19. PRINCIPAL:                 
  20.                 ACALL INIT         ;inicializa LDC
  21.                 MOV 20H, #'1'
  22.                 MOV 21H, #'2'
  23.                 MOV 22H, #'3'
  24.                 MOV 23H, #'A'
  25.                 MOV 24H, #'4'
  26.                 MOV 25H, #'5'
  27.                 MOV 26H, #'6'
  28.                 MOV 27H, #'B'
  29.                 MOV 28H, #'7'
  30.                 MOV 29H, #'8'
  31.                 MOV 2AH, #'9'
  32.                 MOV 2BH, #'C'
  33.                 MOV 2CH, #'*'
  34.                 MOV 2DH, #'0'
  35.                 MOV 2EH, #'#'
  36.                 MOV 2FH, #'D'
  37.                 SETB PX0
  38.                 CLR PSW.5
  39.                 MOV IE, #85H      ;INTERRUPCION GLOBAL Y INTERRUPCION EXTERNA 0
  40.                 SETB  IT0         ;ACTIVA EL FLANCO DE BAJADA DE LA INTERRUPCION 0
  41.                 SETB  IT1         ;ACTIVA EL FLANCO DE BAJADA DE LA INTERRUPCION 1
  42.                 MOV P2, #11110000B;INICIALIZA LOS RENGLONES EN 0 Y LAS COLUMANAS EN 1
  43.                 MOV CURSOR, #00H ;SE LIMPIA EL CONTEO DE LCD
  44.                 JMP $
  45.  
  46. EX1ISR:
  47.                 CLR   EX1
  48.                 SETB PSW.5
  49.                 MOV BUFFER, #00H
  50.                 ACALL DELAY_10MS
  51.                 JNB  P3.3 , $
  52.                 ACALL DELAY_10MS
  53.                 INC   CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
  54.                 MOV A, BUFFER
  55.                 ACALL PRESENTA
  56.                 CLR PSW.5
  57.                 SETB   EX1
  58.                 RETI
  59.  
  60. DELAY_10MS:    
  61.                 MOV     R5, #20D ; SE VUELVE A CAREGAR EL REGISTRO R5 QUE SE OCUPA PARA EL DELAY
  62. DELAY_10MS_2:   MOV     R6, #250D
  63.                 DJNZ    R6, $
  64.                 DJNZ    R5, DELAY_10MS_2
  65.                 RET
  66.            
  67. EX0ISR:
  68.                 CLR   EX0    ; SE DESABILITA LA INTERRUPCION EXTERNA
  69.                 ACALL DELAY_10MS ;SE MANDA A LLAMAR A UNA SUBRUTINA QUE ESPERE 10MS
  70.                 ACALL READ_KEYPAD ;SE LLAMA A ALA SUBRUTINA PARA ENCOTRAR QUE TELCA SE PRESIONO
  71.                 ACALL DELAY_10MS
  72. WAIT_BUTTON:    MOV A, #11110000b ;Initial state for Keypad
  73.                 MOV P2, A         ;Initial state for keypad t capture INT0, needs a 4 input AND gate
  74.                 MOV A, P2
  75.                 CJNE A, #11110000b, WAIT_BUTTON  ;wait till button matrix is released
  76.                 SETB  EX0   ;Enable interrupt INT0
  77.                 RETI
  78.        
  79. READ_KEYPAD:  ;SUBRUTINA PARA ALGO
  80.                 MOV COLUMN, #00H
  81.                 MOV A, #11111110b  ;SE BARREN LAS FILAS
  82. SCAN_ROW:       MOV P2, A
  83.                 JNB P2.7, FOUND_KEY1 ;CHECA SI SE PRESIONO LA COLUMNA 1
  84.                 JNB P2.6, FOUND_KEY2 ;CHECA SI SE PRESIONO LA COLUMNA 2
  85.                 JNB P2.5, FOUND_KEY3 ;CHECA SI SE PRESIONO LA COLUMNA 3
  86.                 JNB P2.4, FOUND_KEY4 ;CHECA SI SE PRESIONO LA COLUMNA 4
  87.                 RL A     ;NO SE ENCONTRO LA LLAVE POR LO QUE SE BARRE TODO, EJEMPLO: 1111 1110 -> 1111 1101
  88.                 INC COLUMN ;SE INCREMETA EL CONTEO DE LA LLAVE QUE CREO QUE SON LAS COLUMNAS
  89.                 MOV R0, COLUMN ;SE CARGA EL VALOR DEL CONTEO AL REGISTRO 0
  90.                 CJNE R0, #4D, SCAN_ROW ; SI EL REGISTRO DOS ES IGUAL A 0 ENTONCES NO SE ENCONTRO NADA POR LO QUE SE MANDA UN ERROR
  91.                 RET
  92. FOUND_KEY1: ;LA COLUMNA 0 FUE PRECIONADA
  93.                 MOV A, COLUMN ; SE MONTA LA COLUMNA EN LA QUE ESTAS
  94.                 RL A
  95.                 RL A ;SE MULTIPLIA POR 4
  96.                 ADD A,#00H ;SE LE AÑADE 1 POR ESTAR EN LA FILA 1
  97.                 ADD A ,#20H
  98.                 MOV R1 ,A
  99.                 MOV A, @R1
  100.                 JB PSW.5, BUFFERIN
  101.                 INC   CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
  102.                 ACALL PRESENTA
  103.                 RET
  104. FOUND_KEY2:
  105.                 MOV R0, COLUMN
  106.                 MOV A, R0
  107.                 RL A
  108.                 RL A
  109.                 ADD A,#01H
  110.                 ADD A ,#20H
  111.                 MOV R1 ,A
  112.                 MOV A, @R1
  113.                 JB PSW.5, BUFFERIN
  114.                 INC   CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
  115.                 ACALL PRESENTA
  116.                 RET
  117. FOUND_KEY3:
  118.                 MOV R0, COLUMN
  119.                 MOV A, R0
  120.                 RL A
  121.                 RL A
  122.                 ADD A,#02H
  123.                 ADD A ,#20H
  124.                 MOV R1 ,A
  125.                 MOV A, @R1
  126.                 JB PSW.5, BUFFERIN
  127.                 INC   CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
  128.                 ACALL PRESENTA
  129.                 RET
  130. FOUND_KEY4:
  131.                 MOV R0, COLUMN
  132.                 MOV A, R0
  133.                 RL A
  134.                 RL A
  135.                 ADD A,#03H
  136.                 ADD A ,#20H
  137.                 MOV R1 ,A
  138.                 MOV A, @R1
  139.                 JB PSW.5, BUFFERIN
  140.                 INC   CURSOR ;INCREMENTAMOS EL REGISTRO DE CONTEO , AUN NO LO OCUPAMOS
  141.                 ACALL PRESENTA
  142.                 RET
  143.                
  144. BUFFERIN:      
  145.                 MOV R7, A
  146.                 MOV A, BUFFER
  147.                 MOV B , #10D
  148.                 MUL AB
  149.                 ADD A, R7
  150.                 MOV BUFFER, A
  151.                 RET
  152. ;******************************
  153. ;inicialización de la LCD                                                             *
  154. ;******************************
  155. INIT:          
  156.                 MOV R2, #32D;
  157. ESPARA15MS:     MOV R3, #250D;
  158.                 DJNZ R3, $
  159.                 DJNZ R2, ESPARA15MS
  160.                
  161.                 MOV  A,  #38H                         ;2 lineas, matriz ;de 5 x 7
  162.                 CLR  RS                               ;prepara comando para salida
  163.                 ACALL SALIDA                          ;envíalo
  164.                
  165.                 MOV R2, #10D
  166. ESPERA4_1MS:    MOV R3, #250D;
  167.                 DJNZ R3, $
  168.                 DJNZ R2, ESPERA4_1MS
  169.                
  170.                 MOV A, #38H                           ;LCD encendida, cursor encendido
  171.                 CLR RS                                ;prepara comando para salida
  172.                 ACALL SALIDA                          ;envíalo
  173.                 ACALL ESPERA
  174.  
  175.  
  176.                 MOV A, #38H                           ;LCD encendida, cursor encendido
  177.                 CLR RS                                ;prepara comando para salida
  178.                 ACALL SALIDA                          ;envíalo
  179.                 ACALL ESPERA
  180.                
  181.                
  182.                 MOV A, #0EH                           ;LCD encendida, cursor encendido
  183.                 CLR RS                                ;prepara comando para salida
  184.                 ACALL SALIDA                          ;envíalo
  185.                 ACALL ESPERA                          ;espera a que la LCD este libre
  186.                
  187.                 MOV A,  #01H                          ;limpia LCD              
  188.                 CLR RS                                ;perpara comando para salida
  189.                 ACALL SALIDA                          ;envíalo
  190.                 ACALL ESPERA                          ; espera a que el LCD este libre
  191.  
  192.                 MOV A,  #03H                          ;MODO DEL CURSOR              
  193.                 CLR RS                                ;perpara comando para salida
  194.                 ACALL SALIDA                          ;envíalo
  195.                 ACALL ESPERA
  196.  
  197.                 MOV A,  #02H                          ;poscicion inicial DE LA RAM
  198.                 CLR RS                                ;perpara comando para salida
  199.                 ACALL SALIDA                          ;envíalo
  200.                 ACALL ESPERA                          ;espera a que el LCD este libre
  201.                
  202.                 MOV A,  #80H                          ;cursor: linea 1, pos. 1
  203.                 CLR RS                                ;prepara comando de salida
  204.                 ACALL SALIDA                          ;envíalo
  205.                 ACALL ESPERA                          ;espera a que LCD este libre
  206.  
  207.                 RET
  208.                
  209. ;******************************
  210. ; Presenta datos en LCD                                                                *
  211. ;******************************
  212.  
  213. PRESENTA:      
  214.                SETB RS                               ;prepara dato para salida
  215.                ACALL SALIDA                          ;envíalo
  216.                ACALL ESPERA                          ;espera a que la LCD este libre
  217.                RET
  218.                
  219. ;*****************************
  220. ; Espera q que LCD este libre                                                          *
  221. ;*****************************
  222. ESPERA:      
  223.               MOV R2, #255D
  224.               DJNZ  R2, $
  225.               RET
  226.              
  227. ;*****************************
  228. ;Salida a LCD                                                                          *
  229. ;*****************************
  230. SALIDA:      MOV DBUS, A
  231.              CLR RW
  232.              SETB E
  233.              NOP
  234.              NOP
  235.              NOP
  236.              NOP
  237.              NOP
  238.              NOP
  239.              CLR E
  240.              RET              
  241.        
  242. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement