stc15硬件PWM调速测试成功
原创STC15F104W3个按键控制3路PWM驱动全彩LED
原创STC15F104W3个按键控制3路PWM驱动全彩LED/*程序说明*///P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波// //P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%//短按加1%占空比#include#include#define uchar unsigned char#define uint unsigned intsbit red=P3^3; //红色LED输出口sbit green=P3^4; //绿色LED输出口sbit blue=P3^5; //蓝色LED输出口sbit k1=P3^0; //红色LEDpwm控制sbit k2=P3^1; //绿色LEDpwm控制sbit k3=P3^2; //蓝色LEDpwm控制uchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存uchar flag; //定时器T2定时次数标志//延时函数,大约延时10ms.void Delay10ms() //@11.0592MHz{unsigned char i, j;i = 108;j = 145;do{while (--j);} while (--i);}//按键扫描程序void key(){uchar num1=0,num2=0,num3=0;if(k1==0) //按键K1处理程序{Delay10ms();if(k1==0){if(r_temp<99){r_temp++;while(!k1){num1++; //长按标志位加到10约100ms Delay10ms();if(num1==10&&r_temp<95){r_temp+=5;num1=0;}if(r_temp>=95) r_temp=1;}}else r_temp=1;}}if(k2==0) //按键K2处理程序{Delay10ms();if(k2==0){if(g_temp<99){g_temp++;while(!k2){num2++; //长按标志位加到10约100ms Delay10ms();if(num2==10&&g_temp<95){g_temp+=5;num2=0;}if (g_temp>=95) g_temp=1;}}else g_temp =1;}}if(k3==0) //按键K3处理程序{Delay10ms();if(k3==0){if(b_temp<99){b_temp++;while(!k3){num3++; //长按标志位加到10约100msDelay10ms();if(num3==10&&b_temp<95){b_temp+=5;num3=0;}if(b_temp>=95) b_temp=1;}}else b_temp =1;}}}//定时器T0 16位自动模式定时1ms 控制灯灭时间void InitTimer0() interrupt 1 // 1毫秒@11.0592MHz {IE2 = 0x00; //关闭定时器2中断AUXR=0XE4; //关闭定时器2计数TL0 = 0xCD;TH0 = 0xD4;red=1;green=1;flag=1;AUXR=0xF4; //开启定时器2计数IE2=0x04; //开启定时器2中断允许}//定时器T2 16位自动模式定时10us 控制等亮时间void InitTimer2() interrupt 12 // 10微秒@11.0592MHz {flag++;T2L = 0x91; //设置定时初值T2H = 0xFF; //设置定时初值if(r_temp==flag) red=0;if(g_temp==flag) green=0;if(b_temp==flag) blue=0;}void init(){AUXR =0XE4;//设置定时器0和2为1T模式TMOD= 0x00;TL0 = 0xCD;TH0 = 0xD4;T2L = 0x91; //设置定时初值T2H = 0xFF; //设置定时初值EA = 1;ET0 = 1;TR0 = 1;}void main(){init();{ key(); }}。
PWM调速程序
TCCR1B = 0x0C; //start Timer
}
#pragma interrupt_handler timer1_compa_isr:7
void timer1_compa_isr(void)
{
//compare occured TCNT1=OCR1A
PORTA&=~(1<<PA0); // clear PA0
port_init();
timer1_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x14; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
//note: when using the applocation builder tool , some sentences oftheautomaticly produced//program are not necessary for certain use like PWM wave ,delete them.
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
//TIMER1 has overflowed
TCNT1H = 0x00; //reload counter high value
TCNT1L = 0x00; //reload counter low value
//TIMER1 initialize - prescale:256
STC单片机PWM的实现
STC单片机PWM的实现实现PWM功能的步骤如下:1.设置计时器/计数器模式:选择一个适当的计时器/计数器模式,通常选择16位定时器模式,然后配置相关寄存器。
2.设置计时器的初值:将计时器的计数初值设置为0。
3.设置计时器的重载值:根据所需的PWM周期确定计时器的重载值,设置到重载寄存器中。
4.设置计时器的工作模式:选择适当的计时器工作模式,通常选择自动重载模式或单次计数模式。
5.设置PWM占空比:根据所需的PWM占空比计算出所需要的计数值,并将其设置到计时器寄存器中。
6.启动计时器:将计时器使能位设置为1,启动计时器。
7.等待PWM周期结束:等待计时器溢出,表示一个PWM周期结束。
8.关闭计时器:将计时器使能位清零,关闭计时器。
通过以上步骤,就可以在STC单片机上实现PWM功能。
下面是一个具体的实例,以STC89C52为例,实现一个简单的PWM控制LED亮度的功能:```c#include <reg51.h>sbit PWM_PIN = P1^0; // 控制端口void mainTMOD=0x00;//设置定时器0为模式0,工作方式1 TH0=0xEC;//计时器初值TL0=0xEC;ET0=1;//允许定时器0中断TR0=1;//启动定时器0while(1)//控制PWM占空比,0-255之间,控制LED亮度for(int i = 0; i < 256; i++)PWM_PIN=1;//设置PWM引脚高电平for(int j = 0; j < i; j++); // 控制占空比PWM_PIN=0;//设置PWM引脚低电平for(int k = 0; k < 255-i; k++); // 控制占空比}}void Timer0_ISR( interrupt 1static unsigned char count = 0;count++;//设置重载值,控制PWM频率TH0=0xEC;TL0=0xEC;if(count > 100) // 设置占空比PWM_PIN=0;elsePWM_PIN=1;```以上代码通过控制定时器0的计数值和PWM引脚的电平状态实现了一个简单的PWM控制LED亮度的功能。
STC15使用说明书 启光电子
朋友们大家好!感谢您购买启光电子STC15系列最小系统板耽误您几分钟请把以下的内容仔细阅读下谢谢首先强调下电子产品在运输过程中难免会出现点问题所以请收到板子的朋友不要着急去焊板子请先做下简单的烧录测试确定板子没有问题后在进行对板子的改动这样即使当板子出现问题我们也能更好的为您解决(包括退换)如果对板子进行焊接后测试出现问题我们只能提供帮助和技术支持但是此时就不能提供(退换)服务了希望朋友们能理解和支持!谢谢!如果着急使用请直接阅读下面的使用和下载方法开发板简介这款STC15F2K60S2 算是宏景(STC)在STC12的基础上的一个升级吧其实STC15早在两年前就一直说要出结果只是出了STC15F104E系列随后的STC12也将宏景的作品推向了高端不过管怎么说12比普通的8051要快12倍左右那STC15给我们又带来了什么呢这里我们只用它与STC12系列相比1 STC15虽然也是1T单片机但是它的速度要比STC12还要快20%左右2 STC15最闪亮的应该是它有内部晶振工作范围在5MHz—35MHz 这一点STC12是望尘莫及的3 PWM STC15位3通道而STC12为2路4 定时器/计数器STC156 STC12 45 串口方面均为双串口但是STC15可以通过切换使用分时复用的方法可以达到5个串口效果6RAM STC15 2K STC12 1K等等从以上这些不能看出STC15与STC12想比还是要胜出一筹最后希望它在你的手中能发挥的淋漓尽致!自动冷启动简介如果用我们板子的朋友一定知道我们板子有自动冷启动功能即不用重新开关只要保持板子供电状态就可以点击下载当然在STC15F2K60S2的板子上我们依然为它加了自动冷启动功能。
这里说一下自动冷气的开关问题如图在三极管M6的下面为自动冷启动设计了开关分别有左右两个框左边就一个字母K 右边能看到K G两个字母顾名思义K是开G 是关的意思也就是说在图上右边中间点和上边连焊并且左边也同时连焊就是开启自动冷启动功能中间点和下边连焊并且左边连点断开就是关闭自动冷启动功能为什么这样做呢因为如果要有一段时间调试程序开启自动冷启动会很方便如果调试完了要一直应用此程序就可以关闭冷启动降低总能量的消耗(虽然没用多少能量!)板子上的蓝灯和红灯简介红灯即靠近USB口的LED灯它为板子的电源指示灯也就是不管有没有开开关只要电源供电或者接好USB线板子上的红灯就会亮蓝灯为STC15运行指示灯它的所用IO为P5.5使用和下载方法1.要先给电脑安装驱动也就是PL-2303驱动这个要根据系统选择你的安装版本如果是W7系统建议直接用1.5.0驱动驱动安装好后应该还要进行重启按步骤执行即可2.安装KEIL编译软件这里我们给大家带的是KEIL4 版本也是目前最新的版本!安装后要用注册机注册一次然后就可以完全破解的3.当以上都弄好后就可以写一个自己想编译的程序并且生成HEX文件或者直接用我们资料的已经生成的HEX写入也可以4.得到HEX文件就可以下载到STC15中了这里要简单的说下打开下载软件在打开的对话框里选择好单片机的型号即STC15F2K60S2点击选择刚才编译好的HEX文件接下来将STC15系统板和电脑用USB连接如果驱动安装没有问题的话会在我的电脑设备管理器的端口上显示如图确定端口后在这里选择好已驱动成功的端口(我这里就是COM4)ps 其实这个不用查也没有关系新版的下载软件会自动搜索已经连接好的驱动接下来就是很重要的一点就是在最高和最低波特率选择里要尽量选择同样的波特率下载程序时才会比较稳定如图当一切准备好了以后看下板子的开关是不是处于开启的状态即波动开关拨到K位置头文件问题有的朋友可能还不太懂头文件(明白的朋友就不用浪费时间啦直接看头文件的安装方法)下面我就按我的理解简单给家解释一下说白了头文件就是驱动单片机的底层函数比如说P3口我们平时写程序时直接写P3=0xFF这样P3口的所有脚就都会拉高但这里面的P3就是在头文件里定义的!所以不管写什么样的单片机程序都要有它相应的头文件51单片机的头文件就是51.H我们在程序最上端只要加#include “reg51.h”就可以直接使用所以STC15F2K60S2也要有它的都文件当然了如果你要用51的头文件也能用必定STC15兼容51系列的所有功能但是STC15有自己的创新功能比如说AD通道的设置就要用到它自己的头文件头文件安装方法1首先要确定keil4 已经安装好2打开下载软件可以看到左边有一排对话框3 按动小箭头找到头文件选项这里就是stc15f2k60s2的整个头文件所在4选择选择上图然后点击确定这样整个的STC的头文件就安装到keil中了不妨我们可以去看一看这个STC文件夹就是刚安装的头文件里面的头文件有以上这些我们的板子是STC15F2K60S2所以我们选中它5然后复制然后返回INC文件夹并将刚才复制的STC15F2K60S2的头文件复制到INC文件夹的最下面里可以看出在INC文件夹里有很多.H文件也就是头文件把STC15F2K60S2复制到这里也方便了程序上的调用6这样做好后在程序上直接就可以了如果不把刚才的STC15头文件复制出来还要引用的话那就要这样不过都差不多看你喜欢哪一种方法若第一次在keil中创建项目在Keil中新建项目时选择芯片型号时,便会有“STC MCU Database”的选择项,如下图然后从列表中选择响应的MCU型号,所以我们在此选择“STC15F2K60S2”的型号,点击“确定”完成选择添加源代码文件到项目中,如下图:这里简单的介绍一下LCD1602 与 LCD12864的选择方式如图左上角 有三个焊点 中间点和左边连接 打开12864 和TFT功能 中间点和右边连接 打开1602功能并且这个STC15板子 多了可以加485芯片功能在对应的485焊盘上 焊好您要加的485 芯片 然后将图中485焊盘右边的 K 字母焊盘 和485芯片的第8脚 即对应K焊盘左边的焊盘连焊 就可以开起485芯片功能485所用单片机引脚 P3.0 P3.1 为串口P5.5为控制口这里的A B 就是485的输入输出口 如果接到485总线上 就可以进行485通讯了关于晶振和复位按键说明STC15F2K60S2有其内部R/C时钟及其复位功能但是它又同时支持外部晶振和外部复位其实相对而言外部晶振的稳定性要比内部高一些对于追求稳定性的项目来说用外部的晶振可能会更好一些所以在这里我们特意做了备用的外部晶振电路部分默认给大家带是22.1184MHz使用方法是上图晶振焊好的引脚附近都会有一个焊盘每一个焊盘都是直接连接到单片机的晶振输入口的如果是用外部晶振的时候就直接把晶振上下的焊盘和晶振引脚连接上即可同时下载程序时要把第一项的勾选去掉如上图这样就设置成了外部时钟复位按键也是同理在图中复位按键的右边也有个焊盘当用复位按键的时候将其用烙铁连接好即可同时在下载软件里的复位引脚做为I/O口勾选去掉如上图下载后重新上电就可以显示外部复位功能以上两个设置设置好以后下载第一次以后都要重新上电才能实现功能以后在下载就不用在重新上电了。
stc15一个定时器+超声波+PWM
#include <stc.h> //器件配置文件
#include <intrins.h>
sbit RX = P3^2;
sbit TX = P3^3;
unsigned int time=0;
unsigned long S=0;
while(timer--)
for(i=600;i>0;i--);
}
/**********************************************************/
void run()
{CCAP0H=0x20; // 占空比控制
CCAP0L=0x20;
TMOD &= 0x00; //设置定时器模式
TMOD |= 0x11; //设置定时器模式
ET0=1; //允许T0中断
EA=1; //开启总中断
while(1)
{TX=1;
Delay20us();
TX=0;
while(!RX); //当RX为1跳出循环
void main( void )
{
AUXR1&=0XCF;
CCON=0X00;
CMOD=0X00;
CL=0x00;
CH=0X00;
CCAPM0=0X42;
CCAPM1=0X42;
PCA_PWM0=0X00;
PCA_PWM1=0X00;
CR=1;
AUXR &= 0x7F; //定时器时钟12T模式
TL0=0; //中断溢出标志
}
void Delay20us() //@11.0592MHz
STC单片机PWM的实现方法
STC单片机PWM的实现方法实现步骤如下:1.设置T2计数器工作模式:a.将T2定时器模式寄存器(T2MOD)设置为00H,即选择13位定时器模式。
b.将T2的工作模式寄存器(T2CON)设置为34H,即设置T2为定时器模式、工作频率选择为系统时钟频率的12分频。
2.设置T2的重装载值:a.设置T2的重装载值寄存器(RCAP2L、RCAP2H),用于设置定时器2的初始值。
b.重载值=(2^13-待测PWM周期)/预分频系数例如,预分频系数为12,则重载值=(8192-待测PWM周期)/123.设置比较值:a.设置T2的比较值,用于控制PWM占空比。
b.比较值=(重装载值*PWM占空比)/1004.启动T2定时器:将T2控制位寄存器(T2CON)中的TR2位设置为1,启动T2定时器。
5.编写中断服务子程序:a.T2溢出中断:当T2定时器溢出时(即T2TF位被置为1),执行中断服务子程序,重装载T2的初始值。
b.T2比较中断:当T2的计数值与比较值相等时(即T2CF位被置为1),执行中断服务子程序,控制输出PWM的电平。
6.设置IO口通道:配置需要输出PWM的IO口为输出模式。
7.设置主程序:a.在主程序中设置待测PWM周期和占空比的值。
b.在一个无限循环中,不断更新T2的重装载值和比较值。
以上就是STC单片机PWM的基本实现方法。
下面提供一个简单的代码示例:```c#include <reg52.h>sbit PWM_OUT = P1^0; // 设置PWM输出口void PWM_IniTMOD&=0xF0;//设置T0、T1、T3为工作模式0TMOD,=0x01;TH0=0xFF;//设置T0重装载值TL0=0xFF;ET0=1;//打开T0中断EA=1;//打开总中断TR0=1;//启动T0定时器void T0_ISR( interrupt 1static unsigned int count = 0;count++;if (count < duty_cycle) { // 判断当前计数值是否小于占空比,是则输出高电平PWM_OUT=1;} else { // 否则输出低电平PWM_OUT=0;}if (count == period) { // 当计数值等于PWM周期时,将计数值复位为0count = 0;}void maiPWM_Init(;while (1)period = 100; // 设置PWM周期为100duty_cycle = 50; // 设置占空比为50%//...}```这是一个基于定时器0(T0)的简单PWM实现。
用STC15W4KxxS4输出两路互补SPWM-V1
用STC15W4KxxS4输出两路互补SPWM日期:2015-8-25版本:V1.0SPWM是使用PWM来获得正弦波输出效果的一种技术,在交流驱动或变频领域应用广泛。
SPWM知识是一个专门的学科,不了解的用户可以自己上网搜索相关的知识,本文档不做说明(要说明得比较大篇幅,各种图文说明等等),默认用户已掌握。
STC公司的STC15W4KxxS4系列MCU内带6通道15位PWM,各路PWM周期(频率)相同,输出的占空比独立可调,并且输出始终保持同步,输出相位可设置。
这些特性使得设计SPWM成为可能,并且可方便设置死区时间,对于驱动桥式电路,死区时间至关重要。
不过本MCU没有专门的死区控制寄存器,通过设置PWM占空比参数来达到。
本程序只演示两路互补SPWM的例子(单相),如需要三相SPWM,则相同方法设置另外4路PWM,相位差为120度即可。
SPWM产生原理如图1:内部15位的PWM计数器一旦运行,就会从0开始在每个PWM时钟到来时加1,其值线性上升,当计数到与15位的周期设置寄存器[PWMCH,PWMCL]相等时(图中斜线A到B),内部PWM计数器归0,并产生中断,称为“归0中断”。
本例周期设置为2400,内部计数器计到2400就归0,即2399,下一个时钟就归0。
6路PWM(PWM2~PWM7)每路的结构一样,都包含两个15位的对输出IO翻转的时刻设置寄存器PWMnT1和PWMnT2,本例使用PWM3和PWM4,对应PWM3T1、PWM3T2和PWM4T1、PWM4T2。
当内部计数器的值与某个翻转寄存器的值相等时,就对对应的输出IO取反,本例中,PWM3从P2.1输出,PWM4从P2.2输出。
假设PWM3T1=65,PWM3T2=800,PWM4T1=53,PWM4T2=812,并且PWM3输出的P2.1初始电平为0,PWM4输出的P2.2初始电平为1,则,当内部PWM计数器计到等于PWM4T1=53时,P2.2由高输出低,计到等于PWM3T1=65时,P2.1由低输出高,计到等于PWM3T2=800时,P2.1由高输出低,计到等于PWM4T2=812时,P2.2由低输出高。
STC15W4K32S4-PWM使用详解
端口配置寄存器 P_SW2
地址:BAH
初始值:0000,0000B
B7
B6
B5
B4
B3
B2
B1
B0
EAXSFR
0
0
0
-
S4_S
S3_S
S2_S
EAXSFR:扩展 SFR 访问控制使能
0:MOVX A,@DPTR/MOVX @DPTR,A 指令的操作对象为扩展 RAM(XRAM)
1:MOVX A,@DPTR/MOVX @DPTR,A 指令的操作对象为扩展 SFR(XSFR)
PWM4T1H PWM4T1 计数高位 FF20H
-
PWM4T1H[14:8]
x000,0000
PWM4T1L PWM4T1 计数低位 FF21H
PWM4T1L[7:0]
0000,0000
PWM4T2H PWM4T2 计数高位 FF22H
-
PWM4T2H[14:8]
x000,0000
PWM4T2L PWM4T2 计数低位 FF23H
0000,0000
PWM3T2H PWM3T2 计数高位 FF12H
-
PWM3T2H[14:8]
x000,0000
PWM3T2L PWM3T2 计数低位 FF13H
PWM3T2L[7:0]
0000,0000
PWM3CR
PWM3 控制
FF14H
-
-
-
-
PWM3_PS EPWM3I EC3T2SI EC3T1SI xxxx,0000
B7
B6
B5
B4
B3
B2
B1
B0
-
-
ENFD
基于STC15单片机的频率计及方波发生器设计
基于STC15单片机的频率计及方波发生器设计频率计是一种测量信号频率的仪器,而方波发生器是一种能够产生方波信号的电路。
本文将介绍基于STC15单片机的频率计和方波发生器的设计。
一、引言频率计和方波发生器是电子领域常用的测试仪器和电路。
本文中,我们将结合STC15单片机的特性,设计一种简单、稳定且易于使用的频率计和方波发生器。
二、频率计设计频率计是一种能够测量信号频率的仪器。
对于频率计的设计,我们需要通过捕获信号的上升沿和下降沿并计算时间差来计算频率。
1.硬件设计硬件设计主要包括信号捕获电路和单片机的连接。
信号捕获电路中,我们可以使用一个触发器电路来捕获信号的上升沿和下降沿。
触发器电路可以使用CD4013等型号的D触发器芯片。
通过将信号接入D触发器的CLK引脚,并将Q和/CLR引脚连接到单片机的输入脚,我们可以通过检测D触发器输出的脉冲来捕获信号的边沿。
在信号捕获电路中,我们还需要使用一个电阻和一个电容来形成一个低通滤波器,以滤除高频噪声。
将信号捕获电路的输出接入单片机的外部中断引脚,可以方便地触发单片机中断服务程序进行频率计的测量。
2.软件设计频率计的软件设计主要包括中断服务程序和主程序。
中断服务程序中,我们需要在捕获到信号边沿时,记录当前时间并清除中断标志位。
通过记录上升沿和下降沿时间的差值,我们可以得出信号的周期和频率。
主程序中,我们可以定时地调用频率计测量函数,并将测量结果显示在LCD屏幕上。
方波发生器是一种能够产生方波信号的电路。
在方波发生器的设计中,我们可以通过单片机的IO口来控制信号的频率和占空比。
1.硬件设计硬件设计中,我们需要连接单片机的IO口和电路中的相关元件。
在方波发生器电路中,我们可以使用一个555定时器芯片或者一个RC电路来产生方波信号。
通过单片机的IO口来控制触发信号的频率和高低电平持续的时间,我们可以产生所需的方波信号。
2.软件设计方波发生器的软件设计主要包括主程序的编写和IO口状态的控制。
实验二STC15系列单片机利用PWM低通滤波后得矩形波的程序
//则N=0,100Vx9=-1100V;N=255,100Vx9=1091V,其中小数点单独处理,N=0,100Vx9=-11.00V;N=255,100Vx9=10.91V
CCAP2H=r_kT; //刷新下次重装的比较门限值N(CL计数溢出时重装)
u8 M=0,J; //扫描显示位计数变量定义
bit new_cycle_flag=0; //PWM刷新周期标志(扫描显示一周),1要刷新
sbit LSIGN=P1^6; //左边的符号位数码管公共端连接引脚,=0可能亮
}
i=(u8)(Axx/1000); //计算电压伏特十位
dispbuf[3]=SG[i]; //电压伏特十位数码管显示缓存更新段码
i=(u8)(Axx/100%10); //计算电压伏特个位
dispbuf[2]=SG[i]|0x80; //电压伏特个位数码管显示缓存更新段码
u8c BT[10]={0xfe,0xfd,0xfb,0xf7,0xff,0xef,0xdf,0xbf,0x7f,0xff};//位码表
/***********PWM初始化************/ //SYSclk=11.0592MHz时,选SYSclk,PWM频率为43.2KHz
void PWM_init(void) //PWM初始化,选SYSclk/2,PWM频率为21.6KHz,选SYSclk/4,PWM频率为10.8KHz
#define Displayseg XBYTE[0x7FFF]//数码管段码锁存器写端口地址(A15=0)
#define Displaybit XBYTE[0xBFFF]//数码管位码锁存器写端口地址(A14=0)
基于STC15F2K60S2的多路PWM舵机控制器设计
基于STC15F2K60S2的多路PWM舵机控制器设计作者:姚强王亚刚来源:《软件导刊》2018年第06期摘要:舵机控制器在机器人控制技术中有重要应用,其性能优劣直接关系到多舵机系统能否正常工作。
为解决采用控制芯片设计的舵机控制器多路数输出和高精度之间的矛盾,设计了一种新的舵机控制器,硬件采用高性能STC15F2K60S2单片机,在最大限度内缩短了中断服务时间,PWM波控制精度可达0.5us;软件采用分时复用思想,PWM波在20ms的信号周期内输出路数多达32路。
经仿真软件验证,该设计在保证控制路数足够多的前提下极大提高了控制精度,并成功应用于7自由度持镜机械臂控制。
关键词:舵机控制器;STC15F2K60S2;PWM;持镜机械臂DOI:10.11907/rjdk.172881中图分类号:TP319文献标识码:A 文章编号:1672-7800(2018)006-0132-04Abstract:The steering gear controller plays an important role in robot control technology, and it has a direct influence on the multi-steering system. In order to solve the contradiction between multi-controlling channels and low accuracy of the steering gear controller, we adopt controller IC to design a new type of steering gear controller. The high-performance STC15F2K60S2 microcontroller is used to shorten the time of the interrupt service to the maxium. The control precision of PWM wave can reach 0.5us. The thought of time-sharing is adopted to produce no more than 32 PWM channels in 20ms signal period. The simulation software verifies that on the premise of enough controlling channels the new design greatly improves the controlling precision and can be successfully applied in controlling seven-DOF endoscope arm.Key Words:steering gear controller; STC15F2K60S2; PWM; endoscope arm0 引言舵机控制器设计是机械臂控制的关键技术之一。
关于STC15F2K60S2的PWM应用
关于STC15F2K60S2的PWM应⽤STC15F2K60S2芯⽚PWM的应⽤1.⽬的脉宽调制(PWM,Pulse Width Modulation)是⼀种使⽤程序来控制波形占空⽐、周期、相位波形的技术,在三相电机驱动、D/A转换等场合有⼴泛的应⽤。
STC15系列单⽚机的PCA模块可以通过设定各⾃的寄存器PCA_PWMn(n=0,1,2.下同)中的位EBSn_1/PCA_PWMn.7及EBSn_0/PCA_PWMn.6,使其⼯作于8位PWM或7位PWM 或6位PWM模式。
PCA⼯作模式寄存器的格式如下:当CIDL = 0时,空闲模式下PCA计数器继续⼯作;当CIDL = 1时,空闲模式下PCA计数器停⽌⼯作;CPS2、CPS1、CPS0:PCA计数脉冲源选择控制位。
,PWM的频率为SYSclk/256.如果要⽤系统时钟/3来作为PCA的时钟源,应选择T0的溢出作为CCP/PCA/PWM的时钟源,此时应让T0⼯作在1T模式,计数3个脉冲即产⽣溢出。
⽤T0的溢出可对系统时钟进⾏1~65536级分频(T0⼯作在16为重装载模式)。
ECF:PCA计数溢出中断使能位。
当ECF = 0时,禁⽌寄存器CCON中CF位的中断;当ECF = 1时,允许寄存器CCON中CF位的中断。
2.2.PCA控制寄存器CCONPCA控制寄存器的格式如下:寄存器的ECF位置位,则CF标志可⽤来产⽣中断。
CF位可通过硬件或软件置位,但只能通过软件清零。
CR:PCA计数器阵列运⾏控制位。
该位通过软件置位,⽤来启动计数器阵列计数。
该位通过软件清零,⽤来关闭PCA计数器。
CCF2:PCA模块2中断标志。
当出现匹配或捕捉时该位由硬件置位。
该位必须通过软件清零。
CCF1:PCA模块1中断标志。
当出现匹配或捕捉时该位由硬件置位。
该位必须通过软件清零。
CCF0:PCA模块0中断标志。
当出现匹配或捕捉时该位由硬件置位。
该位必须通过软件清零。
2.3.PCA⽐较/捕获寄存器CCAPM0、CCAPM1和CCAPM2PCA模块0的⽐较/捕获寄存器的格式如下:ECOM0:允许⽐较器功能控制位。
stc15f2k60s2pwm呼吸灯实验程序
stc15f2k60s2pwm呼吸灯实验程序/**************************************************** 4个按键决定4个亮度占空比:PWM_T/100,越大越亮****************************************************/ #include#define uInt unsigned int#define uchar unsigned charuchar PWM_T = 0; //占空比控制变量//4个按键,决定输出PWM_T值sbit KEY_4_PIN=P3^5;sbit KEY_3_PIN=P3^4;sbit KEY_2_PIN=P3^3;sbit KEY_1_PIN=P3^2;/**************************************************** 延时子程序****************************************************/ void delay_ms(unsigned char ms){unsigned int i;do{i = 11059200L / 13000;while(--i) ; //14T per loop}while(--ms);}/**************************************************** 主程序****************************************************/ void main(void){uchar led_bh,led_fx=1;uInt n ;TMOD=0x02; //定时器0,工作模式2,8位定时模式TH0=210; //写入预置初值(取值1-255,数越大PWM频率越高)TL0=210; //写入预置值(取值1-255,数越大PWM频率越高)TR0=1; //启动定时器ET0=1; //允许定时器0中断EA=1; //允许总中断P1=0xff; //初始化P1,输出端口P0=0xff; //初始化P0while(1) //PWM周期100,高电平100- PWM_T,低电平PWM_T,低电平工作{for(n=0;n<200;n++); //延时,取值0-65535,数字越大变化越慢if(!KEY_4_PIN||!KEY_3_PIN||!KEY_2_PIN||!KEY_1_PIN) //通过按键改变占空比if(!KEY_4_PIN){while(1){delay_ms(10);if(led_fx==1)led_bh++;else{led_bh--;}if(led_bh>100)led_fx=0;if(led_bh==0)led_fx=1;PWM_T=led_bh;if(!KEY_3_PIN) break ;if(!KEY_2_PIN) break ;if(!KEY_1_PIN) break ;}}else if(!KEY_3_PIN)PWM_T=0;else if(!KEY_2_PIN)PWM_T=50;else if(!KEY_1_PIN)PWM_T=100;}}}/****************************************************/定时器0中断模拟PWM****************************************************/ timer0() interrupt 1 using 2{static uchar t ; //PWM计数t++; //每次定时器溢出加1if(t==100) //PWM周期100个单位{t=0; //使t=0,开始新的PWM周期//P1=0x00; //使LED灯亮,输出端口P0=0x00; //使LED灯亮,输出端口}P0=0xff; //使LED灯灭}}/////////////////////////////////////////////////////////////////// //////////////////////////////////////////////// //包含本头文件后,不用另外再包含"REG51.H"//stc15fxx.h ////内核特殊功能寄存器// 复位值描述sfr ACC = 0xE0; //0000,0000 累加器Accumulatorsfr B = 0xF0; //0000,0000 B寄存器sfr PSW = 0xD0; //0000,0000 程序状态字sbit CY = PSW^7;sbit AC = PSW^6;sbit F0 = PSW^5;sbit RS1 = PSW^4;sbit RS0 = PSW^3;sbit OV = PSW^2;sbit P = PSW^0;sfr SP = 0x81; //0000,0111 堆栈指针sfr DPL = 0x82; //0000,0000 数据指针低字节sfr DPH = 0x83; //0000,0000 数据指针高字节//I/O 口特殊功能寄存器sfr P0 = 0x80; //1111,1111 端口0sbit P00 = P0^0;sbit P01 = P0^1;sbit P02 = P0^2;sbit P03 = P0^3;sbit P04 = P0^4;sbit P05 = P0^5;sbit P07 = P0^7;sfr P1 = 0x90; //1111,1111 端口1sbit P10 = P1^0;sbit P11 = P1^1;sbit P12 = P1^2;sbit P13 = P1^3;sbit P14 = P1^4;sbit P15 = P1^5;sbit P16 = P1^6;sbit P17 = P1^7;sfr P2 = 0xA0; //1111,1111 端口2sbit P20 = P2^0;sbit P21 = P2^1;sbit P22 = P2^2;sbit P26 = P2^6;sbit P27 = P2^7;sfr P3 = 0xB0; //1111,1111 端口3 sbit P30 = P3^0; sbit P31 = P3^1;sbit P32 = P3^2;//按键sbit P33 = P3^3;sbit P34 = P3^4;sbit P35 = P3^5;sbit P36 = P3^6;sbit P37 = P3^7;sfr P4 = 0xC0; //1111,1111 端口4 sbit P40 = P4^0; sbit P41 = P4^1;sbit P42 = P4^2;sbit P43 = P4^3;sbit P44 = P4^4;sbit P46 = P4^6;sbit P47 = P4^7;sfr P5 = 0xC8; //xxxx,1111 端口5 sbit P50 = P5^0; sbit P51 = P5^1;sbit P52 = P5^2;sbit P53 = P5^3;sbit P54 = P5^4;sbit P55 = P5^5;sbit P56 = P5^6;sbit P57 = P5^7;sfr P6 = 0xE8; //0000,0000 端口6 sbit P60 = P6^0; sbit P61 = P6^1;sbit P62 = P6^2;sbit P63 = P6^3;sbit P64 = P6^4;sbit P65 = P6^5;sbit P66 = P6^6;sbit P67 = P6^7;sfr P7 = 0xF8; //0000,0000 端口7 sbit P70 = P7^0; sbit P71 = P7^1;sbit P72 = P7^2;sbit P73 = P7^3;sbit P77 = P7^7;sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0 sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1 sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0 sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1 sfr P2M0 = 0x96; //0000,0000 端口2模式寄存器0 sfr P2M1 = 0x95; //0000,0000 端口2模式寄存器1sfr P3M0 = 0xB2; //0000,0000 端口3模式寄存器0sfr P3M1 = 0xB1; //0000,0000 端口3模式寄存器1sfr P4M0 = 0xB4; //0000,0000 端口4模式寄存器0sfr P4M1 = 0xB3; //0000,0000 端口4模式寄存器1sfr P5M0 = 0xCA; //0000,0000 端口5模式寄存器0sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1sfr P7M0 = 0xE2; //0000,0000 端口7模式寄存器0sfr P7M1 = 0xE1; //0000,0000 端口7模式寄存器1//系统管理特殊功能寄存器sfr PCON = 0x87; //0001,0000 电源控制寄存器sfr AUXR = 0x8E; //0000,0000 辅助寄存器sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1sfr CLK_DIV = 0x97; //0000,0000 时钟分频控制寄存器sfr BUS_SPEED = 0xA1; //xx10,x011 总线速度控制寄存器sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器sfr P_SW2 = 0xBA; //xxxx,x000 外设端口切换寄存器//中断特殊功能寄存器sfr IE = 0xA8; //0000,0000 中断控制寄存器sbit EA = IE^7;sbit ELVD = IE^6;sbit EADC = IE^5;sbit ES = IE^4;sbit ET1 = IE^3;sbit EX1 = IE^2;sbit ET0 = IE^1;sbit EX0 = IE^0;sfr IP = 0xB8; //0000,0000 中断优先级寄存器sbit PPCA = IP^7;sbit PLVD = IP^6;sbit PADC = IP^5;sbit PS = IP^4;sbit PX0 = IP^0;sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2sfr IP2 = 0xB5; //xxxx,xx00 中断优先级寄存器2sfr INT_CLKO = 0x8F; //0000,0000 外部中断与时钟输出控制寄存器//定时器特殊功能寄存器sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器sbit TF1 = TCON^7;sbit TR1 = TCON^6;sbit TF0 = TCON^5;sbit TR0 = TCON^4;sbit IE1 = TCON^3;sbit IT1 = TCON^2;sbit IE0 = TCON^1;sbit IT0 = TCON^0;sfr TMOD = 0x89; //0000,0000 T0/T1模式寄存器sfr TL0 = 0x8A; //0000,0000 T0低字节sfr TL1 = 0x8B; //0000,0000 T1低字节sfr TH0 = 0x8C; //0000,0000 T0高字节sfr TH1 = 0x8D; //0000,0000 T1高字节sfr T4T3M = 0xD1; //0000,0000 T3/T4模式寄存器sfr T3T4M = 0xD1; //0000,0000 T3/T4模式寄存器sfr T4H = 0xD2; //0000,0000 T4高字节sfr T4L = 0xD3; //0000,0000 T4低字节sfr T3H = 0xD4; //0000,0000 T3高字节sfr T3L = 0xD5; //0000,0000 T3低字节sfr T2H = 0xD6; //0000,0000 T2高字节sfr T2L = 0xD7; //0000,0000 T2低字节sfr WKTCL = 0xAA; //0000,0000 掉电唤醒定时器低字节sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器//串行口特殊功能寄存器sfr SCON = 0x98; //0000,0000 串口1控制寄存器sbit SM0 = SCON^7;sbit SM1 = SCON^6;sbit SM2 = SCON^5;sbit REN = SCON^4;sbit TB8 = SCON^3;sbit RB8 = SCON^2;sbit TI = SCON^1;sbit RI = SCON^0;sfr SBUF = 0x99; //xxxx,xxxx 串口1数据寄存器sfr S3CON = 0xAC; //0000,0000 串口3控制寄存器sfr S3BUF = 0xAD; //xxxx,xxxx 串口3数据寄存器sfr S4CON = 0x84; //0000,0000 串口4控制寄存器sfr S4BUF = 0x85; //xxxx,xxxx 串口4数据寄存器sfr SADDR = 0xA9; //0000,0000 从机地址寄存器sfr SADEN = 0xB9; //0000,0000 从机地址屏蔽寄存器//ADC 特殊功能寄存器sfr ADC_CONTR = 0xBC; //0000,0000 A/D转换控制寄存器sfr ADC_RES = 0xBD; //0000,0000 A/D转换结果高8位sfr ADC_RESL = 0xBE; //0000,0000 A/D转换结果低2位//SPI 特殊功能寄存器sfr SPSTAT = 0xCD; //00xx,xxxx SPI状态寄存器sfr SPCTL = 0xCE; //0000,0100 SPI控制寄存器sfr SPDAT = 0xCF; //0000,0000 SPI数据寄存器//IAP/ISP 特殊功能寄存器sfr IAP_DA TA = 0xC2; //0000,0000 EEPROM数据寄存器sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROM地址高字节sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROM地址第字节sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROM命令寄存器sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPM命令触发寄存器sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器//PCA/PWM 特殊功能寄存器sfr CCON = 0xD8; //00xx,xx00 PCA控制寄存器sbit CF = CCON^7;sbit CR = CCON^6;sbit CCF2 = CCON^2;sbit CCF1 = CCON^1;sbit CCF0 = CCON^0;sfr CMOD = 0xD9; //0xxx,x000 PCA 工作模式寄存器sfr CL = 0xE9; //0000,0000 PCA计数器低字节sfr CH = 0xF9; //0000,0000 PCA计数器高字节sfr CCAPM0 = 0xDA; //0000,0000 PCA模块0的PWM寄存器sfr CCAPM1 = 0xDB; //0000,0000 PCA模块1的PWM寄存器sfr CCAPM2 = 0xDC; //0000,0000 PCA模块2的PWM 寄存器sfr CCAP0L = 0xEA; //0000,0000 PCA模块0的捕捉/比较寄存器低字节sfr CCAP1L = 0xEB; //0000,0000 PCA模块1的捕捉/比较寄存器低字节sfr CCAP2L = 0xEC; //0000,0000 PCA模块2的捕捉/比较寄存器低字节sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCA模块0的PWM寄存器sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCA模块1的PWM寄存器sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCA模块1的PWM寄存器sfr CCAP2H = 0xFC; //0000,0000 PCA模块2的捕捉/比较寄存器高字节。
STC15单片机6路专用PWM
STC15单片机6路专用PWM(1)STC例程分析/* STC15Fxx 系列输出任意周期和任意占空比的PWM实例*/#define CYCLE 0x1000L //定义PWM周期(最大值为32767) #define DUTY 10L //定义占空比为10%void pwm(){P0M0 = 0x00; //因PWM模块相关IO口初始状态为高阻,需要将IO口设置为准双向或推挽输出才能正常输出波形;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;PIN_SW2 |= 0x80; //使能访问XSFR,否则无法访问以下特殊寄存器PWMCFG = 0x00; //配置PWM的输出初始电平为低电平,也就是第一次翻转前输出的电平PWMCKS = 0x00; //选择PWM的时钟为Fosc/(0+1),其中FOSC为外部或内部系统时钟经分频后给单片机的工作时钟PWMC = CYCLE; //设置PWM周期(最大值为32767),该寄存器为15位,实际使用时最好定义周期形参为unsigned intPWM2T1 = 0x0000; //设置PWM2第1次反转的PWM计数,也就是电平第一次发生翻转的计数值 //此例中定义PWM2T1为0,初始电平也为0,所以在一开始,也就是计数为0时,直接翻转为高,这样方便计算占空比PWM2T2 = CYCLE * DUTY / 100; //设置PWM2第2次反转的PWM计数,其实这两个寄存器不分先后,没有第1第2之分,只是设置两个点,到点电平翻转//占空比为(PWM2T2-PWM2T1)/PWMCPWM2CR = 0x00; //选择PWM2输出到P3.7,不使能PWM2中断,也可以通过该寄存器切换要输出PWM的IO口PWMCR = 0x01; //使能PWM信号输出PWMCR |= 0x80; //使能PWM模块,此处有坑,容后详述!!PIN_SW2 &= ~0x80;}从例程中看需要特别注意以下事项:(a)周期和占空比的定义:常量后面加L,代表数据类型为长整型,这是为了防止在给反转计数器设置值的时候产生错误。
基于STC15在线式PWM信号发生器的设计
基于STC15在线式PWM信号发生器的设计
胡飞;吕勇飞;汪宏鹏;张盛博
【期刊名称】《电脑知识与技术:学术版》
【年(卷),期】2022(18)28
【摘要】为提供电子测试领域中需要频率与占空比随时间变化的测试信号,设计了一款基于STC15的在线式PWM信号发生器;信号发生器以STC15W4K32S4微控制器为核心,通过串行通信接口与上位机连接,基于PyQt5+Pyserial设计可视化的上位机界面,可根据测试计划输入信号参数以及运行时间,信号发生器则根据预设时间输出不同参数的PWM信号,亦可通过按键离线调整运行参数,OLED显示当前运行参数,方便用户查看;经测试,PWM输出在10Hz~100KHz范围内精度均满足要求,目前此设备已应用于实际汽车电子测试场合并取得良好反馈。
【总页数】4页(P1-3)
【作者】胡飞;吕勇飞;汪宏鹏;张盛博
【作者单位】芜湖职业技术学院信息与人工智能学院;温州北工汽车电器有限公司;光机电一体化应用技术协同创新中心
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于 STM32 PWM 的正弦信号发生器设计
2.基于FPGA+PWM的多路信号发生器设计
3.基于FPGA的舵机调速PWM信号发生器设计与实现
4.基于FPGA的
正弦波PWM信号发生器的设计5.基于STM32的高精度PWM信号发生器的设计
因版权原因,仅展示原文概要,查看原文内容请购买。
stc pwm 基本原理
stc pwm 基本原理
STC(Step-Up Converter)PWM(Pulse Width Modulation)是一种用于调节电源电压的电子技术。
它通过控制脉冲的宽度来调节输出电压,从而实现电源的高效、稳定和可靠运行。
STC PWM的基本原理是利用PWM信号控制开关的开通和关断时间,从而调节输出电压的大小。
当开关开通时,电源电压加到负载上,当开关关断时,负载电压为零。
通过调节开关开通和关断的时间比例,可以控制输出电压的大小。
在STC PWM中,通常使用微控制器或数字信号处理器来生成PWM信号。
这些控制器可以通过编程来控制PWM信号的频率、占空比等参数,从而实现电源电压的精确调节。
此外,STC PWM还具有以下优点:
高效:由于PWM信号的占空比可以精确控制,因此可以最大限度地提高电源的效率。
稳定:由于PWM信号的频率和占空比可以稳定控制,因此可以保证电源电压的稳定输出。
可靠:由于PWM信号的开关动作时间很短,因此可以减少开关的损耗和发热,从而提高电源的可靠性。
总之,STC PWM是一种非常有效的电源调节技术,它可以实现电源电压的高效、稳定和可靠运行。
在许多领域,如通信、电力、汽车等,STC PWM都得到了广泛的应用。
stc15串口正常通讯晶振允许误差范围
stc15串口正常通讯晶振允许误差范围
stc15单片机在串口正常通讯中,使用的晶振允许一定的误差范围。
一般来说,stc15单片机使用的晶振频率为11.0592MHz,其允许的误差范围为±50ppm。
这意味着晶振频率的实际值可以在
11.0587MHz至11.0598MHz之间波动。
在实际应用中,如果晶振的频率误差超过了允许范围,可能会导致串口通讯出现错误或不稳定。
因此,在选择和使用晶振时,应该尽可能选择精度高的晶振,并进行频率校准。
同时,stc15单片机还提供了软件校准晶振的方法,可以通过编写代码来进行校准。
具体方法可参考stc15单片机的相关手册或者资料。
通过校准晶振,可以提高串口通讯的稳定性和可靠性。
- 1 -。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 0 PCA模块工作于6位PWM功能
1 1 PCA模块工作于8位PWM功能
***********************************************************************************/
#include <stc.h>
#define uint unsigned int
#define uchar unsigned char
/******************************************************************************
PCA模块1模式寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
位描述 - ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1
电机驱动位定义
*******************************************************************************/
sbit IN1=P1^2;
sbit IN2=P1^3;
sbit IN3=P1^4;
sbit IN4=P1^5;
CCAP1H=0X20;
CCAP1L=0X20;
/**********************************************************************************
PCA模块0模式寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
PCA_PWM0=0X00;
PCA_PWM1=0X00;
CR=1;
//EA=1;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
while (1);
}
初始值=x000,0000 x 0 0 0 0 0 0 0
ECOM0=1,允许比较器功能控制位;PWM0=1,允许CCPn引脚用作脉宽调节输出。开启PWM模式必须
对次两位置1.
***********************************************************************************/
void main()
{AUXR1&=0XCF;
CCON=0X00;
CMOD=0X00;
/*******************************************************************************
8位自动重装
********************************************************************************/
CL小于CCAPnL时,使能低电平;CL大于CCAPnL时使能高电平
**********************************************************************************/
CCAP0H=0x80; // 占空比控制
CCAP0L=0x80;
CL=0x00;
CH=0X00;
/********************************************************************************
占空比的调节,0x00-0xff,本程序用8位,第九位EPCnH和EPCnH
在PCA_PWMn内最低两位置零即可。
位描述 EBS0_1 EBS0_0 - - - - EPC0H EPC0L
初始值=xxxx, CAPP0 CAPN0 MAT0 TOG0 PWM0 ECCF0
初始值=x000,0000 x 0 0 0 0 0 0 0
PCA1模式PWM辅助寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
位描述 EBS1_1 EBS1_0 - - - - EPC1H EPC1L
初始值=xxxx,xx00 x x x x x x 0 0
EBSn_1 和EBSn_0是当PCA模块工作在PWM模式时的功能选择位。
0 0 PCA模块工作于8位PWM功能
CCAPM0=0X42;
CCAPM1=0X42;
/**********************************************************************************
PCA0模式PWM辅助寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0