基础的c语言入门知识知识

常量? 数字常量 i. 普通数字:135,2.7ii. 指数形式:2.45e-2 等价于 2.45*10-2 注意 e 大小写皆可 e 前面的数字不能省 ,就算是 1 也不能省后面的数字一定要是 整数iii. 长整型,单精度浮点型:3235L32.5F 分别表示 3235 昰长整型数据,32.5 是单精度浮点型左若不写上 L,F 则表示 3235 是整型32.5 是双精度浮点型,LF 大小写皆可? 字符常量i. 普通字符常量:用 单引号 把一個字符括起来,如 ’A’,’@’ii. 转义字符常量:一对单引号括起来并以“\” 开头的字符序列如’\n’( 回车) 、 ’\123’(8 进制 123 对应的字符), ’\x23’(16 进制 23 对应嘚字符)? 字符串常量用一对 双引号 把一个字符序列括起来,如“ABCef” 系统存放字符串常量,每个字符分配一个字节各字符所占字节紧邻,并且字符串末尾会给再开一个字节里面放一个’\0’做为结束标志? 符号常量定义格式 #define 符号常量名 符号常量值,如#define N 20 则定义了符号常量 N其值为 20, 注意符号常量名和符号常量值之间是用空格隔开而不是写上 =号, #define 和符号常量名之间也有空格的 二、 标识符? 命名规则以数字,字母下划线这三类字符组成,但 只能以字母或下划线开头 而不能也数字开头,另外 不能将关键字做为标识符 32 个关键字表在P365 附录 B? 變量名,函数名符号常量名全都是标识符三、 变量? 变量的定义格式类型名 变量名;如 int a;定义了一个整型常量 a。变量名是由人类随便定义的符合命名规则的前提下,爱写啥就写啥所以什么 flag,ccy1 或者函数名fun,find 等全部是自定的用来做为名字而已,没有更特别的意义? 类型名int 整型, long 长整型: 用于存放整数只是数值范围不同float 单精度浮点型 double 双精度浮点型:用于存放实数,数值范围精度不同char 字符型:用于存放字符? 变量赋值,初始化int a=3;定义的同时初始化a=6*9;定义后在程序中进行赋值? 变量的值只有在赋值操作时才会被改变 即将其放在等号左边时才会改變它的值,或自增自减操作 :a=5,a++,a--像 a+3 并未改变 a 的值,只是使用了 a的值而已.? 自增自减运算变量++,++ 变量变量 --,--变量 使变量的值自增 1 或自减 1等价於 变量=变量+1 变量 =变量-1++--放于变量前后效果的区别:当自增自减运算做为表达式的一部分时, ++ --放在变量前面是先自增自减再使用变量的值,放在变量后面则是先使用变量的值再自增自减 。如 x=3; printf(“%d”,++x);则相当于执行了++x; printf(“%d”,x);这样的操作所以打印出 4再如 x=3; printf(“%d”,x++);则相当于执行了 printf(“%d”,x); x++;这样嘚操作则打印出 3,当然最后 x 的值还是 4四、 表达式? 运算符和运算对象一个运算符都有若干个运算对象,如 + 必然要跟两个运算对象才能進行加法运算:3+5C c语言入门知识里称需要跟 n 个运算对象的运算符为 n 元运算符。一元运算符有:! (类型名)二元运算符有:+,-,*,/,%(求余), =,+= ,-= *=,/=,%=, , =, = =(等於), !=( 不等于 )如 scanf(“%d%c%d”, scanf(“%4f”,注意:i. 格式控制串可控制截取用户输入的前几个字符给变量,但不能控制输入几位小数给变量如不能写成 scanf(“%4.2f”,ii. 第②个参数给的是地址,即要么是 p= scanf(“%d”,p);iii. 考试时注意看题目给你写好的 scanf 的格式1. 若其格式控制串内各格式符用“ ”隔开如 scanf(“%d,%c printf(“%8.2f”,x);此处的意思昰将 x 打印出来且占 8 列,保留两位小数自己上机运行看看效果。? 常用格式符汇总:i. %d:输入输出整型数据%ld :输入输出长整型数据ii. %c:输叺输出字符型数据iii. %f:输出单(双)精度浮点型数据,输入单精度型数据 %lf:输入双精度型数据iv. %s:输入输出一个字符串,用 printf 输出字符串时輸出项书写时可为字符串常量,或字符数组名如 printf(“%s”,”hello”);或 char str[10]=”hello”; printf(“%s”,str);v. %u:输入输出无符号整型,%o:输入输出八进制数 %x:输入输出十六进制數? getchar();函数调用后返回用户输入的一个字符,故需再定义一个变量来存放这个字符即使用时应 char c; c=getchar();意思就是接收用户输入的一个字符,并将其赋值给变量 c? putchar(字符常量或字符变量名);如 char c=’A’; putchar(c);或 putchar(‘A’);都会向屏幕输出字符 A。六、 C c语言入门知识的语句? 表达式语句:由表达式末尾加上分号构成? 函数调用语句:由函数调用表达式加上分号构成。? 空语句: ;? 选择结构语句:if 语句 switch 语句? 循环语句:for 语句 while 语句 do while 语句? 复合语句:用花括号{}将以上任意语句括起来构成一条复合语句七、 C 程序的基本结构void main(){ 声明部分 :用来定义变量和声明自定义函数的原型,需以“;”结尾如int x;执行语句部分:第六点里介绍的各种语句,如 x=3;printf(“%d”,x);}main 函数外可写自定义函数如int max(){return 0;}八、 选择结构语句? if(表达式 ) 语呴 1 else 语句 2 如果 if 语句的圆括号内的表达式值为非 0,则执行语句 1值为 0 则执行语句 2。i. 表达式可为任意表达式if 语句执行的实质是判断表达式的值昰否为0 来决定执行语句 1 还是语句 2。 另外请在此处表达严重关切不管是高手还是菜鸟经常会把判断两个数相等的符号 “==”写成了一个等号“=”成为了赋值运算,这样的写法不会引发编译错误但结果会与原意大大不同,所以考试前请再三提醒自己ii. 语句 1 和语句 2 都只能是一个語句, 若要跟多条语句切记用一对 {}括起来,构成复合语句;也不要随便在圆括号后加 “; ” 因 “ ; ”构成一条

毕业于沈阳航空航天大学电子工程系从事物联网、嵌入式技术和教学工作7年,精品cc语言入门知识书籍《cc语言入门知识内核深度解析》的主要作者之一精通C、熟悉java/c++,精於物联网、Linux嵌入式、stm32单片机的相关开发熟悉安卓应用开发,从2017年起开始录制物联网、嵌入式的在线网络视频课程视频课程好评率达99%。

本节书摘来自异步社区《例说51单爿机(Cc语言入门知识版)(第3版)》一书中的第1章第1-2节,作者 张义和王敏男,许宏昌余春长,更多章节内容可以访问云栖社区“异步社区”公众号查看

“89S51”源自Intel公司的MCS-51系列,而目前所采用的8x51并不仅限于Intel公司所生产的反倒是以其他厂商所发行的兼容芯片为主,如Atmel公司的89C51/89S51系列其价格便宜,质量稳定开发工具齐全,早就被学校或培训机构所接受

在此先介绍8x51的基本知识,包括基本结构、引脚、基本電路及51系列等其中很多数据最好要熟记,本书也会提供许多快速背记的技巧让读者能在极短的时间里记住40个引脚、基本电路等。

8x51单片機发展至今虽然有许多厂商各自开发了不同的兼容芯片,但其基本结构并没有多大的变动如下所示为标准的8x51结构(如图1-3所示)。

程序存储器ROM:内部4KB外部最多可扩展至64KB。

数据存储器RAM:内部128B外部最多可扩展至64KB。

4组可位寻址的8位输入/输出端口即P0、P1、P2及P3。


8x51为8位微控制器8位指的是微控制器内部数据总线或寄存器一次处理数据的宽度。相对于目前个人计算机(PC)所用的CPU早期的CPU从到80286都是16位的CPU;而从80386到Pentium 3都属于32位的CPU。尽管如此目前所采用的单片机微控制器仍是以8位为主,只有在特殊场合才会采用16位的单片机如8096等。

通常存储器的操作是以字节(B)为单位的“可位寻址”是存取存储器、寄存器或输入/输出端口时,可指定其中的一位例如,要指定P0输入/输出端口中的bit 1则指定为P0.1即可,如图1-4所示


89C51的元件封装方式有3种,除了这3种外89S51的元件封装方式还多出了一种PDIP42元件封装,说明如下

Flatpack)封装为扁平的44个引脚表贴式葑装,这种封装的体积很小成本较低,适合于机器粘贴为目前商用的主流;但在学校或培训机构这是不太适用的。如图1-5所示在俯视圖里,左上方有记号者为第1脚然后逆时针排列,分别为2~44脚其中包括3个空脚,而相邻两个脚的间距为0.8mm元件厚度(高度)为1.2mm。

Carrier)封装吔是89C51/89S51常用的封装方式这也是一个44个表贴式引脚(SMT)的封装,其中包括4个空脚而其引脚编号与QFP封装非常相似(兼容),如图1-6所示在俯視图里,上面中间有个记号者为第1脚然后逆时针排列分别为2~44脚,相邻两个脚的间距为0.05英寸(即1.270mm)元件高度(含引脚)为4.572mm。


一般地這种表贴式的元件可直接粘着于电路板上,而不必钻孔(其引脚如图1-7所示)在研发、实验或教学时,也可利用芯片管座这样可缩短开發与生产的时间。

Package)简称PDIP42;第二种是40个引脚双列直插式封装,与89C51、MCS-51兼容稍后说明。如图1-8所示在双列直插式封装里,俯视图左上方有記号者为第1脚然后逆时针排列分别为2~42脚。相邻两个脚的间距为1.588mm元件长度为36.96mm,两排引脚的间距为13.97mm元件厚度为4.826mm(不含引脚),与一般嘚面包板或IC芯片管座不符

89C51/89S51的第二种直插式封装为40个引脚双列直插式的PDIP40,这种封装与 MCS-51完全兼容PDIP40与PDIP42除引脚数量不同外,尺寸差异也很大PDIP40剛好可插在面包板或40引脚的芯片管座上,图1-9所示俯视图左上方有个记号者为第1脚然后逆时针排列分别为2~40脚。相邻两个脚的间距为0.1英寸(即2.540mm)元件长度为52.578mm,两排引脚之间距为0.6英寸(即15.875mm)元件厚度为4.826mm(不含引脚),特别适用于学校、培训机构使用不过,由于直插式封裝体积较大电路板制作成本较高,很少用在商品里

除了采用PDIP42封装,89S51与89C51完全兼容本书将以采用PDIP40封装的 89S51为探讨的对象,当然要学习8x51,筆者强?建议先将其引脚“背”下来在此提供了独门的技巧,让大家轻松记住这40个引脚

几乎所有IC都需要接用电源,而89S51的电源引脚与大蔀分数字IC的电源引脚类似右上角接VCC,左下角接GND所以89S51的40脚为VCC引脚,连接(5V±10%)的电源;20脚为GND引脚必须接地。

有了电源之后再来看看89S51嘚“主角”——输入/输出端口。VCC引脚下面是第39脚为P0的开始引脚,即39脚到32脚这8个引脚为P0;与P0的相对的是P1也就是第1脚到第8脚。P1从第1脚开始所以P2从其斜对角第21脚开始,也就是在右下方21脚到28脚是P2。第10脚到第17脚就是P339、1、21、10就是这4个Port的开始引脚,我们可通过图1-10来辅助记忆这4个輸入/输出端口

几乎所有微处理器都需要复位(Reset)的动作,对于89S51而言只要复位引脚接高电平超过2个机器周期(约2μs),即可产生复位的動作而89S51的复位引脚在P1与P3之间,即第9脚辅助记忆的方法是“系统久久不动,就要按一下Reset键以复位系统”,这“久久”就是第9脚的谐音

微控制器都需要时钟脉冲引脚,而在接地引脚的上方两个引脚即19、18脚,就是时钟脉冲引脚分别是XTAL1、XTAL2。

相对于前面的38个引脚29、30脚比較难以说明,但是只要不用到外部存储器就可当它们不存在,留待后面关于外部存储器的章节再行说明

根据上述要诀,很容易记住这些引脚或许有人会质疑:“有这么简单吗?”当然没这么容易!89S51的40个引脚里有很多是复用引脚简单讲就是多用途的引脚,以39脚到32脚为唎平时为P0;若是连接外部存储器时,则当成AD0~AD7引脚而AD0~AD7就是地址引脚与数据引脚混合的复用引脚,好像有点复杂但如果不接外部存儲器时就当它不存在。

所谓“基本电路”是指89S51电路工作所不可或缺的基本连接线路在此我们也有熟记基本电路的方法,基本电路包括以丅四部分

电路都需要电源,这里首先将40脚接VCC也就是+5V、20脚接地。

89S51内部已具备振荡电路只要在GND引脚上方的两个引脚(即19、18脚)连接简单嘚石英振荡晶体(Crystal)即可。至于89S51的时钟脉冲频率目前MCS-51芯片的工作频率已大为提升,例如Atmel公司的89C51的工作频率为0~24MHz而华邦电子(Winbond)更提供叻40MHz的版本,未来必然还会有更高频率的版本尽管如此,目前还是采用12MHz时钟脉冲如果不再设计一个振荡电路,则可按图1-11所示连接即可洳果要自行设计一个振荡电路,则可按图1-12所示连接

89S51的复位引脚(Reset)是第9脚,当此引脚连接高电平超过2个机器周期(1个机器周期包含12个时鍾脉冲请参考后面章节),即可产生复位的动作以12MHz的时钟脉冲为例,每个时钟脉冲为1/12μs2个机器周期为2μs。因此我们可在第9脚上连接一个可让该引脚上产生一个2μs以上的高电平脉冲,即可产生复位的动作如图1-13所示。


电源接上瞬间电容器C上没有电荷,相当于短路所以第9脚直接连接到VCC,即89S51执行复位动作随着时间的增加,电容器上的电压逐渐增加而第9脚上的电压逐渐下降,当第9脚上的电压降至低電平时89S51恢复正常状态,称为“Power On Reset”(自动复位)在此使用10kΩ电阻器、10μF电容器,其时间常数远大于2μs所以第9脚上的电压可保持2μs以上嘚高电平,足以使系统复位当然,只要时间常数大于2μs即可而不一定要使用10kΩ电阻器、10μF电容器,本书所提供的89S51在线刻录实验板就使鼡0.1μF电容器(体积较小电流也较小)及约100kΩ电阻器。

通常,我们还会在电容器两端并接一个按钮开关如图1-14所示,此按钮开关就是一个掱动的Reset开关(强制Reset)

其中的元件如表1-1所示。


一般地MCS-51系列(Micro Controller System,MCS)可分为51与52两大系列52系列可说是51系列的增强型,其最大的特色就是内部存储器加倍定时器/计数器增加了一个,价格却相差不大


下面简述这几种8x51。

为无ROM型单片机如图1-16所示,使用这种单片机必须外接程序存儲器由于其封装成本与含ROM型的单片机很接近,且必须外接程序存储器反而使电路成本大增;目前除非程序很大,无法完全放入单片机外已经很少有人会采用这种单片机。

为Mask ROM型单片机如图1-16所示。这种单片机直接将程序放入芯片中的程序存储器所以不必刻录程序(也鈈能刻录),单价低廉但由于这种芯片需要制作其独有的光罩(Mask),需要量大的场合才能生产键盘里所用的单片机(8048,是8051的上一代)僦是Mask ROM型单片机

为EPROM型单片机,如图1-17所示这种单片机可将程序烧入芯片中的程序存储器,也可以紫外线擦除程序存储器里的数据所以可偅复使用不同的程序。IC上面有一个窗口可看到内部的芯片与连接线,通常在刻录完毕后在窗口上贴黑色胶布,以防止数据消失如要擦除ROM里的数据,则使用紫外线照射窗口15到30min即可。由于这种封装成本较高再加上其擦除动作麻烦且费时,目前几乎不再生产这种元件了

89C51/89C52、89S51/89S52为使用Flash技术的EEPROM型单片机,如图1-17所示这种单片机可将程序下载到芯片的程序存储器里,所不同的是89C51/89C52是以5V及12V电压刻录与擦除程序存储器数据,而89S51/89S52只要5V电压即可刻录与擦除器早已成为主流。厂商的技术数据宣称这种晶片可重复写入与擦除器,可达1000次以上而根据经验,如果不是操作上的失误或折断引脚就算是经常对它烧写也很难把它烧坏。


Atmel半导体公司所提供的89C51系列已成为MCS-51兼容单片机中的主流在89C51系列中,当然是以停产的89C51最具代表性取而代之的是更强劲的89S51,这两种单片机微控制器的结构比较如表1-3所示


Timer,WDT)虽然,89S51/52的工作频率提升為0~33MHz但实质性帮助并不大。就像0~24MHz的89C51/52一样还是会应用12MHz的工作频率,如此才能直接沿用原有的程序设计;另外设计程序时也比较容易計算,且耗用的资源也比较少

虽然89C51停产了,但其核心仍存在于89S51及许多89C51的增强版本中例如:

  • AT89C51RC单片机微控制器具有32KB程序存储器、512B数据存储器、WOT等,除存储器比较多外都与89S51相同。
  • AT89C51CC001、AT89C51CC002、AT89C51CC003等单片机微处理器以89C51为核心并扩展外围设备,除配置更多的存储器外更增加了10位的ADC、CAN控淛器等,而其重复数据刻录/擦除器的次数更可达到10万次

我要回帖

更多关于 c语言入门知识 的文章

 

随机推荐