《单片机》编程题题目整合答案解析文档格式.docx
《《单片机》编程题题目整合答案解析文档格式.docx》由会员分享,可在线阅读,更多相关《《单片机》编程题题目整合答案解析文档格式.docx(67页珍藏版)》请在冰豆网上搜索。
程序设计思路正确可得5分,指令完全写对可得10分。
若仅写对少量指令,可酌情给1-3分;
若仅有少量指令写错,可酌情扣1-3分。
2、设单片机的晶体震荡频率为12MHz,利用定时器T0编程由P1.2输出周期为10mS的方波。
(要求:
T0工作在方式1下,采用中断方式工作)
解:
周期为10mS则半周期为5mS,因此T0的定时初值为65536-5000/1=60536=0EC78H
ORG0
ORG000BH
LJMPTS
START:
MOVTMOD,#01H
MOVTH0,#0ECH
MOVTL0,#78H
SETBET0
SETBTR0
SETBEA
CLRP1.2
SJMP$
TS:
CLRTR0
CPLP1.2
RETI
T0的方式控制字写对和定时初值计算正确可各得1分;
程序设计思路正确可得4分,指令完全写对可得满分(10分)。
若少量指令写错可酌情扣1-2分;
若仅写出少量指令可酌情给1-2分。
3、将存放在内部RAM30H-35H单元的压缩型BCD码转换成相应的ASCII码,依次存放到外部RAM2100H开始的单元区中。
MOVR0,#30H
MOVR2,#06H
MOVDPTR,#2100H
LOOP:
MOVA,@R0
ORLA,#30H
INCDPTR
MOVA,@R0
INCR0
DJNZR2,LOOP
4、已知8051单片机应用系统的晶体振荡频率为12MHz,请利用定时器T0实现在P1.0引脚上输出周期为100mS的方波。
采用中断方式,T0工作在方式1下)
输出方波周期为100mS,故半周期为50mS,因此T0的定时初值是65536-50000/1=15536=3CB0H
MOVTH0,#3CH
MOVTL0,#0B0H
5、设8031单片机应用系统的晶振频率为12MHz,请利用T0在P1.0和P1.1引脚上输出频率为20Hz、互补(两个波形互为反相)的方波。
要求:
采用中断方式,T0工作在方式1。
输出频率为20Hz,则周期为1/20=50mS,半周期为50/2=25mS,
T0的定时初值为:
65536-25000/1=40536=9E58H
MOVTMOD,#01H;
T0设定为定时器,工作方式1
MOVTH0,#9EH
MOVTL0,#58H
CLRP1.0
SETBP1.1
CPLP1.0
CPLP1.1
6、内部RAM20H和30H开始的单元分别存放着16个16进制数,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM2000H开始的单元中。
MOVR0,#20H
MOVR1,#30H
MOVDPTR,#2000H
MOVR2,#08H;
每个单元存放2个16进制数,故16个16进制数占用8个单元
ADDA,@R1
INCR1
7、8031单片机应用系统的晶体振荡器频率为12MHz,请利用定时器T0编程实现在P1.7引脚输出频率为20Hz的方波。
采用中断方式,T0工作在方式1下。
20Hz方波的周期是1/20=50mS,则其半周期为50/2=25mS
65536-25000*12/12=40536=9E58H
MOVTMOD,#01H;
8、请编写多字节无符号数减法程序。
被减数存放在内部RAM20H开始的8个单元中,减数存放在内部RAM30H开始的8个单元,请将差存放到外部RAM2000H开始的8个单元中,借位存放到OV标志中。
注意:
所有数据均按照从低字节到高字节的顺序存放。
MOVR2,#08H
CLRC
SUBBA,@R1
MOVOV,C
9、内部RAM40H和41H单元中存放着2个0-9的ASCII码(高位字节在前),请将其转换为压缩BCD码(高位在前)并存入外部RAM2000H单元中。
MOVA,40H
MOVA,41H
MOVDPTR,#2000H
10、设单片机的晶体振荡频率为12MHz,利用定时器T0编程由P1.0和P1.1输出周期为10mS、互补(互为反相)的方波。
周期为10mS则半周期为5mS,因此T0的定时初值为65536-5000*12/12=60536=0EC78H
11、将存放在内部RAM20H-2FH单元的压缩型BCD码(高位在前)转换成相应的ASCII码,依次存放到外部RAM1000H开始的单元区中。
MOVR2,#10H
MOVDPTR,#1000H
ORLA,#30H(或ADDA,#30H)
12、已知8051单片机应用系统的晶体振荡频率为12MHz,请利用定时器T1实现在P1.0和P1.1引脚上输出互补(互为反相)的周期为100mS的方波。
采用中断方式,T1工作在方式1下)
输出方波周期为100mS,故半周期为50mS,因此T1的定时初值是65536-50000*12/12=15536=3CB0H
ORG001BH
MOVTMOD,#10H(或#1XH)
MOVTH1,#3CH
MOVTL1,#0B0H
SETBET1
SETBTR1
CLRTR1
T1的方式控制字写对和定时初值计算正确可各得1分;
13、设8031单片机应用系统的晶振频率为12MHz,请利用T0在P1.0引脚上输出频率为20Hz的方波。
14、内部RAM30H和38H开始的单元分别存放着8个压缩BCD码,请将对应单元的内容相加(不考虑溢出),并将和存入外部RAM1000H开始的单元中。
MOVR0,#30H
MOVR1,#38H
MOVR2,#08
DAA
15、8031单片机应用系统的晶体振荡器频率为12MHz,请利用定时器T1编程实现在P1.6和P1.7引脚输出互补(互为反相)的、频率为20Hz的方波。
采用中断方式,T1工作在方式1下。
T1的定时初值为:
MOVTMOD,#10H;
T1设定为定时器,工作方式1
MOVTH1,#9EH
MOVTL1,#58H
CLRP1.6
SETBP1.7
CPLP1.6
CPLP1.7
16、请编写多字节无符号数加法程序。
被加数存放在内部RAM20H开始的8个单元中,加数存放在内部RAM30H开始的8个单元,请将和存放到外部RAM2000H开始的8个单元中,进位存放到F0标志中。
ADDCA,@R1
MOVF0,C
17、两个8字节压缩BCD码分别存放在内部RAM30H和40H开始的连续单元中(低位字节在前),请将二者求和(不考虑溢出情况),并将和存入外部RAM1000H开始的单元中。
MOVR1,#40H
MOVR2,#8
LOOP:
MOVA,R0
程序设计思路正确可得5分;
对于仅写出部分指令的学生可酌情给1-4分;
程序编制正确可得满分,若存在少量错误,可酌情扣1-3分。
18、设单片机的晶体振荡频率为6MHz,利用定时器T1编程由P1.6和P1.7输出周期为500μS、互补(互为反相)的方波。
T1工作在方式2下,采用中断方式工作)
T1定时器的初值=256-6*250/12=131=83H
ORG1BH
START:
MOVTMOD,#20H
MOVTH1,#131
MOVTL1,#131
SETBEA(或MOVIE,#88H)
TS:
写对定时器方式字和初值各给1分,设计思路正确给4分,程序编制正确可得满分。
若仅写出少量指令,可酌情给1-3分。
19、将存放在内部RAM20H-2FH单元的十六进制数转换成ASCII码,依次存放到外部RAM2000H开始的单元中。
MOVR2,#16
MOVR3,DPH
MOVR4,DPL
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVDPH,R3
MOVDPL,R4
MOVR3,DPH
MOVR4,DPL
INCR0
TAB:
DB‘0123456789ABCDEF’
20、已知8051单片机应用系统的晶体振荡频率为12MHz,请利用定时器T1实现在P1.0和P1.1引脚上输出互补(互为反相)的周期为2ms的方波。
采用中断方式,T1工作在方式2下)
半周期=1ms。
方式2定时设定为250μS,
其初值=256-250*12/12=6。
只要T1中断4次计数即为1ms。
MOVTH1,#6
MOVTL1,#6
MOVR2,#4
TS:
DJNZR2,TS1
TS1:
21、设8031单片机应用系统的晶振频率为12MHz,请利用T1在P1.0引脚上输出频率为1Hz的方波。
采用中断方式,T1工作在方式1。
1Hz方波的周期为1s,半周期为500ms。
可采用T1定时50ms,并对中断计数10次来实现500ms定时。
50ms定时初值=65536-50000*12/12=15536=3CB0H
ORG0
MOVTMOD,#10H
MOVR2,#10
TS1:
22、内部RAM30H和外部RAM2200H开始的单元分别存放着两个8字节十六进制数(低位字节存放在前),请将二者相加(不考虑溢出情况),并将和存入内部RAM40H开始的单元中。
MOVDPTR,#2200H
CLRC
MOVXA,@DPTR
ADDCA,@R0
MOV@R1,A
23、8051单片机应用系统的晶体振荡器频率为6MHz,请利用定时器T1编程实现在P1.0和P1.1引脚输出互补(互为反相)的、频率为20Hz的方波。
采用中断