Buenas,
He probado todo lo que hay en los grupos y webs y el puerto serie me sigue sin ir.
Primeros datos: pic: 16f876 compilador C: sdcc (2.5.0) gputils: 0.13.3-1 configuraci=F3n deseada: 9600,8,N,1 reloj: 20Mhz
C=F3digo del PIC (16f876):
En C:
#include "p16f876.h"
void main() { SPBRG =3D 129; BRGH =3D 1; SYNC =3D 0; SPEN =3D 1; TXIE =3D 0; TXEN =3D 1; RCIE =3D 1; CREN =3D 1;
GIE =3D 0; PEIE =3D 0;
TRISC =3D 0x80; /* 1000 0000 */
for(;;) { while(!TXIF); TXREG =3D 'A'; } }
En ensamblador (por si el SDCC no chuta bien; y el c=F3digo siguiente est=E1 le=EDdo del PIC y desensamblado):
000000: 0000 nop 000001: 2804 goto 0x4 000002: 3fff addlw 0xff 000003: 3fff addlw 0xff 000004: 118a bcf 0xa, 0x3 000005: 120a bcf 0xa, 0x4 000006: 2807 goto 0x7 000007: 3081 movlw 0x81 000008: 1683 bsf 0x3, 0x5 000009: 1303 bcf 0x3, 0x6 00000a: 0099 movwf 0x19 00000b: 1518 bsf 0x18, 0x2 00000c: 1218 bcf 0x18, 0x4 00000d: 1283 bcf 0x3, 0x5 00000e: 1798 bsf 0x18, 0x7 00000f: 1683 bsf 0x3, 0x5 000010: 120c bcf 0xc, 0x4 000011: 1698 bsf 0x18, 0x5 000012: 168c bsf 0xc, 0x5 000013: 1283 bcf 0x3, 0x5 000014: 1618 bsf 0x18, 0x4 000015: 138b bcf 0xb, 0x7 000016: 130b bcf 0xb, 0x6 000017: 3080 movlw 0x80 000018: 1683 bsf 0x3, 0x5 000019: 0087 movwf 0x7 00001a: 1283 bcf 0x3, 0x5 00001b: 1e0c btfss 0xc, 0x4 00001c: 281a goto 0x1a 00001d: 3041 movlw 0x41 00001e: 0099 movwf 0x19 00001f: 281a goto 0x1a 000020: 0008 returnY si usamos alg=FAn que otro mnemot=E9cnico:
NOP GOTO init init: PAGESEL 0 GOTO main
main: MOVLW 0x81 BANKSEL 1 MOVWF SPBRG ; 0x19 BSF TXSTA, BRGH ; 0x18, 0x2 BCF TXSTA, SYNC ; 0x18, 0x4 BANKSEL 0 BSF RCSTA, RX9 ; 0x18, 0x7 BANKSEL 1 BCF PIE1, TXIE ; 0xC, 0x4 BSF TXSTA, TXEN ; 0x18, 0x5 BSF PIE1, RCIE ; 0xC, 0x5 BANKSEL 0 BSF RCSTA, CREN ; 0x18, 0x4 BCF INTCON, GIE ; 0xB, 0x7 BCF INTCON, PEIE ; 0xB, 0x6 MOVLW 0x80 BANKSEL 1 MOVWF TRISC ; 0x7 bucle: BANKSEL 0 BTFSS PIR1, TXIF ; 0xC, 0x4 GOTO bucle MOVLW 0x41 MOVWF TXREG ; 0x19 GOTO bucle RETURN
Las conexiones que tengo: Del pin 17 del 16f876 (RC6/TX/CK) al pin 10 del Max232. Del pin 18 del 16f876 (RC7/RX/DT) al pin 9 del Max232. Del pin 7 del Max232 al pin 2 del conector del RS232. Del pin 8 del Max232 al pin 3 del conector del RS232. El pin 5 del conector del RS232 a tierra y los dem=E1s al aire.
He probado con un cable cruzado (nul modem) y con uno plano (usando un conversor hembra-hembra).
Para leer del puerto serie uso GtkTerm, un clon del Hyperterminal del windows, pero para gnome. Si, funciona bien, que desde otro ordenador (y desde el otro puerto serie) va muy bien.
He probado dos pics distintos y dos max232 distintos.
=BFqu=E9 hago mal que me estoy volviendo loco?
--=20 Helio Tejedor