第7章中断控制定时计数器及PCAPWM的应用
定时器和中断
定时器和中断的应用前景
工业自动化
定时器和中断在工业自动化领域具有广泛 的应用前景,如生产线控制、机器人控制
等。
智能交通
在智能交通领域,定时器和中断可以实现 交通信号灯的智能控制和车辆的自动化调
度。
智能家居
在智能家居领域,定时器和中断可以实现 家电的智能控制和自动化管理,提高生活 品质。
医疗设备
在医疗设备领域,定时器和中断可以实现 医疗设备的自动化控制和精确计时,提高 医疗设备的可靠性和安全性。
定义
中断是一种硬件或软件事件,它能够打断正在执行的程序,并将其控制权交给 中断处理程序。
作用
中断是计算机系统中非常重要的机制,它使得CPU能够响应各种突发事件,如 硬件故障、外部信号、定时器超时等,从而实现多任务并发处理和实时性要求。
中断的分类
硬件中断
由硬件设备产生的中断,如键 盘输入、时钟中断等。
中断
用于需要实时响应的场景,如键盘输 入、串口通信等。
04
定时器的应用
BIG DATA EMPOWERS TO CREATE A NEW
ERA
定时器的使用场景
01
02
03
04
时间基准和同步
用于提供稳定的时间基准,如 系统时钟。
任务调度
用于安排任务在特定时间执行 。
性能测试和测量
用于测量代码执行时间或系统 性能。
网络定时器
用于网络通信的定时器, 如用于数据包发送间隔控 制的定时器。
定时器的工作原理
硬件定时器工作原理
基于硬件电路的定时器通常由振荡器和计数器组成,振荡器产生固定频率的脉冲信号,计 数器对脉冲信号进行计数,当计数达到预设值时,产生中断或触发信号。
PWM模块应用
PWM模块及应用本文介绍的PWM模块是基于TMS320F2808。
对其模块的主要构成和功能进行了介绍,并利用该模块产生了给定频率的SPWM波。
F2808ePWM模块包含2组完整的ePWM模块:ePWMxA和ePWMxB。
如下图所示,这些ePWM模块通过一个同步时钟信号联系在一起,当需要的时候可以将这些模块看做是分开对立的系统。
对于产生单相的SPWM波,使用ePWM1模块即可。
ePWM模块包含以下子模块:时基子模块、计数子模块、动作限定子模块、死区生成子模块、PWM输出断路器子模块、TZ子模块、事件触发子模块。
每个ePWM模块的详细电路框图如下:1、 时基子模块与PWM 周期的确定每个ePWM 都有自己独立的时基子模块这些时基子模块确定了每个ePWM 模块的事件时间。
这些ePWM 模块在同步时钟下是独立的系统。
PWM 的周期和频率由时基周期寄存器(TPBRD )的值和时基计数器的模式共同的决定。
选择连续增减计数模式则周期为:TBCLK T TPBRD T ⨯⨯=2对于一个调制波为30Hz 的正弦波,开关频率为20KHz ,令时基时钟的分频值等于系统时钟的值为100MHz 。
此时TPBRD 的值应该为2500。
时基相位寄存器设置为0。
2、比较计数子模块比较数子模块将时基计数器的值与比较计数器的值进行比较,当时基计数器的值与比较计数器的值相等时,比较计数子模块将产生相应的事件。
比较计数子模块通过2个比较计数器来产生2个独立的比较事件,对于增减计数模式,当比较计数器的值在0-TPBRD之间时,每个周期发生两次比较事件。
这些事件将送到动作限定子模块去。
对于SPWM的生成,通过改变计数比较器的值就产生了正弦的调制波。
利用这两个比较器变可以产生单相的SPWM波。
3、动作限定子模块对于SPWM的生成,通过改变计数比较器的值就产生了正弦的调制波。
利用这两个比较器变可以产生单相的SPWM波。
动作限定子模块对PWM波形的产生有重要的作用,它将不同的事件转换为不同的动作,产生不同波形的ePWM输出。
PWM的控制
第14章
PWM的控制
14.4 程序编写 案例:是一个LED 灯从亮到暗,再从 暗到亮。
流程图如 右图
THANK YOU VERY MUCH !
本章到此束, 谢谢您的临!
PWM的控制
面积等效原理:
分别将如图1所示的电压窄脉冲加在一阶惯性 环节(R-L电路)上,如图2a所示。其输出电流 i(t)对不同窄脉冲时的响应波形如图2b所示。从 波形可以看出,在i(t)的上升段,i(t)的形状也略 有不同,但其下降段则几乎完全相同。脉冲越窄, 各i(t)响应波形的差异也越小。如果周期性地施 加上述脉冲,则响应i(t)也是周期性的。用傅里 叶级数分解后将可看出,各i(t)在低频段的特性 将非常接近,仅在高频段有所不同。
位
7
6
CR
5
-
4
-
3
-
2
-
1
0
符号 CF
CCF1 CCF0
第14章
PWM的控制
描述 PCA计数器阵列溢出标志 PCA计数器阵列运行控制位
CCON 寄存器的具体描述
位 7 6 1 0 符号 CF CR
5-2 -
保留为将来之用
CCF1 PCA模块1中断标志 CCF0 PCA模块0中断标志
第14章
PWM的控制
4
3 2 1 0
CAPNn 负捕获。下降沿有效
MATn T0Gn PWMn 匹配 翻转 脉宽调制模式。
ECCFn 使能CCFn中断
第14章
PWM的控制
(2)STC12C5410AD单片机实现PWM的原理 当CL SFR的值小于{EPCnL,CCAPnL}时,输出 为低。当PCA CL SFR的值大于或等于 {EPCnL,CCAPnL}时,输出为高。当CL的值由 FF变为00溢出时, {EPCnH,CCAPnH}的内容装 载到{EPCnL,CCAPnL}中。这样就可以实现无干 扰地更新PWM,要使用PWM模式,模块 CCAPMn寄存器PWMn和ECOMn位必须复位。
宏晶科技STC12C5410AD系列单片机器件手册说明书
STC12C5410AD系列单片机器件手册 --- 1个时钟/机器周期8051 ---无法解密 ---低功耗,超低价 ---高速,高可靠 ---强抗静电,强抗干扰STC12C5412, STC12C5412ADSTC12C5410, STC12C5410ADSTC12C5408, STC12C5408ADSTC12C5406, STC12C5406ADSTC12C5404, STC12C5404ADSTC12C5402, STC12C5402ADSTC12LE5412,STC12LE5412ADSTC12LE5410,STC12LE5410ADSTC12LE5408,STC12LE5408ADSTC12LE5406,STC12LE5406ADSTC12LE5404,STC12LE5404ADSTC12LE5402,STC12LE5402AD技术支援:宏晶科技(深圳) www.MCU-Memory.com support@MCU-Memory.comUpdate date: 2006-4-15 (请随时注意更新)宏晶科技:专业单片机/存储器供应商 www.MCU-Memory.com STC12C5410AD系列 1T 8051单片机中文指南2领导业界革命 覆盖市场需求宏晶科技是新一代增强型8051单片机标准的制定者,致力于提供满足中国市场需求的世界级高性能单片机技术,在业内处于领先地位,销售网络覆盖全国。
在保证质量的基础上,以极低的价格和完善的服务赢得了客户的长期信赖。
在广受欢迎的STC89C51全系列单片机的基础上,现全力推出“1个时钟/机器周期”的单片机,全面提升8051单片机性能。
欢迎海内外厂家前来洽谈合作!新客户请直接联系深圳,以获得更好的技术支持与服务。
STC 12C5410AD系列 1T 8051 单片机 新客户请直接联系深圳以获得更好的技术支持和服务 欢迎海内外厂家前来洽谈合作 传真至深圳申请STC单片机 样片及ISP下载线/编程工具●高速:1个时钟/机器周期,RISC型8051内核,速度比普通8051快12倍●宽电压:5.5~3.4V,2.0~3.8V(STC12LE5410AD系列)●低功耗设计:空闲模式,掉电模式(可由外部中断唤醒)●工作频率:0~35MHz,相当于普通8051:0~420MHz ---实际可到48MHz,相当于8051: 0~576MHz●时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置●12K/10K/8K/6K/4K/2K字节片内Flash程序存储器,擦写次数10万次以上●512字节片内RAM数据存储器●芯片内E2PROM功能●ISP / IAP,在系统可编程/在应用可编程,无需仿真器●10位ADC,8通道,STC12C2052AD系列为8位ADC●4通道捕获/比较单元(PWM/PCA/CCU),STC12C2052AD系列为2通道 ---也可用来再实现4个定时器或4个外部中断(支持上升沿/下降沿中断)●2个硬件16位定时器,兼容普通8051的定时器。
单片机中断系统和定时计数器
单片机中断系统和定时计数器在单片机的世界里,中断系统和定时计数器就像是两个得力的助手,为单片机的高效运行和精确控制发挥着至关重要的作用。
接下来,让我们一起深入了解一下这两个重要的概念。
首先,咱们来聊聊中断系统。
想象一下,单片机正在专心致志地执行着一个任务,突然有个紧急情况发生了,比如外部设备传来了一个重要的数据需要立即处理。
这时候,中断系统就像是一个“紧急警报器”,让单片机暂停当前的任务,迅速去处理这个紧急情况。
处理完之后,再回到原来被中断的地方继续执行之前的任务。
中断系统的好处那可太多了。
它大大提高了单片机的工作效率。
要是没有中断,单片机就得一直按照顺序依次执行任务,可能会错过一些关键的信息或者无法及时响应紧急事件。
有了中断,单片机就能在多个任务之间灵活切换,做到“分身有术”。
中断系统一般由中断源、中断允许控制、中断优先级控制和中断响应等部分组成。
中断源就是那些能引起中断的事件,比如外部中断、定时器中断、串口中断等等。
中断允许控制就像是一道“开关”,决定了是否允许某个中断源发出中断请求。
中断优先级控制则是用来确定当多个中断同时发生时,先处理哪个中断,后处理哪个中断。
再来说说定时计数器。
在很多实际应用中,我们经常需要对时间进行精确的测量和控制,这时候定时计数器就派上用场了。
比如说,我们要控制一个小灯每隔1 秒钟闪烁一次,或者要统计外部脉冲的个数,都可以用定时计数器来实现。
定时计数器的工作原理其实并不复杂。
它就像是一个不断计数的“小闹钟”。
可以设置为定时模式或者计数模式。
在定时模式下,它根据单片机内部的时钟信号进行计数,当计数值达到设定的值时,就会产生一个定时中断。
在计数模式下,它对外部输入的脉冲进行计数,当计数值达到设定值时,也会产生中断。
比如说,我们要实现一个 1 毫秒的定时,假设单片机的时钟频率是12MHz,那么一个机器周期就是 1 微秒。
如果我们要定时 1 毫秒,就需要设置定时计数器的初值,让它经过 1000 个机器周期后产生中断。
STCMCU的软件和硬件PCAPWM输出
STCMCU的软件和硬件PCAPWM输出软件⽅式输出PWMPWM⽤于输出强度的控制, 例如灯的亮度, 轮⼦速度等, STC89/90系列没有硬件PWM, 需要使⽤代码模拟使⽤纯循环的⽅式实现PWM⾮中断的实现(SDCC环境编译)#include <8052.h>#define Led10 P0_7typedef unsigned int u16;int atime = 64;// 仅作为延时, pms取值区间为 0 - 64void delay(u16 pms) {u16 x, y;for (x=pms; x>0; x--) {for (y=11; y>0; y--);}}// 这⾥控制占空⽐, i取值区间为 0 - 64,// i越⼤脉冲宽度越低, 因为输出是低位点亮, 所以i越⼤LED越亮void ledfade(u16 i) {Led10 = 0;delay(i);Led10 = 1;delay(atime-i);}int main(void) {u16 a, b;// 每个循环, ⼩灯while(1) {// a增⼤, 脉冲宽度降, 亮度增for (a=0; a<atime; a++) {for (b=0; b < (atime - a)/4; b++) {ledfade(a);}}// a减⼩, 脉冲宽度增, 亮度降for (a=atime; a>0; a--) {for (b=0; b < (atime - a)/4; b++) {ledfade(a);}}}}使⽤中断的⽅式因为需要PWM输出的场景, ⼀般都不会仅仅有PWM输出, 所以通常会做到定时器中断中, 由中断来实现将1和0的时间宽度设置为定时器, 直接做到定时器中断⾥⾯这个代码中1. pwm_flag代表了输出的0和1, 每次定时器中断时进⾏切换, 并设置下⼀次中断的时间宽度2. 缺点: ⽤TR0做开关, 但是这种停⽌⽅式, 停⽌后输出可能还是1/* Global variables and definition */#define PWMPIN P1_0unsigned char pwm_width;bit pwm_flag = 0;void pwm_setup(){TMOD = 0; // Timer mode 0, 13bitpwm_width = 160;EA = 1;ET0 = 1;TR0 = 1;}/* Timer 0 Interrupt service routine */void timer0() interrupt 1{if (!pwm_flag) { /* Start of High level */pwm_flag = 1; /* Set flag */PWMPIN = 1; /* Set PWM o/p pin */TH0 = pwm_width; /* Load timer */TF0 = 0; /* Clear interrupt flag */} else { /* Start of Low level */pwm_flag = 0; /* Clear flag */PWMPIN = 0; /* Clear PWM o/p pin */TH0 = 255 - pwm_width; /* Load timer */TF0 = 0; /* Clear Interrupt flag */}}void pwm_stop(){TR0 = 0; /* Disable timer to disable PWM */}使⽤定时器模式2和中断实现的PWM输出使⽤定时器⼯作模式2定时器通过对变量tt做计数, 与scale做⽐较, 确定是否翻转电压这⾥scale分10个等级, scale=1时占⽐1/10个PWM周期(250us * 10 = 2.5ms), 在主循环⾥改变scale因为是低电平点亮LED, 所以tt<=scale的时间LED是暗的, scale增⼤时亮度变⼩, 这个可以根据⾃⼰电路的情况调整这样存在的问题是修改scale的值时, 可能正好在tt计数范围的中间, 导致输出出现⽑刺, 可以通过增加⼀个中间变量来解决, 在tt计数时⽐较的是这个中间变量, 在周期结束时再⽤新值更新这个中间变量#include<reg51.h>sbit P10 = P1^0;sbit P11 = P1^1;unsigned int scale; //占空⽐控制变量void main(void) {unsigned int n; //延时循环变量TMOD = 0x02; //定时器0,⼯作模式2, 8位定时, TL0溢出时⾃动重载TH0中的值TH0 = 0x06; //定时, 250us⼀个中断 (12M晶振, 12分频后1MHz, 单次1us)TL0 = 0x06; //初始值TR0 = 1; //启动定时器0ET0 = 1; //启动定时器0中断EA = 1; //开启总中断while(1) {for(n = 0; n < 50000; n++); //延时50msscale++; //占空⽐控制, ⾃增if(scale == 10) scale = 0; //使占空⽐从0-10循环变化}}timer0() interrupt 1 {static unsigned int tt; //tt⽤来保存当前时间在⼀个时钟周期的位置tt++; //每中断⼀次,即每经过250us,tt的值⾃加1if (tt == 10) { //中断10次定时2.5mstt = 0; //使tt=0,开始新的周期,达到循环的效果P10 = 0; //点亮LED}if (tt <= scale) { //如果占空⽐与中断次数相同时,此时输出⾼电平P10 = 1; //熄灭LED灯}}使⽤定时器模式2和中断实现的多路PWM输出实现多路PWM输出的思路1. 使⽤⼀个基础定时器, 定时器时间不能太⼤, 例如设置为100us, 可以⽤定时器模式2, 这样初始值能⾃动重置2. 设定⼀个PWM周期, 这个周期就是定时器间隔的整数倍, 例如10倍定时器周期, 就是1000us = 1ms3. 对于每个PWM通道设置⼀个计数, 计数在达到PWM周期时置零, 这是实现PWM周期的基础设置⼀个初始输出, ⾼电平或低电平设置⼀个输出宽度, 计数达到这个宽度值时翻转. 这个宽度决定了输出翻转的时间, ⽤于控制占空⽐4. 因为每个指令的执⾏时间需要1-2个CPU周期, 所以当通道数增加后, 误差会增⼤代码例⼦: 这⾥⽤8个位指定4个轮⼦的PWM输出, 每个轮⼦两位是为了控制轮⼦的正反向#include <reg52.h>typedef unsigned int u16;typedef unsigned char u8;// Wheel 0sbit P1_0 = P1^0;sbit P1_1 = P1^1;// Wheel 1sbit P1_2 = P1^2;sbit P1_3 = P1^3;// Wheel 2sbit P1_4 = P1^4;sbit P1_5 = P1^5;// Wheel 3sbit P1_6 = P1^6;sbit P1_7 = P1^7;/*Duty Cycle = Toogle_P1_x / PWM_Period;*/u8 PWM_Period = 128; // PWM Period = N * Timer delay(100us), between 10 - 254 u8 Toggle_W0 = 0; // Toggle of Wheel 0u8 Dir_W0 = 0; // Direction, 0:P1_0=0,P1_1=PWM, 1:P1_1=0,P1_0=PWMu8 Toggle_W1 = 0; // Toggle of Wheel 1u8 Dir_W1 = 0; // Direction, 0:P1_2=0,P1_3=PWM, 1:P1_3=0,P1_2=PWMu8 Count_W0, Count_W1;void Time0_Init(void){TMOD = 0x02; // Mode 2, 8-bit and auto-reloadTH0 = 0x9C; // 0x9c = 156, timer of 100us (12MHz OSC)TL0 = 0x9C;ET0 = 1;EA = 1;TR0 = 1;EX0 = 1; EX1 = 1; // Enable external interrupt 0 and 1IT0 = 1; IT1 = 1; // Toggle = jump}void main(){Time0_Init();while(1);}void Timer0_IT() interrupt 1{// W0if(Count_W0 == Toggle_W0) {if (Dir_W0 == 0) { // P1_1=PWMP1_1 = 0;} else { // P1_0=PWMP1_0 = 0;}}if(Count_W0 == PWM_Period - 1) {Count_W0 = 0;if (Dir_W0 == 0) {P1_0 = 0;P1_1 = 1;} else {P1_0 = 1;P1_1 = 0;}} else {Count_W0++;}// W1if(Count_W1 == Toggle_W1) {if (Dir_W1 == 0) { // P1_3=PWMP1_3 = 0;} else { // P1_2=PWMP1_2 = 0;}}if(Count_W1 == PWM_Period - 1) {Count_W1 = 0;if (Dir_W1 == 0) {P1_2 = 0;P1_3 = 1;} else {P1_2 = 1;P1_3 = 0;}} else {Count_W1++;}}// W0 dir0->maxvoid W0_dir0(void){if (Dir_W0 == 0) {Toggle_W0++;if(Toggle_W0 > PWM_Period) { Toggle_W0 = PWM_Period; }} else {Toggle_W0--;if(Toggle_W0 == 0) {Dir_W0 = 0;}}}// W0 dir1->maxvoid W0_dir1(void){if (Dir_W0 == 0) {Toggle_W0--;if(Toggle_W0 == 0) {Dir_W0 = 1;}} else {Toggle_W0++;if(Toggle_W0 > PWM_Period) { Toggle_W0 = PWM_Period; }}}// W1 dir0->maxvoid W1_dir0(void){if (Dir_W1 == 0) {Toggle_W1++;if(Toggle_W1 > PWM_Period) { Toggle_W1 = PWM_Period; }} else {Toggle_W1--;if(Toggle_W1 == 0) {Dir_W1 = 0;}}}// W1 dir1->maxvoid W1_dir1(void){if (Dir_W1 == 0) {Toggle_W1--;if(Toggle_W1 == 0) {Dir_W1 = 1;}} else {Toggle_W1++;if(Toggle_W1 > PWM_Period) { Toggle_W1 = PWM_Period; }}}void IT0_INT() interrupt 0{W1_dir0();}void IT1_INT() interrupt 2{W1_dir1();}硬件PWM51系列单⽚机的增强型版本, 有些带PCA(Programmable Counter Array 可编程计数序列)模块, 可以通过PCA实现PWM的输出.PCA介绍PCA其实就是⼀个增强型的计数器, 这个计数器中的⼀些元素是可以在代码中设置的, 例如可以设置的计数脉冲源, 可以来⾃于系统时钟, 系统时钟可以是不分频, 2分频, 4分频, 6分频, 8分频等; 来⾃计数器; 来⾃外部输⼊的时钟可以设置计数的触发条件, 上升沿还是下降沿, 或者都计数. 最后这个计数⽅式, 可以⽤来计算脉宽可以设置16位的⽐较值不占⽤CPU资源, 这点很重要, 可以使输出更加精确和稳定因为上⼀点, 有些型号可以做到在CPU处于IDLE状态时继续计数(输出)可以⽤PCA实现PWM输出功能STC12C5A60S2系列PCA实现的PWM参考STC12C5A60S2的⼿册有两路输出, 默认PWM0:P1.3, PWM1:P1.4, 可以换到P4⼝: PWM0:P4.2, PWM1:P4.3这个在AUXR1⾥⾯控制两路共⽤PCA定时器, 定时器的频率由CMOD控制因为PWM输出是8位的, 所以定时器的频率/256就是PWM频率两路输出的占空⽐是独⽴变化的, 与当前的[EPCnL, CCAPnL]的值有关前者的值在 PCA_PWM0 PCA_PWM1 ⾥控制后者的值在 CCAP0L,CCAP0H 和 CCAP1L,CCAP1H ⾥控制先输出低, 当CL的值⼤于等于[EPCnL, CCAPnL]时, 输出为⾼当CL由FF变为00时, 输出变低, 同时⾃动将[EPCnH, CCAPnH]的值装载到[EPCnL, CCAPnL], 实现⽆⼲扰更新PWM占空⽐下⾯的代码中, CCAP1H 控制的就是装载值, CCAP1L 控制的是⽐较值, PCA_PWM1 控制的是EPCnH 和 EPCnL如果 EPCnL = 0, 那么正常输出如果 EPCnL = 1, 那么会⼀直输出低电平#include <STC12C5A60S2.H>void main() {CCON = 0; // Initial PCA control register// PCA timer stop running// Clear CF flag// Clear all module interrupt flagCL = 0; // Reset PCA base timerCH = 0;CMOD = 0x02; // Set PCA timer clock source as Fosc/2// Disable PCA timer overflow interruptCCAP0H = CCAP0L = 0x80; // PWM0 port output 50% duty cycle suquare waveCCAPM0 = 0x42; // PCA module-0 as 8-bit PWM, no PAC interruptCCAP1H = CCAP1L = 0xFF; // PWM1port output 0% duty cycle square wavePCA_PWM1 = 0x03; // PWM will keep low levelCCAPM1 = 0x42; // PCA module-0 as 8-bit PWM, no PAC interruptCR = 1; // PCA timer start runwhile(1);}对PCA_PWM1的说明;PCA_PWMn: 7 6 5 4 3 2 1 0; EBSn_1 EBSn_0 - - - - EPCnH EPCnL;B5-B2: 保留;B1(EPCnH): 在PWM模式下,与CCAPnH组成9位数。
物联网应用实训-PWM占空比控制
应用技术基础训练
PWM占空比控制程序设计
能力目标: 1.掌握PWM概念与工作原理 2.能够采用定时器中断方式实现PWM及占空比 3.能够采用内置PWM控制器实现PWM及占空比 4.能够在LED上实现呼吸灯效果 5.能够在直流电机上实现速度控制
一、PWM的概念与工作原理
PWM (脉冲宽度调制),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用 微处理器的数字输出来对模拟电路进行控制的 一种非常有效的技术,广泛应用在从测量、通 信、功率控制与变换的许多领域中。
定时器/计数器基本结构图
定时器/计数器工作原理
在作定时器使用时,输入的时钟脉冲是由晶体 振荡器的输出经12分频后得到的。实际上,定 时器就是单片机机器周期的计数器。因为每个 机器周期包含晶体振荡器的12个振荡周期,而 每一个机器周期定时器加1,故其频率为晶振 频率的1/12。如果晶振频率为12MHz,则定时 器每接收一个输入脉冲的时间为1μs。 选择计数器工作方式时,计数脉冲来自相应的 外部输入引脚T0(P3.4)或T1(P3.5)。在这 种情况下,当检测到输入引脚上的电平由高跳 变到低时,计数器就加1。
PWM的概念
简而言之,PWM是一种对模拟信号电平进行数 字编码的方法。通过高分辨率计数器的使用, 方波的占空比被调制用来对一个具体模拟信号 的电平进行编码。 PWM信号仍然是数字的,因为在给定的任何时 刻,满幅值的直流供电要么完全有(ON),要么 完全无(OFF)。电压或电流源是以一种通(ON) 或断(OFF)的重复脉冲序列被加到模拟负载上 去的。通的时候即是直流供电被加到负载上的 时候,断的时候即是供电被断开的时候。只要 带宽足够,任何模拟值都可使用PWM进行编码。
中断定时计数器课件
例 5 编写一段程序,功能要求为:当P1.0引脚的电平正跳变时,对P1.1的输入脉冲 进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位 存R1,低位存R0)。 解答:将P1.1的输入脉冲接入INT0,即使用T0计数器完成对P1.1口的脉冲计数。编写程 序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: JNB P1.0,MAIN MOV TMOD,#05H ;定 时器/计数器T0为计数方式1 SETB TR0 ;启动T0,开 始计数 SETB ET0 ;允许T0中断 SETB EA ;CPU开中断 WAIT: JB CLR CLR MOV MOV AJMP INC RETI P1.2,WAIT EA TR0 R1,TH0 R0,TL0 $ R2
ORG 000BH CPL P1.0 MOV TL0, #9CH RETI ORG 001BH CPL P1.1 MOV TH0, #38H RETI ;TL0 中断服务程序 ;P1.0 取反 ;重新装入计数初值 ;中断返回 ;TH0 中断服务程序 ;P1.1取反 ;重新装入计数初值 ;中断返回
AJMP DEL REP:CPL P1.0 AJMP DEL ; ;若计数溢出,则输出取反
TINT0: JNB 20H.0,NEXT MOV TL0,#0B5H MOV TH0,#0FFH CLR P1.1 CPL 20H.0 SJMP LAST NEXT: MOV TL0,#0CEH MOV TH0,#0FFH SETB P1.1 CPL 20H.0 LAST:RETI
方法二: 采用方式2 定时器中断 加延时程序
ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P MAIN: MOV TMOD,#02H;定时器/ 计数器T0为定时方式2 IT0P:CLR EA MOV TL0,#4AH;定时 CLR P1.0 ;关中断 364μs初值赋值 MOV R0,#9 ;延时26μs SETB TR0;启动T0,开始 DLY:DJNZ R0,DLY MOV TL0,#4AH ;定时364μs 计数 初值赋值 SETB ET0;允许T0中断 SETB P1.0 SETB EA;CPU开中断 SETB EA RETI SETB P1.0 WAIT: AJMP WAIT
用PCA实现16位PWM
PCA0CPMn
ECCMT PE
C A A A O WC
O P P T G MC
MP N n n n F
nnn
n
00x0 x
PCA0CPLn
允许
8位比较器
匹配 S SET Q
CEXn 交叉开关
PCA时基
RQ CLR
PCA0L
溢出
图4. PCA被配置为8位PWM方式
端口I/O
4
AN007-1.0 DEC00
AN007 — 用 PCA 实现 16 位 PWM
PCA 简介
PCA包含一个16位的计数器/定时器和5个捕捉/比较模块,如图2所示。计数器/定时器有一个16 位的计数器/定时器寄存器(PCA0H:PCA0L)、一个用于选择时间基准的方式寄存器(PCA0MD) 和一个包含计数器/定时器运行控制及各模块捕捉/比较标志的控制寄存器(PCA0CN)。每个捕捉/ 比较模块有一个用于选择模块工作方式(边沿触发捕捉、软件定时器、高速输出或PWM)的配置 寄存器(PCA0CPMx)和一个16位的捕捉/比较寄存器(PCA0CPHn:PCA0CPLn)。
FFFFF 43210
允许
16位比较器
PCA时基
PCA0L
PCA0H
匹配
0
1
电平切换
TOGn
0 CEXn 1
交叉开关
图6. PCA配置为高速输出方式
端口I/O
AN007-1.0 DEC00
5
AN007 — 用 PCA 实现 16 位 PWM
CEXn
PCA0CPn PWM
匹配发生; 中断已调用
0x0000
在主PCA计数器(PCA0L)的低字节发生溢出时,模块的比较寄存器的高字节被拷贝到模块的 比较寄存器的低字节(PCA0CPLn=PCA0CPHn)。通过更新PCA0CPHn就能改变占空度。拷贝过程 保证在输出端不产生毛刺。
空心杯电机的PWM调制及PI控制方法
空心杯电机的PWM调制及PI控制方法摘 要:由于空心杯无刷直流电动机的独特结构,使它具有体积小、响应速度快、拖动性能好等优点,被广泛地应用于国民经济的各个领域。
本文就如何运用PWM调制和PI控制对空心杯电机进行调速进行了研究和探讨。
关键词: 空心杯无刷直流电动机;脉宽调制;比例积分控制;The PWM and PI Control Method of the Drug Cup MotorZhao huaAbstract:Because of the special construction of the drag cup brushless DC motor, it owns s mall capacity, high response speed, good drive performance, etc. It is widely used in each f ield of national economy. This dissertation will carry on how to apply PWM and PI control in to velocity modulation.Key words: drag cup brushless DC motor; PWM; PI control;1引言空心杯无刷直流电机保持着有刷直流电机的优良机械及控制特性,在电磁结构上和有刷直流电机一样,但它的电枢绕组放在定子上,转子上放置永久磁钢。
空心杯无刷直流电机的电枢绕组像交流电机的绕组一样,采用多相形式,经由逆变器接到直流电源上,定子采用位置传感器或无位置传感器技术实现电子换向代替有刷直流电机的电刷和换向器,各项逐次通电产生电流,和转子磁极主磁场相互作用,产生转矩,使电机旋转[1]。
和有刷直流电机相比,空心杯无刷直流电机由于消除了电机滑动接触机构,因而消除了故障的主要根源。
转子上没有绕组,也就没有了电的损耗[1]。
广州周立功单片机发展有限公司 P89LV51RD2 微控制器手册说明书
P89LV51RD2器件手册1. 概述P89LV51RD2是一款80C51微控制器,包含64kB Flash和1024字节的数据RAM。
P89LV51RD2的典型特性是它的X2方式选项。
设计者可通过该特性来选择应用程序以传统的80C51时钟频率(每个机器周期包含12个时钟)或X2方式(每个机器周期包含6个时钟)的时钟频率运行,其中,选择X2方式可在相同时钟频率下获得2倍的吞吐量。
从该特性获益的另一种方法是将时钟频率减半来保持特性不变,这样可以极大地降低EMI。
Flash程序存储器支持并行和串行在系统编程(ISP)。
并行编程方式提供了高速的分组编程(页编程)方式,可节省编程花费和推向市场的时间。
ISP允许在软件控制下对成品中的器件进行重复编程。
应用固件的产生/更新能力实现了ISP的大范围应用。
P89LV51RD2也可采用在应用中编程(IAP),允许随时对Flash程序存储器重新配置,即使应用程序正在运行时也不例外。
2. 特性80C51核心处理单元;3V的工作电压,操作频率为0~33MHz;64kB的片内Flash程序存储器,具有ISP(在系统编程)和IAP(在应用中编程)功能;通过软件或ISP选择支持12时钟(默认)或6时钟模式;SPI(串行外围接口)和增强型UART;PCA(可编程计数器阵列),具有PWM和捕获/比较功能;4个8位I/O口,含有3个高电流P1口(每个I/O口的电流为16mA);3个16位定时器/计数器;可编程看门狗定时器(WDT);8个中断源,4个中断优先级;2个DPTR寄存器;低EMI方式(ALE禁能);兼容TTL和CMOS逻辑电平;掉电检测;低功耗模式掉电模式,外部中断唤醒;空闲模式;PDIP40,PLCC44和TQFP44的封装;3. 定购信息表1 定购信息类型号封装名称描述版本P89LV51RD2BAPLCC44 塑料行间芯片运载,44脚 SOT187-2P89LV51RD2FAP89LV51RD2BBC TQFP44塑料小型方块扁平封装;44脚SOT376-1P89LV51RD2BN PDIP40塑料双列直插;40脚SOT129-1表2 定购选项类型号 温度范围 频率P89LV51RDBA 0℃~+70℃ P89LV51RD2FA -40℃~+85℃ P89LV51RD2BBC 0℃~+70℃ P89LV51RD2BN 0℃~+70℃0~33MHz4.功能框图图1 P89LV51RD2功能框图5.1 管脚RSTNCINT0/P3.2T0/P3.4T1/P3.5图2PLCC44管脚配置INT0/P3.2INT1/P3.3图4 TQFP44管脚配置5.2 管脚描述表3 P89LV51RD2管脚描述管脚符号DIP40 TQFP44 PLCC44类型描述P0.0~P0.7 39~32 37~30 43~36 I/O P0口:P0口是一个开漏双向I/O口。
STC单片机PWM的应用
STC单片机PWM应用以下文字STC8G为范本,进行说明。
STC8G系列单片机PWM模块是和PCA模块、CCP模块复用的。
STC8G内部有3组PWM脉宽调制输出模块。
脉宽调制是使用程序来控制波形的占空比、周期、相位波形的一种技术,在三相电机驱动、D/A转换等场合有广泛的使用。
1.基本寄存器PWM在本质上是计时器和比较器的组合,它需要设定目标计数值,然后由计时器进行计数,将计数的值和目标计数值进行比较,当计数值和目标计数值相等时,就要操作输出信号。
MCU是通过寄存器来设置控制PWM的。
图一既然要计时,就要有一个基本时钟,而PWM通常会使用MCU的系统时钟作为基准,MCU提供对PWM的时钟的设置,这些设置通常是做选择题,就是在MCU时钟的基础上,来选择进行什么样的分频。
STC8G 系列单片机也不例外。
PCA的模式寄存器——CMOD,就提供了一个时钟控制选择的接口,如图一所示。
此外,同样计时还需要一个计时寄存器用来保存当前的经历了多少时间,还要有目标时间。
这些都是通过寄存器来操控的。
在STC8G 系列单片机中,计时寄存器有两个——CL和CH,每个寄存器都是8位的。
根据PWM的位数不同,选择CH、CL中有效的位。
在PCA的每个时钟内,计时寄存器的内容会增1。
而存放目标时间的寄存器,就多样一些,是根据PWM的位数不同而不同的。
这里只描述两种,一种是8位的PWM,存放目标计时数的寄存器是分散到两个寄存器中的,一个是CCAPnL做为低8位(n是PWM的通道号),还有一部分是在寄存器PCA_PWMn的bit0位,这一位主要是为了方便持续输出0或者1。
另外一种是10位的PWM,它的计数也分散在CCAPnL寄存器和PCA_PWMn寄存器中。
CCAPnL为低8位,PCA_PWMn中XCCAPnL[1:0]是Bit9和Bit10,以及EPCnL做为Bit11。
为了方便PWM的重复操作,PWM还有一个与计时寄存器对应的重载寄存器,目标时间寄存器的值是从重载从重载寄存器中复制过去的。
PWM的调速原理与应用—小车调速
17-2. P89V51RD2的PWM功能模块结构与应用 的 功能模块结构与应用
P89V51RD2的几个重要寄存器
CMOD-PCA计数器方式寄存器 - 计数器方式寄存器 CCON-PCON计数器控制寄存器 - 计数器控制寄存器 CCAPMn-PCA模块比较 捕获寄存器(n=1、2、3、4、5) - 模块比较/捕获寄存器 模块比较 捕获寄存器( 、 、 、 、 )
11
置位CCON寄存器的中断标志位 寄存器的中断标志位CCFn。 置位 寄存器的中断标志位 。 脚翻转。 使CEXn脚翻转。 脚翻转
电子发烧友 电子技术论坛SiChuan Engineering Technical College-1959
00:fosc/6 : 01:fosc/12 : 10:定时器0溢出 :定时器 溢出 11:ECI/P1.2脚的外部时钟 : 脚的外部时钟
ECF:PCA使能计数溢出中断:ECF=1时,使能寄存器 : 使能计数溢出中断: 位的中断。 使能计数溢出中断 时 使能寄存器CCON CF位的中断。ECF=0时, 位的中断 时 禁止该功N能 禁止该功 能。
CMOD-PCA计数器方式寄存器 - 计数器方式寄存器
位 符号 D7 CIDL D6 WDTE D5 D4 D3 D2 CPS1 D1 CPS0 D0 ECF
CIDL:计数器空闲控制:CIDL=0时,空闲模式下 :计数器空闲控制: 计数器继续工作。 时 空闲模式下PCA计数器继续工作。CIDL=1时, 计数器继续工作 = 时 空闲模式下PCA计数器禁能。 计数器禁能。 空闲模式下 计数器禁能 WDTE:看门狗定时器使能:WDTE=0时,禁止模块 的看门狗定时器功能。WDTE=1 :看门狗定时器使能: 的看门狗定时器功能。 时 禁止模块4的看门狗定时器功能 时使能看门狗定时器。 时使能看门狗定时器。 CPS1、CPS0 :PCA计数脉冲选择。 、 计数脉冲选择。 计数脉冲选择
单片机《用PCA实现PWM的输出》实验报告
《单片机原理与应用》实验报告姓名:学号:实验名称:班级:电信二班一、实验工具、器材Proteus仿真软件,Keil程序编写软件,示波器,AT89C51单片机二、实验原理a)脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。
也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。
按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。
在采样控制理论中有一个重要的结论,即冲量相等而形状不同的窄脉冲加在具有惯性的环节上,其效果基本相同。
冲量既指窄脉冲的面积。
这里所说的效果基本相同。
是指该环节的输出响应波形基本相同。
如把各输出波形用傅里叶变换分析,则它们的低频段特性非常接近,仅在高频段略有差异。
根据上面理论我们就可以用不同宽度的矩形波来代替正弦波,通过对矩形波的控制来模拟输出不同频率的正弦波。
b)PCA是一个具有捕获功能的16定时器,高八位TH0,低八位TLO,CCON寄存器控制着定时器的计数与中断请求。
CR=1表示开始计数,CCON最低位加上CMOD的最低位可以控制产生中断。
中断的向量是interrupt 7,进行中断时,必须首先将sbitCCF0=CCON^0;PCA模块0中断标志,由硬件置位,必须由软件清0。
软件清0,再进行其它他操作。
对于PCA计数阵列的计数频率则由CMOD的低三位控制,可以用此来控制计数频率,如以FOSC或分频计数均可。
每个PCA阵列均有两个模式控制寄存器,CCAPM0或1,它控制着PCA进行何种操作,如捕获,上升沿捕获,高速输出,PWM输出,可以直接通过设置来设置PCA的需要完成的功能。
三、硬件电路说明本实验使用AT89C51单片机,利用PCA定时器实现脉冲宽度调制,单片机P1.0,P1.1端口分别接两个开关,控制LED灯闪烁频率,P3.0接示波器和LED灯,输出矩形。
STC12内部PWM使用方法解析
STC12内部PWM使用方法解析STC12系列单片机是深圳市袋鼠电子股份有限公司出品的一款高性价比的51单片机系列产品。
STC12单片机内部集成了丰富的外设,包括多个定时器/计数器、串口通信接口、ADC(模数转换器)和PWM(脉冲宽度调制)输出等功能。
本篇文章将着重介绍STC12单片机的内部PWM模块的使用方法。
PWM是一种通过改变脉冲信号的占空比来控制电机、LED等器件的工作状态的技术。
在STC12单片机中,可以通过硬件PWM或软件PWM的方式来实现对外设的控制。
硬件PWM是由单片机内部的PWM模块自动产生的脉冲信号,不需要单片机的软件干预;而软件PWM是通过软件编程来实现对IO口的高低电平切换,从而模拟出脉冲信号。
下文将详细介绍STC12单片机的内部PWM模块的使用方法。
1. 定时器/计数器的选择:STC12单片机中有多个定时器/计数器模块可供选择,例如Timer0、Timer1、Timer2等。
这些定时器/计数器模块可用于产生PWM信号的时钟源。
一般情况下,Timer2是最常用的选择,因为它可以独立设置工作模式,而不会干扰其他外设的工作。
2.PWM的工作模式选择:STC12单片机的PWM模块提供了多种工作模式选择,如16位定时器模式、8位定时器模式、PCA脉冲宽度调制模式等。
在选择工作模式时,需要考虑到要控制的外设的需求,并根据外设的工作要求选择合适的PWM输出模式。
3.PWM的占空比设置:PWM的占空比是指PWM信号中高电平的时间占整个周期的比例。
在STC12单片机中,可以通过读写PWM模块相应的寄存器来设置占空比。
具体设置方法可参考STC12的相关资料或数据手册。
4.PWM输出管脚设置:在STC12单片机中,PWM信号可以通过多个IO口输出。
使用PWM输出功能时,需要将相应的IO口设置为PWM输出模式,并将PWM输出模块与IO口进行配置。
具体配置方法可参考STC12的开发工具或相关资料。
stc8 pca脉冲宽度
stc8 pca脉冲宽度STC8 PCA脉冲宽度PCA (Programmable Counter Array) 是STC8系列单片机中的一个重要特性,它用于生成精确的脉冲宽度调制(PWM)信号。
本文将详细介绍STC8 PCA脉冲宽度,从基础知识到具体应用,逐步回答您的疑问。
第一部分:什么是PCA?PCA是STC8系列单片机提供的一个功能强大的模块,能够产生PWM信号,使用它可以方便地控制外设设备。
PCA模块包含12位定时/计数器、比较器和比较器中断,可用于输出PWM信号、软件定时器等应用。
第二部分:PCA模块的工作原理PCA模块通过定时/计数器以固定频率进行计数,并在计数器的值达到某个阈值时产生中断。
比较器则用于比较定时/计数器的值和用户设定的比较值,当二者相等时触发中断或产生PWM输出。
通过设置不同的定时/计数器初值和比较值,可以产生不同频率和占空比的PWM信号。
第三部分:PCA模块的主要寄存器1. CCON寄存器:CCF0~CCF5分别表示PCA比较器0~5的中断标志位;2. CMOD寄存器:用于设置PCA时钟源、计数器溢出中断方式等;3. CL寄存器和CH寄存器:设置PCA定时/计数器的初值;4. CCAP0L寄存器和CCAP0H寄存器:设置PCA比较器0的比较值。
第四部分:生成PWM信号的步骤1. 设置PCA的时钟源:通过CMOD寄存器设置PCA的时钟源,可以选择内部系统时钟、时钟脉冲生成器或外部时钟输入。
2. 设置PCA的定时/计数器初值:将所需的PWM周期值加载到CL和CH寄存器中。
3. 设置PCA的比较值:将所需的占空比值加载到CCAP0L和CCAP0H 寄存器中。
4. 启动PCA模块:设置CMOD寄存器中的CF位实现PCA模块的启动,开始计数。
5. 判断中断标志位:通过CCON寄存器的CCF位判断是否发生PCA中断,即比较器的值与定时/计数器的值相等。
6. 清除中断标志位:在处理PCA中断后,需将相应的CCF位清零,以免再次触发中断。
PCA概述
PCA概述PCA就是一个定时器(计数器),和一般定时器原理相似:当PCA被使能则PCA由初值开始定周期累加,然后读取PCA的值。
我们通常的做法是比较PCA是否等于我们提前设定的定时标志寄存器的值,如果相等,则定时时间到。
PCA也是这样,不过PCA已经给我们准备好了定时标志寄存器,也已经做好了比较机制,不再需要我们在程序中添加比较语句。
PCA是一个16位定时器,它有5个定时标志寄存器(CCAPnH+CCAPnL,n=0,1,2,3,4),把PCA划分成5个定时模块,这5个模块分别有一个单片机引脚与之对应。
与标准的定时器/计数器相比,PCA对CPU 的干扰小,定时更精确,减少了软件设计。
二 PCA相关寄存器1.CMOD:PCA模式选择寄存器CIDL:0-单片机空闲模式PCA工作;1-单片机空闲模式PCA不工作WDTE:0-定时模块4禁用看门狗;1-定时模块4启用看门狗CPS1,CPS0:PCA定时频率选择位(具体请看DATASHEET)ECF:1-使CF为1时会产生中断2.CCON:PCA控制寄存器CF:PCA定时2BYTE溢出标志,当CF变高时,PCA会产生溢出中断,CF位必须软件清零,前提是ECF对CF使能CR:PCA启停位,0-停止PCA计数,1-启动PCA计数CCFn(n=0,1,2,3,4):当PCA某个模块检测到PCA定时器的值和自己的定时标志寄存器的值相等时,对应的CCFn会被硬件置位, CCFn必须软件清零,前提是对应的MAT对CCF使能3.CCAPMn:PCA比较模式选择寄存器(n=0,1,2,3,4)ECOM:0-关闭比较功能;1-打开比较功能CAPP:1-PCA的下降沿捕捉定时器的值CAPN:1-PCA的上升沿捕捉定时器的值(当CAPP和CAPN都为1时,上升沿和下降沿都捕捉)MAT:1-使能定时时间与定时标志寄存器相等时CCF由硬件置位的功能TOG:1-使能定时时间与定时标志寄存器相等时,该模块对应的管脚输出高电平的功能PWM:1-脉宽调制功能打开;0-脉宽调制功能关闭ECCF:1-使当CCF=1时可以产生中断4.CCAPnH, CCAPnL (n=0,1,2,3,4):PCA定时标志寄存器5.CH,CL:PCA定时寄存器6.CEXn (n=0,1,2,3,4):与各模块相关的单片机引脚三 PCA基本功能PCA基本功能有5种:捕捉功能、16位软件定时器功能、高速输出功能、脉冲宽度调制功能PWM和看门狗功能,其中看门狗功能只有模块4支持,具体说明如下:1.捕捉功能:选择方法:ECCF=1功能介绍:当给所用模块相应的管脚改变时,PCA会将当前定时器中的值捕捉到用户的定时标志寄存器中,捕捉后该模块的CCFn会被硬件置位,同时产生中断。
stc12c5a60s2单片机pwm应用
1.PCA工作形式存放器CMODPCA工作形式存放器的格式如下:CMOD:PCA工作形式存放器CIDL:空闲形式下是否停顿PCA计数的控制位当CIDL=0时,空闲形式下PCA计数器继续工作;当CIDL=1时,空闲形式下PCA计数器停顿工作;CPS2、CPS1、CPS0:PCA计数脉冲源选择控制位。
PCA计数脉冲选择如下表所示:例如,CPS2/CPS1/CPS0=1/0/0时,PCA/PWM的时钟源是SYSclk,不是定时器0,PWM 的频率为SYSclk/265假设要用系统时钟/3来作为PCA的时钟源,应让T0工作在1T形式,计数3个脉冲即产生溢出。
假设此时使用内部RC作为系统时钟〔室温情况下,5V单片机为11MHZ~15.5MHZ〕,可以输出14K~19K频率的PWM。
用T0的溢出可对系统时钟进展1~256级分频。
ECF:PCA计数溢出中断使能位。
当ECF=0时,制止存放器CCON中CF位的中断;当ECF=1时,允许存放器CCON中CF位的中断。
2. 2. PCA控制存放器CCONPCA控制存放器的格式如下:CCON:PAC控制存放器CF:PCA计数阵列溢出标志位。
当PCA计数器溢出时,CF由硬件位置。
假设CMOD 存放器的ECF位置位,那么CF标志可用来产生中断。
CF位可通过硬件或软件置位,但通过软件清零。
CR:PCA计数阵列运行控制位。
该位通过软件置位,用来起动PCA计数器阵列计数。
该位通过软件清零,用来关闭PCA计数器。
CCF1:PCA模块1中断标志。
当出现匹配或捕获时该位由硬件置位。
该位必须通过软件清零。
CCF0:PCA模块0中断标志。
当出现匹配或捕获时该位由硬件置位。
该位必须通过软件清零。
3. 3.PCA比较/捕获存放器CCAPM0和CCAPM1PCA模块0的比较/捕获存放器的格式如下:CCAPM0:PCA模块0的比较/捕获存放器B7:保存位将来之用。
ECOM0:允许比较器功能控制位。
PWM和PCA
PCA·2——可编程计数器阵列PCA(可编程计数器阵列Programmable Counter Array)有 5 个 16 位的捕获/比较模块与之相连,由高字节(PCA0H)和低字节(PCA0L)组成。
在读PCA0L 的同时自动锁存PCA0H 的值,先读PCA0L 寄存器将使PCA0H 的值得到保持(在读PCA0L 的同时),直到用户读PCA0H 寄存器为止。
读PCA0H 或PCA0L 不影响计数器工作。
PCA0MD 寄存器中的CPS2-CPS0 位用于选择PCA 计数器/定时器的时基信号。
CPS2 CPS1 CPS0时间基准0 0 0 系统时钟的12 分频0 0 1 系统时钟的4 分频0 1 0 定时器0 溢出0 1 1 ECI 负跳变(最大速率 = 系统时钟频率/4)1 0 0 系统时钟1 0 1 外部振荡源8 分频(与系统时钟同步)1.工作原理:当计数/定时器溢出时,PCA0MD中的计数器溢出标志(CF)被置为1,并产生中断请求(如果CF 中断被允许)。
将PCA0MD 中ECF 位设置为逻辑1 即可允许CF 标志产生中断请求。
当CPU 转向中断服务程序时,CF 位不能被硬件自动清除,必须用软件清0。
(注意:要使CF 中断得到响应,必须先总体允许PCA0 中断。
通过将EA 位(IE.7 )和EPCA0 (EIE1.3 )设置为逻辑1 来总体允许PCA0 中断。
清除PCA0MD寄存器中的CIDL 位将允许PCA 在微控制器内核处于等待方式时继续正常工作。
位7: CF: PCA 计数器/定时器溢出标志当PCA0 计数器/定时器从0xFFFF 到0x0000 溢出时由硬件置位。
在计数器/ 定时器溢出(CF)中断被允许时,该位置1 将导致CPU 转向CF 中断服务程序。
该位不能由硬件自动清0,必须用软件清0位6: CR: PCA0 计数器/定时器运行控制该位允许禁止PCA0 计数器定时器0:禁止PCA0 计数器定时器1:允许PCA0 计数器定时器位5:未用读=0b 写=忽略位4: CCF4 PCA0 模块4 捕捉/比较标志在发生一次匹配或捕捉时该位由硬件置位。
用STC单片机的PCA功能产生PWM_脉冲
用SST 单片机的PCA功能产生PWM 脉冲一、程序说明:SST单片机带有5路PCA模块,PCA功能比普通的单片机相比提供更强的计时性,同时更少CPU的干预,用它可以减少软件的开销和改进精度。
利用PCA的脉冲宽度调制(PWM)模式可以产生一个8位PWM,它通过比PCA定时器的低位(CL)和比较寄存器的低位(CCAPnL)产生。
当CL<CCAPnL时输出为低;当CL>=CCAPnL是输出为高。
要进入这个模式,可以对CC APMn的PWM和ECOM位置位。
在PWM 模式,输出的频率决定于PCA定时器的源。
由于只有一对CH 和CL寄存器,所有模块共享PCA定时器和频率。
输出的占空比由装在高位CCAPnH的值控制。
由于写入CCAPnH 寄存器不是同步的,写入高位的值不会马上装入CCAPnL做比较,直到输出的另一个周期(当CL从255到0翻转)。
用下面的公式计算任何占空比CCAPnH 值:CCAPnH=256(1-占空比)CCAPnH 是8 位整数,占空比是分数。
脉冲宽度调制频率二、相关寄存器介绍:标志功能CIDL 计数器空闲控制,CIDL=0时,PCA在空闲模式下继续工作。
CIDL=1时,PCA在空闲模式下关闭。
WDTE 看门狗定时器使能:WDTE=0时,禁止PCA模块4的看门狗功能。
WDTE=1时,使能。
CPS1 PCA计数脉宽选择位1fosc=振荡器频率ECF PCA使能计数器溢出中断:ECF=1,使能CCON 中的CF位,产生中断。
ECF=0时禁止CF的功能。
PCA定时器/计数器控制寄存器(CCON)标志功能CR PCA计数器运行控制位,由软件置位将PCA计数器打开,要关闭PCA计数器必须由软件清零。
三、PWM示例程序代码:#include <stdio.h>#include “SST89x5x4Rx.h”// 程序通过比较CL寄存器和CCPA0L的值产生脉冲。
// 如果CL >= CCAP0L输出为高,如果CL < CCAP0L输出为低。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11
中断优先级控制寄 7.2中断系统的结构 存器IP、IP2和 IPH、IP2H
12
7.3中断寄存器
D7 PPCA D6 PLVD
IP寄存器的地址为 B8H,可进行位寻 址 2.中断优先级控制寄存器IP、IP2和IPH、IP2H
D5 PADC
D4 PS
D3 PT1
D2 PX1
D1
D0
IPH寄存器的地址 为B7H PT0,不能进行 PX0 位寻址
4
中断的作用:
• • • 对突发事故,做出紧急处理。 根据现场随时变化的各种参数、信息,做出实时监控。
CPU与外部设备并行工作,以中断方式相联系,提高工作效率。
•
•
解决快速CPU与慢速外设之间的矛盾。
在多项外部设备同时提出中断请求情况下,CPU能根据轻重 缓急响应外设的中断请求。
5
7.1 中断的概念
9
7.2中断系统的结构
10
7.2中断系统的结构
• STC系列单片机复位后,IE和IE2寄存器的各位均 被清0,即所有中断源均处于禁止状态,由用户程 序对寄存器IE和IE2相应的位置1或清0,实现允许 或禁止各中断源的中断请求。 • 要改变IE寄存器各控制位的状态既可以用字节操 作指令MOV IE,#DATA来实现,也可用位操作指 令SETB或CLR实现。 • 改变IE2寄存器的各控制位,只能用字节操作指令 来实现,如:MOV IE2,#DATA。
23
7.5外部中断
IT0
IE0
注意:如果外部中断设置为下降沿触发方式时,必须在该外 部中断输入引脚至少保持1个系统时钟周期的高电平及1个时钟 周期的低电平,才能保证CPU检测到该下降沿。同样,如果外 部中断为低电平触发,则须在该引脚至少保持2个系统时钟周期 的低电平,这样才能保证CPU能够检测到该低电平信号。
D1 PD
D0 IDL
SMOD SMOD0 LVDF
POF
GF1
GF0
烧写程序时可以将P4.6引脚 若烧写程序时没有将 P4.6 引脚 设置为第二复位引脚 RST2 , 设置为第二复位引脚RST2, P4.6为低压检测中断引脚 EX_LVD
注意:上电复位后 ,电源控制寄存器PCON中的外部低压检测标 当外部供电电压产生波动时,无法保证单片机正常工作,可 志位 LVDF为1,要由软件清零(注意该位不可位寻址),建议清 以在单片机的外部低压检测中断服务程序中保存相关数据,避 零后,再读一次该位,若仍然为 1,说明电源还未达到正常值, 21 免掉电后数据丢失。 应再次将该位清零,直至检测到该位为0时再转入正常运行
7.5外部中断
外部中断0输入引脚
外部中断1输入引脚
22
7.5外部中断
TCON寄存器的地址为88H,可进行位寻址 D7 D6 D5 D4 D3 D2 D1 D0
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
IT1:外部中断1触发方式选择位。若 外部中断1请求中断标志。若外部中断 1输入引 外部中断 0请求中断标志。若外部中断 0输入引脚 IT1=0 , 引脚输入低电平信号触发中 外部中断 0 触发方式选择位。若 IT0=0, 脚产生外部触发信号时,硬件将 IE1, 位置 1,外 产生外部触发信号时,硬件将 IE0位置1,外部中 断;若 IT1=1 引脚为下降沿触发方 引脚输入低电平信号触发外部中断;若 部中断1设置为下降沿触发方式时, CPU响应 断0设置为下降沿触发方式时,当 CPU响应该中 式 IT0=1 , 引脚为下降沿触发方式 该中断时由硬件自动将 IE1位清0,如果设置为 断时由硬件自动将 IE0清0 ,如果设置为低电平触 低电平触发方式,必须在程序中通过指令清 0 发方式,必须在程序中通过指令清 0
2.中断优先权控制 当有中断请求 3. 中断允许与中断屏蔽 CPU同一时间只能响应一个中断 时,如果CPU 正在执行某一 请求。若同时来了两个或两个以 4. 中断响应与中断返回 在中断系统中,有一 条指令,需要 上 中断 请求,就必须有先有 个总中断使能位控制 执行完当前指 后。 !!! 所有中断是否允许, 令后再响应中 断,如果正在 另外每个中断源还有 执行RETI,或 各自的中断使能位控 者是访问IE、 制该中断是否允许, IP寄存器指令 时,需要执行 只有在总的中断允许 完当前指令后, 及相应中断也允许时, 再执行一条指 CPU才能响应中断。另 令才响应中断。 外,当有高优先级中 断正在响应时,也会 屏蔽同级中断和低优 先级中断。
8
7.3中断寄存器
1.中断允许寄存器IE2 IE2的地址为AFH,不能进行位寻址
D7
-
D6
-
D5
-
D4
-
D3
-
D2
-
D1
ESPI
D0
ES2
串行口2中断允许控制位。 SPI串行通信中断允许位。 当ES2= 0时,禁止串行口 2 ESPI=0时,禁止 SPI 中断; 中断;当 ES2 =1时,允许 当ESPI=1 ,允许SPI 中断 串行口2中断
第7章 中断控制、定时/计数器及 PCA/PWM的应用
2
主要内容
• • • • • • • • • 7.1 中断的概念 7.2中断系统的结构 7.3中断寄存器 7.4低压检测中断 7.5外部中断 7.6定时/计数器T0、T1的工作方式 7.7定时/计数器T0、T1的应用举例 7.8定时/计数器T2的工作方式及应用 7.9 PCA/PWM模块的结构及应用
6
中断允许寄 7.2中断系统的结构 存器IE和IE2
中断源、 中断请 求
7
7.3中断寄存器
1.中断允许寄存器IE IE寄存器的地址为A8H,可进行位寻址
D7
EA
D6
ELVD
D5
EADC
D4
ES
D3
ET1
D2
EX1
D1
ET0
D0
EX0
CPU的中断允许控制位,当EA=0时,所 外部中断 0中断允许控制位。 低压检测中断允许位。当 A/D转换中断允许位。当 ELVD = EADC 0 定时/计数器 T0溢出中断允 串行口 1 中断允许控制位。 外部中断 1 中断允许控制位。 有的中断源请求均被屏蔽;当 EA=1 时,允 定时 /计数器 T1溢出中断允许 当EX0 =0 时,禁止外部中 时,禁止低压检测中断;当 =0时,禁止 A/D 转换中断;当 ELVD 许控制位。当 ET0 = 0时, 当 ES = 0 时,禁止串行口 1 当EX1 许CPU检测中断源的标志位。 EA的作用使 控制位。当 ET1= =0 0时,禁止外部中断 时,禁止 断0中断;当 EX0 =1时,允 =1,允许低压检测中断。 EADC= 1时,允许 A/D 转换结 禁止 T0 中断;当 ET0= 1时, 中断;当 ES = 1 时,允许串 1 中断;当 EX1 = 1 时,允许 T1中断;当ET1=1时,允许 中断允许形成两级控制,即各中断源首先 许外部中断 0中断 束时中断。 允许T0 中断 行口 1 中断。 外部中断 1 中断 受EA控制,其次还受各中断源自己的中断 T1中断 允许控制位控制。
就是中断号
中断查询序号 0 1 2 3 4 5 6 7 8 9
中断源 INT0 T0 INT1 T1 URAT1 ADC LVD PCA UART2 SPI
中断服务程序的入口地址 0003H 000BH 0013H 001BH 0023H 002BH 0033H 003BH 0043H 004BH
17
13
7.3中断寄存器
D7 D6
IP2寄存器的地址 为B5H,不能进行 2.中断优先级控制寄存器IP、IP2和IPH、IP2H 位寻址
D5
D4
D3
D2
D1
D0
D7 -
D6 -
D5 -
D4 -
D3 -
D2 -
IP2H寄存器的地 址为PSPI B6H,不能进 PS2 行位寻址
D1
D0
PSPIH PS2H
执行中断任务 关中断
恢复现场
在低优先级中断服务 程序中, 保护和恢复现 场之后的开中断, 是为 了允许更高级的中断 嵌套。
开中断 中断返回
19
以外部中断1为例,其中断服务处理程序
INT1: ORG 0013H LJMP INT1 …… CLR EA PUSH PUSH PUSH PUSH …… PSW ACC DPH DPL ;外部中断1的入口地址 ;在中断入口处放一条长转移指令
中断处理的流程图
置位中断优先级触发器
硬件完成
保存断点 转入中断服务子程序 保护现场
用户编程 完成
执行中断服务程序 恢复现场 清除中断优先级触发器 中断返回
RETI 指令 完成
18
中断服务程序的流程图
关中断 保护现场 开中断
在低优先级中断服 务程序中,保护现场 和恢复现场的过程, 不允许高优先级的中 断源中断,以免现场 遭到破坏。
PS2H 为串行口2中断 PSPIH, PSPI、 为PS2 SPI串行口 优先级的高、低位 中断优先级的高、低位
14
IPH.X、 IP.X、 或IP2H.X 、IP2.X 为 IPH.X IP.X 或 IP2H.X 、 7.2中断系统的结构 IPH.X IP.X 或IP2H.X 、 为 IPH.X 、、 IP.X 或IP2H.X 、IP2.X 11时为最高优先级中断 IP2.X 为10为 时为 2 级中断 IP2.X 01 时为 1级中断 00时为最低优先级中断
D7
PPCAH
D6
PLVDH
D5
PADCH
D4
PSH
D3
PT1H
D2
PX1H
D1
PT0H