文档详情

第13、14节课(第五章 2小节).ppt

发布:2018-03-06约9.4千字共37页下载文档
文本预览下载声明
运行中读定时器/计数器 80C51可以随时读写计数寄存器TLx和THx (x为0或1) ,用于实时显示计数值等。 办法是:先读THx,后读TLx,再重读THx,若两次读得的THx值是一样的,则可以确定读入的数据是正确的;若两次读得的THx值不一致,则必须重读。 例. 飞读 RDTIME: MOV A,TH0 ;读TH0 MOV R0,TL0 ;读TL0并存入R0 CJNE A,TH0,RDTIME ;再读TH0,与上次 ;读入的TH0比较,若不等,重读 MOV R1,A ;存TH0在R1中 RET 低频信号发生器驱动程序 设计一个控制程序,使89c51的P1口输出8路低频方波脉冲,频率分别为100,50,25,20,10,5,2,1Hz。 1. 计算定时器初值 使用T0,产生5ms的定时,若晶振选12MHz,则5ms相当于5000个机器周期,T0应工作在模式1,初值x为: x= 65536-5000=60536,用十六进制表示,则x=0EC78H。 (注意TH,TL分开赋值---因为T0/T1都是16位) 2 . 设立8个计数器 对应于P1.0~P1.7,设立8个计数器,初值分别为1,2,4,5,10,20,50,100,由T0的溢出中断服务程序对它们减“1”计数,当减为0时恢复初值,并使相应的口引脚改变状态,这样就可以使P1口输出所要求的方波。 程序: ORG 0 START: AJMP MAIN ORG 0BH PTP0: MOV TL0,#78H ;T0中断服务程序 MOV TH0,#0ECH CPL P1.0 DJNZ 31H, PF01 ;对各路时间计数器进行减1计数 MOV 31H,#2 ;计数器减为1,恢复计数初值 CPL P1.1 ;输出取反 PF01: DJNZ 32H, PF02 MOV 32H, #4 CPL P1.2 PF02: DJNZ 33H, PF03 MOV 33H, #5 CPL P1.3 PF03: DJNZ 34H, PF04 MOV 34H, #10 CPL P1.4 PF04: DJNZ 35H, PF05 MOV 35H, #20 CPL P1.5 PF05: DJNZ 36H, PF06 MOV 36H, #50 CPL P1.6 PF06: DJNZ 37H, PF07 MOV 37H, #100 CPL P1.7 PF07: RETI MAIN: MOV SP, #70H ;主程序栈指针初始化 MOV 31H, #2 ;各路计数器置初值 MOV 32H, #4 MOV 33H, #5 MOV 34H, #10 MOV 35H, #20 MOV 36H, #50 MOV 37H, #100 MOV TMOD, #1 ;GATE = 0, C/T=0, M1M0 = 01 MOV TL0, #78H ;初值——〉T0 MOV TH0, #0ECH
显示全部
相似文档