📄 guest.c
字号:
#include <pic.h>
#include "lcd_595.h"
#include "delay.h"
#define RC_DIR TRISB0
#define TX_DIR TRISD6
#define RC_DATA RB0
#define TX_DATA RD6
#define TIMERCONST 0x12
unsigned char RC_BUF;
unsigned char TX_BUF;
unsigned char TX_FLAG;
unsigned char RC_FLAG;
unsigned char RC_REG;
unsigned char INT_FLAG;
unsigned char Data;
unsigned char BitCounter;
unsigned char TmrCounter;
//unsigned char data1[] = {"Tx:"};
//unsigned char data2[] = {"Rc:"};
bit PARITY;
void SingleBusRc(void);
void Delay(void)
{
unsigned char i;
for(i=8;--i;)
{
DelayMs(250);
}
}
void set_port(void)
{
ADCON1 = 0x06;
PSPMODE = 0;
}
bit EvenParity(unsigned char data)
{
#asm
swapf ?a_EvenParity+0,w
xorwf ?a_EvenParity+0,f
rrf ?a_EvenParity+0,w
xorwf ?a_EvenParity+0,f
btfsc ?a_EvenParity+0,2
incf ?a_EvenParity+0,f
#endasm
if (data&0x01)
return 1;
else
return 0;
}
void interrupt ISQ(void)
{
if(INTE && INTF)
{
T0IF = 0;
TmrCounter = 3;
TMR0 = TIMERCONST;
// RC7 = !RC7;
// RC2 = 1;
INT_FLAG = 1;
RC_BUF = 0;
INTE = 0;
}
if(T0IF)
{
T0IF = 0;
--TmrCounter;
if(TmrCounter==0)
{
if(INT_FLAG)
{
--BitCounter;
if(BitCounter==0)
{ RC7 = !RC7;
if(RC_DATA == 1)
{
RC_REG = RC_BUF;
RC_FLAG = 1;
// RC2 = 0;
}
BitCounter = 10;
INT_FLAG = 0;
INTE = 1;
INTF = 0;
RC7 = 1;
}
else
{
if(BitCounter==1)
{ PARITY = RC_DATA;}
else
{ RC_BUF |= ((RC_DATA & 0x01) << (9-BitCounter)); }
RC7 = !RC7;
}
}
TX_FLAG = 1;
TmrCounter = 2;
}
TMR0 = TIMERCONST;
}
}
void SingleBusTx(unsigned char data)
{
TX_BUF = data;
INTE = 0;
TX_DATA = 0;
TX_FLAG = 0;
TmrCounter = 2;
TMR0 = TIMERCONST;
while(!TX_FLAG);
TX_FLAG = 0;
for(BitCounter=10;--BitCounter;)
{
if(BitCounter==1)
TX_DATA = EvenParity(data);
else
TX_DATA = TX_BUF & 0x01;
TmrCounter = 2;
TMR0 = TIMERCONST;
while(!TX_FLAG);
TX_FLAG = 0;
TX_BUF >>= 1;
}
TX_DATA = 1;
BitCounter = 10;
INTE = 1;
}
void main(void)
{
GIE = 1;
T0IE = 1;
INTE = 1;
OPTION = 0x00;
Data = 0x55;
BitCounter = 10;
TmrCounter = 2;
TRISC6 = 0;
TRISC2 = 0;
TRISC7 = 0;
RC7 = 1;
RC_DIR = 1;
TX_DIR = 0;
RC2 = 1;
TX_DATA = 1;
RC_DATA = 1;
RC_FLAG = 0;
set_port();
lcd_initial();
lcd_clear();
lcd_gotoxy(0,0);
lcd_putstr("Tx:");
lcd_gotoxy(0,1);
lcd_putstr("Rc:");
while(1)
{
if(RC_FLAG)
{
RC_FLAG = 0 ;
if(PARITY==EvenParity(RC_REG))
{
lcd_gotoxy(3,1);
lcd_disphex(RC_REG);
// lcd_gotoxy(6,1);
// lcd_disphex(PARITY);
// lcd_gotoxy(9,1);
// lcd_disphex(EvenParity(RC_REG));
Data = RC_REG+1;
//DelayMs(100);
SingleBusTx(Data);
lcd_gotoxy(3,0);
lcd_disphex(Data);
}
}
// ++Data;
// Delay();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -