大学学习笔记—单片机第三章
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
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
相关文章推荐
- 大学学习笔记—单片机第一章
- 大学学习笔记—单片机第二章
- 大学学习笔记—单片机第五章
- 《COM原理及应用》学习笔记之第三章
- Spring学习笔记:第三章 IoC中的国际化
- c++学习笔记-------《c++自学通》第三章 变量与常量
- 学习笔记 从零开始学单片机(2) 全八段数码管显示
- 学习笔记 从零开始学单片机(8) 蜂鸣器唱歌
- 学习笔记 从零开始学单片机(0) 系统结构
- 学习笔记 从零开始学单片机(6) 键盘接口
- 学习笔记 从零开始学单片机(9) 串口通信
- AVR 单片机学习笔记
- Win32学习笔记 第三章 HelloWin 选择自 villager 的 Blog
- Asp学习笔记第三章
- Spring学习笔记:第三章 IoC中的国际化
- Pro visual c++/cli and .net 2.0 platform2 学习笔记(8第三章 面向对象的C++/CLI===1)
- 单片机学习笔记(一)
- javascript高级程序设计学习笔记--第三章对象基础
- Win32学习笔记 第三章 HelloWin
- 学习笔记 从零开始学单片机(5) A/D转化