预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共14页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

单片机定时器计数器实验报告 篇一:单片机计数器实验报告 计数器实验报告 ㈠实验目的 1.学习单片机内部定时/计数器的使用和编程方法;2. 进一步掌握中断处理程序的编程方法。 ㈡实验器材 1.2.3.4.5. G6W仿真器一台MCS—51实验板一台PC机一台电 源一台信号发生器一台 ㈢实验内容及要求 8051内部定时计数器,按计数器模式和方式1工作,对 P3.4(T0)引脚进行计数,使用8051的T1作定时器,50ms 中断一次,看T0内每50ms来了多少脉冲,将计数值送显(通 过LED发光二极管8421码来表示),1秒后再次测试。 ㈣实验说明 1.本实验中内部计数器其计数器的作用,外部事件计 数器脉冲由P3.4引入 定时器T0。单片机在每个机器周期采样一次输入波形, 因此单片机至少需要两个机器周期才能检测到一次跳变,这 就要求被采样电平至少维持一个完整的机器周期,以保证电 平在变化之前即被采样,同时这就决定了输入波形的频率不 1word格式支持编辑,如有帮助欢迎下载支持。 能超过机器周期频率。2.计数脉冲由信号发生器输入(从 T0端接入)。 3.计数值通过发光二极管显示,要求:显示两位,十 位用L4~L1的8421 码表示,个位用L8~L5的8421码表示 4.将脉搏检查模块接入电路中,对脉搏进行计数,计 算出每分钟脉搏跳动 次数并显示 ㈤实验框图(见下页) 程序源代码ORG00000HLJMPMAIN ORG001BHAJMPMAIN1MAIN: MOVSP,#60H MOVTMOD,#15HMOV20H,#14HMOVTL1,#0B0HMOV TH1,#3CHMOVTL0,#00H ;T0的中断入口地址;设置T1做定时器,T0做计数 器,都于方式1工作;装入中断次数;装入计数值低8位; 装入计数值高8位 MOVTH0,#00H SETBTR1;启动定时器T1SETBTR0;启动计数器T0 SETBET1;允许T1中断SETBEA;允许CPU中断SJMP$; 等待中断 MAIN1:PUSHPSWPUSHACCCLRTR0 2word格式支持编辑,如有帮助欢迎下载支持。 CLRTR1MOVTL1,#0B0HMOVTH1,#3CH DJNZ20H,RETUNTMOV20H,#14H SHOW:MOVR0,TH0MOVR1,TL0 MOVA,R1MOVB,#0AHDIVAB MOVC,ACC.3MOVP1.0,CMOVC,ACC.2MOVP1.1,CMOV C,ACC.1MOVP1.2,CMOVC,ACC.0MOVP1.3,C MOVA,BMOVC,ACC.3MOVP1.4,CMOVC,ACC.2MOV P1.5,CMOVC,ACC.1MOVP1.6,CMOVC,ACC.0 MOVP1.7,C;保护现场 ;装入计数值低8位 ;装入计数值高8位,50ms;允许T1中断 ;未到1s,继续计时;1s到重新开始 ;显示计数器T0的值;读计数器当前值;将计数值转为 十进制 ;显示部分,将A中保存的十位赋给L0~L3将B中保存 的各位转移到A中;将个位的数字显示在L4~L7上 ; RETUNT: MOVTL0,#00H;将计数器T0清零MOVTH0,#00H SETBTR0SETBTR1POPACCPOPPSW RETI;中断返回 在频率为1000HZ时,L0~L7显示为50;频率为300HZ 3word格式支持编辑,如有帮助欢迎下载支持。 时,L0~L7显示为15,结果正确,程序可以正确运行。思 考与小结: 有了前面的定时器实验做基础,定时器计数器的选择以 及初始化已经不再是难点,本次试验的重点是写入两个中断 判断程序和十六进制到十进制的转化和显示。MOV TL1,#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,TL0 MOVA,R1MOVB,#0AH DIVAB;将计数值转为十进制 4word格式支持编辑,如有帮助欢迎下载支持。