第5章课后题答案ppt课件.ppt
4采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。定时1ms后,又转为计数方式,如此循环不止。假定MCS-51单片机的晶体振荡器的频率为6MHz,请使用方式1实现,要求编写出程序。解答:定时器/计数器T0在计数和定时工作完成后,均采用中断方式工作。除了第一次计数工作方式设置在主程序完成外,后面的定时或计数工作方式分别在中断程序完成,用一标志位识别下一轮定时器/计数器T0的工作方式。编写程序如下:ORG 0000HLJMP MAINORG 000BHLJMP IT0PMAIN:MOV TMOD,#06H ;定时器;定时器/计数器计数器T0为计数方式为计数方式2MOV TL0,#156;计数;计数100个脉冲的初值赋值个脉冲的初值赋值MOV TH0,#156SETB GATE;打开计数门;打开计数门SETB TR0;启动;启动T0,开始计数,开始计数SETB ET0;允许;允许T0中断中断SETB EA;CPU开中断开中断CLRF0 ;设置下一轮为定时方式的标志位;设置下一轮为定时方式的标志位WAIT:AJMPWAITIT0P:CLR EA;关中断;关中断JBF0,COUNT;F0=1,转计数方式设置,转计数方式设置MOV TMOD,#00H;定时器定时器/计数器计数器T0为定时方式为定时方式0MOV TH0,#0FEH;定时;定时1ms初值赋值初值赋值MOV TL0,#0CHSETBEARETICOUNT:MOV TMOD,#06HMOV TL0,#156SETBEARETI6. 编写程序,要求使用编写程序,要求使用T0,采用方式,采用方式2定时,定时,在在P1.0输出周期为输出周期为400s,占空比为,占空比为10:1的的矩形脉冲。矩形脉冲。解答:根据题意,从解答:根据题意,从P1.0输出的矩形脉冲的输出的矩形脉冲的高低电平的时间为高低电平的时间为10:1,则高低电平的时,则高低电平的时间分别为间分别为363.63s和和36.37s。如果系统采。如果系统采用用6MHz晶振的话,因此高低电平输出取晶振的话,因此高低电平输出取整,则约为整,则约为364s和和36s。编写程序如下:编写程序如下: ORG 0000HLJMPMAINORG 000BHLJMPIT0PMAIN:MOV TMOD,#02H;定时器定时器/计数器计数器T0为定时方式为定时方式2MOV TL0,#4AH ;定时;定时364s初值赋值初值赋值SETBTR0;启动;启动T0,开始计数,开始计数SETBET0;允许;允许T0中断中断SETBEA;CPU开中断开中断SETBP1.0WAIT:AJMPWAITIT0P:CLR EACLR P1.0;关中断;关中断MOV R0,#9DLY:DJNZ R0, DLY;延时;延时26sMOV TL0,#4AH ;定时定时364s初值赋值初值赋值SETBP1.0SETBEARETI7. 一个定时器的定时时间有限,如何实现两个定时一个定时器的定时时间有限,如何实现两个定时器的串行定时,来实现较长时间的定时?器的串行定时,来实现较长时间的定时?答:方式一,在第一个定时器的中断程序里关闭本答:方式一,在第一个定时器的中断程序里关闭本定时器的中断程序,设置和打开另一个定时器;定时器的中断程序,设置和打开另一个定时器;在另一个定时器的中断程序中关闭本定时中断,在另一个定时器的中断程序中关闭本定时中断,设置和打开另一个定时器。这种方式的定时时间设置和打开另一个定时器。这种方式的定时时间为两个定时器定时时间的和。为两个定时器定时时间的和。方式二,一个作为定时器,在定时中断后产生一个方式二,一个作为定时器,在定时中断后产生一个外部计数脉冲(比如由外部计数脉冲(比如由P1.0接接INT0产生),另一产生),另一个定时器工作在计数方式。这样两个定时器的定个定时器工作在计数方式。这样两个定时器的定时时间为一个定时器的定时时间乘以另一个定时时时间为一个定时器的定时时间乘以另一个定时器的计数值器的计数值 10. 编写一段程序,功能要求为:当编写一段程序,功能要求为:当P1.0引引脚的电平正跳变时,对脚的电平正跳变时,对P1.1的输入脉冲进的输入脉冲进行计数;当行计数;当P1.2引脚的电平负跳变时,停引脚的电平负跳变时,停止计数,并将计数值写入止计数,并将计数值写入R0、R1(高位存高位存R1,低位存,低位存R0)。解答:将解答:将P1.1的输入脉冲接入的输入脉冲接入INT0,即使用,即使用T0计数器完成对计数器完成对P1.1口的脉冲计数。口的脉冲计数。编写程序如下:编写程序如下: ORG0000HLJMP MAINORG 000BHLJMP IT0PMAIN:JNBP1.0,MAINMOV TMOD, #05H ;定时器;定时器/计数器计数器T0为计数方式为计数方式1SETB TR0 ;启动;启动T0,开始计数,开始计数SETB ET0;允许;允许T0中断中断SETB EA;CPU开中断开中断WAIT: JBP1.2,WAITCLREACLRTR0MOV R1,TH0MOV R0,TL0 AJMP$IT0P: INC R2RETI