|
|
View previous topic :: View next topic |
Author |
Message |
shooter Guest
|
16F88 restarts on incoming RS232 data |
Posted: Sun Feb 11, 2007 9:57 am |
|
|
Hello everybody,
my big problem is that everytime I send some data by the rs232 from my computer to the 16F88 he restarts. Any idea what could be the problem?
I find out if the PIC restart 'cause I light up for 500ms a green LED. Is the interrupt called a red LED schould light up, but nothing happend because the PIC restarts befor.
Code: | // Config
#include <16F88.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES PUT //Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //No reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOIESO //Internal External Switch Over mode disabled
#use delay(clock=8000000)
// Using hardware-USART
#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=8)
// Interrupt for incoming rs232 data
#int_RDA
RDA_isr()
{
output_high(PIN_A6); // red-LED to give my a sign interrupt called
putc(getc()+2); // return me a sign on Hyperterminal
}
void main() {
// Init
port_b_pullups(TRUE);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ|OSC_INTRC);
// Give ma a sign that PIC restarts
output_high(PIN_A0); // green-LED
delay_ms(500);
output_low(PIN_A0);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while (1) {
// give ma a sign that PIC is working and successfully programmed
output_low(PIN_A1);
delay_ms(500);
output_high(PIN_A1);
delay_ms(500);
output_low(PIN_A6);
}
} |
I'm slowly going to be crazy because I'm searching for the error for over 1 week now with no success.
I hope somebody has any idea that can fix this problem.
Thank you!
Benny |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Feb 11, 2007 3:05 pm |
|
|
I tested your program with PCM vs. 3.249, and I couldn't duplicate your
problem. The program never re-started. It fact, it didn't work with
regard to the RS-232 at all.
The reason is because of the "setup_spi(FALSE)" statement. In the
16F88, the Rx and the SDO pins are both on Pin B2. When you put
in the setup_spi(FALSE), the compiler generates this ASM code:
Quote: |
......... setup_spi(FALSE);
0077: BCF 14.5
0078: BSF 03.5 // Bank 1
0079: BCF 06.2 // TRISB.2 = output
007A: BSF 06.1 // TRISB.1 = input
007B: BCF 06.4 // TRISB.4 = output
007C: MOVLW 00
007D: BCF 03.5
007E: MOVWF 14
007F: BSF 03.5
0080: MOVWF 14 |
It's setting the Rx pin as an output. This prevents the UART from
receiving characters from your PC. The program can't work, until
you delete the setup_spi(FALSE) statement. The SPI module is
disabled on power-on reset anyway. You don't need that line of code. |
|
|
shooter Guest
|
|
Posted: Sun Feb 11, 2007 4:02 pm |
|
|
Hello
Big thank you. Great It works!
I should learn ASM
Thanks again, my problem is now solved!
Greetings, Benny! |
|
|
|
|
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
|