TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: natalia_mouse en 28 de Abril de 2004, 20:16:00
-
Hola...
EStoy haciendo un proyecto donde tengo que mandar datos al pc por puerto serial... gracias a una serie de ejemplos que me encontre en el foro hice un programita para pic16f84... sin embargo aun no funciona...
Si alguien tiene un ejemplito sencillo donde se envie algo bajo estas caracteristicas (rs232) me lo podria enviar por favor???
para que yo pueda revisar mi codigo y así encontrar mi error...

Gracias
NATALIA
-
HOLA NATALIA:
Aqui te envio una rutina en assembler para transmitir y recibir datos por software desde un PIC al PC. Lo que tienes que hacer es cargar el registro: xmtreg con el dato que quieres enviar a la PC y luego llamar a asyxmt y listo. Esta configurado para enviar 8 bits de datos a 4800 baudios por el pin del puertoA que declares como salida (xmit). Espero te sirva. Saludos desde Peru.;====== HALF.GRP ==========================================================
;
asyrec bcf comflag,1
bcf comflag,0
movlw 09
movwf bitctr
asyrec1 btfsc porta,rec
goto asyrec1
call half
btfss porta,rec
goto asyrec3
bsf comflag,1
goto asyrecx
asyrec3 call full
decfsz bitctr,f
goto asyrec4
btfss porta,rec
bsf comflag,0
goto asyrecx
;
asyrec4 bsf status,c
btfss porta,rec
bcf status,c
rrf recreg,f
goto asyrec3
;
asyrecx retlw 0
;
;-------------------------------------------------------------------------
asyxmt bcf porta,xmit
call full
movlw 08
movwf bitctr
asyxmt1 rrf xmtreg,f
btfsc status,c
goto asyxmt2
bcf porta,xmit
goto asyxmt3
asyxmt2 bsf porta,xmit
;
asyxmt3 call full
decfsz bitctr,f
goto asyxmt1
;
bsf porta,xmit
call full
retlw 0
;---------------------------------------------------------------------------
vdly movf bcount,w
movwf cntrb
vdly0 movf acount,w
movwf cntra
vdly1 decfsz cntra,f
goto vdly1
decfsz cntrb,f
goto vdly0
retlw 0
;--------------------------------------------------------------------------
half movlw d"3"
movwf bcount
movlw d"20"
movwf acount
call vdly
retlw 0
;-------------------------------------------------------------------------
full movlw d"3"
movwf bcount
movlw d"43"
movwf acount
call vdly
retlw 0
-
RE: Tx serial[/b]
<
-
Veo que en mi anterior mensaje he metido mucha información y por eso no ha salido los datos que envié, bueno aqui va de nuevo algo mas comprimido.
Decía que la configuración anterior esta bien excepto la velocidad de la rutina, esta configurada a 2400 baudios. En el hiperterminal configurar de la siguente manera: 8 bits de datos, 1 bit de inicio, 1 bit de parada, sin paridad y 2400 baudios.
Esta rutina esta preparada para trabajar con un cristal de 4 MHZ, osea 1us por ciclo de instrucción.
Pero aqui les envío mas datos para manejar mejor dicha rutina.
Declarar los siguientes registros: bitctr, acount, bcount, comflag, cntra, cntrb, recreg y xmtreg. Declarar los siguientes bits: xmit(salida de datos al PC), dtr, rec (entrada de datos desde el PC).
Pero si quieren cambiar a otras velocidades , hacer los siguientes cambios en el modulo de retardo: vdly de la rutina mas arriba mostrado dentro de las subrutinas: half y full.
BAUDIOS SUBRUTINA half SUBRUTINA full
bcount acount bcount acount
110 13 231 13 115
300 13 81 13 41
600 12 44 6 44
1200 3 89 3 42
2400 3 43 3 20
4800 2 29 2 13
9600 1 27 1 11
19200 1 9 1 1
Espero que los amantes del diseño con microcontroladores aprecien estas notas y los apliquen a sus aplicaciones. Saludos desde Perú.
-
Estos editores no ayudan a visualizar bien lo que envié mas arriba, por espero que esto se vea mejor.
BAUDIOS******SUBRUTINA half******SUBRUTINA full
*************bcount**acount*****bcount**acount
***110*********13*****231********13****115
***300*********13******81********13*****41
***600*********12******44*********6*****44
**1200**********3******89*********3*****42
**2400**********3******43*********3*****20
**4800**********2******29*********2*****13
**9600**********1******27*********1*****11
*19200**********1*******9*********1******1
-
hola amigo, tambien soy de peru y en el tiempo q vengo aprendiendo aun no he utilizado estos rcursos de tx serial de los pics, podrias enviarme información alrespecto para poder hacer algunas pruebas de estos recursos?
Gracias por tu ayuda, saludos.
e-mail: jcotrinamatta@eresmas.com (espacio 30 mb)
-
HOLA JACMSUD: Dime exactamente que es lo que quieres hacer para ver si lo ponemos en este foro para beneficio de todos los que entran aqui. Saludos.
-
Aqui voy con mas notas, para los principiantes y los no principiantes que aun no saben manejar rutinas. Vamos a sacarle el maximo provecho a esta rutinita que por supuesto no es mia, pues la baje de la red. Incluir esta rutina dentro de vuestro código a partir de la dirección 0x005 (recomiendo usarla en todos los microcontroladores de la gama media). Pero como se darán cuenta esta rutina esta escrita todas en minusculas, por eso es necesario declarar todas las variables que aparecen en el. pero si quieren usar los include de MICROCHIP, poner en mayusculas todos los registros especiales. Lo excelente de esta rutina es que podemos usarla por cualquier pin del micro que nosotros deseemos, haciendole los cambios necesarios en el mismo. Les dejo ese reto. Tambien podemos utilizarlo como un include, por ejemplo como indica su nombre: half.grp y lo llaman desde su código fuente de la siguiente manera <include half.grp>.
-
Aqui tienen un ejemplito de aplicación. Disfrutenlo.
;--------------------------------------------------------------
;Programa que ilustra como realizar una transferencia de datos
;de tipo BCD y el resultado enviarlo en forma serial a una PC en
;formato ASCII usando el protocolo RS232
;--------------------------------------------------------------
list p=16f84
radix hex
;--------------------------------------------------------------
c equ 0
z equ 2
w equ 0
f equ 1
rp0 equ 5
;
;------------------------------------------------------------------------
pc equ 0x02
status equ 0x03
porta equ 0x05
portb equ 0x06
trisa equ 0x85
trisb equ 0x86
;
;-------------------------------------------------------------------------
chartr equ 0x0c
bitctr equ 0x0d
acount equ 0x0e
bcount equ 0x0f
comflag equ 0x10
cntra equ 0x11
cntrb equ 0x12
recreg equ 0x13
xmtreg equ 0x14
count equ 0x15
ctr equ 0x16
cont1 equ 0x17
cont2 equ 0x18
cont3 equ 0x19
cuatro equ 0x1b
optreg equ 0x81
;--------------------------------------------------------------------------
xmit equ 0x07
dtr equ 0x02
rec equ 0x03
;------------------------------------------------------------
org 0x000
goto inicio
;------------------------------------------------------------
; cabecera para iniciar el envio de dato
;------------------------------------------------------------
tabla1 addwf pc,f
retlw a" " ;ASCII " " a ser enviado
retlw a"E" ;ASCII "E" a ser enviado
retlw a"T" ;ASCII "T" a ser enviado
retlw a"E" ;ASCII "E" a ser enviado
retlw a"H" ;ASCII "H" a ser enviado
retlw a" " ;ASCII " " a ser enviado
retlw a"0" ;ASCII "0" a ser enviado
retlw a"0" ;ASCII "0" a ser enviado
retlw a"0" ;ASCII "0" a ser enviado
retlw a"0" ;ASCII "0" a ser enviado
retlw a"0" ;ASCII "0" a ser enviado
retlw 0x0D ;ASCII "$" a ser enviado
retlw a"E" ;ASCII "E" a ser enviado
retlw a"T" ;ASCII "T" a ser enviado
retlw a" " ;ASCII " " a ser enviado
retlw a"H" ;ASCII "H" a ser enviado
retlw a" " ;ASCII " " a ser enviado
retlw a" " ;ASCII " " a ser enviado
retlw a" " ;ASCII " " a ser enviado
retlw a"7" ;ASCII " " a ser enviado
retlw a"3" ;ASCII " " a ser enviado
retlw a"1" ;ASCII " " a ser enviado
;------------------------------------------------------------
; final y puntero a la izquierda
;------------------------------------------------------------
tabla2 addwf pc,f
retlw 0x0d ;puntero a la izquierda
; retlw 0x0a ;siguiente linea
;------------------------------------------------------------
; tabla de conversión de BCD a códigos ASCII
;------------------------------------------------------------
ASCII addwf pc,f ;Calcula desplazamiento sobre la tabla
retlw 0x30 ;Codigo ASCII del dígito 0
retlw 0x31 ;Codigo ASCII del dígito 1
retlw 0x32 ;Codigo ASCII del dígito 2
retlw 0x33 ;Codigo ASCII del dígito 3
retlw 0x34 ;Codigo ASCII del dígito 4
retlw 0x35 ;Codigo ASCII del dígito 5
retlw 0x36 ;Codigo ASCII del dígito 6
retlw 0x37 ;Codigo ASCII del dígito 7
retlw 0x38 ;Codigo ASCII del dígito 8
retlw 0x39 ;Codigo ASCII del dígito 9
;------------------------------------------------------------
; pausa de 1 segundo
;------------------------------------------------------------
UN_SEG
decfsz cont1,f
goto UN_SEG
decfsz cont2,f
goto UN_SEG
decfsz cont3,f
goto UN_SEG
movlw 5
movwf cont3
return
;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
inicio bsf status,rp0 ;banco1
movlw b"11111111" ;porta entrada/salida
movwf trisa
movlw 0x7f
movwf trisb
bcf status,rp0 ;banco0
bsf portb,xmit ;marcar la salida
clrf cont1 ;cargar contadores 1,2 y 3
clrf cont2
movlw 0x05
movwf cont3
; clrf cuatro
otro clrf ctr ;limpiar ctr
botar movf ctr,w ;inicializar ctr
call tabla1 ;traer el caracter de la tabla1
movwf xmtreg ;almacenar en este registro
call asyxmt ;tx al pc
incf ctr,f ;incrementar ctr
movf ctr,w ;llevarlo al registro de trabajo
sublw 0x16 ;ver si se envió toda la cabezera
btfss status,2
goto botar ;no
movf portb,w
call ASCII
movwf xmtreg
call asyxmt ;tx al pc
COMA movlw a"," ;Enviar coma
movwf xmtreg ; a la PC
call asyxmt ;tx al pc
final clrf ctr ;limpiar ctr
botar1 movf ctr,w ;inicializar ctr
call tabla2 ;traer el caracter de la tabla2
movwf xmtreg ;almacenar en este registro
call asyxmt ;tx al pc
incf ctr,f ;incrementar ctr
movf ctr,w ;llevarlo al registro de trabajo
sublw 0x01 ;ver si se envió la tabla2
btfss status,2
goto botar1 ;Aún no
call UN_SEG ;Esperar un segundo
goto otro ;Traer nuevo dato
;-------------------------------------------------------------------------
include half.grp
;------------------------------------------------------------
end
;------------------------------------------------------------