need help to sci in asm

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

need help to sci in asm

2,642 Views
JACOBO
Contributor I
hi
 
i am working in the s12e128 and i can't achieve success in the module sci,
i want the sci to 9600 no parity, 8 bits, 1 bit stop with a crystal external of 8 mhz.
 
      LDD   #$001A         
      STD   SCI1BDH     
      LDD   #$0008      
      STD   SCI1CR1     
      JSR   CHECK
      LDAA  #$4F        
      STAA  SCI1DRL
      JSR   CHECK
       .
       .
       .
       .
   NEXT DATA
CHECK:      BRCLR SCI1SR1,$80,CHECK  
                    RTS
 
    The problem is when in the line
 
    STAA  SCI1DRL
 
    the data no is transfered to register sci1drl and in the pin txd
 
  i configured fine the registers?
  i ignored some step?
 
  thank you
 
i send the code.
 
Code:
;*********************************************;***********EXPORTACION DE SIMBOLOS***********;*********************************************            XDEF CICLO              ;EXPORTA EL SIMBOLO CICLO                  ABSENTRY CICLO         ;UTILIZADO PARA EL EMSAMBLE TOTAL            INCLUDE 'mc9s12e128.inc' ;INCLUDE DEL MICRO A UTILIZAR             ROMStart    EQU  $4000              ;DIRECCION DE MEMORIA FLASH DE PROGRAMA                   ;PARA ESTE MICRO ES DE $4000 A $FEFF;*********************************************;***********MEMORIA RAM***********************;*********************************************            ORG RAMStart      ;ORIGEN DE MEMORIA RAM DE USUARIO                  ;PARA ESTE MICRO ES DE $0400 A $0FFFAUX           EQU $2000             ;AUX ES UBICADO EN LA LOCALIDAD $2000AUX1         EQU $2001       ;AUX1 ES UBICADO EN LA LOCALIDAD $2001AUX2          EQU $2004       ;AUX2 ES UBICADO EN LA LOCALIDAD $2004AUX3         EQU $2005             ;AUX3 ES UBICADO EN LA LOCALIDAD $2005LCD           EQU $2006       ;LCD ES UBICADO EN LA LOCALIDAD $2006UNIDAD        EQU $2007       ;UNIDAD ES UBICADO EN LA LOCALIDAD $2007DECIMA        EQU $2008       ;DECIMA ES UBICADO EN LA LOCALIDAD $2008CENTESIMA     EQU $2009             ;CENTESIMA ES UBICADO EN LA LOCALIDAD $2009MILESIMA      EQU $200A             ;MILESIMA ES UBICADO EN LA LOCALIDAD $200ADIEZMILESIMA  EQU $200B       ;DIEZMILESIMA ES UBICADO EN LA LOCALIDAD $200BTEMPORAL_H    EQU $200C       ;TEMPORAL_H ES UBICADO EN LA LOCALIDAD $200CTEMPORAL_L    EQU $200D       ;TEMPORAL_L ES UBICADO EN LA LOCALIDAD $200D                           ;A PARTIR DE AQUI DECLARAN LOS REGISTROS                   ;DE USUARIO;*********************************************;***********MEMORIA FLASH DE PROGRAMA*********;*********************************************            ORG ROMStart      ;ORIGEN DE MEMORIA DE PROGRAMA FLASH                                                       ;A PARTIR DE AQUI SE ESCRIBE EL CODIGO                                    CICLO:      LDS   #$23FF            ;INICIALIZA EL STACK             CLR   DDRA       ;CONFIGURA EL PUERTO A COMO SALIDA            LDAA  #$FF                    STAA  DDRB       ;CONFIGURA EL PUERTO B COMO SALIDA      CLR   PORTB      LDAA  #$FF      STAA  DDRU              ;CONFIGURA EL PUERTO U COMO SALIDA      ;LDAA  #$0A      ;STAA  DDRS          ;CONFIGURA EL PUERTO S                   LDAA  #$28       ;*      JSR   COMANDO      ;**      LDAA  #$01       ;***      JSR   COMANDO      ;****      LDAA  #$06       ;*****      JSR   COMANDO      ;CONFIGURA      LDAA  #$0C       ;LCD DE 32x2      JSR   COMANDO      ;*****      LDAA  #$81       ;****      JSR   COMANDO      ;***      LDAA  #$08       ;**       JSR   COMANDO      ;*            JSR   MENSAJE                        LDD   #$001A           ;*       STD   SCI1BDH     ;CONFIGURA      LDD   #$0008      ;SCI COMUNICACION SERIAL RS232      STD   SCI1CR1     ;*                         LDAA  #$10       ;*      STAA  ATDDIEN0     ;**       CLR   ATDDIEN1          ;***      LDAA  #$80       ;****       STAA  ATDCTL2      ;*****       LDAA  #$08       ;CONFIGURA CONVERTIDOR ANALOGICO-DIGITAL       STAA  ATDCTL3      ;*****       LDAA  #$01       ;****       STAA  ATDCTL4      ;***CONVERSION: LDAA  #$CC       ;**       STAA  ATDCTL5           ;*             LDD   ATDDR0H       STAB  PTU        ;EL RESULTADO DE LA CONVERSION (10 BITS) ES UBICADO EN PORT U                  ;PARA QUE EL RESULTADO DE LA CONVERSION ESTE RELACIONADO      LDY   #$0031      ;CON EL VOLTAJE A REPRESENTAR,LA LECTURA DEL CAD SE       EMUL                    ;MULTIPLICA POR 49, ES DECIR,CADA CAMBIO EN EL CAD SIGNIFICA      EXG   D,X               ;0.0049V DE CAMBIO Y PARA MANEJAR CIFRAS ENTERAS SE OCUPA EL 49       JSR   HEXTOBCD          ;SALTA A LA SUBRUTINA HEXTOBCD             JSR   CHECK       JSR   MENSAJESER            LDAA  #$D1             JSR   COMANDO                 LDAA  UNIDAD      ;DE LA SUBRUTINA HEXTOBCD SE OBTIENE UNIDAD Y      LDAB  #$30              ;SUMA 30 PARA OBTENER EL ASCCII DEL VALOR ENTRE 0 Y 10      ABA                     ;QUE SE OBTUVO Y PODERLO MANDAR AL DISPLAY      STAA  UNIDAD      STAA  SCI1DRL          ;ENVIA UNIDAD AL PUERTO SERIAL      JSR   CHECK       JSR   DATO      LDAA  #$D3      JSR   COMANDO      LDAA  DECIMA       ;DE LA SUBRUTINA HEXTOBCD SE OBTIENE DECIMA Y      LDAB  #$30       ;SUMA 30 PARA OBTENER EL ASCCII DEL VALOR ENTRE 0 Y 10      ABA           ;QUE SE OBTUVO Y PODERLO MANDAR AL DISPLAY      STAA  DECIMA      STAA  SCI1DRL      ;ENVIA DECIMA AL PUERTO SERIAL      JSR   CHECK       JSR   DATO      LDAA  CENTESIMA     ;DE LA SUBRUTINA HEXTOBCD SE OBTIENE CENTESIMA Y      LDAB  #$30       ;SUMA 30 PARA OBTENER EL ASCCII DEL VALOR ENTRE 0 Y 10      ABA           ;QUE SE OBTUVO Y PODERLO MANDAR AL DISPLAY      STAA  CENTESIMA      STAA  SCI1DRL      ;ENVIA CENTESIMA AL PUERTO SERIAL      JSR   CHECK       JSR   DATO      LDAA  MILESIMA     ;DE LA SUBRUTINA HEXTOBCD SE OBTIENE MILESIMA Y      LDAB  #$30       ;SUMA 30 PARA OBTENER EL ASCCII DEL VALOR ENTRE 0 Y 10      ABA           ;QUE SE OBTUVO Y PODERLO MANDAR AL DISPLAY      STAA  MILESIMA      STAA  SCI1DRL      ;ENVIA MILESIMA AL PUERTO SERIAL      JSR   CHECK       JSR   DATO      LDAA  DIEZMILESIMA   ;DE LA SUBRUTINA HEXTOBCD SE OBTIENE MILESIMA Y      LDAB  #$30       ;SUMA 30 PARA OBTENER EL ASCCII DEL VALOR ENTRE 0 Y 10      ABA           ;QUE SE OBTUVO Y PODERLO MANDAR AL DISPLAY      STAA  DIEZMILESIMA      STAA  SCI1DRL      ;ENVIA DIEZMILESIMA AL PUERTO SERIAL      JSR   CHECK             JSR   DATO                       JMP   CONVERSION            ;*********************************************;***********SUBRUTINAS************************;*********************************************            HEXTOBCD:   CLR   UNIDAD            ;*SUBRUTINA HEXTOBCD            CLR   DECIMA            ;*           CLR   CENTESIMA     ;*ESTA SUBRUTINA PERMITE CONVERTIR EL RESULTADO           CLR   MILESIMA          ;*OBTENIDO DEL CAD A CUATRO DIGITOS EN FORMATO           CLR   DIEZMILESIMA      ;*BCD DE LA SIGUEINTE FORMA           CLR  TEMPORAL_H        ;*UNIDAD, PUNTO DECIMAL, DECIMA, CENTESIMA, MILESIMA, DIEZMILESIMA           CLR   TEMPORAL_L                               ;*AQUI SE CHECA QUE EL RESULTADO DEL CAD NO           CPX   TEMPORAL_H    ;*SEA CERO, PARA NO DECREMENTAR UNO DE CERO Y CON           BEQ   SALIDA            ;*ESTO NOS ENVIE UN RESULTADO EN EL LCD EQUIVOCADO                                   LOOP:    DEX           ;*PRIMERAMENTE DE DECREMENTA X (RESULTADO DEL CAD)           INC   DIEZMILESIMA      ;*SE INCREMENTA DIEZMILESIMA           LDAA #$0A           CMPA DIEZMILESIMA   ;*SE CHECA SI DIEZMILESIMA SEA IGUAL A 10            BEQ   UNO        ;*SI DIEZMILESIMA ES IGUAL A 10 SALTA A UNO           CPX   TEMPORAL_H    ;*SE CHECA SI X ES IGUAL A TEMPORAL_H O IGUAL A CERO           BEQ   SALIDA            ;*SI X ES IGUAL A CERO SALTA A SALIDA           BRA   LOOP       ;*SE SALTA A LOOP EN CASO DE QUE DIEZMILESIMA ES MENOR QUE DIEZ Y X ES MAYOR QUE CERO UNO:    CLR   DIEZMILESIMA      ;*DIEZMILESIMA ES IGUAL A CERO           INC   MILESIMA     ;*SE INCREMENTA MILESIMA           LDAA #$0A           CMPA MILESIMA     ;*SE CHECA SI MILESIMA SEA IGUAL A 10           BEQ   DOS        ;*SI MILESIMA ES IGUAL A 10 SALTA A DOS           CPX   TEMPORAL_H    ;*SE CHECA SI X ES IGUAL A TEMPORAL_H O IGUAL A CERO           BEQ   SALIDA      ;*SI X ES IGUAL A CERO SALTA A SALIDA           BRA   LOOP       ;*SE SALTA A LOOP EN CASO DE QUE MILESIMA ES MENOR QUE DIEZ Y X ES MAYOR QUE CERODOS:    CLR   MILESIMA     ;*MILESIMA ES IGUAL A CERO           INC  CENTESIMA     ;*SE INCREMENTA CENTESIMA           LDAA #$0A           CMPA CENTESIMA     ;*SE CHECA SI CENTESIMA SEA IGUAL A 10           BEQ   TRES       ;*SI CENTESIMA ES IGUAL A 10 SALTA A TRES           CPX   TEMPORAL_H    ;*SE CHECA SI X ES IGUAL A TEMPORAL_H O IGUAL A CERO           BEQ   SALIDA      ;*SI X ES IGUAL A CERO SALTA A SALIDA           BRA   LOOP       ;*SE SALTA A LOOP EN CASO DE QUE CENTESIMA ES MENOR QUE DIEZ Y X ES MAYOR QUE CEROTRES:    CLR   CENTESIMA     ;*CENTESIMA ES IGUAL A CERO           INC  DECIMA      ;*SE INCREMENTA DECIMA           LDAA #$0A           CMPA DECIMA      ;*SE CHECA SI DECIMA SEA IGUAL A 10           BEQ   CUATRO      ;*SI DECIMA ES IGUAL A 10 SALTA A CUATRO           CPX   TEMPORAL_H    ;*SE CHECA SI X ES IGUAL A TEMPORAL_H O IGUAL A CERO           BEQ   SALIDA      ;*SI X ES IGUAL A CERO SALTA A SALIDA           BRA   LOOP       ;*SE SALTA A LOOP EN CASO DE QUE DECIMA ES MENOR QUE DIEZ Y X ES MAYOR QUE CEROCUATRO   CLR  DECIMA      ;*CENTESIMA ES IGUAL A CERO           INC  UNIDAD      ;*SE INCREMENTA UNIDAD           CPX   TEMPORAL_H    ;*SE CHECA SI X ES IGUAL A TEMPORAL_H O IGUAL A CERO           BEQ  SALIDA      ;*SI X ES IGUAL A CERO SALTA A SALIDA           BRA   LOOP       SALIDA:   RTS TIEMPO:    LDY   #$8000      ;*SUBRUTINA DE TIEMPOFLAG:    DEY           BNE   FLAG           RTS           MENSAJESER: LDAA  #$56              ;V            STAA  SCI1DRL      JSR   CHECK            LDAA  #$4F        ;O            STAA  SCI1DRL      JSR   CHECK            LDAA  #$4C        ;L            STAA  SCI1DRL      JSR   CHECK            LDAA  #$54        ;T            STAA  SCI1DRL      JSR   CHECK            LDAA  #$41        ;A            STAA  SCI1DRL      JSR   CHECK            LDAA  #$4A         ;J            STAA  SCI1DRL      JSR   CHECK            LDAA  #$45         ;E            STAA  SCI1DRL      JSR   CHECK            LDAA  #$3A         ;:             STAA  SCI1DRL      JSR   CHECK            RTS CHECK:      BRCLR SCI1SR1,$80,CHECK              RTS                                 ;*SUBRUTINA DE MENSAJE, ENVIA LOS SIGUIENTES CARACTERES PARA UN LCD DE 32x2MENSAJE:    LDAA  #$43              ;C                                JSR   DATO                   LDAA  #$4F       ;O            JSR   DATO            LDAA  #$4E              ;N            JSR   DATO            LDAA  #$56              ;V            JSR   DATO            LDAA  #$45              ;E            JSR   DATO            LDAA  #$52              ;R            JSR   DATO            LDAA  #$54              ;T              JSR   DATO            LDAA  #$49              ;I            JSR   DATO            LDAA  #$44              ;D            JSR   DATO            LDAA  #$4F              ;O            JSR   DATO            LDAA  #$52              ;R            JSR   DATO            LDAA  #$8E            JSR   COMANDO            LDAA  #$41              ;A            JSR   DATO            LDAA  #$4E              ;N            JSR   DATO            LDAA  #$41              ;A            JSR   DATO            LDAA  #$4C              ;L            JSR   DATO            LDAA  #$4F              ;O            JSR   DATO            LDAA  #$47              ;G            JSR   DATO            LDAA  #$49              ;I            JSR   DATO            LDAA  #$43              ;C            JSR   DATO            LDAA  #$4F              ;O            JSR   DATO            LDAA  #$2D              ;-            JSR   DATO            LDAA  #$44              ;D            JSR   DATO            LDAA  #$49              ;I            JSR   DATO            LDAA  #$47              ;G            JSR   DATO            LDAA  #$49              ;I            JSR   DATO            LDAA  #$54              ;T            JSR   DATO             LDAA  #$41              ;A            JSR   DATO             LDAA  #$4C              ;L            JSR   DATO             LDAA  #$C9      JSR   COMANDO      LDAA  #$56              ;V            JSR   DATO            LDAA  #$4F              ;O            JSR   DATO            LDAA  #$4C              ;L            JSR   DATO            LDAA  #$54              ;T            JSR   DATO            LDAA  #$41              ;A            JSR   DATO            LDAA  #$4A              ;J            JSR   DATO            LDAA  #$45              ;E            JSR   DATO            LDAA  #$D2      JSR   COMANDO      LDAA  #$2E              ;.            JSR   DATO            LDAA  #$0C      JSR   COMANDO      RTS           ;*PARA OTRO TAMAÑO DE LCD SE RECOMIENDA CAMBIAR                                      ;*EL TEXTO DE MENSAJE PARA PODER SER VISIBLE                         COMANDO:    STAA  AUX        ;*SUBRUTINA COMANDO            STAA  AUX1       ;*************************************            LDAA  #$F0       ;ESTA SUBRUTINA PERMITE ENVIAR COMANDOS            ANDA  AUX        ;O INSTRUCCIONES AL LCD            STAA  AUX2       ;ESTA DISEÑADA PARA 4 BITS            ORAA  #$08       ;Y EN ESTE CASO ENVIA LOS 4 BITS MAS             STAA  AUX        ;SIGNIFICATIVOS PRIMERO, ACCIONA EL            ASL   AUX1       ;ENABLE DEL LCD; ENVIA LOS 4 BITS MENOS            ASL   AUX1       ;SIGNIFICATIVOS Y POR ULTIMO ACCIONA            ASL   AUX1       ;**************************************            ASL   AUX1       ;*            LDAA  AUX1            STAA  AUX3            ORAA  #$08            STAA  AUX1            LDAA  AUX            STAA  PORTB            JSR   TIEMPO            LDAA  AUX2            STAA  PORTB            JSR   TIEMPO            LDAA  AUX1            STAA  PORTB            JSR   TIEMPO            LDAA  AUX3            STAA  PORTB            RTS                  ;*SUBRUTINA DATODATO:       STAA  AUX              ;*************************************            STAA  AUX1       ;ESTA SUBRUTINA PERMITE ENVIAR DATOS O            LDAA  #$F0       ;O EL CARACTER A DEPLEGAR AL LCD            ANDA  AUX        ;ESTA DISEÑADA PARA 4 BITS            STAA  AUX        ;Y EN ESTE CASO ENVIA LOS 4 BITS MAS             ASL   AUX1       ;SIGNIFICATIVOS PRIMERO, ACCIONA EL            ASL   AUX1       ;ENABLE DEL LCD; ENVIA LOS 4 BITS MENOS            ASL   AUX1       ;SIGNIFICATIVOS Y POR ULTIMO ACCIONA            ASL   AUX1       ;NUEVAMENTE EL ENABLE DEL LCD            LDAA  #$0A       ;**************************************            ORAA  AUX        ;*            STAA  AUX            LDAA  #$0A            ORAA  AUX1            STAA  AUX1            LDAA  #$F2            ANDA  AUX            STAA  AUX2            LDAA  #$F2            ANDA  AUX1            STAA  AUX3            LDAA  AUX            STAA  PORTB            JSR   TIEMPO            LDAA  AUX2            STAA  PORTB            JSR   TIEMPO            LDAA  AUX1            STAA  PORTB            JSR   TIEMPO            LDAA  AUX3            STAA  PORTB            RTS                    ;*********************************************;***********INTERUPCIONES*********************;*********************************************            ORG   $FFFE       ;ORIGEN DEL VECTOR DE INTERRUPCIONES                        FDB   CICLO             ;PARA ESTE MICRO ES DE $FF00 A $FFFF            END

 
 
 
Labels (1)
0 Kudos
3 Replies

459 Views
Sten
Contributor IV

Could you perhaps try to write to the Baud Rate and Control registers as two 8-bit writes instead of one 16-bit write. For the Baud Rate register the writing order of the Hi and Lo bytes is significant. This initialision routine works for me (HCS12DT):

Code:

#define BAUD_REG_VAL 65 /* 20MHz / 16 / 65 = 19231 bps => 0.16% error */void SCI_init(void) {   SCI0BDH = BAUD_REG_VAL >> 8;     /* Set the bit-rate */   SCI0BDL = BAUD_REG_VAL & 0xFF;   SCI0CR1 = 0;                     /* 1 start, 8 data, 1 stop, no parity */   SCI0CR2 = 0;                     /* disable receiver, transmitter and interrupts */   SCI0CR2_RE = 1;                  /* enable receiver */   SCI0CR2_RIE = 1;                 /* enable receiver interrupt */   SCI0CR2_TE = 1;                  /* enable transmitter */}


 

0 Kudos

459 Views
Steve
NXP Employee
NXP Employee
Have you enabled the SCI transmitter (& receiver)?
Have a look at Sten's code where he writes to SCIxCR2.
0 Kudos

459 Views
JACOBO
Contributor I
Thank you for your help.
 
I followed yours steps and i can't achieve what el sci work it.
 
Change the SCI1 to SCI0 and bingo!
 
The code is the same.
 
The quenstion is why SCI1 yes and SCI0 not?
 
somebody know it?
 
thank you
0 Kudos