双字节无符号数加法
单片机指令部分例题
• /(A)+(DPTR)=2000H+09H=2009H,对应 的查表内容为51H(81)送入累加器A中。
例2:若在外部ROM/EPROM中,从2000H单元开 始依次存放0-9的平方值,以PC作为基址寄存器查 表。设:MOVC指令所在地址(PC)=1FF0H。
• 偏移量=2000H-(1FF0H+1)=0FH • MOV A,#09H ;(A)←09H • ADD A,#0FH ;A←9H+FH=18H(24),作
表首地址
• 解:偏移量=2000H-(1FF0H+1)=0FH • MOV A , # 09H • ADD A , # 0FH • MOVC A , @ A + PC
• 执行结果(PC)=1FF1H
•
(A) = 51H
4、若 (R0)=30H, (30H) = 4AH , (A) =28H
• XCH A , @R0 ; • XCHD A , @R0 ; • SWAP A ; A=82H
;(R1) ← (A)
• MOV B , @R1 ; (B) ← ((R1))
• MOV @R1 , P1 ;((R1)) ← (P1)
• MOV P2 , P1
;(P2) ← (P1)
• MOV 10H , #20H ; (10H) ← 20H
• 结果:(R0)=30H , (R0)=(A)=40 H , (B)=10H , (40H)=(P1)=(P2)=CAH , (10H)=20H
• XCH A,#R0 • ;结果:(A)=4AH,(30H)=28H
• XCHD A,#R0 • ;结果:(A)=2AH,(30H)=48H
• XWAP A • ;结果:(A)=82H
双字节无符号数加法
双字节无符号数加法————————————————————————————————作者:————————————————————————————————日期:1 双字节无符号数加法例1: 双字节无符号数加法(R0 R1)+(R2 R3) → (R4 R5), R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节。
已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h)假设其和不超过16位。
请编程。
提示:由于不存在16位数加法指令, 所以只能先加低8位, 后加高8位, 而在加高8位时要连低8位相加时产生的进位一起相加。
查看psw中的标志CY=?, OV=?, AC=?, P=?。
熟悉软件环境,要求能知道在哪里看数据的值,在哪里能看一些寄存器的内容,在哪里看程序代码。
如何在伟福软件环境下建立项目,运行文件。
要求按照标准模式来写程序,ORG 0000HLJMP STARTORG 0050HSTART:MOV R1,#79HMOV R3,#0A4HMOV A,R1ADD A,R3MOV R5,ACLR AMOV R0,#93HMOV R2,#25HMOV A,R0ADDC A,R2MOV R4,A SS:JMP SSEND2双字节无符号数减法例2: 双字节无符号数相减(R0 R1)-(R2 R3) → (R4 R5)。
R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节,已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h);请编程。
同学自己可以设置被减数与减数数值提示:先减低8位, 后减高8位和低位减借位。
由于低位开始减时没有借位, 所以要先清零。
ORG 0000HLJMP STARTORG 0050HSTART:MOV R0,#93HMOV R1,#79HMOV R2,#25HMOV R3,#0A4HMOV A,R1SUBB A,R3MOV R5,ACLR AMOV A,R0SUBB A,R2MOV R4,ASS:JMP SSEND3双字节数乘以单字节数例3: 利用单字节乘法指令,进行双字节数乘以单字节数运算。
单片机原理及应用总结
单片机原理及应用第一章绪论1.什么叫单片机?其主要特点有哪些?在一片集成电路芯片上集成微处理器、存储器、I/O接口电路,从而构成了单芯片微型计算机,即单片机。
特点:控制性能和可靠性高、体积小、价格低、易于产品化、具有良好的性价比。
第二章80C51的结构和原理1.80C51的基本结构a.CPU系统●8位CPU,含布尔处理器;●时钟电路;●总线控制逻辑。
b.存储器系统●4K字节的程序存储器(ROM/EPROM/FLASH,可外扩至64KB);●128字节的数据存储器(RAM,可外扩至64KB);●特殊功能寄存器SFR。
c.I/O口和其他功能单元●4个并行I/O口;●2个16位定时/计数器;●1个全双工异步串行口;●中断系统(5个中断源,2个优先级)2.80C51的应用模式a.总线型单片机应用模式◆总线型应用的“三总线”模式;◆非总线型应用的“多I/O”模式3.80C51单片机的封装和引脚a.总线型DIP40引脚封装●RST/V PO:复位信号输入引脚/备用电源输入引脚;●ALE/PROG:地址锁存允许信号输出引脚/编程脉冲输入引脚;●EA/V PP:内外存储器选择引脚/片内EPROM编程电压输入引脚;●PSEN:外部程序存储器选通信号输出引脚b.非总线型DIP20封装的引脚●RST:复位信号输入引脚4.80C51的片内存储器增强型单片机片内数据存储器为256字节,地址范围是00H~FFH。
低128字节的配情况与基本型单片机相同。
高128字节一般为RAM,仅能采用寄存器间接寻址方式询问。
注意:与该地址范围重叠的特殊功能寄存器SFR 空间采用直接寻址方式询问。
5.80C51的时钟信号晶振周期为最小的时序单位。
一个时钟周期包含2个晶振周期。
晶振信号12分频后形成机器周期。
即一个机器周期包含12个晶振周期或6个时钟周期。
6.80C51单片机的复位定义:复位是使单片机或系统中的其他部件处于某种确定的初始状态。
51单片机经典流水灯程序
单片机流水灯汇编程序设计开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#01111111B ;最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#10111111B ;最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110BLCALL DELAYMOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯org 00h ;程序上电从00h开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成11111110loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。
有符号数的加减法和无符号数的加减法,和,系统是如何识别有符号数和无符号数的
有符号数的加减法和⽆符号数的加减法,和,系统是如何识别有符号数和⽆符号数的⼀.有符号数的加减法1、符号数与⽆符号数的⼈为规定性:⼀个数,是有符号数还是⽆符号数都是⼈为规定的。
真值:机器数是将符号"数字化"的数,是数字在计算机中的⼆进制表⽰形式。
只有符号数时才有。
机器数对应的数值称为机器数的真值。
这个机器数可能是原码,反码或补码。
也就是说不同含义的机器数 对应不同的真值。
原码与真值对应,但不能参加运算,只能由真值的补码形式参加运算。
(1)真值=>原码 (简单)去掉+ - 号前⾯加0 1。
原码=>真值 去掉0 1 前⾯加+ - 号。
eg: 真值 + 1001 1100 - 1010 0010原码 0 1001 1100 1 1010 0010(2)真值=>补码正真数的补码:去掉+号前⾯加0。
负真数的补码:去掉 - 号前⾯加1,从右到左找到第⼀个1,左边全部取反。
补码=>真值符号位0的补码的真值:去掉0前⾯加+号。
符号位1的补码的真值:去掉1前⾯加-号,从右到左找到第⼀个1,左边全部取反。
eg:真值 + 1001 1100 - 1010 0010补码 0 1001 1100 1 0101 1110例如求 1000 0100+0000 1110解答:默认数据从存储器中读取参与运算器运算。
问运算的结果是什么,没有说求什么码的事,那就是问结果的真值。
分符号数和⽆符号数两种情况。
若规定为⽆符号数,则(132)10+(14)10=(146)10。
//或写法(146)D // D (decimal)表⽰这个数是⼗进制若规定为符号数:默认存储的数都是补码。
[x]补 =b n ... b1b0。
(x是原码)1000 0100和0000 1110都是补码。
(补码加法运算 = 补码的对应真值的加法运算)补码1000 0010的真值为 - 111 1110 = -124 // 1000 0100是真值 -124的补码。
c语言 浮点数和无符号数加法
浮点数和无符号数是C语言中常见的数据类型,它们在加法运算中有一些特殊的规则和注意事项。
本文将从浮点数和无符号数的特性入手,分别介绍它们在加法运算中的处理方式,并举例说明其中的一些细节和注意事项。
一、浮点数的加法运算1.1 浮点数的表示浮点数在C语言中通常以float和double类型表示。
其中,float类型通常占用4个字节,double类型则通常占用8个字节。
浮点数的表示通常遵循IEEE 754标准,采用科学计数法表示,即一个实数可以表示成"±m×2^e"的形式,其中m为尾数,e为指数。
1.2 浮点数的加法在C语言中,浮点数的加法运算遵循IEEE 754标准的规定。
当两个浮点数相加时,如果它们的指数部分相差较大,需要将指数较小的浮点数进行规范化处理,使得它们的指数相等,然后再进行尾数的加法运算。
在加法运算中,还需要对结果进行规范化处理,保证其符号位、指数部分和尾数部分符合IEEE 754的规定。
1.3 浮点数的精度损失在浮点数的加法运算中,由于尾数的精度限制,可能会出现精度损失的情况。
这是因为两个尾数相差较大时,较小的尾数可能会损失精度,导致结果的精度不准确。
在实际编程中,需要特别注意浮点数的精度损失问题,避免由于精度损失造成程序运行结果的不准确。
二、无符号数的加法运算2.1 无符号数的表示无符号数在C语言中通常以unsigned int或者unsigned long等类型表示。
无符号数的表示范围为0到2^n-1,其中n为该无符号数占用的位数。
无符号数的加法运算与有符号数不同,它们的加法运算采用模运算的方式进行。
2.2 无符号数的加法在C语言中,无符号数的加法运算采用模运算的方式进行。
具体来说,如果两个无符号数相加的结果超出了无符号数的表示范围,那么在进行加法运算后会将结果模上2^n,其中n为无符号数占用的位数。
这样可以确保无符号数的加法结果始终处于其表示范围内。
2023年单片机基础南华大学期末考试题库及答案
课堂习题及作业:填空及简答1.十进制29的二进制表达为。
2.单片微型机重要有 cpu 、存储器、 I/O口、中断控制器、定期器/计数器等部分组成。
3.计算机中最常用的字符信息编码是 ASCII 。
4.二进制数11011.0011转化为十进制数是。
5.何谓单片机?单片机与一般微型计算机相比,具有哪些特点?单片机是在一块集成电路上把CPU、存储器、定期器/计数器及多种形式的I/O接口集成在一起而构成的微型计算机。
它与通用微型计算机相比,具有如下特点:(1)单片机的程序存储器和数据存储器是分工的,前者为ROM,后者为RAM;(2)采用面向控制的指令系统,控制功能强;(3)多样化的I/O接口,多功能的I/O引脚;(4)产品系列齐全,功能扩展性强;(5)功能是通用的,像一般微解决机那样可广泛地应用在各个方面。
6.单片机重要应用在哪些领域?7.单片机经历了哪几个发展阶段?8.什么是二进制?为什么在数字系统、计算机系统中采用二进制?9.将下列各数按权展开为多项式:(1) 110110B (2) 5678.32D (3)1FB7H10.把下列十进制数转化为二进制、十六进制:(1) 135 (2) 548.75 (3)254.2511.什么叫BCD码和ASCII码?12 .MCS-51的堆栈是临时在_ 片内数据存储器内开辟的区域。
13 .MCS-51片内 20H-2FH 范围内的数据存储器,既可以字节寻址又可以位寻址。
14 .PSW=18H时,当前工作寄存器是18H转成二进制是0001 1000而PSW是一个8位二进制寄存器,它的每位都有相应的意义,PSW各位标志及作用如下:PSW.4是RS1,PSW.3,是RS0,作用:工作寄存器组的选择位,由RS1、RS0是联合使用。
15. 80C51含 8k 掩膜ROM。
16 .控制串行口工作方式的寄存器是TCON(Timer Control Register)定期器/计数器控制寄存器PCON电源控制及波特率选择寄存器SCON-串行口控制寄存器TMOD定期器工作方式寄存器17 .P1口的每一位能驱动 4 个TTL低电平负载。
加法程序的设计
ADD A,R3 MOV R6,A MOV A,R0 ADDC A,R2 MOV R5,A MOV A,#0 ADDC A,#0
;CLR
A
结果存于R4
结束
MOV R4,A SJMP $
四、任 务 实 施
源程序如下:
MOV ADD MOV MOV ADDC A,R1 A,R3 R6,A A,R0 A,R2 ;将低字节的一个加数R1送入A中 ;两低字节数R1和R3相加 ;低字节数相加的结果存入R6 ;将高字节的一个加数R0送入A中 ;两个高字节数R0和R2及低字节相加的 进位位相 加 ;两高字节数相加的结果存入R5 ;将A清零 ;两个零带进位相加 ;高字节相加产生的进位存入R4 ;程序循环等待
加法程序的设计
复
习
提 问:
1、不带进位位的加法指令有哪几条?说明各指令 功能。 操作码 目的操作数 源操作数
#data ADD A , direct Rn @Ri 指令功能:将源操作数与目的操作数相加结果送到 目的操作数 中。
复 习 提 问:
2、带进位位的加法指令有哪几条?说明各指令功能。 操作码 目的操作数 源操作数 #data direct Rn @Ri
二、任 务 分 析
操作码是用ADD 还是ADDC? 带进位加还是 不带进位位加?
R0 R4 R2 R5
R1 R3 R6
低字节 相加
结果 送R6
高字节 相加
结果 送R5
ห้องสมุดไป่ตู้
进位位 送R4
二、任 务 分 析
如何将进位 位送到R4中?
三、加法运算程序流程图
开始
MOV A,R1
R1和R3不带进位位相加 结果存于R6 R0和R2带进位位相加 结果存于R5 0和0带进位位相加
字节、字、双字,整数,双整数和浮点数详解
字节、字、双字,整数,双整数和浮点数详解1.引言1.1 概述在计算机科学和编程领域,字节、字、双字、整数、双整数和浮点数是非常重要的概念和数据类型。
它们在存储和处理数据时起着关键作用。
本文将对这些概念和数据类型进行详细解释和讨论。
首先,字节是计算机存储和处理数据的基本单位之一。
一个字节由8位二进制数字组成,可以表示256种不同的值。
字节一般用于存储和表示字符,例如ASCII码中的每个字符都用一个字节表示。
接下来,字是字节的扩展,通常由两个字节组成。
字是更大的数据单元,可以表示更多的不同值。
字通常用于存储和表示较大的字符集,如Unicode编码中的字符。
双字是对字的一种拓展,由四个字节组成。
双字可以表示更大范围的数据,通常用于存储和处理较大的整数和浮点数。
然后,整数是一种完整的数值数据类型,用于表示不带小数部分的数值。
整数可以是负数、零或正数,其取值范围取决于所使用的字节数。
整数常用于计算、逻辑运算和数据存储。
双整数是对整数的一种拓展,由两个整数组成。
双整数可以表示更大范围的整数值,通常用于需要更精确的计算和表示的情况。
最后,浮点数是一种带有小数部分的数值数据类型。
浮点数通常由双字表示,其中一部分用于存储小数部分,另一部分用于存储指数部分。
浮点数常用于科学计算、图形处理和物理模拟等领域。
本文将详细探讨字节、字、双字、整数、双整数和浮点数的定义、特点、应用、表示方式、运算规则和数据范围等方面内容。
通过深入理解这些概念和数据类型,我们可以更好地理解计算机的内部处理和存储方式,并在编程中更加灵活和高效地处理数据。
1.2文章结构文章结构部分的内容可以写成以下方式:1.2 文章结构本文将详细介绍字节、字、双字、整数、双整数和浮点数的概念以及其应用。
文章结构如下:2.正文2.1 字节2.1.1 定义本节将介绍字节的定义,以及字节在计算机中的作用和意义。
2.1.2 应用本节将探讨字节在不同应用场景下的具体应用,例如在存储和传输数据中的作用。
指令系统及汇编语言程序设计
第3章指令系统及汇编语言程序设计一、简答题1、80C51系列单片机的指令系统有何特点?2、80C51单片机有哪几种寻址方式?各寻址方式所对应的寄存器或存储器空间如何?3、访问特殊功能寄存器SFR可以采用哪些寻址方式?4、访问内部RAM单元可以采用哪些寻址方式?5、访问外部RAM单元可以采用哪些寻址方式?6、访问外部程序存储器可以采用哪些寻址方式?7、为什么说布尔处理功能是80C51单片机的重要特点?8、对于80C52单片机内部RAM还存在高128字节,应采用何种方式访问?9、试根据指令编码表写出下列指令的机器码。
(1)MOV A,#88H(2)MOV R3,50H(3)MOV P1.1,#55H(4)ADD A,@R1(5)SETB 12H10、完成某种操作可以采用几条指令构成的指令序列实现,试写出完成以下每种操作的指令序列。
(1)将R0的内容传送到R1;(2)内部RAM单元60H的内容传送到寄存器R2;(3)外部RAM单元1000H的内容传送到内部RAM单元60H;(4)外部RAM单元1000H的内容传送到寄存器R2;(5)外部RAM单元1000H的内容传送到外部RAM单元2000H。
11、11、若(R1)=30H,(A)=40H,(30H)=60H,(40H)=08H。
试分析执行下列程序段后上述各单元内容的变化。
MOV A,@R1MOV @R1,40HMOV 40H,AMOV R1,#7FH12、若(A)=E8H,(R0)=40H,(R1)=20H,(R4)=3AH,(40H)=2CH,(20)=0FH,试写出下列各指令独立执行后有关寄存器和存储单元的内容?若该指令影响标志位,试指出CY、AC、和OV的值。
(1)MOV A,@R0(2)ANL 40H,#0FH(3)ADD A,R4(4)SWAP A(5)DEC @R1(6)XCHD A,@R113、若(50H)=40H,试写出执行以下程序段后累加器A、寄存器R0及内部RAM的40H、41H、42H单元中的内容各为多少?MOV A,50HMOV R0,AMOV A,#00HMOV @R0,AMOV A,3BHMOV 41H,AMOV 42H,41H14、试用位操作指令实现下列逻辑操作。
单片机汇编习题课
4.4.2 码型转换 一、十六进制数与ASCII码间的转换 十六进制数与 码间的转换
十六进制数与ASCII码的对应关系如表所示。当十六进 码的对应关系如表所示。 十六进制数与 码的对应关系如表所示 制数在0~ 之间时 其对应的ASCII码值为该十六进制数加 之间时, 制数在 ~9之间时,其对应的 码值为该十六进制数加 30H;当十六进制数在A~F之间时,其对应的ASCII码值为该 ;当十六进制数在 ~ 之间时,其对应的 码值为该 之间时 十六进制数加37H。 十六进制数加 。
MOV R0,#DATA1 ; , MOV R1,#DATA2 ; , MOV R7,#N , ; 置字节数 CLR C ; LOOP:MOV A,@R0 ; : , ADDC A,@R1 ;求和 , MOV @R1,A ;存结果 , INC R0 ;修改指针 INC R1 ; DJNZ R7, LOOP ; ,
ORG 1000H
HEXASC: MOV A, HEX ANL A, # 0FH ADD A, # 3; 修改指针 修改指针 MOVC A, @A+PC MOV HEX, A RET
ASCTAB: DB 30H, 31H, 32H, 33H, 34H DB 35H, 36H, 37H, 38H, 39H DB 41H, 42H, 43H, 44H, 45H DB 46H 在这个程序中, 查表指令MOVC A, @A+PC到表格首 在这个程序中 查表指令 到表格首 地址有两条指令, 个字节地址空间, 地址有两条指令 占用 3 个字节地址空间 故修改指针应加 3。 。
RRC A MOV R6, A MOV A, R7 RRC A MOV R7, A RET
. 程 序 框 图
NMUL NMUL
无符号十进制数加法实验
31H30H52H51H50H二进制+二进制52H50H一、实验目的:掌握MCS -51汇编语言设计,熟悉Keil µVision2仿真开发系统软件的操作方法。
二、实验内容:编写并调试一个无符号十进制数加法程序,其功能为将两个字节的二进制被加数2EA3H (存放在(31H )(30H ))和加数571DH (存放在(41H )(40H ))转换成压缩BCD 码(即4位十进制数)的被加数(存放在(52H )(51H )(50H ))和加数(存放在(62H )(61H )(60H )),并将它们相加的结果以压缩BCD 码的形式写入(52H )(51H )(50H )中。
(实验结果:(52H )=03H ;(51H )=42H ;(50H )=40H )二、实验设备:计算机、Keil µVision2仿真开发系统软件图2-1图2-2四、实验框图:五、实验步骤: 1、 在Win2000环境下打开Keil µVision2仿真开发系统软件; 2、 源文件的建立:使用菜单“文件/新建”或者点击工具栏中新建文件按钮,即可在项目窗口右侧打开一个新的文本编辑窗口,在该窗口中写入用户程序。
保存该文件时注意必须加上扩展名(汇编语言一般为.ASM 或.A51),假设我们的源程序名为exam1.asm 。
说明:源文件就是一般的文本文件,不一定使用Keil 软件编写,可以使用任意文本编辑器编写,而且,Keil 的编辑器对汉字的支持不好。
主程序框图图2-3图2-4图2-6 图2-53、工程文件的建立:点击“工程/新建工程”菜单,出现如图2-1所示的对话框。
选择CPU厂商及型号(如Ateml公司的89C51),点击“确定”,回到如图2-2所示的主界面。
点击“SourceGroup 1”中加入刚才写好的源文件exam1.asm4、工程设置:点击“工程/目标’Target 1’属性”出现如图2-3所示对话框。
单片机A复习要点
一个机器周期包含12个晶荡周期或6个时钟周期
指令的执行时间称作指令周期 (单、双、四周期)
2.5.1 80C51的程序存储器配置
PC是16位的计数器,所以能寻址64KB的ROM。 80C51内部有4KB的掩膜ROM,87C51在内部有4KB的EPROM,而80C31在内部没有程序存储器。
3.6.3 调用与转移
这两条指令可以实现子程序的短调用和长调用。目标地址的形成方式与AJMP和LJMP相似。这两条指令的执行不影响任何标志。
一、 调用
RET指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址,并送入指令计数器PC,从而结束子程序的执行。程序返回到断点处继续执行。
例 将1位十六进制数转换成相应的ASCII码。 设十六进制数存放在R0中,转换后的ASCII 码存放于R2中。实现程序如下: HASC:MOV A,R0 ;取4位二进制数 ANL A,#0FH ;屏蔽掉高4位 PUSH ACC ;4位二进制数入栈 CLR C ;清进(借)位位 SUBB A,#0AH ;用借位位的状态判断该数在0~9还是A~F之间 POP ACC ;弹出原4位二进制数 JC LOOP ;借位位为1,跳转至LOOP ADD A,#37H ;借位位为0,该数在A~F之间,加37H LOOP:ADD A,#30H ;该数在0~9之间,加30H MOV R2,A ;ASCII码存于R2 RET
执行“读—修改—写”类输入指令时(如:ANL P0,A),内部产生的“读锁存器”操作信号,使锁存器Q端数据进入内部数据总线,在与累加器A进行逻辑运算之后,结果又送回P0的口锁存器并出现在引脚。
在执行“MOV”类输入指令时(如:MOV A,P0),内部产生的操作信号是“读引脚”。注意,在执行该类输入指令前要先把锁存器写入“1”,使场效应管T2截止,使引脚处于悬浮状态,可以作为高阻抗输入。
单片机@双字节无符号数加法程序设计与调试实验
单⽚机@双字节⽆符号数加法程序设计与调试实验⼀、实验内容与要求编写并调试⼀双字节⽆符号⼗进制数加法程序。
要求:先将被加数写⼊41H、40H单元,加数写⼊51H、50H单元,相加的和存⼊52H、51H、50H单元。
按⾼位在前的顺序写⼊。
即实现:(41H)(40H)+(51H)(50H)=(52H)(51H)(50H)⼆、实验⽅法与步骤①建⽴⼀个新项⽬⽂件,将程序加⼊这个项⽬⽂件中,②编译、连接(有错的话先纠错);③将程序下载到C8051F020中;④打开RAM观察窗⼝,运⾏程序。
★运⾏程序时,可单步执⾏或在送数指令后设断点观察RAM的变化及运算三、程序清单D1L EQU 12H ;定义被加数的低8位D1H EQU 34H ;定义被加数的⾼8位D2L EQU 56H ;定义加数的低8位D2H EQU 78H ;定义加数的⾼8位ORG 0000H ;复位⼊⼝地址MOV 40H,#D1L ;被加数的低8位存⼊40H单元MOV 41H,#D1H ;被加数的⾼8位存⼊41H单元MOV 50H,#D2L ;加数的低8位存⼊50H单元MOV 51H,#D2H ;加数的⾼8位存⼊51H单元CLR CMOV A,40H ;取被加数的低8位到AADD A,50H ;低位相加DA A ;⼗进制调整MOV 50H,A ;存⼊和的低8位MOV A,41H ;取被加数的⾼8位到AADDC A,51H ;⾼8位相加DA A ;⼗进制调整MOV 51H,A ;存⼊和的⾼8位MOV 52H,#00H ;清零52H单元MOV A,#00H ;A=0ADDC A,52H ;加进位位MOV 52H,A ;存⼊进位位SJMP $END。
理解有符号数和无符号数
理解有符号数和⽆符号数声明⽹上看到的⽂章,原⽂找不到了,原⽂被转载的不成样⼦,重复很多,整理花了很长时间,在翻看了维基百科后发现,原⽂中对于负数原码和补码存在⼀些问题,修改了⼀部分,原作者看到后可以联系我。
1、你⾃已决定是否需要有正负。
就像我们必须决定某个量使⽤整数还是实数,使⽤多⼤的范围数⼀样,我们必须⾃已决定某个量是否需要正负。
如果这个量不会有负值,那么我们可以定它为带正负的类型。
在计算机中,可以区分正负的类型,称为有符类型(signed),⽆正负的类型(只有正值),称为⽆符类型。
(unsigned)数值类型分为整型或实型,其中整型⼜分为⽆符类型或有符类型,⽽实型则只有符类型。
字符类型也分为有符和⽆符类型。
⽐如有两个量,年龄和库存,我们可以定前者为⽆符的字符类型,后者定为有符的整数类型。
2、使⽤⼆制数中的最⾼位表⽰正负。
⾸先得知道最⾼位是哪⼀位?1个字节的类型,如字符类型,最⾼位是第7位,2个字节的数,最⾼位是第15位,4个字节的数,最⾼位是第31位。
不同长度的数值类型,其最⾼位也就不同,但总是最左边的那位(如下⽰意)。
字符类型固定是1个字节,所以最⾼位总是第7位。
(红⾊为最⾼位)单字节数:11111111双字节数: 11111111 11111111四字节数:11111111 11111111 11111111 11111111 当我们指定⼀个数量是⽆符号类型时,那么其最⾼位的1或0,和其它位⼀样,⽤来表⽰该数的⼤⼩。
当我们指定⼀个数量是⽆符号类型时,此时,最⾼数称为“符号位”。
为1时,表⽰该数为负值,为0时表⽰为正值。
3、⽆符号数和有符号数的范围区别。
⽆符号数中,所有的位都⽤于直接表⽰该值的⼤⼩。
有符号数中最⾼位⽤于表⽰正负,所以,当为正值时,该数的最⼤值就会变⼩。
我们举⼀个字节的数值对⽐:⽆符号数: 11111111 值:2551* 27 + 1* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20有符号数: 01111111 值:1271* 26 + 1* 25 + 1* 24 + 1* 23 + 1* 22 + 1* 21 + 1* 20同样是⼀个字节,⽆符号数的最⼤值是255,⽽有符号数的最⼤值是127。
虹润智能表说明书
目录一、技术指标 (1)二、仪表外形 (2)三、接线图 (4)四、参数设定 (7)五、选型 (16)六、通讯协议 (23)HR系列交流电工测量显示控制仪采用全隔离技术。
直接采集电压和电流互感器信号,计算频率,电压和电流,以及它们间相位差和单相有功功率 P=U.I.CosΦ或三相有功功率P有=√3×U×I×COS(φ+30),无功功率计算公式:无功功率=视在功率-有功功率。
HR系列交流电工测量显示控制仪可随意改变仪表的输入信号量程。
采用最新无跳线技术,只需设定仪表内部参数,即可适应现场要求。
HR系列交流电工测量显示控制仪可带有一路模拟量变送输出或继电器报警输出。
适用于各种测量控制。
HR系列交流电工测量显示控制仪可带串行通信输出,可与各种带串行输入/输出的设备进行双向通信,组成网络控制系统。
一、技术指标:显示方式控制/报警方式参数设定0~9999字测量值显示0~9999字设定值显示高亮度LED数码显示发光二极管工作状态显示二组数码管测量值同屏显示(电压,电流,功率,周波或功率因数) 可选择2限控制或报警输出,带LED指示控制(或报警)方式为继电器ON/OFF带回差面板轻触式按键数字设定参数设定值断电后永久保存使用环境使用环境相对湿度供电电压功耗环境温度 0~50℃≤85RH 避免强腐蚀气体常规型 AC 220V%(50Hz±2Hz)特殊型 AC 90~260V——开关电源≤ 5W(AC 220V线性电源供电)≤ 4W(AC 90~265V开关电源供电)二、仪表外形:型号HR-WP-AC-C.S80系列HR-WP-Cos-C.S80系列HR-WP-Hz-C.S80系列HR-WP-AC-C90系列HR-WP-Cos-C90系列HR-WP-Hz-C90系列HR-WP-AC-C.S40系列HR-WP-Cos-C.S40系列HR-WP-Hz-C.S40系列开孔尺寸单位:mm 单位:mm 单位:mm外形尺寸宽高深:160×80×140mm宽高深:80×160×140mm宽高深:96×96×105mm宽高深:96×48×105mm宽高深:48×96×105mm型号HR-WP-W-C.S80系列HR-WP-W-C90系列HR-WP-W-C.S40系列开孔尺寸宽高深:160×80×140mm宽高深:80×160×140mm宽高深:96×96×105mm宽高深:96×48×105mm宽高深:48×96×105mm外形尺寸单位:mm 单位:mm 单位:mm三、接线图四、参数设定1、仪表面板COS负载性质亮:电容性负载,电流超前暗:电感性负载,电流滞后2、切换显示类型:仪表上电初始化后处于测量模式,数码管分别显示当前电压和电流值,按压UP键可以使CH1显示下一个类型值,类型切换顺序为:电压->电流->有功功率->功率因数->电压。
程序举例
例1:将内部RAM40~4FH的16个数据送到外部RAM2000~200FH,再将外部2000~200FH数据送到内部RAM50~5FH 中。
例2:有一变量存放在片内RAM的20H单元,其取值范围为:00H~05H。
要求编制一段程序,根据变量值求其平方值,并存入片内RAM的21H单元。
在程序存储器的一片存储单元中建立起该变量的平方表。
用数据指针DPTR指向平方表的首址,则变量与数据指针之和的地址单元中的内容就是变量的平方值。
采用MOVC A,@A+PC指令也可以实现查表功能,且不破坏DPTR的内容,从而可以减少保护DPTR的内容所需的开销。
但表格只能存放在MOVC A,@A+PC指令后的256字节内,即表格存放的地点和空间有一定限制。
例3:(双字节无符号数加法)设被加数存放在内部RAM的51H、50H单元,加数存放在内部RAM的61H、60H单元,相加的结果存放在内部RAM的51H、50H单元,进位存放在位寻址区的00H位中。
程序段如下:MOV R0,#50H ;被加数的低字节地址MOV R1,#60H ;加数的低字节地址MOV A,@R0 ;取被加数低字节ADD A,@R1 ;加上加数低字节MOV @R0,A ;保存低字节相加结果INC R0 ;指向被加数高字节INC R1 ;指向加数高字节MOV A,@R0 ;取被加数高字节ADDC A,@R1 ;加上加数高字节(带进位加)MOV @R0,A ;存高字节相加结果MOV 00H,C ;保存进位。
例4:双字节BCD数加法例5:将给定的一个字节二进制码转换十进制码RESULT EQU 30HORG 00HLJMP STARTSTART: MOV SP,#40HMOV A,#123LCALL BINTOBACSJMP $BINTOBAC: MOV B,#100DIV AB ;除以100得百位数MOV RESULT,AMOV A,BMOV B,#10DIV AB ;余数除以10得十位数MOV RESULT+1,AMOV RESULT+2,B ;余数为个位数RETEND例6:多分支程序跳转ORG 00H----------------------------精品word文档值得下载值得拥有----------------------------------------------START: MOV A,#0CALL FUNCENTERMOV A,#1MOV A,#2CALL FUNCENTERMOV A,#3CALL FUNCENTERLJMP $FUNCENTER:ADD A,ACC ;AJMP为二字节指令,地址偏移量*2MOV DPTR,#FUNCTAB ;设置基址JMP @A+DPTR ;跳转到目标地址FUNCTAB: AJMP FUNC0AJMP FUNC1AJMP FUNC2AJMP FUNC3FUNC0: MOV 30H,#0RETFUNC1: MOV 31H,#1RETFUNC2: MOV 32H,#2RETFUNC3: MOV 33H,#3RETEND例7:多字节BCD取补ORG 00HMOV 30H,#12HMOV 31H,#44HMOV 32H,#89HMOV R7,#03H ;设置操作数的字节数MOV R0,#30H ;设置指针NEG: MOV A,R7DEC A ;取字节数减1至R2中MOV R2,AMOV A,R0 ;保护指针MOV R3,ANEG0: CLR CMOV A,#99HSUBB A,@R0 ;按字节十进制取补MOV @R0,A ;存回以@R0开始的连续单元INC R0 ;调整数据指针DJNZ R2,NEG0MOV A,#9AH ;最低字节单独取补----------------------------精品word文档值得下载值得拥有----------------------------------------------SUBB A,@R0MOV @R0,AMOV A,R3 ;恢复指针MOV R0,ASJMP $END例8(无符号数排序程序)在片内RAM中,起始地址为30H的8个单元中存放有8个无符号数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 双字节无符号数加法例1: 双字节无符号数加法(R0 R1)+(R2 R3) → (R4 R5), R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节。
已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h)假设其和不超过16位。
请编程。
提示:由于不存在16位数加法指令, 所以只能先加低8位, 后加高8位, 而在加高8位时要连低8位相加时产生的进位一起相加。
查看psw中的标志CY=?, OV=?, AC=?, P=?。
熟悉软件环境,要求能知道在哪里看数据的值,在哪里能看一些寄存器的内容,在哪里看程序代码。
如何在伟福软件环境下建立项目,运行文件。
要求按照标准模式来写程序,ORG 0000HLJMP STARTORG 0050HSTART:MOV R1,#79HMOV R3,#0A4HMOV A,R1ADD A,R3MOV R5,ACLR AMOV R0,#93HMOV R2,#25HMOV A,R0ADDC A,R2MOV R4,A SS:JMP SSEND2双字节无符号数减法例2: 双字节无符号数相减(R0 R1)-(R2 R3) → (R4 R5)。
R0、 R2、 R4存放16位数的高字节, R1、 R3、 R5存放低字节,已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h);请编程。
同学自己可以设置被减数与减数数值提示:先减低8位, 后减高8位和低位减借位。
由于低位开始减时没有借位, 所以要先清零。
ORG 0000HLJMP STARTORG 0050HSTART:MOV R0,#93HMOV R1,#79HMOV R2,#25HMOV R3,#0A4HMOV A,R1SUBB A,R3MOV R5,ACLR AMOV A,R0SUBB A,R2MOV R4,ASS:JMP SSEND3双字节数乘以单字节数例3: 利用单字节乘法指令,进行双字节数乘以单字节数运算。
若被乘数为16位无符号数, 地址为M1(30H) 和M1+1(31H)(低位先、高位后), 乘数为8位无符号数, 地址为M2(32H), 积由高位到低位存入R2、 R3和R4三个寄存器中。
30H,31H,32H内容 12H,34H,56H ;提示:(M1+1) (M1)×(M2)R3 R4 ;是M2 乘M1的高8位,低8位+ B A ;是M2乘M1+1的高8位,低8位R2 R3 R4org 0000hljmp startorg 0050hstart: Mov 30h, #12hmov 31h, #34hmov 32h, #56hmov a, 30hmov b,32hmul ab;低八位存A,高八位存Bmov r4, amov r3, bclr aclr bmov a, 32hmov b, 31hmul abadd a,r3mov r2,bss: jmp ssend4. 把8位二进制数转换为3位BCD例4: 利用除法指令把累加器A中的8位二进制数转换为3位BCD数, 并以压缩形式存放在地址M1、 M2单元中。
设A中放A8H ,M1、 M2单元地址是 30H,31H提示:累加器A中的8 位二进制数, 先对其除以100(64H), 商数即为十进制的百位数; 余数部分再除以10 (0AH), 所得商数和余数分别为十进制十位数和个位数, 即得到3位BCD数。
百位数放在M1中, 十位、个位数压缩BCD数放在M2中, 十位与个位数的压缩BCD数的存放是通过SWAP和ADD指令实现的。
org 0000hljmp startorg 0050hstart: mov a,#0a8hmov b,#64hdiv abmov 30h, aclr amov a, bclr bmov b, #0ahdiv abswap aadd a, bmov 31h, ass:jmp ssend5双字节压缩BCD码加法例6: 双字节压缩BCD码加法。
设R5(高)、 R4(低)为被加数; R3(高)、 R2(低)为加数, 相加和的结果存入: R6(万)、 R5(千、百)、 R4(十、个)。
被加数 98H,76H;加数 54H,32Horg 0000hljmp startorg 0050hstart: mov r5, #98hmov r4, #76hmov r3, #54hmov r2, #32hmov a, r2add a, r4da amov r4,aclr amov a, r5addc a,r3da amov r5,aclr aaddc a,#00hmov r6,ass:jmp ssend6 利用DPTR取数据,并保持DPTR原数不变例6: 若在外部ROM/EPROM中2000H单元开始依次存放0~9的平方值, 原来数据指针(DPTR)=3A00H, 请用查表指令取出2003H单元的数据后, 要求保持DPTR中的内容不变。
org 0000hLJMP mainorg 2000htab1: db 0,1,4,9,16,25,36,49,64,81main:mov a,#03hmov dptr,#3a00hpush dplpush dphmov dptr,#tab1movc a,@a+dptrpop dplpop dphss:jmp ssend7 16 位数的算术左移16 位数的算术左移。
16位数在内存中低 8 位存放在M1单元, 高 8 位存放在M1+1单元。
16位数是1234H ,M1为30H,M2为31H提示: 所谓算术左移就是将操作数左移一位, 并使最低位补充0, 相当于完成16 位数的乘2 操作, 故称算术左移。
org 0000hLjmp startorg 0050hstart:mov 30h,#34hmov 31h,#12hmov a,30hRLC amov 30h,amov a,31hRLC amov 31h,ass: jmp ssEnd8 比较内部RAM I、J单元中A、B 两数的大小例 3: 比较内部RAM I、 J单元中A、 B两数的大小,设A、B数均为带符号数, 以补码数存入I、 J中, 若A=B, 则使内部RAM的位K置 1; 若A≠B, 则大数存M单元, 小数存N 单元。
设内部RAM I、 J 是30H,40H;(A)=58H,(B)=97HM单元=50H,N单元=60H,位K=00H该带符号数比较子程序的比较过程示意图如图 3 ― 9 所示。
org 0000hLjmp startorg 0050hstart: I equ 30hJ equ 40hM equ 50hN equ 60hmov 30h,#58hmov 40h,#97hMOV A, IANL A, #80H ; 判A数的正负JNZ NEG ; A<0 则转至NEGMOV A, JANL A, #80H ; 判B数的正负JNZ BIG1 ; A≥0, B<0, 转BIG1SJMP COMP ; A≥0, B≥0, 转COMP NEG: MOV A, JANL A, #80H ; 判B数的正负JZ SMALL ; A<0, B≥0, 转SMALL COMP: MOV A, ICJNE A, J, BIG ; A≠B则转BIGSETB 00h ; A=B, 位K置1JMP WAITBIG: JC SMALL ; A<B转SMALLBIG1: MOV M, IMOV N, JJMP WAITSMALL: MOV M, JMOV N, IWAIT: JMP WAIThere: sjmp heress: jmp ssend9 双字节压缩BCD码转换成二进制码例 2: 双字节压缩BCD码转换成二进制码子程序。
提示: 该转换的算法为: (d3d2d1d0)BCD=(d3×10+d2)×100+(d1×10+d0)实现该算法的参考子程序如下:入口: R5(千位、百位)、R4(十位、个位)为BCD码。
出口: R5R4(16 位无符号二进制整数)。
ORG 0000HLJMP MAINORG 0030HMAIN: MOV A, R5 ; (A) ←d3d2 (千位、百位)MOV R2, A ; (R2) ←d3d2ACALL CHANGE; 调子程序实现d3×10+d2→AMOV B, #64H ; (B) ←100MUL AB ; (d3×10+d2)×100MOV R6, A ; R6 暂存乘积低8 位XCH A, B ; 乘积高8 位送AMOV R5, A ; R5暂存乘积高8位MOV A, R4 ; (A) ←d1d0 (十位、个位)MOV R2, A ; (R2) ←d1d0ACALL CHANGE ; 调子程序实现d1×10+d0→AADD A, R6 ; (A) ←(R6)+(A)MOV R4, A ; R4存转换后16 位数低8 位MOV A, R5 ; (A) ←(R5)ADDC A, #00H ; (A) ←(R5)+低8 位和的进位C MOV R5, A ; R5存转换后16 位数高8 位SS: JMP SSORG 200HBCD2B: MOV A, R2 ; (A) ←(d1d0)BCDANL A, #0F0H ; 取高位BCD码d1SWAP A ; (A)=0d1HMOV B, #0AH ; (B) ←10MUL AB ; d1×10MOV R3 , A ; R3暂存乘积结果MOV A, R2 ; (A) ←(d1d0)BCDANL A, #0FH ; 取低位BCD码d0ADD A, R3 ; d1×10+d0MOV R2, A ; 保存转换结果RET ; 子程序返回ENDCHANGE:MOV R2,AANL A,#0F0HSWAP AMOV B,#0AHMUL ABMOV R3,AMOV A,R2ANL A,#0FHADD A,R3RETEND10 冒泡排序有8个数据存放在20H为首地址的内部RAM,进行升序排列编程,原始数据:39,27,13,44,78,22,6,51;设R7 为比较次数计数器,初始值为07H ,F0为标志位,F0=0表明无互换发生,F0=1表明有互换发生提示:程序流程图如下置R0为20H置R7为07H清交换标志位取前一个数取后一个数前数〈后数前数送后数单元后数送前数单元标志位置1R7-1=0?标志位置1?结束NYN Y NYORG 0000HLJMP STARTORG 0050HSTART: MOV R3,#0AHMOV R0,#20HMOV DPTR,#TABLE LOOP1: MOV A,#00HMOVC A,@A+DPTRMOV @R0,AINC R0INC DPTRDJNZ R3,LOOP1 LOOP3: MOV R3,#0AHMOV R4,#0AHMOV R0,#20HMOV R1,#21H LOOP2: MOV A,@R1CLR CSUBB A,@R0JC GOJMP RETURN GO: MOV A,@R1XCH A,@R0MOV @R1,ARETURN:INC R0INC R1DJNZ R3,LOOP2DJNZ R4,LOOP3JMP $ORG 2000HTABLE:DB0FEH,39H,27H,13H,44H,78H,22H,06H,51H,01H,0A3HEND11中断方式下定时器应用设计设单片机的晶振为12MHz,,定时器0方式0工作,产生1ms定时,在P1.0引脚上输出周期为2ms的方波,中断方式完成,试设计程序。