首页 > 编程知识 正文

单片机编程语言,新手最简单的c语言编程代码

时间:2023-05-05 15:51:27 阅读:9221 作者:3262

80C51上的c语言编程C51特色

)1)学习c语言的学生在对单片机有了基本的了解后,可以尝试编写一两个基于单片机的c语言程序。 C51语言继承了ANSI C的大部分特性,基本语法相同,同学们进步很快。 但是,因为C51语言是控制硬件的编程语言,所以它本身扩展到了硬件结构,用c语言加强了对硬件的控制,如关键字sbit、data、code等。 他们在做什么将在后面叙述。

)2)单片机不是我们平时使用的计算机,所以他的英文名是微控制器(MCU ),特点体现在这个“微”字上。 因此,内部硬件资源非常少,编写程序时请注意使用存储数据(RAM )和存储程序(ROM )。 说白了,做程序的时候,要尽量精简,不要像各种算法那样给系统增加太多负担。 减少浮点运算,可以使用无符号数据后,就不用带符号的了。 (用ffdll编写程序时,您会发现很多地方使用的unsigned并不像我们在ANSI C中使用的那样非常小心。 C51非常注意资源的控制。 避免乘除运算,多用移位运算(写走马灯程序时,用到现在很有趣。 不是用我们想象的循环来控制。

了解基本特性后,再说具体的东西吧。

首先,是C51添加到硬件控制中的关键字、数据类型。

)1) bit :与我们平时使用的int、char相同。 但是,int是2字节(16位、16位),char是1字节(8位、8bit ),bit是1位,取值范围为0和1,就像windows编程中的BOOL一样。

)2) sbit : sbit是与可寻址空间相对应的位,可寻址区域: 20H~2FH。 定义如sbit xxx=REGE^6(例如,对于sibt a=P0^0,将P0端口的第0位定义为变量a,此时将0或1代入a,则控制P0端口的第0位使其为低电平或高电平) (sbit大部分用于特殊功能寄存器,便于操作有寄存器的人。 )

)3) sfr )为了定义特殊功能寄存器(8位的) (在程序中写入头文件#include,右键单击Keil打开reg51.h,可以看到很多sfr的定义),例如sfr P0

)4) sfr16 )同上16位用的

其次,C51还提供对8051所有存储区的访问。

8051芯片的存储区域在逻辑上分为内部数据存储区域、外部数据存储区域以及程序存储区域(内外统一地址)。

80C51有4KB的内部程序存储区(片上rom(0000h~0fffh ) ),其中前43个单元有特殊用途,0000H~0002H无条件跳,0003H~002AH有中断程序

256B的内部数据存储区(片上RAM )分为低128B和高128B,起到不同的作用(因为知道硬件资源变得多小了,所以节约使用)。 低128B也称为通用寄存器(00H~1FH )、位地址区域20H~2FH,以前sbit是对应的位地址区域

高度128B为特殊功能寄存器(上述sfr ),具体内容载于许多书中。

33558 www.mytutorialcafe.com/microcontrollerspecialfunctionregister.htm

给你英语sfr说明的网址,但不需要读。 读书就行了。

在此叙述很多理由是因为在C51中可以在声明变量时明确地指定存储器空间。 关键字是DATA、IDATA、bdata(ram中高128B )、CODE等。

)1) DATA指定RAM中低128B,可在一个机器周期内直接寻址,寻址速度最快,常用变量应放在DATA区域

例如,unsignedchardatasystem _ status=0;

)2) BDATA指定了RAM内的位地址区域,在该区域定义的变量可以进行位操作。 什么意思? 举个例子吧

未指定的char bdata status _ byte。 在此定义变量status_byte。 这是一个1字节(8位)的数据变量,可以对该变量的1位设置0或1进行操作。 status_byte=0x00,即变量中的所有8位都为0。 前面说明了用于位地址区域的1位的sbit,sbit a=status_byte^2; a=1意味着变量status_byte的第二个位置为1 (8位,即0、1、2、3、4、5、6和7,其中变量status_byte等于0x02;

)3)代码程序商店,他的内容不变。 我们使用的一些固定数据如果在这里,就不需要占用内存空间。 例如,在学习代码管显示程序时,代码管上的所有数字都对应十六进制数字。 我们可以把它存储在程序商店里。 例如:

未指定的char代码表[ ]={

0x3f,0x 06,0x5b,0x4f,

0x 66,0x6d,0x7d,0x07,

0x7f、0x6f、0x7f、0x7f,

0x 39,0x5e,0x 79,0x 71 };

关于特殊功能寄存器sfr的使用,以简单的程序为例。 在80C51芯片的P0^0上连接发光二极管LED、电阻RES、电源VCC,串联连接3个。 电流方向从电源流向P0^0端口。 80C51连接电源,接地,石英振荡,电路复位。 使用proteus模拟时,这些电路不需要连接。

在Keil软件中编写程序

#包含

sbit a=P0^0;

void main () }

a=0;

wile(1;

}

芯片刚开机,P0就被调至高电位,程序会把它调零; LED可以通过电流,LED灯发光。 用while(1)让程序停止在这里。

最简单的单片机c语言程序已经完成。 说了这么多,我希望学生们知道,C51知道关于c语言的扩展,知道可以用c语言控制硬件,掌握常用的关键词。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。