计算机原理与应用,单片机题整理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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