1.尽可能让变量使用占用代码空间最小的变量类型。例如无符号字符型和位操作(8051作为一款8位处理器提供了位操作支持,而且大多数操作指令都是8位或者位操作的通常用小的数据类型去编写代码其效率更高)
2.尽可能使用无符号类型数据(8051单片机不直接支持有符号的数据类型,有符号的操作需要额外的指令来支持,但是无符号的数据类型是直接就能被8051支持的)
3.尽可能选择小的存储模式即small(绝大多数的应用采用small存储模式都能满足,也可以选择large存储模式,将一些数组和结构体存入xdata或者pdata存储空间的话选择极大存储模式,注意的是keil c51实时库使用的基本指针可以工作在任何存储模式)
4.当应用其他存储模式的时候尽可能将变量存储在data区域内(将变量存储在data空间里,这部分空间单片机可以直接访问,据有最高的执行效率,通常这个区域存储的是最有效率的代码)本地图片,请重新上传
5.要知道如何在你的设备上使用PDATA存储模式(pdata提供的256字节的空间,使用MOVX @Ri指令访问8位地址,pdata存储空间的使用不同于8051单片机内部的设备,需要设置页寄存器。Xdata 存储类型是通用的能达到的最大的存储空间64kb)
6.尽可能使用内存类型的指针(默认的,keil c51编译器使用通用指针可以访问任何类型的内存空间,内存型的指针只能访问固定的存储空间,但是这种方式能够产生更快更小的程序代码)
7.减少使用重入函数(8051系列缺乏对堆栈变量的支持,重入函数的实现通过keil c51 编译器使用一个编译时间的堆栈对内存范围内的数据内容的覆盖实现的,重入函数在8051单片机上模拟出堆栈的结构。由于在嵌入式应用很少会用到重入函数代码,但是你在设计的过程中应尽可能的少用这种重入属性)
8.使用LX51 Linker/Locate 和Linker code packing来减少程序的体积。(LX51 Linker/Locate分析并且优化你的整个程序。代码将会在内存中重新排列,最大限度的使用2字节的AJMP和ACALL指令来代替3字节的LJMP和LCALL指令。Linker code packing利用通用代码段生成子程序)
9.尽量保持短的中断函数(结构好的的中断函数仅仅是执行数据的获取或者是计时,数据的处理是在主函数或者实时系统的任务函数中完成,这样可以有效的降低涉及保存/存储的中断函数的调用)
10.检查对于时钟周期的需求(代码访问数据需要一定的周期,尤其是在实时系统中使用多个线程或者中断服务程序中需要在主函数中)
关键字:51单片机 开发原则
引用地址:
51单片机开发原则
推荐阅读最新更新时间:2024-03-16 14:03
嵌入式学习笔记13——51单片机之D/A转换器
1. 在很多应用系统中,测控对象是模拟量,单片机只能处理数字量,因此必须进行数字量和模拟量之间的转换。这就需要A/D和D/A转换器件。 2. 假如某D/A可输入8位数字,最高输出5V电压,则输入x,输出电压值为x*(5/256)V。 3. 分辨率是指输入数字量的最低有效位(LSB)发生变化时,所对应的的输出模拟量(电压或电流)的变化量。它反映了输出模拟量的最小变化值。即,最大输出模拟量/(2^位数)。 4. 线性度(也称非线性误差)是实际转换特性曲线与理想直线特性之间的最大偏差。常以相对于满量程(即最大输出模拟量)的百分数表示。(假设DAC位8位,满量程为5V,则理想直线为连接(0,0V)和(255,5V)之间的直线。 5.
[单片机]
ADC0809与MCS-51单片机接口电路图及编程
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。目前仅在单片机初学应用设计中较为常见。 ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。 主要特性 1)8路输入通道,8位A/D转换器,即分辨率为8位。 2)具有转换起停控制端。 3)转换时间为100μs(时钟为640KHz时),130μs(时钟为500KHz时)。 4)单个+5V电
[单片机]
51单片机学习实践:用NTC电阻测温并显示在TM1637数码管
STC15单片机 实验名称:使用NTC电阻测量温度 实验内容: 使用NTC电阻测量温度并显示在数码管上 读取DS18B20模块测量温度作为参考 实验器材: STC15W408AS_DIP16 x1 DS18B20 x1 TM1637数码管 x1 1%精度 热敏电阻NTC-MF52-103/3435 10K 3435±1 x1 金属膜电阻 1/4W 1% 五色环 10千欧 10K x1 在STC15单片机上使用NTC(10K)电阻测量温度的基本方法: 电压-- 电阻-- 温度 1、先有一个准确且稳定的参考电压,外部可以用TL431A,内部可以使用STC15系列芯片自带的
[单片机]
基于51单片机的太阳能路灯控制系统设计方案
简介:太阳能路灯控制系统:51单片机练手项目,简单可复制。 带太阳能充电功能,oled显示, 白天根据光强判断开关灯晚上开灯,二级菜单可以设置时间日期。 太阳能充电:传统锂电池充电芯片TP4056,使用6V太阳能板,给3.7V18650电池充电。 经过资料显示 18650电池尽量不要让其电压低于2.7V,所以后级供电电路(5V升压电路)MT3608启动引脚EN脚 连接了LM393制成的电压比较器。和电池电压比较,电池电压低于2.7v,MT3608启动脚拉低关断。 供电:使用升压芯片MT3608给单片机供电,让电池电压稳定在5.1V,来提供稳定电压。 #include reg52.h #include oled.h #i
[单片机]
51单片机(十五)—— 定时器模块介绍
STC89C516单片机内部有3个16位可编程的定时器/计数器,即定时器T0、T1和T2。它们既有定时又有计数功能。通过设置相关的特殊功能寄存器可以选择启动定时功能或计数功能。需要注意的是,这个定时器系统是单片机内部一个独立的硬件部分,它与CPU和晶振通过内部控制线连接并相互作用。CPU一旦开启定时功能后,定时器便在晶振的作用下自动开始计时,当定时器的计数器计满后,会产生中断,即通知CPU处理。 定时器/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD是定时器/计数器的工作方式寄存器,用来确定T0和T1的工作方式和功能;TCON是控制寄存器,控制T0和T1的启动和停止以及设置溢出标志。T
[单片机]
51单片机加CPLD让系统更高效
一、引言 单片机市场可以用巨无霸来形容,其中51 单片机使用者就更多了,针对51 单片机无需更多的介绍,这里必须强调一点,只要你精通了51 单片机,以后在实际工作中选用其它单片机也很容易了,这就是初学者学习51 单片机的价值。选择51 单片机学习入门容易,倒不是说51 系列单片机比别的型号简单,其实在8 位单片机家族中,51 系列单片机算是复杂的,但51 单片机在中国推广最彻底,教程也是最丰富,基本不用看英文资料就能学好,所以特别适合初学者学习用。 下面说说CPLD,从近来跟学生和爱好者交往中发现,初学者都很“讨厌”它,问我为什么要把单片机和CPLD 放一块儿,那样不是增加了学习的难度吗?其实深入学习单片机后,你就会
[嵌入式]
51单片机如何轻松转型到ARM设计?
看到很多在做电子工程设计的朋友在讨论:51单片机转到ARM该怎样学习?《单片机与嵌入式系统应用》小编为大家找到了这样一位工程师,谈谈他的实际经验~ 我以前一直用的是51,不过一直是C51,对C语言已经有10多年的经验,汇编用的很少,后来因为项目需要转到了ARM。一开始对ARM什么都不懂,看了本《ARM体系结构与编程》也是云里雾里的,但是也许是因为无知者无畏吧,我直接就在MDK中建立一个工程,添加了自带的启动文件,然后做了个main函数,里面一个死循环没有操作任何硬件,居然跑起来了。然后以此为基础,慢慢的开始控制GPIO和串口通信,当时突然发现,我的项目不就是搞搞这些吗?其他的什么运行模式、什么链接寄存器、什么PC寄存器关我
[单片机]
什么是51单片机?又该如何自学51单片机
51 单片机是目前使用最多的单片机之一,那么什么是 51 单片机呢?作为新手,又该如何自学 51 单片机?为帮助大家更好的学习 51 单片机,本文将对这两个问题予以阐述。如果你对 51 单片机具有兴趣,不妨继续往下阅读哦。 一、何为 51 单片机 51 单片机是对所有兼容 Intel8031 指令系统的单片机的统称。该系列单片机的始祖是 Intel 的 8004 单片机,后来随着 Flashrom 技术的发展,8004 单片机取得了长足的进展,成为应用最广泛的 8 位单片机之一,其代表型号是 ATMEL 公司的 AT89 系列,它广泛应用于工业测控系统之中。很多公司都有 51 系列的兼容机型推出,今后很长的一段时间内将占有大量
[单片机]