您的位置:首页 > 其它

大学学习笔记—单片机第三章

2015-01-18 10:39 218 查看
例题1:题目 A的BCD码为(56)BCD ,B的BCD码为(67)BCD,执行以下指令
ADD A, R2
DA A 分析指令执行后的结果 第三章PPT 76

例题2:题目 编写2个十六进制数的加法程序,假定和数超过双字节。
(21H 20H)+(31H 30H)——>( 42H 41H 40H )
分析:线低字节作不带进位求和,再作带进位高字节求和。
MOV A ,20H
ADD A, 30H
MOV 40H ,A
MOV A,21H
ADDC A ,31H
MOV 41H,A
MOV A,#0
ADDC A,#0
MOV 42H,A
(PPT80 有6位BCD码的加法每一步都加了DA操作,而且DA操作只能对A进行操作)

例题3:题目 双字节无符号数相减(31H 30H)— (41H 40H)—>(31H 30H)
程序如下:
CLR C //清零进位端
MOV R0,#30H
MOV R1,#40H
MOV A, @R0 //取出被减数低字节
SUBB A, @R1
MOV @R0,A //存低字节的差值
INC R0 //指向高字节
INC R1
MOV A,@R0
SUBB A,@R1
MOV @R0,A

例题4:题目 双字节乘法程序 (R0 R1)X(R2)—> R3 R4 R5
MOV A,R1
MOV B,R2
MUL AB
MOV R5 ,A
MOV R4, B
MOV A,R1
MOV B,R2
MUL AB
ADD A,R4
MOV R4 A
MOV A,B
ADDC A,#0 //我不明白为什么会有进位端
MOV R3, A

例题5:题目 设40H单元中存放一个16位二进制的低8位,41H单元中存放这个16位二进制的高八位(假设这个数小于128),请将这个16位二进制数进行左移1位 思路:利用Cy
CLR C
MOV R1,#40H
MOV A,@R1
RLC A
MOV @R1,A //保存低8位字节
INC R1
MOV A,@R1
RLC A //高八位左移,并带进低8位左移产生的进位位
MOV @R1,A

写程序需要注意:写进来用寄存器A进行运行的时候,最后需要再(放)加回去。

比较不相等指令:
若 第一个操作数≠第二个操作数 则跳转
并且 第一个操作数>第二个操作数 Cy=0
第一个操作数<第二个操作数 Cy=1
若 第一个操作数=第二个操作数 Cy=0,并且顺序执行
所以比较大小直接CJNE 之后JC就行

例题6:题目 利用DJNZ指令设计延时循环程序,已知 f=12MHZ
DEALY:MOV R7,#10
DJNZ R7,$
延迟长度:△t=1us x 2 x 10 + 1us = 21us

例题7:题目 统计片内RAM 30H开始的20个带符号数中负数的个数,结果存入50H单元
MOV R2,#20H //循环次数
MOV R3,#0 //负数个数
MOV R0 , #30H //RAM起始地址
LOOP:
MOV A, @R0
JNB ACC.7,L1 //判断最高位
INC R3
L1:
INC R0
DJNZ R2,LOOP
MOV 50H ,R3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: