
关于一道单片机编程题
此题如下:设系统时钟频率谓12MHZ编程实现从p1.1输出周期1s的方波。注:用T1计数实现。T1工作于计数方式时,计数脉冲通过T1(p3.5)输入。T0定时到对T1(p...
此题如下:设系统时钟频率谓12MHZ编程实现从p1.1输出周期1s的方波。
注:用T1计数实现。T1工作于计数方式时,计数脉冲通过T1(p3.5)输入。T0定时到对T1(p3.5)取反一次,则T1(p3.5)每20ms产生一个计数脉冲,那么定时500ms只需2次。设T1工作于方式2,T0工作于方式1,定时方式;则这时方式控制字为61H.定时计数器T0,T1都采用中断方式工作。
程序如下:
ORG 000H
LJMP MAIN
ORG 000BH
MOV TH0,#0D8H
MOV TL0,#0F0H
CPL P3.5
RETI
ORG 001BH
CPL P1.1
RETI
ORG 0100H
MAIN: MOV TMOD,#61H
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV R2,#00H
MOV TH1,#0E7H
MOV TL1,#0E7H
SETB EA
SETB ETO
SETB ET1
SETB TR0
SETB TR1
SJMP $
END
有一点觉得很奇怪:它是通过对T1(p3.5)取反计数的,但是每取反两次不就又变回原来的值了吗,到头来哪儿起到计数作用了,还有就是R2到底起到什么作用了。本人初学,问题可能较简单,莫见笑 展开
注:用T1计数实现。T1工作于计数方式时,计数脉冲通过T1(p3.5)输入。T0定时到对T1(p3.5)取反一次,则T1(p3.5)每20ms产生一个计数脉冲,那么定时500ms只需2次。设T1工作于方式2,T0工作于方式1,定时方式;则这时方式控制字为61H.定时计数器T0,T1都采用中断方式工作。
程序如下:
ORG 000H
LJMP MAIN
ORG 000BH
MOV TH0,#0D8H
MOV TL0,#0F0H
CPL P3.5
RETI
ORG 001BH
CPL P1.1
RETI
ORG 0100H
MAIN: MOV TMOD,#61H
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV R2,#00H
MOV TH1,#0E7H
MOV TL1,#0E7H
SETB EA
SETB ETO
SETB ET1
SETB TR0
SETB TR1
SJMP $
END
有一点觉得很奇怪:它是通过对T1(p3.5)取反计数的,但是每取反两次不就又变回原来的值了吗,到头来哪儿起到计数作用了,还有就是R2到底起到什么作用了。本人初学,问题可能较简单,莫见笑 展开
2个回答
展开全部
计数是对脉冲的计数,你可以理解为从高电平变到低电平的时候算一次,反两次只是电平变为原来的,但只发生了一次从高到低的过程,所以是计数器要加1,
反4次,电平还是变为原来的电平,但会发生两次从高到底的过程,所以计数器应该是加了2;
在这里,MOV R2,#00H是没有什么作用,但不影响程序的正确执行
反4次,电平还是变为原来的电平,但会发生两次从高到底的过程,所以计数器应该是加了2;
在这里,MOV R2,#00H是没有什么作用,但不影响程序的正确执行
展开全部
T1是这么计数的:只要开启计数器的计数功能,当T1口的电平从高“1”到低0“0”跳变时就会计数一次(不论是软件产生还是外部触发产生)因此P3.5要翻转两次才会计数一次,定时器T0每10ms中断一次故TH0=0xD8,TL0=0xF0,T1口翻转一次,相当于T1口要20ms才计数一次,500ms要计数25次,因此TH1=TL1=0xe7(方式2为自动重装载方式),在这段程序里好像没看见R2有什么作用...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询