求助:STC单片机交通灯答辩问题PWM问题

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
河北正定欢迎您
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1561)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'STC单片机PWM的实现方法与原理参考实例',
blogAbstract:'/*============================================================== at12c2052所带的PWM功能演示,内部公用了一个定时器,当启动PWM时PCA 定时器只工作在8位模式,匹配比较器也是按8位的。本程序演示了PWM启动 的设置和调节。 改用在tasking c51下面编译,并尝试了tasking 方便的在线汇编方式 ------- 晓奇 ',
blogTag:'河北正定,电路,单片机',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:3,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'河北正定欢迎您',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}STC单片机 PWM 的实现方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STC单片机 PWM 的实现方法
&&STC单片机 PWM 的实现方法
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩1页未读,
定制HR最喜欢的简历
你可能喜欢关于STC15单片机定时器产生PWM的问题。官方例程如下。_百度知道
关于STC15单片机定时器产生PWM的问题。官方例程如下。
#include &reg52.h&
//定义主时钟
//定义PWM的周期,数值为时钟周期数,假如使用24.576MHZ的主频,则PWM频率为6000HZ。
PWM_HIGH_MIN 32
//限制PWM输出的最小占空比。用户请勿修改...
但是我没太懂。中断里不应该加P_PWM=!P_PWM之类的语句吗?但我一直没有找到程序是如何改变P3^5的电平的。
我有更好的答案
貌似确实如此,if....else里面应该再加一个P_PWM置位、清零语句。
高级工程师
不用加,你的想法是单片机没有CAP和PWM模块时的常用做法,但是这个是基于CAP模块的,原理是通过设置寄存器,让CAP比较从而改变管脚状态产生PWM,你只需要配置寄存器就好。
1条折叠回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。STC单片机PWM的实现方法与原理参考实例
/*==============================================================
at12c2052所带的功能演示,内部公用了一个定时器,当启动PWM时PCA
定时器只工作在8位模式,匹配也是按8位的。本程序演示了PWM启动
的设置和调节。
改用在tasking 下面编译,并尝试了tasking 方便的在线汇编方式
------- 晓奇
===============================================================*/
#include "STC12C2052AD.h"
/*#include&INTRINS.h&*/
#define uint unsigned int
#define uchar unsigned char
/* 升降标志,1=上升 */
void initall(void);
_(1) void timers0(void);
_interrupt (6) void PCA_LVD(void);
void initall(void)
TMOD= 0x11; /*
T0作为16位计数器 */
TH0 = 0xc0; /* 定时器0初始值装入 */
TL0 = 0x00;
ET0 = 1; //开中断
IE |= 0x40; /* 使能PCA定时功能 */
AUXR = 0x80;
|||| ||++-保留
|||| |+---低电压中断允许:0=禁止,1=允许,5V..3.7V,3V..2.4V以下
|||| +----SPI中断允许位:0=禁止,1=允许
|||+------ADC中断允许位:0=禁止,1=允许
||+-------串口模式0时时钟设定:0=传统1/12, 1=1/2 2分频;
|+--------定时器ct1时钟源设定:0=传统1/12,1=1:1不分频;
+---------定时器ct0时钟源设定:0=传统1/12,1=1:1不分频;
P1M0 = 0x00; /* P1口用传统51准双向口模式 */
P1M1 = 0x00;
CMOD = 0x03; /* 内部时钟,Fosc/2, PCA计数溢出中断使能*/
PCA 模式寄存器
|||| |||+--ECF...PCA计数溢出中断使能:ECF=1时,使能寄存器CCON CF位的
|||| ||| 中断。ECF=0时,禁止该功能。
|||| |++---CPS1,CPS0 选择PCA 时钟源输入(PCA计数脉冲选择)
|||| | 0 0 0,内部时钟,Fosc/12
|||| | 0 1 1,内部时钟,Fosc/2
|||| | 1 0 2,定时器0溢出,由于定时器0可以工作在1T方式,
|||| | 所以可以达到计一个时钟就溢出, 频率反而
|||| | 是最高的,可达到Fosc
|||| | 1 1 3,ECI/P3.4脚的外部时钟输入(最大速率=Fosc/2)
|+++-+-----保留
+----------CIDL...计数器阵列空闲控制:CIDL=0时,空闲模式下PCA计数器
继续工作。CIDL=1时,空闲模式下PCA计数器停止工作。
CH = 0x00; /* PCA计数器初始值高8位 */
CL = 0x00; /* PCA计数器初始值低8位 */
CCAP0H = 0x00; /* 当出现捕获或比较时,它们用来保存16 位的计数值。
当PCA 模块用在PWM 模式中时,它们用来控制输出的
占空比。CCAP0H.CCAP0L分别为高低8位,组合使用
CCAP0L = 0x00;
CCAP1H = 0x00; /* 当出现捕获或比较时,它们用来保存16 位的计数值。
当PCA 模块用在PWM 模式中时,它们用来控制输出的
占空比。CCAP1H.CCAP1L分别为高低8位,组合使用
CCAP1L = 0x00;
CCAPM1 = 0x4c; /* PCA 比较/捕获模块寄存器1作为16位软件定时器。使能
比较器,PCA计数值与模块的比较/捕获寄存器的值的匹配将
置位CCON寄存器的中断标志位CCF1,使能CCF1中断 */
|||| |||+---ECCF1.. 使能CCF1中断。使能寄存器CCON的比较/捕获标志CCF1,
|||| ||| 用来产生中断。
|||| ||+----PWM1... 脉宽调节模式。当PWMn=1时,使能CEXn脚用作脉宽调节输出。
|||| |+-----TOG1... 翻转。当TOG1= 1时, PCA计数值与模块的比较/捕获寄存
|||| | 器的值的匹配将使CEXn脚翻转。(CEX1/P3.5)
|||| +------MAT1... 匹配。当=1时, PCA计数值与模块的比较/捕获寄存器的值
|||| 的匹配将置位CCON寄存器的中断标志位CCF1。
|||+--------CAPN1.. 负捕获。CAPN1= 1时使能下降沿捕获。
||+---------CAPP1.. 正捕获。CAPP1= 1时使能上升沿捕获。
|+----------ECOM1.. 使能比较器。ECOM1= 1时使能比较器功能。
+-----------CCAPM1^7保留
使用的机种基本模式组合:
ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 模块功能
0 0 0 0 0 0 0 无此操作
X 1 0 0 0 0 X 16位捕获模式,由CEX1的上升沿触发
X 0 1 0 0 0 X 16位捕获模式,由CEX1的下降沿触发
X 1 1 0 0 0 X 16位捕获模式,由CEX1的跳变触发
1 0 0 1 0 0 X 16位软件定时器
1 0 0 1 1 0 X 16位高速输出
1 0 0 0 0 1 0 8位PWM
CCAPM0 = 0x42; /* PCA 比较/捕获模块寄存器0作为16位软件定时器。使能
比较器,PCA计数值与模块的比较/捕获寄存器的值的匹配将
置位CCON寄存器的中断标志位CCF0,使能CCF0中断 寄存器
位功能同上*/
CR = 1; //Start PCA Timer.
TR0 = 1; //启动计时
upordn = 1;
/* ------------- 定时器0用来定时调节PWM的输出占空比 ------------- */
_interrupt(1) void timers0(void)
TL0 = 0x00;
TH0 = 0xc0;
CCAP0H = i&&8; /* CCAP0L不用赋值,他不参与工作 */
if(upordn) /* 逐步加宽PWM、加快脉冲输出 */
if(++i==65535) /* 到头 */
upordn=0; /* 调头 */
else /* 逐步减窄PWM、减慢脉冲输出 */
if(--i==0) /* 到头 */
upordn=1; /* 调头 */
P1 = ~(i&&8); /* 高8位输出指示,作监视用 */
/* ------------ PCA 定时中断,负责清除溢出标志并赋初值 ------------- */
/* 摇晃编程板可以看到P3.5连接的闪亮频率的缓慢变化,虚线在变长变短 */
_interrupt (6) void PCA_LVD(void)
CH = i&&8;
// LedPCA ^= 1; /* 频率要求不高的时候这里可以插入用户代码 */
void main(void)
initall();
// 测试tasking c51的在线汇编功能
#pragma asm
mov r0,#0f0h
djnz r0,v1
#pragma endasm
// 编译很顺利通过,不用作任何附加的设定
while(1){};
原文链接:
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点}

我要回帖

更多关于 单片机答辩问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信