CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

can i detect error for one wire error data

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
a
Guest







can i detect error for one wire error data
PostPosted: Wed Dec 22, 2004 11:13 am     Reply with quote

because i send data from board1 to board2 is data='0xa1' and board2 receive data='0xa0' and sometime receive 0xa1 and how can i check error.
And one question if data from board1 is send. if data is error. board1 or board2 is detect error. i think is board 2 is detected and send error to board1 . Is it right.

below is my source code of board1
===============================================================================
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)

#use rs232(baud=9600, float_high, ERRORS, parity=E,xmit=PIN_B0,rcv=PIN_B0,bits=8)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#bit ninth_bit = RS232_ERRORS.7
#bit collision = RS232_ERRORS.6
#bit intf = 11.1

void show_print(char xxdata);
void out_led(char char1);

#define RS PIN_C0
#define RW PIN_C1
#define EN PIN_C2

#define SE1 PIN_A1
#define SE2 PIN_A2
#define CARD_IN !input(PIN_B1)

.....
......
........ other part of program
........

#int_ext
void pbus_isr()
{
BYTE data;
Set_tris_b(0b00000001);

if(kbhit())
{
data=getc();

if(ninth_bit)
{
if(data==0xf2)
{
delay_cycles(1);
}
}
else
{
show_print(data);
wcharxy(2,1,data);
}
}
}

void pbus_write_ram(byte cha)
{
BYTE checksum,i;

retry:
disable_interrupts(GLOBAL);
collision=false;

ninth_bit=0;
putc(cha); if(collision) { goto error; } //0000 1101
out_led(2);

intf=false;
enable_interrupts(GLOBAL);
return;

error:
delay_ms(16);
enable_interrupts(GLOBAL);
goto retry;
}

#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,bits=8) // Jumpers: 8 to 11, 7 to 12

void show_print(char xxdata)
{
putc(xxdata);
}

#include <input.c>

void main()
{

BYTE to,i,value,cou,sendch;

int CIN;

printf("\r\nPress S to send.\r\n");

port_b_pullups(TRUE);
ext_int_edge( h_to_l );

Set_tris_a(0b000000);
Set_tris_b(0b00000001);

init_lcd();

while(1)
{
if(CARD_IN)
{
delay_ms(250);
IF(CIN==0)
{
OUTPUT_LOW(PIN_A5);
DELAY_MS(10);
OUTPUT_HIGH(PIN_A5);
CIN=1;
}
sendch='ก';
pbus_write_ram(sendch);
hex_to_lcd(1,1,sendch);
delay_ms(500);
pbus_write_ram('ข');
hex_to_lcd(1,1,'ข');
delay_ms(500);
pbus_write_ram('ฃ');
hex_to_lcd(1,1,'ฃ');
delay_ms(500);
pbus_write_ram('ฮ');
hex_to_lcd(1,1,'ฮ');
delay_ms(500);

output_high(PIN_A3);
enable_interrupts(global);
enable_interrupts(int_ext);
}
else
{
disable_interrupts(global);
disable_interrupts(int_ext);
out_led(0x02);
output_low(PIN_A3);
CIN=0;
}
}
}


below is my source code of board2
====================================
#include <16F876.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=3579545)

#use rs232(baud=9600, float_high, ERRORS ,parity=E,xmit=PIN_B7,rcv=PIN_B7,bits=8)

#bit ninth_bit = RS232_ERRORS.7
#bit collision = RS232_ERRORS.6
#bit intf = 11.1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define RW PIN_A0
#define RS PIN_A1
#define EN PIN_A2

#define LED0 PIN_A3
#define LED1 PIN_A4
byte cou;

.......
........
........ other part of program
......
.........

void pbus_write_ram(byte cha)
{
BYTE checksum,i;

retry:
disable_interrupts(GLOBAL);
collision=false;

ninth_bit=1;
out_led(1);
ninth_bit=0;
putc(cha); if(collision) { out_led(3); goto error; } //0000 1101
out_led(2);

intf=false;
enable_interrupts(GLOBAL);
return;

error:
delay_ms(16);
wcharxy(2,5,'E');
enable_interrupts(GLOBAL);
goto retry;
}

#int_RB
void checkserial(void)
{
byte data;

if(kbhit())
{
data=getc(); if(collision) { output_low(PIN_B7); wcharxy(2,3,'E'); }

if(ninth_bit)
{
if(data==0xf2)
{
delay_cycles(1);
}
}
else
{
hex_to_lcd(1,1,data);
}
}
}

#include <input.c>

void main() {
BYTE to,i,value;

port_b_pullups(TRUE);

init_lcd();

ext_int_edge( h_to_l );
enable_interrupts(global);
enable_interrupts(int_ext);
enable_interrupts(int_rb);
enable_interrupts(int_buscol);

while (TRUE)
{
delay_us(1);
}
}

=============

can i detect my error on one wire. please help me.
a
Guest







PostPosted: Wed Dec 22, 2004 11:46 am     Reply with quote

now i'm test it again.
send 0x15 from board 1 and show lcd on board1 it is show 15 by my function hex_to_lcd but in board is receive and show data on lcd too. it is receive 0x14 or sometime 0x12 but more time receive 0x15 but in my sourcecode if parity bit is not true it should show E in lcd but it's not
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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