单片机答案汇编.docx
- 文档编号:10253023
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:24
- 大小:21.36KB
单片机答案汇编.docx
《单片机答案汇编.docx》由会员分享,可在线阅读,更多相关《单片机答案汇编.docx(24页珍藏版)》请在冰豆网上搜索。
单片机答案汇编
3-3访问外部数据存储器和程序存储器可以用哪些指令来实现?
举例说明。
答:
访问外部数据存储器可以用以下指令实现:
解:
MOVXA,@Ri;((Ri))→A,寄存器Ri指向的片外RAM地址中的内容送到累加器A中
MOVX@Ri,A;A→((Ri)),累加器中内容送到寄存器Ri指向的片外RAM地址中
MOVXA,@DPTR;((DPTR))→A,数据指针指向的片外RAM地址中的内容送到累加器A中
MOVX@DPTR,A;A→((DPTR)),累加器中内容送到数据指针指向的片外RAM地址中
访问程序存储器可以用以下指令实现:
MOVCA,@A+DPTR;((A+DPTR))→A,表格地址单元中的内容送到累加器A中
MOVCA,@A+PC;PC+1→PC,((A+PC))→A,表格地址单元中的内容送到累加器A中
3-4试用下列3种寻址方式编程,将立即数0FH送入内部RAM的30H单元中。
(1)立即寻址方式;
(2)寄存器寻址方式;(3)寄存器间接寻址方式
答
(1)立即寻址方式:
MOV30H,#0FH
(2)寄存器寻址方式:
MOVR5,#0FH
MOV30H,R5
(3)寄存器间接寻址方式:
MOV@R1,#0FH
3-7写出实现下列要求的指令或程序片段。
(1)将R0的内容传送到R1;
(2)内部RAM的20H单元内容传送到寄存器R1;
(3)内部RAM的20H单元的D7和D3位清零,其它位保持不变;
(4)外部RAM的1000H单元内容传送到内部RAM的60H单元中;
(5)外部RAM的1000H单元内容传送到寄存器R2;
(6)清除累加器高4位。
答:
(1)MOVA,R0
MOVR1,A
(2)MOVR1,20H
(3)MOVA,20H
ANLA,#77H
(4)MOVDPTR,#1000H
MOVXA,@DPTR
MOV60H,A
(5)MOVDPTR,#1000H
MOVXA,@DPTR
MOVR2,A
(6)ANLA,#0FH
3-8试编写一段程序,将内部数据存储器30H、3lH单元内容传送到外部数据存储器1000H、1001H单元中。
答:
MOVA,30H
MOVDPTR,#1000H
MOV@DPTR,A
MOVA,31H
MOVDPTR,#1000H
MOV@DPTR,A
3-9试编写一段程序,将外部数据存储器40H单元中的内容传送到0l00H单元中。
答:
MOVDPTR,#0040H
MOVA,@DPTR
MOV0100H,A
3-10试编写—段程序,将R3中的数乘4(用移位指令)。
答:
MOVA,R3
MOV23H,#02H
L0:
DJNZ23H,L1
L1:
RLA
SJMPL0
3-11试编写—段程序,将R2中的各位倒序排列后送入R3中。
答:
MOVA,R2
MOV23H,#08H
L0:
DJNZ23H,L1
L1:
RLA
SJMPL0
MOVR3,A
3-12试编写—段程序,将P1口的高5位置位,低3位不变。
答:
MOVA,P1
ORLA,#F8H
MOVP1,A
4-4编写程序,将片内30H~39H单元中的内容送到以2000H为首的外部存储器。
答:
ORG0000H
START:
MOVR0,#30H
MOVDPTR,#2000H
MOVR1,#10
CLRA
LOOP:
MOVA,@R0
MOVX@DPTR,A
DECR1
DJNZR1,LOOP
END
4-5编写程序,采用算术平均值滤波法求采样平均值,设8次采样值依次放在20H~27H的连续单元中,结果保留在A中。
答:
FILT:
CLRA
MOVR2,A
MOVR3,A
MOVR0,#20H
MOVR7,#08H
;初始化
FILT1:
MOVA,@R0
ADDA,R3
MOVR3,A
CLRA
ADDCA,R2
MOVR2,A
INCR0
DJNZR7,FILT1
;累加采样值到R3,累加进位到R2=00000xxxB
FILT2:
SWAPA
RLA;R2/8,节省一个指令周期
XCHA,R3
SWAPA
RLA;R3/8,节省一个指令周期
ADDA,#80H;四舍五入
ANLA,#1FH;屏蔽移位进入的前三位
ADDCA,R3;结果相加
END
;取平均值
4-6编写程序,将存放在内部RAM起始地址为20H和30H的两个3字节无符号相减,结果存放在内部RAM单元70H、71H、72H中(低位对应低字节)。
答:
ORG0000H
START:
MOVR0,#20H
MOVR1,#30H
MOVR2,#03H
CLRC
S0:
LCALLXU
MOV70H,A
LCALLXU
MOV70H,A
LCALLXU
MOV70H,A
S1:
MOVA,@R0
SUBBA,@R1
INCR0
INCR1
RET
END
4-7编写程序,实现两个双字节无符号数的乘法运算,乘数存放在R2和R3中(R2存放高字节,R3存放低字节,以下类同),被乘数存放在R6和R7中,积存放在R4、R5、R6和R7中。
答:
ORG0000H
DMUL:
MOVA,R3
MOVB,R7
MULAB
MOVR0,A
MOVR1,B
;低8位*低8位
MOVA,R2
MOVB,R7
MULAB
ADDA,R1
MOVR1,A
MOVA,B
ADDCA,#00H
MOVR5,A
;高8位*低8位
MOVA,R3
MOVB,R6
MULAB
ADDA,R1
MOVR1,A
MOVA,R5
ADDCA,B
MOVR5,A
MOVA,#00H
ADDCA,#00H
MOVR4,A
;低8位*高8位
MOVA,R3
MOVB,R6
MULAB
ADDA,R5
MOVR5,A
MOVA,R4
ADDCA,B
MOVR4,A
;高8位*高8位
MOVA,R0
MOVR7,A
MOVA,R1
MOVR6,A
;R0、R1给R7、R6
END
4-8假设在R0指向的片内RAM区,存有20个16进制数的ASCII字串。
将ASCII码转换为16进制数,然后两两合成一个字节,从低地址单元到高地址单元依次组合。
答:
ORG0000H
START:
MOVR7,#20
S0:
MOVA,R0
MOVR1,A;R1为中间量
MOVA,@R0
CLRC
SUBBA,#30H
MOV@R1,A
JCS01
MOVA,@R0
SUBBA,#07H
MOV@R1,A
S01:
INCR0
MOVA,@R0
CLRC
SUBBA,#30H
SWAPA
ORLA,@R1
MOV@R1,A
JCS02
MOVA,@R0
SUBBA,#07H
SWAPA
ORA,@R1
MOV@R1,A
S02:
INCR0
DJNZR7,S0
END
4-9结合例4-24和图4-5编写线性标度变换程序。
答:
将256近似255,256比255做浮点运算简单很多
PUSHACC
PUSHPSW
MOVA,#Am
MOV20H,#A0
CLRC
SUBBA,20H;将256近似255,则A为小数点后的位
MOV21H,#Nx
MOVB,21H
MULAB;B为整数位,A为小数点后的位
ADDA,#80H;四舍五入
MOVA,B
ADDCA,#A0
MOV38H,A
POPPSW
PUSHACC
RET
5-4试编写一段程序,将内部数据存储器30H、3lH单元内容传送到外部数据存储器1000H、1001H单元中去。
答:
#include
#include
voidmain(void)
{
unsignedinttemp;
temp=DWORD[0x0030];
XWORD[0x1000]=temp;
while
(1);
}
5-5试编写一段程序,将外部数据存储器40H单元中的内容传送到50H单元。
答:
方法一:
#include
#include
voidmain(void)
{
XBYTE[0x0050]=XBYTE[0x0040];
while
(1);
}
方法二:
#include
#include
voidmain(void)
{
unsignedcharxdata*xp;
unsignedchardatatemp;
xp=0x0040;
temp=*xp;
xp=0x0050;
*xp=temp;
while
(1);
}
5-6试编写—段程序,将R3中的数乘以4。
答:
#include
voidmain(void)
{
unsignedintdata*a;
#pragmaasm
MOV30H,R3
#pragmaendasm
a=0x30;
*a=*a*4;
while
(1);
}
5-7试编写—段程序,将R2中的各位倒序排列后送入R3中。
答:
考虑C中没有循环移位,对于这种很低级的运算,采用嵌入汇编的方式完成。
#include
voidmain(void)
{
#pragmaasm
MOVR7,#08H
MOVR3,#00H
DEL:
CLRCY
MOVA,R2
RLCA
MOVR2,A
MOVA,R3
RRCA
MOVR3,A
DJNZR7,DEL
#pragmaendasm
while
(1);
}
5-8试编写—段程序,将P1口的高5位置位,低3位不变。
答:
#include
voidmain(void)
{
P1|=0xf8;
while
(1);
}
5-9设8次采样值依次存放在20H~27H的连续单元中,采用算术平均值滤波法求采样平均值,结果保留在30H单元中。
试编写程序。
答:
#pragmasmall
#include
voidmain(void)
{
unsignedchar*dp=0x20,i;
floattemp=0;
for(i=0;i<8;i++)
{
temp+=*dp;
dp++;
}
temp/=8;
dp=0x30;
*dp=temp;
while
(1);
}
5-10从20H单元开始有一无符号数据块,其长度在20H单元中。
编写程序找出数据块中最小值,并存入21H单元。
答:
#pragmasmall
#include
voidmain(void)
{
unsignedchar*dp,num,min,i;
dp=0x20;
num=*dp;
dp++;
for(i=1;i { min=*dp; dp++; if(min>*dp) min=*dp; } dp=0x21; *dp=min; while (1); } 6-10某系统有三个外部中断源1、2、3,当某一中断源变低电平时便要求CPU处理,它们的优先处理次序由高到低为3、2、1,处理程序的入口地址分别为2000H、2100H、2200H。 试编写主程序及中断服务程序(转至相应的入口即可)。 答: 对系统的三个外中断源,可利用MCS-51的2个外中断源INT0和INTI,再将定时/计数器T1作为扩展的外部中断使用,INT0接外中断源3,INTI接外中断源2,定时/计数器T1接外中断源1,3个中断源设置为同级中断,外中断源1、2、3依次接到P1.0、P1.1、P1.2上。 汇编语言程序代码如下: ORG0000H;复位入口地址 AJMPMAIN;转主程序 ORG0003H AJMPINT1 ORG0100H MAIN: MOVTMOD,#60H;T1方式2 MOVTH1,#0FFH MOVTL1,#0FFH;置初值 SETBTR1;启动计数器T1 SETBEA;CPU中断开放 SETBET1;允许T1中断 SETBIT0;允许外中断0产生中断 SETBIT1 SETBPX0;外中断0为高级中断 SETBPX1 SETBPT1 SETBIT0;外中断0为跳沿触发方式 SETBIT1 LOOP1: SJMPLOOP1;等待中断 ;中断服务程序 ORG1000H INT1: PUSHPSW;保护现场 PUSHACC JBP1.0,IR1;P1.0高,外中断1有请求 JBP1.1,IR2;P1.1高,外中断2有请求 JBP1.2,IR3;P1.2高,外中断3有请求 INTIR: POPACC;恢复现场 POPPSW RETI;中断返回 ORG2000H IR1: ……;外中断1的中断处理程序 AJMPINTIR ORG2100H IR2: ……;外中断2的中断处理程序 AJMPINTIR ORG2200H IR3: ……;外中断3的中断处理程序 AJMPINTIR END 7-5采用定时/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。 定时1ms后,又转为计数方式,如此循环不止。 假定MCS-51单片机的晶体振荡器频率为6MHz,请使用方式1实现,要求编写出程序。 答: ORG0000H START: CLRTR0 MOVTMOD,#05H MOVTH0,#0FFH MOVTL0,#9CH ;计数器初始化 S0: JBCTF0,NEXT SJMPS0 NEXT: CLRTR0 MOVTMOD,#01H MOVTH0,#0F8H MOVTL0,#30H ;定时器初始化 SETBTR0 S1: JBCTF0,START SJMPS1 END 7-7编写程序,要求使用T0,采用方式2定时,在P1.0输出周期为400μs,占空比为10: 1的矩形脉冲。 答: 本题采用晶体振荡器频率为12MHz,使用定时器配合计数器,设计成一个40μs定时将P1.0置0和一个400μs定时将P1.0置1。 ORG0000H;中断入口地址 AJMPSTART ORG000BH;定时器0的中断向量地址 AJMPTIME0 ORG0030H START: MOVSP,#5FH MOV30H,#00H;软件计数器清零 MOVTMOD,#02H;T0工作在方式1 MOVTH0,#216 MOVTL0,#216 SETBEA SETBET0 SETBTR0 ;任意程序段 TIME0: PUSHACC;中断处理子程序 PUSHPSW CLRP1.0 INC30H MOVA,30H CJNEA,#10,T0_4 SETBP1.0 MOV30H,#00H T0_4: POPPSW POPACC RETI END 7-9利用定时/计数器T0产生定时时钟,由P1口控制8个指示灯。 编一个程序,使8个指示灯依次一个一个闪动,闪动频率为20次/秒(8个灯依次亮一遍为一个周期)。 答: 本题采用晶体振荡器频率为12MHz,每个灯的闪烁周期是: 50ms,采用工作方式1。 ORG0000H AJMPSTART ORG000BH AJMPTIME0 ORG0030H START: MOVSP,#5FH MOVR7,#0FEH MOVTMOD,#01H;T0在工作方式1 MOVTH0,#3CH MOVTL0,#0B0H SETBEA SETBET0 SETBTR0 S0: AJMPS0;此处放任意程序段 TIME0: PUSHACC PUSHPSW MOVP1,R7 MOVA,R7 RLA MOVR7,A MOVTH0,#3CH MOVTL0,#0B0H POPPSW POPACC RETI END 7-11编写一段程序,功能要求为: 当P1.0引脚的电平正跳变时,对P1.1的输入脉冲进行计数;当P1.2引脚的电平负跳变时,停止计数,并将计数值写入R0、R1(高位存R1,低位存R0)。 答: 将P1.1的输入脉冲接入T0,即使用T0计数器完成对P1.1口的脉冲计数。 R2中记T0计满数的次数。 程序代码如下: ORG0000H LJMPMAIN ORG000BH LJMPIT0 MAIN: JNBP1.0,MAIN MOVTMOD,#05H;定时/计数器T0为计数方式1 SETBTR0;启动T0,开始计数 SETBET0;允许T0中断 SETBEA;CPU开中断 WAIT: JBP1.2,WAIT CLREA CLRTR0 MOVR1,TH0 MOVR0,TL0 AJMP$ IT0: INCR2 RETI 7-18为什么定时/计数器T1用做串行口波特率发生器时,应采用方式2? 若已知时钟频率、通信波特率,如何计算其初值? 答: 因为方式2是有自动重装载计数值的功能,从而可以产生精确的波特率。 串行工作方式0和方式2波特率是固定的,所以不用设初值;串行工作方式1和方式3时: 波特率: BR=(2SMOD×Td)/32 溢出一次的时间: 1/Td=(256-TH1)*12/fosc 溢出率: Td=fosc/[12×(256-TH1)] 初值: TH1=256-fosc/(12*Td) 7-19若晶体振荡器为11.059MHz,串行口工作于方式1,波特率为4800b/s,写出用T1作为波特率发生器的方式控制字和计数初值。 答: MOVTMOD,#20H MOVTH1,#0FAH MOVTL1,#0FAH SETBTR1 MOVSCON,#50H 7-20利用单片机串行口扩展24个发光二极管和8个按键,要求画出电路图并编写程序使24个发光二极管按照不同的顺序发光(发光的时间间隔为1s)。 答: ORG1000H START: MOVSCON,#00H;串行口工作方式0 MOVR0,#00H MOVR7,#03H MOVR6,#24H CLRP1.0;关闭并行输出 LOOP: MOVA,@R0 MOVDPTR,#TAB;查表取数,送出 MOVCA,@A+DPTR MOVSBUF,A OUT0: JNBTI,OUT0 INCR0 CLRTI DJNZR7,LOOP SETBP1.0;开启并行输出 ACALLDELAY DJNZR6,START AJMPLOOP DELAY: MOVR2,#250 D1: MOVR3,#100 D2: MOVR4,#20 D3: DJNZR4,D3 DJNZR3,D2 DJNZR2,D1 RET TAB: DB00000000B,00000000B,00000001B,00000000B DB00000000B,00000010B,00000000B,00000000B DB00000100B,00000000B,00000000B,00001000B DB00000000B,00000000B,00010000B,00000000B DB00000000B,00100000B,00000000B,00000000B DB01000000B,00000000B,00000000B,10000000B DB00000000B,00000001B,00000000B,00000000B DB00000010B,00000000B,00000000B,00000100B DB00000000B,00000000B,00001000B,00000000B DB00000000B,00010000B,00000000B,00000000B DB00100000B,00000000B,00000000B,01000000B DB00000000B,00000000B,10000000B,00000000B DB00000001B,00000000B,00000000B,00000010B DB00000000B,00000000B,00000100B,00000000B DB00000000B,00001000B,00000000B,00000000B DB00010000B,00000000B,00000000B,00100000B DB00000000B,00000000B,01000000B,00000000B DB00000000B,10000000B,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 答案 汇编