怎样才能用51单片机如何产生脉冲产生负脉冲

查看: 1529|回复: 8
用STC增强型51单片机计数编码器脉冲数有时候会出现漏记脉冲的现象
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
用STC增强型51单片机计数编码器脉冲数有时候会出现漏记脉冲的现象,脉冲频率也不高,不超过5K,有什么好的计数办法?
有时候编码器没动,也会出现迅速计数的现象?
推荐你用外部计数模式会准确,因中断要响应计数频率高时不准!
主题帖子精华
金牌会员, 积分 1167, 距离下一级还需 1833 积分
在线时间275 小时
推荐你用外部计数模式会准确,因中断要响应计数频率高时不准!
主题帖子精华
金牌会员, 积分 1167, 距离下一级还需 1833 积分
在线时间275 小时
你用外部&中断计数?
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
回复【2楼】烟酒不沾:
---------------------------------是的,下降沿进外部中断0
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
回复【4楼】烟酒不沾:
---------------------------------
5K的频率不算高吧
主题帖子精华
金钱102759
在线时间610 小时
回复【5楼】SPO_wer:
---------------------------------
还好,200us中断一次。
中断处理精简下吧
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
新手上路, 积分 22, 距离下一级还需 28 积分
在线时间0 小时
外部IO口是否有滤波处理电路,硬件干扰可能性比较大
主题帖子精华
新手上路, 积分 29, 距离下一级还需 21 积分
在线时间0 小时
回复【7楼】chenxingzhou:
---------------------------------
没有滤波,AB相送给直接送给单片机的,谢谢提醒,回头加滤波试试
主题帖子精华
高级会员, 积分 871, 距离下一级还需 129 积分
在线时间91 小时
回复【8楼】SPO_wer:
---------------------------------
我目前已遇到同样的问题,如果转速高一点,计数不准确
Powered by查看: 1601|回复: 0
[求助]怎么用8051芯片做一个单脉冲输出电路
一,&&& 用8051芯片做一个单脉冲输出电路,芯片供电电压选用5V ,由于电瓶电压为12V,选用一块7805三端稳压器。
二,&&& 要求频率可调,调整范围从2Hz到400Hz,分别用两个按键增加和减小(步进单位待定),用三个8段数码管显示频率,
三,&&& 要求脉冲宽度可调,调整范围从0.01ms到0.5ms,分别用两个按键增加和减小(步进单位待定),用三个8段数码管显示脉冲宽度,
四,&&& 调整频率时,脉冲宽度不变;调整脉冲宽度时,脉冲频率不变。
五,&&& 用三个8段数码管显示一个电压,其电压最高值为900V,
六,&&& 8051的脉冲输出端接一个CMOS的I/O。
新手急求大神相助啊。。。。。只要画个图就行
Powered by51单片机,用中断发脉冲,执行完以后停不下来了,兄弟们帮帮忙 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
51单片机,用中断发脉冲,执行完以后停不下来了,兄弟们帮帮忙
22:45:21  
void time0()interrupt 1 using 1
&&& & & & P1_0=!P1_0;
& & & & counter0++;& & & &
void main()
& & & & P1_0=1;
& & & & TMOD=0x02;& & & &
& & & & TH0=(256-18);
& & & & TL0=(256-18)& &
& & & & EA=1;
& & & & ET0=1;
& & & & TR0=1;
& & & & for(;flag0;)
& & & & {& &
& & & & & & & & if(counter0&=1988)& & & &
& & & & & & & & {
& & & & & & & & & & & & ET0=TR0=0;
& & & & & & & & & & & & counter0=0;
& & & & & & & & & & & & P1_0=1;
& & & & & & & & & & & & flag0=0;& & & &
& & & & & & & & }
这一套运行完,跳出for循环以后,以我的要求来说,P1_0口应该是不发送脉冲了,但是实际上他还是不断的在发脉冲, stc89c52,& &11.0592 晶振&&12分频& &有没有兄弟看看是怎么回事啊。
23:44:02  
因为中断是在取反呀!所以跳出for还是要输出高低变化的电平
23:45:39  
发完后应该关中断
23:51:35  
你的for没有执行
00:12:28  
在if里面加个关闭定时器,在for后面加个while(1);
08:12:25  
因为中断是在取反呀!所以跳出for还是要输出高低变化的电平
我把ET 和TR 都关了 应该来说 定时器也关了 怎么还是取反在。。。
08:16:47  
在if里面加个关闭定时器,在for后面加个while(1);
for ET 和 TR都关了 应该定时器也关了;后面加while(1)他倒是不反复脉冲了,就是我后面还有程序,没法接了。。
09:21:29  
for ET 和 TR都关了 应该定时器也关了;后面加while(1)他倒是不反复脉冲了,就是我后面还有程序,没法接了。。
先初始化flag0=1,然后用while(flag0){}包裹你的if语句,最好把总中断关闭EA=0
09:33:47  
先初始化flag0=1,然后用while(flag0){}包裹你的if语句,最好把总中断关闭EA=0
flag0 初始化是1& &for换成while 也没用 EA=0 也没用,我发现只有在 for 循环外面加一个 while(1)才会停下。
09:51:51  
#include &reg52.h&
#include &intrins.h&
#include&delay52.h&
sbit P1_0=P1^0;
sbit P1_1=P1^1;
uchar counter0;
uchar counter1;
bit flag0=1,flag1=1;
void time0()interrupt 1 using 1
&&& & & & P1_0=!P1_0;
& & & & counter0++;& & & &
void time1()interrupt 3 using 2
& & & & P1_1=!P1_1;
& & & & counter1++;
void main()
& & & & P1_0=1;
& & & & P1_1=1;
& & & & TMOD=0x22;& & & &
& & & & TH0=TH1=(256-18);
& & & & TL0=TL1=(256-18);&&
& & & & EA=1;
& & & & ET0=1;
& & & & TR0=1;
& & & & for(;flag0;)
& & & & {& &
& & & & & & & & if(counter0&=1988)& & & &
& & & & & & & & {
& & & & & & & & & & & & ET0=TR0=0;
& & & & & & & & & & & & counter0=0;
& & & & & & & & & & & & P1_0=1;
& & & & & & & & & & & & flag0=0;& & & &
& & & & & & & & }& & & &
& & & & }& &
& & & & & & & &
& & & & ET1=1;
& & & & TR1=1;
& & & & do
& & & & & & & & while(flag1)
& & & & & & & & {
& & & & & & & & & & & & EA=1;
& & & & & & & & & & & & if(counter1&=498)& & & & & & & && &
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & EA=0;
& & & & & & & & & & & & & & & & ET1=TR1=0;
& & & & & & & & & & & & & & & & counter1=0;& & & && && &
& & & & & & & & & & & & & & & & P1_1=1;
& & & & & & & & & & & & & & & & flag1=0;
& & & & & & & & & & & & & & & & flag0=1;
& & & & & & & & & & & & & & & & ET0=TR0=1;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & while(flag0)
& & & & & & & & {
& & & & & & & & & & & & EA=1;
& & & & & & & & & & & & if(counter0&=498)& & & & & & & && &
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & EA=0;
& & & & & & & & & & & & & & & & ET0=TR0=0;
& & & & & & & & & & & & & & & & counter0=0;
& & & & & & & & & & & & & & & & P1_0=1;
& & & & & & & & & & & & & & & & flag0=0;
& & & & & & & & & & & & & & & & flag1=1;
& & & & & & & & & & & & & & & & ET1=TR1=1;
& & & & & & & & & & & & }
& & & & & & & & }
& & & & }while(1); & & & & & & & & & & & & & & & &
整个程序是这样的,现在又有问题了,while(flag1)循环第三次进入的时候,要花18s 才能进入, 为什么会这样;我是调试模式设置断点,设置单步的时候,语句在while(flag1)和if (counter&=498)之间循环。
10:44:28  
flag0 初始化是1& &for换成while 也没用 EA=0 也没用,我发现只有在 for 循环外面加一个 while(1)才会停下。
程序写的比较乱,你发我邮箱吧,待会有空帮你看看
19:57:12  
counter类型不对
6个问题&&&&&&&&4058个浏览
5个问题&&&&&&&&2178个浏览
8个问题&&&&&&&&4120个浏览
每天选一个需要解决的问题,大家一起来帮忙。
授人玫瑰,手有余香
本次讲解答的问题例举:
1、NB-IoT有哪些技术特点和难点?
2、NB-IoT技术对物联网市场将带来什么样的影响。
3、NB-IoT物理层有哪些组成部分?
4、NB-IoT技术如何实现低功耗?
Powered by用单次脉冲申请中断,在中断处理中对输出信号进行翻转
全部答案(共1个回答)
外部中断,在中断服务程序中改变信号呗……
希望以上网站的论文能帮到你
数据锁存允许信号,高电平有效
你可以搜索苹果app store兑换码,找到相关店铺说你想买什么软件,以及你的帐户,一般一美元一块到一块五的样子,他会告诉你兑换码,在app store的精品汇...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区君,已阅读到文档的结尾了呢~~
基于51单片机的脉冲计数
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于51单片机的脉冲计数
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

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

更多推荐

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

点击添加站长微信