|
|
View previous topic :: View next topic |
Author |
Message |
wrocko
Joined: 21 Sep 2003 Posts: 5 Location: Saginaw, MI
|
RS-232 Woes |
Posted: Sun Sep 28, 2003 1:03 pm |
|
|
I am a bit new to PCW and MCUs in general. I am trying to get some RS-232 communication going between two chips (16f877), more or less as practice. Yet, I am encountering two main problems: my receiving code and my sending code . Alright, for my receiving code, I am having the program wait for a byte to arrive and then when one arrives, it just toggles an output so i know it worked. Yet, regardless of what I hook the RX pin to, my designated output pin toggles more or less at the speed of my main loop (very fast). The code is as follows:
#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7, ERRORS)
#include "C:\Documents and Settings\Admin Bin\My Documents\ECE497\Code\rs232test.h"
void main() {
int toggle = 0;
int i = 0;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(FALSE);
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_psp(PSP_DISABLED);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
set_tris_a(0x00);
output_a(0x00);
for(;;)
{
if(kbhit())
{
if(toggle==0){toggle = 1; output_low(PIN_A0);}
if(toggle==1){toggle = 0; output_high(PIN_A0);}
}
delay_us(10);
}
}
My only problem with transmitting is that I don't know how to tell if it is working at all since I can't receive it . Here is the sending code though:
#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#include "C:\Documents and Settings\Admin Bin\My Documents\ECE497\Code\controlsystem.h"
void main() {
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(FALSE);
setup_psp(PSP_DISABLED);
setup_counters(RTCC_INTERNAL,RTCC_DIV_2);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
set_tris_a(0x00);
output_a(0xAA);
// Main Loop
for(;;)
{
putc("a");
delay_ms(10);
putc("b");
delay_ms(10);
putc("c");
delay_ms(10);
}
}
Any help would be greatly appreciated.
Thanks _________________ - - - - -
-- Wrocko --
- - - - - |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Sep 28, 2003 2:13 pm |
|
|
// Main Loop
for(;;)
{
putc("a");
delay_ms(10);
putc("b");
delay_ms(10);
putc("c");
delay_ms(10);
}
I wonder what version of the compiler you're using ?
Because, with a late version of the compiler (PCM vs. 3.176),
it gives the error: "A numeric expression must appear here",
when you use a quoted string with putc().
So as an experiment, I compiled it with PCM vs. 2.734.
Result: No errors, but no code produced for those lines, at all.
So, I conclude that you're using an early version of the compiler.
You need to change the double quotes to be single quotes.
Like this:
putc('a');
putc('b');
putc('c'); |
|
|
wrocko
Joined: 21 Sep 2003 Posts: 5 Location: Saginaw, MI
|
|
Posted: Sun Sep 28, 2003 8:51 pm |
|
|
Thanks, that did the trick for the transmitter. I solved my own problems on the receiver. I wasn't emptying the characters that came with getc() so the loop kept going into the toggle area. The toggle was messed up too but that is just icing on the cake. Im all set now, thanks again. _________________ - - - - -
-- Wrocko --
- - - - - |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|