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

📄 main.c

📁 这是我从朋友那搞到的pic学习资料
💻 C
字号:
/* ****************************************************************
** 功能描述: CCP1模块输出PWM,并由串口通信数据data_232的值改变占空比,data_232=01,占空比为0.2;data_232=02,占空比为0.4;data_232=03,占空比为0.6;data_232=04,占空比0.8;其他值时占空比为0.5
*************************************************************** */
#include	"pic18.h"			/* PIC18系列的头文件 */
unsigned	char	SciReceiveFlag;	// =1,接收到通信数据
unsigned	char	data_232;		// 接收232通信数据

/* ****************************************************************
** 函 数 名: 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晶振波特率为9600时,SPBRG=25
	PIR1=0x00;				// 清中断标志
	PIE1=PIE1|0x20;			/* 允许串行通讯接口接收中断使能 */
	RCIP=0;					// 设置SCI接收中断为低优先级中断 
	CREN=1;					// 允许串口接收数据
	TXEN=1;					// 允许串口发送数据
}

/* 	**************************************************************
**	函 数 名: PWMSet()
**	功    能:CCP1输出PWM设置,设置完成后即输出PWM 
****************************************************************** */ 
void	PWMSet()
{
	TRISC=TRISC&0XFB;	/* 设置CCP1(RC2)引脚为输出方式 */		
	PR2=0XFF;			/* 设置PWM工作周期=((PR2)+1)*4*Tosc*(TMR2前分频值)*/
	CCPR1L=0X80;			/* CCP1高电平值高8位为1000 0000=80,占空比0.5 */
	CCP1CON=0X0C;		/* CCP1模块为PWM工作方式,高电平值低2位为00*/
	T2CON=0X04;			/* 打开TMR2,且使其前后分频为1,同时开始输出PWM波形 */
	CCP1IE=0;			/* CCP1中断禁止 */
}

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

main()
{
	initial();					/* 系统初始化子程序 */
	PWMSet();					/* CCP1输出PWM设置 */
	sciinitial();				// 串行通讯初始化子程序
	IPEN=1;						// 使能中断高低优先级
	INTCON=INTCON|0xc0;			// 开总中断、开外围接口中断
	while(1)
	{
		if(1==SciReceiveFlag)	/* 是否接收到通信数据 */
		{
			if(1==data_232)
				CCPR1L=0X33;		/* CCP1高电平值高8位为0X33,占空比0.2 */
			else if(2==data_232)
				CCPR1L=0X66;		/* CCP1高电平值高8位为0X66,占空比0.4 */
			else if(3==data_232)
				CCPR1L=0X99;		/* CCP1高电平值高8位为0X99,占空比0.6 */
			else if(4==data_232)
				CCPR1L=0Xcc;		/* CCP1高电平值高8位为0X66,占空比0.8 */
			else	CCPR1L=0X80;		/* CCP1高电平值高8位为0X80,占空比0.5 */
			SciReceiveFlag=0;	/* 清接收标志 */
		}
	}
}

⌨️ 快捷键说明

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