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

📄 main.c

📁 这是我从朋友那搞到的pic学习资料
💻 C
字号:
/* ****************************************************************
** 功能描述: 串行通讯程序,单片机收到一个数据X后,向发送方返送X,X+1,X+2,X+3。每次只能发一个数据,延时一定时间后才能发下一个数据。不能向单片机同时发一串数据(连续发送)。若要实现一串数据的处理,可用数据存储接收数据再发送。
*************************************************************** */
#include	"pic18.h"		/* 所有PIC18系列的头文件 */
unsigned	char	recdata;	//接收数据寄存器
unsigned	i,No;				// 定义循环用变量
unsigned	char	SciReceiveFlag=0;	/* =1表示接收到新数据,=0表示未接收到新数据 */

/* ****************************************************************
** 函 数 名: initial()
** 功能描述: 系统初始化子程序,放在程序首部
*************************************************************** */
void	initial()
{
	INTCON=0x00;			/* bit7-bit0:关总中断 */
	ADCON1=0X07;			/* 设置数字输入输出口 */
	PIE1=0;					/* PIE1 的中断不使能 */			
	PIE2=0;					/* PIE2 的中断不使能 */	
	PIE3=0;					/* PIE3 的中断不使能 */	
}

/* ****************************************************************
** 函 数 名: sciinitial()
** 功能描述: 232串行通讯初始化子程序,设置低优先级中断接收,使能232收和发
*************************************************************** */
void	sciinitial()
{
	TXSTA=0x04;			// 选择异步高速方式传输8位数据
	RCSTA=0x80;			// 允许串行口工作使能
	TRISC=TRISC|0X80;	// PIC18F458:将RC7(RX)设置为输入方式
	TRISC=TRISC&0Xbf;	// RC6(TX)设置为输出
	SPBRG=25;			// 4M晶振时波特率为25
	PIR1=0x00;			// 清中断标志
	PIE1=PIE1|0x20;		/* 允许串行通讯接口接收中断使能 */
	RCIP=0;				// 设置SCI接收中断为低优先级中断 
	CREN=1;				// 允许串口接收数据
	TXEN=1;				// 允许串口发送数据
}

/* ****************************************************************
** 函 数 名: interrupt	low_priority	LOW_ISR()
** 功能描述: 低优先级中断子程序:RS232接收中断
*************************************************************** */
void	interrupt low_priority	LOW_ISR()
{
	if(RCIF==1)					// RS232接收中断
	{
		RCIF=0;					// 清接收中断标志
		recdata=RCREG;			// 接收数据并存储
		SciReceiveFlag=1;		// 置接收到232数据标志
	}
}

main()					
{
	initial();				// 系统初始化
	sciinitial();			// 串行通讯初始化子程序
	IPEN=1;					// 使能中断高低优先级
	INTCON=INTCON|0xc0;		// 开总中断、开外围接口中断
	while(1)
	{
		if(1==SciReceiveFlag)	/* 是否接收到通信数据 */
		{
			SciReceiveFlag=0;	/* 清接收到通信数据标志 */
			No=0;				/* 发送数据个数清0 */
			for(i=0;i<4;i++)
			{
				TXREG=recdata++;	/* 发送数据recdata,recdata+1,…,recdata+3 */
				No++;				/* 返送数据个数加1 */
				while(1)			/* 等待发送完成 */
				{
					if(TXIF==1)	break;	/* 发送完成,退出等待 */
				}		
			}
		}
	}
}

⌨️ 快捷键说明

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