单片机:为什么C51中不大用int型数据,而大多使用char型

作者&投稿:岑伟 (若有异议请与网页底部的电邮联系)
为什么单片机上流水灯的编程定义用char型不用int型~

呵呵,这么简单的一个问题,回答居然五花八门……。那我也来凑凑热闹吧。
首先,并不确定你的定义是指什么定义,不过应该是指“显示寄存器”的定义吧,以后提问最好能把你的代码贴出来,这样更方便网友的解答。
现在假设你指的就是“显示寄存器”的定义。那可以明确的说,这里考虑的就是内存占用。这里一楼的说法差不多正确,不过int的占用的字节数要与你所用的单片机相关,51单片机int是占用2个字节,也就是16位,其它单片机则不一定。
我这里主要是想谈谈三楼说的那几点。单片机的“显示寄存器”的定义的确一般常用“usingned char”,但这并不代表char不能用。有无符号数主要体现在计数过程中的取值范围有所不同,而流水灯这种程序并没有涉及到这一方面。
还有int类型也是同样的道理。就以51为例,int是16位的数据照样可以传递给8位的P口!只不过高8位自动丢掉了而已!
最后,楼主可能也是单片机初学者吧。像这种简单的问题,你完全可以自己调调,把类型改改自己看看结果不是更好?学单片机不动手是不行的。现附上自己刚刚写的一段程序,你可以自己调调。“显示寄存器”就用的int类型。(当然并不推荐这么定义)

#include
void delay(int x) //延时函数
{
for(;x>0;x--);
}
void main()
{
int n ; //显示寄存器(不知道你说的定义是否指这里)
char i; //循环数
while(1)
{
n = 0xfe;
for(i=8;i>0;i--)
{
P1 = n; //将显示寄存器输出到LED端口
n = (n<<1)+1; //将显示寄存器数据左移1位,并将第一位置高,即熄灭
delay(6000); //延时
}
}
}

大约就以下4种:无符号字符型:0-255  8位有符号字符型:-128-127  8位无符号整型:  0-65535  16位有符号整型:-32768-32767 16位当然还有位变量: 只有1位 0和1其余不常用:有符号长整型 32位  无符号长整型 32位浮点型  32位   同是32位,但表示的数值范围比长整型大得多双精度浮点型  64位 8位单片机的噩梦,不敢定义太多此类变量,很容易      出现内存不足情况,计算速度也慢80c51和其它8位单片机都是这样规定的但32位单片机系统中整型就是32位

二楼的也有说的不全的地方。
我继续补充。呵呵
51用char不是因为51ram少,是因为它是8位单片机,单字节处理会快些。
int的长度和程序的编译器有关,不同单品机的编译器依旧其单片机类型会调整int长度,所以short才是真正意义上的16位。

一楼的也有说错的
char是一个字节没错
可是int就多了,在430中2个字节,在arm中4个字节,甚至还有处理器是8个字节的
所以定义int型的最好不用,而用short定义2个字节,long定义4个字节.
51中的ram比较少,所以尽量用char型的,还有更重要的是51对char型操作最快.
但是在一些arm中,就没有必要那样计较了,我基本都用int型的
-------------------
3楼的,我的那个更重要的后面的话已经说了,呵呵.

int 和 char 怎么能是等价的呢?
int俩个字节
char一个字节
定义变量类型够用就行,多了浪费本来就不富裕的存储空间。


单片微型计算机原理和应用目录
第6章:探讨串行接口,包括串行通信基础知识、串行口控制和多机通信原理。第7章:讲解中断系统,包括中断概述、MCS-51中断管理系统及其应用。第8章至第10章分别涉及系统扩展、接口技术、C语言编程等方面,展示了单片机的实际应用和高级编程技巧。附录部分提供了ASCII码表、单片机位地址表、指令表、C51库函...

p43-c51主板上呢个红色方块是啥
这个不是红色方块,而是散热片,下面压着芯片,给芯片散热用的。散热片是一种给电器中的易发热电子元件散热的装置,多由铝合金,黄铜或青铜做成板状,片状,多片状等,如电脑中CPU中央处理器要使用相当大的散热片,电视机中电源管,行管,功放器中的功放管都要使用散热片。一般散热片在使用中要在电子...

单片微型机原理、应用与实验内容简介
《单片微型机原理、应用与实验》(第五版)是在前四版——1992年、1996年、2000年和2003年的基础上,针对单片机基础教学的最新修订。这次修订大幅度调整了内容和习题,以适应教学需求。全书分为十章,以其核心产品AT89C52为依托,全面详尽地讲解了单片机的系统结构、指令系统以及汇编语言和C51编程方法。深...

一个很简单的delay延时小函数,有点小问题,请C51高手帮忙!
这是c的编译规则的问题。对于int型7FFF次是可直接执行的 因为不管你定义的是什么型,对于1个循环跳转次数来说都是0-255是单跳转 0-7fff是2个跳转嵌套,16位数的最高位是符号的。这里不管i是什么型 对于循环就是把i的值带入入口而已。通常做软循环不建议用INT的变量因为太不好就算了 而且切效率低...

单片微型机原理、应用与实验目录
单片微型机原理、应用与实验目录概述 本课程内容分为多个章节,详细介绍了单片机的基础知识、典型产品、系统结构、指令系统,以及实际应用和实验。第1章起始,概述了计算机和微计算机的概念,重点介绍了单片机和嵌入式系统的特性和基本构成。接着,深入讲解了单片机中数的表示方法,包括数制转换、BCD码和ASC...

我要买单片机...
64K字节的内部程序存储器、2-8K字节的ISP引导码、除P0-P3口外还多P4口(PLCC封装)、片内自带8路8位 AD(AD系列),片内自带EEPROM、片机自带看门狗、双数据指针等。目前STC公司的单片机在国内市场上的占 有率与日俱增,有关STC单片机详情请查看www.stcmcu.com. TX系列单片机开发板可完全做为各种51...

单机片和单片机有什么区别
2、4位单片机,是比较简单的单片机,一半在玩具或对功能和性能要求不高,对成本要求比较低的地方用,现在很少用了。一般5-8个脚。DIP和SO封装都有。3、种类不同:51系列单片机是指51内核,stc89c5X基本都是51内核的种类。大小不同:最后一个数字表示E2prom的大小,E2prom=X*4K,c51就是4K,c52...

求数字稳压电源 用c51单片机做的。要求从键盘输入所需的电压并使用8位...
程序代码是很麻烦的事情,尤其你这设计还涉及了键盘输入、LED扫描输出、DAC转换三个方面。键盘输入、LED扫描输出的代码,很多地方有例子,自己研究改动一下应该就能用;我认为,DAC输出直接到U2B就可以,不需要U2A;如果需要单片机测量电压,还需要ADC,推荐使用STC12C5410ADC,国产片,便宜,51指令。

有关单片机的分类,型号的种种疑问
呵呵,一楼二楼四楼说的对,三楼有漏洞,五楼就是一派胡言。就我用过的一些单片机,做一下介绍吧。因为不同厂家不同内核不同位数,单片机的型号也是不同的。比如国内用的多的是国产宏晶的STC系列的单片机,因为学校教学使用的比较多。STC系列的全部都是51内核的,8位机,有STC89系列,STC12、STC...

MCS-51单片机原理及应用技术教程的图书目录
5单片机中使用的数制及常用的语言习题第2章MCS-51单片机的硬件结构2.1MCS-51单片机的硬件组成2.1.1MCS-51单片机硬件结构图2.1.2MCS-51单片机的引脚信号2.2MCS-51单片机的微处理器2.2.1运算器2.2.2控制器2.2.3CPU时序2.3MCS-51单片机存储器2.3.1片内RAM结构及其地址空间分布2.3.2...

丰满区15888479148: 单片机:为什么C51中不大用int型数据,而大多使用char型 -
广征高三: 一楼的也有说错的 char是一个字节没错 可是int就多了,在430中2个字节,在arm中4个字节,甚至还有处理器是8个字节的 所以定义int型的最好不用,而用short定义2个字节,long定义4个字节. 51中的ram比较少,所以尽量用char型的,还有更重要的是51对char型操作最快. 但是在一些arm中,就没有必要那样计较了,我基本都用int型的 ------------------- 3楼的,我的那个更重要的后面的话已经说了,呵呵.

丰满区15888479148: 为什么C51常用unsigned char而不用unsigned int -
广征高三: 一个最主要的原因就是51单片机大多都内存比较小,使用char比int占用内存小,而且51是8位单片机,在数据未溢出的情况下,使用8位数据比16位数据速度更快!

丰满区15888479148: 请问单片机89C51中C语言int和char类型跟占用多少字节?谢谢 -
广征高三: 对于该款单片机,int类型的变量占据2个字节,char类型的占据1个字节.不过一般大家为了节约空间,大部分会使用char类型,同时89C51是一款8位的单片机,所以推荐使用char类型的变量进行运算,即使我们在代码中写入int类型的变量进行运算,也是编译器编译成为了8位的运算模式进行运算的.体现不了硬件的优势.

丰满区15888479148: 单片机编程中经常使用unsigned char这个数据类型?而且还用它来保持整数,为什么不使用int 来保存整数呢
广征高三: 因为单片机的内存小, unsigned char是一个字节,int比前者占空间大,而很多情况下,一个字节来定义变量已经足够使用,比如只要变量大小在0~255之间时,用unsigned char占一个字节,用int虽然也可以囊括0~255,但是占的内存空间就很大.为了节约内存,所以就经常使用unsigned char

丰满区15888479148: 为什么单片机上流水灯的编程定义用char型不用int型 -
广征高三: char 和 int 最大的区别是占用内存大小不同 char 占用一个字节 也就是8位 int 占用四个字节 如果你的程序用不到长度那么大的变量,就用占用内存小的变量,势必单片机的ram是有限的,开辟的空间越小,运行速度就越快!

丰满区15888479148: 51单片机中C语言int能转换为字符串类型吗?怎么转换? -
广征高三: 因为是C51, 所以不能用 VC++里面的C语言代码 eg: itoa, 也不要用打印的 eg: sprintf 为什么? 因为C51的内存太小 ,如果这样用非常占用资源. 下面的朋友回答就显得不够专业了.所以, 一般我们是这样自己写代码使用实现的: 字符串改为数组的形式 unsigned char dat[5]; dat[4]=Num/10000+'0';dat[3]=Num%10000/1000+'0'; dat[2]=Num%1000/100+'0'; dat[1]=Num%100/10+'0'; dat[0]=Num%10+'0'

丰满区15888479148: C51编程 定义char和int的问题 -
广征高三: 读写DS18B20的时候,时序,非常重要,差了几个微秒,就会失败.51单片机,是8位机,进行uchar型(8位数)的数据处理,耗时很短,进行uint型(16位数)的数据处理,耗时就很长,比处理两...

丰满区15888479148: 单片机中编程为甚么很多都用 unsigned int ,和int有什么区别? -
广征高三: 区别unsigned int 可以是0~65535 而int可以-32768~35767.为什么要用unsigned int ,原因1、单片机用到了多数是正整数.2、听说unsigned int比int更不...

丰满区15888479148: 51单片机的默认优先级是INT0>IT0>INT1>IT1>PS 但是为什么在使用的时候好像不起作用啊!要使用IP进行重设 -
广征高三: 你的理解有误,此优先级非彼优先级.所谓INT0>IT0>INT1>IT1>PS是指当多个中断同时发生时的处理顺序.IP所能设置的优先级是用于中断嵌套的判定,高优先级中断可以中断低优先级的中断,实现中断嵌套.

丰满区15888479148: 51单片机为什么按int1键没反应?按int0正常,设计要求是按下后相应LED灯X会闪5下 -
广征高三: 程序修改如下:#include<reg52.h> void Delay10ms(unsigned int); sbit X=P2^0; sbit Y=P2^1; unsigned int i; int K; void main() {EA=1; EX0=1; IT0=1; EX1=1; IT1=1; X=1; Y=1; i=10; while(1) { switch(K) { case 1: for(i;i>0;i--) { Delay10ms(10); X=~X;} ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网