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