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

📄 txrx.c

📁 单片机间的通讯,按键操作,及PROTUS软件仿真
💻 C
字号:
#include	<pic.h>
/*该程序实现单片机双机异步通信功能,该程序是发送部分*/
unsigned	char	tran[8];		/*定义一个数组存储发送数据*/
unsigned	char	k,data;	/*定义通用寄存器*/
const  char	table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
/*不带小数点的显示段码表*/
/*spi显示初始化子程序*/
void		SPIINIT()
{
	PIR1=0;
	SSPCON=0x30;	
	SSPSTAT=0xC0;
/*设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送,与"74HC595,当其
*SCLK从低到高跳变时,串行输入寄存器"的特点相对应*/
	TRISC=0xD7;			/*SDO引脚为输出,SCK引脚为输出*/
	TRISA5=0;				/*RA5引脚设置为输出,以输出显示锁存信号*/
}
/*给数组赋初值子程序 */
void		fuzhi()
{
	for(k=0;k<8;k++)	{
		tran[k]=k+3;
	}
}
/*SCI部件初始化子程序*/
void		sciint()
{
	SPBRG=0X19;			/*将传输的波特率设为约9 600位/秒*/
	TXSTA=0X04;			/*选择异步高速方式传输8位数据*/
	RCSTA=0X80;			/*允许同步串行口工作*/
	TRISC6=1;
	TRISC7=1;				/*将RC6、RC7设置为输入方式,对外部呈高阻状态*/
}	
/*SPI传输数据子程序*/
void  	SPILED(data)
{
	SSPBUF=data;			/*启动发送*/
	do	{
	}while(SSPIF==0);
	SSPIF=0;
}
/*显示子程序,显示8位数*/
void		display()
{
	RA5=0;					/*准备锁存*/
	for(k=0;k<8;k++)	{
		data=tran[k];
		data=table[data];		/*查得显示的段码*/
		SPILED(data);		/*发送显示段码*/
	}
	RA5=1;					/*最后给一个锁存信号,代表显示任务完成*/ 	
}			
/*主程序*/
main()
{
	SPIINIT();
	fuzhi();					/*给数组赋初值*/
	sciint();					/*SCI部件初始化*/
	di();					/*中断禁止*/
	TXEN=1;				/*发送允许*/
	CREN=1;				/*接收数据允许*/
   	for(k=0;k<8;k++){	
		TXREG=tran[k];		/*发出一个字符*/
   		while(1){
			if(TXIF==1) break;
	}					/*等待写入完成*/
while(1){
			if(RCIF==1)	break;/*若收到响应字节,则终止等待*/
		}
		RCREG=RCREG;	/*读响应字节,清RCIF*/	
     }	
	display();				/*显示发送的数据*/
while(1){
	}
}


 单片机PIC2编程(接收部分)
#include	<pic.h>
/*该程序实现单片机双机异步通信功能,该程序是接收部分,并把接收的数据显示在8
*个LED上*/
unsigned	  char		rece[8];/*定义一个数组存储接收数据*/
unsigned	  char	   k,data;/*定义通用寄存器*/
const 	  char		table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff};
/*不带小数点的显示段码表*/
/*spi显示初始化子程序*/
void		SPIINIT()
{
;详细语句见发送程序
}
/*SCI部件初始化子程序*/
void		sciint()
{
	SPBRG=0X19;			/*波特率设置与PIC1相同,为约9 600位/秒*/
	TXSTA=0X04;			/*异步高速传输*/
	RCSTA=0X80;			/*串行口工作使能*/
	TRISC6=1;
	TRISC7=1;				/*将RC6、RC7设置为输入方式,对外部呈高阻状态*/
}
/*SPI传送数据子程序*/
void  	SPILED(data)
{
;详细语句与见发送程序
}
/*显示子程序,显示4位数*/
void	display()
{
	RA5=0;					/*准备锁存*/
	for(k=0;k<8;k++){
		data=rece[k];
		data=table[data];		/*查得显示的段码*/
		SPILED(data);		/*发送显示段码*/
	}
	RA5=1;					/*最后给一个锁存信号,代表显示任务完成*/ 	
}
/*主程序*/
main()
{
	SPIINIT();				/*spi显示初始化*/
	sciint();					/*SCI部件初始化*/
	di();					/*中断禁止*/
	CREN=1;				/*接收允许*/
	TXEN=1;				/*发送允许*/
for(k=0;k<8;k++){
while(1){
			if(RCIF==1)	break;
}					/*等待接收数据*/
		rece[k]=RCREG;		/*读取接收数据,同时清掉RCIF*/
		TXREG=rece[k];		/*发送接收到的数据*/
while(1){
			if(TXIF==1)	break;
}					/*等待写入完成*/
}
	display();				/*显示接收的数据*/
while(1){
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -