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