baby_1
Advanced Member level 1
Hello
here is my program
when no data received it works fine and do counting.but when a data receive it send back ~ character but doesn't show anything on the lcds.(it seems it disable lcds when a interrupts occur)
i remove
i=i+1;
cls();
sprintf(i1,"%d",i);
lcdprint(i1);
but it always show me the IDLE while data is receiving......instead of "Connected to PC"
what is my fault?
here is my program
Code:
#include <p18f452.h>
#include <stdio.h>
#include <stdlib.h>
#include "LCD.h"
#include "delays.h"
void sendusart(unsigned char datas[17]);
void sendchar(unsigned char data);
void cls(void);
void xcl();
unsigned int meter(unsigned int me,unsigned char states);
unsigned int zav(unsigned int me,unsigned char states);
#pragma config OSC=HSPLL
#pragma config DEBUG=OFF
#pragma config WDT=OFF
#pragma config BOR=OFF
#pragma config LVP=OFF
#pragma config PWRT=ON
#pragma interrupt SerialR
void SerialR(void)
{
if(PIR1bits.RCIF==1)
{
xcl();
}
}
#pragma code Mans=0x0008
void Mans(void)
{
_asm
GOTO SerialR
_endasm
}
#pragma code
//////////////////////////Define
#define in1 PORTAbits.RA0
#define in2 PORTAbits.RA1
#define in3 PORTAbits.RA2
#define d1 PORTAbits.RA3
#define d2 PORTAbits.RA5
#define d3 PORTEbits.RE0
#define d4 PORTEbits.RE1
#define d5 PORTEbits.RE2
#define d6 PORTCbits.RC3
//////////////////////////Variable
unsigned char xs;
unsigned char i1[17];
/////////////////////////////
void main(void)
{
unsigned int i;
ADCON1=6;
/////timers
TRISAbits.RA0=1;
TRISAbits.RA1=1;
TRISAbits.RA2=1;
TRISAbits.RA3=1;
TRISAbits.RA4=1;
TRISCbits.RC0=1;
///// Outputs
TRISB=0;
TRISAbits.RA3=0;
TRISAbits.RA5=0;
TRISEbits.RE0=0;
TRISEbits.RE1=0;
TRISEbits.RE2=0;
TRISCbits.RC3=0;
////////////////////
////////////////////
////////////////////
TXSTA=0x20;
SPBRG=25;
TXSTAbits.TXEN=1;
RCSTA=0x90;
INTCONbits.GIE=1;
INTCONbits.PEIE=1;
PIE1bits.RCIE=1;
// flags=0;
////////////////////
////////////////////
////////////////////
d1=0;
d2=0;
d3=0;
d4=0;
d5=0;
d6=0;
lcdinit();
i=0;
xs=0;
cls();
sprintf(i1,"%S"," IDLES");
lcdprint(i1);
//////////////////////////
while(1)
{
i=i+1;
cls();
sprintf(i1,"%d",i);
lcdprint(i1);
d1=~d1;
Delay10KTCYx(1000);
}
}
when no data received it works fine and do counting.but when a data receive it send back ~ character but doesn't show anything on the lcds.(it seems it disable lcds when a interrupts occur)
i remove
i=i+1;
cls();
sprintf(i1,"%d",i);
lcdprint(i1);
but it always show me the IDLE while data is receiving......instead of "Connected to PC"
what is my fault?