|
|
View previous topic :: View next topic |
Author |
Message |
ralph79
Joined: 29 Aug 2007 Posts: 87
|
16F688 and 16f627A issues |
Posted: Wed Aug 29, 2007 8:59 am |
|
|
Hi,
I've been working with CCS compiler V4.0.038 and I have a very strange problem. I have basically the same code as you can you above for the 627A and for the 688. But with the 16F627 in the rs232 port I receive the same characters I send. But with the 688 the characters are all wrong. Does anybody know why is this happening?
Code for 627A
Code: |
#include <16F627A.h>
#fuses INTRC_IO, NOWDT, NOPROTECT, NOMCLR, NOBROWNOUT, NOCPD, PUT
#define max_buf_length 10
#use delay(clock=8000000)
#use rs232(baud=1200, parity=N, xmit=PIN_B2, rcv=PIN_B1, bits=8, errors)
int8 rcv_data[max_buf_length] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int8 rcv_pointer = 0;
int8 pos_eeprom = 0;
short int values_rcv = 0;
#int_RDA // rs232 receive data available
void RDA_isr(void)
{
int8 ch = 0;
ch = getchar();
rcv_data[rcv_pointer++] = ch; // store data
if (rcv_pointer == 10)
{
values_rcv = 1;
}
}
void main(void)
{
int8 i = 0;
port_b_pullups(TRUE);
set_tris_b(0x01); // PIN_B1 as input
setup_vref(FALSE);
disable_interrupts(INT_RDA);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while (1)
{
if (values_rcv == 1)
{
for (i = 0; i < rcv_pointer; i++)
{
write_eeprom(pos_eeprom++, rcv_data[i]);
rcv_data[i] = 0; // cleaning the buffer
}
pos_eeprom = pos_eeprom + 2;
values_rcv = 0; // reset variables
rcv_pointer = 0;
}
}
}
|
Code for 688
Code: |
#include <16F688.h>
#device *=16
#device adc=8
#fuses INTRC_IO, NOWDT, NOPROTECT, NOMCLR, NOBROWNOUT, NOCPD, PUT, NOIESO, NOFCMEN
#define max_buf_length 10
#use delay(clock=8000000)
#use rs232(baud=1200, parity=N, xmit=PIN_C4, rcv=PIN_C5, bits=8, errors)
int8 rcv_data[max_buf_length] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int8 rcv_pointer = 0;
int8 pos_eeprom = 0;
short int values_rcv = 0;
#int_RDA // rs232 receive data available
void RDA_isr(void)
{
int8 ch = 0;
ch = getchar();
rcv_data[rcv_pointer++] = ch; // store data
if (rcv_pointer == 10)
{
values_rcv = 1;
}
}
void main(void)
{
int8 i = 0;
port_a_pullups(TRUE);
set_tris_c(0x20); // PIN_C5 as input
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_comparator(NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ);
disable_interrupts(INT_RDA);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while (1)
{
if (values_rcv == 1)
{
for (i = 0; i < rcv_pointer; i++)
{
write_eeprom(pos_eeprom++, rcv_data[i]);
rcv_data[i] = 0; // cleaning the buffer
}
pos_eeprom = pos_eeprom + 2;
values_rcv = 0; // reset variables
rcv_pointer = 0;
}
}
}
|
Any help will be appreciate
Thanks in advance |
|
|
SET
Joined: 15 Nov 2005 Posts: 161 Location: Glasgow, UK
|
|
Posted: Thu Aug 30, 2007 9:04 am |
|
|
Quote: | Code: | set_tris_c(0x20); // PIN_C5 as input |
|
I'm guessing you tried this in case the compiler wasn't setting Rx as an input? Shouldn't be required..
Quote: | But with the 16F627 in the rs232 port I receive the same characters I send. But with the 688 the characters are all wrong. |
Are you missing some code? Your code puts the Rx'ed chars in EEPROM, so maybe the problem lies there? |
|
|
ralph79
Joined: 29 Aug 2007 Posts: 87
|
|
Posted: Thu Aug 30, 2007 9:21 am |
|
|
Hello,
Thanks for your response.
The set_tris_a was my ultimate test. I know that it shouldn't be required but ... I've already try everything.
This code is just a very small part of complex program.
I receive the chars from a RF receiver and, for a test, I save them to the eeprom. With this I want to know if there are any differences between the characters that I send and characters I receive during the time. With the 16F627A I don't have any trouble. But with the 688 I can't get it to work properly.
Is there any other initialization or function that I need to put in my code do get this work? Or in other words what I missed?
Thanks |
|
|
|
|
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
|