【hpwm.h头文件和hpwm.c文件,分别复制,保存成hpwm.h文件和hpwm.c文件,就能使用】赋料扬雄敌,诗看子建亲。这篇文章主要讲述hpwm.h头文件和hpwm.c文件,分别复制,保存成hpwm.h文件和hpwm.c文件,就能使用相关的知识,希望能为你提供帮助。
hpwm.h
#ifndef __HPWM_H
#define __HPWM_H#include "STC8a8k.h"void HPWM_Init();
/
//第一个参数,是PWM的通道,0----P20产生PWM,1--P21,,2--P22,3---P23
//第二个参数,是PWM的频率,电机一般是7000-10000的频率就行了,这里我选择的是8000,如果是舵机控制,这里可以是50hz
//第三个参数,是占空比,这里是高电平的占空比,范围是0--1,占空比比例越大,电机速度越快。
void HPWM_Set(int PWMchannel, unsigned int f,float zkb);
#endif
HPWM.c
#include "hpwm.h"
///
void HPWM_Init()
{ //访问PWM在扩展RAM区的特殊功能寄存器,置1
//0:是扩展RAM,XRAM
// P_SW2|=0x80;
//必须加这句,将PSW2寄存器的bit7位置1
P_SW2=0x80;
//管脚切换+初始高电平,参考stc官方例程
PWM0CR = 0xc0;
PWM1CR = 0xc0;
PWM2CR = 0xc0;
PWM3CR = 0xc0;
P_SW2=0x00;
P_SW2=0x80;
PWMCKS=0X0b;
//设置PWM周期=系统时钟/12=11.0592mhz/12;
PWMC=0x1000;
//设置PWM周期为1000H个PWM时钟
//PWM配置寄存器
PWMCFG = 0x00;
P_SW2 =0x00;
// PWMCR |= 0x80;
//使能PWM模块
PWMCR=0x80;
}//******************************************
void HPWM_Set(int PWMchannel, unsigned int f,float zkb)
{
unsigned intCycleTime;
P_SW2=0x80;
CycleTime=(unsigned int)(9216/(f*0.01));
//根据频率,计算周期,频率的倒数,设置计数周期
PWMC=CycleTime;
//设置PWM周期为1000H个PWM时钟
switch(PWMchannel)
{
case 0:
PWM0T1 =zkb*CycleTime;
//
PWM0T2 = 0;
break;
case 1:
PWM1T1 =zkb*CycleTime;
//
PWM1T2 = 0;
//当计数到CYCLE的时候,会归0
break;
case 2:
PWM2T1 =zkb*CycleTime;
//
PWM2T2 =0;
//当计数到CYCLE的时候,会归0
break;
case 3:
PWM3T1 =zkb*CycleTime;
//占空比为(T2-T1)/cycle=zkb
PWM3T2 = 0;
//当计数到CYCLE的时候,会归0
break;
default:break;
}
//将P_SW2的b7清0,从xram执行
PWMCR |= 0x80;
//使能PWM模块
// P_SW2 &
=~0x80;
P_SW2=0x00;
}
推荐阅读
- Linux-HA 高可用开源方案 Keepalived VS Heartbeat 的选择
- 实例4,循迹模块的使用和循迹小车的实现
- MYSQL中group_concat有长度限制!默认1024
- RHEL 6.3 as 64bit 配置yum源
- 实物2操作(stc8a8k按键使用)
- 安装MYSQL错误“conflicts with file from package mysql-libs-*” 解决方法
- Linux中找不到service命令
- iGuard和NFS文件同步的解决方案
- linux tar压缩排除某个文件夹