计算机原理与应用,单片机题整理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于溢出的判断:

在确定相加后溢出标志OV的值时,计算机总是把操作数当作带符号数来对待。在作加法运算时,一个正数和一个负数相加是不可能产生溢出的,只有两个同符号数相加才有可能溢出,并可按以下方法判断是否产生溢出:

两个正数相加(符号位都为0),若和为负数(符号位为1),则一定溢出。两个负数相加(符号位都为1),若和为正数(符号位为0),则一定溢出。

产生溢出时,使溢出标志OV=1,否则OV=0。在上例中,两个负数相加后,和仍为负数,故没有溢出,OV=0。又如,若A=01001001,执行指令ADD A,#6BH的结果为

0 1 0 0 1 0 0 1

+ 0 1 1 0 1 0 1 1

1 0 1 1 0 1 0 0

由于两个正数相加为负数,表示出现了溢出,故OV=1,同时进位标志Cy=0。

内部RAM数据传送用“MOV”指令,都可以通过直接给出的字节地址来寻找。

例如:MOV 30H,#9FH ;(30H)←9FH

如果要寻找内部RAM中的可位寻址区的各个位(bit),必须在位操作指令中用位地址来寻找。

例如:SETB 1FH ;(1FH)←1

例:判断下列指令各操作数的寻址方式

(1)MOV A,#65H 寄存器寻址立即数寻址

(2)MOV @R1,65H 寄存器间接寻址直接寻址

(3)MOV 30H,R2 直接寻址寄存器寻址

(4)MOV C,20H 位寻址位寻址

(5)DJNZ R2,LOOP 寄存器寻址相对寻址

(6)MOV 60H,@R1 直接寻址寄存器间接寻址

(7)MOVC A,@A+PC 寄存器寻址变址寻址

例;如果(A)=78H,(R5)=47H,(70H)=F2H,则:

MOV R5,A ;(A)→R5,(R5)=78H

MOV R5,70H ;(70H)→R5,(R5)=F2H

MOV R5,#0A3H ;A3H→R5,(R5)=A3H

例:执行指令:

MOV DPTR,#2000H

MOV A,#10H

MOVX @DPTR,A

上面的指令执行后,将立即数10H送到地址为2000H的外部数据存储器或I/O口中。

例:执行指令:

MOV R0,#6FH

MOV P2,#51H

MOVX A,@R0

上面的指令执行后,将地址为516FH的外部数据存储器单元或I/O口中的数据读到累加器A 中。这时P2口提供高8位地址。

例执行以下指令:

(A)=10H,(R1)=20H

XCH A,R1

执行结果为(A)=20H,(R1)=10H

例若(A)=12H,(R1)=30H,(30H)=34H,执行以下指令:

XCHD A,@R1

执行结果为(A)=14H,(30H)=32H

例若(A)=12H,执行以下指令:

SWAP A

执行结果为(A)=21H

例若(A)=11010011,(R1)=11101000,(Cy)=1,执行指令“ADDC A,R1”后,(A)=10111100,Cy=1,AC=0,OV=0,P=1

例若A=4EH,B=5DH,执行指令:

MUL AB

结果为A=56H,B=1CH,OV=1,即积为BA=1C56H。

例设P1中内容为0AAH,A中内容为15H,执行下列程序:

ANL P1,#0F0H ;(P1)=A0H

ORL P1,#0FH ;(P1)=AFH

XRL P1,A ;(P1)=BAH

例把累加器A中的低4位送到外部RAM的2000H单元中,编程如下:

MOV DPTR,#2000H ;#2000H→(DPTR)

ANL A,#0FH ;(A)∧#0FH→(A)

MOVX @DPTR,A ;(A)→(DPTR)

例将位地址2AH的内容传送到位地址2BH。

MOV F0,C ;暂存Cy内容

MOV C,2AH ;(2AH)→Cy

MOV 2BH,C ;(Cy)→2BH

MOV C,F0 ;恢复Cy内容

PSEN 132456789101112131415161718192021

22232425262728293031323334353637383940 P1.0P1.1P1.2P1.3P1.4P1.5P1.6RST/VPD P3.0P3.1P3.2P3.3P3.4P3.5P3.6P1.7P3.7XTAL 2XTAL 1

Vss

P2.0

P2.1P2.2P2.3P2.4P2.5P2.6P2.7P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0Vcc

RXD TXD T0T1INT0INT1WR RD EA/VPP ALE/PROG 805187518031

P0.0~P0.7(39~32脚):在不接片外存储器与不扩展I/O 口时,可作为准双向输入/输出口。在接有片外存储器或扩展I/O 口时,P0口分时复用为低8位地址总线和双向数据总线。

例将20H 单元的组合BCD 码拆开并变成ASCII 码,存入21H 、22H 单元。注意0~9的ASCII 码为30H~39H 。若(20H)=45H, 则(21H)=34H, (22H)=35H 。 ORG 0000H ;表示汇编开始地址 0000 020800 LJMP 8000H ;跳转到8000H 单元 ORG 8000H 8000 E520 MOV A,20H 8002 540F ANL A,#0FH ;屏蔽高四位,取出低四位 8004 2430 ADD A,#30H ;变成ASCII 码 8006 F522 M OV 22H,A ;ASCII 码存入22H 单元 8008 E520 MOV A,20H 800A 54F0 ANL A,#0F0H ;取出高四位 800C

C4 SWAP A

800D 2430 ADD A,#30H ;变成ASCII 码

800F F 521 MOV 21H,A ;ASCII 码存入21H 单元 8011 80FE HERE:SJMP HERE ;用于程序调试 END ;汇编程序结束 【例5-18】用嵌套结构构造一个延时程序。 void delay(unsigned int x) {

unsigned char j; while(x--)

{for (j=0;j<125;j++);} }

【例5-22】编写一个用于统计外中断0的中断次数的中断服务程序 extern int x;

void int0() interrupt 0 using 1

相关文档
最新文档