韶关学院《单片微型计算机与接口技术》(第5版)思考题与习题解答

上传人:gbs****77 文档编号:10959176 上传时间:2020-04-16 格式:DOC 页数:46 大小:322.50KB
返回 下载 相关 举报
韶关学院《单片微型计算机与接口技术》(第5版)思考题与习题解答_第1页
第1页 / 共46页
韶关学院《单片微型计算机与接口技术》(第5版)思考题与习题解答_第2页
第2页 / 共46页
韶关学院《单片微型计算机与接口技术》(第5版)思考题与习题解答_第3页
第3页 / 共46页
点击查看更多>>
资源描述
单片微型计算机与接口技术思考题与习题解答第0章 基础知识0.1 将下列十进制数转换为十六进制数:64,98,80,100,125,255。0.1 40H,62H,50H,64H,7DH,FFH 0.2 将下列十六进制无符号数转换为十进制数:32CH,68H,D5H,100H,B78H,3ADH。O.2 812,104,213,256,2936,9410.3 写出下列十进制数的原码和补码,用8位或16位数填人表1中(要求用十六进制数表示)。表1十进制数原码补码十进制数原码补码28250-28-347l00928-130-92803十进制数原码补码十进制数原码补码281CH1CH250FAHFAH-289CHE4H-347815BHFEA5H10064H64H92803AOH03AOH-1308082HFF7EH-92883AOHFC60H0.4 用十进制数写出下列补码表示的机器数的真值:1BH,97H,80H,F8H,397DH,7AEBH,9350H,CF42H。O.4 机器数的真值分别为:27,233,-128,-8,14717,31467,-27824,-12478 0.5 用补码运算完成下列算式,并指出溢出OV和进位CY:(1) 33H+5AH (2) -29H-5DH (3) 65H-3EH (4) 4CH-68H0.5 (1) 33H+5AH=8DH,OV=1,CY=0 (2) -29H-5DH=7AH,OV=1,CY=1(3) 65H-3EH=27H,OV=0,CY=1 (4) 4CH-68H=E4H,0V=O,CY=O 0.6 将表2中的十进制数按要求转换,用十六进制数填入。表2十进制数压缩BCD数非压缩BCD数ASCII码3825548376410001025O.6十进制数压缩BCD数非压缩BCD数ASCII码3838H0308H3338H255255H020505H323535H483483H040803H343833H764764H070604H373634H10001000H01000000H31303030H10251025H01000205H31303235H0.7 写出下列ASCII码表示的十六进制数(如313035H为105H):374341H,32303030H,3841353DH。0.7 ASCIl码表示的十六进制数分别为:105H,7CAH,200。H,8A50H第1章 MCS-51单片机1.1 什么是嵌入式系统?其控制核心有哪几种类型?1.1 见绪论1.2 单片微型计算机与微处理器在结构上和使用中有什么差异?单片机和DSP在使用上有什么差别?1.2 单片微型计算机是包含CPU、存储器和IO接口的大规模集成芯片,即它本身包含了除外部设备以外构成微机系统的各个部分,只需接外设即可构成独立的微机应用系统。微机处理器仅为CPU,CPU是构不成独立的微机系统的。DSP是数据处理的专用芯片,单片机主要用做控制,也具有简单的数据处理能力。1.3 51系列单片机内部有哪些功能部件?1.3 见111节1.4 51系列单片机有哪些品种?结构有什么不同?各适用于什么场合?1.4 见绪论1.5 51系列单片机的存储器可划为几个空间?各自的地址范围和容量是多少?在使用上有什么不同?1.5 见表1-51.6 在单片机内部RAM中,哪些字节有位地址,哪些没有位地址?特殊功能寄存器SFR中哪些可以位寻址?有什么好处?1.6 见表1-1和表1-21.7 已知PSW=10H,通用寄存器R0R7的地址分别是多少?1.7 当PSw=10H,表明选中的为第二组通用寄器ROR7的地址为10H17H1.8 程序存储器和数据存储器可以有相同的地址,而单片机在对这两个存储区的数据进行操作时,不会发生错误,为什么?1.8 序存储器和数据存储器尽管地址相同,但在数据操作时,所使用的指令不同,选通信号也不同,因此不会发生错误。1.9 填空:堆栈设在 存储区,程序存放在 存储区,I0接口设置在 存储区,中断服务程序存放在 存储区。1.9 内部数据 程序 外部数据 程序1.10 若单片机使用频率为6MHz的晶振,那么状态周期、机器周期和指令周期分别是多少?1.10 振荡周期=0.1667us,机器周期=2us,指令周期=28us1.11 复位时,A= ,PSW= ,SP= ,P0P3= 1.11 A=0,PSW=0,SP=07,P0P3=FFH第2章 指令系统2.1 MCS-51单片机有哪几种寻址方式,适用于什么地址空间?用表格表示。2.1 见21节2.2 MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据存储单元的内容是否为O?2.2 因为累加器A自带零标志,因此,若判断某内部RAM单元的内容是否为零,必须将其内容送到A,通过 JZ指令即可进行判断。2.3 设A=0,执行下列两条指令后,A的内容是否相同,说明道理。(1) MOVC A,A+DPTR(2) MOVX A,DPTR2.3 当A=O时,两条指令的地址虽然相同,但操作码不同,MOVC是寻址程序存储器,MOVX是寻址外部数据存储器,送入A的是两个不同存储空间的内容。2.4 指出下列各指令中操作数的寻址方式指 令目的操作数寻址方式源操作数寻址方式ADD A,40HPUSH ACCMOV B,20HANL P1,#35HMOV R1,PSWMOVC A,A+DPTRMOVX DPTR,A2.4 目的操作数 源操作数 寄存器 直接 SP间接寻址 直接 直接 直接 直接 立即 寄存器问址 直接 寄存器 变址 寄存器间址 寄存器 2.5 执行下列程序段MOV A,#56HADD A,#74HADD A,ACC后,CY= ,OV= ,A= 。2.5 CY=1,OV=0,A=94H 2.6 在错误的指令后面括号中打。MOV R1,#80H ( ) MOV R7,R1 ( ) MOV 20H,R0 ( ) MOV R1,#0100H ( ) CPL R4 ( ) SETB R7,0 ( ) MOV 20H,21H ( ) ORL A,R5 ( ) ANL R1,#OFH ( ) XRL P1,#31H ( ) MOVX A,2000H ( ) MOV 20H,DPTR ( ) MOV A,DPTR ( ) MOV R1,R7 ( ) PUSH DPTR ( ) POP 30H ( ) MOVC A,R1 ( ) MOVC A,DPTR ( ) MOVX DPTR,#50H ( ) RLC B ( ) ADDC A,C ( ) MOVC R1,A ( ) 2.6 2.7 设内部RAM中(59H)=50H,执行下列程序段:MOV A,59HMOV R0,AMOV A,#0MOV R0,AMOV A,#25HMOV 51H,AMOV 52H,#70H问A= , (50H)= , (51H)= , (52H)= 。2.7 A=25H,(50H)=O,(51H)=25H,(52H)=70H2.8 设SP=60H,内部RAM的(30H)=24H,(31H)=10H,在下列程序段注释的括号中填执行结果。PUSH 30H ;SP=( ), (SP)=( )PUSH 3lH ;SP=( ), (SP)=( )POP DPL ;SP=( ), DPL=( )POP DPH ;SP=( ), DPH=( )MOV A,#00HMOVX DPTR,A最后执行结果是( )。2.8 SP=(61H),(SP)=(24H) SP=(62H),(SP)=(10H) SP=(61H),DPL=(10H)SP=(60H),DPH=(24H)执行结果将0送外部数据存储器的2410单元。2.9 对下列程序中各条指令作出注释,并分析程序运行的最后结果。MOV 20H,#0A4HMOV A,#017)6HMOV R0,#20HMOV R2,#57HANL A,R2ORL A,R0SWAP ACPL AORL 20H,ASJMP $2.9 程序运行后内部RAM(20H)=B4H,A=90H2.10 将下列程序译为机器码。机器码 源程序LA: MOV A,#01HLB: MOV P1,ARL ACJNE A,#10,LBSJMP LA2.10 机器码 源程序 7401 LA:M()V A,#01H F590 LB:M()V P1,A 23 RL A B40AFA CJNE A,#10,LB 80F6 SJMP LA2.11 将累加器A的低4位数据送P。口的高4位,P。口的低4位保持不变。2.11 ANL A,#0FH SWAP A ANL P1#OFH ORL P1,A SJMP $212 编程将R0(R2)的内容和R1(R3)的内容相交换。2.12 MOV A,RO XCH A,R1 MOV R0,A SJMP $212 MOV A,R2 XCH A,R3 MOV R2,A SJMP $2.13 试用3种方法将A累加器中的无符号数乘4,积存放于B和A寄存器中。2.13(1)利用乘法指令 MOV B,#04HMUL AB SJMP $(2) 利用位移指令 RL A RL A MOV 20H。A ANL A,#03HMOV B,A MOV A,20H ANL A,#OFCH SJMP $(3) 用加法指令完成 ADD A,ACC MOV RO,A :RO=2A MOV A,#0 ADDC A。#0 MOV B,A ;B存2A的进位 MOV A,RO ADD A,ACCMOV R1,A ;R1=4A MOV A,B ADDC A,B ;进位x 2 MOV B,A ;存积高位 MOV A,R1 ;存积低位 SJMP $2.14 编程将内部RAM 40H单元的中间4位变反,其余位不变放回原单元。2.14 方法1:XRL 40H,#3CH SJMP $ 方法2:MOV A,40H CPL A ANL A,#3CH ANL 40H,#OC3H ORL 40H,ASJMP $215 有两个BCD码数存放在(20H)和(21H)单元,完成(21H)+(20H)=(23H)(22H)。(24H)+(25H)=(23H)(22H)2.15 MOV A,20H ADD A,21H DA A MOV 22H,A ;存和低字节 MOV A,#O ADDC A,#0 MOV 23H,A ;存进位 SJMP $215 MOV A,24H ADD A,25H DA A MOV 22H,A ;存和低字节 MOV A,#O ADDC A,#0 MOV 23H,A ;存进位 SJMP $2.16 如果R0的内容为0,将R1置为0,如R0内容非0,置R1为FFH,试进行编程。2.16 MOV AR0 JZ ZE MOV R1#OFFH SJMP $ ZE:MOV R1,#O SJMP $2.17 完成(51H)(50H)=(53H)(52H)的编程(式中均为内部RAM)。2.17 MOV A,50H MOV B,51H MUL AB MOV 53H。B MOV 52H,ASJMP $218 将P1.1和P1.0同时取反10次。(将P1.2和P1.0同时取反10次)2.18 MOV R7,#0AH WOP:XRL P1,#03H DJNZ R7,WOP SJMP $218 MOV R7。#0AH WOP:XRL P1,#05H DJNZ R7,WOP SJMP $2.19 将内部RAM单元3字节数(22H)(21H)(20H)2送(23H)(22H)(21H)(20H)单元。2.19 单片机的移位指令只对A,且只有循环移位指令,为了使本单元的最高位移进下一单元的最低位,必须用大循环移位指令移位4次。ORG O CLR C MOV A,20H RLC A MOV 20H,A MOV A,21H RLC A MOV 21H,AMOV A,22H RLC A MOV 22HA MOV A,#O RLC A MOV 23H,A SLMP $第3章 程序设计3.1 编写程序,把片外数据存储器0000H0050H中的内容传送到片内数据存储器20H70H中。3.1 因为是多个单元操作,为方便修改地址,使用问址操作。片外地址用DPTR指示只能用M()Vx指令取数到A,片内地址用RO或R1指示,只能用MOV指令操作,因此,循环操作外部数据存储器一A一内部数据存储器。 ORG OOOOH MOV DPTR,#0000HMOV R0,#20H LOOP:MOVX A,DPTR MOV R0,AINC DPTR INC R0 CJNE R0,#71H,LOOP SJMP $3.2 编写程序,实现双字节加法运算,要求RIR0+R7R6=(52H)(51H)(50H)(内部RAM)。3.2 要注意两高字节相加应加低字节相加时产生的进位,同时要考虑最高位的进位。ORG 0 MOV A,RO ADD A,R6 MOV 50H,A MOV A,R7 ADDC A,R1MOV 51H,A MOV A,#0 ADDC A,#O MOV 52H,A SJMP$3.3 设X在累加器A中(0X20),求X2并将平方数高位存放在R7中,低位存放在R6中。试用查表法编出子程序。3.3 A中放X(小于14H)的数,平方表的一个数据占2个字节,可用BCD码或二进制数存放(如A中放的是 BCD码,则要先化成二进制数再查表)。ORG 0 MOV DPTR,#TAB ADD A,ACC ;A*2 PUSH ACC MOVC A,A+DPTR MOV R7,A POP ACC INC A MOVC A,A+DPTR MOV R6,ASJMP $ TAB:DB 00,00,00,01,OO,04,OO,09,OO,16H, DB 04H,003.4设内部RAM的20H和21H单元中有两个带符号数,将其中的大数存放在22H单元中,编出程序。3.4 先用异或指令判两数是否同号,在同号中判大小,异号中正数为大。 ORG 0 MOV A,20H XRL A21H ANL A,#80H JZ CMPJB 20H.7,BG AG:MOV 22H,20H SJMP $ BG:MOV 22H,21HSJMP $ CMP:MOV A,20H CJNE A,21H,GR GR:JNC AG MOV 22H,21HSJMP $3.5若单片机的晶振频率为6MHz,求下列延时子程序的延时时间。DELAY: MOV R1,#0F8HLOOP: MOV R3,#0FBHDJNZ R3,$DJNZ R1,LOOPRET3.5 fosc=6MHz,MC=2us 机器周期数 DELAY:MOV R1,#OF8H 1 LOOP: MOV R3,#0FBH 1 DJNZ R3,$ 2 DJNZ R1,LOOP 2RET 2 (1+2+(1+2251+2)248)2us=250.48ms3.6 编程将内部数据存储器20H24H单元压缩的BCD码转换成ASCII码存放在25H开始的单元内。3.6 将待转换的数分离出高半字节并移到低4位加30H;再将待转换的数分离出低半字节并加30H,安排好源地址和转换后数的地址指针,置好循环次数。 ORG 0000H MOV R7,#05H MOV RO,#20HMOV R1,#25H NET:MOV A,RO ANL A,#OFOH SWAP ADD A,#30H MOV R1,A INC R1MOV A,RO ANL A,#OFH ADD A,#30H MOV R1,A INC R0 INC R1 DJNZ R7,NE SJMP $ END3.7 从内部存储器30H单元开始,有16个数据,试编一个程序,把其中的正数、负数分别送40H和50H开始的存储单元,并分别将正数、负数和零的个数送R4,R5,R6。3.7 片内RAM间址寄存器只有Ro和R1,而正数、负数和零共需3个寄存器指示地址,这时可用堆栈指针指示第3个地址,POP和PUSH指令可自动修改地址。RO指正数存放地址,Rl指负数存放地址,SP指源数据存放的末地址,POP指令取源数据,每取一个数地址减1。 ORG 0000H MOV R7,#10H MOV A,#0 MOV R4,A MOV R5,A MOV R6,A MOV R0,#40H MOV R1,#50HMOV SP,#2FH NEXT:POP ACC JZ ZER0 JB ACC.7,NE INC R4 MOV RO,A INC R0 AJMP DJ NE:INC R5 MOV R1,A INC R1AJMP DJ ZER0:INC R6 DJ:DJNZ R7,NEXT SJMP $ END3.8 内部存储单元40H中有一个ASCII字符,试编一个程序给该数的最高位加上奇校验。3.8 可直接用P标志判断(JB P,ret) ORG 0000H MOV A。40H JB P,EN ;奇数个1转移 0RL A,#80H ;偶数个1最高位加“1” EN:SJMP$3.9 编写一段程序,将存放在自DATA单元开始的一个四字节数(高位在高地址)取补后送回原单元。3.9 取补不同于求补码,求补码应区别正、负数分别处理,而取补不分正、负,因正、负数均有相对于模的补数。可用取反加l求补,也可用模(00H)减该数的方法求补。ORG 0000H MOV R7,#03H MOV R0,#DATA MOV A,RO CPL A ADD A,#01 MOV RO,AAB:INC RO MOV A,RO CPL A ADDC A,#O DJNZ R7,AB SJMP $3.10 以BUFl为起始地址的外存储区中,存放有16个单字节无符号二进制数,试编一个程序,求其平均值并送BUF2单元,余数存在BUF21单元。3.10 16个单字节累加应用ADD指令而不能用ADDC指令,和的低位存A,当和超过一个字节时,和的高字节存于B,并要加低位相加时产生的进位,16个单字节加完后,采用右移4次进行除16求平均值的运算,商在 BUF2单元,余数在BuF2-1单元。 0RG 0000H MoV R7,#0FH MOV R0,#BUFl MOV B,#0 MOV A,R0MOV R2,A NEXT:MOV A,R2 INC R0 ADD A,R0 MOV R2,A MOV A,B ADDC A,#0 MOV B,A DJNZ R7,NEXT ;以上完成求和 MOV R6,#04H MOV BUF2,AMOV BUF2-1,#O NEX:CLR C MOV A,B RRC A MOV B,A MOV A,BUF2 RRC A MOV BUF2,A MOV A,BUF2-1 RRC A MOV BUF2-l,A DJNZ R6,NEX SJMP $ ;以上完成除16运算3.11 将内部RAM的20H单元中的十六进制数变换成ASCII存入22H,21H单元,高位存入22H单元,要求用子程序编写转换部分。3.11 将20H单元的内容分解为高4位和低4位,根据是否大于9分别进行加37H和30H处理。0RG 0000H MOV A,20H ANL A,#0F0H SWAP A ACALL ASCII MOV 22H,A MOV A20H ANL A,#0FH ACALL ASCII MOV 21H,A SJMP $ ENDASCII:CJNE A,#0AH,NE NE:JC A30 ADD A,#37H RET A30:ADD A,30H RET3.12 编写一段程序,以实现图中硬件的逻辑运算功能。3.12要注意,位的逻辑运算其中一个操作数必须在C。ORG 0000H MOV C,20H ANL C,2FH CPL CORL C,/2FH CPL CANL C,53H MOV P1.0,C SJMP $ END3.13 用位操作指令实现下面的逻辑方程(表示逻辑乘,+表示逻辑加):P1.2=(ACC.3P1.4-ACC.5)+(-B.4-P1.5)3.13 ORG 0000H MOV C,ACC.3 ANL C。P1.4 ANL C,/ACC.5 MOV 20H,C MOV C,B.4 CPL C ANL C,/P1.5 ORL C,20H MOV P1.2,C SJMP $END3.14 试编写一个3字节无符号数乘1字节的乘法程序。3.14 设一字节乘数存放在R1,三字节的被乘数存放在data开始的内部RAM单元,且低字节存放在低位地址单元,R0作为被乘数和积的地址指针,用MUL指令完成一字节乘一字节,每一次部分积的低位加上一次部分积的高位,其和的进位加在本次部分积的高位上,并暂存,三字节乘一字节共需这样3次乘、加、存操作,以R7作循环3次的计数寄存器。 ORG 0000H MOV R7,#03H MOV R0,#dataMOV R2,#0 NEXT:MOV A,R0 MOV B,R1 MUL AB ADD A,R2 MOV RO,AMOV A,#O ADDC;A,B MOV R2,A INC R0 DJNZ R7,NEXT MOV R0,B SJMP $ END第4章 单片机的C语言4.1 改正下面程序的错误。4.1 1:#include 本程序有如下错误: 2:main() 3:a=c; 变量a,c必须先定义再引用 4:int a=7,c; 第5句调用函数后必须加分号 5:delay() main()函数没有反大括号 6:void delay(); 被调函数delay()在main()后面,必须在前面先声明 7: 8:char i; 第6句函数说明语句后的分号应去掉 9:for(i=O;i:255;i+); 10:4.2 试说明为什么xdata型的指针长度要用2个字节?4.2 因为xdata是外部数据存储器,最大可有64KB的存储单元,xdata指针是表示外部数据存储单元的地址,要表示64KB个单元地址,所以必须用2个字节,共16位表示。4.3 定义变量a、b、c; a为内部RAM的可位寻址区的字符变量; b为外部数据存储区浮点型变量;c为指向int型xdata区的指针。4.3 bdata char a; xdata float b:xdata intc;4.4 编程将8XX51的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数据存储器中(位置不固定)。4.4 main() char data*pl,*p2; xdata int a; p1=0x20; p2=0x35; a=*p1*(*p2);4.5 将如下汇编程序译成C程序(等效即可)。ORG 0000HMOV P1,#04HMOV R6,#0AHMOV R0,#30HCLR P1.OSETB P1.3ACALL TLCSJMP $TLC:MOV A,#0CLR P1.3MOV R5,#08LOOP: MOV C,P1.2RLC ASETB P1.0CLR P1.ODJNZ R5,LOOPMOV RO,AINC R0DJNZ R6,TLC2543RETEND4.5 #include(reg51h) #define uchar unsigned char sbit P1_0=P10;sbit Pl_l=P11; sbit P1_2=P12; sbit P1_3=P13; sbit msb=ACC7; sbit lsb=ACC0; uchar tlc(void); main( )uchar *P; P1=0x04; P=0x30; P1_0=0;Pl_3=1; for(i=O;i10;i+)*P=tlc( ); P+: uchar tlc(void)uchar i,y; ACC=0;Pl_3=0; for(i=0:i8:i+)P1_1=msb; /*发出ACC的低位*/y=ACC1; /*ACC右移1位*/ lsb=P1_2; /*接收一位放在ACC的高位*/ P1_0=1; P1_0=O; return y;4.6 8051的片内数据存储器25H单元中放有一个010的整数,编程求其平方根(精确到5位有效数字),将平方根放到30H单元为首址的内存。4.6 方法l:使用查表法 float code tab11=0,1,14142,1.7321,2,2.2361, 2.4495,2.6458,2.8284,3,3.1623: main() char data*P1; float data*P2; P1=0x25; P2=0x30; *P2=tab*P1; 方法2:使用库函数#lnclude main()float*P2; char*P1;P1=0x25;*P2=sqrt(*P1);4.7 完成逻辑表达式P1.2=P1.4ACC.0+ACC.7(“”表示逻辑与,“+”表示逻辑或)。4.7 #include sbit P12=P12: main()P12=(P14&ACC0)|ACC7;4.8 将外部RAM的10H15H单元的内容传送到内部RAM的10H15H单元。4.8 #lnclude main() char pdata *m; char data *n; P2=0; for(m=0x10;m=0x15;m+) n=m;*n=*m;4.9 内部RAM的20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H单元。4.9 #define uint unsigned int main() uint data*m,*n,*P; for(;) m=0x20;n=0x22;P=0x24; if(*m*n)*P=*n; else *P=*m: 4.10 将内部RAM 21H单元存放的BCD码数转换为二进制存入30H为首址的单元,BCD码的长度存放在20H单元中。4.10 main() int data a=O,*P3: char i,*P1,*P2; Pl=0x20: P2=0x21: P3=0x30; for(i=O;i*P1;i+) a=a*10+*P2; P2+; *P3=a; 4.11 将内部RAM 30H单元存放的2字节二进制数转换为十进制数存于21H为首的单元中,长度存放于20H单元中。4.11 main() unsigned int a,k,*P3; char i,*P1,*P2: P1=0x20: P2=0x25: P3=0x30; a=*P3;k=10000; while(a/k=0)k=k/10; for(i=0;a!=0;i+) *P2=a/k; a=a%k; P2+; k=k/10: *P1=i: 第5章 并行口5.1 什么是接口?CPU与外设之间为什么需要接口?接口的功能是什么?5.2 8XX51的4个I()端口的作用是什么?8XX51对外的三总线是如何分配的?5.3 8XX51的4个I0端口在结构上有何异同?使用时应注意什么?5.4 为什么说8XX51能全部作为IO口使用的仅有P1端口?5.15.4 参阅5.1节5.5 在例5-2中有如下语句:MOV P1,#0FFH ;高4位的LED全灭,低4位输入线送“1”ABC: MOV A,P1 ;读P1口引脚开关状态,并送入A为什么执行了ABC语句后A的值低4位为开关状态,而不是前一句的FFH,那么它的高4位值是什么呢?5.5 由内部结构图可知,MOV P1,#0FFH将使锁存器Q=1,同时Q=0,VT截止,当执行MOV A,P1时,读引脚信号有效,低4位的开关电平通过门2进入内部总线到A,而读锁存器信号无效,门1关闭,Q的信号进不了内部总线,高4位没有引脚新的电平变化,由于VT截止,二极管也截止,进入门2的是VT的漏极电压Vcc,因此,高4位通过门2读入的均是高电平即1111 B。5.6 利用8XX51的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意),画出电路并编出程序。5.6 用P1.7监测按键开关,P1.0引脚输出正脉冲,正脉冲的产生只需要将P1.0置零、置1、延时、再置零即可。P1.0接一示波器可观察波形。如果再接一发光二极管,可观察到发光二极管的闪烁。电路设计图如习题5.6图。习题5.6图汇编语言程序 ORG 0000HABC:CLR P1.0SETB P1.7 JB P1.7,$ ;等键按下 JNB P1.7,$ ;待键弹起 SETB P1.0MOV R2,#0 DAY:NOP NOP DJNZ R2,DAYSJMP ABCC语言编程 sfr P1=0x90:sbit p1_O=P1O; sbit p1_7=P17; main() unsigned char i; while(1) P1=0x80: dowhile(p1_7=1);/*等键按下*/ dowhile(p1_7=O);/*等键弹起*/p1_0=1; for(i=O;i255;i+);5.7 利用8XX51的P1口控制8个发光二极管LED。相邻的4个LED为一组,使两组每隔0.5s交替发亮一次,周而复始,画出电路并编写程序(设延时0.5s子程序为D05,已存在)。5.7 电路见习题5.7图,初始值送0FH到P1,再和0FFH异或从P1口输出,或使用SWAP A指令。然后从P1口输出,循环运行,注意输出后要延时。习题5.7图 汇编语言程序 ORG 0000H MOV A,#OFH ABC:MOV P1,A ACALL D05 SWAP A SJMP ABC D05:MoV R6,250 DY:MOV R7,250 DAY:NOP NOP DJNZ R7,DAY DJNZ R6,DY RET END C语言编程 sfr P1=0x90; main( ) int i; P1=0xf0; while(1) P1=P1; fOr(i=0;i5000;i+); 5.8 用89C5189S51并行口设计显示个数码的电路,使数码管循环显示“O”“F”。5.8 如使用共阴极数码管,阴极接地,阳极ag分别接P0P3的某个口的7位,将0F的段码列成表,表的内容顺次从该口输出。如数码管接P3口。汇编语言程序 0RG 0000H MOV DPTR,#TABAGAIN:MOV R0,#0NEXT:MOV A,RO MOVC A,A+DPTR MOV P3,A MOV R7,#0 DAY:NOP NOP DJNZ R7,DAY INC R0 CJNE R0,#10H,NEXTSJMP AGAIN ;段码表(略) TAB:DB 3FH,06H ENDC语言程序#include(reg51.h)#defint uint unsigned int#define uchar unsigned charmain() umtj; uchar i; uchar code tab16=0x3f,0x06);,/*段码表(略)*/ while(1) for(i=O;i=15;i+) P3=tabi; for(j=O;j10000;j+);/*延时*/5.9 设计一个能显示4位数码的电路,并用C语言和汇编语言编程使“8”能跑马显示8遍。5.9 电路设计参考5.3节的图5-8,分别用汇编语言和C语言的编程如下:图5-8 接5个共阴极数码管的动态显示接口电路 汇编语言程序 0RG 0000H MOV A,#08H M()V DPTR,#TAB MOVC A,A+DPTR MOV P1,AMOV R2,#08H AGAIN:M()V A,#01 NEXT:M()V P3,A ACALL DAY RL A CJNE A,#10H,NEXT DJNZ R2,AGAIN TAB:DB 3FH,06H ENDC语言程序#include#definc uint unslgned int#deflne uchar unsigned char main() uchar code tabl=0x3f,0s06 uchar i,m; uint j; for(m=O;m8;i+) P3=0x01: for(i=0;i4;i+) P1=tabl8 P3=1:for(j=0;j=25000;j+);5.10 利用89C51/89S51并行口设计88的矩阵键盘并用箭头标明信号的方向。5.10 P1口的8根线接行线,输出行扫描信号,P3口的8根线接列线,输入回馈信号。参考5.3节图5.9。88的矩阵键盘电路设计见习题5.10图。习题5.10图第6章 中断6.1 解释下列名词:中断、中断源、中断优先级、中断的嵌套、中断系统。6.2 8XXSl有几个中断源?各中断标志是如何产生的,又如何清除?6.3 8XX51中断源的中断请求被响应时,各中断入口地址是多少?在什么物理存储空间?6.4 MCS-51系列单片机的中断系统有几个优先级?如何设定?6.5 简述8XX51中断处理的过程,画出流程图。6.16.5 参见 6.1节6.2节6.6 用8XX51的P1口接8个LED发光二极管,由INT0接一消抖开关,开始P1.0的LED亮,以后每中断一次,下一个LED亮,顺序下移,且每次只一个LED亮,周而复始。画出电路图,并编制程序。6.6 电路设计见习题6.6图汇编语言程序 ORG 0000H AJMP MAlN 0RG 0003H RL A ;中断服务 MOV P1A RETIMAIN:MOV A,#0FEH MOV P1,A ;第一灯亮 SETB EA SETB EX0 SETB IT0 SJMP$C语言程序#include int0() interrpt 0 P1=P11|0x01; main() P1=0xfe; EA=1;EX0=1;IT0=1; dowhik(1);习题6.6图汇编语言中只有一个中断源,不存在占用别的中断源向量地址问题,程序顺序排下,应注意程序的执行过程。C语言无循环移位指令,移位后,后面补零,因此和01相或。6.7 在题6.6电路的基础上,要求8个LED同时亮或同时灭,每中断一次,变反一次,编出程序。6.7 略6.8 要求同题6.7,要求亮、灭变换5次(一亮,一灭为一次),编出程序。6.8 汇编语言程序 ORG O000H AJMP MAIN ORG 0003H ;中断服务 XRL P1,#OFFH DJNZ R0,NECLR EA NE:RETIORG 0030H MAIN: SETB EA SETB EXO SETB ITO MOV P1,#OFFH MOV R0,#OAH SJMP$ ;等待中断 C语言程序 #include char i: ic()itrrupt 0 i+: if(i=10)P1=P1: eIse EA=O: main() EA=1;EX0=1;IT0=1; P1=0xff: for(;);*等待中断*因一亮一灭为一次,所以共10次。6.9 利用8XX51的并行口接2个数码管,显示INT1中断次数(次数不超过FFH)。6.9两个数码管阳极经驱动器接P1口,阴极分别接P3.0、P3.1。 #include void intr(void) void delay(void); unsigned char a,b,i=0;unsigned char code tab16=0x3f,0x06,0x5b,Ox4f,0x66,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73:sbit p3_O=P30; sbit p3_1=P31; main() a=tabO; b=tab0; p3_0=O;p3_1=0; EA=1;EX0=1;IT0=1; for(;)p3_O=1;p3_1=0; P1=b: delay();p3_0=O;p3_1=1; P1=a: delay(); void intr()interrupt 0 unsigned charj,k; EX0=O; i+; j=i&0x0f; k=i&0xf0; k=4; a=tabk; b=tabj; EX0=1; void delay(void) int x; for(x=0;x1000;x+);第7章 定时计数器7.1 8XX51单片机内部设有几个定时计数器?它们是南哪些专用寄存器组成的?7.2 8XX51单片机的定时计数器有哪几种工作方式?各有什么特点?7.3 定时计数器用做定时时,其定时时间与哪些因素有关?用做计数时,对外界计数频率有何限制?7.17.3参7.1节7.4 设单片机的fosc=6MHz,定时器处于不同工作方式时,最大定时范围分别是多少?7.4 方式0:1638ms,方式1:131ms,方式2:512us7.5 利用8XX51的T0计数,每计10个脉冲,P1.0变反一次,用查询和中断两种方式编程。7.5 使用方式2,计数初值c=100HOAH=
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


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

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


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