单片机计数器实验报告.doc_第1页
单片机计数器实验报告.doc_第2页
单片机计数器实验报告.doc_第3页
单片机计数器实验报告.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计数器实验报告 实验目的1. 学习单片机内部定时/计数器的使用和编程方法;2. 进一步掌握中断处理程序的编程方法。 实验器材1. G6W仿真器一台2. MCS51实验板一台3. PC机一台4. 电源 一台5. 信号发生器一台 实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1秒后再次测试。 实验说明1. 本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。2. 计数脉冲由信号发生器输入(从T0端接入)。3. 计数值通过发光二极管显示,要求:显示两位,十位用L4L1的8421码表示,个位用L8L5的8421码表示4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动次数并显示 实验框图(见下页)开 始置T0,T1模式及初始值设置初始常数开中断等 待中断返回恢复现场NY是否到1秒?显示置T1定时常数INTT1入口保护现场清T0计数值中断服务程序框图计数器主程序框图程序源代码ORG 00000HLJMP MAINORG 001BH ;T0的中断入口地址AJMP MAIN1MAIN:MOV SP,#60HMOV TMOD,#15H ;设置T1做定时器,T0做计数器,都于方式1工作MOV 20H,#14H ;装入中断次数MOV TL1,#0B0H ;装入计数值低8位MOV TH1,#3CH ;装入计数值高8位MOV TL0,#00H MOV TH0,#00HSETB TR1 ;启动定时器T1SETB TR0 ;启动计数器T0SETB ET1 ;允许T1中断SETB EA ;允许CPU中断SJMP $ ;等待中断MAIN1:PUSH PSWPUSH ACCCLR TR0CLR TR1 ;保护现场MOV TL1,#0B0H ;装入计数值低8位MOV TH1,#3CH ;装入计数值高8位,50ms ;允许T1中断DJNZ 20H,RETUNT ;未到1s,继续计时MOV 20H ,#14H ;1s到重新开始SHOW: ;显示计数器T0的值MOV R0,TH0 ;读计数器当前值MOV R1,TL0MOV A,R1 MOV B,#0AHDIV AB ;将计数值转为十进制MOV C,ACC.3 ;显示部分,将A中保存的十位赋给L0L3MOV P1.0,C MOV C,ACC.2MOV P1.1,C MOV C,ACC.1MOV P1.2,C MOV C,ACC.0MOV P1.3,CMOV A,B ;将B中保存的各位转移到A中MOV C,ACC.3 ;将个位的数字显示在L4L7上MOV P1.4,C MOV C,ACC.2MOV P1.5,C MOV C,ACC.1MOV P1.6,C MOV C,ACC.0MOV P1.7,C RETUNT:MOV TL0,#00H ;将计数器T0清零MOV TH0,#00H SETB TR0 SETB TR1 POP ACC POP PSW RETI ;中断返回 在频率为1000HZ时,L0L7显示为50;频率为300HZ时,L0L7显示为15,结果正确,程序可以正确运行。思考与小结: 有了前面的定时器实验做基础,定时器计数器的选择以及初始化已经不再是难点,本次试验的重点是写入两个中断判断程序和十六进制到十进制的转化和显示。MOV TL1,#0B0H ;装入计数值低8位MOV TH1,#3CH ;装入计数值高8位,50ms MOV 20H,#14H ;未到1s,继续计时DJNZ 20H,RETUNT ;1s到重新开始RETUNT:MOV TL0,#00H ;将计数器T0清零MOV TH0,#00H由于书上详细解释了设置中断时间的问题,所以中断程序并没有什么太大的难点,主要是要思考一下程序的执行顺序问题。十六进制到十进制的转化和显示使我们这次实验遇到的比较大的困难,刚开始采用的是DA指令,由于没有搞清楚它的实质错误的使用了DA。DA用于十六进制到BCD的转换,不能用于十六进制到8421的转换,于是我们思考了很久。后来终于找到了比较简单的方法用除数,十位放在A中,个位也就是余数放在B中。MOV R0,TH0 ;读计数器当前值MOV R1,TL0MOV A,R1 MOV B,#0AHDIV AB ;将计数值转为十进制由于这次的数字比较小而且要显示在L0L7上,所以可以用这种方法,如果是数字比较大的话这种方法也不奏效,需要写一段通用代码来实现。后面的问题可谓是一只强大的拦路虎,可能是基础只是不过关的缘故,我们一直在数字的显示顺序上纠结万分,用了左循环但是没有达到预期目的,在老师的指导之下才知道原来可以直接位赋值。以后一些使用的知识和技巧一定要掌握。MOV C,ACC.3 ;显示部分,将A中保存的十位赋给L0L3MOV P1.0,C MOV C,ACC.2MOV P1.1,C MOV C,ACC.1MOV P1.2,C MOV C,ACC.0MOV P1.3,CMOV A,B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论