打印
[应用方案]

8051单片机C语言基础

[复制链接]
2082|93
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kmzuaz|  楼主 | 2024-7-29 19:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机产生于19世纪70年代,80年代人们开始使用C语言作为单片机的开发语言,在1985年许多公司都推出51系列单片机的C语言编辑器,我们把面向51单片机的C语言简称为C51。目前C51软件中最为流行的就是Keil C。
[1]编程调试灵活方便。因为它是一门高级语言,高级语言的特点就是编程方式灵活,同时,当前所有的单片机都有相应的C语言级别的仿真调试系统,使得它的调试十分方便。
[3]完全模块化。C语言的基本构成单位是函数,其本身就是模块化的开发方式。程序的模块化可以最大程度地实现资源共享,十分有利于多人协作,进行大系统项目的开发。
[5]便于项目维护管理。用C语言开发的代码便于开发小组计划项目、灵活管理、分工合作以及后期维护,基本上可以杜绝因开发人员变化而给项目进度或后期维护或升级所带来的影响,从而保证了整个系统的高品质、高可靠性及可升级性。
[1]C51针对的是硬件系统,所以在程序的最开始应加载关于该系列芯片的头文件,如reg51.h或reg52.h,头文件中定义了各种SFR和SFR中可寻址位的信息。
[3]从数据的存储类型上说,C51可分为data、code、bdata、idata、pdata、xdata等类型,不同的数据存储类型有着不同的执行效率。
[5]C51不支持扩展16位字符,同时不支持递归特性。
三、C51的关键字
四、C51的数据类型
char(1B)、int(2B)、long(4B)、float(4B)。
sfr可以访问51单片机内所有的SFR,用于声明一个8位的SFR。如sfr P1=0x90;
sbit用于访问位地址空间中的可寻址位或SFR中的可寻址位。
    sbit CY=0XD7;
    sfr SCON=0x98;
    sbit RB8=SCON^2;
sbit OV=0xD0^2;
data  存储在可直接寻址的片内低128B的RAM中,访问速度最快。
idata  存储在可间接寻址的片内RAM的256B。允许访问全部片内地址。
xdata 存储在可寻址的片外RAM的全部64KB空间,相当于MOVX @DPTR指令。
六、绝对地址的访问方法
char data *dp;
*dp=0x23;
CBYTE   DBYTE   PBYTR   XBYTR
例如:  val2=XBYTE[0x7fdd];
unsigned char xdata com8255 _at_ 0xffef;
七、中断服务程序
n是中断号,取值为0~4,using m指明该中断服务程序对应的工作寄存器组,取值范围:0~3。使用C51编写中断服务程序,无需关心ACC、B、DPH、DPL、PSW等寄存器的保护,C51会自动增加入栈和出栈对这些寄存器进行保护。
[1]赋值运算符:=
[3]关系运算符:>   <   >=   <=  ==  !=
[5]位运算符:&   |    ^   ~   <<   >>
[7]指针和地址运算符:*   &
[1]本征函数
_crol_(x,n); _cror_(x,n);
_lrol_(x,n); _lror_(x,n);
_testbit_(bitbar);
[2]非本征函数
absacc.h 该文件中定义了几个宏,以确定各存储空间的绝对地址。
stdio.h 通过51单片机的串口或用户定义的I/O口读写数据,默认为串口,如需修改,可以修改LIB目录中的getkey.c及putchar.c源文件。
十、C51语法结构
[2]多分支结构:
{
case 值2:………..;
case 值n:…………;
}
[4]while循环:while(条件){……}
[6]goto 标号
十一、C51应用技巧
由于单片机系统的存储器资源有限,为了提高执行效率,对存储器类型的设定应该根据以下原则:只要条件满足,尽量先使用内部直接寻址存储器(data),其次设定变量为间接寻址存储器(idata),在内部存储器数量不够的情况下,才使用外部存储器,而且在外部存储器,优先选择pdata,最后才是xdata,而且,在内部和外部存储器共同使用的情况下,要合理分配存储器,对经常使用和计算频繁的数据,应该使用内部存储器,其他的则使用外部存储器。
[3]再一个提高代码效率的方法是使用无符号类型,原因是51单片机指令不支持符号运算。若使用有符号类型的变量,C51编译器将要增加相应的库函数去处理符号运算。
[5]尽量使用库函数。C51的库函数提供的许多调令,尤其是本征函数,直接对应着汇编指令,编译效率较高。
[7]灵活设置变量,高效利用存储器。
对于标志位要使用bit或sbit定义,而不要使用unsigned char。这样可以大量节省内存,编写C51程序时,不是特别必要的地方一般不要使用全局变量,尽量使用局部变量。

使用特权

评论回复
沙发
hilahope| | 2024-8-4 10:00 | 只看该作者
了解8051单片机C语言支持的数据类型,如整数类型(char、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(bool)。每种数据类型都有其特定的取值范围和存储空间。变量是用来存储数据的内存单元,需要在使用前声明其类型和名称。

使用特权

评论回复
板凳
benjaminka| | 2024-8-4 11:01 | 只看该作者
由于8051单片机的内存有限,使用指针时要特别小心,避免越界访问和非法内存访问。

使用特权

评论回复
地板
tifmill| | 2024-8-4 11:51 | 只看该作者
由于资源有限,编写高效的代码是必要的。避免不必要的循环和函数调用,尽量减少内存使用。

使用特权

评论回复
5
robincotton| | 2024-8-4 16:41 | 只看该作者
8051单片机支持位操作,这在控制GPIO引脚和其他位可寻址的SFR时非常有用。熟悉位操作符(如&、|、^、~、<<、>>)和位操作函数(如_testbit_)是必要的。

使用特权

评论回复
6
phoenixwhite| | 2024-8-4 17:00 | 只看该作者
掌握if-else、switch-case、for、while、do-while等控制结构的使用,以便编写具有条件判断和循环功能的程序。

使用特权

评论回复
7
olivem55arlowe| | 2024-8-5 22:23 | 只看该作者
在开始C语言编程之前,理解8051单片机的基本架构是非常重要的。这包括CPU、存储器组织、定时器/计数器、I/O端口和中断系统等。

使用特权

评论回复
8
kkzz| | 2024-8-6 18:36 | 只看该作者
寄存器操作:8051单片机的C语言提供了对硬件寄存器的操作,如sfr和sfr16类型。这些寄存器通常用于控制硬件功能或读取硬件状态。
位操作:8051单片机的C语言支持位操作,如bit和sbit类型。这些操作可以用于控制特定的硬件功能或读取特定的硬件状态。

使用特权

评论回复
9
biechedan| | 2024-8-6 21:07 | 只看该作者
在编写代码前,应该熟悉8051单片机的硬件规格,包括其I/O端口、定时器、中断系统、串行通信接口等。

使用特权

评论回复
10
abotomson| | 2024-8-6 22:31 | 只看该作者
不同的C语言编译器可能有不同的优化选项和特性。了解所使用的编译器的特定选项和限制是很重要的。

使用特权

评论回复
11
1988020566| | 2024-8-8 13:02 | 只看该作者
中断声明:在C语言中,中断函数需要使用interrupt关键字进行声明,并指定中断编号。
中断处理:中断函数应尽可能简洁,避免在中断处理过程中执行耗时的操作。

使用特权

评论回复
12
ccook11| | 2024-8-8 15:53 | 只看该作者
了解并遵循良好的编码习惯,如使用有意义的变量名、注释代码、保持代码整洁等。

使用特权

评论回复
13
claretttt| | 2024-8-10 11:21 | 只看该作者
8051单片机支持强大的位寻址能力,因此需要熟悉位操作,如位与、位或、位非、位异或等。

使用特权

评论回复
14
zerorobert| | 2024-8-10 14:24 | 只看该作者
8051单片机的资源有限,包括4K ROM和128字节RAM。这意味着在编程时必须仔细管理内存使用,尽量避免不必要的内存消耗,选择适当的变量类型和存储类别以优化空间利用。

使用特权

评论回复
15
sdCAD| | 2024-8-10 16:36 | 只看该作者
在使用 I/O 端口之前,要根据具体需求正确配置其为输入或输出模式。

使用特权

评论回复
16
jackcat| | 2024-8-11 19:49 | 只看该作者
了解不同的存储类型,如 data、idata、xdata 等,以便合理分配变量的存储空间,优化程序性能和资源利用。

使用特权

评论回复
17
mikewalpole| | 2024-8-11 20:29 | 只看该作者
理解如何通过C语言访问和控制单片机的硬件资源,如GPIO、定时器、串口等。

使用特权

评论回复
18
timfordlare| | 2024-8-11 22:06 | 只看该作者
8051单片机支持多种寻址方式,包括直接寻址、间接寻址、位寻址、相对寻址、寄存器寻址和索引寻址。选择合适的寻址方式取决于访问速度、代码大小、数据类型和存储器类型。

使用特权

评论回复
19
albertaabbot| | 2024-8-13 16:10 | 只看该作者
如果使用串行通信(如UART),需要正确地配置波特率、数据位、停止位和奇偶校验位。同时,需要编写适当的接收和发送函数。

使用特权

评论回复
20
chenci2013| | 2024-8-13 17:14 | 只看该作者
函数调用:在C语言中,函数调用是程序执行流程的重要组成部分。在编写函数时,应考虑函数的参数传递和返回值。
递归:虽然8051单片机的C语言支持递归,但由于单片机资源有限,递归可能会导致栈溢出等问题。因此,在使用递限时应谨慎。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

3040

帖子

0

粉丝