单片机晶振为12MHz,编程实现T0模式1下在P1.1处输出周期为td的对称方波。
分析:利用定时器定时溢出控制P1.1输出的反相,达到输出周期方波
51的TOMD控制着定时器T0的工作,首先设置TMOD中的值
未用到的位默认为0,此处需要用到定时器0模式1,故TMOD=0000 0001B=01H
定时器的初值决定了它的定时时间,那么定时器的初值应该为多少呢?根据题目要求,要输出的方波周期为td,即td/2使输出翻转一次,故定时时间为td/2,设td=3ms
模式1下的定时器是16位的,故初值计算如下:
算得X=0FA24H
Tm代表机器周期,是状态周期的6倍,时钟周期的12倍,时钟周期是晶振的倒数。
程序逻辑实现(51汇编)
MOV TMOD, #01H ;初始化TMOD
MOV TH0 , #0FAH ;初始化T0
MOV TL0 , #24H
SETB TR0 ;启动T0,开始定时
LOOP:JBC TF0,OVFL ;若计满溢出,则置TF=0并跳转至OVFL,否则一直查询
AJMP LOOP ;无条件转移
OVFL:MOV TH0,#0FAH;不要忘了重新给T0装填初值
MOV TL0,#24H
CPL P1.1 ;取反P1.1,实现输出周期对称波
AJMP LOOP
总结:利用定时器使单片机输出对称方波,可利用定时使输出反转,定时时间控制输出的周期,注意翻转时间是周期的一半。 程序中需要设置TMOD、T0的初值,启动T0与查询结构。 JBC指令在查询对象为1时清0跳转,很适合标志位的查询。
图片来源:百度百科