专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
红外线遥控双向可控硅调光问题请教
2020-01-14 18:56
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
9578
32
32
红外线遥控双向可控硅调光,过零检测频繁的10ms需要触发一次,如果中间丢失一个触发脉冲就会闪,多丢几个就不亮,单片机都给10ms占用了,如果红外线遥控(解码需要最少15ms)的程序就没法调光了,有什么方法可以解决这个问题啊,我用51没找到好的解决方法,请大家指点!
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
31条回答
pcbboy
1楼-- · 2020-01-16 18:05
单片机用几12MHZ晶振
加载中...
gallle
2楼-- · 2020-01-16 20:04
我做的调整是这样的,一个中断0专门检测过零信号。在里边通过当前的输出给出一个延时时间(用0.14ms的倍数)我要求的精度不高。
每次加减的时候,时间长度加减1。
定时中断0.14ms一次,设定2个变量做红外解码。一个变量做调光时间调整。
以下所有变量都是全局或静态变量。
中断0程序
IF ‘时间长度’>‘最大时间长度’,‘时间长度’=‘最大时间长度’
IF ‘时间长度’=0
{
调用‘关闭可控硅函数’}
‘延时时间’=0
ELSE {
调用‘打开可控硅函数’
‘延时时间’=0
}
中断0程序结束
定时中断函数(0.14ms)
IF ‘延时时间’>=‘时间长度’
{
调用‘关闭可控硅函数’
}
ELSE ‘延时时间’+1
‘红外本地时基’取反
IF ‘红外本地时基’//用0.28ms解码
{
IF‘本次状态’=0,‘上次状态’=0
ELSE ‘上次状态’=1
‘状态计数’+1
}
//通过‘状态计数’可以算出 高电平的次数,通过解码状态变量知道当前在解哪部分码 头码?用户码?还是什么的时间定一个范围,不要用精准的数。
例如解头码时9ms,计数28~36之间 36=10ms/0.28ms 28=8ms/0.28ms
检测标准间隔4.5MS 12-20 20=5.5ms/0.28ms 12=3.5ms/0.28ms
加载中...
jrcsh
3楼-- · 2020-01-16 23:45
调用‘关闭可控硅函数’ ~~~~~ 你作的是很高深的东西还是~~~~很怪怪的
加载中...
pcbboy
4楼-- · 2020-01-17 02:15
谢大家的指点,终于有点眉目了,我是用汇编做的,但思路应该可以借鉴楼上两位的方法,再次感谢.
加载中...
pcbboy
5楼-- · 2020-01-17 06:36
精彩回答 2 元偷偷看……
加载中...
pcbboy
6楼-- · 2020-01-17 06:56
想到另一个办法,就是将编码分成两部分,中间加入过零检测处理程序,这个程序给足时间10ms ,就当它是一个10ms的延时程序,解码测试已经ok.等明天加入过零检测程序再看看又没问题。
加载中...
上一页
1
2
3
4
5
6
下一页
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
东软载波ESF0654 PDS开发板串口USART0代码分享
1 个回答
普通32位单片机使用linux的应用代码
5 个回答
东软载波ESF0654 PDS开发板AT24C04的调试
9 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
每次加减的时候,时间长度加减1。
定时中断0.14ms一次,设定2个变量做红外解码。一个变量做调光时间调整。
以下所有变量都是全局或静态变量。
中断0程序
IF ‘时间长度’>‘最大时间长度’,‘时间长度’=‘最大时间长度’
IF ‘时间长度’=0
{
调用‘关闭可控硅函数’}
‘延时时间’=0
ELSE {
调用‘打开可控硅函数’
‘延时时间’=0
}
中断0程序结束
定时中断函数(0.14ms)
IF ‘延时时间’>=‘时间长度’
{
调用‘关闭可控硅函数’
}
ELSE ‘延时时间’+1
‘红外本地时基’取反
IF ‘红外本地时基’//用0.28ms解码
{
IF‘本次状态’=0,‘上次状态’=0
ELSE ‘上次状态’=1
‘状态计数’+1
}
//通过‘状态计数’可以算出 高电平的次数,通过解码状态变量知道当前在解哪部分码 头码?用户码?还是什么的时间定一个范围,不要用精准的数。
例如解头码时9ms,计数28~36之间 36=10ms/0.28ms 28=8ms/0.28ms
检测标准间隔4.5MS 12-20 20=5.5ms/0.28ms 12=3.5ms/0.28ms
一周热门 更多>