单片机习题答案

上传人:仙*** 文档编号:27666929 上传时间:2021-08-19 格式:DOC 页数:47 大小:2.81MB
收藏 版权申诉 举报 下载
单片机习题答案_第1页
第1页 / 共47页
单片机习题答案_第2页
第2页 / 共47页
单片机习题答案_第3页
第3页 / 共47页
资源描述:

《单片机习题答案》由会员分享,可在线阅读,更多相关《单片机习题答案(47页珍藏版)》请在装配图网上搜索。

1、 何宏单片机原理与接口技术习题解答 第4章 习题解答 4-1简述下列基本概念。答 指令:CPU根据人的意图来执行某种操作的命令。 指令系统:一台计算机所能执行的全部指令集合。 机器语言:用二进制编码表示,计算机能直接识别和执行的语言。 汇编语言:用助记符、符号和数字来表示指令的程序语言。 高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言。4-2什么是计算机的指令和指令系统?答 见1题。4-3简述80C51汇编指令格式。答 操作码 目的操纵数,源操作数4-4简述80C51的寻址方式和所能涉及的寻址空间。答 立即数寻址:程序存储器ROM。 直接寻址:片内RAM低1

2、28B和特殊功能寄存器。 寄存器寻址:R0R7,A,AB,Cy,DPTR。 寄存器间接寻址:片内RAM低128B,片外RAM。 变址寻址:程序存储器64KB。 相对寻址:程序存储器256B范围。 位寻址:片内RAM的20H2FH字节地址,部分特殊功能寄存器。4-5要访问特殊功能寄存器和片外数据存储器,应采用哪些寻址方式?答 SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址。4-6在80C51片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请分析下面各是什么指令,说明源操作数的寻址方式及按顺序执行后的结果。答 MOV A,40H

3、直接寻址 MOV R0,A 寄存器寻址 MOV P1,#0F0H 立即数寻址 MOV R0,30H 直接寻址 MOV DPTR,#3848H 立即数寻址 MOV 40H,38H 直接寻址 MOV R0,30H 直接寻址 MOV P0,R0 寄存器寻址 MOV 18H,#30H 立即数寻址 MOV A,R0 寄存器间接寻址 MOV P2,P1 直接寻址 均为数据传送指令,结果(参见下图)为RAM30H38H38H40H40H48H48H90H (18H)=30H,(30H)=38H,(38H)=40H (40H)=40H,(48H)=90H R0=38H,A=40H,P038H,P1FOH,P2

4、=FOH,DPTR=3848H4-7对80C51片内RAM高128B的地址空间寻址要注意什么?答 用直接寻址,寄存器寻址,位寻址。4-8指出下列指令的本质区别。答 MOV A,data 直接寻址 MOV A,#data 立即数寻址 MOV data1,data2 直接寻址 MOV 74H,#78H 立即数寻址4-9设R0的内容为32H,A的内容为48H,片内RAM的32H内容为80H,40H的内容为08H。请指出在执行下列程序段后各单元内容的变化。 MOV A,R0 ;(R0)=80HA MOV R0,40H ;(40H)=08H(R0) MOV 40H,A ;(A)=80H40H MOV R

5、0,#35H ; 35HR0解 (R0)=35H (A)80H (32H)08H (40H)=80H4-10如何访问SFR,可使用哪些寻址方式?答 访问SFR:直接寻址,位寻址,寄存器寻址。4-11如何访问片外RAM单元,可使用哪些寻址方式?答 只能采用寄存器间接寻址(用MOVX指令)。4-12如何访问片内RAM单元,可使用哪些寻址方式?答 低128B:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0R7)。 高128B:直接寻址,位寻址,寄存器寻址。4-13如何访问片内外程序存储器,采用哪些寻址方式?答 采用变址寻址(用MOVC指令)。4-14说明十进制调整的原因和方法。答 压缩BCD码在

6、进行加法运算时本应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。用DAA指令调整(加06H,60H,66H)。4-15说明80C51的布尔处理机功能。 答 用来进行位操作。4-16已知(A)=83H,(R0)=17H,(17H)=34H,请指出在执行下列程序段后A的内容。解 ANL A,#17H ;83H17H=03HA ORL 17H,A ;34H03H=37H17H XRL A,R0 ;03H异或37H=34H CPL A ;34H求反等于CBH 所以 (A)=CBH4-17使用位操作指令实现下列逻辑操作。要求不得改变未涉及位的内容。解 (1) 使ACC.0置1 SET

7、B ACC.0 或 SETB EOH (2) 清除累加器高4位 CLR ACC.7 CLR ACC.6 CLR ACC.5 CLR ACC.4 (3)清除ACC.3,ACC.4,ACC.5,ACC.6 CLR ACC.6 CLR ACC.5 CLR ACC.4 CLR ACC.34-18编写程序,将片内RAM R0R7的内容传送到20H27H单元。解 MOV 27H,R7 MOV 23H,R3 MOV 26H,R6 MOV 22H,R2 MOV 25H,R5 MOV 21H,R1 MOV 24H,R4 MOV 20H,R04-19编写程序,将片内RAM的20H,21H,22H三个连续单元的内容

8、依次存入2FH,2EH,2DH中。解 MOV 2FH,20H MOV 2EH,21H MOV 2DH,22H4-20编写程序,进行两个16位数的减法:6F5DH一13B4H,结果存入片内RAM的30H和31H单元,30H存差的低8位。解 CLR C MOV A,#5DH ;被减数低8位A MOV R2,#B4H ;减数低8位R2 SUBB A,R2 ;被减数减去减数,差A MOV 30H,A ;低8位结果30H MOV A,#6FH ;被减数高8位A MOV R2,#13H ;减数高8位R2 SUBB A,R2 ;被减数减去减数,差A MOV 31H,A ;高8位结果31H4-21编写程序,若

9、累加器A的内容分别满足下列条件时,则程序转至LABEL存储单元。设A中有的是无符号数。解 (1) A10 CJNE A,#10,L1 ;(A)与10比较,不等转L1 L2:LJMP LABEL ;相等转LABEL L1:JNC L2 ;(A)大于10,转LABEL (2)A10 CJNE A,#10,L1 ;(A)与10比较,不等转L1 SJMP L3 ;相等转L3 L1:JNC L2 ;(A)大于10,转L2 SJMP L4 ;(A)小于10,转L4L2:JMP LABEL ;无条件转LABEL (3)A10 CJNE A,#10,L1 ;(A)与10比较,不等转L1 L2:LJMP LAB

10、EL ;相等转LABEL L1:JC,L2 ;(A) 小于10,转LABEL 4-22已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H,(26H)=56H。问此时执行“RET”指令后,SP=? PC=?解 SP23H,PC=3412H4-23已知SP=25H,PC=2345H,标号LABEL所在的地址为3456H。问执行长调用指令“LCALL LABEL”后,堆栈指针和堆栈内容发生什么变化?PC的值等于什么?解 SP27H,(26H)=48H,(27H)23H,PC3456H4-24上题中LCALL能否直接换成ACALL指令,为什么? 如果使用ACALL指令,则可调用

11、的地址范围是多少?解 不能。ACALL是短转指令,可调用的地址范围是2 KB。4-25阅读下列程序,要求:(1)说明程序功能;(2)试修改程序,使片内RAM的内容成为如图所示的结果。 MOV R2,#0AH50H00HMOV R0,#50H51H01HCLR A52H02HLOOP:MOV R0,A53H03HINC R054H04HDJNZ R2,LOOP55H05HDONE:56H06H57H07H58H08H59H09H 解 (1)功能是将片内RAM中50H59H单元清零。 (2)7A(OA) (7850) DA(FC)(3)在INC R0后添一句INC A。4-26设(R0)=7EH,

12、(DPTR)=10FEH,片内RAM中7EH单元的内容为0FFH,7F单元的内容为38H,试为下列程序注释其运行结果。解 INC R0 (7EH)00H INC R0 (R0)7FH INC R0 (7FH) 39H INC DPTR (DPTR) 10FFH INC DPTR (DPTR) 1100H INC DPTR (DPTR) 1101H4-27下列程序段经汇编后,从1000H开始的各有关存储单元的内容将是什么? ORG 1000H TAB1 EQU 1234H TAB2 EQU 3000HDB “START”DW TAB1,TAB2,70H解 (1000H)=53H (1001H)=

13、54H (1002H)=41H (1003H)=52H (1004H)=54H (1005H)=12H (1006H)=34H (1007H)=30H (1008H)=00H (1009H)00H (100AH)=70H4-28阅读下列程序,并要求:(1)说明程序功能;(2)写出涉及的寄存器及片内RAM单元(如图所示)的最后结果。40H98HAFH MOV R0,#40H ;40HR0 MOV A,R0 ;98HA INC R0 ;41HR0 ADD A,R0 ;98+(A)=47HA INC R0 MOV R0,A ;结果存入42H单元 CLR A ;清A ADDC A,#0 ;进位位存入A

14、 INC R0 MOV R0,A ;进位位存入43H解 功能:将40H,41H单元中的内容相加结果放在42H单元,进位放在43H单元,(R0)=43H,(A)1,(40H)=98H,(41H)AFH,(42H)47H,(43H)=01H。4-29同上题要求,程序如下:61HF2HCCH MOV A,61H ;F2HA MOV B,#02H ;02HB MUL AB ;F2H02HE4HA ADD A,62H ;积的低8位加上CCHA MOV 63H,A ;结果送63H CLR A ;清A ADDC A,B ;积的高8位加进位位A MOV 64H,A ;结果送64H解 功能:将61H单元的内容乘

15、2,低8位再加上62H单元的内容放人63H,将结果的高8位放在64H单元。(A)02H (B)01H (61H)F2H (62H)CCH (63H)BOH (64H)02H4-30编写程序,采用“与”运算,判断8位二进制数是奇数个1还是偶数个1。解 MOV A,#XXH ;待判断的数A ANL A,#0FFH ;与0FFH相与 JB P,REL ;是奇数转REL ;是偶数程序顺序执行 REL: 4-31编写程序,采用“或”运算,使任意8位二进制数的符号位必为1。解 MOV A,XXH ;取数据A ORL A,#80H ;使该数符号位为1 MOV XXH,A ;保存该数据4-32请思考:采用“异

16、或”运算怎样可使一带符号数的符号位改变,数据位不变?怎样可使该数必然为零? 解 (1)符号位改变,数据位不变: MOV A,XXH ;取数据A XRL A,#80H ;异或80HA (2)使该数为零: MOV A,XXH ;该数A MOV R0,A ;该数R0 XRL A,R0 ;该数自身相异或第5章 习题解答5-1编写程序,查找在片内RAM中的20H50H单元中是否有0AAH这一数据。若有,则51H单元置为01H;若未找到,则51H单元置为00H。解 MOV R2,#31H ;数据块长度R2 MOV R0,#20H ;数据块首地址R0 LOOP:MOV A,R0 ;待查找的数据A CLR C

17、 ;清进位位 SUBB A,#0AAH ;待查找的数据是 0AAH 吗 JZ L1 ;是,转L1 INC R0 ;不是,地址增1,指向下一个待查数据 DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找 MOV 51H,#00H ;等于0,未找到,00H51H SJMP L2 ;返回L1: MOV 51H,#01H ;找到,01H51HL2: RET ;返回 5-2编写程序,查找在片内RAM中的20H50H单元中出现00H的次数,并将查找结果存入51H单元。 解 MOV R2,#31H ;数据块长度R2 MOV R0,#20H ;数据块首地址R0 MOV 51H,#00H ;51H单

18、元清零,以记录00H的个数LOOP: MOV A,R0 ;待查找的数据A ANL A,#0FFH ;与0FFH相与,判断该数据是否为零 JNZ L1 ;不为零,转L1 INC 51H ;为零,00H个数增1L1: INC R0 ;地址增1,指向下一个待查数据 DJNZ R2,LOOP ;数据块长度减1,不等于零,继续查找 RET ;全部查找完,返回5-3外部数据RAM中有一个数据块,存有若干字符、数字,首地址为SOURCE。要求将数据块传送到内部RAM以DIST开始的区域,直到遇到字符“$”时结束。(“$”也要传送,它的ASCII码为24H。)解 MOV DPTR,#SOURCE ;源首地址D

19、PTR MOV R0,#DIST ;目的首地址R0L1: MOVX A,DPTR ;传送一个字符 MOV R0,A INC DPTR ;指向下一个字符 INC R0 CJNE A,#24H,L1 ;传送的是“$”字符吗?不是,传送下一个字符 RET ; 是,结束传送5-4已知R3和R4中存有一个16位的二进制数,高位在R3中,低位在R4中。编写程序将其求补,并存回原处。解 MOV A,R3 ;取该数高8位A ANL A,#80H ;取出该数符号判断 JZ L1 ;是正数,转L1 MOV A,R4 ;是负数,将该数低8位A CPL A ;低8位求反 ADD A,#01H ;加1 MOV R4,A

20、 ;低8位求反加1后R4 MOV A,R3 ;取该数高8位A CPL A ;高8位求反 ADDC A,#00H ;加上低8位加1时可能产生的进位 MOV R3,A ;高8位求反后R3L1: RET5-5已知30H和31H中存有一个16位的二进制数,高位在前,低位在后。编写程序将其乘2,并存回原处。解 CLR C ;清进位位C MOV A,31H ;取该数低8位A RLC A ;带进位位左移一位 MOV 31H,A ;结果存回31H MOV A,30H ;取该数高8位A RLC A ;带进位位左移一位 MOV 30H,A ;结果存回30H5-6内存中有2个4B以压缩BCD码形式存放的十进制数,一

21、个存放在30H33H的单元中,一个存放在40H43H的单元中。编写程序求它们的和,结果存放在30H33H中。解 MOV R2,#04H ;字节长度R2 MOV R0,#30H ;一个加数首地址R0 MOV R1,#40H ;另一个加数首地址R1 CLR C ;清进位位L1; MOV A,R0 ;取一个加数 ADDC A,R1 ;两个加数带进位相加 DAA ;十进制调整 MOV R0,A ;存放结果 INC R0 ;指向下一个字节 INC R1 DJNZ R2,L1 ;字节长度减l,没加完,转L1,继续相加 RET ;全加完,返回5-7编写程序,把片外RAM从2000H开始存放的8个数传送到片内

22、30H开始的单元中。解 MOV R2,#08H ;数据块长度R2 MOV R1,#30H ;数据块目的地址R1 MOV DPTR,#2000H ;数据块源地址DPTRLOOP: MOVX A,DPTR ;传送一个数据 MOV R1,A INC DPTR ;指向下一个数据 INC R1 DJNZ R2,LOOP ;长度减1,没传送完,转LOOP,继续传送 RET ;传送完,返回5-8解 MOV DPTR,#2000H ;数据块源地址DPTRMOVX A,DPTR ;传送一个数据 CPL A SETB ACC.0 ;指向下一个数据 SETB ACC.7 ;指向下一个数据MOVX A,DPTR ;存

23、放结果RET5-9解 MOV R0,#20H ;一个加数首地址R0MOV A,R0 ;取数组长度MOV R2,A ;数组长度R2 INC R0 ;指向数组字节 CLR A ;清AL1; ADD A,R0 ;加一个加数 INC R0 ;指向下一个字节 DJNZ R2,L1 ;数组长度减l,没加完,转L1,继续相加 MOV R0,A ;存放结果RET ;全加完,返回第6章 习题解答6-1什么是中断和中断系统?其主要功能是什么?答 当CPU正在处理某件事情的时候,外部发生的某一事件请求CPU迅速去处理,于是,CPU暂时中止当前的工作,转去处理所发生的事件,中断服务处理完该事件以后,再回到原来被终止的

24、地方,继续原来的工作。这种过程称为中断,实现这种功能的部件称为中断系统。功能1;使计算机具有实时处理功能,能对外界异步发生的事件作出及时的处理。功能2:完全消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率。功能3:实现实时控制。6-2试编写一段对中断系统初始化的程序,使之允许、TO、串行接口中断,且使TO中断为高优先级中断。解MOV IE,#097H10010111IEMOV IP,#02H00000010IP6-3在单片机中,中断能实现哪些功能?答 有三种功能:分时操作,实时处理,故障处理。6-480C51有哪些中断源?对其中断请求如何进行控制?答 (1)80C51有如下中断源

25、:外部中断0请求,低电平有效(由P3.2输入)。:外部中断1请求,低电平有效(由P3.3输入)。TO:定时器/计数器0溢出中断请求。TI:定时器/计数器1溢出中断请求。TX/RX:串行接口中断请求。(2)通过对特殊功能寄存器TCON、SCON、IE、IP的各位进行置位或复位等操作,可实现各种中断控制功能。6-5什么是中断优先级?中断优先处理的原则是什么?答 中断优先级是CPU响应中断的先后顺序。原则:(1)先响应优先级高的中断请求,再响应优先级低的。(2)如果一个中断请求已被响应,同级的其他中断请求将被禁止。(3)如果同级的多个中断请求同时出现,则CPU通过内部硬件查询电路,按查询顺序确定应该

26、响应哪个中断请求。查询顺序:外部中断0定时器0中断外部中断1定时器1中断串行接口中断6-6说明外部中断请求的查询和响应过程。 答 当CPU执行主程序第K条指令时,外设向CPU发出中断请求,CPU接到中断请求信号并在本条指令执行完后,中断主程序的执行并保存断点地址,然后转去响应中断。CPU在每一个S5P2期间顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如查询到某个中断标志为1,将在接下来的机器周期S1期间按优先级进行中断处理,中断系统通过硬件自动将相应的中断矢量地址装入PC,以便进入相应的中断服务程序。中断服务完毕后,CPU返回到主程序第K+1条指令继续执行。6-

27、780C51在什么条件下可响应中断?答 (1)有中断源发出中断请求。(2)中断总允许位EA1,即CPU开中断。(3)申请中断的中断源的中断允许位为1,即中断没有被屏蔽。(4)无同级或更高级中断正在服务。(5)当前指令周期已经结束。(6)若现行指令为RETI或访问IE或IP指令时,该指令以及紧接着的另一条指令已执行完毕。6-8简述80C51单片机的中断响应过程。答 CPU在每个机器周期S5P2期间顺序采样每个中断源,CPU在下一个机器周期S6期间按优先级顺序查询中断标志,如查询到某个中断标志为1,将在接下来的机器周期S1期间按优先级进行中断处理,中断系统通过硬件自动将相应的中断矢量地址装入PC,

28、以便进入相应的中断服务程序。一旦响应中断,8051首先置位相应的中断“优先级生效”触发器,然后由硬件执行一条长调用指令,把当前的PC值压人堆栈,以保护断点,再将相应的中断服务的入口地址送人PC,于是CPU接着从中断服务程序的人口处开始执行。对于有些中断源,CPU在响应中断后会自动清除中断标志。6-9在80C51 ROM中,应如何安排程序区?答 主程序一般从0030H开始,主程序后一般是子程序及中断服务程序。 中断源 中断矢量地址 INT0 0003H TO 000BH INT1 0013H T1 001BH 串行接口 0023H6-10试述中断的作用及全过程。答 作用:对外部异步发生的事件作出

29、及时的处理。过程:中断请求,中断响应,中断处理,中断返回。6-11在执行某一中断源的中断服务程序时,如果有新的中断请求出现,试问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求?答 (1)符合以下6个条件可响应新的中断请求:有中断源发出中断请求。中断总允许位EA1,即CPU开中断。申请中断的中断源的中断允许位为1,即中断没有被屏蔽。无同级或更高级中断正在被服务。 当前的指令周期已结束。若现行指令为RETI或访问IE或IP指令时,该指令以及紧接着的另一条指令已执行完。(2)如果新的中断请求“优先级”低于正在执行的中断请求或与其同级,则不能被响应。6-1280C51单片机外部中断源

30、有几种触发中断请求的方法?如何实现中断请求?答 有两种方式:电平触发和沿触发。电平触发方式:CPU在每个机器周期的S5P2期间采样外部中断引脚的输入电平。若为低电平,使IE1(IE0)置“1”,申请中断;若为高电平,则IE1(IE0)清零。边沿触发方式:CPU在每个机器周期的S5P2期间采样外部中断请求引脚的输入电子。如果在相继的两个机器周期采样过程中,一个机器周期采样到外部中断请求为高电平,接着下个机器周期采样到外部中断请求为低电平,则使IE1(IE0)置1,申请中断,否则,IE1(IE0)置0。6-138051单片机有五个中断源,但只能设置两个中断优先级,因此在中断优先级安排上受到一定的限

31、制,试问以下几种中断优先级的安排(由高到低)是否可能?若可能,则应如何设置中断源的中断级别?否则请简述不可能的理由。解 同级优先次序为:,TO,T1,TX/RX。(1)定时器0,定时器1,外部中断0,外部中断1,串行接口中断。可以,将TO,T1设置为高级。MOV IP,#0AH(2)串行接口中断,外部中断0,定时器0溢出中断,外部中断1,定时器1溢出中断。可以,将串行接口中断设置为高级。MOV 0B8H,#10H(3)外部中断0,定时器1溢出中断,外部中断1,定时器0溢出中断,串行接口中断。不可以,只能设置一级高级优先级,将INT0、T1设置为高级,而TO级别高于INT1。(4)外部中断0,外

32、部中断1,串行接口中断,定时器1溢出中断,定时器0溢出中断。不可以,若将INT0,INT1,TX/RX设置为高级,而TO高于T1。(5)串行接口中断,外定时器0溢出中断,外部中断0,外部中断1,定时器1溢出中断。不可以,RX/TX级别最低,可将其设为最高级,而INT0优先级又高于TO。(6)外部中断0,外部中断1,定时器0溢出中断,串行接口中断,定时器1溢出中断。不可以,RX/TX级别最低,可设为最高级,而TO优先级又高于INTl。(7)外部中断0,定时器1溢出中断,定时器0溢出中断,外部中断1,串行接口中断。可以,将INT0,T1设为最高级。MOV 0B8H,#09H6-14以中断方法设计单

33、片机秒、分脉冲发生器,假定P1.0每秒钟产生一个机器周期的正脉冲,P1.1每分钟产生一个机器周期的正脉冲。解 程序1(中断法): 1s50ms14H50ms20 1min1s3CH1s60 设 12MHz T0.05s50ms T0 模式1 即TMOD=01H定时时间t(216一定时器初值X)12振荡周期(216X)12/(12106)所以 X216-50103655365000015536=3CBOH ORG 0000H AJMP MAIN ORG 000BH AJMP INSER ORG 0100HMAIN: MOV R0,#00H ;R0为50ms计数器 MOV R1,#00H ;R1为

34、秒计数器 MOV TMOD,#01H ;定时器T0工作于模式1 MOV TH0,#3CH ;置50 ms定时初值 MOV TL0,#0BOH SETB ET0 ;允许T0中断SETB EA ;CPU开放中断 SETB TR0 ;启动定时器T0LOOP: AJMP LOOP ;等待50ms时间到 ORG 0200HINSER: MOV TH0,#3CH ;重新置人定时初值 MOV TL0,#0BOH INC R0 ;50 ms计数器增1 CJNE R0,#14H,L1 ;未到1s,转L1,中断返回 CLR P1.0 SETB P1.0 ;到ls,发一个正脉冲 CLR P1.0 MOV R0,#0

35、0H ;清R0 INC R1 ;秒计数器增1 CJNE R1,#3CH,L1 ;未到1min,转L1,中断返回 CLR P1.1 SETB P1.1 ;到1min,发一个正脉冲 CLR P1.1 MOV R1,#00H ;清R1L1: RETI ;中断返回解 程序2(中断法): 1s50ms14H50ms20 1min1s3CH1s60 设 12MHz T0.05s50ms T0 模式1 即TMOD=01H定时时间t(216一定时器初值X)12振荡周期(216X)12/(12106)所以 X216-50103655365000015536=3CBOH ORG 0000H AJMP MAIN O

36、RG 000BH AJMP INSER ORG 0100HMAIN: MOV R0,#14H ;R0为“50ms”计数器,置入初值20(计1s) MOV R1,#3CH ;R1为秒计数器,置入初值60(计1min) MOV TMOD,#01H ;定时器T0工作于模式1 MOV TH0,#3CH ;置50 ms定时初值 MOV TL0,#0BOH SETB ET0 ;允许T0中断SETB EA ;CPU开放中断 SETB TR0 ;启动定时器T0LOOP: AJMP LOOP ;等待50ms时间到 ORG 0200HINSER: MOV TH0,#3CH ;重新置人定时初值 MOV TL0,#0

37、BOH DJNZ R0,L1 ;“50ms”计数器减1,到1s吗? 未到转L1,中断返回 CLR P1.0 SETB P1.0 ;到ls,发一个正脉冲 CLR P1.0 MOV R0,#14H ;“50ms”计数器,置入初值20(计下1s) DJNZ R1,L1 ;秒计数器减1,到1min吗? 未到转L1,中断返回 CLR P1.1 SETB P1.1 ;到1min,发一个正脉冲 CLR P1.1MOV R1,#3CH ;秒计数器,置入初值60(计下1min)L1: RETI ;中断返回程序2(查询法):计算初值,=12MHz,T0计时50ms, (216一X)12(12106)5010-3

38、(作50ms定时)则初值 X=15536D=3CBOH 1s 50msl4H 1min1s3CH ORG 0000H SJMP MAIN ORG 0040HMAIN: MOV TMOD,#0lH ;设定时器T0工作于模式1MC: MOV R1,#3CH ;R1为秒计数器,置入初值60(计1min)MCH: MOV R0,#14H ;R0为“50ms”计数器,置入初值20(计1s)CHV: MOV THO,#3CH ;T0设置50ms定时 MOV TL0,#0BOH SETB TR0 ;启动T0LOOP: JNB TF0,$ ;查询50ms时间到,时间未到,继续查询 DJNZ R0,CHV ;到

39、50ms,“50ms”计数器减1,到1s吗? 未到转CHV CLR TR0 ;到1s,关闭T0 CLR P1.0 SETB P1.0 ;发一个正脉冲 CLR P1.0 DJNZ R1,MCH ;秒计数器减1,到1min吗? 未到转MCH CLR P1.1 SETB P1.1 ;到1min,发一个正脉冲 CLR P1.1 SJMP MC ;转MC END第7章 习题解答7-1定时器方式2有什么特点?适用于什么应用场合?答 (1)方式2把TL0(或TL1)配置成一个可以自动重装载的8位定时器计数器。TL0计数溢出时不仅使溢出中断标志位TF0置1,而且还自动把TH0中的内容重新装载到TL0中。TL0

40、用作8位计数器,TH0用以保存初值。(2)用于定时工作方式时间(TF0溢出周期)为T(28TH0初值)振荡周期12,用于计数工作方式时,最大记数长度(TH0初值=0)为28256个外部脉冲。这种工作模式可省去用户软件重装初值的语句,并可产生相当精确定时时间,特别适于作串行波特率发生器。7-2单片机用内部定时方式产生频率为100 KHz等宽矩形波,假定单片机的晶振频率为12MHz,请编程实现。解 程序1(中断法):f100kHz,T110-5秒 设 12MHz t0.510-5s5us T0 模式0 即TMOD=00H定时时间t(213一定时器初值X)12振荡周期 0.510-5(213-X)1

41、2(12106) X81871111111111011 TO低5位:1BH TO高8位:FFH ORG 0000H AJMP MAIN ORG 000BH AJMP INSER ORG 0100HMAIN: MOV TMOD,#00H ;定时器T0工作于模式0 MOV TH0,#0FFH ;置5us定时初值 MOV TL0,#1BH SETB ET0 ;允许T0中断SETB EA ;CPU开放中断 SETB TR0 ;启动定时器T0LOOP: AJMP LOOP ;等待5us时间到 ORG 0200HINSER: MOV TH0,#0FFH ;重新置人定时初值 MOV TL0,#1BH CPL

42、 P1.0 ;输出取反,形成等宽矩形波 RETI ;中断返回解 程序2(中断法):f100kHz,T110-5秒 设 12MHz t0.510-5s5us T0 模式1 即TMOD=01H定时时间t(216一定时器初值X)12振荡周期 0.510-5(216-X)12(12106) X655311111111111111011 TO低8位:FBH TO高8位:FFH ORG 0000H AJMP MAIN ORG 000BH AJMP INSER ORG 0100HMAIN: MOV TMOD,#01H ;定时器T0工作于模式1 MOV TH0,#0FFH ;置5us定时初值 MOV TL0,

43、#0FBH SETB ET0 ;允许T0中断SETB EA ;CPU开放中断 SETB TR0 ;启动定时器T0LOOP: AJMP LOOP ;等待5us时间到 ORG 0200HINSER: MOV TH0,#0FFH ;重新置人定时初值 MOV TL0,#0FBH CPL P1.0 ;输出取反,形成等宽矩形波 RETI ;中断返回解 程序3(中断法):f100kHz,T110-5秒 设 12MHz t0.510-5s5us T0 模式2 即TMOD=02H定时时间t(28一定时器初值X)12振荡周期 0.510-5(28-X)12(12106) X25111111011 TO低8位:FB

44、H TO高8位:FBH ORG 0000H AJMP MAIN ORG 000BH AJMP INSER ORG 0100HMAIN: MOV TMOD,#02H ;定时器T0工作于模式2 MOV TL0,#0FBH ;置5us定时初值 MOV TH0,#0FBH ;置自动重装载常数 SETB ET0 ;允许T0中断SETB EA ;CPU开放中断 SETB TR0 ;启动定时器T0LOOP: AJMP LOOP ;等待5us时间到 ORG 0200HINSER: CPL P1.0 ;输出取反,形成等宽矩形波 RETI ;中断返回7-380C51定时器有哪几种工作方式?有何区别?答 有模式0,

45、模式1,模式2,模式3。(1)模式0:选择定时器(TO或T1)的高8位和低5位组成一个13位定时器计数器。TL低5位溢出时向TH进位,TH溢出时向中断标志位TF0进位,并申请中断。定时时间t(213一初值)振荡周期12;计数长度为2138192个外部脉冲。(2)模式1:与模式0的唯一差别是寄存器TH和TL以全部16位参与操作。定时时间t(216一初值)振荡周期12,计数长度为21665536个外部脉冲。(3)模式2:把TL0和TL1配置成一个可以自动重装载的8位定时器计数器。TL用作 8位计数器,TH用以保存初值。TL计数溢出时不仅使TF0置1,而且还自动将TH中的内容重新装载到TL中。定时时

46、间t(28一初值)振荡周期12,计数长度为256个外部脉冲。(4)模式3:对TO和T1不大相同。若TO设为模式3,TLO和THO被分为两个相互独立的8位计数器。TL0为8位计数器,功能与模式0和模式1相同,可定时可计数。THO仅用作简单的内部定时功能,它占用了定时器T1的控制位TR1和中断标志位TF1,启动和关闭仅受TR1的控制。定时器T1无工作模式3,但TO在工作模式3时T1仍可设置为模式02。7-480C51单片机内部设有几个定时器计数器?它们是由哪些特殊功能寄存器组成?答 8051单片机内有两个16位定时器计数器,即TO和T1。TO由两个8位特殊功能寄存器THO和TL0组成;T1由TH1

47、和TL1组成。7-5定时器用作定时器时,其定时时间与哪些因素有关?作计数器时,对外界计数频率有何限制?答 定时时间与定时器的工作模式,初值及振荡周期有关。 作计数器时对外界计数频率要求最高为机器振荡频率的1/24。7-6筒述定时器4种工作模式的特点,如何选择设定? 答 (1)模式0:TH01 TL01只用了13位。 定时时间t(213一初值)振荡周期12,计数8192个。 置TMOD中的M1M0为00。 (2)模式l:TH01 TL01以全部16位参与操作。 定时时间t(216一初值)振荡周期12,计数65536个。 置TMOD中的M1M0为01。 (3)模式2:TL01溢出时不仅把TF0置1

48、,还自动将TH01内容重装到TL01。 定时时间t=(28一初值)振荡周期12,计数256个。 置TMOD中的M1M0为10。 (4)模式3:只有To可工作在模式3。TL0可工作在定时器或计数器方式,TH0只可用作简单的内部定时功能。T0工作在模式3时T1仍可置为模式02。置TMOD中的M1M0为11。7-7当定时器To用作模式3时,由于TR1位已被To占用,如何控制T1的开启和关闭? 答 用T1控制位C/T切换其定时器或计数器工作方式可以使T1运行。见教材P107。 定时器T1无工作模式3,将T1设置为模式3,就会使T1立即停止计数,关闭。7-8以定时器/计数器1进行外部计数,每计数1000

49、个脉冲后,定时器/计数器1转为定时工作方式,定时10ms后又转为计数方式,如此循环不止。假定为6MHZ,用模式1编程。 解 T1为定时器时初值: 1010-3(216-X) 12/(6106)所以 X2161010-361061265536-5000=EC78H T1为计数器时初值: X1000216所以 X64536FCl8H L1: MOV TMOD,50H ;设置T1为计数方式且工作于模式1 MOV TH1,#0FCHl ;置入计数初值 MOV TL1,#18H SETB TR1 ;启动T1计数器 LOOP1: JBC TF1,L2 ;查询计数溢出?有溢出(计满1 000个)转L2 SJMP LOOP1 ;无溢出转LOOP1,继续查询 L2: CLR TR1 ;关闭T1 MOV TMOD,#10H ;设置T1为定时方式且工作于模式1 MOV TH1,#OECH1 ;置入定时10 m

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!