单片机 C51 编程要点总结

发布者:collectors最新更新时间:2019-02-19 来源: eefocus关键字:单片机  C51  编程要点 手机看文章 扫描二维码
随时随地手机看文章

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……


关键字:单片机  C51  编程要点 引用地址:单片机 C51 编程要点总结

上一篇:C51的指令与时序的一点总结
下一篇:51单片机按键检测和信号函数仿真

推荐阅读最新更新时间:2024-03-16 16:24

80C51单片机的总线结构、逻辑结构及内部结构
MCS-51是Intel公司生产的一个单片机系列名称,该系列生产工艺有HMOS和CHMOS这两种,CHMOS是CMOS和HMOS的结合,既保持了HMOS的高密度和高速度,还具有CMOS低功耗的特点。 在产品型号中,带有字母C的即为CHMOS芯片,如80C51,该类型芯片的电平既与TTL兼容,又与CMOS电平兼容。 在片内程序存储器的配置上,该系列单片机有3种形式,即掩模ROM、EPROM或Flash和ROM Less(无片内程序存储器)。 80C51是MCS-51系列中采用CHMOS工艺的一个典型品种,各厂商以80C51为基核(内核)开发出的CHMOS工艺单片机产品统称为80C51系列。 当前常用的80C51系列单片机
[单片机]
80C51<font color='red'>单片机</font>的总线结构、逻辑结构及内部结构
基于MSP430单片机的温控系统设计
温度的测量和控制在日常生活、生产中广泛应用愈来愈广,在各类民用控制、工业控制以及航空航天技术方面,也有所体现。比如在很多工作场合,元器件工作温度指标达不到工业级或普军级温度要求,为了满足此要求,论文提出了基于MSP430单片机,运用LM35温度传感器开发的温控系统,系统具有体积小、低功耗、可靠性高、低成本的特点。 1 低功耗温控系统方案设计 温控电路由传感器电路、信号调理电路、A/D采样电路、单片机系统、输出控制电路、温度调节电路构成。电路基本工作原理:传感器电路将感受到的温度信号以电压形式输出到信号调理电路,信号经过调理后输入到A/D采样电路,由A/D转换器将数字量值送给单片机系统,单片机系统根据设计的温度要求判断温度调节
[单片机]
基于MSP430<font color='red'>单片机</font>的温控系统设计
51单片机实现LED流水灯(数组方式和位运算方式)
/* 名称:51单片机实现LED流水灯(数组方式和位运算方式) 说明:今天又重新开始系统的学习51了,LED就算个开端吧。 要注意两点: 1、sfr和sbit是C语言扩展出来的关键字。其中sfr用于对特殊功能寄存器进行声明,sbit用于对某些特殊功能寄存器的某位进行声明。这里和宏定义很相似,但是不能用宏定义进行替换,对于前者是因为51单片机的寄存器存在于内部空间0x80-0xFF,这空间属于直接寻址,51特殊功能寄存只能直接寻址,不能间接寻址。如果用宏定义的话,在翻译成汇编时就会认为是通过总线访问对应的外部地址了。对于后者,sbit是定义一个标志位,也叫位变量。而类似于#define key1 P3^0就说不通了。
[单片机]
LM3S系列单片机,用BootLoader升级代码应用笔记
首先需要说明的是.xcl和.icf的区别: .xcl和.icf都是IAR环境下外部链接器文件,.xcl是IAR 4.--版本的,.icf是5.--版本的,两种文件格式有很大不同。 周立功官网上的资料《 LM3S系列单片机串行(UART)升级方案解决 》里面的bootloader源码以及相关的pdf都是针对IAR 4.--版本而言的,我用的是IAR V5.3,当资料里讲到 配置连接文件 一节时,我就感觉相当的迷茫,因为对于IAR V5.3,连接文件是不支持4.--版本的.xcl文件的。.xcl和.icf都是告诉编译器单片机内存怎么分配的,全局变量放在哪里,局部变量放在哪里等等。 对于使用了IAR 5.--版本连编写程序的用户
[单片机]
基于MSP430单片机的智能数字电压表设计
  电压测量在目前电子技术中非常普遍,对仪表的精度要求和功能要求也越来越高,特别是待测信号强弱相差极大的情况下,既要保证弱信号的测量精度又要兼顾强信号的测量范围,全量程智能自动档数字电压表就成为一种必不可少的测量仪器。   1 量程自动转换电路设计   CD4051是8通道数字控制模拟电子开关,有3个二进控制输入端A、B、c和INH输入,具有低导通阻抗和很低的截止漏电流。幅值为4.5-20V的数字信号可控制峰值至20V的模拟信号。   当INH输入端="1"时,所有的通道截止。三位二进制信号选通8通道中的一通道,可连接该输入端至输出。控制关系见表1. 表1 CD4051真值表及档位关系。   量程自动转换
[单片机]
基于MSP430<font color='red'>单片机</font>的智能数字电压表设计
51单片机 按键控制LED流水灯模式
1.将之前文件中Delay.c.h复制过来,进行添加 2.模块化编程 3.main.c #include REGX52.H #include Timer0.h #include Key.h #include INTRINS.H unsigned char KeyNum,LEDMode; void main() { P2=0xFE; Timer0Init(); while(1) { KeyNum=Key(); if(KeyNum==1) { LEDMode++; if(LEDMode =2)LEDMode=0; } } } void Timer
[单片机]
51<font color='red'>单片机</font> 按键控制LED流水灯模式
PIC单片机配置字
1、对于PIC来说,状态字的配置尤其重要,其直接影响MCU的正常工作与否; 2、以PIC18F45K22为例,打开mplab8.92, 3、我们就可以看到配置字的说明文档: 4、比如:Oscillator Selection bits:(振荡器选择配置字) HS是使用超过4M的石英晶体振荡器(外部晶振),其中HSHP为大于16Mhz,HSMP为4-16Mhz;XT是使用1M到4M的石英晶体振荡器。LP是使用低于1M的陶瓷振荡器,上述都是用外部晶振,只是所用晶振的材质和频率不同。RC是不使用外部晶振,直接用内部的RC时钟电路。其中HS和XT因为用石英晶体振荡器,所得时钟比较准确,适用于各种串口、can、TCPIP
[单片机]
PIC<font color='red'>单片机</font>配置字
MCS 51单片机的温度控制系统方案
  在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。、采用MCS-51单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。本文以它为例进行介绍,希望能收到举一反三和触类旁通的效果。   1硬件电路设计   以热电偶为检测元件的单片机 温度控制系统 电路原理图如图1所示 。      1.1 温度检测和变送器   温度检测元件和变送器的类型选择与被控温度的范围和精度等级有关。镍铬/镍铝热电偶适用于0℃-1000℃的温度检测范
[单片机]
MCS 51<font color='red'>单片机</font>的温度控制系统方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved