历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2019年02月19日 | 单片机 C51 编程要点总结

2019-02-19 来源:eefocus

1、头文件:#include

 

2、预定义:sbit LED = P1^0// 定义 P1 口的 0 位为 LED

 

注:“P1^0”这个写法,与 A51 不同(A51 是 P1.0),P1 是一组端口,端口号范围 0~7

 

注2:sbit 用于定义 SFR(特殊功能寄存器)的位变量,上例中 LED 作为“全局变量”进行定义

 

注3:以下写法是错误的:

 

sbit code table[ ] = {P1^0, P1^1, P1^2, P1^3};// 想用 table[i] 指定不同的引脚,但这么做会报错

 

sbit table[ ] = {P1^0, P1^1, P1^2, P1^3};            // 考虑到上面可能是 code 关键字使用错误,使用标准 C 数组写法,但这同样是错的

 

3、主函数写法:void main (void)

 

4、数值的表示:

 

P1 = 1111 1111// 二进制

P1 = 0xff 或者 P1 = 0xFF// 十六进制,0x 开头,且数值不分大小写

P1 = 255// 十进制

 

5、定义小数值时,可以使用 unsigned char i,这样 i 的范围为 0~255,作为循环变量比较好用

 

6、左右移位:

 

P1 <<= 2 等价于 P1 = P1 << 2// P1 左移 2 位,左移一位相当于乘以 2

P1 >>= 3 等价于 P1 = P1 >> 3// P1 右移 3 位,右移一位相当于除以 2

 

注:左右移位默认为“逻辑移位”,即无论左移还是右移,空位都补 0

 

7、按位与或:

P1 = P1 & 0x01

P1 = P1 | 0x01

 

8、定义 ROM 表格(就是数据为常量的数组):

 

unsigned char code table[ ] = {0xff, 0xff, 0xff, 0xff};

 

使用:P1 = table[i]

 

注:table[ ] 定义为“全局变量”,上例中 i 的范围为 0~3

 

注2:code 定义的常量存于“代码区”,即 ROM 区,可以节省 RAM 空间

 

9、在使用数码管编程时,假如你正在使用 temp[i] 代表某一个显示字符,突然想显示小数点,可以使用 temp[i] | 0x80,通过“或”运算实现加上小数点……

 

10、如果你用 Keil C51 进行编译,记住一点:它不区分大小写!!!卧槽,今天编程序那个调错啊,就因为一个数组名和一个变量名完全一样,只是大小写不一样罢了,标准 C 我怎么记得这样可以啊……上网一查,卧槽,Keil C51 不区分大小写,准确的说是“连接的时候不区分大小写”,更准确一点就是“具有外部连接的变量区分大小写,内部连接 static 区分大小写”……至少 Keil uVision2 是这样,不知道别的版本是不是,待验证……

 

11、没有 unsigned float x !float 型变量从来没有前边加 unsigned 的语法!

 

12、Keil 编译的程序,main 函数执行完不会停止,会循环执行 main 函数,何解?

 

结论 1:如果主程序中没有 while(1) 这个无限循环,程序走到最后会再次从头开始执行。

 

结论 2:如果主程序有 while(1) 这个无限循环,程序走到最后会一直在这个死循环中运行,不会出现再从头执行的情况。

 

这应该属于 Keil 编译器的 bug,有网友做过实验,表示 Keil 编译后期产生的汇编代码中,结尾有一条 LJMP main,意思就是跳到 main函数重复执行……还有一种说法是 PC 指针溢出,溢出后的地址指向开头,造成继续执行的效果……(博主觉得还是 Keil 的问题,要是Keil 编译器不产生 LJMP main 这种语句,也不会产生循环效应……)

 

不管怎么说,在程序结尾加上 while(1) 能够解决循环执行 main 函数的 bug……


推荐阅读

史海拾趣

思博科技(Cybermax)公司的发展小趣事

为了进一步扩大市场份额,思博科技开始积极拓展国际市场。公司参加了多个国际电子展会,与全球各地的客户建立了联系。同时,思博科技还与国际知名企业展开了合作,共同研发新产品。这些合作不仅提升了公司的技术水平,还为公司带来了更多的商机。在国际市场的拓展过程中,思博科技逐渐成为了全球电子行业的佼佼者。

Datakey Electronics公司的发展小趣事

在环境问题日益严重的今天,绿色环保已经成为电子产品行业的重要发展趋势。Datakey Electronics积极响应国家号召,致力于绿色产品的研发和生产。公司投入巨资研发环保材料和生产工艺,成功推出了一系列符合环保标准的产品。这些产品不仅满足了客户的需求,还为公司赢得了良好的社会声誉。

Brite-Led Optoelectronics Inc公司的发展小趣事

Brite-Led Optoelectronics Inc公司自创立之初,便专注于LED技术的研发与应用。在一次关键的技术突破中,公司成功开发出一种高效、稳定的LED芯片,其亮度与寿命均远超当时市场上的同类产品。这一技术突破迅速为Brite-Led赢得了市场认可,奠定了其在LED行业的领先地位。随着该技术的不断迭代和完善,Brite-Led的产品逐渐广泛应用于照明、显示、背光等多个领域。

GE Sensing ( Amphenol Advanced Sensors )公司的发展小趣事

在电子行业中,产品质量是企业生存和发展的关键。Brite-Led深知这一点,始终将品质放在首位。公司建立了严格的质量管理体系,从原材料采购到生产过程中的每一个环节都进行严格把控。同时,公司还投入大量资源用于产品质量检测和改进,确保每一件产品都能达到客户的高标准要求。正是这种对品质的执着追求,使得Brite-Led在市场上赢得了良好的口碑和信誉。

成都成电硅海公司的发展小趣事

成都成电硅海公司自2009年成立以来,就以其独特的技术创新能力在电子行业中崭露头角。公司创始人李德全深谙半导体行业的技术趋势,带领团队攻克了一个又一个技术难题。在成立初期,公司就成功研发出一款高性能的硅基材料,这一创新不仅打破了国外企业的技术垄断,还为公司赢得了市场的初步认可。

BeagleBoard公司的发展小趣事

作为一家以开源硬件为核心的公司,BeagleBoard深知教育和人才培养的重要性。他们积极与学校、教育机构合作,提供教育支持和培训服务,帮助更多的学生了解嵌入式系统开发的魅力。同时,公司还设立了奖学金和竞赛项目,鼓励年轻开发者积极参与创新实践,为行业培养了一批批优秀的人才。

问答坊 | AI 解惑

本站的电子资源很丰富

本站的电子资源很丰富,可以找到很多自己喜欢的电子书之类的。值得点赞。 …

查看全部问答>

GD32F470 TLI 接口的DE频率如何设置

用GD32F470开发板的LCD Demo程序驱动AT070TN94 屏,结果是花屏,测了下DE 的频率是63us,厂家说调成35us,在demo 程序中哪里设置呢?求解答,谢谢! …

查看全部问答>

请问 ARM CONTEXT M0 免费提供的 除了核心 包不包括ADC FLASH 等部件

请问 ARM CONTEXT M0 免费提供的 除了核心 包不包括ADC  FLASH 等部件 …

查看全部问答>

低功耗电流采样基于OPA501

低功耗电流采样        在日常生活中TWS(真无线蓝牙耳机)已经非常之常见,事实上也非常方便,实在是太香了,除了容易掉,我已经掉了两TWS~那只能拜拜了~家境贫寒的我已经不能再买TWS耳机了。   人 ...…

查看全部问答>

求分析:做的升压电路板有声音,不知道是怎么解决好的

已经量产的板子,客户遭到投诉有滋滋的声音,拿到公司,查也没有查出来, 后面观察到板子有一个为了省成本,有一个驱动IC 没要,后面加上去了,就解决了, 现在是做的升级版,加了一套升压进去,工作电流也翻了一倍,之前是1A , 现在是2A ...…

查看全部问答>

小智科普丨同步整流基本原理

导语:同步整流技术采用通态电阻极低的电力MOSFET来取代整流二极管,能大大降低整流电路的损耗,提高DC/DC变换器的效率,满足低压、大电流整流器的需要。本文将从同步整流电路的原理图着手,介绍了电力MOSFET的反向电阻工作区及同步整流技术的基本 ...…

查看全部问答>

DM21056 烟机测温模组

一、 设计说明 DM21056 是我司新设计的一款非接触式阵列红外测温模组,可实时测量物体表面多个点的温 度并通过串口通讯把数据发送给用户,并可以做成热力图直观体现测量物体表面的温度分布情况。该模组应用的阵列红外温度传感器,具有测量距离远 ...…

查看全部问答>

LTspice Tips 加密仿真库

  在我使用TI的仿真Spice模型的时候,我打开一看竟然是乱码,还一度以为自己加载错了,后来经过我查找发现,原来是他的代码加密了。So是为了防止我薅羊毛?魔改? 加密整起来兄弟们!!! 使用Ltspice做加密要使用windows自带的命令行, ...…

查看全部问答>

摄像头上面这个芯片掉出来了,请问怎么焊接

本来有一点虚焊,我给拆下来了,结果锡让我搞掉了,不知道怎么焊上去, 买不到这样的锡网   …

查看全部问答>

【中科亿海微EQ6HL45开发平台测评体验】+07.USB测试与仿真(zmj)

【中科亿海微EQ6HL45开发平台测评体验】+07.USB测试与仿真(zmj) 中科亿海微EQ6HL45开发平台包含一个USB2.0通信接口,它可以实现FPGA和PC之间的USB通信。 本篇内容主要包含USB2.0接口、测试和仿真。其中,实测PC和FPGA之间的USB2.0通信存在 ...…

查看全部问答>