;ººººººººººººººººººººººººººººººººº ;CODIGO FUENTE BY PILZINTECUHTLI º ;SALUDOS CUM º ;ººººººººººººººººººººººººººººººººº #INCLUDE <P16f877.

inc> __config _LVP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP _OFF & _BODEN_OFF LIST P=16f877 carac morse cont bit CounterA CounterB CounterC EQU EQU EQU EQU EQU EQU EQU 0x25 0x26 0x27 org 0; goto inicio org 4; upcion goto inter inicio ORG 0x05 ;Limpia Los puertos clrf PORTA clrf PORTB clrf PORTC clrf PORTD clrf PORTE ;Puerto A Digital, Entrada de Datos RA4 bsf STATUS,RP0 movlw 0x06 movwf ADCON1 movlw 0x10 movwf TRISA ;Puerto B, Entrada Clk RB0 movlw 0x01 movwf TRISB ;Puerto C, D, E Salidos clrf TRISC clrf TRISD clrf TRISE ;Flanco descendente bcf OPTION_REG, INTEDG bcf STATUS,RP0 Vector de inicio Vector de interr 0x21 0x22 0x23 0x24

;ºººººººººººººººººººººººººººººººº ;Habilitacion de interrupciones º ;ºººººººººººººººººººººººººººººººº bsf s bsf s ciclo sleep

INTCON,GIE INTCON,INTE

; Interrupciones Globale ; Interrupciones Externa

;Espera que se presione una tecla

Se coloca en "c arac". Este Bit bsf carac. .ºººººººººººººººººººººººººººººº . INTF º INTF dato2 PORTA.Captura Bit 0 º .ºººººººººººººººººººººººººººººº . 1 INTCON.ºººººººººººººººººººººººººººººº dato2 btfss INTCON. 4 bit1 carac. INTF goto dato3 . 2 INTCON. INTF.()()()()()()()()()()()()()()()()() . bcf INTCON.Captura Bit 2 . INTF dato2 carac.()()()()()()()()()()()()()()()()() inter bcf INTCON.Captura Bit 3 . 4 bit2 carac.si esta activa quiere d ecir que en la linea btfss PORTA.ºººººººººººººººººººººººººººººº .Checa la bandera de interrupcion extern a goto dato0 .de datos del teclado se ha colocado un bit que goto bit0 .ºººººººººººººººººººººººººººººº dato1 btfss INTCON. INTF dato3 carac. goto btfss goto bsf bcf goto bit2 bcf bcf INTF dato1 PORTA.correspondiente a la te cla pulsada bit0 bcf carac. 0 . INTF . INTF . 4 .Captura Bit 1 .Esto lo hara sucesivame nte hasta obtener el byte goto dato1 . Borra Bandera de interrupcion .ºººººººººººººººººººººººººººººº dato3 btfss INTCON. 0 .es correspondiente a la tecla presionada. 2 INTCON.At'n de interrupcion () . INTF º º bit1 bcf .goto ciclo . goto btfss goto bsf bcf goto bcf .ºººººººººººººººººººººººººººººº dato0 btfss INTCON. 1 INTCON. 0. que es el bit menos significativo bcf INTCON. INTF .ºººººººººººººººººººººººººººººº .

INTF dato4 carac.ºººººººººººººººººººººººººººººº .ºººººººººººººººººººººººººººººº dato5 btfss INTCON. INTF dato6 carac.Captura Bit 4 .Captura Bit 7 . 6 INTCON. 4 bit5 carac. goto btfss goto bsf bcf goto bit6 bcf bcf . INTF º INTF dato7 PORTA. INTF despliega carac. 6 INTCON.ºººººººººººººººººººººººººººººº dato6 btfss INTCON.btfss goto bsf bcf goto bit3 bcf bcf . 7 INTCON. INTF º INTF dato6 PORTA. 4 bit3 carac. 4 bit4 carac.ºººººººººººººººººººººººººººººº dato4 btfss INTCON. goto btfss goto bsf bcf goto bit5 bcf bcf . 5 INTCON. 4 bit6 carac. 4 INTCON. 3 INTCON. goto btfss goto bsf bcf goto bit4 bcf bcf .Captura Bit 5 . INTF dato5 carac.ºººººººººººººººººººººººº PORTA. 4 bit7 carac.ºººººººººººººººººººººººººººººº . INTF º INTF dato5 PORTA. 4 INTCON.ºººººººººººººººººººººººººººººº dato7 btfss INTCON. goto btfss goto bsf bcf goto bit7 bcf bcf . INTF º INTF dato4 PORTA.ºººººººººººººººººººººººººººººº . INTF dato7 carac. 3 INTCON. 7 INTCON. 5 INTCON. INTF .ºººººººººººººººººººººººººººººº .Captura Bit 6 .

El valor que se obtiene al presionar una letra o numero esta codificado movf carac.. .El valor se envia al pu .ºººººººººººººººººººººººº movlw high tabla .la atn a la int.D6=2 . . goto D7 .1 .letra. goto finalizar . 1 a la izquierda para bcf carac.w . w o se pone a cero porque al movwf PORTD cluye el carry y este es 1 sublw 0x70 erto D y se compara con 70.Z ue soltaron la tecla entonces goto finalizar za y espera otra tecla presionada clrf bit.Si es 70 quiere decir q .Numero total de barras y puntos º .el dato en morse equiva lente a la tecla presionada.Unicamente se tendra un valor en hexadecimal si se presiona un numero o btfsc STATUS. btfsc STATUS.1 sultado se coloca en el reg cont D6 btfss morse.Tabla de conversion º .caracteres tendra la te . . .El bit mas signifivativ .En esta rutina se decod .w . cualquier otra t ecla presionada hara que se obtenga un cero.realizar la rotacion in .6 goto D5 movlw 0x02 addwf cont. C .D5=1 .de la siguiente manera call tabla .ºººººººººººººººººººººººº despliega rrf carac. El dato se coloca en "morse" movlw low tabla .ºººººººººººººººººººººººººººººººººººº . . barra un uno btfsc STATUS.D4-D0: Es la secuencia de puntos y barras un cero es un punto y una sublw 0x00 .Rota el byte carac haci .ºººººººººººººººººººººººº .despreciar el b .D7=4 .Este re .7 cla presionda. Z .Preparacion del Byte º .D7-D5: Son el numero to tal de puntos y barras que tiene el caracter movwf morse .Se realiza la rutina pa ra accesar la tabla de conversion y obtener movwf PCLATH . . movf carac. incf PCLATH .7 it de inicio que envio el teclado. goto D6 movlw 0x04 addwf cont.La tabla esta realizada de la siguiente manera: addwf carac. finali .ºººººººººººººººººººººººººººººººººººº D7 clrf cont ifican los bits D7-D5 para saber cuantos btfss morse.

ya se reprodujeron todo s los sonidos entonces la interrupcion terminara y goto barra .ºººººººººººº punto call espacio .Esta rutina reproduce el sonido equivalente a una barra.un cero viene a esta pa rte del programa para reproducir un punto. goto finalizar . cuando el contador llega a cero btfsc STATUS.se esperara a que se pr esione otra tecla nuevamente .1 .0.ºººººººººººº barra call espacio . goto loopp .finaliza la interrupcio n movwf CounterA .Esta rutina reproduce el sonido equivalente a un punto.Cada vez que se reproduce un pu nto o una barra se decrementara el andwf morse.contador que se cargo e n la rutina anterior. .1 .Generacion de las barras y los puntos º . codigo movf bit. goto retorno .ºººººººººººº .1 .Punto o º . loopp decfsz CounterA.Cada vez que en "Generacion de las barras y los puntos" se lee . 0 . movwf CounterC .Barra º . decfsz CounterC.ºººººººººººººººººººººººººººººººººººººººº .y barras codifi cadas en morse.Se checan los bits D0-D4 que co ntienen la secuncia de puntos movwf bit .. .ºººººººººººº .quiere decir que ya no es necesario seguir leyendo el registro "morse" porque goto punto . bsf PORTE.En esta parte es donde se decrementa el contador y al llegar a cero movlw D'151' . . . bsf PORTE.0 .5 segundos para activ ar el zumbador que esta ahi conectado movwf CounterB .5 generacion 0x01 cont.Cada vez que en "Generacion de las barras y los puntos" se lee movlw D'2' .1 . goto loopp . Z . 0 . bcf PORTE.ºººººººººººººººººººººººººººººººººººººººº generacion movlw 0x01 . goto loopp . D5 btfss goto movlw addwf morse. decfsz cont . decfsz CounterB.w . 0 . .Lo unico que hace es co locar un uno en el puerto E durante movlw D'135' .

1 sea barra o espacio se rota el registro "bit" goto codigo l siguiente punto o barra de la tecla presionada istro bir unicamente contiene un Uno .1 goto loopb decfsz CounterC.movlw D'5' te del programa para reproducir una barra movwf CounterC locar un uno en el puerto E durante movlw D'19' el zumbador que esta ahi conectado movwf CounterB se decrementa el contador y al llegar a cero movlw D'236' n movwf CounterA loopb decfsz CounterA.ºººººººººººººººººººººººººººº espacio movlw D'3' tra los puntos y las barras del codigo morse movwf CounterC movlw D'140' movwf CounterB movlw D'83' movwf CounterA lazo decfsz CounterA. . .Retorno º . .ºººººººººººººººººººººººººººººººººººº finalizar clrf carac a todos los registros y borra clrf morse ion externa clrf cont clrf bit bcf retfie º .ºººººººººººº retorno rlf bit. . . . .Esta rutina crea un silencio en .1 goto lazo decfsz CounterC. . .1 . .1 segundo para activar . .ºººººººººººº .Al reproducir un bit ya . 0 decfsz cont goto retorno goto finalizar .En esta parte es donde . . INTF .Finaliza at'n de la interrupcion .ºººººººººººººººººººººººººººººººººººº .un uno viene a esta par .Lo unico que hace es co .Espacio en barra y puntos º . INTCON. .Finaliza la interrupcion.ºººººººººººººººººººººººººººº . El reg . .la bandera de interrupc . . .1 goto lazo decfsz CounterB. .1 goto lazo .1 goto loopb bcf PORTE. . . limpi . goto loopb decfsz CounterB. . . .para ahora reproducir e . .finaliza la interrupcio .

0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00.ºººººººººººººººººººººººº . 0xA0. 0x00. 0x00. 0x00. 0x00. 0x00. 0x20. 0x00. 0x00. 0x00. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00 DT 0x00. 0xBC. 0x00. 0x00. 0x66. 0x00. 0x63. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x64. 0xA1.return . 0x00. 0x00. 0x84. 0x00. 0x00. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x8D. 0x00. 0x00. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00.-----------------------------------------END . 0x86. 0x00. 0x67. 0x00. 0xAF. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x65. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x60. 0x00. 0x00.Tabla de conversion º . 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x40. 0x00. 0x00.1 DT 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x8B. 0x00. 0x00. 0xB0. 0x00. 0x00. 0x00. 0x00.------------------------------------------ . 0x00. 0x88. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x43. 0x85. 0x00 DT 0x00. 0x8E. 0x00. 0x41. 0xB8. 0x00. 0x00. 0x00. 0x00. 0x61. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0xBB. 0x00. 0x00. 0x00. 0x00. 0x00.ºººººººººººººººººººººººº org 0x1ff tabla addwf PCL. . 0x00. 0x00. 0x21. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x42. 0x00 DT 0x00. 0x00. 0x00. 0xBE. 0x00. 0x62. 0x00 DT 0x00. 0x00 DT 0x00. 0x83. 0x82. 0x00 DT 0x00. 0x00. 0x80. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0xA3. 0x00 DT 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0xBF. 0xA7. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00 0x00. 0x00. 0x81. 0x00. 0x89. 0x00. 0x00.