nbhkdz.com冰点文库

单片机实训典型子程序

时间:2011-01-04


单片机软件系统概况
硬件系统作为实体, 为计算机工作提供了物质基础和条件, 但要使计算 机有效地工作,还必须有软件系统的配合。 计算机的软件系统主要包括系统软件、应用软件和程序设计语言三部 分。单片机系统由于受硬件支持和实际需要所限,其软件系统比较简单。单 片机系统管理只使用简单的操作系统程序, 通常称之为监控程序, 因此监控 程序就成为单片机中最重要的系统软件。 单片机系统只有监控程序和目标码 的应用程序。 单片机系统中的人机界面接口、相互通道接口(通信接口)程序设计属 监控程序设计, 需要结合具体硬件电路进行。 单片机系统中的前向通道接口 (开关量或模拟量数据采集)和后向通道接口(数据输出)程序、数据处理 程序、控制(算法)程序设计都属于应用程序设计,数据处理程序和控制程 序设计中涉及许多通用程序设计。 下面介绍一些通用程序设计:

查表类程序设计
1.查表求 ASC 码 入口条件:R0 低四位存放一个 16 进制数(0~F) 。 出口信息:将查得的 ASCII 码送回 R0。 FINDASC: MOV A,R0 ANL A,#0FH ADD A,#02H MOVC A,@A+PC MOV R0,A RET ASCTAB: DB ‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’ DB ‘8’,’9’,’A’,’B’,’C’,’D’,’E’,’F’ 2.顺序查找 ROM 表格(单字节) 入口条件:待查找内容存放在 30H 中,表格字节数存于 R7 中。 出口信息:OV=0 时,顺序号在 A 中;OV=1 时,未找到。 FINDROM: MOV R2,#0 ;顺序号初始化(指向表首) MOV A,R7 MOV R6,A ME1: MOV A,R2 MOV DPTR,#TAB MOVC A,@A+DPTR CJNE A,30H,ME2 CLR OV MOV A,R2 SJMP JSH ME2: INC R2 DJNZ R6,ME1 SETB OV JSH: RET TAB: DB ….. 3.顺序查找 ROM 表格(双字节) 入口条件:待查找内容在 R4(高字节)、R5(低字节)中,数据总个数在 R7 中。 出口信息:OV=0 时,顺序号在 A 中;OV=1 时,未找到。 FINDDROM: MOV A,R7 MOV R6,A

MOV R2,#0 MOV DPTR,#TAB MN1: CLR A MOVC A,@A+DPTR XRL A,R4 JNZ MN2 MOV A,#1 MOVC A,@A+DPTR XRL A,R5 JNZ MN2 CLR OV MOV A,R2 SJMP JSH MN2: INC DPTR INC DPTR INC R2 DJNZ R6,MN1 SETB OV JSH: RET TAB: DB …

代码转换类程序设计
1.十六进制数到 ASCII 码的转换 入口条件:R2(高四位为 0000,低四位为 0000-1111 的一个十六进制数 0-F)。 出口信息:R2(相应的 ASCII 码)。 HASC: MOV A,R2 ADD A,#0F6H JNC AD30H ADD A,#07H AD30H: ADD A,#30H MOV R2,A RET 2.ASCII 码转换成十六进制数(一) 入口条件:待转换的 ASCII 码(30H~39H 或 41H~46H)在 A 中。

出口信息:转换后的十六进制数(00H~0FH)仍在累加器 A 中。 ASCH1: CLR C SUBB A,#30H JNB ACC.4,ASH1 SUBB A,#7 ASH1: RET 2.ASCII 码转换成十六进制数(二) 入口条件:待转换的 ASCII 码(30H~39H 或 41H~46H)在 R2 中。 出口信息:转换后的十六进制数(00H~0FH)仍在 R2 中。 ASCH2: MOV A,R2 CLR C SUBB A,#30H MOV R2, A SUBB A,#0AH JC RET1 MOV A,R2 SUBB A,#07H MOV R2, A RET1: RET 3.单字节十六进制数转换成双字节 ASCII 码 入口条件:待转换的单字节十六进制数在累加器 A 中。 出口信息:高四位的 ASCII 码在 A 中,低四位的 ASCII 码在 B 中。 HASC: MOV LCALL XCH SWAP ANL ADD DA ADDC DA B,A ;暂存待转换的单字节十六进制数 HAS1 ;转换低四位 A,B ;存放低四位的 ASCII 码 A ;准备转换高四位 A,#0FH ;将累加器的低四位转换成 ASCII 码 A,#90H A A,#40H A

HAS1:

RET 4.ASCII 码到 BCD 码的转换 说明:将 ASCII 码减去 30H,结果为 0-9 的,则为所求 BCD 码;结果 ? 0 或 ≥ 10 结果单元送 0FFH。 入口条件:R2(ASCII 码) 。 出口信息:R3(低四位为所求 BCD 码) 。 ASCIIBCD: MOV A,R2 CLR C SUBB A,#30H MOV R3,A JC NOBCD SUBB A,#0AH JC RET1 NOBCD: MOV R3,#0FFH RET1: RET 5.多字节 BCD 码到 ASCII 码的转换 入口条件:R0(BCD 码高位字节地址指针) ;R2(字节数) 。 出口信息:R1(ASCII 码首地址指针) 。 BCDASC: MOV A,@R0 MOV R3,A ANL A,#0F0H SWAP A ADD A,#30H MOV @R1,A INC R1 MOV A,R3 ANL A,#0FH ADD A,#30H MOV @R1,A INC R1 INC R0 DJNZ R2,BCDASC RET

6.单字节十六进制整数转换成单字节BCD码整数 入口条件:待转换的单字节十六进制整数在累加器 A 中。 出口信息:转换后的BCD码整数(十位和个位)仍在累加器 A 中,百位 在 R3 中。 HBCD: MOV DIV MOV MOV XCH DIV SWAP ORL RET B,#100 ;分离出百位,存放在 R3 中 AB R3,A A,#10 ;余数继续分离十位和个位 A,B AB A A,B ;将十位和个位拼装成BCD码

7.单字节 BCD 码到二进制数的转换 说明:高位 BCD 码乘 10 加低位 BCD 码。 入口条件:R2(BCD 码) 出口信息:R2(8 位无符号二进制整数) BCD2B: MOV A,R2 ANL A,#0F0H SWAP A MOV B,#0AH MUL AB MOV R3,A MOV A,R2 ANL A,#0FH ADD A,R3 MOV R2,A RET

数值(定点数)运算类程序设计
1.双字节 BCD 码加法 BCD 码加法需对运算结果进行二-十进制调整。 入口条件:R5(高) 、R4(低)为被加数;R3(高) 、R2(低)为加数。

出口信息:R6(万) 、R5(千、百) 、R4(十、个)为和值。 DUBCDA: MOV A,R4 ADD A,R2 DA A MOV R4,A MOV A,R5 ADDC A,R3 DA A MOV R5,A CLR A ADDC A,#00H MOV R6,A RET 2.双字节 BCD 码减法 说明:MCS-51 既没有十进制减法指令,也没有十进制减法调整指令,所以 先将减数进行十进制求补, 把减法变成加法, 然后用十进制加法调整指令来 调整运算结果,所得到的是十进制补码形式的差值,此时 C=1 表示差值为 正,C=0 表示差值为负。 入口条件:R5(高) 、R4(低)为被减数;R3(高) 、R2(低)为减数。 出口信息:R5(高) 、R4(低)为补码形式的差值。 CDS: CLR C MOV A,#99H SUBB A,R3 MOV R3,A CLR C MOV A,#9AH SUBB A,R2 ADD A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R5 DA A MOV R5,A RET

3.单字节 BCD 数的乘法子程序 说明:采用“累加法”求解。编程时注意两个问题,一是每次累加后及时用 “DA A”调整;二是处理好积的低 8 位向高 8 位的进位关系。 入口条件:60H(被乘数) ;61H(乘数) 。 出口信息:62H(乘积高 8 位) ;63H(乘积低 8 位) 。 BCDMUL: MOV 63H,#0 MOV 62H,#0 CLR A LP: PUSH ACC MOV A,60H ADD A,63H DA A MOV 63H,A CLR A ADDC A,62H DA A MOV 62H,A POP ACC ADD A,#01H DA A CJNE A,61H,LP RET 4.多字节无符号数加法 说明:从低位开始加起。 入口条件:R0(被加数低位字节地址指针) ;R1(加数低位字节地址指针) ; R3(字节数) 。 出口信息:R0(和值低位字节地址指针) ;R3(和值字节数) 。 MADD: MOV A,R0 MOV R2,A MOV A,R3 MOV R7,A CLR C LP: MOV A,@R0 ADDC A,@R1 MOV @R0,A

INC R0 INC R1 DJNZ R7,LP JNC LAR INC R3 MOV @R0,#01H LAR: MOV A,R2 MOV R0,A RET 5.多字节无符号数减法 说明:从低位开始减,最后 C=0,结果为正;C=1,结果为负(补码) 。 入口条件:R0(被减数低位字节地址指针) ;R1(减数低位字节地址指针) ; R3(字节数) 。 出口信息:R0(差值低位字节地址指针) ;R3(差值字节数) 。 MSUB: CLR 07H ;正负标志位清 0 MOV A,R0 MOV R2,A MOV A,R3 MOV R7,A CLR C LP0: MOV A,@R0 SUBB A,@R1 MOV @R0,A INC R0 INC R1 DJNZ R7,LP0 JNC LP1 SETB 07H ;差值为负,置位标志位 LP1: MOV A,R2 MOV R0,A RET 6.单字节无符号数排序 说明:R0 存放一批数据的首址指针;R2 存放字节数。将一批数据从小到大 的次序排列。 00H 位为发生交换的标志, 只有不发生交换时, 排序才算结束。

ROLE1: MOV A,R0 MOV R1,A MOV A,R2 MOV R5,A CLR 00H DEC R5 MOV A,@R1 LP0: MOV R3,A INC R1 CLR C MOV A,@R1 SUBB A,R3 JNC LP1 SETB 00H MOV A,R3 XCH A,@R1 DEC R1 XCH A,@R1 INC R1 LP1: MOV A,@R1 DJNZ R5,LP0 JB 00H,ROLE1 RET 7.找单字节无符号最大数 说明:R0 存放一批数据的首址指针;R2 存放字节数。从一批数据中找出最 大数并存于首址指针所指向的单元。 MAX: MOV A,R0 MOV R1,A DEC R2 MOV A,@R1 LP0: MOV R3,A INC R1 CLR C SUBB A,@R1 JNC LP1 MOV A,@R1

SJMP LP1: MOV LP2: DJNZ MOV RET

LP2 A,R3 R2,LP0 @R0,A

8.双字节无符号数乘法 入口条件:被乘数放 R5(高) 、R4(低) ;乘数放 R3(高) 、R2(低) 。 出口信息:R1(积的高位字节地址指针) 。 DUMUL: MOV A,R1 MOV R6,A MOV R7,#4 CL: MOV @R1,#00H INC R1 DJNZ R7,CL DEC R1 MM: MOV A,R2 MOV B,R4 MUL AB ACALL ADDM MOV A,R2 MOV B,R5 MUL AB ACALL ADDM INC R1 MOV A,R3 MOV B,R4 MUL AB ACALL ADDM MOV A,R3 MOV B,R5 MUL AB ACALL ADDM MOV A,R6 ; 恢复地址指针 MOV R1,A RET ADDM: ADD A,@R1

MOV @R1,A MOV A,B DEC R1 ADDC A,@R1 MOV @R1,A DEC R1 MOV A,@R1 ADDC A,#00H MOV @R1,A INC R1 RET 9.双字节二进制无符号数除法 说明:对于多字节除法,最常用的算法是“移位相减”法。为便于编程,将 余数和被除数组合在一起循环左移, 每一次移位后, 判断余数是否大于除数, 若大于,余数减去除数,商上 1,否则商上 0。被除数左移空出的低位空间 正好用来存放商。 入口条件:R7(高) 、R6(低) ,被除数;R5(高) 、R4(低) ,除数。 出口信息:R7(高) 、R6(低) ,商;R3(高) 、R2(低) ,余数。 DDIV: MOV A,R4 JNZ DD0 MOV A,R5 JZ ERR DD0: MOV R2,#0 MOV R3,#0 MOV R1,#16 DD1: CLR C MOV A,R6 RLC A MOV R6,A MOV A,R7 RLC A MOV R7,A MOV A,R2 RLC R2 MOV R2,A MOV A,R3

RLC A MOV R3,A CLR C MOV A,R2 ;部分余数减除数,先减低 8 位 SUBB A,R4 MOV R0,A MOV A,R3 SUBB A,R5 JC DD2 INC R6 ;部分余数大于除数,商上 1 MOV R3,A MOV 02H,00H DD2: DJNZ R1,DD1 CLR F0 RET ERR: SETB F0 RET 10.双字节无符号数求平均值 说明:R0:数据区首址,R1:数据总个数;平均值(a1+a2+ … +an)/ n 存于 R3(高) 、R2(低)中。 MEAM1: MOV A,R1 MOV R7,A MOV R2,#00H MOV R3,#00H MOV R4,#00H LP0: MOV A,R2 ADD A,@R0 MOV R2,A MOV A,R3 INC R0 ADDC A,@R0 MOV R3,A MOV A,R4 ADDC A,#00H MOV R4, A INC R0

LOOP:

LP1:

DJNZ R7,LP0 MOV R5,#00H ;除以 n MOV R7,#18H CLR C MOV A,R2 RLC A MOV R2,A MOV A,R3 RLC A MOV R3,A MOV A,R4 RLC A MOV R4,A MOV A,R5 RLC A MOV R5,A CLR C SUBB A,R1 ;部分余数减除数 JC LP1 MOV R5,A INC R2 DJNZ R7,LOOP RET


单片机实训典型子程序.doc

单片机实训典型子程序 - 单片机软件系统概况 硬件系统作为实体, 为计算机工作提

40个经典单片机实验帮你成功.doc

书tyw藏 44440000个经典单片机实验帮你成功个经 典...延时子程序,延时0.2秒 D1: MOV R6,#20 D2: ...(两字节传输)给出 ◆ 测量温度的典型转换时间为1秒...

单片机实验三循环程序与子程序.doc

单片机实验三循环程序与子程序_计算机硬件及网络_IT/计算机_专业资料。实验 3 循环程序与子程序 高源 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ...

十大经典单片机子程序.doc

十大经典单片机子程序 - (6) 标号: MUL2 功能:双字节二进制无符号数平

单片机的40个典型实验.doc

单片机的40个典型实验_理学_高等教育_教育专区。单片机开发 振德电子。网址:http...延时 10ms 子程序 L1: MOV R7,#248 DJNZ R7,$ DJNZ R6,L1 RET END 7....

单片机实验 第四次散转子程序.doc

单片机实验 第四次散转子程序 - 实验九 散转程序设计 一、 实验目的 1.进一

单片机实训.doc

单片机实训_实习总结_总结/汇报_实用文档。单片机实训报告姓 名 :程葡 班级 :...2、学习延时子程序的编写和使用。跑马灯电路如下图。 3、 实验程序 功能:八路...

单片机子程序集.doc

单片机子程序集 - 0 单片机子程序集锦 按 ctrl+home 回到首页 按

单片机课程实验报告-延时子程序.doc

单片机课程实验报告-延时子程序 - 单片机实验报告 实验报告 单片机实验报告 一、实验目的: 学习 P1 口的使用方法,学习延时子程序的编写 二、实验要求: 以 P1 口...

单片机常用子程序.txt

单片机常用子程序 - //*** 常用子程序案例集: //*** 1、延时子程序 void delay(unsigned ...

常用单片机子程序.txt

常用单片机子程序 - 能力所限,如有不对,请多包涵。... 常用单片机子程序_信

单片机实用子程序.txt

单片机实用子程序 - MCS-51单片机实用子程序库(五) MCS-51单片机实用子程序库 (5) 标号: FDIV 功能:浮点数除法 入口条件:被除数在[R0]中,除数...

MCS-51单片机应用开发实用子程序.unkown

自动控制系列 MCS-51 单片机应用开发实用子程序 编著 边春远 屈艳莲北京

MCS-51单片机实用子程序库.doc

MCS-51 单片机实用子程序库 目前已有若干版本的子程序库公开发表,它们各有特色。笔者在 1988 年也编制了两个子程序库(定点 子程序库和浮点子程序库) ,并在相容...

单片机实验二.doc

单片机实验二 - 单片机实验报告二 姓名 时间 地点 学号 评阅 实验题目 I/O 口输入、输出实验 一、实验目的 1. 学习 I/O 口的使用方法。 2. 学习延时子程序...

单片机原理及其接口技术实验报告.doc

单片机原理及其接口技术实验指导书实验 1 Keil C51 ...比较典型的是用待转换数除以权值的方法,即依次除以 ...实验内容 3 流程图 6 位 LED 显示器驱动子程序...

单片机练习实验.doc

延时子程序,延时 0.2 秒 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,...3. 多路开关状态指示 1. 实验任务 如图 4.3.1 所示,AT89S51 单片机的 P1...

单片机实用子程序.txt

单片机实用子程序 - 内容 目前已有若干版本的子程序库公开发表,它们各有特色。本

单片机实训_图文.ppt

单片机综合实训篮球比赛计分器设计 2016年12月...? ? 一. 500ms延时子程序 (重要) 程序: void ...(或汇编)、仿真调试等功能于 一体,具有当代典型嵌入...

MCS-51单片机实用子程序库.doc

MCS-51 单片机实用子程序库 目前已有若干版本的子程序库公开发表,它们各有特色。笔者在 1988 年也编制 了两个 子程序库(定点子程序库和浮点子程序库),并在相容...