单片机定时器计数器实验报告
单片机定时器计数器实验报告
篇一:单片机计数器实验报告计数器实验报告㈠ 实验目的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。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变,这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样,同时这就决定了输入波形的频率不能超过机器周期频率。 2. 计数脉冲由信号发生器输入(从T0端接入)。3. 计数值通过发光二极管显示,要求:显示两位,十位用L4~L1的8421码表示,个位用L8~L5的8421码表示4. 将脉搏检查模块接入电路中,对脉搏进行计数,计算出每分钟脉搏跳动次数并显示㈤ 实验框图(见下页)程序源代码 ORG 00000H LJMP MAINORG 001BH AJMP MAIN1 MAIN:MOV SP,#60HMOV TMOD,#15H MOV 20H,#14H MOV TL1,#0B0H MOV TH1,#3CHMOV TL0,#00H ;T0的中断入口地址 ;设置T1做定时器,T0做计数器,都于方式1工作 ;装入中断次数 ;装入计数值低8位 ;装入计数值高8位 MOV TH0,#00HSETB TR1 ;启动定时器T1 SETB TR0 ;启动计数器T0 SETB ET1 ;允许T1中断 SETB EA ;允许CPU中断 SJMP $;等待中断MAIN1: PUSH PSW PUSH ACC CLR TR0CLR TR1 MOV TL1,#0B0H MOV TH1,#3CHDJNZ 20H,RETUNT MOV 20H ,#14HSHOW: MOV R0,TH0 MOV R1,TL0MOV A,R1 MOV B,#0AH DIV ABMOV C,ACC.3MOV P1.0,C MOV C,ACC.2 MOV P1.1,C MOV C,ACC.1 MOV P1.2,C MOV C,ACC.0 MOV P1.3,CMOV A,B MOV C,ACC.3MOV P1.4,C MOV C,ACC.2 MOV P1.5,C MOV C,ACC.1 MOV P1.6,C MOV C,ACC.0MOV P1.7,C ;保护现场;装入计数值低8位;装入计数值高8位,50ms;允许T1中断;未到1s,继续计时 ;1s到重新开始;显示计数器T0的值;读计数器当前值 ;将计数值转为十进制;显示部分,将A中保存的十位赋给L0~L3 将B中保存的各位转移到A中 ;将个位的数字显示在L4~L7上;RETUNT:MOV TL0,#00H;将计数器T0清零 MOV TH0,#00HSETB TR0SETB TR1POP ACCPOP PSWRETI ;中断返回在频率为1000HZ时,L0~L7显示为50;频率为300HZ时,L0~L7显示为15,结果正确,程序可以正确运行。 思考与小结:有了前面的定时器实验做基础,定时器计数器的选择以及初始化已经不再是难点,本次试验的重点是写入两个中断判断程序和十六进制到十进制的转化和显示。 MOV TL1,#0B0H ;装入计数值低8位MOV TH1,#3CH;装入计数值高8位,50msMOV 20H,#14H ;未到1s,继续计时 DJNZ 20H,RETUNT;1s到重新开始 RETUNT:MOV TL0,#00H;将计数器T0清零 MOV TH0,#00H由于书上详细解释了设置中断时间的问题,所以中断程序并没有什么太大的难点,主要是要思考一下程序的执行顺序问题。十六进制到十进制的转化和显示使我们这次实验遇到的比较大的困难,刚开始采用的是DA指令,由于没有搞清楚它的实质错误的使用了DA。DA用于十六进制到BCD的转换,不能用于十六进制到8421的转换,于是我们思考了很久
如果觉得《定时器计数器实验C语言程序 单片机定时器计数器实验报告.docx》对你有帮助,请点赞、收藏,并留下你的观点哦!