sábado, 5 de enero de 2019

50 Ejercicios en ensamblador MPLABC y CCS para el PIC16F1827 #9 transmision de datos con paridad

Como transmitir y generar el bit de paridad en ASM usando MPLABX

 1 ;*******************************************************************************
  2 ;                                                                              *
  3 ;    Filename:  Proyecto USART                                                 *
  4 ;    Date:      29/07/2017                                                     *
  5 ;    File Version:   0.01                                                      *
  6 ;    Author:    Mariano Rocha                                                  *
  7 ;    Company:   Electronicos embebidos                                         *
  8 ;    Description: TX USART                                                     *
  9 ;                                                                              *
 10 ;*******************************************************************************
 11 LIST P=16f1827
 12 RADIX HEX
 13 include  P16f1827.inc
 14 __CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_ON & _FCMEN_ON    
 15 __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LVP_ON
 16     
 17     
 18 CBLOCK 0X20
 19 Text,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15
 20 jt, regpar, uartreg
 21 ENDC    
 22 ; proteus even txsta.0 = 1  odd txsta.0 =0
 23 
 24     ORG        0
 25     goto       INICIO
 26 
 27 ;********************************************************************
 28 Paridad_Bit:    
 29     movwf      regpar 
 30     BANKSEL    TXSTA
 31     bsf        TXSTA,0
 32     BANKSEL    0
 33     movlw      .8
 34     movwf      jt     
 35 Paridad_Bit1:    
 36     btfsc      regpar,7
 37     goto       Paridad_Bit2
 38     goto       Paridad_Bit3
 39 Paridad_Bit2:    
 40     movlw      b'00000001'
 41     BANKSEL    TXSTA 
 42     xorwf      TXSTA,f      
 43     BANKSEL    0    
 44 Paridad_Bit3:      
 45     decfsz     jt,f
 46     goto       $+2
 47     return    
 48     rlf        regpar,f
 49     goto       Paridad_Bit1
 50 ;********************************************************************     
 51     
 52 CONFIG_USART_9600:
 53     BANKSEL    TXSTA
 54     movlw      B'11100101' 
 55     movwf      TXSTA
 56     movlw      .25
 57     movwf      SPBRGL
 58     clrf       SPBRGH
 59     BANKSEL    RCSTA
 60     movlw      B'10000000'     
 61     movwf      RCSTA
 62     BANKSEL    TXSTA
 63     bsf        TXSTA,TXEN
 64     BANKSEL    RCSTA
 65     bsf        RCSTA,CREN
 66     BANKSEL    PIR1
 67     bsf        PIR1,TXIF
 68     BANKSEL    TRISB
 69     bcf        TRISB,2
 70     BANKSEL    BAUDCON
 71     movlw      B'00000000' 
 72     movwf      BAUDCON
 73     BANKSEL    0
 74     return
 75 
 76 UART_WRITE:
 77     banksel   0
 78     movwf     uartreg
 79     call      Paridad_Bit
 80     banksel   0
 81     movf      uartreg,w
 82     BANKSEL   TXREG
 83     movwf     TXREG
 84     BANKSEL   PIR1
 85     nop
 86     btfss     PIR1,TXIF
 87     goto      $-2
 88     return
 89 
 90 UART_WRITE_STRING:    
 91      movwf     FSR0
 92 UART_1:
 93      movf      INDF0,w
 94      btfsc     STATUS,Z
 95      return
 96      call      UART_WRITE
 97      incf      FSR0,f
 98      BANKSEL   0
 99      goto      UART_1     
100 ;********************************************************************
101    
102 INICIO:
103     BANKSEL   ANSELB
104     clrf      ANSELB    
105     BANKSEL   0
106     call      CONFIG_USART_9600
107     
108 MAIN:  
109      movlw     'P'
110      movwf     Text
111      movlw     'R'
112      movwf     t1
113      movlw     'O'
114      movwf     t2
115      movlw     'G'
116      movwf     t3
117      movlw     'R'
118      movwf     t4 
119      movlw     'A'
120      movwf     t5
121      movlw     'M'
122      movwf     t6
123      movlw     'A'
124      movwf     t7
125      movlw     'N'
126      movwf     t8
127      movlw     'D'
128      movwf     t9
129      movlw     'O'
130      movwf     t10
131      movlw     'P'
132      movwf     t11
133      movlw     'I'
134      movwf     t12
135      movlw     'C'
136      movwf     t13
137      movlw     's'
138      movwf     t14  
139      movlw     0
140      movwf     t15
141      
142      movlw     Text
143      call      UART_WRITE_STRING
144      goto      $
145 
146 
147     
148  
149     goto      $
150 
151      
152 end;      


Codigo CCS donde se explica como transmitir con paridad y hacer las pruebas en proteus.

El bit de paridad es un bit que se añade a la información transmitida de tal forma que el número de "1" sea par o impar.
Por ejemplo si transmito el byte 01101101 si quiero un bit de paridad par este valdra "1" (ya que el número de unos que tenemos es impar, al añadir este se vuelve par) quedando: 011011011. Por el contrario si es paridad impar añadiremos un "0" (por ser el números de unos impar) quedando: 011011010.

La forma de consigurarlo es mediante el FUSE: PARITY que puede valer:

N => No se utiliza paridad,
E => Paridad Par,
O => Paridad Impar.

CCS hace el calculo automaticamente y lo añade al registro TXSTA bit 1 para que cuando se transmita este incluido, lo unico que tenemos que configurar es la linea de USART

#use rs232(baud=9600,parity=O,UART1,bits=8)

Luego en el simulador configuramos




Y asi queda el codigo en CCS


Ahora podemos ver como queda la simulacion



Codigo CCS  Codigo ASM

No hay comentarios:

Publicar un comentario