⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guest.c

📁 模拟串口通讯
💻 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 + -