《第三次作业讲评···(共6页).doc》由会员分享,可在线阅读,更多相关《第三次作业讲评···(共6页).doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上116页8、利用定时器/计数器T0从P1.0输出周期为1s,脉宽为20ms的正脉冲信号,晶振频率为12MHZ。试设计程序。解:波形如图所示20ms1000ms从图中可知,高电平持续时间是20ms,低电平持续时间是980ms,低电平为高电平持续时间的49倍。用T0的方式1定时20ms,采取中断方式,在中断服务程序中,利用R7作为计数的寄存器,赋值50,每次20ms中断之后将R7内容减一,当R7是50时也就是第一次20ms将P1.0置高电平,当R7小于等于49时将P1.0清零,R7减到0了则赋回初值50,而时间常数计算如下式:其中,定时长度为20ms,并由于晶振频率为12
2、MHZ,所以机器周期长度为1微秒程序如下:ORG 0SJMP MAINORG 0BHSJMP INT0ORG 30HMAIN: MOV TMOD, #1 MOV TH0, #0B1H MOV TL0, #0E0H SETB ET0SETB EAMOV R7, #50SETB P1.0SETB TR0SJMP $INT0: MOV TH0, #0B1H MOV TL0, #0E0H DJNZ R7, EXITMOV R7, #50SETB P1.0SIMP BACKEXIT: CLR P1.0BACK: RETI END 9、要求从P1.1引脚输出1000HZ的方波,晶振频率为12MHZ。试设计
3、程序。解:1000HZ的方波的周期是1ms,则每隔0.5ms对P1.1取反一次则成为一个方波信号用T0的方式1定时0.5ms,采取中断方式,初值计算如下式:其中,定时长度为0.5ms,并由于晶振频率为12MHZ,所以机器周期长度为1微秒程序如下:ORG 0SJMP MAINORG 0BHSJMP INT0ORG 30HMAIN: MOV TMOD, #1 MOV TH0, #0FEH MOV TL0, #0CH SETB ET0SETB EASETB P1.1SETB TR0SJMP $INT0: MOV TH0, #0FEH MOV TL0, #0CH CPL 1.1RETI END10、试
4、用定时器/计数器T1对外部事件计数。要求每计数100,就将T1改成定时方式,控制P1.7输出一个脉宽为10ms的正脉冲,然后又转为计数方式,如此反复循环。设晶振频率为12MHZ。解:首先将T1设成方式1的计数模式,所以(TMOD)= #50H, 而计数初值=65536-100=65436=0FF9CH所以此时,(TH1)= #0FFH, (TL1)= #9CH而当计够100次之后产生中断,将T1设成方式1的定时模式,所以(TMOD)= #10H,其中,定时长度为10ms,并由于晶振频率为12MHZ,所以机器周期长度为1微秒,定时初值计算如下:所以此时,(TH1)= #0D8H, (TL1)=
5、#0F0H程序采用中断方式,则计数中断和定时中断都会进入该中断服务程序,由于计数中断和定时中断是交替进行的,所以用一个软件标志位表示进入中断服务程序时的奇偶次,在此选取PSW的一个用户自定义位PSW.5,该位的位名称是F0,预先清零,而在每次进入中断服务程序时都将它取反,则在F0清零的时候标志着计数功能,F0置位的时候标志着定时功能,程序如下所示:ORG 0SJMP MAINORG 1BHSJMP INT1ORG 30HMAIN: MOV TMOD, #50H MOV TH1, #0FFH MOV TL1, #9CH CLR F0SETB ET1SETB EACLR P1.7SETB TR1S
6、JMP $INT1: CPL F0 ;每次进入中断服务程序,都改变F0的奇偶性JNB F0, POSISETB P1.7 ;定时方式期间,P1.7高电平MOV TMOD, #10H ;定时10ms,高电平会持续10ms,也就是正脉冲 MOV TH1, #0D8H MOV TL1, #0F0H SJMP EXITPOSI: CLR P1.7 ;计数方式期间,P1.7低电平MOV TMOD, #50H MOV TH1, #0FFH MOV TL1, #9CH EXIT: RETI END11、利用定时器/计数器T0产生定时时钟,由P1口控制8个指示灯。编一个程序,使8个指示灯依次一个一个闪动,闪动
7、频率为20次/秒(8个灯依次亮一遍为一个周期)。解:假设晶振频率为12MHZ,所以机器周期长度为1微秒,再假设指示灯是用高电平点亮,P1口引脚上的信号如下图所示:P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.712345678916171819201011121314151秒从图中可知,1秒钟之内总共有20次高电平时间片段在P1.0P1.7引脚上依次出现并循环反复,所以每一次高电平持续时间是1/20秒,即0.05秒,所以定时时间选择0.05秒。而引脚上的指示灯依次点亮采用将一个初始的二进制代码:B先存入累加器A,然后送出P1口点亮最边上的一个指示灯,并定时0.05秒之后将A中的
8、内容左移位之后,再次送出P1口点亮下一个指示灯的方法来实现。选用T0的方式1的定时模式,时间常数计算如下:所以此时,(TH10)= #03CH, (TL0)= #0B0H程序采用中断方式,如下所示:ORG 0SJMP MAINORG 0BHSJMP INT0ORG 30HMAIN: MOV TMOD, #1H MOV TH0, #3CH MOV TL0, #0B0H MOV A, #1 ;初始代码是B,中断程序中将该值左移之后送P1口MOV P1, ASETB ET0SETB EASETB TR0SJMP $INT0: MOV TH0, #0FEH MOV TL0, #0CH RL AMOV
9、P1, ARETIEND12、晶振频率为12MHZ,如何用T0来测量201s之间的方波周期?又如何测量频率为0.5MHZ左右的脉冲频率?答:第一个问题的解答如下:(1)、将TOMD的位3,即T0的GATE位设为1,并将201s周期的方波信号接到引脚,用定时方式就可测量该信号的正脉冲的宽度,也就是高电平持续时间;(2)、而方波是高低电平时间相等的信号,所以该方波的周期就是高电平持续时间的两倍;(3)、当晶振频率为12MHZ时,机器周期是1微秒,定时方式下就是每隔1微秒对加1寄存器TH0、TL0进行加1操作,若将T0设置成16位的定时方式,所能测正脉冲的最大宽度也只能达到65536微秒也就是65.
10、536毫秒,则此时能测量的方波的最大周期只能达到约131毫秒,不符合题目要求;(4)、为此不能单纯用原先的加1寄存器TH0、TL0单独完成题目要求,而必须结合采用一个寄存器或者寄存单元来计,在此假设使用R7作为计数用的寄存器,若将T0设置成定时50毫秒中断,则在中断服务程序中R7只要计够10次的50毫秒时间段就是0.5秒的高电平持续时间,乘以2就是周期为1秒的方波的周期值,计够200次的50毫秒时间段就是10秒的高电平持续时间,乘以2就是周期为20秒的方波的周期值;(5)、在测量精度方面再进一步考虑,若把重装时间常数的指令作为中断服务程序的第一和第二条来执行,那么从T0的溢出标志被置位到进入到
11、相应的中断服务程序需要至少3个机器周期,执行两条重装时间常数的指令共要2个机器周期,总共5个机器周期才能进行下一次50毫秒的定时,5个机器周期是5微秒,每50毫秒就会产生5微妙的误差,测量0.5秒的高电平,要进入中断服务程序10次,累积的误差就是50微秒,于是要测出周期为1秒(高电平持续0.5秒)的方波,相对误差等于:,测量10秒的高电平,要进入中断服务程序200次,累积的误差就是1000微秒,于是要测出周期为20秒(高电平持续10秒)的方波,相对误差也是等于:,误差都很小;(6)、如果确实想测量得更精准,那么在算出50毫秒对应该装入的时间常数X之上再加上5,也就是把(X+5)填入,就可抵消5
12、微秒的误差了。第二个问题的解答如下:(1)、0.5MHZ左右的脉冲也就是1秒钟出现脉冲的个数是个,也就是50万个,所以用T0的计数方式;(2)、T0的方式1设成计数方式,最大只能计65536次,所以可以考虑两种方法:第一种方法是定时20个50毫秒也就是1秒钟,在一秒钟里,数T1计数引脚出现的脉冲个数,并把计数的数值用1个寄存单元或者寄存器比如用R7,存储计满65536次脉冲后溢出的次数,那么就可以计到次,也就是1677.7215万次,满足量程要求;另一种方法是:定时50毫秒时间段,在50毫秒时间段里数T1引脚出现的脉冲个数,这个50毫秒时间段是1秒钟时间段的二十分之一,所以数出的脉冲个数要乘以20,就是该信号的频率。专心-专注-专业