单片机习题解答
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12.2 已知一个补码形式的16位二进制数(低8位在 NUM单元,高8位在NUM+1单元),试编程求出该16位 二进制数的绝对值,并存放在原单元中。 MOV A,NUM+1 JNB ACC.7,DONE MOV 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 $
一、判断一个数(例如:累加器A)是否为零:
(1)JZ ZERO (2) CJNE A , #00H , NZERO
二、判断一个数(例如:累加器A)是否为负数: (1) JB A· 7,NEG (2) CJNE A , #80H , NEXT NEXT:JNC NEG (4) ANL A, #80H JNZ NEG
11.7 已知:40H单元中有一个正数X,试写出 对X求补的程序。
答:对一个8位带符号二进制机器数的求补 可以定义为“求反加1”。相应程序为: MOV A,40H 亦可: CLR A CPL A CLR C INC A SUBB A,40H MOV 40H,A MOV 40H,A
11.8 试编程将A中的高四位送入P2口的高四 位,P2口低四位不变。
(3) RLC A JC NEG
比较A,B中两个带符号数大小的子程序COMPAB 入口:两个要比较大小的带符号数分别送入A,B 出口:A-B后,若A>B,则01H→A; A=B,则00H→A ; A<B,则80H→A COMPAB:CLR C SUBB A, B JZ L3 ;A=B,则转L3 JB OV,L0 ;若溢出则转L0 JB A.7,L1 ;未溢出,且结果为负数(A<B)转L1 SJMP L2 ;未溢出, 且结果为正数(A>B)转L2 L0: JB A.7,L2 ;溢出且结果为负数,(A>B)转L2 L1:MOV A, #80H ;溢出且结果为正,置A<B的标志 SJMP L3 L2:MOV A, #01H ; 置A>B的标志 L3:RET
12.7 已知片内RAM 20H和30H为起始地址的存储区中分别有8 字节无符号被减数和减数(低字节在前,高字节在后)。编写子程序 完成减法运算,并把差放入以20H为起始地址的存储单元中
BUBTR: MOV R0,#20H MOV R1,#30H MOV R2,#08H CLR C LOOP:MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R2,LOOP RET
12.10 已知51系列单片机系统的晶振频率为6MHz,请 编写程序,使用T0定时,在P1.0输出连续矩形波, ORG 0000H ;采用查询方式的程序 MAIN:MOV TMOD,#01H ;设置T0工作于模式1 SETB TR0 ;启动T0 WAIT0:SETB P1.0 MOV TH0,#0FFH ;T0计数初值(计数25,定时50us) MOV TL0,#0E7H WAIT1:JNB TF0,WAIT1 CLR TF0 CLR P1.0 MOV TH0,#0FFH ;T0计数初值(计数75,定时150us) MOV TL0,#0B5H WAIT2:JNB TF0,WAIT2 CLR TF0 SJMP WAIT0
MOV R0,A ANL A,#0F0H ANL P2,#0FH ORL P2,A MOV A,R0
11.14
编写程序实现十进制减法,计算65-32
ORG 0100H CLR C
MOV A,#9AH
SUBB A , #32H
ADD 来自百度文库 , #65H
DA A
CPL C
11.15 试编写程序,将内部RAM以BK为起始 地址的10个单元中的数据求和,并将结果送入 SUM单元。设和不大于255 MOV R0,#BK MOV R7,#0AH CLR A LOOP:ADD A,@R0 INC R0 DJNZ R7,LOOP MOV SUM,A SJMP $
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。
10.3 判断下列说法是否正确。
(1)DPTR可以分为2个8位的寄存器使用,但PC不行。( 对 ) (2)片内RAM的位寻址区,只能供位寻址使用,不能供字节寻址 使用。 (3)为使8051单片机的准双向I/O口工作在输入方式,必须将它预 先设置为1。 ( 对 ) (4)在8051单片机中,一个机器周期等于1µ s。 (5)串行通信帧发送时,指令把TB8位的状态送入发送SBUF中。 (6)特殊功能寄存器IE,与定时器/计数器的控制无关。 (7)同一时间同一级别的多中断请求,将形成阻塞,系统无法响应。 (8)8051单片机的CPU是由RAM和EPROM组成的。 (9)串行口方式1的波特率是可变的,通过定时器/计数器T1的溢出 率设定。 ( 对 ) (10)在8051的中断请求中,需外加电路实现中断请求撤销的是外 部串行中断。
SETB F0
平)
;“输出电平标志”置1(输出高电
ORG 0100H T0ISR: JNB F0,L1 MOV TH1,#0FFH
;定时器T0中断服务程序 ; T0计数初值(-75的补码)
MOV TL1,#0B5H
CLR P1.0 CLR F0
;“输出电平标志”置1(输出低电平) ;T0定时初值(-25的补码)
ORG 0000H
;采用中断方式的程序
LJMP MAIN
ORG 000BH AJMP T0ISR ORG 0030H MAIN:MOV SP,#30H
;跳转至主程序
;T0中断向量地址
;调整堆栈指针 ;设置T0工作于模式1 ;T0定时初值(-25的补码) ;打开全局中断和T0中断 ;启动T0
MOV TMOD,#01H MOV TH0,#0FFH MOV TL0,#0E7H MOV IE,#82H SETB TR0 SETB P1.0
;被减数起始地址送R0 ;减数起始地址送R1 ;字长送R2
;被减数送A ;相减,形成Cy ;存差 ;修改被减数地址指针 ;修改减数地址指针 ;若未完,则转LOOP
12.8 片内RAM 20H单元开始存放着8个无符号数,编
写子程序找出其中的最大值送入片内RAM的30H单元 MOV R0,#20H MOV A,@R0 MOV R7,#07H LOOP:INC R0 MOV 30H,@R0 CJNE A,30H,CHK CHK:JNC LOOP1 MOV A,@R0 LOOP1:DJNZ R7,LOOP MOV 30H,A RET ;数据区首地址送R0 ;取第一个数做基准数送A ;比较次数送计数器R7 ;指向下一个单元 ;要比较的数暂存30H ;两数作比较 ;A大,则转移 ;A小,则大数送A ;计数器减1,不为零,继续 ;比较完,存结果
无关的地址线取1,则DAC0832对应的端口地址为7FFFH,
将A内容送DAC 0832即可启动转换。
利用图示电路,产生等腰三角波,因数字量00~FFH对应 的模拟量为0V~5V,则每一步对应的模拟量为: 5V - 0V = 0. 0196 0. 02V /步 255
而等腰三角波的半周期为500ms,每一步上升的时间为:
MOV IE,#96H SETB PX1 CLR IT1 CLR PT0 SETB PS
13.8 欲利用DAC 0832 和8031 组成的单片机应用系统 产生一个等腰三角形的波形,要求周期为1 秒、幅值 为+5V,试画出DAC 0832 与8031 的接口电路,并编 写相关的程序。(参考P339 例13.8)
SJMP L2
L1:MOV TH0,#0FFH MOV TL0,#0E7H
SETB P1.0
SETB F0 L2:RETI END
;“输出电平标志”置1(输出高电平)
12.11 编写中断初始化程序,将 INT1设为高优 先级中断、电平触发方式;T0溢出中断设为低优 先级中断,串行口中断为高优先级中断,其余中 断源设为禁止状态。
500ms 2ms 255
MOV DPTR,#7FFFH ;指向0832 端口地址 MOV A,#00H ;第一个波形的起始值为0V LP1: MOVX @DPTR,A ;输出前半周期 ACALL DELAY2 ;调2ms 延时子程序 INC A ;修改输出值,即幅值增加0.2V JNZ LP1 LP2: DEC A; 输出后半周期 MOVX @DPTR,A ;输出数据到DAC 0832 ACALL DELAY2 ;调2ms 延时子程序 JNZ LP2 SJMP LP1
10.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)。