怎样让51单片机检测脉冲每秒输出30000个脉冲

还没有帐号? 赶紧
用户版块帖子
请教大家如何用51单片机实现1Hz~50Hz可调脉冲输出?
UID:775398
在线时间1811小时
M币1830专家13
最近开始学习单片机,看的是郭天祥的视频教程,好在有一点C语言基础,学起来不是很吃力。最近想试着做一个信号发生器,用数码管显示,按键调整参数,实现从1Hz到50Hz 的信号输出,按一下键增加/减少1Hz,数码管显示当前频率数。大体思路有了,数码管显示有了,键盘控制实现了,现在问题出在如何实现每按一次键频率增减1Hz,是应该用中断吧,发现延时的话对数码管是扫描有影响,应该将哪个参数作为变量呢?void timer0() interrupt 1 {TH0=(65536-cc)/256;TL0=(65536-cc)%256;aa++; if (aa&bb) aa=0;//防止调整参数时aa数值超过bbif(aa=bb){ beep=0;&&delay(5);&&beep=1;&&aa=0;}cc作为调整参数?或者是bb?将变量按某种算法计算,来得到需要了频率?或者是设置一个数组?请各位坛友帮我想想办法,在此先谢谢大家了。
UID:852508
在线时间406小时
M币330专家1
你只要中断一次就将信号发生位取反就能做出方波啦!这样方波是不能用延时了!只能用定时器来计算时间!另外方波产生中断的优先级要高于数码管扫描的!不然方波发生会有缺空!
UID:815381
在线时间45小时
M币842专家5
显示扫描和按键处理放主循环里,计时器产生100us的中断,用变量计数,例如50Hz计100,49Hz计102等等……达到目标计数值就翻转一下IO。如想产生更加精确的频率,缩短计时器中断的时间即可,如10us,相应的50us计1000。以上
UID:775398
在线时间1811小时
M币1830专家13
引用第2楼racede于 08:26发表的 …… :显示扫描和按键处理放主循环里,计时器产生100us的中断,用变量计数,例如50Hz计100,49Hz计102等等……达到目标计数值就翻转一下IO。如想产生更加精确的频率,缩短计时器中断的时间即可,如10us,相应的50us计1000。以上 非常感谢!看样子要用一个数组来存放参数了。
UID:775398
在线时间1811小时
M币1830专家13
引用第1楼kavin2-11-15 01:26发表的&&:你只要中断一次就将信号发生位取反就能做出方波啦!这样方波是不能用延时了!只能用定时器来计算时间!另外方波产生中断的优先级要高于数码管扫描的!不然方波发生会有缺空! 谢谢!有个问题,如何使方波定时优先级高于其它?
UID:852508
在线时间406小时
M币330专家1
用中断优先级寄存器IP实现!具体查阅资料就行了!
访问内容超出本站范围,不能确定是否安全
“新手上路”发帖需审核后才能显示(请认真发帖),达到数码9级后取消此限制
您目前还是游客,请
&回复后跳转到最后一页
Code by , Time now is:07-07 20:43, Total 0.164516(s) query 12,
Gzip enabled&51单片机的脉冲控制器_图文_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
51单片机的脉冲控制器
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩12页未读,
定制HR最喜欢的简历
你可能喜欢51单片机的脉冲控制器
> 51单片机的脉冲控制器
51单片机的脉冲控制器
这个是在前面那个定时器的基础上改过来的。脉冲控制器 输出4个脉冲,输出方式: 先输出P0 50ms,停止100ms后,输出P1 50ms,停止100ms后。。。 P3输出完成后,停止10秒,之后循环 由于时间比较规整,可以在中断里判断输出: 第一个到时,输出P0,
第二个到时,关闭P0
第三个到时,无动作 第四个到时,输出P1,
第五个到时,关闭P1
第六个到时,无动作 第七个到时,输出P2,
第八个到时,关闭P2
第九个到时,无动作 第十个到时,输出P3,
第11个到时,关闭P3
休息200个周期,第211个到时,复位i
case i=1,4,7,10,输出;
2,5,8,11,关闭所有输出 50ms,晶振为11.0592,初值为0x4C00#include "reg51.h"sbit P0_0 = P0^0;sbit P0_1 = P0^1;sbit P0_2 = P0^2;sbit P0_3 = P0^3;char i = 0;void main(){
TMOD = 0x11; //T0方式1
TL0 = 0x0; //TL0的初值
TH0 = 0x4C; //TH0的初值
ET0 = 1; //定时器1的中断允许
= 1; //开中断
while(1);}void Int_T0() interrupt 1 using 2{
TL0 = 0x00; //重新装入初值
TH0 = 0x4C;i++;switch (i){case 1: P0_0 = 0;case 2: P0_0 = 1;case 4: P0_1 = 0;case 5: P0_1 = 1;case 7: P0_2 = 0;case 8: P0_2 = 1;case 10: P0_3 = 0;case 11: P0_3 = 1;case 211: i = 0;}}
分享给小伙伴们:
我来说两句……
微信公众号二
微信公众号一怎么让51单片机输出可调占空比的脉冲波,要哪个管脚引出,用什么程序?我是刚学单片机的,什么都不懂求帮助_百度知道
怎么让51单片机输出可调占空比的脉冲波,要哪个管脚引出,用什么程序?我是刚学单片机的,什么都不懂求帮助
能不能详细一点不然看不懂哦!非常感谢啊
我有更好的答案
//51单片机PWM占空比调整演示程序 //(通过测试,注意:AT89S51单片机,有的单片机P3_7需要改为P3^7)/***************************************************************************** * 程序名称:PWM占空比调整演示程序
* *程序思路说明:
* * 只需要4个按键。
* *关于频率和占空比的确定,对于12M晶振,输出频率为1KHZ,这样定时中断次数设定为 **10,即0.01MS中断一次,则TH0=FF,TL0=F6;由于设定中断时间为0.01ms,这样可以设 **定占空比可从1-99%变化。即0.01ms*100=1ms
* ******************************************************************************/#include&regx51.h&#define uchar unsigned char #define uint unsigned intuchar timer0_tick,ZKB=1;//timer0_tick计数,ZKB占空比uchar i=0,n=0,temp=0;code seven_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//1,2,3, 4, 5, 6, 7, 8, 9code scan[2]={0xfd,0xfe};uchar counter[2]={0,0};sbit AN1=P3^2;//调整个位sbit AN2=P3^3;//调整十位sbit AN3=P3^4;//启动按键sbit AN4=P3^5;//确认按键void delay(uint z)//软件延时函数{
for(x=z;x&0;x--)
for(y=110;y&0;y--);}static void timer0_isr(void) interrupt 1 using 0 //中断函数{
if (ZKB&99) ZKB=1;
if (ZKB&1) ZKB=99;
counter[0]=ZKB%10;
counter[1]=ZKB/10;
if(n==100)
if(i==2) i=0;
P0=seven_seg[counter[i]];
P2=scan[i];
timer0_tick++;
if(timer0_tick++==100)
timer0_tick=0;
if(AN2==0)
delay(100);
if(AN2==0)
counter[0]++;
if(counter[0]==10)
counter[0]=0;
if(AN1==0)
delay(100);
if(AN1==0)
counter[1]++;
if(counter[1]==10)
counter[1]=0;
}ZKB=counter[0]+counter[1]*10;if(AN4==0)
if(AN4==0)
}if(temp==1)P3_7=0;// P3_7为脉冲输出引脚else
if (timer0_tick&=ZKB)
/*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
}} static void timer0_initialize(void)//中断初始化{
timer0_tick=0;
TMOD=0x01;
EA=1;}void main(void){
STAR: delay(100);
if(AN3!=0) goto STAR;//按键3启动脉冲
timer0_initialize();
while(1);}//按按键3启动脉冲器,初始设置占空比为1%,按键1调整十位,//按键2调整个位,一旦调整,输出为0,必须按确认键确认,//输出正确脉冲.可以占空比1-99%任意调节。
采纳率:43%
#include&AT89X52.H&#include&intrins.h&#include&stdio.h&sbit out=P3^4;void delay(unsigned int);//延迟unsigned int i,j,k,l,m;void main(){ while(1) { i=0; j=1000;
for(l=0;l&1000;l++)
} }}void delay(unsigned int i)//延迟2{ while(i&0) {
i--; }}你试试吧 建议查一下占空比的定义 就明白了
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。百度知道 - 信息提示
知道宝贝找不到问题了&_&!!
该问题可能已经失效。
秒以后自动返回

我要回帖

更多关于 单片机外部脉冲计数器 的文章

 

随机推荐