2022年2022年第6章作业及答案_第1页
2022年2022年第6章作业及答案_第2页
2022年2022年第6章作业及答案_第3页
2022年2022年第6章作业及答案_第4页
2022年2022年第6章作业及答案_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选学习资料 - - - 欢迎下载第 5 章作业1.说明定时器 t0 的四种工作方式; p.145第 6 题m1m0工作模式功 能 说 明00013 位的定时 / 计数模式,tl0 的高 3 位没用;01116 位的定时 / 计数模式1028 位.初始值自动加载的定时/ 计数模式;11将 t0 分成两个相互独立的. 8 位的定时 / 计3数模式;2.假设单片机晶振fosc=6mhz,如要求定时分别为0.1ms 、 1ms 、 10ms,定时器 t0 工作在方式 0.方式 1.方式 2 时,其初值应为多少?晶振 fosc=6mhz,就机器周期为2us定时 0.1ms 时的初始值:50=11001

2、0 b模式 0: 2 13-50=8192-50=8142=1111 1110 0 1110 b th0=#feh0; tl0=#0eh模式 1: 2 16-50=65536-50=65486=1111 1111 1100 1110 bth0=#0ffh; tl0=#0ceh模式 2: 2 8-50=256-50=206=1100 1110 b th0=#0ceh ; tl0=#0ceh定时 1ms时的初始值:500=111110100 b1316模式 0: 2-500=8192-500=7692=1111 0000 0 1100 b th0=#0f0h ; tl0=#0ch模式 1: 2-5

3、00=65536-500=65036=1111 1110 0000 1100 bth0=#0feh ; tl0=#0ch定时 10ms时的初始值: 5000=1001110001000 b模式 1: 2 16-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

4、定时 50us 的初值为: 256-25=231e7h定时 300us的初值为: 256-150=1066ah方法 1:movtmod 、 #00000011b;t0工作于模式 3movtcon 、#0;清 tr0 、 tf0movtl0 、 #0e7h;高电平初值;256-25setbp1.0;p1.0setbtr0;口输出高电平启动定时器 t0loop1: jnbtf0 、 loop1;检测 t0 为否溢出clr tf0;清除溢出标志clr tr0;关闭定时器movtl0 、 #6ah;写低电平初值256-150setbtr0;启动定时器 t0clr p1.0;使 p1.0 输出低电平lo

5、op2: jnbtf0 、 loop2;检测 t0 为否溢出clr tf0;清除溢出标志clr tr0;关闭定时器movtl0 、 #0e7h;写高电平初值256-25setbtr0;启动定时器 t0setbp1.0;使 p1.0 输出高电平sjmploop1;重复方法 2:movtmod 、 #03h; t0工作于模式 3movmovtcon 、 #0tl0 、 #0e7h;清 tr0 、 tf0高电平初值;256-25setbp1.0; p1.0setbtr0; loop:jnbtf0 、 loopclr tf0;clr tr0;jnbp1.0 、 next; p1.0;口输出高电平启动定

6、时器 t0 检测 t0 为否溢出清除溢出标志 关闭定时器口为低电平转移, 高电平次序执行movtl0 、 #6ah;定时器 t0 写入低电平的定时初值精品学习资料精选学习资料 - - - 欢迎下载setbtr0;启动定时器 t0clr p1.0; p1.0口输出低电平sjmploop;返回重复next:movtl0 、 #0e7h;定时器 t0 写入高电平的定时初值setbtr0;启动定时器 t0setbp1.0; p1.0sjmploop;口输出高电平返回重复4.假设单片机晶振fosc=12mhz,用 t1 定时,试编程由p1.0 和 p1.1 引脚分别输出周期为 2ms和 500us 的方

7、波; p.145第 14 题晶振 fosc=6mhz机器周期为 1us定时器 t0 使之工作于模式1定时 250us 的初值为: 65536-250 = 65286 = 1111 1111 0000 0110 b= ff06 h方法一:movmovtmod 、 #10htcon 、 #0; t1; tr1工作于模式 1.tf1清零movth1 、 #0ffh; 65536-250=ff06hmovtl1 、 #05h;movr7 、 #4; 2ms为 500us 的 4 倍setbp1.0; p1.0置高电平setbp1.1; p1.1置高电平setbtr1;启动定时器 t1loop:jnbt

8、f1 、 loop;定时器为否溢出?clr tf1;定时器溢出后, 清除定时器溢出标志cpl p1.1;取反 p1.1djnz r7 、 next; 4倍关系为否满意?movr7 、 #4;重写 4 倍关系cpl p1.0;取反 p1.0next: clr tr1;关闭定时器 t1精品学习资料精选学习资料 - - - 欢迎下载movth1 、 #0ffh;重写定时器 t1 的初值 movtl1 、 #06h;setbtr1;启动定时器 t1movmovtmod 、 #20htcon 、 #0; t1; tr1工作于模式 2.tf1清零movth1 、 #6;定时 500us 的初值( 256-

9、250 )=6sjmploop;返回重复方法二:movtl1 、 #6;movr7 、#4; 500us与 2ms为 4 倍的关系 setbp1.0;将 p1.0 置高电平setbp1.1;将 p1.1 置高电平setbtr1;启动定时器 t1 loop: jnbtf1 、 loop;定时器 t1 为否溢出clr tf1;清溢出标志 tf1cpl p1.1;取反 p1.1 口djnz r7 、loop; r7-1r7、r7为否为 0 cpl p1.0;取反 p1.0 口movr7 、 #4;重写 r7sjmploop;返回重复5.编写程序,其功能为:当 p1.2 引脚的电平上跳时,对 p1.1

10、 输入的脉冲进行记数;当 p1.2 引脚的的电平下跳时, 停止记数, 并将结果存入 r7r6中;p.146 第 17 题movtmod 、 #05h;定时器 t0 工作于方式 1,计数方式movtcon 、 #0;清除 tf0.tr0;movmovth0 、 #0tl0 、 #0;定时器 t0 初始值清零精品学习资料精选学习资料 - - - 欢迎下载loop1: jnbp1.2 、 loop1; p1.2的电平为否上跳setbtr0;启动定时器 t0 开头计数 loop2: jbp1.2 、 loop2; p1.2的电平为否下跳clr tr0;停止计数mova 、 tl0;将计数结果写入 r7

11、.r6, movr6 、 a; r6写入低 8 位mova 、 th0;movr7 、 a; r7写入高 8 位6.设 fosc=12mhz,编写程序,其功能为:对t0 进行初始化,使之工作于模式2,产生 200us 的定时,并用查询t0 溢出标志 tf0 的方法,掌握 p1.0 引脚输出周期为 2ms的方波; p.146第 18 题movtmod 、#02h; t0工作于模式 2,定时方式 movtcon 、 #0;清除 tf0.tr0;movth0 、 #56; 256-200=56 movtl0 、 #56;movr7 、 #5; 200us与 1ms为 5 倍的关系setbtr0;启动

12、定时器 t0setbp1.0;将 p1.0 置高电平loop: jnbtf0 、 loop;检测 t0 的溢出标志clr tf0;清除 t0 的溢出标志djnz r7 、 loop;为否到 5 次movr7 、 #5;重新写入计数次数cpl p1.0;取反 p1.0 口sjmploop;循环往复7.fosc=6mhz,用模式 1 编程实现:以定时器 t1 进行外部大事计数, 每计数 1000 个脉冲后,定时器t1 转为定时工作方式,定时10ms 后又转为计数方式,如此循环不止; p.145第 8 题movtcon 、 #0;清 tf1.tr1start:movtmod 、 #50h; t1工作

13、于模式 1、 计数方式 movth1 、 #0fch; 65536-1000=fc18hmovtl1 、 #18h;setbtr1;启动 t1,计数开头 loop1: jnbtf1 、 loop1;检测 t1 溢出标志clr tf1;清除 t1 溢出标志movtmod 、 #10h; t1工作于模式 1,定时方式 clr tr1;关闭 t1movth1 、 #0ech; 65536-5000=ec6eh movtl1 、 #6eh;setbtr1;启动定时器 t1精品学习资料精选学习资料 - - - 欢迎下载loop2:jnbtf1 、 loop2;检测 t1 溢出标志clr tf1;清除 t

14、1 溢出标志clr tr1;关闭 t1sjmpstart;循环不止第 5 章参考作业及答案8.89c51单片机的 p3.3 口有 1hz 的方波输入, p3.5 口有频率介于 1khz5khz 的周期信号输入,试利用定时器t1 的相关功能,编程运算该周期信号的频率, 并将其存于片外ram2100h单元中;mov tmod 、 #d0h;t1: 方式 1.计数.开关由tr1和 p3.3 联合掌握clr tf1;清除溢出标志clr tr1;关闭定时器movth1 、 #0;写入计数初值movtl1 、 #0;loop1: jnbp3.3 、 loop1;等待 p3.3 为高电平setbtr1;启动

15、定时器t1 loop2: jbp3.3 、 loop2;等待计数终止clr tr1;关闭定时器t1clr c;清除进位标志mova 、 tl1;读取计数脉冲数的低8 位rlc a;低 8 位× 2movdptr 、 #2100h;片外目的数据储备器地址指针 movx dptr 、 a;低 8 位存入要求的目标地址 inc dptr;目标地址 +1mova 、th1;读取计数脉冲数的高8 位rlc a;低 8 位× 2movxdptr 、 a;低 8 位存入要求的目标地址方法二:利用中断方式思路: p3.3 引脚上输入 1hz 的方波,即每隔秒钟中断一次,利用中断间隔测p3.

16、5 引脚的脉冲数;精品学习资料精选学习资料 - - - 欢迎下载org 0000hsjmpmain;转移到主程序org 001bhajmp t1;转移到真正的中断服务程序org 0030hmain:movtmod 、 #50h;定时器 t1:方式.计数.开关由软件掌握 clr tf1;清除定时器溢出标志clr tr1;关闭定时器 t1movie 、 #08h;答应定时器 t1 中断movip 、 #0;未设置中断优先级别movth1 、 #0;计数初值movtl1 、 #0;clr f0;清除开头计数标志setbea;开中断sjmp $;等待中断t1:jb f0 、 next;判定为否开头计数

17、setb tr1;启动计数器setb f0;计数标志置sjmp next1;转移next: clr tr1;关闭计数器clr f0;计数标志清mov dptr 、 #2100h;地址指针指向目标地址 mov a 、 tl1;读计数器的低位 movx dptr 、 a;存计数器的低位 mov a 、 th1;读计数器的高位inc dptr;地址指针加movx dptr 、 a;存计数器的高位next1: jnb p3.3 、 next1;等待 p3.3 引脚上显现高电平reti;中断返回9.当系统选用 6mhz晶体振荡器时,由t0 工作在方式为,利用中断响应,产生周期为 2ms脉冲宽度为 1ms

18、的方波序列,并由p1.0 输出;( 1)写出 t0 定时器的方式掌握字,t0 定时器初值运算;( 2)试编写程序完成此功能;精品学习资料精选学习资料 - - - 欢迎下载思路:方波的周期为 2ms,每隔 1ms对 p1.0 取反,可完成题目要求;系统晶体振荡器的频率为 6mhz,机器周期为 2us,定时器 t0 在方式 2 时,最大定时 256us× 2=512us,达不到 1ms的要求,故将定时器 t0 的初始值选为: 256-250=6 定时 0.5ms ,两次后取反 p1.0 口;(1) ) t0 的初始值为 : x=256-250=6t0的掌握字为:movtmod 、 #20

19、hmovtcon 、 #0( 2)参考程序如下:org 0000hsjmp main org 000bh ajmp t0 org 0030hmain: mov tmod 、 #20h;定时器 t1 工作于方式 2clr tr0;关闭定时器 t1clr tf0;清除定时器 t1 溢出标志movie 、 #02h;答应定时器 t1 中断movip 、 #0;不设置闲适级别movth0 、 #6;定时器 t1 初值movtl0 、 #6;( 256-250=6)movr7 、 #2;定时 0.5ms 与 1ms的 2 倍的关系setbtr0;启动定时器 t1setbea;开中断sjmp $t0: d

20、jnz r7 、 next;两次为否到?未到就中断返回,到就连续cpl p1.0;取反 p1.0 口movr7 、 #2;重置 2 倍的关系next: reti;中断返回10.有一个频率为 10mhz 的方波信号,要求用定时器对该方波信号计数,每计满 100 个脉冲,将 p1.1 脚上的电平取反;精品学习资料精选学习资料 - - - 欢迎下载思路:利用定时器 t0 方式 2 对 p3.2 引脚上输入的脉冲进行计数,每计数 100,取反 p1.0 口;定时器 t0 在方式 2 时的初始值为: x=256-100=1569ch采纳对定时器 t0 的溢出标志 tf0 扫描的方式编程;参考程序如下:m

21、ovtmod 、 #06h;定时器 t0 工作于方式 2 clr tr0;关闭定时器t0clr tf0;清除定时器t0 的溢出标志movth0 、 #156;计数 100 的初值movtl0 、 #156; 256-100=156setbtr0;启动定时器t0 loop:jnbtf0 、 loop;等待溢出clr tf0;清除定时器t0 的溢出标志cpl p1.0;取反 p1.0 口sjmploop;重复循环11.(同第 7 题)按以下要求编写8051 单片机定时器的初始化程序:(1) t0 作为定时,定时时间为10ms.(2) t1 作为计数,记满1000 溢出;1设晶振 f osc=12m

22、hz ,就 t0 在方式 1 时的初始值为 x=65536-10000=55536 10000=8192+1024+512+256+16=10011100010000x=1101 1000 1111 0000 b = #d8f0h定时器 t1 在方式 1 时的初始值为: y=65536-1000 1000=512+256+128+64+32+8=111111000y=1111 1110 0000 1000 b = fe08h2 初始化参考程序movtmod 、 #01010001b ; t0方式 1定时, t1 方式 1计数 movtcon 、 #0;清 tr0 .tf0 .tr1 .tf1m

23、ovie 、 #0ah;答应 t0 .t1 中断 movip 、 #0;不设置优先级 movth0 、 #d8h; t0 的初始值精品学习资料精选学习资料 - - - 欢迎下载movtl0 、 #0f0h;65536-10000=d8f0h movth1 、 #0feh;t1 的初始值movtl1 、 #08h;65536-1000=fe08hsetb tr0;启动定时器t0setb tr1;启动定时器t1setb ea;开中断12.要求从 p1.1 引脚输出 1000hz方波,晶振频率为12mhz;试设计程序;思路:( 1)只要使 p1.1 每隔 500s 取反一次即可得到1ms方波;精品学

24、习资料精选学习资料 - - - 欢迎下载( 2)将 t1 设为定时方式 0:gate=,0c/t =0 ,m1m0=0;0t0 不用可为任意,精品学习资料精选学习资料 - - - 欢迎下载只要不使其进入方式3,一般取 0 即可;故 tmod=00;h下面运算 500s定时 t1的初值:机器周期:t=1s、设初值为 x 就: x=8192-500=7692=1111000001100 b=11110000 0 0110 b=f00ch由于在作 13 位计数器用时, tl1 高 3 位未用,应写0,x 的低 5 位装入 tl1的低 5 位,所以 tl1=#0ch;x 的高 8 位应装入 th1,所

25、以 th1=#f0h;参考源程序如下:movtcon 、 #0;清 tf1.tr1movtmod 、 #0;定时器 t1 工作于方式 0movth1 、 #0f0h;定时 500us 的初值movtl1 、 #0ch;8192-500=7692=f00chsetbtr1;启动定时器 t1loop: jnbtf1 、 loop;等待定时 500us 的溢出 clr tf1;清除溢出标志cpl p1.1;取反 p1.1 口clr tr1;关闭定时器 t1mov th1 、 #0f0h;重写定时 500us 的初值 mov tl1 、 #0ch;重写定时 500us 的初值 setb tr1;启动定

26、时器 t1sjmploop13.试用定时 / 计数器 t1 对外部大事计数;要求每计数100,就将 t1 改成定时方式,掌握p1.7 输出一个脉宽为10ms的正脉冲,然后又转为计数方式,如此精品学习资料精选学习资料 - - - 欢迎下载反复循环;设晶振频率为12mhz;定时器 t1 确定工作于方式 1计数 100 的初始值为: 65536-100100=64+32+4=01100100 b65536-100=1111 1111 1001 1100 b = ff9ch定时 10ms的初始值为: 65536-100005000=4096+512+256+128+8 =100111000100065

27、536-5000=60536=1110 1100 0111 1000 b = ec78h参考程序如下:loop3:clr tr1;关闭定时器 t1clr tf1;清除定时器 t1 的溢出标志 movtmod 50h;定时器 t1 工作于方式 1,计数movth1 、 #0ffh;计数 100 的初值movtl1 、 #9ch;65536-100=ff9chsetb tr1;启动定时器 t1 loop1: jnbtf1 、 loop1;等待计数 100 溢出movtmod 、 #10h;定时器 t1 工作于方式 1,定时 clr tf1;清除定时器溢出标志clr tr1;关闭定时器t1 movt

28、h1 、 #0ech;定时 10ms的初值 movtl1 、 #78h;65536-5000=ec78hsetb tr1;启动定时器 t1 loop2: jnb tf1 、 loop2;等待定时 10ms溢出cpl p1.7;取反 p1.7 口sjmp loop3;返回循环14.如单片机晶振为12mhz,利用定时器1 方式 1,产生 1ms 的定时,在 p1.0脚产生周期为2ms方波,用查询方式工作,查询标志为tf1; 已知 fosc =12mhz 1 个机器周期为 1us1ms=1000us初值=65536-1000=5453664536转换为二进制: 1111 1100 0001 1000t0的低 8 位: 0001100018ht0的高 8 位: 11110000就有:tl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论