Hola a todos
Este código assembler , lo uso en un dsPIC 33fj64MC506, para recibir bytes desde mi PC enviados con el programa consola TERA TERM, el pic conectado a un MaX 232, el puerto Com3 funciona ok. En el código activo la rutina de interrupción cuando recibo un byte desde el pc y lo muestro en el display bit a bit
Mi problema es que recibo 00000011 cuando envío A, o B o C y recibo 00000010 cuando envío una D.
Esperaria ver el byte es ASCII, un decimal 65 == A o Hexadecimal 41.
Será la velocidad por favor díganme si el U1BRG está bien calculado.
Muchas Gracias por su ayuda
[code
.equ __p33FJ64MC506, 1
.include "F: \PROG_CONTROL\p33FJ64MC506.inc"
.include "F: \PROG_CONTROL\V_DETECTOR.inc"
;/******************************************************************************/
;/* Configuration bits */
;/******************************************************************************/
;................................................................
;CONFIGURACIÓN DEL DSPIC33FJ64MC506
config __FOSCSEL,FNOSC_PRI ;//Primary oscillator (XT, HS, EC)sin pll
config __POSCMD_HS ;//Cristal HS.;POSCMD_HS=HS oscillator 20 MHZ
config __FBS, BWRP_WRPROTECT_OFF ; Proteccion de codigo desabilitado
config __FGS, GSS_OFF & GWRP_OFF ;
config __FWDT, FWDTEN_OFF & WINDIS_OFF ;Desabilitado Watchdog Timer
config __FPOR, PWMPIN_OFF & FPWRT_PWR16 ; EL dspic empieza a funcionar despues de 16ms
.global __reset
.global __U1RXInterrupt ;Declaracion de Interrupción para recepcion de caracter
.text ;Start of Code section
goto START
;///////////////////////////////////////
;RUTINA DE INTERRUPCION
__U1RXInterrupt:
PUSH.S
bclr IEC0,#11 ;DESHABILITA INTERRUPCIÓN POR RECEPCION DE
;CARACTER DE LA UART1, pág 99
mov U1RXREG,W9
; mov #5,W9 PARA PRUEBAS DEL DESPLIEGUE EN DISPLAY
BCLR IFS0, #U1RXIF ;Clear the U1RXIF Interrupt flag Status bit.
;****CONTROL DEL DISPLAY PARA MOSTRAR BYTE RECIBIDO
;**************************************************
call CLEAR ;limpia el display
mov #0,w0 ;cursor a posicion 21 primer lugar linea 2
mov w0,pos_car ;PARA pos_car = 21 pone cursor en primer lugar linea 2
CALL P_CURSOR1 ;PARA pos_car = 0 pone cursor en primer lugar linea 1
CALL E_BYTE ;ESCRIBE BYTE
SALIR:
bclr U1MODE,#15 ;BORRA U1RXREG
BSET U1MODE,#15
POP.S
BCLR IFS0, #U1RXIF ;Clear the U1RXIF Interrupt flag Status bit.
bset IEC0,#11 ;HABILITA INTERRUPCIÓN POR RECEPCION DE
;CARACTER DE LA UART1, pág 99
RETFIE
;////////////////////////////////
;INICIO PROGRAMA
;////////////////////////////////////
__reset:
START:
CALL INICIALIZA ;INICIALIZA PORTS
CALL ON_TXRX1 ;INICIALIZA PUERTO RX
CALL _INI_INTERRUPTS ;INICIALIZA INTERRUPCIONES
BSET U1MODE,#15 ;UART HABILITADA
CALL INI_DISPLAY ;INICIALIZA DISPLAY, SE OMITE ESTA RUTINA EN ESTE ARCHIVO
CALL DISPLAY_INICIAL ;ESCRIBE DISPLAY INICIAL ,SE OMITE ESTA RUTINA EN ESTE ARCHIVO
Espera_byte: ;ESPERA DE BYTES DE RECEPCION
bra espera_byte
;FIN PROGRAMA
;*************************************************
;RUTINA PARA ESCRIBIR BYTE RECIBIDO EN DISPLAY
;*************************************************
E_BYTE:
BTSS W9,#15 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#15 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#14 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#14 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#13 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#13 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#12 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#12 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#11 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#11 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#10 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#10 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#9 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#9 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#8 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#8 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#7 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#7 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#6 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#6 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#5 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#5 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#4 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#4 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#3 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#3 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#2 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#2 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#1 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#1 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#0 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#0 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
return
;*************************************************
;RUTINAS DE INICIALIZACIÓN
;*************************************************
ON_TXRX1: ;VER PAG 216 UART TX MODE REGISTER
;XTAL OSCILADOR 20 MHZ = FOSC
mov #64,W0 ;CARGO BAUD RATE 9600 BAUD CON BRGH=0, PAGINA 214 MANUAL DSPIC
mov W0,U1BRG ;CON BRGH=0 ENTONCES U1BRG= ((FCY/(16* BAUDRATE))-1
; FCY = FOSC/2 = 10MHZ, ENTONCES U1BRG= (10.000.000/(16*9600))-1 = 64…
bclr U1MODE,#3 ;bit 3, =0 BRGH HIGH BAUD RATE ENABLE BIT
bclr U1MODE,#0 ;bit 0, =0 UNO O DOS STOP BITS, SOLO UNO =0
bclr U1MODE,#1 ;bit 1, =0 SIN BIT DE DATA SIN PARIDAD
bclr U1MODE,#2 ;bit 2, =0 SIN PARIDAD
bclr U1MODE,#4 ;bit 4, =0 RECIEVED POLARITY INVERSION BIT
bclr U1MODE,#5 ;bit 5, =0 AUTO BAUD RATE DESHABILITADO
bclr U1MODE,#6 ;bit 6, =0 LOPBACK DESHABILITADO
bclr U1MODE,#7 ;bit 7, =0 WAKE UP DESHABILITADO
bclr U1MODE,#8 ;bit 8, =0 U1RTS Y U1CTS DESHABILITADOS
bclr U1MODE,#9 ;bit 9, =0 U1RTS Y U1CTS DESHABILITADOS
bclr U1MODE,#10 ;bit 10, no implementado
bclr U1MODE,#11 ;bit 11=0, UxRTS EN SIMPLEX MODE
bclr U1MODE,#12 ;bit 12=0, iRda DEHABILITADO = 0
bclr U1MODE,#13 ;bit 13=0, CONTINUA OPERANDO EN en IDLE MODE
bclr U1MODE,#14 ;bit 14, no implementado
bset U1MODE,#15 ;bit 15=1, HABILITA LA UART
;VER PAG 216 UART TX STATUS AND CONTROL REGISTER
bclr U1STA,#0 ;bit 0, =0 BIT RECEPCION DE UN CARACTER EN EL BUFFER DE ENTRADA
bclr U1STA,#1 ;bit 1, =0 BUFFER DE RECEPCIÓN LLENO
bclr U1STA,#2 ;bit 2, =0 BIT DE ERROR DE FRAMING
bclr U1STA,#3 ;bit 3, =0 BIT DE ERROR DE PARIDAD
bclr U1STA,#4 ;bit 4, =0 RECIEVED IDLE BIT
bclr U1STA,#5 ;bit 5, =0 ADRESS DETECT MODE
bclr U1STA,#6 ;bit 6, =0 RECEIVED INTERRUPT MODE SELECTION BIT
bclr U1STA,#7 ;bit 7, =0 RECEIVED INTERRUPT MODE SELECTION BIT
bclr U1STA,#8 ;bit 8, =1 TRANSMISIÓN EN PROCESO=0 O TERMINADA =1 (DE LECTURA)
bclr U1STA,#9 ;bit 9, =1 BUFFER DE TX LLENO = 1 (DE LECTURA)
bclr U1STA,#10 ;bit 10=1 TRANSMIT ENABLE BIT (se habilita despues)
bclr U1STA,#11 ;bit 11=0 sin BREAK BIT
bclr U1STA,#12 ;bit 12=0, NC
bset U1STA,#13 ;bit 13=0, SIN INTERRUPC CUANDO SE TRANSMITE UN CHAR
bclr U1STA,#14 ;bit 14=0 IRDA
bset U1STA,#15 ;bit 15=1, CON INTERRUPC CUANDO SE RECIBE UN CHAR
RETURN
;///////////////////////////////////////////////
;INICIALIZACIÓN DE INTERRUPCIONES, ver pág 81, y 127 manual
_INI_INTERRUPTS:
;******** INDICADORES DE OCURRENCIA
;INTCON1: INTERRUPT CONTROL REGISTER 1, PAG 87
bset INTCON1,#15 ;Sin Interrupciones anidadas
;IFS0: INTERRUPT FLAG STATUS REGISTER 0, PAG 90
;bit de aviso de ocurrencia de interrupción
bclr IFS0,#12
bclr IFS0,#11 ;RESET DEL BIT INDICADOR DE OCURRENCIA DE INTERRUPCIÓN POR RECEPCIÓN
;*********HABILITACIÓN DE LA INTERRUPCIÓN
; IEC0: INTERRUPT ENABLE CONTROL REGISTER 0, PAG 99
bclr IEC0,#12 ;deshabilito interrupciones por transmisión
bset IEC0,#11 ;HABILITA INTERRUPCIÓN POR RECEPCION DE
;CARACTER DE LA UART1, pág 99
;********* PRIORIDAD DE LA INTERRUPCIÓN, PAG 108
;La CPU comienza en el reset con una prioridad igual a 0, y todas las interrupciones con una prioridad igual a 4
bset IPC2,#12 ;Set de prioridad de la interrupción por recepcion de caracter, pág 110
bclr IPC2,#13 ;PAG 108
bclr IPC2,#14
;INTTREG: INTERRUPT CONTROL AND STATUS REGISTER, PAG 126
;**********valores de un nueva prioridad de CPU y las interrupciones pendientes
;**********Esto lo maneja el controlador de interrupciones
; SR: CPU STATUS REGISTER(1), PAG 86
;- Registro STATUS, mantiene los bits STATUS de la ALU, del DSP y el valor de prioridad del nucleo actual.
;CORCON: CORE CONTROL REGISTER, PAG 86
;Aqui hay un solo bit que permite la seleccion de una prioridad mayor a 7 o menor o igual a 7 para la CPU
;bclr IEC1,#15 ;DESHABILITA INTERRUPCIÓN POR TX UART2
;bclr IEC1,#14 ;DESHABILITA INTERRUPCIÓN POR RECEPCION DE
RETURN
;*********************************************************
;***INICIALIZACIÓN DE PORTS Y OTROS***
;**************************************************
INICIALIZA:
;CARACTER DE LA UART2, pág 98, 99
CLR Comandos
CLR IC6CON
CLR IC6BUF
CLR OC6CON
CLR OC6R
CLR OC6RS
CLR CNEN1
CLR CNEN2
CLR CNPU2
CLR CNPU1
;**************************************************************************************************
;//////////////////////////////////////////////////////////////////////////////////////////////////
;**RUTINA DE INICIALIZACION DE PUERTOS**
INI_PUERTOS:
;PUERTO D
;/////////////////////////////
;********
;clr LATD
;EXISTEN RD0 AL RD11
mov #0b1111000010000000,W0 ;INICIALIZACION DEL PORTD (RD0 AL RD6 >> DB0 AL DB7 DEL DISPLAY)
nop ;SALIDAS PARA INICIALIZAR DISPLAY
mov W0,TRISD ;PORTD7 ENTRADA PARA EL BUSY CHECK DEL DISPLAY
clr PORTD ;SE CAMBIA A SALIDA P CONTROL DEL DISPLAY EN RUTINA BUS CHECK
;mov #0b0000000000000000,W0
;bset TRISD,#1
;nop
nop ;
;SALIDA OPEN DRAIN
;CLR ODCD
;9876543210
;mov #0b0000111100000000,W0
;mov W0, ODCD
;PUERTO E
;********
;clr PWMCON1 ;NO DESHABILITA FUNCION PWM DEL PORTE, PAG 177 MANUAL
;clr PWMCON2
clr CNEN1
clr CNEN2
clr CNPU1
clr CNPU2
clr LATE
mov #0b0000000000000000,W0 ;INICIALIZACION DEL PORTE
mov W0,TRISE ;RE
nop
nop
clr PORTE
mov #0b0000000000000000,W0 ;TODOS EN CERO
and.b LATE
;PUERTO B
;********
mov #0b1111111111111111,W0;
nop
nop
mov W0,AD1PCFGL ;PORTB COMO DIGITALES NO DEL CONVERSOR AD
; ;PAG 150 MANUAL
mov W0,AD1PCFGH
;COL 4, RB15 ENTRADA DE TECLADO
;SALIDA OPEN DRAIN, COLECTOR ABIERTO NO SE USA CON ESTE TECLADO
;CLR ODCD
;mov #0b0000000011110000,W0
;mov W0, ODCD
;CLR ODCF
nop
clr LATB
nop
mov #0b1111111111111100,W0 ;INICIALIZACION DEL PORTB, SALIDAS
nop ;RBO ; ENABLE DRIVER MOTOR ELEVADOR PELOTAS
;RB1 ;
mov W0,TRISB ;RB10 AL RB13 ENTRADAS DESDE TECLADO
nop
clr PORTB
;PUERTO C ;EXISTEN RC13 Y RC14
;///////////////////////////////////
;********
clr LATC
mov #0b1001111111111111,W0 ; INICIALIZACION DEL PORTC
nop ; PORTC,14 SALIDA RS DEL DISPLAY
mov W0,TRISC ; PORTC,13 SALIDA TEST LED DE TARJETA
;PUERTO F ;EXISTEN RF0 AL RF6
;********
clr LATF
mov #0b1111111111010100,W0 ;INICIALIZACION DEL PORTF ,
mov W0,TRISF ;PORTF,0 SALIDA ENABLE DEL DISPLAY
nop ;PORTF,1 SALIDA R/W DEL DISPLAY
nop
clr PORTF
CLR ODCF
;PUERTO F ;EXISTEN RF0 AL RF6
;/////////////////////////////////
;******** ;RF2 SOLO COMUNICACION U1RX, ENTRADA
;RF3 SOLO COMUNICACION U1TX, SALIDA TX
;RF4 SOLO COMUNICACION U1RX,ENTRADA RX
;RF5 SOLO COMUNICACION U1TX, SALIDA TX
;PUERTO G ;EXISTEN SOLO RG2,RG3, RG6, RG7, RG8 Y RG9
;////////////////////////////////
;********
clr LATG
clr PORTG
mov #0b0000000001000000,W0 ;INICIALIZACION DEL PORTG
mov W0,TRISG ;RG2 Y 3 SALIDAS A TECLADO
nop ;RG7 Y 8 SALIDAS A TECLADO
nop ;RG6 ENTRADA SENSOR CONTADOR DE VUELTAS
;SALIDA OPEN DRAIN, COLECTOR ABIERTO DEL PORTG
;PARA PORTG2,3,7 Y 8
CLR ODCG
mov #0b0000000110001100,W0
mov W0, ODCG
nop
nop
nop
clr PORTG
CLR LATG
;****************************************************
]
Código: [Seleccionar]Hola a todos
Este código assembler , lo uso en un dsPIC 33fj64MC506, para recibir bytes desde mi PC enviados con el programa consola TERA TERM, el pic conectado a un MaX 232, el puerto Com3 funciona ok. En el código activo la rutina de interrupción cuando recibo un byte desde el pc y lo muestro en el display bit a bit
Mi problema es que recibo 00000011 cuando envío A, o B o C y recibo 00000010 cuando envío una D.
Esperaria ver el byte es ASCII, un decimal 65 == A o Hexadecimal 41.
Será la velocidad por favor díganme si el U1BRG está bien calculado.
Muchas Gracias por su ayuda
[code
.equ __p33FJ64MC506, 1
.include "F: \PROG_CONTROL\p33FJ64MC506.inc"
.include "F: \PROG_CONTROL\V_DETECTOR.inc"
;/******************************************************************************/
;/* Configuration bits */
;/******************************************************************************/
;................................................................
;CONFIGURACIÓN DEL DSPIC33FJ64MC506
config __FOSCSEL,FNOSC_PRI ;//Primary oscillator (XT, HS, EC)sin pll
config __POSCMD_HS ;//Cristal HS.;POSCMD_HS=HS oscillator 20 MHZ
config __FBS, BWRP_WRPROTECT_OFF ; Proteccion de codigo desabilitado
config __FGS, GSS_OFF & GWRP_OFF ;
config __FWDT, FWDTEN_OFF & WINDIS_OFF ;Desabilitado Watchdog Timer
config __FPOR, PWMPIN_OFF & FPWRT_PWR16 ; EL dspic empieza a funcionar despues de 16ms
.global __reset
.global __U1RXInterrupt ;Declaracion de Interrupción para recepcion de caracter
.text ;Start of Code section
goto START
;///////////////////////////////////////
;RUTINA DE INTERRUPCION
__U1RXInterrupt:
PUSH.S
bclr IEC0,#11 ;DESHABILITA INTERRUPCIÓN POR RECEPCION DE
;CARACTER DE LA UART1, pág 99
mov U1RXREG,W9
; mov #5,W9 PARA PRUEBAS DEL DESPLIEGUE EN DISPLAY
BCLR IFS0, #U1RXIF ;Clear the U1RXIF Interrupt flag Status bit.
;****CONTROL DEL DISPLAY PARA MOSTRAR BYTE RECIBIDO
;**************************************************
call CLEAR ;limpia el display
mov #0,w0 ;cursor a posicion 21 primer lugar linea 2
mov w0,pos_car ;PARA pos_car = 21 pone cursor en primer lugar linea 2
CALL P_CURSOR1 ;PARA pos_car = 0 pone cursor en primer lugar linea 1
CALL E_BYTE ;ESCRIBE BYTE
SALIR:
bclr U1MODE,#15 ;BORRA U1RXREG
BSET U1MODE,#15
POP.S
BCLR IFS0, #U1RXIF ;Clear the U1RXIF Interrupt flag Status bit.
bset IEC0,#11 ;HABILITA INTERRUPCIÓN POR RECEPCION DE
;CARACTER DE LA UART1, pág 99
RETFIE
;////////////////////////////////
;INICIO PROGRAMA
;////////////////////////////////////
__reset:
START:
CALL INICIALIZA ;INICIALIZA PORTS
CALL ON_TXRX1 ;INICIALIZA PUERTO RX
CALL _INI_INTERRUPTS ;INICIALIZA INTERRUPCIONES
BSET U1MODE,#15 ;UART HABILITADA
CALL INI_DISPLAY ;INICIALIZA DISPLAY, SE OMITE ESTA RUTINA EN ESTE ARCHIVO
CALL DISPLAY_INICIAL ;ESCRIBE DISPLAY INICIAL ,SE OMITE ESTA RUTINA EN ESTE ARCHIVO
Espera_byte: ;ESPERA DE BYTES DE RECEPCION
bra espera_byte
;FIN PROGRAMA
;*************************************************
;RUTINA PARA ESCRIBIR BYTE RECIBIDO EN DISPLAY
;*************************************************
E_BYTE:
BTSS W9,#15 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#15 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#14 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#14 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#13 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#13 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#12 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#12 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#11 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#11 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#10 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#10 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#9 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#9 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#8 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#8 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#7 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#7 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#6 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#6 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#5 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#5 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#4 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#4 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#3 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#3 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#2 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#2 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#1 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#1 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
BTSS W9,#0 ;ESCRIBE DATA RECIBIDA
CALL ESC_CERO
BTSC W9,#0 ;ESCRIBE DATA RECIBIDA
CALL ESC_UNO
return
;*************************************************
;RUTINAS DE INICIALIZACIÓN
;*************************************************
ON_TXRX1: ;VER PAG 216 UART TX MODE REGISTER
;XTAL OSCILADOR 20 MHZ = FOSC
mov #64,W0 ;CARGO BAUD RATE 9600 BAUD CON BRGH=0, PAGINA 214 MANUAL DSPIC
mov W0,U1BRG ;CON BRGH=0 ENTONCES U1BRG= ((FCY/(16* BAUDRATE))-1
; FCY = FOSC/2 = 10MHZ, ENTONCES U1BRG= (10.000.000/(16*9600))-1 = 64…
bclr U1MODE,#3 ;bit 3, =0 BRGH HIGH BAUD RATE ENABLE BIT
bclr U1MODE,#0 ;bit 0, =0 UNO O DOS STOP BITS, SOLO UNO =0
bclr U1MODE,#1 ;bit 1, =0 SIN BIT DE DATA SIN PARIDAD
bclr U1MODE,#2 ;bit 2, =0 SIN PARIDAD
bclr U1MODE,#4 ;bit 4, =0 RECIEVED POLARITY INVERSION BIT
bclr U1MODE,#5 ;bit 5, =0 AUTO BAUD RATE DESHABILITADO
bclr U1MODE,#6 ;bit 6, =0 LOPBACK DESHABILITADO
bclr U1MODE,#7 ;bit 7, =0 WAKE UP DESHABILITADO
bclr U1MODE,#8 ;bit 8, =0 U1RTS Y U1CTS DESHABILITADOS
bclr U1MODE,#9 ;bit 9, =0 U1RTS Y U1CTS DESHABILITADOS
bclr U1MODE,#10 ;bit 10, no implementado
bclr U1MODE,#11 ;bit 11=0, UxRTS EN SIMPLEX MODE
bclr U1MODE,#12 ;bit 12=0, iRda DEHABILITADO = 0
bclr U1MODE,#13 ;bit 13=0, CONTINUA OPERANDO EN en IDLE MODE
bclr U1MODE,#14 ;bit 14, no implementado
bset U1MODE,#15 ;bit 15=1, HABILITA LA UART
;VER PAG 216 UART TX STATUS AND CONTROL REGISTER
bclr U1STA,#0 ;bit 0, =0 BIT RECEPCION DE UN CARACTER EN EL BUFFER DE ENTRADA
bclr U1STA,#1 ;bit 1, =0 BUFFER DE RECEPCIÓN LLENO
bclr U1STA,#2 ;bit 2, =0 BIT DE ERROR DE FRAMING
bclr U1STA,#3 ;bit 3, =0 BIT DE ERROR DE PARIDAD
bclr U1STA,#4 ;bit 4, =0 RECIEVED IDLE BIT
bclr U1STA,#5 ;bit 5, =0 ADRESS DETECT MODE
bclr U1STA,#6 ;bit 6, =0 RECEIVED INTERRUPT MODE SELECTION BIT
bclr U1STA,#7 ;bit 7, =0 RECEIVED INTERRUPT MODE SELECTION BIT
bclr U1STA,#8 ;bit 8, =1 TRANSMISIÓN EN PROCESO=0 O TERMINADA =1 (DE LECTURA)
bclr U1STA,#9 ;bit 9, =1 BUFFER DE TX LLENO = 1 (DE LECTURA)
bclr U1STA,#10 ;bit 10=1 TRANSMIT ENABLE BIT (se habilita despues)
bclr U1STA,#11 ;bit 11=0 sin BREAK BIT
bclr U1STA,#12 ;bit 12=0, NC
bset U1STA,#13 ;bit 13=0, SIN INTERRUPC CUANDO SE TRANSMITE UN CHAR
bclr U1STA,#14 ;bit 14=0 IRDA
bset U1STA,#15 ;bit 15=1, CON INTERRUPC CUANDO SE RECIBE UN CHAR
RETURN
;///////////////////////////////////////////////
;INICIALIZACIÓN DE INTERRUPCIONES, ver pág 81, y 127 manual
_INI_INTERRUPTS:
;******** INDICADORES DE OCURRENCIA
;INTCON1: INTERRUPT CONTROL REGISTER 1, PAG 87
bset INTCON1,#15 ;Sin Interrupciones anidadas
;IFS0: INTERRUPT FLAG STATUS REGISTER 0, PAG 90
;bit de aviso de ocurrencia de interrupción
bclr IFS0,#12
bclr IFS0,#11 ;RESET DEL BIT INDICADOR DE OCURRENCIA DE INTERRUPCIÓN POR RECEPCIÓN
;*********HABILITACIÓN DE LA INTERRUPCIÓN
; IEC0: INTERRUPT ENABLE CONTROL REGISTER 0, PAG 99
bclr IEC0,#12 ;deshabilito interrupciones por transmisión
bset IEC0,#11 ;HABILITA INTERRUPCIÓN POR RECEPCION DE
;CARACTER DE LA UART1, pág 99
;********* PRIORIDAD DE LA INTERRUPCIÓN, PAG 108
;La CPU comienza en el reset con una prioridad igual a 0, y todas las interrupciones con una prioridad igual a 4
bset IPC2,#12 ;Set de prioridad de la interrupción por recepcion de caracter, pág 110
bclr IPC2,#13 ;PAG 108
bclr IPC2,#14
;INTTREG: INTERRUPT CONTROL AND STATUS REGISTER, PAG 126
;**********valores de un nueva prioridad de CPU y las interrupciones pendientes
;**********Esto lo maneja el controlador de interrupciones
; SR: CPU STATUS REGISTER(1), PAG 86
;- Registro STATUS, mantiene los bits STATUS de la ALU, del DSP y el valor de prioridad del nucleo actual.
;CORCON: CORE CONTROL REGISTER, PAG 86
;Aqui hay un solo bit que permite la seleccion de una prioridad mayor a 7 o menor o igual a 7 para la CPU
;bclr IEC1,#15 ;DESHABILITA INTERRUPCIÓN POR TX UART2
;bclr IEC1,#14 ;DESHABILITA INTERRUPCIÓN POR RECEPCION DE
RETURN
;*********************************************************
;***INICIALIZACIÓN DE PORTS Y OTROS***
;**************************************************
INICIALIZA:
;CARACTER DE LA UART2, pág 98, 99
CLR Comandos
CLR IC6CON
CLR IC6BUF
CLR OC6CON
CLR OC6R
CLR OC6RS
CLR CNEN1
CLR CNEN2
CLR CNPU2
CLR CNPU1
;**************************************************************************************************
;//////////////////////////////////////////////////////////////////////////////////////////////////
;**RUTINA DE INICIALIZACION DE PUERTOS**
INI_PUERTOS:
;PUERTO D
;/////////////////////////////
;********
;clr LATD
;EXISTEN RD0 AL RD11
mov #0b1111000010000000,W0 ;INICIALIZACION DEL PORTD (RD0 AL RD6 >> DB0 AL DB7 DEL DISPLAY)
nop ;SALIDAS PARA INICIALIZAR DISPLAY
mov W0,TRISD ;PORTD7 ENTRADA PARA EL BUSY CHECK DEL DISPLAY
clr PORTD ;SE CAMBIA A SALIDA P CONTROL DEL DISPLAY EN RUTINA BUS CHECK
;mov #0b0000000000000000,W0
;bset TRISD,#1
;nop
nop ;
;SALIDA OPEN DRAIN
;CLR ODCD
;9876543210
;mov #0b0000111100000000,W0
;mov W0, ODCD
;PUERTO E
;********
;clr PWMCON1 ;NO DESHABILITA FUNCION PWM DEL PORTE, PAG 177 MANUAL
;clr PWMCON2
clr CNEN1
clr CNEN2
clr CNPU1
clr CNPU2
clr LATE
mov #0b0000000000000000,W0 ;INICIALIZACION DEL PORTE
mov W0,TRISE ;RE
nop
nop
clr PORTE
mov #0b0000000000000000,W0 ;TODOS EN CERO
and.b LATE
;PUERTO B
;********
mov #0b1111111111111111,W0;
nop
nop
mov W0,AD1PCFGL ;PORTB COMO DIGITALES NO DEL CONVERSOR AD
; ;PAG 150 MANUAL
mov W0,AD1PCFGH
;COL 4, RB15 ENTRADA DE TECLADO
;SALIDA OPEN DRAIN, COLECTOR ABIERTO NO SE USA CON ESTE TECLADO
;CLR ODCD
;mov #0b0000000011110000,W0
;mov W0, ODCD
;CLR ODCF
nop
clr LATB
nop
mov #0b1111111111111100,W0 ;INICIALIZACION DEL PORTB, SALIDAS
nop ;RBO ; ENABLE DRIVER MOTOR ELEVADOR PELOTAS
;RB1 ;
mov W0,TRISB ;RB10 AL RB13 ENTRADAS DESDE TECLADO
nop
clr PORTB
;PUERTO C ;EXISTEN RC13 Y RC14
;///////////////////////////////////
;********
clr LATC
mov #0b1001111111111111,W0 ; INICIALIZACION DEL PORTC
nop ; PORTC,14 SALIDA RS DEL DISPLAY
mov W0,TRISC ; PORTC,13 SALIDA TEST LED DE TARJETA
;PUERTO F ;EXISTEN RF0 AL RF6
;********
clr LATF
mov #0b1111111111010100,W0 ;INICIALIZACION DEL PORTF ,
mov W0,TRISF ;PORTF,0 SALIDA ENABLE DEL DISPLAY
nop ;PORTF,1 SALIDA R/W DEL DISPLAY
nop
clr PORTF
CLR ODCF
;PUERTO F ;EXISTEN RF0 AL RF6
;/////////////////////////////////
;******** ;RF2 SOLO COMUNICACION U1RX, ENTRADA
;RF3 SOLO COMUNICACION U1TX, SALIDA TX
;RF4 SOLO COMUNICACION U1RX,ENTRADA RX
;RF5 SOLO COMUNICACION U1TX, SALIDA TX
;PUERTO G ;EXISTEN SOLO RG2,RG3, RG6, RG7, RG8 Y RG9
;////////////////////////////////
;********
clr LATG
clr PORTG
mov #0b0000000001000000,W0 ;INICIALIZACION DEL PORTG
mov W0,TRISG ;RG2 Y 3 SALIDAS A TECLADO
nop ;RG7 Y 8 SALIDAS A TECLADO
nop ;RG6 ENTRADA SENSOR CONTADOR DE VUELTAS
;SALIDA OPEN DRAIN, COLECTOR ABIERTO DEL PORTG
;PARA PORTG2,3,7 Y 8
CLR ODCG
mov #0b0000000110001100,W0
mov W0, ODCG
nop
nop
nop
clr PORTG
CLR LATG
;****************************************************
]
Será la velocidad por favor díganme si el U1BRG está bien calculado.
Hola KillerJc, muchas gracias por tu ayuda.
Atento a lo que me dijiste, no tuve buenos resultados con la recepción de los byte asi que
Ahora estoy probando la transmisión con un programa que me muestra los caracteres recibidos en el PC a ver si esto me ayuda a resolver el problema de la recepción después.
También tengo problemas con la transmisión ojalá puedas ayudar con lo que estuviese mal. Te adjunto el código de la configuración.
Preguntas para la transmisión
El bit IREN, U1MODE,#12 lo dejo en cero para no usar el modo IRDA, está bien?
EL bit UTXINV , U1STA,#14 tambien lo dejo en cero por lo mismo, esta bien?
Esta configuración transmite y no se por que me entrega los bytes diferentes
Al enviar haciendo el loop, mov #0b0000000001000001,w5
recibo en el Real term
00000000 00001100 11111100 00001100 11111100 00001100 11111100 00001100
11111100 00001100 11111100 00001100 11111100
Al enviar >> mov.b #0xA,w5
recibe
00000000 01110000 00000000 01110000 00000000 01110000 00000000 01110000
00000000 01110000 00000000 01110000 00000000
al enviar , mov #0x41,w5
recibe
00000000 00001100 11111100 00001100 11111100 00001100 11111100 00001100
11111100 00001100 11111100 00001100 11111100
No logro encontrar si recibe algun complemento u otra cosa
M Gracias de nuevo
[code***CONFIGURACION***
ON_TXRX1:
mov #64,W0 ;CARGO BAUD RATE 9600 BAUD CON BRGH=0
mov W0,U1BRG
bclr U1MODE,#3 ;bit 3, =0 BRGH HIGH BAUD RATE ENABLE BIT
bclr U1MODE,#0 ;bit 0, =0 UNO O DOS STOP BITS, SOLO UNO =0
bclr U1MODE,#1 ;bit 1, =0 8 BIT DE DATA SIN PARIDAD
bclr U1MODE,#2 ;bit 2, =0 8 BIT DE DATA SIN PARIDAD
bclr U1MODE,#3 ;bit 3, =0 BRGH HIGH BAUD RATE ENABLE BIT
bclr U1MODE,#4 ;bit 4, =0 RECIEVED POLARITY INVERSION BIT
bclr U1MODE,#5 ;bit 5, =0 AUTO BAUD RATE DESHABILITADO
bclr U1MODE,#6 ;bit 6, =0 LOPBACK DESHABILITADO
bclr U1MODE,#7 ;bit 7, =0 WAKE UP DESHABILITADO
bclr U1MODE,#8 ;bit 8, =0 U1RTS Y U1CTS DESHABILITADOS
bclr U1MODE,#9 ;bit 9, =0 U1RTS Y U1CTS DESHABILITADOS
bclr U1MODE,#10 ;bit 10, no implementado
bclr U1MODE,#11 ;bit 11=0, UxRTS EN SIMPLEX MODE
bclr U1MODE,#12 ;bit 12=0, IREN, iRda DEHABILITADO = 0
bclr U1MODE,#13 ;bit 13=0, CONTINUA OPERANDO EN en IDLE MODE
bclr U1MODE,#14 ;bit 14, no implementad
bclr U1MODE,#15 ;bit 15=1, HABILITA LA UART
;VER PAG 216 UART TX STATUS AND CONTROL REGISTER
bclr U1STA,#0 ;bit 0, =0 AVISO DE RECEPCION DE UN CARACTER EN EL BUFFER DE ENTRADA
bclr U1STA,#1 ;bit 1, =0 BUFFER DE RECEPCIÓN LLENO
bclr U1STA,#2 ;bit 2, =0 BIT DE ERROR DE FRAMING
bclr U1STA,#3 ;bit 3, =0 BIT DE ERROR DE PARIDAD
bclr U1STA,#4 ;bit 4, =0 RECIEVED IDLE BIT
bclr U1STA,#5 ;bit 5, =0 ADRESS DETECT MODE
bclr U1STA,#6 ;bit 6, =0 RECEIVED INTERRUPT MODE SELECTION BIT
bclr U1STA,#7 ;bit 7, =0 RECEIVED INTERRUPT MODE SELECTION BIT
bclr U1STA,#8 ;bit 8, =1 TRANSMISIÓN EN PROCESO=0 O TERMINADA =1 (DE LECTURA)
bclr U1STA,#9 ;bit 9, =1 BUFFER DE TX LLENO = 1 (DE LECTURA)
bclr U1STA,#10 ;bit 10=1 TRANSMIT ENABLE BIT (se habilita despues)
bclr U1STA,#11 ;bit 11=0 sin BREAK BIT
bclr U1STA,#12 ;bit 12=0, NC
bclr U1STA,#13 ;bit 13=0, SIN INTERRUPC CUANDO SE TRANSMITE UN CHAR
bclr U1STA,#14 ;bit 14=0 UTXINV. IRDA
bclr U1STA,#15 ;bit 15=1, CON/SIN INTERRUPC CUANDO SE TRANSMITE UN CHAR
bclr IEC0,#12 ;BIT U1TXIE, DESHABILITA INTERRUPCIÓN POR TRANSMISION DE
;CARACTER DE LA UART1, pág 99
bclr IEC0,#11 ;BIT U1RXIE, DESHABILITA INTERRUPCIÓN POR RECEPCION DE
;CARACTER DE LA UART1, pág 99
bclr U1MODE,#15 ;BORRA BUFFER
bset U1MODE,#15
bset U1MODE,#15 ;bit 15=1, HABILITA LA UART
bset U1STA,#10 ;bit 10=1 TRANSMIT ENABLE BIT (se habilita)
call TPO_RET_T23_6 ;retardo
call RET_T23_GEN
RETURN
**********LOOP DE TRANSMISION
MANDA_A:
mov #65,W5 ; L
; mov #0b0000000001000001,w5
call TPO_RET_T23_6 ;RETARDO
call RET_T23_GEN
DISPON:
btsc U1STA,#9 ;BUFFER DISPONIBLE??
BRA DISPON
call TPO_RET_T23_6 ; RETARDO
call RET_T23_GEN
CALL TX_FIN
call TPO_RET_T23_6
call RET_T23_GEN
BRA MANDA_A
TX_FIN:
mov w5,U1TXREG
LP_TXFIN:
btss U1STA,#8 ;TRANSMISIÓN TERMINADA ?? =1 => terminada (DE LECTURA)
BRA LP_TXFIN
RETURN
]