



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文是对与以前发表的程序做个适当更改 因为在使用的过程中出现了一个问题 也 就是在外部中断的处理函数里面处理欠妥 在执行外部中断函数的时候 本意以定时器中 断来代表解码超时 可实际情况是 即使解码超时 定时器产生溢出 但是程序却不能按 照正常程序跳进定时器中断 执行定时中断函数 本以为是中断优先级的原因 但是在设 置了定时器中断优先级为最高 也还是不能正常进入 随后本人想到了解决办法 利用定 时器 0 溢出标志 TF0 作为判断超时的依据 因为当 TF0 为 1 时 定时器向 CUP 申请中断 我们可以通过查询的方式 当 TF0 为 1 则解码超时 退出解码 此时不需要定时器中断 函数 也可判断解码是否超时 有人就说了 那我判断超时是否我可以定义变量 当变量 超过一定数值时代表超时 我想说 何必呢 本身定时器 0 溢出标志就是 TF0 红外解码 用到定时器 那不就刚好么 何必再去定义变量呢 按照了解 通用的红外信号电平持续 最长的时间是起始电平 一个 9ms 的低电平时间 定时器从 0 开始计时到溢出 如果是 52 单片机 12M 晶振速度 按照 12 分频 一个定时器脉冲时间是 1us 溢出所需要的时间是 65ms 左右 所以当定时器溢出 我们就不必等待 TF0 作为停止解码的标志也只能用在这 种速度比较低的单片机上 对于高速单片机 假如定时器溢出只需要 2ms 那要是再使用 TF0 做判断 也就无意义了 好了 废话不多说了 注 主函数由读者自己编写 本程序只用于解码 最终得出的按键码存于变量 Key Temp 中 本人习惯写某个器件的程序的时候 习惯创建 c 和 h 文件 因为这样方便移植 在新建的 程序中只需添加 C 文件和 include h 文件就行了 很方便 本人用芯片是 STC15W4K32S4 自己用这块芯片做有开发板 平时写程序都用它 也可用 一般的 51 单片机 但要注意定时器的时间和外部中断的端口 本程序只适用 NEC 编码的解码 RC5 编码请绕道 以下是头文件信息 ifndef IR H define IR H sbit IR P3 6 extern unsigned char Long Press Long Press1 长按计数 用作长按判断 extern unsigned char Key Temp 保存按键变量 void Init IR 初始化红外有关参数 endif 以下是 c 文件 include 也可以用 reg52 h 一般的编译器没有这个头文件 因为 这是我个人添加进编译器里面的 include IR h include IR h 时间计算 时间由定时器计的定时值来决定 本程序设定工作频率是 24MHz 但定时器是 12T 模式 故一个定时脉冲时间为 0 5us 实际定时所得时间应为 TH0 8 TL0 0 5 单位 us 本程序由 河池学院 物电学院 211 实验室 XXX 编写 Byte Long Press Long Press1 Byte Key Temp Word IR table 4 void Init IR INT CLKO 0 x10 使能外部中断 2 不固定 用哪个外部中断都行 下降沿触发 AUXR 定时器时钟 12T 模式 此句可以不写 因为单片机的定时器上电默认是 12T 写是为了方便 日后了解 TMOD 0 x01 设置定时器 0 为不可重装模式 从零开始定时 TR0 0 定时器不定时 也可不写 上电默认不启动 ET0 0 不允许定时器中断 解码是否超时查询 TF0 TF0 为 1 时表示超时 结束解码 EA 1 打开总中断 void IR Rec interrupt 10using 1 Byte IR cnt Byte IR cnt1 Word L Time 定义低电平时间 Word H Time 定义高电平时间 INT CLKO 关闭外部中断 2 TH0 0 清零定时器的值 TL0 0 TR0 1 开始定时 while IR 等待低电平结束 if TF0 若计时超过正常红外时间 TF0 0 清零定时器溢出标志 TR0 0 关闭定时器 TH0 0 TL0 0 INT CLKO 0 x10 使能外部中断 2 return 返回 即结束整个中断服务 退出当前中断服务 TR0 0 关闭定时器 L Time TH0 8 TL0 获取定时器的值 L Time L Time 0 5 计算出时间 TH0 0 TL0 0 TR0 1 while IR 等待高电平结束 if TF0 若计时超过正常红外时间 TF0 0 清零定时器溢出标志 TR0 0 关闭定时器 TH0 0 TL0 0 INT CLKO 0 x10 使能外部中断 2 return TR0 0 H Time TH0 8000 长按计数清零 for IR cnt 0 IR cnt 4 IR cnt for IR cnt1 0 IR cnt1 1 先右移一位 TH0 0 TL0 0 TR0 1 启动定时器 while IR 等待低电平结束 if TF0 若计时超过正常红外时间 TF0 0 清零定时器溢出标志 TR0 0 关闭定时器 TH0 0 TL0 0 INT CLKO 0 x10 使能外部中断 2 return TR0 0 关闭定时器 L Time TH0 8 TL0 获取低电平时间 L Time L Time 0 5 计算时间 us TH0 0 定时器清零 TL0 0 TR0 1 启动定时器 while IR 等待高电平结束 if TF0 若计时超过正常红外时间 TF0 0 清零定时器溢出标志 TR0 0 关闭定时器 TH0 0 TL0 0 INT CLKO 0 x10 使能外部中断 2 return TR0 0 H Time TH0 8 TL0 H Time H Time 0 5 if L Time700 若低电平时间异常 TF0 0 清零定时器溢出标志 TR0 0 关闭定时器 TH0 0 TL0 0 INT CLKO 0 x10 使能外部中断 2 return 停止解码 if H Time 1400 else if H Time2000 若高电平时间异常 TF0 0 清零定时器溢出标志 TR0 0 关闭定时器 TH0 0 TL0 0 INT CLKO 0 x10 使能外部中断 2 return 停止解码 IR table IR cnt Key Temp if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训效评价课件
- 2025福建厦门鼓浪湾大酒店有限公司(第二批)招聘5人模拟试卷及答案详解(夺冠)
- Hydroxyprogesterone-Caproate-d11-17α-Hydroxyprogesterone-hexanoate-d-sub-11-sub-生命科学试剂-MCE
- Human-EPO-mRNA-生命科学试剂-MCE
- HGS004-生命科学试剂-MCE
- HDAC11-IN-1-TFA-生命科学试剂-MCE
- 2025年宁波慈溪市中西医结合医疗健康集团招聘派遣制工作人员3人模拟试卷及答案详解(必刷)
- 搭建商战略合作协议范本5篇
- 金融系统安全运行承诺函8篇
- 项目工程如期保质完成承诺书(4篇)
- ISO 22000-2018食品质量管理体系-食品链中各类组织的要求(2023-雷泽佳译)
- 卡巴斯基应急响应指南
- 理财规划大赛优秀作品范例(一)
- 2023年四川能投筠连电力招聘笔试参考题库附带答案详解
- 护理管理组织结构与设计
- 静配中心清洁消毒考核试题
- 一级烟草专卖管理师理论考试题库(含答案)
- 小学数学《分数除法》50道应用题包含答案
- 碳捕集、利用与封存技术课件
- 化工试生产总结报告
- 复句与单句的辨析课件
评论
0/150
提交评论