直流电机调速系统课程设计报告 - 图文(5)

2025-08-15

// // // // CCAP0L

CCAP0L

CCAP0L

}

return;

PCAx->PCA_Interrupt_Mode &= (3<<4) + 1; if(PCAx->PCA_Mode >= PCA_Mode_SoftTimer)

PCAx->PCA_Interrupt_Mode &= ~(3<<4);

if(PCA_id == PCA0) { CCAPM0 = PCAx->PCA_Mode | PCAx->PCA_Interrupt_Mode; //工作模式, 中断模式 PCA_PWM0 = (PCA_PWM0 & ~(3<<6)) | PCAx->PCA_PWM_Wide; //PWM宽度 if( PCAx->PWMCFG==1) //自己设置的有待验证 PWMCFG=PWMCFG | 0x20; else PWMCFG=PWMCFG & 0xDF; PCA_Timer0 = PCAx->PCA_Value; B_Capture0 = 0; PCA0_mode = PCAx->PCA_Mode; CCAP0_tmp = PCA_Timer0; CCAP0L = (u8)CCAP0_tmp; //将影射寄存器写入捕获寄存器,先写 CCAP0H = (u8)(CCAP0_tmp >> 8); //后写CCAP0H }

if(PCA_id == PCA1) { CCAPM1 = PCAx->PCA_Mode | PCAx->PCA_Interrupt_Mode; PCA_PWM1 = (PCA_PWM1 & ~(3<<6)) | PCAx->PCA_PWM_Wide; PCA_Timer1 = PCAx->PCA_Value; B_Capture1 = 0; PCA1_mode = PCAx->PCA_Mode; CCAP1_tmp = PCA_Timer1; CCAP1L = (u8)CCAP1_tmp; //将影射寄存器写入捕获寄存器,先写 CCAP1H = (u8)(CCAP1_tmp >> 8); //后写CCAP0H }

if(PCA_id == PCA2) { CCAPM2 = PCAx->PCA_Mode | PCAx->PCA_Interrupt_Mode; PCA_PWM2 = (PCA_PWM2 & ~(3<<6)) | PCAx->PCA_PWM_Wide; }

PCA_Timer2 = PCAx->PCA_Value; B_Capture2 = 0;

PCA2_mode = PCAx->PCA_Mode; CCAP2_tmp = PCA_Timer2; CCAP2L = (u8)CCAP2_tmp;

//将影射寄存器写入捕获寄存器,先写

CCAP2H = (u8)(CCAP2_tmp >> 8); //后写CCAP0H

}

//======================================================================== // 函数: void PCA_Handler (void) interrupt PCA_VECTOR // 描述: PCA中断处理程序. // 参数: None // 返回: none.

// 版本: V1.0, 2012-11-22

//======================================================================== void PCA_Handler (void) interrupt PCA_VECTOR { if(CCF0) //PCA模块0中断 { CCF0 = 0; //清PCA模块0中断标志 if(P25) CCAP0_tmp += PCA_Timer0; //输出为高电平,则给影射寄存器装载高电平时间长度

else CCAP0_tmp += PWM0_low; //输出为低电平,则给影射寄存器装载低电平时间长度 CCAP0L = (u8)CCAP0_tmp; //将影射寄存器写入捕获寄存器,先写CCAP0L

CCAP0H = (u8)(CCAP0_tmp >> 8); //后写CCAP0H } if(CCF1) //PCA模块1中断 { CCF1 = 0; //清PCA模块1中断标志 if(P26) CCAP1_tmp += PCA_Timer1; //输出为高电平,则给影射寄存器装载高电平时间长度

else CCAP1_tmp += PWM1_low; //输出为低电平,则给影射寄存器装载低电平时间长度 CCAP1L = (u8)CCAP1_tmp; //将影射寄存器写入捕获寄存器,先写CCAP0L

CCAP1H = (u8)(CCAP1_tmp >> 8); //后写CCAP0H } if(CCF2) //PCA模块2中断 { CCF2 = 0; //清PCA模块1中断标志 if(P27) CCAP2_tmp += PCA_Timer2; //输出为高电平,则给影射寄存器装载高电平时间长度

else CCAP2_tmp += PWM2_low; //输出为低电平,则给影射寄存器装载低电平时间长度 CCAP2L = (u8)CCAP2_tmp; //将影射寄存器写入捕获寄存器,先写CCAP0L

CCAP2H = (u8)(CCAP2_tmp >> 8); //后写CCAP0H }

/* if(CF) //PCA溢出中断 { CF = 0; //清PCA溢出中断标志 } */ }

7.2.4 GPIO程序

/*------------------------------------------------------------------*/ /* --- STC MCU International Limited -------------------------------*/ /* --- STC 1T Series MCU RC Demo -----------------------------------*/ /* --- Mobile: (86)13922805190 -------------------------------------*/ /* --- Fax: 86-0513-55012956,55012947,55012969 ---------------------*/ /* --- Tel: 86-0513-55012928,55012929,55012966 ---------------------*/ /* --- Web: www.GXWMCU.com -----------------------------------------*/ /* --- QQ: 800003751 ----------------------------------------------*/ /* If you want to use the program or the program referenced in the */ /* article, please specify in which data and procedures from STC */ /*------------------------------------------------------------------*/

/************* 功能说明 **************

本文件为STC15xxx系列的端口初始化程序,用户几乎可以不修改这个程序.

******************************************/

#include \

//======================================================================== // 函数: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) // 描述: 初始化IO口.

// 参数: GPIOx: 结构参数,请参考timer.h里的定义. // 返回: 成功返回0, 空操作返回1,错误返回2. // 版本: V1.0, 2012-10-22

//======================================================================== u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) { if(GPIO > GPIO_P5) return 1; //空操作 if(GPIOx->Mode > GPIO_OUT_PP) return 2; //错误 if(GPIO == GPIO_P0) { if(GPIOx->Mode == GPIO_PullUp) P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //上拉准双向口 if(GPIOx->Mode == GPIO_HighZ) P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //浮空输入 if(GPIOx->Mode == GPIO_OUT_OD) P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; //开漏输出 if(GPIOx->Mode == GPIO_OUT_PP) P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; //推挽输出 } if(GPIO == GPIO_P1) { if(GPIOx->Mode == GPIO_PullUp) P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //上拉准双向口 if(GPIOx->Mode == GPIO_HighZ) P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //浮空输入 if(GPIOx->Mode == GPIO_OUT_OD) P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; //开漏输出

if(GPIOx->Mode == GPIO_OUT_PP) >Pin;

//推挽输出 }

if(GPIO == GPIO_P2) { if(GPIOx->Mode == GPIO_PullUp) >Pin;

//上拉准双向口 if(GPIOx->Mode == GPIO_HighZ) >Pin;

//浮空输入 if(GPIOx->Mode == GPIO_OUT_OD) >Pin;

//开漏输出 if(GPIOx->Mode == GPIO_OUT_PP)

>Pin;

//推挽输出 }

if(GPIO == GPIO_P3) { if(GPIOx->Mode == GPIO_PullUp) >Pin;

//上拉准双向口 if(GPIOx->Mode == GPIO_HighZ) >Pin;

//浮空输入 if(GPIOx->Mode == GPIO_OUT_OD) >Pin;

//开漏输出 if(GPIOx->Mode == GPIO_OUT_PP)

>Pin;

//推挽输出 }

if(GPIO == GPIO_P4) { if(GPIOx->Mode == GPIO_PullUp) >Pin;

//上拉准双向口 if(GPIOx->Mode == GPIO_HighZ) >Pin;

//浮空输入 if(GPIOx->Mode == GPIO_OUT_OD) >Pin;

//开漏输出 if(GPIOx->Mode == GPIO_OUT_PP)

>Pin;

//推挽输出 }

if(GPIO == GPIO_P5) { if(GPIOx->Mode == GPIO_PullUp) >Pin;

//上拉准双向口 if(GPIOx->Mode == GPIO_HighZ) >Pin;

//浮空输入 if(GPIOx->Mode == GPIO_OUT_OD) >Pin;

//开漏输出 if(GPIOx->Mode == GPIO_OUT_PP)

>Pin;

//推挽输出 }

return 0; //成功

}

P1M1 &= ~GPIOx->Pin, P2M1 &= ~GPIOx->Pin, P2M1 |= GPIOx->Pin, P2M1 |= GPIOx->Pin, P2M1 &= ~GPIOx->Pin,

P3M1 &= ~GPIOx->Pin, P3M1 |= GPIOx->Pin, P3M1 |= GPIOx->Pin, P3M1 &= ~GPIOx->Pin,

P4M1 &= ~GPIOx->Pin, P4M1 |= GPIOx->Pin, P4M1 |= GPIOx->Pin, P4M1 &= ~GPIOx->Pin,

P5M1 &= ~GPIOx->Pin, P5M1 |= GPIOx->Pin, P5M1 |= GPIOx->Pin, P5M1 &= ~GPIOx->Pin,

P1M0 |= GPIOx-

P2M0 &= ~GPIOx-P2M0 &= ~GPIOx-P2M0 |= GPIOx-P2M0 |= GPIOx-

P3M0 &= ~GPIOx-P3M0 &= ~GPIOx-P3M0 |= GPIOx-P3M0 |= GPIOx-

P4M0 &= ~GPIOx-P4M0 &= ~GPIOx-P4M0 |= GPIOx-P4M0 |= GPIOx-

P5M0 &= ~GPIOx-P5M0 &= ~GPIOx-P5M0 |= GPIOx-P5M0 |= GPIOx-

7.2.5延时程序

/*------------------------------------------------------------------*/ /* --- STC MCU International Limited -------------------------------*/ /* --- STC 1T Series MCU RC Demo -----------------------------------*/ /* --- Mobile: (86)13922805190 -------------------------------------*/ /* --- Fax: 86-0513-55012956,55012947,55012969 ---------------------*/ /* --- Tel: 86-0513-55012928,55012929,55012966 ---------------------*/ /* --- Web: www.GXWMCU.com -----------------------------------------*/ /* --- QQ: 800003751 ----------------------------------------------*/ /* If you want to use the program or the program referenced in the */ /* article, please specify in which data and procedures from STC */ /*------------------------------------------------------------------*/

/************* 功能说明 **************

本文件为STC15xxx系列的延时程序,用户几乎可以不修改这个程序.

******************************************/

#include \

//======================================================================== // 函数: void delay_ms(unsigned char ms) // 描述: 延时函数。

// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟. // 返回: none. // 版本: VER1.0 // 日期: 2013-4-1 // 备注:

//======================================================================== void delay_ms(unsigned int ms) {

unsigned int i; do{ i = MAIN_Fosc / 13000; while(--i) ; //14T per loop }while(--ms); }

void delay_us(unsigned int us) {

unsigned int i; do{ i = MAIN_Fosc / 13; while(--i) ; //14T per loop }while(--us); }


直流电机调速系统课程设计报告 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:文科信息技术判断题汇总

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219