当前位置:文档之家› (完整版)第6章作业及答案

(完整版)第6章作业及答案

第5章作业1、说明定时器T0的四种工作方式。

(P.145 第6题)2、假设单片机晶振fosc=6MHz,若要求定时分别为0.1ms , 1ms , 10ms,定时器T0工作在方式0、方式1、方式2时,其初值应为多少?晶振fosc=6MHz,则机器周期为2us定时0.1ms时的初始值:50=110010 B模式0:(213-50)=(8192-50)=8142=1111 1110 0 1110 BTH0=#FEH0 ; TL0=#0EH模式1:(216-50)=(65536-50)=65486=1111 1111 1100 1110 BTH0=#0FFH ;TL0=#0CEH模式2:(28-50)=(256-50)=206=1100 1110 BTH0=#0CEH ; TL0=#0CEH定时1ms时的初始值:500=111110100 B模式0:(213-500)=(8192-500)=7692=1111 0000 0 1100 BTH0=#0F0H ; TL0=#0CH模式1:(216-500)=(65536-500)=65036=1111 1110 0000 1100 BTH0=#0FEH ; TL0=#0CH定时10ms时的初始值:5000=1001110001000 B模式1:(216-5000)=(65536-5000)=60536=1110 1100 0111 1000 BTH0=#0ECH ; TL0=#78H3、假设单片机晶振fosc=6MHz,请利用T0和P1.0输出矩形波,矩形波的高电平宽50us,低电平宽300us。

(P.145 第13)晶振fosc=6MHz→机器周期为2us定时器T0使之工作于模式3定时50us的初值为:256-25=231 (E7H)定时300US的初值为:256-150=106 (6AH)方法1:MOV TMOD , #00000011B ;T0工作于模式3MOV TCON ,#0 ;清TR0 , TF0MOV TL0 , #0E7H ;高电平初值。

256-25SETB P1.0 ;P1.0口输出高电平SETB TR0 ;启动定时器T0LOOP1: JNB TF0 , LOOP1 ;检测T0是否溢出CLR TF0 ;清除溢出标志CLR TR0 ;关闭定时器MOV TL0 , #6AH ;写低电平初值 256-150SETB TR0 ;启动定时器T0CLR P1.0 ;使P1.0输出低电平LOOP2: JNB TF0 , LOOP2 ;检测T0是否溢出CLR TF0 ;清除溢出标志CLR TR0 ;关闭定时器MOV TL0 , #0E7H ;写高电平初值 256-25SETB TR0 ;启动定时器T0SETB P1.0 ;使P1.0输出高电平SJMP LOOP1 ;重复方法2:MOV TMOD , #03H ; T0工作于模式3MOV TCON , #0 ; 清TR0 , TF0MOV TL0 , #0E7H ; 高电平初值。

256-25SETB P1.0 ; P1.0口输出高电平SETB TR0 ; 启动定时器T0LOOP: JNB TF0 , LOOP ; 检测T0是否溢出CLR TF0 ; 清除溢出标志CLR TR0 ; 关闭定时器JNB P1.0 , NEXT ; P1.0口为低电平转移,; 高电平顺序执行MOV TL0 , #6AH ; 定时器T0写入低电平的定时初值SETB TR0 ; 启动定时器T0CLR P1.0 ; P1.0口输出低电平SJMP LOOP ; 返回重复NEXT: MOV TL0 , #0E7H ; 定时器T0写入高电平的定时初值 SETB TR0 ; 启动定时器T0SETB P1.0 ; P1.0口输出高电平SJMP LOOP ; 返回重复4、假设单片机晶振fosc=12MHz,用T1定时,试编程由P1.0和P1.1引脚分别输出周期为2ms和500us的方波。

(P.145 第14题)晶振fosc=6MHz→机器周期为1us定时器T0使之工作于模式1定时250us的初值为:65536-250 = 65286 = 1111 1111 0000 0110 B = FF06 H方法一:MOV TMOD , #10H ; T1工作于模式1MOV TCON , #0 ; TR1、TF1清零MOV TH1 , #0FFH ; 65536-250=(FF06H)MOV TL1 , #05H ;MOV R7 , #4 ; 2ms是500us的4倍SETB P1.0 ; P1.0置高电平SETB P1.1 ; P1.1置高电平SETB TR1 ; 启动定时器T1LOOP: JNB TF1 , LOOP ; 定时器是否溢出?CLR TF1 ; 定时器溢出后,清除定时器溢出标志 CPL P1.1 ; 取反P1.1DJNZ R7 , NEXT ; 4倍关系是否满足?MOV R7 , #4 ; 重写4倍关系CPL P1.0 ; 取反P1.0NEXT: CLR TR1 ; 关闭定时器T1MOV TH1 , #0FFH ; 重写定时器T1的初值MOV TL1 , #06H ;SETB TR1 ; 启动定时器T1SJMP LOOP ; 返回重复方法二:MOV TMOD , #20H ; T1工作于模式2MOV TCON , #0 ; TR1、TF1清零MOV TH1 , #6 ; 定时500us的初值(256-250)=6 MOV TL1 , #6 ;MOV R7 ,#4 ; 500us与2ms是4倍的关系SETB P1.0 ; 将P1.0置高电平SETB P1.1 ; 将P1.1置高电平SETB TR1 ; 启动定时器T1LOOP: JNB TF1 , LOOP ; 定时器T1是否溢出CLR TF1 ; 清溢出标志TF1CPL P1.1 ; 取反P1.1口DJNZ R7 ,LOOP ; (R7)-1→(R7),(R7)是否为0CPL P1.0 ; 取反P1.0口MOV R7 , #4 ; 重写R7SJMP LOOP ; 返回重复5、编写程序,其功能为:当P1.2引脚的电平上跳时,对P1.1输入的脉冲进行记数;当P1.2引脚的的电平下跳时,停止记数,并将结果存入R7R6中。

(P.146 第17题)MOV TMOD , #05H ; 定时器T0工作于方式1,计数方式 MOV TCON , #0 ; 清除TF0、TR0。

MOV TH0 , #0 ; 定时器T0初始值清零MOV TL0 , #0 ;LOOP1: JNB P1.2 , LOOP1 ; P1.2的电平是否上跳SETB TR0 ; 启动定时器T0开始计数LOOP2: JB P1.2 , LOOP2 ; P1.2的电平是否下跳CLR TR0 ; 停止计数MOV A , TL0 ; 将计数结果写入R7、R6,MOV R6 , A ; R6写入低8位MOV A , TH0 ;MOV R7 , A ; R7写入高8位6、设fosc=12MHz,编写程序,其功能为:对T0进行初始化,使之工作于模式2,产生200us的定时,并用查询T0溢出标志TF0的方法,控制P1.0引脚输出周期为2ms的方波。

(P.146 第18题)MOV TMOD , #02H ; T0工作于模式2,定时方式MOV TCON , #0 ; 清除TF0、TR0。

MOV TH0 , #56 ; (256-200)=56MOV TL0 , #56 ;MOV R7 , #5 ; 200us与1ms是5倍的关系SETB TR0 ; 启动定时器T0SETB P1.0 ; 将P1.0置高电平LOOP: JNB TF0 , LOOP ; 检测T0的溢出标志CLR TF0 ; 清除T0的溢出标志DJNZ R7 , LOOP ; 是否到5次MOV R7 , #5 ; 重新写入计数次数CPL P1.0 ; 取反P1.0口SJMP LOOP ; 循环往复7、fosc=6MHz,用模式1编程实现:以定时器T1进行外部事件计数,每计数1000个脉冲后,定时器T1转为定时工作方式,定时10ms后又转为计数方式,如此循环不止。

(P.145 第8题)MOV TCON , #0 ; 清TF1、TR1START: MOV TMOD , #50H ; T1工作于模式1,计数方式MOV TH1 , #0FCH ; (65536-1000)=FC18HMOV TL1 , #18H ;SETB TR1 ; 启动T1,计数开始LOOP1: JNB TF1 , LOOP1 ; 检测T1溢出标志CLR TF1 ; 清除T1溢出标志MOV TMOD , #10H ; T1工作于模式1,定时方式 CLR TR1 ; 关闭T1MOV TH1 , #0ECH ; (65536-5000)=EC6EHMOV TL1 , #6EH ;SETB TR1 ; 启动定时器T1LOOP2: JNB TF1 , LOOP2 ; 检测T1溢出标志CLR TF1 ; 清除T1溢出标志CLR TR1 ; 关闭T1SJMP START ; 循环不止第5章参考作业及答案8、89C51单片机的P3.3口有1Hz的方波输入,P3.5口有频率介于1KHz—5KHz 的周期信号输入,试利用定时器T1的相关功能,编程计算该周期信号的频率,并将其存于片外RAM2100H单元中。

MOV TMOD , #D0H ;T1:方式1、计数、开关由TR1和P3.3联合控制 CLR TF1 ;清除溢出标志CLR TR1 ;关闭定时器MOV TH1 , #0 ;写入计数初值MOV Tl1 , #0 ;LOOP1: JNB P3.3 , LOOP1 ;等待P3.3为高电平SETB TR1 ;启动定时器T1LOOP2: JB P3.3 , LOOP2 ;等待计数结束CLR TR1 ;关闭定时器T1CLR C ;清除进位标志MOV A , TL1 ;读取计数脉冲数的低8位RLC A ;低8位×2MOV DPTR , #2100H ;片外目的数据存储器地址指针MOVX @DPTR , A ;低8位存入要求的目标地址INC DPTR ;目标地址+1MOV A ,TH1 ;读取计数脉冲数的高8位RLC A ;低8位×2MOVX @DPTR , A ;低8位存入要求的目标地址方法二:利用中断方式思路:P3.3引脚上输入1Hz的方波,即每隔1秒钟中断一次,利用中断间隔测P3.5引脚的脉冲数。

ORG 0000HSJMP Main ;转移到主程序ORG 001BHAJMP T1 ;转移到真正的中断服务程序ORG 0030HMain: MOV TMOD , #50H ;定时器T1:方式1、计数、开关由软件控制 CLR TF1 ;清除定时器溢出标志CLR TR1 ;关闭定时器T1MOV IE , #08H ;允许定时器T1中断MOV IP , #0 ;未设置中断优先级别MOV TH1 , #0 ;计数初值MOV TL1 , #0 ;CLR F0 ;清除开始计数标志SETB EA ;开中断SJMP $ ;等待中断T1: JB F0 , NEXT ;判断是否开始计数SETB TR1 ;启动计数器SETB F0 ;计数标志置1SJMP NEXT1 ;转移NEXT: CLR TR1 ;关闭计数器CLR F0 ;计数标志清0MOV DPTR , #2100H ;地址指针指向目标地址MOV A , TL1 ;读计数器的低8位MOVX @DPTR , A ;存计数器的低8位MOV A , TH1 ;读计数器的高8位INC DPTR ;地址指针加1MOVX @DPTR , A ;存计数器的高8位NEXT1: JNB P3.3 , NEXT1 ;等待P3.3引脚上出现高电平RETI ;中断返回9、当系统选用6MHz晶体振荡器时,由T0工作在方式为2,利用中断响应,产生周期为2ms(脉冲宽度为1ms)的方波序列,并由P1.0输出。

相关主题