从业十年,教你单片机入门 第23讲:
不管是以前讲的加法,现在讲的减法,还是未来讲的乘法和除法,我都会强烈建议“请把所有参与运算的变量都转成unsigned long类型”。unsigned long变量是三种数据类型中取值范围最大的数,取值范围可达0到4294967295之间,用了此类型变量的运算,不会轻易导致运算溢出的问题。有细心读者会问,万一数据超过了4294967295怎么办?答:可用BCD码的数组方式进行运算。这种数组运算的方法我在《从业将近十年,手把手教你单片机程序框架》里用了好几个章节跟大家介绍过,初学者暂时不用深入学习它。
变量转换的方法是引入中间变量,有多少个需要转换的变量就引入多少个中间变量,请看下面这个例子。
转换之前:
unsigned int a;
unsigned char x=195;
unsigned long y=101;
a=x-y;
分析:上述公式用到3个变量,其中a和x都不是unsigned long变量,因此需要为它们分别引入中间变量t和s。
转换之后:
unsigned int a;
unsigned char x=195;
unsigned long y=101;
unsigned long t; //引入的中间变量,用来替代a
unsigned long s; //引入的中间变量,用来替代x。
s=0; //s在接收x原数据之前先把高位和低位全部清零。因为s和x的数据宽度不一。
s=x; //接收x原数据,相当于把x转换成unsigned long中间变量。
t=s-y; //此处的t就默认代表了变量a。
本章虽短,但是此方法在实际项目中很重要,大家不可大意。
下节预告:乘法运算的5种常见格式。
关键字:变量 数据类型 单片机
引用地址:
第23节:变量都转换成unsigned long数据类型
推荐阅读最新更新时间:2024-03-16 14:46
ARM单片机阵营再添新军,英飞凌推出Cortex M4单片机
ARM在单片机领域的拓展步伐似乎比在无线领域来得更快。 随着飞思卡尔,Atmel,TI,ST,富士通,NXP等相继推出基于Cortex M4架构单片机之后,前十大单片机厂商中只剩下瑞萨,Microchip以及英飞凌没有采用ARM架构的单片机。 如今,英飞凌也宣布加入ARM阵营,推出基于Cortex-M4的处理器XMC4000系列,这是英飞凌第一次推出ARM系列单片机,英飞凌从上到下都非常重视。此款产品基于90nm制程,全部由英飞凌自己的fab制造。英飞凌工业及多元化电子市场事业部微控制器高级总监Stephan Zizala博士也与近日专程来到亚洲巡回发布此款产品,公司已准备在慕尼黑电子展上大力宣传新品,英飞凌首席执行官Pete
[单片机]
STC系列单片机的PCA/PWM原理
大致工作原理: PCA是一个具有捕获功能的16定时器,高八位TH0,低八位TL0,CCON寄存器控制着定时器的计数与中断请求。 CR=1表示开始计数,CCON最低位加上CMOD的最低位可以控制产生中断。中断的向量是interrupt 7,进和中断时,必须首先将 sbit CCF0 = CCON^0; //PCA 模块0 中断标志, 由硬件置位, 必须由软件清0。软件清0,再进行其它他操作 对于PCA计数阵列的计数频率则由CMOD的低三位控制,可以用此来控制计数频率,如以FOSC或分频计数均可。 每个PCA阵列均有两个模式控制寄存器,CCAPM0或1,它控制着PCA进行何种操作,如捕获,上升沿捕获,高速输出 ,PWM输出,可以
[单片机]
51单片机之lcd1602步进电机控制
#include reg51.h //51芯片管脚定义头文件 #include intrins.h //内部包含延时函数 _nop_(); #define uchar unsigned char #define uint unsigned int #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; char code SST516 _at_ 0x003b; uchar code FFW ={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code REV ={0xf9,0xf8,0xfc,0
[单片机]
STC12系列单片机的空闲模式、休眠模式
1. 空闲模式 空闲模式是指只有单片机不工作的状态。此时CPU无时钟停止工作,但是外部中断、外部低压检测电路、定时器、A/D转换、串行口等仍正常运行。 在空闲模式下,RAM、堆栈指针(SP)、程序计数器(PC)、程序状态字(PSW)、累加器(A)等寄存器都保持原有数据。I/O口保持着空闲模式被激活前那一刻的逻辑状 态。此时单片机所有的外围设备都能正常运行,当任何一个中断产生时,它们都可以将单片机唤醒,单片机被唤醒后,CPU将继续执行进入空闲模式语句的下一条指令。 怎样退出空闲模式? a.中断:任何一个中断的产生都会引起IDL/PCON.0被硬件清除,从而退出空闲模式; b.外部RST引脚复位:将复位脚拉高,产生复位。再
[单片机]
PIC单片机读写DS1302
#i nclude pic.h #define uchar unsigned char #define T_CLK RC3 #define T_IO RC4 #define T_RST RC5 unsigned char TDATA; int js; int Order ; bit sci_sign=0; int buf ; void Get1302(uchar *); void RTInputByte(uchar); uchar RTOutputByte(void) ; void W1302(uchar , uchar ); uchar R1302(uchar); void Set1302(uchar*); void sci
[单片机]
单片机C语言教程(四)
先来简单说说C语言的标识符和关键字。标识符是用来标识源程序中某个对象的名字的,这些对象可以是 语句、数据类型、函数、变量、数组等等。C语言是大小字敏感的一种高级语言,如果我们要定义一个定 时器1,可以写做 Timer1 ,如果程序中有 TIMER1 ,那么这两个是完全不同定义的标识符。标识符由字符 串,数字和下划线等组成,注意的是第一个字符必须是字母或下划线,如 1Timer 是错误的,编译时便 会有错误提示。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。 标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。在C51编译器中,只支持标识符的前 32位为有
[单片机]
51单片机寄存器详解
51单片机的特殊功能寄存器 定时器: 定时方式寄存器TMOD(地址89H); TMOD被分成两部份,每部份4位。分别用于控制T1和T0。 GATE C/T M1 M0 GATE C/T M1 M0 1. M1、M0:定时/计数器的工作方式 1. 工作方式0:13位定时/计数方式(8192)。 2. 工作方式1:16位定时/计数方式(65536)。 3. 工作方式2和工作方式3, 8位的定时/计数方式(256)。 2. 如果C/T为0就是用作定时器,如果C/T为1就是用作计数器。 3. 门控位GATE(GATE=0与INT0无关,GATE=1与INT0有关
[单片机]
51单片机P0口的特性及使用方法解析
一、P0口特性: P0口为三态双向I/O口。对于内部有程序存贮器的单片机基本系统(如定制的8051),P0口可以作为输入/输出口使用,直接连外部的输入/输出设备;也可以作为系统扩展的地址/数据总线口。对于内部没有程序存贮器的单片机(如8031),P0口只能作为地址/数据总线口使用。 1、P0口的输出驱动器中也有一个多路电子开关。输出驱动器转接至口锁动器的Q端时,P0口作为双向I/O口使用。 这时,CPU发来的控制信号为低电平,使输出驱动电路的上拉场效应管T1截止。P0口的锁存器为“1”时,输出驱动器中的两个场效应管均截止,引脚浮空;由于P0口输出电路是漏极开路的电路,必须外接10kΩ拉高电阻才能有高电平输出。而写入“0”时,下
[单片机]