)
MOVF0ACC3(×)MOVF0C(√)MOVP1R3(√)
MOVDPTR0FCH(×)CPL30H
(√)PUSHR0(×)
MOVC0FFH(×)MOVA0D0H(√)
2利用位操作指令序列实现下列逻辑运算。
(1)D10HP1011HCY
MOVCP10
ORLC10H
MOVF0C
ORLC11H
ANLCF0
MOVDC
(2)EACC2P27ACC1P20
MOVCACC2
ANLCP27
ORLCACC1
ANLCP20
MOVEC3编写程序将内部RAM20H23H单元的高4位写1,低4位写0。分析:就是把内部RAM20H23H这4个单元写入0F0H。用一个DJNZ的循环。
LOOP
ORGMOVMOVMOV
0000HR020HR104HR00F0H
R0指向20H单元4个单元写入
INCR0DJNZR1LOOP
循环4次
END4在m和m1单元中存有两个BCD数,将他们合并到m单元中,编写程序完成。
ORG0030H
MOVMOVANLSWAPMOV
R0mAR0A0FHAR0A
将m单元中的BCD数送入累加器A把m单元的高4位清0将m单元中的BCD数移入高4位
m单元高4位为BCD数,低4位为0
INCMOVANLDEC
R0AR0A0FHR0
指向m1单元将m1单元中的BCD数送入累加器A把m1单元的高4位清0
指向m单元
3
fORLMOVEND
AR0R0A
将和m1单元和m单元内容合并合并后结果送m单元
5将内部RAM中从data单元开始的10个无符号数相加,其和送sum单元。假定相加结果小于255。编写程序完成。
LOOP
ORGMOVMOVCLRAADDINCDJNZMOV
0030HR010R1data
AR1R1R0LOOPsumA
给R0置计数器初值数据块首址送R1
A清零加一个数
修改地址,指向下一个数R0减1,不为零循环
存10个数相加和
END6假定8位二进制带符号数存于R0中,要求编写一个求补(取反)程序,所得补码放入R1中。分析:对存于R0中的二进制带符号数,如果是正数,则将其变成绝对值相等的负数(用补码表示);如果是负数(用补码表示),则将其变成绝对值相等的正数。
ORG0030HMOVAR0
将带符号数送入A
CPLAADDA01HMOVR1A
末位加1补码存入R1
END
第4章单片机汇编语言程序设计
(一)填空题
1假定A40H,R123H,(40H)05H。执行以下两条指令后,A(25H),R1(40H),(40H)(03H)。
XCHAR1
A23H,R140H
XCHDAR1
A20H,(40H)03H
2假定80C51的晶振频率为6MHz,执行下列程序后,在P11引脚产生的方波宽度为(5804ms)
STARTSETBP11
P11置1(1周期)
DLMOV30H03H
30H置初值(1周期)
DL0MOV31H0F0H
31H置初值(1周期)
DL1DJNZ31HDL1
31H减1,不为0重复执行(2周期)
DJNZ30HDL0
30H减1,不为0转DL0(2周期)
CPLP11
P11取反(1周期)
SJMPDL
转DL(2周期)
方波宽度2151r