Autor Tema: p12f629 despliegue de caracteres  (Leído 2346 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Claudiocesarum

  • PIC10
  • *
  • Mensajes: 1
p12f629 despliegue de caracteres
« en: 10 de Diciembre de 2005, 17:02:00 »
Hola estoy haciendo una practica en lenguaje ensamblador von el pic  p12f629
el proposito es desplegar una palabra  hola y lo tengo  ke simular en el hyperternal la cuestion es que simulado  los caracteres si se envian atravez el el puerto  que utilizamos pero una vez conecetado el interfaz para controlar los niveles de voltaje en comunicacnio serial  no despliega nada el hyperterminal lo configuro con 9600 de bits sin paridad  y con un bit de stop pero  solo me  muestra  basura el  programa  es

include <p12f629.inc>
__config _INTRC_OSC_NOCLKOUT & _CP_OFF & _CPD_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF
;**************************************************************
;* Declaracion de EQUs
;**************************************************************
porTX EQU GPIO
pinTX EQU GPIO3

;**************************************************************
;* Declaracion de variables (inician en la direccion 0x20 de RAM)
;**************************************************************
    cblock 0x20
          CntDly :1  ; esto es qeuivalente a CntDly EQU 0x20
          CntDly2 :1 ; esto es qeuivalente a CntDly2 EQU 0x21
           CntBit :1  ; esto es equivalente a CntBit EQU 0x22
           DatoTX :1  ; esto es equivalente a DatoTX EQU 0x23
           flag :1
           CntDly3 :1
     
    endc
;**************************************************************
; Direccion de Reset (aqui inicia el programa despues de RESET)
;**************************************************************
     ORG 0x00
                        goto inicio ; saltar a inicio
;**************************************************************
; Vector de Interrupcion (aqui salta el PC si existe interrupcion)
;**************************************************************
     ORG 0x04
                       retfie
;**************************************************************
;* Principal pricipal
;**************************************************************
inicio     call    3FFh          ; Tomar valor de calibracion (4MHz)
          bsf     STATUS, RP0  ; Selecciona banco 1
          movwf   OSCCAL       ; Salvarlo en OSCCAL
         
           movlw   0            ; configura Puerto GPIO de Salida
          movwf   TRISIO       ; TRISIO=00001000
          bcf     STATUS,RP0   ; selecciona banco 0
           clrf    05h
           movlw   07
           movwf   CMCON
           clrf    flag
           clrf    DatoTX
           bcf     STATUS,Z

MainLoop   call    cadena
           movwf   DatoTX
           incf    flag
           
           xorlw   00
           btfsc   STATUS,Z
           goto    Final
           call    Transmitir
           ;call    delay_1s
          goto    MainLoop    



cadena     movf flag,0
           addwf PCL,1 ;w=offset
           retlw "h"
           retlw "o"
           retlw "l"
           retlw "a"
           retlw 0x00
       


;*****************************************************************
;* S U B R U T I N A S *
;*****************************************************************
;              Transmitir
; Desripcion:     Rutina para tranmitir dato en forma serie
;                 por la terminal pinTX (formato: 9600,8,N,1)
;                 del puerto porTX
; Parametros de Ent:  DatoTX    -Aqui debe de estar el dato a TX
; Parametros de Sal:  Ninguno
; Rutinas Utilizadas: Delay_104us -Retardo para un bit a 9600 Bauds
; Variables Locales:  CntBit  Contador de bits
;*****************************************************************
Transmitir: movlw     8
            movwf     CntBit           ;CntBit=8
            bcf       porTX,pinTX      ;Trans. bit de inicio (siempre 0)
            call      Delay_104uS      ;retardo para 9600 Bauds

prox_bit:   rrf       DatoTX           ;rotar a la izq. C=bit a tx
            btfsc     STATUS,C         ;probar bit a transmitir
            bsf       porTX,pinTX      ;C=1 TErminal RB7=1 (Txinvasor
            btfss     STATUS,C         ;
            bcf       porTX,pinTX      ;C=0 Terminal RB7=0 (Tx:0)
            call      Delay_104uS      ;retardo para 9600 Bauds
            decfsz    CntBit           ;si contador=0 trans. bit de paro
            goto      prox_bit
            bsf       porTX,pinTX      ;Trans.bit de paro (simpre 1)
            call      Delay_104uS
            return  
 

;*****************************************************************
; Delay_104uS
; Desripcion: Rutina de retardo de 104uS con el uso del Xtal de 4MHz
; Variables de Ent: CntDly, CntlDly2
; Variables de Sal: ninguna
; Var. Modificas: CntDly, CntlDly2
;*****************************************************************
Delay_104uS    

      movlw 2
      movwf CntDly    ; CntDly=2
sigue    movlw 0f
      movwf CntDly2    ; CntDly2=15
   decfsz CntDly2    ; while(--CntDly2 ¡=0 )
      goto $-1
      decfsz CntDly
      goto sigue
      nop
      ;nop
      ;nop
        ;nop
        ;nop
      return
delay_1s
      movlw 27
      movwf CntDly ; CntDly=96
siguele   movlw 84
      movwf CntDly3 ; CntDly3=84
sigue2   movlw 40
      movwf CntDly2 ; CntDly2=24
      decfsz CntDly2 ; while(--CntDly2 ¡=0 )
      goto $-1
      decfsz CntDly3
      goto sigue2
      decfsz CntDly
      goto siguele
      return

   
Final
 END





el dalay  si es exacto  con la llamada a  subrutina  de 104us
gracias espero su respuesta

pd utilizo el mplab para programar e icprog para programar