计数器实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
㈠实验目的1.学习单片机内部定时/计数器的使用和编程方法;2.进一步掌握中断处理程序的编程方法。㈡实验器材1.G6W仿真器 一台2.MCS—51实验板 一台3.PC机 一台4.电源 一台5.信号发生器 一台㈢实验内容及要求8051内部定时计数器,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms中断一次,看T0内每50ms来了多少脉冲,将计数值送显(通过LED发光二极管8421码来表示),1秒后再次测试。 ㈣实验说明1.本实验中内部计数器其计数器的作用,外部事件计数器脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。2.计数脉冲由信号发生器输入(从T0端接入)。3.计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421码表示,个位用L8~L5的8421码表示4.将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动次数并显示㈤实验框图(见下页)计数器主程序框图程序源代码ORG00000HLJMPMAINORG001BH ;T0的中断入口地址AJMPMAIN1MAIN:MOVSP,#60HMOVTMOD,#15H ;设置T1做定时器,T0做计数器,都于方式1工作MOV20H,#14H ;装入中断次数MOVTL1,#0B0H ;装入计数值低8位MOVTH1,#3CH ;装入计数值高8位MOVTL0,#00H MOVTH0,#00HSETBTR1 ;启动定时器T1SETBTR0 ;启动计数器T0SETBET1 ;允许T1中断SETBEA ;允许CPU中断SJMP$ ;等待中断MAIN1:PUSHPSWPUSHACCCLRTR0CLRTR1 ;保护现场MOVTL1,#0B0H ;装入计数值低8位MOVTH1,#3CH ;装入计数值高8位,50ms ;允许T1中断DJNZ20H,RETUNT ;未到1s,继续计时MOV20H,#14H;1s到重新开始SHOW: ;显示计数器T0的值MOVR0,TH0 ;读计数器当前值MOVR1,TL0MOVA,R1 MOVB,#0AHDIVAB;将计数值转为十进制MOVC,ACC.3 ;显示部分,将A中保存的十位赋给L0~L3MOVP1.0,CMOVC,ACC.2MOVP1.1,CMOVC,ACC.1MOVP1.2,CMOVC,ACC.0MOVP1.3,CMOVA,B ;将B中保存的各位转移到A中MOVC,ACC.3 ;将个位的数字显示在L4~L7上MOVP1.4,CMOVC,ACC.2MOVP1.5,CMOVC,ACC.1MOVP1.6,CMOVC,ACC.0MOVP1.7,C RETUNT:MOVTL0,#00H ;将计数器T0清零MOVTH0,#00HSETBTR0SETBTR1POPACCPOPPSWRETI ;中断返回在频率为1000HZ时,L0~L7显示为50;频率为300HZ时,L0~L7显示为15,结果正确,程序可以正确运行。思考与小结:有了前面的定时器实验做基础,定时器计数器的选择以及初始化已经不再是难点,本次试验的重点是写入两个中断判断程序和十六进制到十进制的转化和显示。MOVTL1,#0B0H ;装入计数值低8位MOVTH1,#3CH ;装入计数值高8位,50ms MOV20H,#14H ;未到1s,继续计时DJNZ20H,RETUNT ;1s到重新开始RETUNT:MOVTL0,#00H ;将计数器T0清零MOVTH0,#00H由于书上详细解释了设置中断时间的问题,所以中断程序并没有什么太大的难点,主要是要思考一下程序的执行顺序问题。十六进制到十进制的转化和显示使我们这次实验遇到的比较大的困难,刚开始采用的是DA指令,由于没有搞清楚它的实质错误的使用了DA。DA用于十六进制到BCD的转换,不能用于十六进制到8421的转换,于是我们思考了很久。后来终于找到了比较简单的方法用除数,十位放在A中,个位也就是余数放在B中。MOVR0,TH0 ;读计数器当前值MOVR1,TL0MOVA,R1 MOVB,#0AHDIVAB ;将计数值转为十进制由于这次的数字比较小而且要显示在L0~L7上,所以可以用这种方法,如果是数字比较大的话这种方法也不奏效,需要写一段通用代码来实现。后面的问题可谓是一只强大的拦路虎,可能是基础只是不过关的缘故,我们一直在数字的显示顺序上纠结万分,用了左循环但是没有达到预期目的,在老师的指导之下才知道原来可以直接位赋值。以后一些使用的知识和技巧一定要掌握。MOVC,ACC.3 ;显示部分,将A中保存的十位赋给L0~L3MOVP1.0,CMOVC,ACC.2MOVP1.1,CMOVC,ACC.1MOVP1.2,CMOVC,ACC.0MOVP1.3,CMOVA,B ;将B中保存的各位转移到A中MOVC,ACC.3 ;将个位的数字显示在L4~L7上MOVP1.4,CMOVC,ACC.2MOVP1.5,CMOVC,ACC.1MOVP1.6,CMOVC,ACC.0MOVP1.7,C