单片机输出的电感频率输出电压计算计算

单片机产生准确频率正弦波的新方法_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机产生准确频率正弦波的新方法
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢stc12c5a60s2单片机的两路 pwm输出能输出不同频率的pwm波吗?
stc12c5a60s2单片机的两路 pwm输出能输出不同频率的pwm波吗?
stc12c5a60s2单片机的两路 pwm输出能输出不同频率的pwm波吗?我只调试出了占空比不同
这个单片机有缺陷,两路pwm频率是一样的,可调的是占空比,频率不能单独改变.再说控制电机一样的频率也可以啊,只要占空比不同就可以控制转速啊!
希望能帮助你。
请遵守网上公德,勿发布广告信息
相关问答:单片机产生频率和输出电压可调的矩形波信号发生器
> 单片机产生频率和输出电压可调的矩形波信号发生器
单片机产生频率和输出电压可调的矩形波信号发生器
#include typedefsbit signal=P3^0;void main(void){ TR0=0; //禁止T0 TMOD=0x11; //T0和T1均选择工作方式1,16位定时器 TH0=-; //定时时间为50ms TL0=-; signal=0; //开始时输出为低电平 counter=0; //初始化T1的中断次数为0 EA=1; //使能CPU中断 ET0=1; //使能T0溢出中断 ET1=1; //使能T1溢出中断 TR0=1; //T0开始运行,注意,T1不能现在运行 while(1) //无限循环 {}}void isr_t0(void) interrupt 1 //T0中断服务函数{ TH0=-; //装定时器,定时时间为50ms TL0=-; counter++; //中断次数 if(counter==2) //若已中断两次,说明已经过去100ms { counter=0; //中断次数归零 signal=1; //产生矩形波中的高电平 TR1=1; //开始计数T1 }}本文引用地址://***********T1中断函数******void isr_t1(void) interrupt 3{ signal=0; //矩形波中的低adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=17&is_app=0&jk=7a0db&k=%B5%E7%C6%BD&k0=%B5%E7%C6%BD&kdi0=0&luki=1&n=10&p=baidu&q=_cpr&rb=0&rs=1&seller_id=1&sid=8b9c09ea&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1831118&u=http%3A%2F%2Fwww%2E51hei%2Ecom%2Fmcu%2F1968%2Ehtml&urlid=0" id="0_nwl" mpid="0" target="_blank">电平 TR0=0; //禁止T1计数,等待T0将其唤醒 TH1=-; //25ms中断初值 TL1=-;}
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一您的位置: &
基于AT89S51单片机的频率匹配器设计
优质期刊推荐还没有帐号? 赶紧
用户版块帖子
c51-做频率计问题
UID:1460628
在线时间606小时
M币17专家9
主要是想吧老电能表重新利用,利用输出脉冲做成显示功率的。网上有资料,但是是avr用的。本人不懂,于是自己写c51的。思路是,t0计数,t1定时0.5s。然后取定时数*2即可。当然 这只是初步的程序,还没考虑电能表脉冲输出频率和功率的关系,不过也简单 都是算式的问题。问题来了,显示程序不知道放哪,放在while(1)一到中断长了就会闪。放在中断导致定时不准确。解决办法是吧显示程序放在中断,然后算出显示程序所占用的时间,然后更改中断时间,使运行时间符合0.5s。但是怎么得到显示函数机器周期呢??网上说用仿真,我没有仿真芯片。难道让我一点点实验不成??附关键源码:主函数部分void main(void){&&&&TMOD=0x15;&&TH0=0;&&TL0=0;&&TH1=()/256;&&TL1=()%256;&&TR1=1;&&TR0=1;&&ET0=1;&&ET1=1;&&EA=1;&&while(1)&& {&&&&shumaguan(x);&&&& }}计数器中断void t0(void) interrupt 1 using 0{&&T0count++;}定时器中断(50ms*10=0.5s)void t1(void) interrupt 3 using 0{&&TH1=()/256;&&TL1=()%256; &&timecount++;&&if(timecount==10)&&&&{&&&&&&TR0=0;&&&&&&TR1=0;&&&&&&timecount=0;&&&&&&x=T0count*65536*2+TH0*256*2+TL0*2;&&&&&&&&&&T0count=0;&&&&&&&& TH0=0;&&&&&&&& TL0=0;&&&&&&&& &&TH1=()/256;&&TL1=()%256;&&&&&&&& TR0=1;&&&&&&&& TR1=1;&&&&}} 显示函数void shumaguan(unsigned long y) //显示函数{ unsigned char z,o,c,v;&&z=y/1000;&&&&&&&&&&&& //求千位&&o=y%;&&&&&&&& //求百位&&c=y%100/10;&&&&&&&& //求十位&&v=y%10;&&&&&&&&&&&& //求个位 &&&&&&&&&&&&duan=1;&&&&&&&&P0=aduantab[z];&&&&&&&&duan=0;&&&&&&&&P0=0&&&&&&&& wei=1;&&&&&&&& P0=aweitab[2];&&&&&&&& wei=0;&&&&&&&& delay(5); &&&&&&&& duan=1;&&&&&&&& P0=aduandptab[o];&&&&&&&& duan=0;&&&&&&&& P0=0&&&&&&&& wei=1;&&&&&&&& P0=aweitab[3];&&&&&&&& wei=0; &&&&&&&& delay(5); &&&&&&&& duan=1;&&&&&&&& P0=aduantab[c];&&&&&&&& duan=0;&&&&&&&& P0=0&&&&&&&& wei=1;&&&&&&&& P0=aweitab[4];&&&&&&&& wei=0; &&&&&&&& delay(5); &&&&&&&& duan=1;&&&&&&&& P0=aduantab[v];&&&&&&&& duan=0;&&&&&&&& P0=0&&&&&&&& wei=1;&&&&&&&& P0=aweitab[5];&&&&&&&& wei=0;&&&&&&&& delay(5);}[ 此帖被yuer-12-19 14:06重新编辑 ]
UID:1168417
在线时间432小时
M币2148专家3
Keil里调试就有时间计算的啊!
求具体操作
UID:239985
在线时间1509小时
M币6624专家13
51有中断优先级,你设置实时性的中断为高优先即可,这种我一般前后台,前台while负责协调计算,后台中断负责显示读取,中断要短,显示中有长delay就一失败的程序,显示根据当前位段在中断送一下数就返回,不会要几十个us,定时器读一下状态,设一下时间做几个标记,转移个数据也不用几十个us.这么简单的罗辑基本上各种没影响[ 此帖被decai在 11:10重新编辑 ]
用的开发板,段位共用P口,所以用的扫描方式。而且按照扫描频率50hz设置的delay是5ms。求赐教修改显示函数
UID:1217843
在线时间4514小时
M币5955专家13
个人感觉这个程序应该不会有闪的现象 lz要不把shumaguan(x);&&函数贴出来看看吧lz 51用什么型号 晶振多大?
12m晶振,由于输入频率稳定,导致每次运行显示函数到同一地方都会调到中断,因此有间断的闪烁。
UID:1460628
在线时间606小时
M币17专家9
用的开发板,段位共用P口,所以用的扫描方式。而且按照扫描频率50hz设置的delay是5ms。求赐教修改显示函数
UID:1460628
在线时间606小时
M币17专家9
12m晶振,由于输入频率稳定,导致每次运行显示函数到同一地方都会调到中断,因此有间断的闪烁。
UID:239985
在线时间1509小时
M币6624专家13
好吧,现在信息比较多了,我就补充两句.显示函数中你用的太多的delay了.不知道一个delay函数是多少时间.你4个位就是20个对于单片机机速度来说这个可真真的浪费啊,那时间,够你干多少事情了啊,真心疼.为了说的方便,假设delay是延时一个ms的,那么,你扫描数码管一位就只需要等待5ms就会切换带下一位,单片机干的也就是切换段和位,所有的delay就是浪费,这个切换应该是us级的吧,你用了几个ms来干这种事.....你的计时是0.5s,由50ms的组成,好了,现在来看时间,50ms和5ms,50ms是5ms的10倍,那么取5ms一次中断.每5ms一次中断,每次中断扫描一个位(其实就是送个位码送个段码,这占多少时间?)每100次进入中断就是0。5s,该干什么就干什么,不过建议读个数据设个状态就退出。加起来估计半个ms都用不上,while中就不停的看标志位,一看到中断把当前要显示的段码位码取走了,就计算下一个要显示的位码段码,一看到0。5s的标志建立了,该干什么就去干什么,其实真正有用的就是取一个计数值并重新初始化,那又能用多少时间呢。一个时间片有5ms,够你计算一大堆的罗嗦玩意了,但是还是建议把计算从中断中分离出来。你的程序原来主要就是等,干个几us,就等个几ms,估计也就1%的cpu利用率。具体消化就你自己来了。程序我不会帮你写的,因为我老是写不好,各种错误,因为我很粗心,重要的思想是主要的,这是程序的灵魂。再罗嗦几句参考:在数码管显示中,新手经常遇到鬼影的问题,就是当前的数码管的显示数据在相临的数码管上出现淡淡的影子,看你的程序你的估计也有,这个要先关位段,再送数,再显示。[ 此帖被decai在 15:07重新编辑 ]
熱心會員,我赞同只给种子,不给大米。
由于现在是调试,用的开发板,到时候焊接之后显示部分还是不一样,又得从新弄。,真麻烦。准备先把板子弄好
UID:1460628
在线时间606小时
M币17专家9
由于现在是调试,用的开发板,到时候焊接之后显示部分还是不一样,又得从新弄。,真麻烦。准备先把板子弄好,然后再慢慢调试。再问个问题,电能表参数。cf最高频率是指满载频率吗?由于电路板没有写满载多少,怎么求频率与功率的关系呢???网上查的的直接用imp算的,感觉不对。
本文内容包含图片或附件,获取更多资讯,请
后查看;或者
成为会员获得更多权限
UID:1217843
在线时间4514小时
M币5955专家13
回 decai 的帖子
:好吧,现在信息比较多了,我就补充两句.显示函数中你用的太多的delay了.不知道一个delay函数是多少时间.你4个位就是20个对于单片机机速度来说这个可真真的浪费啊,那时间,够你干多少事情了啊,真心疼.为了说的方便,假设delay是延时一个ms的,那么,你扫描数码管一位就只需要等待5ms ..( 14:49)嬀/color]看lz的显示程序 已经处理了鬼影的问题你的意思其实是delay的函数浪费了cpu&&其实严格意义上来说 只要在主函数中出现了delay函数里面用循环来延时的程序都只能算低级的程序&&真正好的程序不会让CPU浪费在延时上的&&延时时处理其他的任务就行了 (操作系统好像就有这样的思路 当然 这种程序加个系统有点大材小用了 没必要)&&lz的确应该尝试更改显示函数中的delay来试试&&在不用开发板时如果条件够 io口够的话 将段位分开 硬件软件都更方便
准备不用开发板,直接焊板子调试。一次搞成
UID:867453
在线时间534小时
M币4657专家18
1.计算方式尽量不要用*法 和除法2.定时器赋值时不要计算再赋值,人工直接计好算再赋常量值3.显示不要用delay 特别大于1MS 延时,这样很浪费CPU效率.4.delay 方式可用中断方式来完成 或者分频
delay用中断还不了解,有待学习。
访问内容超出本站范围,不能确定是否安全
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
您目前还是游客,请
&回复后跳转到最后一页
Code by , Time now is:10-25 04:15, Total 0.106654(s) query 11,
Gzip enabled&}

我要回帖

更多关于 频率最高的单片机 的文章

更多推荐

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

点击添加站长微信