单片机原理与应用-第2版-源代码1
更新时间:2023-09-20 18:45:01 阅读量: 医药卫生 文档下载
例4-2 有两个4位压缩BCD码,分别存储在30H、31H和40H、41H单元,要求把两个BCD码数相加,结果送至51H、52H中(高位在前,低位在后)。
程序如下:
ORG 0000H CLR C MOV A,31H ADD A,41H DA A MOV 52H,A MOV A,30H ADDC A,40H DA A MOV 51H,A END
;CY清0 ;(31H)→A
;(31H)+(41H)→A ;对A进行十进制调整 ; (A)→52H ;(30H)→A
;(30H)+(40H)+CY→A ;对(A)进行十进制调整 ;(A)→51H
例4-3 求双字节有符号数的补码。 参考程序如下:
CMPT2: MOV
JNB MOV MOV CPL MOV MOV CPL ADD MOV CLR ADDC MOV MOV MOV
EXT: RET
A,R7
ACC.7,EXT C,ACC.7 F0,C A R7,A A,R6 A A,#1 R6,A A A,R7 C,F0 ACC.7,C R7,A
;取高字节数
;(A)>0,不需要转换 ;符号位暂存→F0 ;(A)取反
;取低字节数
;加1
;存储数的补码(低字节)
;取符号位送入C ;恢复符号位 ;存储数的补码(高字节)
例4-4 求分段函数的值。分段函数定义如下:
FENFUC: MOV
CJNE AJMP NZEAR: JB ADD AJMP POSI: MOV NEGT: MOV RET
A,30H
A,#00H,NZEAR NEGT ACC.7,POSI A,#1 NEGT
A,#81H 31H,A
;取数据X至A
;判断A不等于0跳转 ;A等于0
;判断符号位,A<1跳转 ;A>0,Y=X+1 ;X<0时,Y=-1 ;保存结果
例4-5 根据寄存器R2的内容,转向各个处理程序PRGx(x=0~n)。
(R2)=0,转PRG0 (R2)=1,转PRG1
(R2)=n,转PRGn
程序如下:
JMP8: MOV DPTR,#TAB
;转移表首地址送DPTR
MOV A,R2 ADD A,R2 MOV R3,A CLR A ADDC A,DPH MOV DPH,A MOV A,R3
JMP @A+DPTR TAB: AJMP PRG0 AJMP PRG1 AJMP PRGn
;分支转移参数送A ;分支转移参数乘2 ;结果的低字节存入R3
;结果的高字节数据加到DPH中
;分支转移选择
;多分支转移表
例4-6 根据31H(高字节)、30H(低字节)的内容(分支转移参数)转向不同的处理程序。程序如下:
JMP4: MOV DPTR,#TAB1 MOV A,30H MOV B,#3 MUL AB MOV R3,A MOV A,B ADD A,DPH MOV DPH,A MOV A,31H MOV B,#3 MUL AB
ADD A,DPH MOV DPH,A MOV A,R3 JMP @A+DPTR TAB1: LJMP PRG0 LJMP PRG1 LJMP PRGn
;分支转移表首地址送DPTR ;分支转移参数低字节送A ;参数低字节乘3 ;乘积低字节送R3 ;乘积高字节送A ;DPH+高字节内容 ;参数高字节送A并乘3
;DPH+乘积低字节内容 ;和送DPH ;参数低字节送A ;跳相应的分支
;分支转移表
例4-7 设有一串字符,依次存储在内部RAM从30H单元开始的连续单元中,该字符串以0FFH为结束标志,要求编程测试字符串长度。
参考程序如下:
MOV R0,#0FFH ;计数器初值送R0 MOV R1,#2FH ;字符串指针初值送R1 NEXT: INC R0 INC R1 CJNE @R1,#0FFH,NEXT ;比较不相等循环 RET
例4-8 设8051使用12 MHz晶振,试设计延迟100 ms的延时程序。 可用双重循环方法写出如下的延时程序:
DELAY:MOV R2,#200 ;延时一个机器周期T = 1 ?s LOOP1:MOV B,#250 ;每循环延时1 ?s LOOP2:DJNZ B,LOOP2 ;250×2×1us =500 ?s
DJNZ R2,LOOP1 ;500×200×1 ?s = 100 ms RET
可修改程序:
DELAY: MOV R2,#200 ;延时一个机器周期T = 1 ?s LOOPS: MOV B,#248 ;每循环延时1 ?s NOP ;每循环延时1 ?s DJNZ B,$ ;248×2×1us =496 ?s DJNZ R2,LOOPS ;(496+2+2)×200×1 ?s RET ;[(496+2+2)×200+1+2]×1 ?s =100.003 ms
例4-9 编写一个通用子程序,实现N个单字节无符号数之和(N <100H,存储在2FH单元)。调用该子程序完成将片内30H~5FH中存储的单字节无符号数求和,结果存入60H、61H单元中(高位在前)。
子程序如下:
ORG 0100H SUB2: PUSH PSW ;保护现场 MOV @R1,#0 ;目的单元清0 INC R1 MOV @R1,#0 LOOP: MOV A,@R0 ;取数 ADD A,@R1 ;求和 MOV @R1,A ;存和的低字节数 DEC R1 ;修改指针,指向和的高位地址 CLR A ADDC A,@R1 ;取进位位 MOV @R1,A ;存和的高字节数 INC R1 ;修改指针,指向和的低位地址 INC R0 ;修改指针,指向下一个单元 DJNZ R2,LOOP POP PSW ;恢复现场 RET
主程序如下:
ORG 0000
MAIN: MOV R0,#2FH ;设置R0为入口指针,指向2FH单元 MOV R1,#60H ;设置R1为出口指针,指向60H单元 MOV A,@R0 MOV R2,A ;取传递字节数→R2 INC R0 ACALL SUB2 END
例4-10 单字节有符号数的加减法子程序。 程序设计如下:
START: ADR3: SUB1: ADD1:
ORG
JNB ACALL SJMP ACALL AJMP MOV CPL MOV MOV ACALL MOV
0000
F0,ADR3 SUB1 EXQ ADD1 EXQ A,R3 ACC.7 R3,A A,R3 CMPT R3,A
;判断标志F0=0跳转到ADR3做加法
;否则F0=1,做减法,调用减法子程序
;调用加法子程序
;程序结束,原地踏步
;符号位取反,即相当于把减号变为加号
;调用CMPT单字节求补码子程序
码
MOV ACALL ADD JB ACALL MOV RET END
A,R2 CMPT A,R3 OV,OVER CMPT R7,A
;调用CMPT单字节求补码子程序
;判断运算是否产生溢出
;调用CMPT单字节求补码子程序,将结果转换成原
;保存结果值
OVER: EXQ:
例4-11 4字节无符号数加法程序设计。 程序如下:
MADD: MOV R0,#DATA1 MOV R1,#DATA2 MOV R2,#04H CLR C LOOP: MOV A,@R0 ADDC A,@R1 ;带进位加法 MOV @R0,A INC R0 INC R1 DJNZ R2,LOOP JC OTHER ;最高字节有进位,转其他程序处理 RET
例4-12 4位BCD码的减法程序设计。 程序设计如下:
SUBCD: EXQ:
ORG MOV MOV CLR ACALL MOV ACALL MOV SJMP MOV SUBB ADD DA CPL INC INC RET END
0000H R0,#30H R1,#40H C SUBCD 50H,A SUBCD 51H,A EXQ A,#9AH A,@R1 A,@R0 A C R0 R1
;R0指向被减数首地址(低位) ;R1指向减数首地址(低位) ;进位符号位清0
;调用BCD码减法子程序 ;调用BCD码减法子程序
;BCD码减法子程序
;十进制调整 ;进位符号位取反
例4-13 编写程序实现“1+2+3+…+99”加法运算,结果BCD码的千、百位存储在31H单元,十、个位存储在30H单元。
程序如下:
ADDM:
MOV 30H,#00 MOV 31H,#00 MOV R2,#99
;存储单元清0 ;控制循环次数
LOOP: MOV MOV ADD DA MOV CLR ADDC DA MOV MOV ADD DA MOV DJNZ RET
R3,#01 A,30H A,R3 A 30H,A A
A,31H A 31H,A A,R3 A,#01 A R3,A R2,LOOP
;加数初值
;取累加和的低字节 ;十进制调整
;存储累加和的低字节 ;取累加和的高字节 ;十进制调整
;存储累加和的高字节 ;调整加数自加1 ;十进制调整 ;存储加数
例4-14 设片内RAM有两个数据段分别从地址DATA1和DATA2开始存储了N个数据,编写程序实现两个数据段中相同数据的个数统计,结果放入DATA中。
程序如下:
DATA
DATA1 DATA2 N LJEXP: LOOP1: LOOP2:
EQU 2FH EQU 30H EQU 50H EQU 10H MOV R0,#DATA1 MOV R1,#DATA2 MOV R2,#00H MOV R3,#N MOV A,@R0 XRL A,@R1 INC R0 INC R1 JNZ LOOP2 INC R2 DJNZ R3 LOOP1 MOV DATA,R2 RET
;统计结果存储单元 ;DATA1数据段 ;DATA2数据段 ;数据长度
;比较数据 ;调整指针 ;不相同调整
;相同,计数器加1 ;保存统计个数
例4-15 试编程实现以下逻辑运算:Q?X?Y?Y?Z,其中,Q为P1.0,X为P1.1,Y为P1.2,Z为P1.3。程序如下:
START: Q BIT P1.0 X BIT P1.1 Y BIT P1.2 Z BIT P1.3 MOV C,X ANL C,Y MOV F0,C MOV C,Y ANL C,/Z ORL C,F0 MOV Q,C END ;X·Y ;保存X·Y的值 ;Y·Z ;X·Y+Y·Z ;保存结果
例4-16 单字节二进制码转换为BCD码。
正在阅读:
单片机原理与应用-第2版-源代码109-20
肝细胞肝癌血清标志物的研究进展06-04
高中地理 第四章 单元质量评估精析精练(2) 中图版必修203-11
世界古代文明课后题答案04-12
2017年郑州大学商学院801经济学基础(政治经济学、西方经济学)之西方经济学(微观部分)考研仿真模拟题04-30
电力公司工会2012年工作总结05-10
数一数(北师大四年级上第一单元)09-26
五年级上册环境教育教案01-13
机械专业英语(章跃版)课后英汉翻译05-20
欧元在多元化国际货币体系中的地位06-12
- 水仓管理办法
- 输出(入)国(地区)法律法规状况报告
- 民法精选案例
- 2018-2019年初中语文安徽中考模拟测试试卷含答案考点及解析
- 奥曲肽联合凝血酶治疗肝硬化合并上消化道出血的临床效果分析
- 2016年12月保险精算导论
- 国际金融习题3
- 2018届高三下学期第一次模拟考试文综-地理试题 含答案
- 机械原理实验指导书 - 图文
- 历史学统考统考 - 中国古代史
- 乡党委书记希望省委党校解决的思想理论问题
- 《知识产权法》讲义
- 公民道德建设月知识竞赛主持词
- 资兴市二完小学生心理危机干预应急预案
- 沪教版初三社会会考复习提纲上册 - 图文
- 泛微OA工作平台使用手册
- 中国改装件行业市场前景分析预测年度报告(目录) - 图文
- 我国中小企业信用担保模式存在的问题及对策
- 空间立体几何教学设计与反思
- 北师大版高中英语选修八模块8综合测试题