单片机计数器实验报告

上传人:飞*** 文档编号:37341999 上传时间:2018-04-14 格式:DOC 页数:5 大小:41KB
返回 下载 相关 举报
单片机计数器实验报告_第1页
第1页 / 共5页
单片机计数器实验报告_第2页
第2页 / 共5页
单片机计数器实验报告_第3页
第3页 / 共5页
单片机计数器实验报告_第4页
第4页 / 共5页
单片机计数器实验报告_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《单片机计数器实验报告》由会员分享,可在线阅读,更多相关《单片机计数器实验报告(5页珍藏版)》请在金锄头文库上搜索。

1、 计数器实验报告计数器实验报告 实验目的实验目的1.1. 学习单片机内部定时/计数器的使用和编程方法; 2.2. 进一步掌握中断处理程序的编程方法。 实验器材实验器材1.1. G6W 仿真器一台2.2. MCS51 实验板一台3.3. PC 机一台4.4. 电源 一台 5.5. 信号发生器一台 实验内容及要求实验内容及要求8051 内部定时计数器,按计数器模式和方式 1 工作,对 P3.4(T0)引 脚进行计数,使用 8051 的 T1 作定时器,50ms 中断一次,看 T0 内每 50ms 来了多少脉冲,将计数值送显(通过 LED 发光二极管 8421 码来表示) ,1 秒后再次测试。 实验

2、说明实验说明1.1. 本实验中内部计数器其计数器的作用,外部事件计数器脉冲由 P3.4 引 入定时器 T0。单片机在每个机器周期采样一次输入波形,因此单片机 至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至 少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时 这就决定了输入波形的频率不能超过机器周期频率。 2.2. 计数脉冲由信号发生器输入(从 T0 端接入) 。 3. 计数值通过发光二极管显示,要求:显示两位,十位用 L4L1 的 8421 码表示,个位用 L8L5 的 8421 码表示 4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动 次数并显示

3、实验框图实验框图(见下页)程序源代码 ORG 00000H LJMP MAIN ORG 001BH ;T0 的中断入口地址 AJMP MAIN1 MAIN: MOV SP,#60H MOV TMOD,#15H ;设置 T1 做定时器,T0 做计数器,都于方式 1 工作 MOV 20H,#14H ;装入中断次数 MOV TL1,#0B0H ;装入计数值低 8 位 MOV TH1,#3CH ;装入计数值高 8 位 MOV TL0,#00H 计数器主程序框图中断返回恢复现场NY是否到 1 秒?显示置 T1 定时常数INTT1 入口保护现场清 T0 计数值中断服务程序框图开 始置 T0,T1 模式及初

4、始值设置初始常数开中断等 待MOV TH0,#00H SETB TR1 ;启动定时器 T1 SETB TR0 ;启动计数器 T0 SETB ET1 ;允许 T1 中断 SETB EA ;允许 CPU 中断 SJMP $ ;等待中断MAIN1: PUSH PSW PUSH ACC CLR TR0 CLR TR1 ;保护现场 MOV TL1,#0B0H ;装入计数值低 8 位 MOV TH1,#3CH ;装入计数值高 8 位,50ms ;允许 T1 中断 DJNZ 20H,RETUNT ;未到 1s,继续计时 MOV 20H ,#14H;1s 到重新开始 SHOW: ;显示计数器 T0 的值 MO

5、V R0,TH0 ;读计数器当前值 MOV R1,TL0 MOV A,R1 MOV B,#0AH DIV AB;将计数值转为十进制 MOV C,ACC.3 ;显示部分,将 A 中保存的十位赋给 L0L3 MOV P1.0,CMOV C,ACC.2 MOV P1.1,CMOV C,ACC.1 MOV P1.2,CMOV C,ACC.0 MOV P1.3,C MOV A,B ;将 B 中保存的各位转移到 A 中 MOV C,ACC.3 ;将个位的数字显示在 L4L7 上 MOV P1.4,CMOV C,ACC.2 MOV P1.5,CMOV C,ACC.1 MOV P1.6,CMOV C,ACC.

6、0 MOV P1.7,C RETUNT: MOV TL0,#00H ;将计数器 T0 清零 MOV TH0,#00HSETB TR0SETB TR1POP ACCPOP PSWRETI ;中断返回在频率为 1000HZ 时,L0L7 显示为 50;频率为 300HZ 时,L0L7 显示为 15,结果 正确,程序可以正确运行。 思考与小结:有了前面的定时器实验做基础,定时器计数器的选择以及初始化已经不再是难点,本 次试验的重点是写入两个中断判断程序和十六进制到十进制的转化和显示。 MOV TL1,#0B0H ;装入计数值低 8 位 MOV TH1,#3CH ;装入计数值高 8 位,50ms MO

7、V 20H,#14H ;未到 1s,继续计时 DJNZ 20H,RETUNT ;1s 到重新开始 RETUNT: MOV TL0,#00H ;将计数器 T0 清零 MOV TH0,#00H 由于书上详细解释了设置中断时间的问题,所以中断程序并没有什么太大的难点,主要 是要思考一下程序的执行顺序问题。 十六进制到十进制的转化和显示使我们这次实验遇到的比较大的困难,刚开始采用的 是 DA 指令,由于没有搞清楚它的实质错误的使用了 DA。DA 用于十六进制到 BCD 的转 换,不能用于十六进制到 8421 的转换,于是我们思考了很久。后来终于找到了比较简单的 方法用除数,十位放在 A 中,个位也就是

8、余数放在 B 中。 MOV R0,TH0 ;读计数器当前值 MOV R1,TL0 MOV A,R1 MOV B,#0AH DIV AB ;将计数值转为十进制 由于这次的数字比较小而且要显示在 L0L7 上,所以可以用这种方法,如果是数字比 较大的话这种方法也不奏效,需要写一段通用代码来实现。 后面的问题可谓是一只强大的拦路虎,可能是基础只是不过关的缘故,我们一直在数 字的显示顺序上纠结万分,用了左循环但是没有达到预期目的,在老师的指导之下才知道 原来可以直接位赋值。以后一些使用的知识和技巧一定要掌握。 MOV C,ACC.3 ;显示部分,将 A 中保存的十位赋给 L0L3 MOV P1.0,CMOV C,ACC.2 MOV P1.1,CMOV C,ACC.1 MOV P1.2,CMOV C,ACC.0 MOV P1.3,C MOV A,B ;将 B 中保存的各位转移到 A 中 MOV C,ACC.3 ;将个位的数字显示在 L4L7 上 MOV P1.4,CMOV C,ACC.2 MOV P1.5,CMOV C,ACC.1 MOV P1.6,CMOV C,ACC.0 MOV P1.7,C

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号