📄 main.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 + -