《单片机习题解答》由会员分享,可在线阅读,更多相关《单片机习题解答(19页珍藏版)》请在金锄头文库上搜索。
1、10.3 判断下列说法是否正确。 (1)DPTR可以分为2个8位的寄存器使用,但PC不行。( 对 ) (2)片内RAM的位寻址区,只能供位寻址使用,不能供字节寻址使用。 (3)为使8051单片机的准双向I/O口工作在输入方式,必须将它预先设置为1。 ( 对 ) (4)在8051单片机中,一个机器周期等于1s。 (5)串行通信帧发送时,指令把TB8位的状态送入发送SBUF中。 (6)特殊功能寄存器IE,与定时器/计数器的控制无关。 (7)同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。 (8)8051单片机的CPU是由RAM和EPROM组成的。 (9)串行口方式1的波特率是可变的,通过定
2、时器/计数器T1的溢出率设定。 ( 对 ) (10)在8051的中断请求中,需外加电路实现中断请求撤销的是外部串行中断。,10.10 系统复位后执行下述指令,试问T0的定时时间为多长? MOV TH0, #06H MOV TL0, #00H SETB TR0,答: 系统复位后,TMOD=00H,此时T0工作为方式0、定时器初值为:TH0=06H,TL0=00H,因为采用方式0工作,丢掉TL0的高3位,则THL0中的二进制数为:0,0000,110 0,0000即变为00C0H,则有:T0的定时时间为: (213-C0H)*Tcy = (8192-192)*Tcy = 8000*Tcy S。,1
3、0.12 若单片机系统的晶振频率为11.0592MHz,串行口工作于方式1,波特率为4800b/s,请写出T1作为波特率发生器的方式控制字和计数初值。,答:串行口工作于方式1,晶振频率为11.0592MHz, 由教材P.256的公式计算,或由表10.8查阅可知,TH1=FAH。即:方式控制字 :TMOD=20H,计数初值:TH1=TL1=FAH (SMOD=0); 。 或: TH1=TL1=F4H (SMOD=1)。,11.7 已知:40H单元中有一个正数X,试写出对X求补的程序。,答:对一个8位带符号二进制机器数的求补可以定义为“求反加1”。相应程序为:MOV A,40HCPL A INC
4、A MOV 40H,A,亦可:CLR ACLR CSUBB A,40HMOV 40H,A,11.8 试编程将A中的高四位送入P2口的高四位,P2口低四位不变。,MOV R0,A ANL A,#0F0H ANL P2,#0FH ORL P2,A MOV A,R0,11.14 编写程序实现十进制减法,计算65-32,ORG 0100HCLR C MOV A,9AH SUBB A , #32H ADD A , #65H DA A CPL C,11.15 试编写程序,将内部RAM以BK为起始地址的10个单元中的数据求和,并将结果送入SUM单元。设和不大于255,MOV R0,#BK MOV R7,#0
5、AH CLR A LOOP:ADD A,R0 INC R0 DJNZ R7,LOOP MOV SUM,A SJMP $,12.2 已知一个补码形式的16位二进制数(低8位在NUM单元,高8位在NUM+1单元),试编程求出该16位二进制数的绝对值,并存放在原单元中。,MOV A,NUM+1JNB ACC.7,DONEMOV R0,#NUM MOV A,R0 CPL A ADD A,#01H MOV R0,A INC R0 MOV A,R0 CPL A ADDC A,#00H MOV R0 A DONE:SJMP $,12.7 已知片内RAM 20H和30H为起始地址的存储区中分别有8字节无符号被
6、减数和减数(低字节在前,高字节在后)。编写子程序完成减法运算,并把差放入以20H为起始地址的存储单元中,BUBTR: MOV R0,#20H ;被减数起始地址送R0MOV R1,#30H ;减数起始地址送R1MOV R2,#08H ;字长送R2CLR C LOOP:MOV A,R0 ;被减数送ASUBB A,R1 ;相减,形成CyMOV R0,A ;存差INC R0 ;修改被减数地址指针INC R1 ;修改减数地址指针DJNZ R2,LOOP ;若未完,则转LOOPRET,12.8 片内RAM 20H单元开始存放着8个无符号数,编写子程序找出其中的最大值送入片内RAM的30H单元,MOV R0
7、,#20H ;数据区首地址送R0MOV A,R0 ;取第一个数做基准数送AMOV R7,#07H ;比较次数送计数器R7 LOOP:INC R0 ;指向下一个单元MOV 30H,R0 ;要比较的数暂存30HCJNE A,30H,CHK ;两数作比较 CHK:JNC LOOP1 ;A大,则转移MOV A,R0 ;A小,则大数送A LOOP1:DJNZ R7,LOOP ;计数器减1,不为零,继续MOV 30H,A ;比较完,存结果RET,12.10 已知51系列单片机系统的晶振频率为6MHz,请编写程序,使用T0定时,在P1.0输出连续矩形波,,ORG 0000H ;采用查询方式的程序 MAIN:
8、MOV TMOD,#01H ;设置T0工作于模式1SETB TR0 ;启动T0 WAIT0:SETB P1.0 MOV TH0,#0FFH ;T0计数初值(计数25,定时50us)MOV TL0,#0E7H WAIT1:JNB TF0,WAIT1CLR TF0CLR P1.0MOV TH0,#0FFH ;T0计数初值(计数75,定时150us)MOV TL0,#0B5H WAIT2:JNB TF0,WAIT2CLR TF0SJMP WAIT0,ORG 0000H ;采用中断方式的程序LJMP MAIN ;跳转至主程序ORG 000BH ;T0中断向量地址AJMP T0ISRORG 0030H
9、MAIN:MOV SP,#30H ;调整堆栈指针MOV TMOD,#01H ;设置T0工作于模式1MOV TH0,#0FFH ;T0定时初值(-25的补码)MOV TL0,#0E7HMOV IE,#82H ;打开全局中断和T0中断SETB TR0 ;启动T0SETB P1.0SETB F0 ;“输出电平标志”置1(输出高电平)SJMP $ ;循环等待,ORG 0100H ;定时器T0中断服务程序 T0ISR: JNB F0,L1MOV TH1,#0FFH ; T0计数初值(-75的补码)MOV TL1,#0B5HCLR P1.0CLR F0 ;“输出电平标志”置1(输出低电平)SJMP L2L
10、1:MOV TH0,#0FFH ;T0定时初值(-25的补码)MOV TL0,#0E7HSETB P1.0SETB F0 ;“输出电平标志”置1(输出高电平)L2:RETI END,12.11 编写中断初始化程序,将 设为高优先级中断、电平触发方式;T0溢出中断设为低优先级中断,串行口中断为高优先级中断,其余中断源设为禁止状态。,MOV IE,#96HSETB PX1CLR IT1CLR PT0SETB PS,13.8 欲利用DAC 0832 和8031 组成的单片机应用系统产生一个等腰三角形的波形,要求周期为1 秒、幅值为+5V,试画出DAC 0832 与8031 的接口电路,并编写相关的程
11、序。(参考P339 例13.8),无关的地址线取1,则DAC0832对应的端口地址为7FFFH, 将A内容送DAC 0832即可启动转换。,利用图示电路,产生等腰三角波,因数字量00FFH对应的模拟量为0V5V,则每一步对应的模拟量为:,步,而等腰三角波的半周期为500ms,每一步上升的时间为:,MOV DPTR,#7FFFH ;指向0832 端口地址MOV A,#00H ;第一个波形的起始值为0V LP1: MOVX DPTR,A ;输出前半周期ACALL DELAY2 ;调2ms 延时子程序INC A ;修改输出值,即幅值增加0.2VJNZ LP1 LP2: DEC A; 输出后半周期MO
12、VX DPTR,A ;输出数据到DAC 0832ACALL DELAY2 ;调2ms 延时子程序JNZ LP2SJMP LP1,一、判断一个数(例如:累加器A)是否为零:(1)JZ ZERO (2) CJNE A , #00H , NZERO二、判断一个数(例如:累加器A)是否为负数:(1) JB A7,NEG (2) CJNE A , #80H , NEXTNEXT:JNC NEG(3) RLC A (4) ANL A, #80HJC NEG JNZ NEG,比较A,B中两个带符号数大小的子程序COMPAB 入口:两个要比较大小的带符号数分别送入A,B 出口:A-B后,若AB,则01HA; A=B,则00HA ; AB,则80HA COMPAB:CLR CSUBB A, BJZ L3 ;A=B,则转L3JB OV,L0 ;若溢出则转L0JB A.7,L1 ;未溢出,且结果为负数(AB)转L1SJMP L2 ;未溢出, 且结果为正数(AB)转L2L0: JB A.7,L2 ;溢出且结果为负数,(AB)转L2L1:MOV A, #80H ;溢出且结果为正,置AB的标志SJMP L3L2:MOV A, #01H ; 置AB的标志L3:RET,