;************* ; ; entrada : HEXADECIMAL Valor hexadecimal a convertir (H'00' a H'FF'). ; salida : BCD_L Unidad en formato bcd (H'00' a H'02'). ; : BCD_M Decena en formato bcd (H'00' a H'09'). ; : BCD_H Centena en formato bcd (H'00' a H'09'). ; : HEXADECIMAL Puesto a cero. ; CBLOCK MemoriaDeUsuario HEXADECIMAL BCD_H BCD_M BCD_L DIGITO_H DIGITO_M DIGITO_L ENDC ; Hex_Bcd ; clrf BCD_H ;Para BCD D'0' clrf BCD_M ;Para BCD D'0' clrf BCD_L ;Para BCD D'0' ; Centenas ; movlw D'100' ;D'100' --> W subwf HEXADECIMAL,W ;HEXADECIMAL - D'100' --> W skpc ;? HEXADECIMAL es menor que D'100' ? goto Decenas ;Si movwf HEXADECIMAL ;Salva el resto incf BCD_H,F ;Incrementa el contador de centenas BCD goto Centenas ;Vuelve por otros D'100' ; Decenas ; movlw D'10' ;D'10' --> W subwf HEXADECIMAL,W ;HEXADECIMAL - D'10' --> W skpc ;? HEXADECIMAL es menor que D'10' ? goto Unidades ;Si movwf HEXADECIMAL ;Salva el resto incf BCD_M,F ;Incrementa el contador de decenas BCD goto Decenas ;Vuelve por otros D'10' ; Unidades ; movf HEXADECIMAL,W ;El resto pertenece movwf BCD_L ;a las unidades BCD clrf HEXADECIMAL ;Pone a cero el registro HEXADECIMAL return ;Retorna ;************* ; ; entrada : W Valor bcd a convertir (H'00' a H'09'). ; salida : W Valor 7 segmentos ; ;La codificacion de los siete segmentos es la siguiente. ; ; PABCDEFG ;B'xxxxxxxx' ; ; G ; ---- ; B | | F ; | A | ; ---- ; C | | E ; | | ; ---- o P "punto decimal" ; D Bcd_7Seg andlw H'0F' addwf PCL,F ; PABCDEFG retlw B'00111111’ retlw B'00000110’ retlw B'01011011’ retlw B'01001111’ retlw B'01100110’ retlw B'01101101’ retlw B'01111101’ retlw B'00000111’ retlw B'01111111’ retlw B'01100111’ ; ;Los siguientes debuelven E de "error", esto es por si se pasa ;un valor a la tabla desde H'0A' hasta H'0F'. ; retlw B'01111001' retlw B'01111001' retlw B'01111001' retlw B'01111001' retlw B'01111001' retlw B'01111001' ;************* ;Presenta el digito en su respectivo display de 7 segmentos ; Display ; ; No codifiqué esta rutina ya que depende del pic usado y ; la asignación de sus puertos ; movf DIGITO_H,W movf DIGITO_M,W movf DIGITO_L,W return ;************* ;Ejemplo de presentación un numero binario de 8 bits ;"HEX" que son tres digitos en sus respectivas representaciones ;en 7 segmentos para poder visualizarlos mediante multiplexación ;de segmentos. ; movf Valor,W ;Este registro contiene el valor a visulizar movwf HEXADECIMAL call Hex_bin ; movf BCD_H,W call Bcd_7Seg movwf DIGITO_H ; movf BCD_M,W call Bcd_7Seg movwf DIGITO_M ; movf BCD_L,W call Bcd_7Seg movwf DIGITO_L ; call Display END