// filename Master.C Jonathan W. Valvano, April 17, 2000 // COP reset will be disabled by COPCTL=0; /* RS485 half-duplex multiport network Hardware: Adapt812 MC68HC812A4 SCI1 serial port RS-485 half-duplex network to other Adapt812s 6812 PS3/TXD1 connected to SP483 DI data in 6812 PS2/RXD1 connected to SP483 RO receive out 6812 PE6 connected to SP483 DE 1 enables transmission 6812 PE5 connected to SP483 RE 0 enables receiver SP483 A-A, B-B, ground-ground */ #include "HC12.h" #include "SCI0.H" #include "SCI1.H" char letter; int XMTerror; // OK(0), COLLISION(1) or TIMEOUT(2) int RCVerror; // OK(0), Bit3=OR, Bit2=NF, Bit1=FE, Bit0=PF void main(void){ SCI0Init(); SCI1Init(); COPCTL=0; // turn off COP XMTerror=0; SCI0OutString("Adapt812 RS485 Half-duplex demo 4/17/00 -JWV\n"); SCI0OutString("Type input to transmit\n"); while(1){ XMTerror=0; if(SCI0InStatus()){ // check if new input from PC PORTT^=0x40; // toggle bit 6 letter=SCI0In(); // data from PC keyboard XMTerror=SCI1Out(letter); // transmit on network to other 6812s } if(SCI1InStatus()){ // check if new input from network letter=SCI1In(&RCVerror); // data from network SCI0Out(letter); // display on destination PCs if(RCVerror&PF) SCI0OutString("\nParity error\n"); if(RCVerror&NF) SCI0OutString("\nNoise error\n"); if(RCVerror&FE) SCI0OutString("\nFraming error\n"); if(RCVerror&OR) SCI0OutString("\nOverrun error\n"); } if(XMTerror&TIMEOUT) SCI0OutString("\nTimeout\n"); if(XMTerror&COLLISION) SCI0OutString("\nCollision\n"); if(XMTerror&PARITYERROR) SCI0OutString("\nParity Error\n"); } } #include "SCI0.C" #include "SCI1.C" extern void _start(); /* entry point in crt12.s */ #pragma abs_address:0xfffe void (*reset_vectors[])() = { _start }; #pragma end_abs_address