Advertisement
Guest User

Untitled

a guest
Nov 14th, 2017
73
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.                 SEND         EQU    P3.4
  9.                 TEMP         EQU    7CH
  10.                    
  11.                 ORG  0000H
  12.                 JMP PRINCIPAL
  13.                
  14.                 ORG  0003H
  15.                 JMP EX0ISR ;INT0 VECTOR ORG 0003H
  16.                
  17.                 ORG 0013H
  18.                 JMP EX1ISR
  19.                
  20.                 ORG 0023h
  21.                 JMP UART
  22.                
  23.                 ORG  0040H
  24. PRINCIPAL:                 
  25.                 ACALL INIT         ;inicializa LDC
  26.                 ACALL INITUART
  27.                 MOV 20H, #'0'
  28.                 MOV 21H, #'1'
  29.                 MOV 22H, #'2'
  30.                 MOV 23H, #'3'
  31.                 MOV 24H, #'4'
  32.                 MOV 25H, #'5'
  33.                 MOV 26H, #'6'
  34.                 MOV 27H, #'7'
  35.                 MOV 28H, #'8'
  36.                 MOV 29H, #'9'
  37.                 MOV 2AH, #'A'
  38.                 MOV 2BH, #'B'
  39.                 MOV 2CH, #'C'
  40.                 MOV 2DH, #'D'
  41.                 MOV 2EH, #'E'
  42.                 MOV 2FH, #'F'
  43.                 MOV TMOD, #20H ; (0010 0000) TIMER 1, MODE 2
  44.                 MOV TH1,#-3h ;9600 BAUD
  45.                 SETB TR1 ; START TIMER 1
  46.                 MOV SCON,#40H ;  
  47.                 SETB PX0
  48.                 CLR PSW.5
  49.                 MOV IE, #10010101B       ;INTERRUPCION GLOBAL , INTERRUPCION EXTERNA 0,1, INTERRUPCION PS
  50.                 SETB  IT0         ;ACTIVA EL FLANCO DE BAJADA DE LA INTERRUPCION 0
  51.                 SETB  IT1         ;ACTIVA EL FLANCO DE BAJADA DE LA INTERRUPCION 1
  52.                 MOV P2, #11110000B;INICIALIZA LOS RENGLONES EN 0 Y LAS COLUMANAS EN 1
  53.                 MOV CURSOR, #00H ;SE LIMPIA EL CONTEO DE LCD
  54. LOOP:           JB  SEND, LOOP
  55.                 ACALL DELAY_10MS ;SE MANDA A LLAMAR A UNA SUBRUTINA QUE ESPERE 10MS
  56.                 MOV TEMP, #00H
  57.                 SETB TI    
  58.                 JNB SEND, $
  59.                 ACALL DELAY_10MS ;SE MANDA A LLAMAR A UNA SUBRUTINA QUE ESPERE 10MS
  60.                 JMP LOOP
  61.                
  62. INITUART:
  63.                 MOV R5,#32D
  64.                 MOV R0,#30H
  65. LOOPUART:       MOV @R0,#00H
  66.                 INC R0
  67.                 DJNZ R5,LOOPUART
  68.                 RET
  69.  
  70. UART:          
  71.                 CLR TI
  72.                 MOV A,TEMP
  73.                 CJNE A, CURSOR,NEXT
  74.                 RETI
  75. NEXT:           ADD A,#30H
  76.                 MOV R0,A
  77.                 MOV SBUF, @R0
  78.                 INC TEMP
  79.                 RETI
  80.                
  81. EX1ISR:
  82.                 CLR   EX1
  83.                 SETB PSW.5
  84.                 MOV BUFFER, #00H
  85.                 ACALL DELAY_10MS
  86.                 JNB  P3.3 , $
  87.                 ACALL DELAY_10MS
  88.                 MOV A, BUFFER
  89.                 ACALL SAVE
  90.                 ACALL CURSOR_POS
  91.                 ACALL PRESENTA
  92.                 CLR PSW.5
  93.                 SETB   EX1
  94.                 RETI
  95.  
  96. DELAY_10MS:    
  97.                 MOV     R5, #20D ; SE VUELVE A CAREGAR EL REGISTRO R5 QUE SE OCUPA PARA EL DELAY
  98. DELAY_10MS_2:   MOV     R6, #250D
  99.                 DJNZ    R6, $
  100.                 DJNZ    R5, DELAY_10MS_2
  101.                 RET
  102. CURSOR_POS:    
  103.                 MOV TEMP, A
  104.                 INC CURSOR
  105.                 MOV  R0,CURSOR
  106.                 CJNE R0,#17D,CURSOR_POS_1
  107.                 MOV A,  #0C0H                          ;cursor: linea 2, pos. 1
  108.                 CLR RS                                ;prepara comando de salida
  109.                 ACALL SALIDA                          ;envíalo
  110.                 ACALL ESPERA                          ;espera a que LCD este libre
  111.                 MOV A, TEMP
  112.                 RET
  113. CURSOR_POS_1:
  114.                 CJNE R0,#33D,CURSOR_POS_2
  115.                 MOV CURSOR,#00H
  116.                
  117.                 MOV A,  #01H                          ;limpia LCD              
  118.                 CLR RS                                ;perpara comando para salida
  119.                 ACALL SALIDA                          ;envíalo
  120.                 ACALL ESPERA                          ; espera a que el LCD este libre
  121.                 MOV A,  #80H                          ;cursor: linea 1, pos. 1
  122.                 CLR RS                                ;prepara comando de salida
  123.                 ACALL SALIDA                          ;envíalo
  124.                 ACALL ESPERA                          ;espera a que LCD este libre
  125.                 ACALL INITUART
  126.                 MOV A, TEMP
  127.                 RET
  128. CURSOR_POS_2:
  129.                 RET
  130. EX0ISR:
  131.                 CLR   EX0    ; SE DESABILITA LA INTERRUPCION EXTERNA
  132.                 ACALL DELAY_10MS ;SE MANDA A LLAMAR A UNA SUBRUTINA QUE ESPERE 10MS
  133.                 ACALL READ_KEYPAD ;SE LLAMA A ALA SUBRUTINA PARA ENCOTRAR QUE TELCA SE PRESIONO
  134.                 ACALL DELAY_10MS
  135. WAIT_BUTTON:    MOV A, #11110000b ;Initial state for Keypad
  136.                 MOV P2, A         ;Initial state for keypad t capture INT0, needs a 4 input AND gate
  137.                 MOV A, P2
  138.                 CJNE A, #11110000b, WAIT_BUTTON  ;wait till button matrix is released
  139.                 SETB  EX0   ;Enable interrupt INT0
  140.                 RETI
  141.        
  142. READ_KEYPAD:  ;SUBRUTINA PARA ALGO
  143.                 MOV COLUMN, #00H
  144.                 MOV A, #11111110b  ;SE BARREN LAS FILAS
  145. SCAN_ROW:       MOV P2, A
  146.                 JNB P2.7, FOUND_KEY1 ;CHECA SI SE PRESIONO LA COLUMNA 1
  147.                 JNB P2.6, FOUND_KEY2 ;CHECA SI SE PRESIONO LA COLUMNA 2
  148.                 JNB P2.5, FOUND_KEY3 ;CHECA SI SE PRESIONO LA COLUMNA 3
  149.                 JNB P2.4, FOUND_KEY4 ;CHECA SI SE PRESIONO LA COLUMNA 4
  150.                 RL A     ;NO SE ENCONTRO LA LLAVE POR LO QUE SE BARRE TODO, EJEMPLO: 1111 1110 -> 1111 1101
  151.                 INC COLUMN ;SE INCREMETA EL CONTEO DE LA LLAVE QUE CREO QUE SON LAS COLUMNAS
  152.                 MOV R0, COLUMN ;SE CARGA EL VALOR DEL CONTEO AL REGISTRO 0
  153.                 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
  154.                 RET
  155. FOUND_KEY1: ;LA COLUMNA 0 FUE PRECIONADA
  156.                 MOV A, COLUMN ; SE MONTA LA COLUMNA EN LA QUE ESTAS
  157.                 RL A
  158.                 RL A ;SE MULTIPLIA POR 4
  159.                 ADD A,#00H ;SE LE AÑADE 1 POR ESTAR EN LA FILA 1
  160.                 JB PSW.5, BUFFERIN
  161.                 ADD A ,#20H
  162.                 MOV R1 ,A
  163.                 MOV A, @R1
  164.                 ACALL SAVE
  165.                 ACALL CURSOR_POS
  166.                 ACALL PRESENTA
  167.                 RET
  168. FOUND_KEY2:
  169.                 MOV A, COLUMN
  170.                 RL A
  171.                 RL A
  172.                 ADD A,#01H
  173.                 JB PSW.5, BUFFERIN
  174.                 ADD A ,#20H
  175.                 MOV R1 ,A
  176.                 MOV A, @R1
  177.                 ACALL SAVE
  178.                 ACALL CURSOR_POS
  179.                 ACALL PRESENTA
  180.                 RET
  181. FOUND_KEY3:
  182.                 MOV A, COLUMN
  183.                 RL A
  184.                 RL A
  185.                 ADD A,#02H
  186.                 JB PSW.5, BUFFERIN
  187.                 ADD A ,#20H
  188.                 MOV R1 ,A
  189.                 MOV A, @R1
  190.                 ACALL SAVE
  191.                 ACALL CURSOR_POS
  192.                 ACALL PRESENTA
  193.                 RET
  194. FOUND_KEY4:
  195.                 MOV A, COLUMN
  196.                 RL A
  197.                 RL A
  198.                 ADD A,#03H
  199.                 JB PSW.5, BUFFERIN
  200.                 ADD A ,#20H
  201.                 MOV R1 ,A
  202.                 MOV A, @R1
  203.                 JB PSW.5, BUFFERIN
  204.                 ACALL SAVE
  205.                 ACALL CURSOR_POS
  206.                 ACALL PRESENTA
  207.                 RET
  208. SAVE:
  209.                 MOV TEMP,A
  210.                 MOV A, CURSOR
  211.                 ADD A, #30H
  212.                 MOV R0,A
  213.                 MOV @R0,TEMP
  214.                 MOV A,TEMP
  215.                 RET
  216. BUFFERIN:      
  217.                 MOV R7, A
  218.                 MOV A, BUFFER
  219.                 MOV B , #10D
  220.                 MUL AB
  221.                 ADD A, R7
  222.                 MOV BUFFER, A
  223.                 RET
  224. ;******************************
  225. ;inicialización de la LCD                                                             *
  226. ;******************************
  227. INIT:          
  228.                 MOV R2, #32D;
  229. ESPARA15MS:     MOV R3, #250D;
  230.                 DJNZ R3, $
  231.                 DJNZ R2, ESPARA15MS
  232.                
  233.                 MOV  A,  #38H                         ;2 lineas, matriz ;de 5 x 7
  234.                 CLR  RS                               ;prepara comando para salida
  235.                 ACALL SALIDA                          ;envíalo
  236.                
  237.                 MOV R2, #10D
  238. ESPERA4_1MS:    MOV R3, #250D;
  239.                 DJNZ R3, $
  240.                 DJNZ R2, ESPERA4_1MS
  241.                
  242.                 MOV A, #38H                           ;LCD encendida, cursor encendido
  243.                 CLR RS                                ;prepara comando para salida
  244.                 ACALL SALIDA                          ;envíalo
  245.                 ACALL ESPERA
  246.  
  247.  
  248.                 MOV A, #38H                           ;LCD encendida, cursor encendido
  249.                 CLR RS                                ;prepara comando para salida
  250.                 ACALL SALIDA                          ;envíalo
  251.                 ACALL ESPERA
  252.                
  253.                
  254.                 MOV A, #0EH                           ;LCD encendida, cursor encendido
  255.                 CLR RS                                ;prepara comando para salida
  256.                 ACALL SALIDA                          ;envíalo
  257.                 ACALL ESPERA                          ;espera a que la LCD este libre
  258.                
  259.                 MOV A,  #01H                          ;limpia LCD              
  260.                 CLR RS                                ;perpara comando para salida
  261.                 ACALL SALIDA                          ;envíalo
  262.                 ACALL ESPERA                          ; espera a que el LCD este libre
  263.  
  264.                 MOV A,  #03H                          ;MODO DEL CURSOR              
  265.                 CLR RS                                ;perpara comando para salida
  266.                 ACALL SALIDA                          ;envíalo
  267.                 ACALL ESPERA
  268.  
  269.                 MOV A,  #02H                          ;poscicion inicial DE LA RAM
  270.                 CLR RS                                ;perpara comando para salida
  271.                 ACALL SALIDA                          ;envíalo
  272.                 ACALL ESPERA                          ;espera a que el LCD este libre
  273.                
  274.                 MOV A,  #80H                          ;cursor: linea 1, pos. 1
  275.                 CLR RS                                ;prepara comando de salida
  276.                 ACALL SALIDA                          ;envíalo
  277.                 ACALL ESPERA                          ;espera a que LCD este libre
  278.  
  279.                 RET
  280.                
  281. ;******************************
  282. ; Presenta datos en LCD                                                                *
  283. ;******************************
  284.  
  285. PRESENTA:      
  286.                SETB RS                               ;prepara dato para salida
  287.                ACALL SALIDA                          ;envíalo
  288.                ACALL ESPERA                          ;espera a que la LCD este libre
  289.                RET
  290.                
  291. ;*****************************
  292. ; Espera q que LCD este libre                                                          *
  293. ;*****************************
  294. ESPERA:      
  295.               MOV R2, #255D
  296.               DJNZ  R2, $
  297.               RET
  298.              
  299. ;*****************************
  300. ;Salida a LCD                                                                           *
  301. ;*****************************
  302. SALIDA:      MOV DBUS, A
  303.              CLR RW
  304.              SETB E
  305.              NOP
  306.              NOP
  307.              NOP
  308.              NOP
  309.              NOP
  310.              NOP
  311.              CLR E
  312.              RET              
  313.        
  314. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement