📄 test1.c
字号:
#include <pic16f946.h>
#include "rs485.h"
#include "delay.h"
#include "lcd_595.h"
/*----------------------------------------------------------------
USART interrupt service (for test)
----------------------------------------------------------------*/
void interrupt Usart(void)
{
if ( RCIF&&RCIE ) // If USART RX Interrupt
{
RF6 = !RF6;
cRs485RxChar = RCREG;
if ( !( RCSTA & 6 ) ) // Then if no errors
{ // Process received character
Rs485Decode(); // Decode RS485 network trafic
CREN = 1; // Enable receiver.
}
else
{
CREN = 0; // Clear any errors
cRs485RxChar = RCREG;
cRs485RxChar = RCREG;
CREN = 1; // Enable receiver.
}
RCIF = 0;
}
}
/*----------------------------------------------------------------
main function for test
----------------------------------------------------------------*/
#define Seperate_877A
//#define Master
void main(void)
{
unsigned char cReceiveOK;
unsigned char cTest[10];
unsigned char cPacketReady;
unsigned char cLenOfData;
unsigned char cCmd;
int cReceiveOkHigh,cReceiveOkLow;
int cSendTimeHigh1,cSendTimeLow1;
int cReceiveOkHigh1,cReceiveOkLow1;
int cReceiveOkHigh2,cReceiveOkLow2;
cReceiveOkHigh = 0;
cReceiveOkLow = 0;
cSendTimeHigh1 = 0;
cSendTimeLow1 = 0;
cReceiveOkHigh1 = 0;
cReceiveOkLow1 = 0;
Setup();
ConfigureComms();
lcd_initial();
lcd_clear();
GIE = 1;
#ifdef Master
while(1)
{
cOurAddr = 0x11;
Rs485Initialize( cOurAddr ); // the same as above
cTest[0] = 'l';
cTest[1] = 'o';
cTest[2] = 'v';
cTest[3] = 'e';
cTest[4] = 'u';
Rs485SendPacket( SENSOR_GET_DATA, 5, &cTest[0] );
RF7 = !RF7;
cSendTimeLow1++;
if(cSendTimeLow1==10000)
{
cSendTimeLow1 = 0;
cSendTimeHigh1++;
}
//lcd_gotoxy(0,0);
//lcd_putsf(a);
lcd_gotoxy(0,0);
lcd_dispdata(cSendTimeHigh1);
lcd_gotoxy(0,1);
lcd_dispdata(cSendTimeLow1);
DelayMs(80);
//lcd_gotoxy(5,0);
//lcd_putsf(b);
lcd_gotoxy(5,0);
lcd_dispdata(cReceiveOkHigh1);
lcd_gotoxy(5,1);
lcd_dispdata(cReceiveOkLow1);
cPacketReady = Rs485Process();
if ( cPacketReady )
{
Rs485GetPacket( &cCmd, &cLenOfData, &cTest[0] );
if ( cCmd==0xbb )
{
cReceiveOkLow1++;
if(cReceiveOkLow1==10000)
{
cReceiveOkHigh1++;
cReceiveOkLow1 = 0;
}
}
}
cCmd = 0x00;
DelayMs(20);
cOurAddr = 0x10; //send to another addr
Rs485Initialize( cOurAddr ); // the same as above
cTest[0] = 'g';
cTest[1] = 'o';
cTest[2] = 'o';
cTest[3] = 'd';
cTest[4] = 'p';
Rs485SendPacket( SENSOR_GET_DATA, 5, &cTest[0] );
DelayMs(80);
cPacketReady = Rs485Process();
if ( cPacketReady )
{
Rs485GetPacket( &cCmd, &cLenOfData, &cTest[0] );
if ( cCmd==0xaa )
{
cReceiveOkLow++;
if(cReceiveOkLow==10000)
{
cReceiveOkHigh++;
cReceiveOkLow = 0;
}
}
}
lcd_gotoxy(10,0);
lcd_dispdata(cReceiveOkHigh);
lcd_gotoxy(10,1);
lcd_dispdata(cReceiveOkLow);
cCmd = 0x00;
}
#endif
#ifdef Seperate_877A //for seperate
cOurAddr = 0x10;
Rs485Initialize( cOurAddr ); // init the addr
while(1)
{
cPacketReady = Rs485Process(); // process and check if received valid message
if ( cPacketReady )
{
lcd_gotoxy(0,0);
lcd_dispdata(cReceiveOkHigh);
lcd_gotoxy(0,1);
lcd_dispdata(cReceiveOkLow);
cReceiveOkLow++;
if(cReceiveOkLow==10000)
{
cReceiveOkLow = 0;
cReceiveOkHigh++;
}
Rs485GetPacket( &cCmd, &cLenOfData, &cTest[0] );// get it if crc is correct
DelayMs(2); // send get ok command to master
Rs485SendPacket(0xbb, 0, &cTest[0] );
}
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -