导航:首页 > 操作系统 > STC8单片机pwm历程

STC8单片机pwm历程

发布时间:2022-05-26 12:53:52

1. stc8hpwm如何选对应的io口


有个项目需要PWM输出,使用的是TIM2_CH2,请问将此引脚配置为PWM输出时 ,对应引脚的IO口寄存器是否需要配置为推挽输出模式。
现在的程序是引脚配置为PWM模式,但是对应IO口引脚寄存器配置使用的是默认:输入模式,现在产品也能正常工作,已经出货几千套,但是到了客户那里总是反应没有PWM输出,但是在生产线和客户生产线测试时都没有出现过这个问题。一直找不到原因。
今天专门网上查询PWM相关例程,发现有的例程是有将PWM引脚对应的IO口寄存器配置为推挽输出模式的,有的例程却没有,请问,如果没有强制设置为推挽输出模式,是否会出现PWM没有输出的可能。
使用环境是IAR 2.10.4 寄存器控制,

2. STC单片机输出PWM信号,频率要25KHz,请大神指教,怎么实现,或者直接给我一个程序,谢谢!

void PWM_init (void){//PWM初始化函数
CMOD=0x02; //设置PCA定时器,计数频率为晶振频率/2 当为12Mhz时,PWM输出频率约23.4Khz
//CMOD=0x00; //设置PCA定时器,计数频率为晶振频率/12 当为12Mhz时,PWM输出频率约3.9Khz
//CMOD=0x04; //设置PCA定时器,计数频率为定时器0的溢出率,如果让定时器0设为16位计数模式,其溢出频率可以在很大范围内调节,从而以产生很高或很低的PWM频率
CL=0x00;
CH=0x00;
CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(0100 0010)
CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
CCAP1H=0x00; // PWM1初始时为0
CR=1; //启动PCA定时器
}
实际上要产生低频率的PWM波,不用其硬件PWM功能完全可以
用定时器中断方式即可实现
让定时器 200us中断一次(中断不算频繁呀) ,设一变量a,每次中断a加1,100次就是20ms,,另设一变量b,数值在1-100之间,每次中断比较a和 b的大小,如果a<b,则引脚 输出高电平,否则为低电平,这样通过改变b的值,就可实现频率为50HZ,占空比1-100%可调的PWM方波

3. sTc8 pwm调光程序怎么写

下面这个程序是应用在stc上的pwm程序,测试成功
#includesfr CCON =0xD8; //PCA control register
sfr CMOD =0xD9;
sfr CL =0xe9;
sfr CH =0xF9;
sfr CCAP0L=0xea;
sfr CCAP1L=0xeb;
sfr CCAP0H=0xfa;
sfr CCAP1H=0xfb;
sfr CCAPM0=0xda;
sfr CCAPM1=0xdb;

sbit CR=0xde; //位寻址

void main(void)
{
CMOD=0x02; //使用系统时钟,时钟输入源频率fosc/2。PWM频率=fosc/2/256
/************************************
7 6 5 4 3 2 1 0
CIDL - - - cps2 CPS1 CPS0 ECF

CIDL: =0时,空闲模式下PCA计数器继续工作;=1时,空闲模式下PCA计数器停止工作。
CPS2,CPS1,CPS0:PCA计数脉冲选择。010,定时器0的溢出,可以实现可调频率的PWM输出。
ECF: =1时,使能寄存器CCON CF位的中断;=0时,禁止该功能。
***************************************/
CL=0x00;
CH=0x00;
CCAP0L=0xc0; //当CL小于CCAP0L时,输出为低;大于时,输出为高。
CCAP0H=0x7f; //当CL由ff变为00溢出时,CCAP0H装载到CCAP0L中,实现无干扰的更新PWM。
CCAP1L=0xc0; //当CL小于CCAP1L时,输出为低;大于时,输出为高。
CCAP1H=0xc0; //当CL由ff变为00溢出时,CCAP1H装载到CCAP1L中,实现无干扰的更新PWM。
CCAPM0=0X42; //使能PWM模式,PWM0=1,ECOM0=1
CCAPM1=0X42; //使能PWM模式,PWM1=1,ECOM1=1
CR=1; //启动PCA计数器
while(1)
{
CCAP0H=RF4432_TxRxBuf[4]; //此处改变占空比
CCAP1H=RF4432_TxRxBuf[5];
CCAP2H=RF4432_TxRxBuf[6]/2.5;
};
}

4. stc单片机产生pwm波这个程序看不懂求讲解,最好能一句一句解释,编程也不太懂回答的好还有追加奖励

对于每个人的努力来说,奇迹不可能不会发生

5. STC单片机使用定时器进行PWM调速

STC单片机 使用PWM功能,有PWM专用定时器,和定时器 T0 与 T1 无关。
STC单片机 的 数据手册 上有 PWM 例程,有C 语言的,也有汇编语言的,】
可以上官网下载 个 相关 单片机的 数据手册 看看。

6. stc单片机产生pwm,这有一个程序,有人能详细解释下它怎么产生pwm波吗,能逐句详解吗

哥们,这个已经很详细了;
大概说说吧,PWM[54]是定义的一组PWM脉宽输出数组,PWM脉宽输出是0-255;0的时候脉宽输出最大,255的时候脉宽输出最小;
然后那个初始化PCA,初始化定时器0就不说了,你自己下一个手册看下就明白;
然后是中断,每中断一次index加1,然后判断index是不是等于54,意思就是PWM[54]整个数组里面的PWM是不是都送了一次CCAP寄存器;如果都数组都送了一次,将index置零,从头开始送;标志位取反,如果标志位zf=1,让P14输出PWM,P13关闭;,如果zf=0,让P13输出PWM,P14关闭;if(zf==0)后面的语句就是让PWM[54]中的每一个数都送CCAP寄存器一次;

其实按这个程序注释的话,他本意是PWM波形从小变大P14输出,PWM波形有大变小P13输出;但是这个程序的实际效果是P14由小变大再由大变小。然后P14关闭,P13由小变大再由大变小
如此循环;

你最关心的PWM怎么输出:就是这两个语句,CCAP0H=pwm[index]; CCAP1H=pwm[index]; index每中断一次加1,那么index是由0加到54,假如说index=0 ,那么CCAP0H=pwm[0]; ,pwm[0]对应数字里面的255,寄存器CCAP0H=255;这个寄存器等于255,PWM输出就是一个小脉宽;下一次中断CCAP0H=240了,脉宽有增加了一点;至于CCAP0H送一个数据就有脉宽输出,这个是由单片机硬件本身决定的;你看看手册就知道了;
这个已经说得很明白了吧;累死,打字都打了20分钟;

7. STC单片机PWM编程!

看看这个,单片机用的是ADUC848,AD转换输出正弦波,和PWM原理类似。

2、源程序清单

DACCONEQU0xfD;定义模数转换控制器

DACHEQU0xfc;定义模数转换数据寄存器高8位

DACLEQU0xfb;定义模数转换数据寄存器低8位

ORG0000H

LJMPMAIN

ORG0200H

MAIN:MOVDACCON,#0fH;DACoperation

CLRA;

MOVDACH,A;模数转换高八位清零

PRG3:MOVR0,#09H;正弦波

MOVR4,#40H

LP11:MOVA,R0

MOVCA,@A+PC

MOVDACL,A;2

ACALLDELAY;2

INCR0;1

DJNZR4,LP11;2

SJMPPRG3;2

DATA0:

DB80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH

DB0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H

DB0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH

DB80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H

DB0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H

DB1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH

RET

DELAY:MOVR6,#10H

MOVR7,#0A1H

DELAYLOOP:;延时程序

DJNZR6,DELAYLOOP

DJNZR7,DELAYLOOP

RET

四、实验板插针配置:

无需插针配置,注意DAC是从CONDACOUT1端子输出,可用示波器观察DAC输出波形。若产生失真情况,请检查开发板DA输出端LM358运算放大器的放大倍数,适当更改所查函数表的范围。

五、思考题

1、改变程序,使能添加输出锯齿波;

2、改变程序,使输出添加三角波;

3、改变程序,使输出添加方波;

4、改变程序,并制作一个简单的函数发生器

8. 单片机PWM程序是怎么编写的啊,能给一个简单的例子吗

有PWM功能的单片机入STC12系列单片机,直接给专用寄存器赋值开启相应定时器就可以了。普通单单片机,PWM需要用自己来调配。比如:
#include<reg51.h>
unsigned char pwhh,pwhl,pwlh,pwll;
bit flag;
sbit pwm=P1^0;
void t0isr() interrupt 1
{
if(flag)
{
TH0=pwhh;
TL0=pwhl;
}
else
{
TH0=pwlh;
TL0=pwll;
}
pwm=~pwm;
}
main()
{
TMOD=0x01;
pwhh=(65536-1000)/256;
pwhl=(65536-1000)%256;
pwlh=(65536-500)/256;
pwll=(65536-500)%256;
TH0=pwhh;
L0=pwhl;
TR0=1;
ET0=1;
EA=1;
while(1);
}

9. stc8系列单片机有PCA模块设置PWM工作模式时,与PWM相关的IO口还需要定义吗

stc12c5a60s2单片机 的 PCA 定时器 PWM 发生器,与 T0 T1 定时器 无关,相互是独立的
使用 PWM 发生器。 不会影响 T0 T1 的使用,进不了中断 应该 是 定时器 设置有问题,
检查一下 程序吧。

阅读全文

与STC8单片机pwm历程相关的资料

热点内容
oppoa93加密便签在哪查找 浏览:16
两个数字的加减乘除运算编程 浏览:225
给手机加密码忘记了怎么办 浏览:600
单片机运算符 浏览:297
移动端微信商城源码 浏览:442
编程猫下一个背景在哪里 浏览:358
javaclasstype 浏览:238
乐高编程和乐高课的延伸 浏览:356
苹果手机怎么切换app美国账号 浏览:865
编译程序输入一个字符串 浏览:407
圆命令画法 浏览:308
如果给电脑e盘文件加密 浏览:802
javaswing项目 浏览:778
androidsdksetup 浏览:1005
pdf怎么设置中文 浏览:128
安卓手机用什么软件看伦敦金 浏览:966
魅族文件夹无名称 浏览:792
苏黎世无人机算法 浏览:876
核桃编程和小码王的融资 浏览:686
微积分教材pdf 浏览:728