TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Sebascl en 24 de Febrero de 2006, 13:25:00
-
hola me gustaria saver porke este codigo no funciona sera mi compilador mi pc mi windows ke sera, sere yo"???
codigo:
#include <16F84A.h>
#use delay(clock=20000000)
#fuses HS,NOWDT
#use fixed_io(A_OUTPUTS=PIN_A0,PIN_A2,PIN_A3,PIN_A4)
#use fixed_io(B_OUTPUTS=PIN_B1,PIN_B2,PIN_B3,PIN_B4,PIN_B5,PIN_B6,PIN_B7)
#use rs232(baud=19200, xmit=PIN_A2, rcv=PIN_A1, invert)
#byte port_a=5
#byte port_b=6
#priority EXT,RTCC
int1 j=0;
unsigned int8 i=0,guardatiempo=0;
#INT_EXT
void entra_senal()
{
if (j==0){
j=1;
guardatiempo=i;
i=0;
ext_int_edge(H_TO_L); // Cambio la detección del flanco, para que la proxima sea de bajada
}
else {
j=0;
guardatiempo=i;
i=0;
ext_int_edge(L_TO_H); // La próxima interrupción será de subida
}
}
#INT_RTCC
void tiempo()
{
set_rtcc(6);
i++;
if(i>=250) i=0;
}
void main()
{
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
enable_interrupts(INT_RTCC);
enable_interrupts(INT_EXT);
enable_interrupts(global);
ext_int_edge(L_TO_H);
set_rtcc(6);
set_tris_a(2);
set_tris_b(1);
port_a=0;
port_b=0;
while(true)
{
printf("hola"
;
}
}
compila sin problemas, el problema ke me da ke la informacion que recivo kon el pc es incoerente no yega la palabra "hola" dice puros caracteres raros.
saludos y gracias.
-
Pues es probable que la velocidad de transferencia (bauds) no sea la misma en la PC, pon ambos a 19200bps como dice tu programa.
-
esta bien configurado el hiperterminal del pc, incluso en el proteus me da los mismos caracteres que sera, este es el hex.
:1000000000308A007D280000831A0A288E00030E23
:100010008F000F2883128E00030E8F008F140A08A2
:1000200093008A0183138E0E040890000C0891003F
:100030000D08920083120B1E1F288B183B288B1E65
:1000400023280B194F281008840011088C0012086F
:100050008D0013088A000F0E830083120E0E8F1876
:10006000831609000A108A100A11820768346F3457
:100070006C346134003414184528141415089600A3
:100080009501831601134B2883121410150896004E
:1000900095018316011783128B108A1123280630CD
:1000A0008100950A1508F93C031C95010B118A1172
:1000B0002328E2306500051508308D00000000009F
:1000C00000008D1772288D13980C03180511031C5E
:1000D00005150D1772280D138D0B64280000000004
:1000E0000000051150308400840B742800000000CB
:1000F0008D1B63280D1B6B28AD2884011F308305E1
:10010000E230650005111410950196018C018C1DDB
:10011000912807308101813084000008C0390F38F0
:1001200080006400813084000008C0390C04800025
:100130008B160B168B17831601170630831281005E
:1001400002306500013066008501860197011708BD
:100150003220970A8C009800592804301702031D9A
:06016000A728A628630099
:02400E00FA3F77
:00000001FF
;PIC16F84A
por favor alguien pruebelo y me dice si le funciona.
saludos y gracias.
-
Parece ser que la interrupción del timer te está dislocando la comunicación serie.
He cambiado algunas cosillas y en proteus simula bien.
#use delay(clock=10000000) // El 16F84 creo que como máximo va a 10 MHz
#use rs232(baud=19200, xmit=PIN_A2, rcv=PIN_A1)
setup_counters(RTCC_INTERNAL,RTCC_DIV_8); // He subido el prescaler
Al no disponer el micro de una usart hardware,seguramente el timer te está interrumpiendo la comunicación.Podrías probar varias cosas:
- Aumentar el prescaler del timer
- Aumentar el baud rate de la comunicación serie
- Desactivar la interrupcion del timer cada vez que vayas a enviar algo vía serie.
No se me ocurre nada más.
Ve probando,suerte.
-
hola modulay, tenias razon era el timer en caso de tener que conservar una interrupcion cada 2us en rtcc seria posible que la informacion enviada por rs232 la realice bien con un pic con usart como el 16f628A y funciona bien pero lo que se encuentra dentro del main o en otras funciones no funciona por que sera???
-
¿A qué te refieres exactamente? ¿no funciona usando el 16f84 o el 16f628?