PIC单片机浮点数
PIC C语言使用简要说明
第一部分为了对PIC单片机有更好的支持,PICC在标准C的基础上作了一些扩充:• 定义I/O函数,以便在你的硬件系统中使用中定义的函数。
• 用C语言编写中断服务程序• 用C语言编写I/O操作程序• C语言与汇编语言间的接口1-1 与标准C的不同PICC只在一处与标准C不同:函数的重入。
因为PIC单片机的寄存器及堆栈有限,所以PICC不支持可重入函数。
1-2 支持的PIC芯片PICC 支持很多PIC单片机,支持PIC单片机的类型在LIB目录下的picinfo.ini 文件中有定义。
1-3 PICC 包含一些标准库1-4 PICC 编译器可以输出一些格式的目标文件,缺省设置为输出Bytecraft的'COD' 格式和 Intel的'HEX'格式。
你可以用表1-1中的命令来指定输出格式。
表1-1格式名称描述PICC 命令文件类型Motorola HEX S1/S9 type hex file -MOT .HEXIntel HEX Intel style hex records(缺省) -INTEL .HEX Binary Simple binary image -BIN .BIN UBROF Universal Binary Image Relocatable Format -UBROF .UBR Tektronix HEX Tektronix style hex records -TEK .HEX American Hex format with symbols for American -AAHEX .HEX Automation HEX Automation emulatorsBytecraft .COD Bytecraft code format(缺省) n/a(缺省) .COD Library HI-TECH library file n/a .LIB1-5 符号文件PICC -G 命令用于生成符号文件,有了符号文件,你就可以进行源程序调试.命令格式为:PICC -16F877 -G test.c在使用仿真器时必须使用-G命令。
IEEE 745浮点数标准
IEEE 745浮点数标准解读IEEE标准754:浮点数表示如须转载请注明作者为Lolita@,并请保持文章的完整和提供转载出处。
N的实际值n由下列式子表示:其中:★ n,s,e,m分别为N,S,E,M对应的实际数值,而N,S,E,M仅仅是一串二进制位。
★ S(sign)表示N的符号位。
对应值s满足:n>0时,s=0; n<0时,s=1。
★ E(exponent)表示N的指数位,位于S和M之间的若干位。
对应值e值也可正可负。
★ M(mantissa)表示N的尾数位,恰好,它位于N末尾。
M也叫有效数字位(sinificand)、系数位(coefficient), 甚至被称作“小数”。
三、浮点数格式IEEE标准754规定了三种浮点数格式:单精度、双精度、扩展精度。
前两者正好对应C语言里头的float、double或者FORTRAN里头的real、double精度类型。
限于篇幅,本文仅介绍单精度、双精度浮点格式。
★ 单精度:N共32位,其中S占1位,E占8位,M占23位。
★ 双精度:N共64位,其中S占1位,E占11位,M占52位。
上图中,|E|表示E的二进制序列表示的整数值,例如E为"10000100",则|E|=132,e=132-127=5 。
k则表示E的位数,对单精度来说,k=8,则bias=127,对双精度来说,k=11,则bias=1023。
此时m的计算公式如下图所示:标准规定此时小数点左侧的隐含位为1,那么m=|1.M|。
如M="101",则|1.M|=|1.101|=1.625,即 m=1.6252、非规格化:当E的二进制位全部为0时,N为非规格化形式。
此时e,m 的计算都非常简单。
注意,此时小数点左侧的隐含位为0。
为什么e会等于(1-bias)而不是(-bias),这主要是为规格化数值、非规格化数值之间的平滑过渡设计的。
后文我们还会继续讨论。
单片机浮点数计算
在单片机应用系统的数据处理过程中,经常会遇到小数的运算问题,如求解BCD的增量算式、线性化处理等。
因此,需要用二进制数来表示小数。
表示小数的方法一般有两种,定点数和浮点数。
定点数结构简单,与整数的运算过程相同,运算速度快。
但随着所表示数的范围的扩大,其位数成倍增加,给运算和存储带来不便,而且也不能保证相对精度不变。
浮点数的结构相对复杂,但它能够以固定的字节长度保持相对精度不变,用较少的字节表示很大的数的范围,便于存储和运算,在处理的数据范围较大和要求精度较高时,采用浮点数。
浮点数的概念常用的科学计数法来表示一个十进制数如l234.75=1.23475E3=1.23475×103在数据很大或很小时,采用科学计数避免了在有效数字前加0来确定小数点的位置,突出了数据的有效数字的位数,简化了数据的表示。
可以认为,科学计数法就是十进制数的浮点数表示方法。
在二进制效中,也可以用类似的方法来表示一个数,如1234.75=10011010010.11(二进制)=0.1001101001011×211一般表达式为N=S×2p在这种表示方法中,数值由四个部分组成,即尾数S及符号,阶码P及符号。
在二进制中,通过定义相应字节或位来表示这四部分,就形成了二进制浮点数。
二进制浮点数可以有多种不同的表示方法,下面是一种常见的三字节浮点数的格式:其中尾数占16位,阶码占6位,阶符占1位,数符占1位。
阶码通常用补码来表示。
在这种表示方法中,小数点的实际位置要由阶码来确定,而阶码又是可变的,因此称为浮点数。
1234.75用这种格式的浮点数表示就是:0000 1011 1001 1010 0101 1000用十六进制表示为1234.75=0B9A58H-1234.75=4B9A58H0.171875=043B00H-0.171875=443B00H三字节浮点数所能表示的最大值为1×263=9.22×1018能表示的最小数的绝对值为0.5×2-63=5.42×10-20其所表示的数的绝对值范围=(5.42×10-20~9.22×1018),由此可以看到,比三字节定点数表示的数的范围大得多。
单片机浮点数运算之比较
单片机浮点数运算之比较今天心血来潮,做了几种单片机之间浮点数运算速度的比较,实验很简单,编一个实现两个浮点数相乘的小程序,然后编译、仿真,看看每种单片机执行乘法运算需要多少个机器周期,程序如下:void main(void){float i,j;i=12.8;j=3.1415926;i=i*j;for(;i>0;i--); //避免编译警告或被优化掉while(1);}进行比较实验的单片机及相关数据如下(以下执行时间均是指执行i=i*j所用指令周周期):AVR:实验芯片型号:ATMAGE16编译仿真环境:IAR FOR AVR5.30执行时间:181MSP430:实验芯:MSP430F2132编译仿真环境:IAR FOR MSP230 5.10执行时间:326STM32:实验芯:STM32F107xC编译仿真环境:IAR FOR ARM 5.41执行时间:38PIC16单片机:实验芯片:PIC16F877A编译仿真环境:MPLAB 8.53 + PICC9.70执行时间:131451单片机:实验芯片:AT89C51编译仿真环境:Keil uVision2执行时间:207执行时间(指令周期)比较图从结果可以看出,执行效率最高、速度最快的当属smt32。
当然,stm32与其它另外4种单片机不是一个等级的。
效率最低、速度最慢的就是PIC了,如果采用同样的晶振频率,PIC的执行时间将是AVR 的28倍!做为16位单片机的MSP430让人有点小失望,竟然还干不过51,如果换用单周期的51单片机,那么它的执行速度也只略逊于AVR.总结:AVR不愧于“高速单片机”的称号;MSP430优势有在速度上,在于它的低功耗设计;PIC指令效率太低51不愧是最经典的单片机;Stm32不是神话,只因为它是ARM Cortex-M3。
PIC 单片机的C 语言编程
PIC单片机C语言编程讲义奥科电子工作室(内部资料)2006年元月第一版第1章 PIC 单片机的C 语言编程1.1 PIC 单片机C 语言编程简介用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高、便于跨平台的代码移植等等,因此C 语言编程在单片机系统设计中已得到越来越广泛的运用。
针对PIC 单片机的软件开发,同样可以用C 语言实现。
但在单片机上用C 语言写程序和在PC 机上写程序绝对不能简单等同。
现在的PC 机资源十分丰富,运算能力强大,因此程序员在写PC 机的应用程序时几乎不用关心编译后的可执行代码在运行过程中需要占用多少系统资源,也基本不用担心运行效率有多高。
写单片机的C 程序最关键的一点是单片机内的资源非常有限,控制的实时性要求又很高,因此,如果没有对单片机体系结构和硬件资源作详尽的了解,以笔者的愚见认为是无法写出高质量实用的C 语言程序。
这就是为什么前面所有章节中的的示范代码全部用基础的汇编指令实现的原因,希望籍此能使读者对PIC 单片机的指令体系和硬件资源有深入了解,在这基础之上再来讨论C 语言编程,就有水到渠成的感觉。
本讲稿围绕中档系列PIC 单片机来展开讨论,Microchip 公司自己没有针对中低档系列PIC单片机的C 语言编译器,但很多专业的第三方公司有众多支持PIC 单片机的C 语言编译器提供,常见的有Hitech、CCS、IAR、Bytecraft 等公司。
其中笔者最常用的是Hitech 公司的PICC 编译器,它稳定可靠,编译生成的代码效率高,在用PIC 单片机进行系统设计和开发的工程师群体中得到广泛认可。
其正式完全版软件需要购置,但在其网站上有限时的试用版供用户评估。
另外,Hitech 公司针对广大PIC 的业余爱好者和初学者还提供了完全免费的学习版PICC-Lite 编译器套件,它的使用方式和完全版相同,只是支持的PIC 单片机型号限制在PIC16F84、PIC16F877 和PIC16F628 等几款。
浮点数与十进制数转换
PIC单片机的浮点数及其与十进制数之间的相互转换说明浮点数的格式、十进制数与浮点之间的相互转换在我们设计的仪表中采用PIC系列单片机,碰到了浮点数的运算问题,查阅其有关资料发现,其浮点数的格式及其与十进制数之间的转换,与我们常用的MCS-51单片机所提供的三字节、四字节浮点数完全不同,本文将说明其浮点数的格式及其与十进制数之间的转换和程序设计步骤。
1 浮点数的格式Microchip公司单片机所采用的浮点数格式是IEEE-754标准的变异型。
32位浮点数格式为:其中:×表示一位二进制数0或1;eb 为指数的偏差;S为浮点数的符号位,S=0为正数,S=1为负数;小数点“·”在符号位S的右边;BY0 BY1 BY2为尾数的小数部分。
应特别注意:⑴浮点数隐含其整数部分为1。
⑵十进制数0 的浮点数表示为00H,00H, 00H, 00H。
2 浮点数与十进制数之间的相互转换2.1 十进制数转换成浮点数设:十进数为A,则2Z=A,Z= lnA/ln2,指数P=int(z);尾数部分X: X=A/(2P), 其整数部分隐含为1(零除外),将其小数部分按原码格式化为二进制数,即为尾数的小数部分BY0 BY1 BY2。
而指数偏差eb=P+7FH(其中的7FH 为指数的偏移量)。
符号位S,视十进制数的正负而确定。
例如十进制数50.265化为32位规格化浮点数:A=50.265,则Z=ln50.265/ln2,P=int(Z),故P=5; X=A/2P=50.265/25=1.57078125,将0.57078125化为23位二进制小数,即是BY0 BY1 BY2,在最高位添上十进制数的符号位S(因十进制数为正数,故S=0);而eb=P+7FH,所以,十进制数50.265的32位规格化浮点数即为84H,49H,0FH,5CH。
2.2 浮点数转换为十进制数设浮点数为eb S.BY0 BY1 BY2。
由于浮点数隐含尾数的整数为1,故尾数X的实际值为:BY0 BY1 BY2;指数P=eb-7FH;故:十进制数A=(-1)S×2P×X例:32位规格化浮点数84H,49H,0FH,5CH转换为十进制数。
PIC单片机指令系统和汇编语言程序设计
第二章PIC单片机指令系统和汇编语言程序设计2.1 指令系统概述2.1.1 指令的表示方法1.机器指令的表示方法:指令用于规定计算机的基本操作。
一台计算机所能执行的指令集合就是它的指令系统。
指令共有两种表示方法,分别是机器语言表示方法和汇编语言表示方法。
不同种类的单片机有不同的一套命令(即所谓“指令系统”)。
2.汇编语言的表示方法:汇编语言是对机器语言的改进,它采用便于人们记忆的一些符号(例如简化的英文单词)来表示操作码、操作数和地址码等。
通常把表示指令的符号称之为助记符。
3.PIC16F87X单片机指令:PIC16F87X单片机采用精简指令集(RISC)结构,指令效率高,功能强。
它的指令为单字的宽字位(14)指令,由此生成的程序代码短。
指令条数少,仅有35条。
(1)面向字节操作类(2)面向位操作类(3)常数操作和控制类操作。
2.1.2PIC单片机指令的寻址方式1.寄存器间接寻址:所谓寄存器间接寻址指的是通过寄存器F0、F4来实现。
实际的寄存器地址放在F4的低5位中,通过F0来进行间接寻址。
INDF不是物理上实际存在的寄存器,而任何寻址INDF的指令都是以FSR寄存器内容为地址的RAM单元中存放着参加运算或操作的数据。
2.立即数寻址:所谓立即寻址就是操作数在指令中直接给出。
通常把出现在指令中的操作数称之为立即数,因此就把这种寻址方式称之为立即寻址。
3.直接寻址:指令中操作数以其所在存储单元地址的形式给出,就称之为直接寻址。
这种方式是对任何一寄存器直接寻址访问。
4.位寻址:这种寻址方式是对寄存器中的任一位(bit)进行操作。
2.1.3指令符号的意义说明1.PIC汇编语言指令格式PIC系列微控制器汇编语言指令与MCS-51系列单片机汇编语言一样,每条汇编语言指令由4个部分组成,其书写格式如下:标号操作码助记符操作数1,操作数2;注释2.指令符号的意义说明:在PIC系列单片机指令中常把数据存储器RAM当作寄存器来使用(处理)并用字母f(或F)表示。
PIC单片机运算子程序2,浮点数转换为定点整数,BCD码转换程序
4.2 3字节浮点数转换为定点整数子程序的转换结果将采用补码表示。
其转换数值范围:-32768~32767,入口条件和出口条件如下:入口条件:ACCBHI、ACCBLO、EXPB出口条件:ACCBHI、ACCBLO以下为子程序的清单。
由于程序所需调用的子程序和所需通用寄存器单元地址和定点数转换为浮点数子程序相同,在此省略。
使用时,将前面介绍的子程序拷入此处即可。
FtoD CLRF SIGN ;清结果符号寄存器MOVF ACCBHI,0BTFSS ACCBHI,7 ;被转换数是否为负?GOTO D1BSF SIGN,7 ;是,SIGN.7置1CALL NEG_B ;被转换数取补D1 BTFSS EXPB,7 ;被转换数为正,再判阶码为负否?GOTO D2CLRF ACCBHI ;为负,被转换数小于1,无法用定点数表示CLRF ACCBLORETLW 0D2 MOVLW .16 ;被转换数阶码减16(十进制数)SUBWF EXPB,0BTFSS STATUS,C ;阶码小于16?GOTO D3MOVLW 0XFF ;阶码大于等于16,置ACCB为最大,返回MOVWF ACCBHIMOVWF ACCBLORETLW 01D3 CALL FTOW3 ;调用子程序将浮点数转换为定点数BTFSC SIGN,7 ;定点数为负?CALL NEG_B ;是,取补RETLW 0 ;否,返回;****************************************FTOW3 MOVLW .15 ;EXPB=15(十进制数)?SUBWF EXPB,0BTFSC STA TUS,ZRETLW 0 ;是,返回BCF STATUS,C ;否,ACCB继续右移,EXPB加1RRF ACCBHIRRF ACCBLOINCF EXPBGOTO FTOW3 ;重新判断EXPB=15?【校验举例1】 19531(十进制)化为十六进制数:4C4B0FH结果:4C4BH【校验举例2】 2622(十进制)化为十六进制数:51F00CH结果:0A3EH【例程】MAIN MOVLW 0X4B ;被转换数4C4BH送ACCBMOVWF ACCBLOMOVLW 0X4CMOVWF ACCBHIMOVLW 0X0FMOVWF EXPBCALL FtoD ;调用定点数至浮点数转换子程序END5 码制转换程序设计5.1 双字节定点数至5位BCD码转换程序入口条件:ACCBHI、ACCBLO出口条件:ACCCHI低半字节、ACCCLO、ACCDHI以下为双字节定点数至5位BCD码转换程序清单。
pic单片机数学运算
pic单片机数学运算
PIC单片机是一种常见的微控制器,常用于嵌入式系统中。
在PIC单片机中进行数学运算通常涉及到整数运算和浮点数运算两种
情况。
对于整数运算,PIC单片机通常使用移位运算、加法、减法、
乘法和除法等基本运算来进行数学运算。
移位运算可以实现乘法和
除法的快速运算,加法和减法操作可以直接使用单片机的加法器和
减法器来完成。
对于大数乘法和除法运算,通常需要使用软件算法
来实现,因为PIC单片机的位宽有限,需要对数据进行分解和处理。
对于浮点数运算,PIC单片机通常需要借助软件库来实现,因
为PIC单片机本身并不直接支持浮点数运算。
软件库中通常包含了
浮点数的加减乘除、开方、对数、指数等数学函数,可以帮助程序
员在PIC单片机中进行复杂的浮点数运算。
除了基本的数学运算外,PIC单片机还可以通过外部扩展模块
来实现更复杂的数学运算,比如使用外部的数学协处理器或者FPGA
来加速数学运算的处理速度。
总的来说,PIC单片机可以进行基本的整数运算和借助软件库实现浮点数运算,同时也可以通过外部扩展模块来实现更复杂的数学运算。
在实际应用中,需要根据具体的需求和PIC单片机的性能来选择合适的数学运算方法和工具。
pic_MPLAB_ERROR_调试的常见问题
16. PICC 提供了相关的预处理指令以实现在原程序中定义单片机的配置字和标记单元。
__CONFIG (HS & UNPROTECT & PWRTEN & BORDIS & WDTEN);
17. ㈠ 慎用汇编指令 ㈡ 尽量使用嵌入汇编 [三]尽量使用全局变量进行参数传递 :使用全局变量最大的好处是寻址直观,只需在 C 语言定义的变量名前增加一个下划线符即可在汇编语句中寻址;使用全局变量进行参数传递的效率也比形参高。
避免在中断内进行数学运算。数学运算将很有可能用到库函数和许多中间变量,就算不出现递归调用的问题,光在中断入口 和出口处为了保护和恢复这些中间临时变量就需要大量的开销,严重影响中断服务的效率。
15. C 语言中常用的格式化打印函数“printf/sprintf”用在单片机的程序中时要特别谨慎。printf/sprintf 是一个非常大的函数,一旦使用,你的程序代码长度就会增加很多。
9. Fixup overflow in expression (...)
定义的指针有明确的 bank 适用区域,在对指针变量赋值时就必须实现类型匹配
试图将bank2内的变量地址赋给指向bank0/1的指针
10. 中档系列的 PIC 单片机其一个程序页面的长度是 2K字,换句话说,用 C 语言编写的任
bit tmpBit0 @ tmpData*8+0; //tmpBit0对应于tmpData第 0 位
bit tmpBit1 @ tmpData*8+1; //tmpBit0对应于tmpData第 1 位
bit tmpBit2 @ tmpData*8+2; //tmpBit0对应于tmpData第 2 位
单片机浮点数格式说明
单片机浮点数格式说明★ MCS-51三字节格式:浮点数格式如下:地址 eb BY0 BY1内容 SEEE EEEE MMMM MMMM MMMM MMMM用三个字节表示,第一个字节的最高位为数符S,正数为0,负数为1,其余七位为阶码(二进制补码形式);第二字节为尾数的高字节;第三字节为尾数的低字节,尾数用双字节BCD码纯小数(原码)来表示。
例:已知 a=-123.4;b=0.7577;c=56.34;d=1.276;用BCD码浮点数表示时,分别为a=831234H;b=007577H;c=025634H;d=011276H。
★ MCS-51三字节浮点数规格化:为了提高运算精度,正数的尾数最高位规定为1,负数的尾数的最高位规定为0,这种形式的浮点数为规格化数(又称浮点操作数)。
运算之前所有的浮点数都应转成规格化数。
*************************************************************★ IEEE-754标准的格式:一个浮点数用两个部分表示,尾数和2的幂,尾数代表浮点上的实际二进制数,2的幂代表指数,指数的保存形式是一个0到255的8位值,指数的实际值是保存值(0到255)减去127,一个范围在-127到+128之间的值,尾数是一个24位值(代表大约7个十进制数),最高位MSB通常是1,因此省略不保存,一个符号位表示浮点数是正或负。
地址 eb BY0 BY1 BY2内容 SEEEEEEE E.MMMMMMM MMMMMMMM MMMMMMMMS (第31位)代表符号(数符)位1是负,0是正;E 偏移127的幂,二进制阶码=(EEEEEEEE)-127;. 小数点;M 24位的尾数保存在23位中,只存储23位,隐含最高位1。
此方法用最较少的位数实现了较高的有效位数,提高了精度。
零是一个特定值,幂是0 尾数也是0。
阶码的计算方法:阶码采用指数的移码,阶码= 指数P+7FH阶码(移码)eb=指数P+7FH其中:指数P=int(Z),Z=ln(A)/ln(2)由1位符号位、8位指数、23位有效数组成。
PIC单片机C语言指南
PIC单片机C语言指南第一部分为了对PIC单片机有更好的支持,PICC在标准C的基础上作了一些扩充:z定义I/O函数,以便在你的硬件系统中使用中定义的函数。
z用C语言编写中断服务程序z用C语言编写I/O操作程序z C语言与汇编语言间的接口1-1 与标准C的不同PICC只在一处与标准C不同:函数的重入。
因为PIC单片机的寄存器及堆栈有限,所以PICC不支持可重入函数。
1-2 支持的PIC芯片PICC 支持很多PIC单片机,支持PIC单片机的类型在LIB目录下的picinfo.ini文件中有定义。
1-3 PICC 包含一些标准库1-4 PICC 编译器可以输出一些格式的目标文件,缺省设置为输出Bytecraft的'COD' 格式和 Intel的'HEX'格式。
你可以用表1-1中的命令来指定输出格式。
表1-1格式名称描述PICC 命令文件类型Motorola HEX S1/S9 type hex file -MOT .HEX Intel HEX Intel style hex records(缺省) -INTEL .HEX Binary Simple binary image -BIN .BIN UBROF Universal Binary Image Relocatable Format -UBROF .UBR Tektronix HEX Tektronix style hex records -TEK .HEX American Hex format with symbols for American -AAHEX .HEX Automation HEX Automation emulatorsBytecraft .COD Bytecraft code format(缺省) n/a(缺省) .COD Library HI-TECH library file n/a .LIB1-5 符号文件PICC -G 命令用于生成符号文件,有了符号文件,你就可以进行源程序调试.命令格式为:PICC -16F877 -G test.c在使用仿真器时必须使用-G命令。
plc中浮点数表示方法
plc中浮点数表示方法1.引言1.1 概述概述部分的内容可以包括对PLC(可编程逻辑控制器)以及浮点数的基本概念进行介绍。
概述:在现代工业自动化领域,PLC(可编程逻辑控制器)是一种广泛应用的控制设备。
它通过编程控制电气和电子设备,实现对工业过程的监控、控制和自动化。
其中,浮点数是PLC中常用的一种数据表示方法。
浮点数是一种表示实数的数学概念,它由两部分组成:尾数和指数。
尾数用来表示一个实数的有效数字,而指数则表示放大或缩小的倍数。
在计算机中,浮点数采用一种标准的表示方法,即IEEE 754标准。
这种表示方法能够有效地处理各种精度和范围的实数值。
在PLC中,浮点数表示方法十分重要。
它在工业自动化中广泛应用于数据的存储、传输和运算等方面。
通过使用浮点数表示方法,PLC可以更精确地处理各种测量值和计算结果,提高控制系统的准确性和稳定性。
本文将详细介绍浮点数的表示方法以及在PLC中的应用。
首先,我们将阐述浮点数的基本概念和表示方法。
然后,我们将重点介绍PLC中浮点数表示的特点和技术要点。
最后,我们将总结本文内容,并展望浮点数在PLC控制系统中的未来发展。
通过对浮点数的概述和PLC中的应用进行深入研究,我们可以更好地理解和应用PLC中浮点数表示方法,从而提高工业自动化系统的效率和可靠性。
1.2 文章结构文章结构部分的内容应该包括对整篇文章的组织和布局的介绍。
下面是一个可能的写作示例:在本文中,我们将探讨PLC(可编程逻辑控制器)中浮点数的表示方法。
本文共分为三个部分组成。
首先是引言部分,其中我们将概述本文的主题,并介绍文章的结构和目的。
其次是正文部分,我们将解释浮点数的一般表示方法,并探讨在PLC中如何表示浮点数。
最后是结论部分,我们将总结本文的主要观点和发现,并展望未来在PLC中浮点数表示方法的发展。
在引言部分,我们将简要介绍PLC和浮点数的基本概念。
我们将解释什么是PLC,它在工业自动化领域中的重要性以及浮点数在控制系统中的作用。
c51单片机浮点数及其汇编程序设计
c51 单片机浮点数及其汇编程序设计
在单片机应用系统的数据处理过程中,经常会遇到小数的运算问题,如求解BCD 的增量算式、线性化处理等。
因此,需要用二进制数来表示小数。
表示小数的方法一般有两种,定点数和浮点数。
定点数结构简单,与整数的运算过程相同,运算速度快。
但随着所表示数的范围的扩大,其位数成倍增加,给运算和存储带来不便,而且也不能保证相对精度不变。
浮点数的结构相对复杂,但它能够以固定的字节长度保持相对精度不变,用较少的字节表示很大的数的范围,便于存储和运算,在处理的数据范围较大和要求精度较高时,采用浮点数。
浮点数的概念
常用的科学计数法来表示一个十进制数如
l234.75=1.23475E3=1.23475 乘以103
在数据很大或很小时,采用科学计数避免了在有效数字前加0 来确定小数点的位置,突出了数据的有效数字的位数,简化了数据的表示。
可以认为,科学计数法就是十进制数的浮点数表示方法。
在二进制效中,也可以用类似的方法来表示一个数,如
1234.75=10011010010.11(二进制)=0.1001101001011 乘以211。
单片机浮点数(二)
单片机浮点数(二)引言概述:本文旨在介绍单片机的浮点数运算(二)方面的知识。
浮点数运算在单片机应用中具有重要的地位,可以实现复杂的数值运算和精确的数据处理。
在本文中,我们将详细介绍单片机浮点数运算的相关概念、实现方法和应用场景。
读者通过本文的学习,将能够更好地理解和运用单片机的浮点数运算功能。
正文:一、浮点数的概念与表示方法1.1 浮点数的定义及特点1.2 浮点数的表示方法1.3 整数与浮点数的相互转换1.4 浮点数的正负表示与运算规则1.5 浮点数运算的精度问题二、浮点数的加减法运算2.1 浮点数的二进制加法运算2.2 浮点数的二进制减法运算2.3 超尾与规格化处理方法2.4 浮点数的加减法运算实例2.5 浮点数加减法运算的误差分析三、浮点数的乘法运算3.1 浮点数的二进制乘法运算3.2 小数部分的对齐与进位处理3.3 浮点数的乘法运算实例3.4 浮点数乘法运算的误差分析3.5 浮点数乘法运算的应用案例四、浮点数的除法运算4.1 浮点数的二进制除法运算4.2 小数部分的对齐与余数估算4.3 浮点数的除法运算实例4.4 浮点数除法运算的误差分析4.5 浮点数除法运算的应用场景五、浮点数运算的性能优化与应用案例5.1 浮点数运算的性能优化方法5.2 浮点数运算在机器人控制中的应用5.3 浮点数运算在图像处理中的应用5.4 浮点数运算在信号处理中的应用5.5 浮点数运算在科学计算中的应用总结:通过本文的介绍,我们了解了单片机浮点数运算的概念、表示方法和运算规则。
同时,我们学习了浮点数的加减法、乘法和除法运算,并掌握了相应的实例和误差分析方法。
最后,我们进一步讨论了浮点数运算的性能优化方法和应用案例。
希望本文对读者在单片机浮点数运算方面的学习和应用提供了一定的帮助。
PIC单片机的浮点数及其与十进制数之间的相互转换
摘要重点说明浮点数的格式,十进制数与浮点之间的相互转换以及程序设计。
在我们设计的仪表中采用PIC系列单片机,碰到了浮点数的运算问题,查阅其有关资料发现,其浮点数的格式及其与十进制数之间的转换,与我们常用的MCS-51单片机所提供的三字节、四字节浮点数完全不同,本文将说明其浮点数的格式及其与十进制数之间的转换和程序设计步骤。
1 浮点数的格式Microchip公司单片机所采用的浮点数格式是IEEE-754标准的变异型。
32位浮点数格式为:其中:×表示一位二进制数0或1;eb 为指数的偏差;S为浮点数的符号位,S=0为正数,S=1为负数;小数点“·”在符号位S的右边;BY0 BY1 BY2为尾数的小数部分。
应特别注意:⑴浮点数隐含其整数部分为1。
⑵十进制数0 的浮点数表示为00H,00H, 00H, 00H。
2 浮点数与十进制数之间的相互转换2.1 十进制数转换成浮点数设:十进数为A,则2Z=A,Z= lnA/ln2,指数P=int(z);尾数部分X: X=A/2P, 其整数部分隐含为1(零除外),将其小数部分按原码格式化为二进制数,即为尾数的小数部分BY0 BY1 BY2。
而指数偏差eb=P+7FH(其中的7FH 为指数的偏移量)。
符号位S,视十进制数的正负而确定。
例如十进制数50.265化为32位规格化浮点数:A=50.265,则Z=ln50.265/ln2,P=int(Z),故P=5; X=A/2P=50.265/25=1.57078125,将0.57078125化为23位二进制小数,即是BY0 BY1 BY2,在最高位添上十进制数的符号位S(因十进制数为正数,故S=0);而eb=P+7FH,所以,十进制数50.265的32位规格化浮点数即为84H,49H,0FH,5CH。
2.2 浮点数转换为十进制数设浮点数为 eb S.BY0 BY1 BY2。
由于浮点数隐含尾数的整数为1,故尾数X的实际值为:BY0 BY1 BY2;指数P=eb-7FH;故:十进制数A=(-1)S×2P×X例:32位规格化浮点数84H,49H,0FH,5CH转换为十进制数。
PIC单片机浮点数格式与十进制数之间的转换及程序设计
PIC单片机浮点数格式与十进制数之间的转换及程序设
计
一、PIC单片机浮点数格式
PIC单片机浮点数格式是一种特殊的数字表示方法,用于表示实数的值。
PIC浮点数的特点是共有32位,分为3个部分:阶码(exponent)、尾数(mantissa)和符号位(sign-bit)。
阶码表示整数偏移量,尾数是
浮点值,符号位用于表示数的正负值。
阶码的位数=8 bit
尾数的位数=23 bit
符号位的位数=1 bit
二、十进制数与PIC单片机浮点数之间的转换
Sign * (1+Mantissa/2^23) * 2^(Exponent-127)
其中,Sign是符号位,Mantissa是尾数,Exponent是阶码。
十进制数转换成PIC浮点数时,可以按照下面的公式实现:
Sign * Integer part * 2^(Exponent-127) + Sign * Fractional part * 2^(Exponent-127)
其中,Sign是符号位,Integer part是整数部分,Fractional part
是小数部分,Exponent是阶码。
三、PIC单片机程序设计
程序设计要从以下几个方面入手:
(1)确定程序的目标,即确定要实现的功能;
(2)选择数据类型,如浮点数、整数以及字符串,然后将它们定义成变量;
(3)选择正确的算法;
(4)编写程序。
单片机浮点数
单片机浮点数
单片机浮点数在处理实数运算时非常有用。
浮点数是一种可以表示小数的数,它的特点是小数点的位置可以随着数字的位数进行移动,从而表示不同的大小。
单片机中的浮点数通常是32位的,即每个浮点数占用4个字节的空间。
在单片机中,浮点数运算可以通过硬件或软件实现,具体取决于单片机的架构。
在一些高端的单片机中,还可以支持双精度浮点数的运算,这种浮点数占用8个字节的空间。
需要注意的是,在单片机中使用浮点数会占用较多的资源,因此在一些资源受限的应用中,应尽可能避免使用浮点数。
单片机浮点乘除法优化措施及防止分子数据溢出
单⽚机浮点乘除法优化措施及防⽌分⼦数据溢出单⽚机以性价⽐为特点,随着能源⾏业的发展,单⽚机在数字能源中的运⽤越来越⼴泛。
最近学习了如何低端机上实现浮点运算。
1、前⾔⽬前,⼤多数的单⽚机不具有浮点运算单元(FPU)。
TI公司的tms320f28335具有FPU,但是在进⾏⼀个浮点除法运算时,需要1.5us的时间,这在实时控制系统中是不太能接受的。
不具有浮点运算的单⽚机,需要将浮点运算转换为可以接受的整形运算。
2、整形运算概述单⽚机主要分为8位机、16位机和32位机,使⽤最多的就是16位机。
16位机中变量类型 int 是16位的,也就是说:16位机使⽤16位的0或者1组合表⽰数据。
32位机中变量类型 int 是32位的,也就是说:32位机使⽤32位的0或者1组合表⽰数据。
3、浮点数的近似转换在单⽚机中,浮点数乘除运算可以近似⽤乘以⼀个整数然后除以2的n次⽅表⽰。
例如:0.25 = 1 >> 2;0.5 = 1 >> 1;0.75 = 3 >>2;其他的浮点数以此类推。
⼀个浮点数可以有多种近似替换的⽅案,每种替换⽅案的精度不⼀样。
⽐如:0.8 可以近似等于3>>2(0.75),也可以近似等于13>>4(0.8125);明显可以看到,使⽤13>>4替换0.8⽐3>>2的精度要⾼些。
但是前者更容易造成数据位溢出。
4、防⽌数据溢出步骤三的转换也是有前提条件的:变量乘了整数后防⽌数据超过最⼤值。
如果整形变量是16位的,那么它乘以⼀个数后,它也必须是16位的,不能超出原有变量的数据类型的范围。
下⾯测试案例://定义变量类型unsigned int a;unsigned int b;unsigned long c;unsigned int d;//测试⽅法a = (1024*1024)>>10;b = ((long)(1024*1024))>>10;c = (1024*1024)>>10;d = __builtin_muluu(1024,1024)>>10;//编译警告Test.c:101:15: warning: integer overflow in expressionTest.c:102:21: warning: integer overflow in expressionTest.c:103:14: warning: integer overflow in expression//调试变量结果a = 0b = 0c = 0d = 1024在16位单⽚机的C编译器的作⽤下,由上⾯的测试结果显⽰,仅仅只有第四种输出正确结果。
pic18单片机变量声明
pic18单片机变量声明pic18单片机是一种常用的嵌入式系统开发平台,它具有高性能、低功耗和易于编程的特点,被广泛应用于各种电子设备中。
在pic18单片机编程中,变量的声明是非常重要的一项基本操作,它不仅能够定义变量的类型和名称,还可以为变量分配存储空间,并且可以进行初始化操作。
在pic18单片机中,变量的声明是通过使用关键字来实现的。
常用的关键字包括“char”、“int”、“float”和“bit”等。
这些关键字可以用来定义不同类型的变量,分别用于存储字符、整数、浮点数和位变量。
例如,可以使用“char”关键字来声明一个字符变量,如下所示:char ch;这样就定义了一个名为“ch”的字符变量。
同样地,可以使用“int”关键字来声明一个整数变量,如下所示:int num;这样就定义了一个名为“num”的整数变量。
除了基本的数据类型外,pic18单片机还提供了一些特殊的数据类型,如“bit”和“float”等。
其中,“bit”是一种用于表示位的数据类型,它只能存储0或1的值。
例如,可以使用“bit”关键字来声明一个位变量,如下所示:bit flag;这样就定义了一个名为“flag”的位变量。
另外,pic18单片机还提供了“float”关键字,用于声明浮点数变量。
例如,可以使用“float”关键字来声明一个浮点数变量,如下所示:float f;这样就定义了一个名为“f”的浮点数变量。
除了类型的声明外,变量的名称也是非常重要的。
在pic18单片机编程中,变量的名称应该具有一定的规范性和描述性,以便于程序的阅读和维护。
通常情况下,变量的名称应该由字母、数字和下划线组成,并且不能以数字开头。
例如,可以使用以下命名规则来定义变量的名称:- 变量名由一个或多个字符组成,可以使用字母、数字和下划线。
- 变量名不能以数字开头。
- 变量名区分大小写。
- 变量名不能与关键字相同。
在pic18单片机编程中,变量的声明可以包含初始化操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最后应该指出,本文所述32位浮点数,精度相当于7位十进制数;32位浮点数运算程序在Microchip公司提供的有关资料中均有,但是,在调试其浮点子程序时,发现0减0的结果为00H,80H,00H,00H,而不是00H,00H,00H,00H,编程时应注意。
4 结语
本文中的十进制数与浮点数之间相互转换的程序设计,在智能化仪表的键盘置数及数据显示中,具有实用价值。这里提出了一种设计思路,没有复杂的算法,程序设计亦较简单,工作量较少,可利用Microchip公司提供的现成子程序实现十进制整数与二进制整数的相互转换,十进制小数与二进制小数的相互转换。
1 浮点数的格式
Microchip公司单片机所采用的浮点数格式是IEEE-754标准的变异型。32位浮点数格式为:
其中:×表示一位二进制数0或1;eb为指数的偏差;S为浮点数的符号位,S=0为正数,S=1为负数;小数点“·”在符号位S的右边;BY0BY1BY2为尾数的小数部分。
例如十进制数50.265化为32位规格化浮点数:A=50.265,则Z=ln50.265/ln2,P=int(Z),故P=5;X=A/2P=50.265/25=1.57078125,将0.57078125化为23位二进制小数,即是BY0BY1BY2,在最高位添上十进制数的符号位S(因十进制数为正数,故S=0);而eb=P+7FH,所以,十进制数50.265的32位规格化浮点数即为84H,49H,0FH,5CH。
2.2 浮点数转换为十进制数
设浮点数为ebS.BY0BY1BY2。由于浮点数隐含尾数的整数为1,故尾数X的实际值为:
BY0BY1BY2;指数P=eb-7FH;故:十进制数
A=(-1)S×2P×X
例:32位规格化浮点数84H,49H,0FH,5CH转换为十进制数。
符号位S=0;指数P=84H-7FH,故P=5;尾数的小数部分为49H,0FH,5CH左移一位,而尾数的整数部分隐含为1,故尾数X的实际值为:1.57078123;十进制数A=(-1)0×25×1.57078123,即A=50.265。
3 浮点数与十进制数相互转换的程序设计
3.1 浮点数转换为十进制数的程序设计
(1)检测浮点数是否为零;若为零,则十进制数整数部分和小数部分均为零。
(2)保存浮点数的符号位,将浮点数隐含的1置于浮点数的符号位,指数偏差eb加1,小数点移到原浮点数的符号位之前。
(3)判断指数偏差大于7FH否?若小于等于7FH,则该进制数整数部分为零,浮点数尾数部分右移n次(注:n=7FH-指数偏差eb),即求得二进制小数部分。若大于7FH,则将小数点右移n’次(注:n’=指数偏差eb-7FH),即求得二进制整数部分和小数部分。
PIC单片机浮点数格式及其与十进制数之间的转换和程序设计步骤时间:2010-08-16 23:01:50 来源: 作者:在我们设计的仪表中采用PIC系列单片机,碰到了浮点数的运算问题,查阅其有关资料发现,其浮点数的格式及其与十进制数之间的转换,与我们常用的MCS-51单片机所提供的三字节、四字节浮点数完全不同,本文将说明其浮点数的格式及其与十进制数之间的转换和程序设计步骤。
应特别注意:
⑴浮点数隐含其整数部分为1。
⑵十进制数0的浮点数表示为00H,00H,00H,00H。
2 浮点数与十进制数之间的相互转换
2.1 十进制数转换成浮点数
设:十进数为A,则2Z=A,Z=lnA/ln2,指数P=int(z);尾数部分X:X=A/2P,其整数部分隐含为1(零除外),将其小数部分按原码格式化为二进制数,即为尾数的小数部分BY0BY1BY2。而指数偏差eb=P+7FH(其中的7FH为指数的偏移量)。符号位S,视十进制数的正负而确定。
(3)将浮点数的指数偏差eb置为7FH+23,检测二进制整数的最高位是否为1,不是,则将二进制整数和二进制小数联合左移,左移一次,指数偏差减1,直至二进制整数的最高位为1;隐含尾数整数的1,将二进制整数的最高位改为数的符号位。至此,指数偏差eb单元及原二进制整数的三个单元中的内容,即构成四字节浮点数。
(4)将二进制整数部分转换为十进制整数;将二进制小数部分转换为十进制小数。至此,完成了浮点数到十进制数的转换。
3.2 十进制数转换为浮点数的程序设计
(1)检测十进制数是否为零,若为零,则浮点数置成00H,00H,00H,00H。
(2)保存十进制数的符号位,将十进制数的整数部分转换为二进制整数,将十进制数的小数部分转换为二进制小数(设二进制整数为三个字节,二进制小数为两个字节)。