打印
[51单片机]

零基础学嵌入式—单片机篇【第二课—C与8051单片机】

[复制链接]
4703|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 51armfpga 于 2014-4-10 22:55 编辑

1.  8051的编程语言
    对于8051单片机而言,支持4种语言,BASIC、PL/M、C、汇编。
    BASIC 是属于高阶程式语言的一种,是一种在计算机发展史上应用最为广泛的程式语言。一个新变量名定义后可在程序中做变量使用,非常易学,根据解释行就可以找到错误,而不是程序执行完才能显示出来。BASIC主要用于编程简单而对编程效率或执行速度要求不高的场合。
PL/M是Intel从8080微处理器开始为其系列产品开发的编程语言,是一种结构化语言,使用关键字定义结构。对于8051系列单片机来说,PL/M不支持复杂的算数运算,浮点变量,也无丰富的函数库支持。
    C语言是一种源于编写UNIX操作系统的语言,是一种结构化语言,可产生紧凑代码。C语言相对汇编来说具有如下优点:
        Ø   对单片机指令系统不要求了解,仅要求对8051的存储器结构初步了解
        Ø   寄存器的分配、不同存储器的寻址及数据类型等细节可由编译器控制
        Ø   程序有规范的结构,可分为不同的函数,可使程序结构化
        Ø   具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性
        Ø   关键字及运算函数可用近似人的思维过程方式使用
        Ø   编程及程序调试时间显著缩短,提高效率
        Ø   提供的库包含许多标准子程序,具有较强的数据处理能力
        Ø   已编译好的程序容易植入新程序
    8051的汇编语言与其他汇编语言基本一样,如果掌握汇编语言可以避免生成庞大的、效率低的的程序。学习单片机编程,最好是由汇编语言转用C语言的人,而不是原来用过标准C语言的人。
2.  Cx51编译器
    8051单片机的C语言编译器有很多,包括American Automation、IAR、Avocet、Bso/Tasking、Dunfield Shareware、Keil等。Keil比较常用,下面主要介绍一下Keil开发工具的安装,keil的使用会在后面章节中介绍。首先下载Keil安装包。如图2-1所示:


                              
2-1
       打开C51文件夹,双击c51v903.exe文件,如图2-2所示:


2-2
    一直单击“Next”直到出现图2-3,点击Finish,完成安装。


2-3
    安装完成后,还需要进行注册,双击桌面上的Keil图标,或者从开始菜单找到Keil图标 ,点击File—>License Management,复制图2-4中的CID:


2-4
    双击文件夹keygen中的KEIL_Lic.exe,把刚刚复制的CID粘贴到打开的CID图框中,如图2-5所示:


2-5
    点击Generate,生成License ID,如:VG6Z9-4GUKV-D6KQ2-9G774-N90MN-G0GAB,将生成的ID复制粘贴到刚刚Keil打开的对话框New License ID Code中,点击Add LIC,如图2-6所示:


2-6
出现此图,表示**成功。

2-7.jpg (5.12 KB )

2-7.jpg

相关帖子

沙发
51armfpga|  楼主 | 2014-4-10 22:49 | 只看该作者
本帖最后由 51armfpga 于 2014-4-10 23:04 编辑

3. Cx51程序结构
    Cx51程序结构与一般C语言没什么区别。一个Cx51程序大体上是一个函数定义的集合,在这个集合中仅有一个名为main的主函数,主函数是程序的入口,主函数中的所有语句执行完毕,则程序执行结束。
    Cx51语言的基本结构分为顺序结构、选择结构、循环结构。

   3.1顺序结构
    顺序结构是一种最基本、最简单的编程结构。在这种结构中,程序由低地址顺序执行指令代码。如图2-7所示,先执行A操作,然后再执行B操作,两者是顺序执行的关系。



图2-7

    3.2选择结构
    如果计算机只能做像顺序结构那样简单的基本操作,那么它的用途将十分有限。计算机功能强大的原因在于它具有决策能力,或者说具有选择能力。C语言的一个基本判断(条件选择)语句就是if语句,它是串行多分子结构的关键语句,它的基本结构如下所示:
if(表达式)                                //基本条件判断
{语句;}                                //基本任务
else if(表达式)                //补充条件(可选)
{语句;}                                //补充条件下的任务
else                                        //条件之外情况(可选)
{语句;}                                //条件之外任务
        if语句还可以多层嵌套:
        if(表达式)                                        //基本条件判断
        {                                                        //嵌套条件语句
                   if(表达式)                                //嵌套基本条件判断
                   {语句;}                                 //嵌套基本任务
                    else if(表达式)                //嵌套补充条件(可选)
            {语句;}                                //嵌套补充任务
         }
else if(表达式)                        //补充条件(可选)
        {语句;}                                        //补充条件下的任务
else                                                //条件之外情况(可选)
        {语句;}                                        //条件之外任务

    在如图2-8所示地选择结构中,程序首先对一个条件(P)进行检测,当条件为真(Y)时执行任务A,反之(N)则执行任务B。


图2-8

    在串行多分支结构中,以单选择结构中的某一条件(P)为真的分支方向作为串行多分支方向继续进行选择结构的操作;假如条件为假,则执行另外的操作A。最终程序在若干种选择之中选出一种操作来执行,并从一个共用的出口退出,如图2-9。

图2-9


        实际应用中常常会遇到多分支选择问题。例如,以一个变量的值作为判断条件,进行多路并行任务的跳转。switch/case语句是并行多分支结构的关键语句,其结构如下所示:
        switch(表达式)                                //基本条件判断
{
    case 值0:                                        //条件0
            {语句;break;}                        //条件0任务
    case 值1:                                        //条件1
            {语句;break;}                        //条件1任务
    default:                                        //所有条件外
            {语句;}                                        //所有条件外任务
}
和if语句一样,switch/case语句也可以多层嵌套:
switch(a)                                        //基本条件判断
        {  case 0:                                        //条件0
                    {c=0;break;}                //条件0任务
              case 1:                                        //条件1
                    {c=2; break;}                //条件1任务
              default:                                //条件外情况(可选)
                   {
switch(a)                //嵌套基本条件判断
                      {
case 0:                                //嵌套条件0
                                  {c=10;break;}                //任务0
                         case 2:                                //嵌套条件1
                                   {c=20; break;}        //嵌套任务1
                        default:                                //嵌套条件外情况
                              {c=30;}                        //嵌套条件之外任务
}        
}
3.3循环结构
    所有的分支机构都使程序流程一直向前执行,除非使用了定向跳转语句goto,而使用循环结构可以使分支程序重复地执行。
while语句的一般形式为:
while(表达式)
        {语句; /*循环体*/ }
    其中表达式是while语句能否继续的条件,而语句部分则是循环体,用来完成某些任务。只要表达式为真,就重复执行其中的循环体,直到表达式结果为假时,中断这个循环,继续执行循环体之外的其它任务。若表达式一开始就是假的,那么就没有机会执行循环体内的任务;反之加入表达式一直为真,那么就不会从循环体跳出,出现死循环。while结构的最大特点在于,其循环测试条件处于循环体的开头,若想进入循环体这必须首先进行循环条件测试。若测试条件一开始就不合格,则循环体内语句就一次都不会执行。while循环体内的语句必须使用花括号{  }括起来,表示整个花括号内的内容是一个统一的循环体。否则循环体只是紧接着while语句后的第一个语句。
“while”型循环结构如图2-10所示。


图2-10
do while语句的一般形式为:
do
         { 语句; /*循环体*/ }
         while ( 表达式 )
    其中表达式仍然是while语句能否继续的条件,语句部分同样是循环体,用来完成某些任务。只要表达式为真,就重复执行其中的循环体,直到表达式结果为假时,中断这个循环,继续执行循环体之外的其它任务。

“do while”型循环结构如图2-11所示。


图2-11

    这两种循环结构非常类似,唯一的区别在于执行A的次数。在“while”循环中,当条件P一开始就为假时,就没有任何机会执行A;而在“do while”循环中,即便条件P一开始就为假,也至少有一次执行A的机会。
for语句的一般形式为:
for ( 初始语句; 循环条件P; 结尾语句 )
{ 语句 ;/*循环体*/ }
C语言中for循环语句
可以用于循环次数已确定的情况,
可以用于循环次数不确定的情况。
for循环语句中:
初始语句:用来给定进入循环体之前所需要初始化的变量,
循环条件P: 给定继续执行循环体的条件,
结尾语句:则给定循环体执行完毕后,在继续执行循环的条件判断之前需要执行的变量改变(尺度增量) 。
通常情况下for循环语句都会有一个循环变量,它在初始语句中被初始化,条件语句给出循环变量的变化范围,而结尾语句则给定每次循环后该循环变量的改变方式。
for循环语句的语法流程如图2-12所示:


图2-12
4.        Protues简介
    Proteus 是一款非常不错的单片机模拟软件。虽然电子模拟软件不少,但是能很好的模拟单片机的只有 Proteus 软件。该软件能模拟51 单片机,avr单片机,pic 单片机,以及部分 arm 芯片。支持的外围器件也很多包括LED发光二极管,数码管,按键,温度,时钟,A/D,D/A,LCD1602,LCD12864(不带字库)等元器件。对初学者来说,是非常好的入门工具。当然,实际的开发板在学习中还是很有必要的,毕竟这个软件只是模拟。调试程序时可以使用Protues进行仿真,仿真成功后再用实际电路进行验证。一般在开发板做过很多程序的工程师用起来Protues会得心应手,但是只会熟练Protues仿真的工程师不在真实环境上验证的,只能说是纸上谈兵,因为在仿真中可能会成功,在实际电路中并以一定可行,仿真中有些条件可以都是可以忽略的,比如单片机你不画电源,不画地,不画晶振,不管EA脚电平,仿真都是没问题的,但是在真实环境中,有一个地方忽略,你不会得到想要的结果,所以大家学习Protues的同时,不能完全依赖它,而是利用它的优点,与实际电路一起来学习单片机,这样的话就如虎添翼了。下面介绍一下Protues软件的安装方法。
        先从21IC网站下载Protues软件,软件的版本是Protues7.5,软件的下载地址是:https://bbs.21ic.com/icview-443664-1-1.html
        解压缩后,打开Protues文件夹,双击Proteus 7.5 SP3 Setup.exe,单击下一步,直至Finish。然后进入crack文件夹,双击LXK Proteus 7.5 SP3 v2.1.3.exe,出现一安装路径,此路径要与安装Protues的路径保持一致。至此,Protues安装成功。下面接单介绍一下Protues的使用方法及技巧。
        单击屏幕左下方的“开始”→“程序”→“Proteus 7 Professional” →“ISIS 7 Professional”,出现如图2-13所示屏幕,表明进入Proteus ISIS集成环境。


图2-13

       打开后就进入Protues的工作界面,如图2-14所示,Protues工作界面是一种标准的Windows界面,包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。

图2-14

从下一课开始就进入Protues仿真与程序调试了,不再是纯理论的知识,学习起来会更有趣一些。

使用特权

评论回复
板凳
lpcn2003| | 2014-4-11 17:58 | 只看该作者
学习了,谢谢提供。

使用特权

评论回复
地板
流月| | 2014-4-19 16:32 | 只看该作者
跟随~~

使用特权

评论回复
5
zl07191016| | 2014-5-3 14:36 | 只看该作者
飘过

使用特权

评论回复
6
lixiwen| | 2014-5-14 22:45 | 只看该作者
来过

使用特权

评论回复
7
zjwch1| | 2014-5-29 21:42 | 只看该作者
学习。留名

使用特权

评论回复
8
dxl1120| | 2014-6-20 13:41 | 只看该作者
没有后续了?



使用特权

评论回复
9
BG2UKY| | 2014-6-20 17:56 | 只看该作者
好教材!值得一顶!!!

使用特权

评论回复
10
baleno1121| | 2014-6-21 07:03 | 只看该作者
谢谢 分享

使用特权

评论回复
11
wonull| | 2014-10-16 19:22 | 只看该作者
打算花两天时间学习一下PROTUES仿真,有一定单片机硬件基础,学习起来就是快。

使用特权

评论回复
12
jzfbbs| | 2014-10-16 21:37 | 只看该作者

使用特权

评论回复
13
大大小小的鱼| | 2016-9-6 15:48 | 只看该作者
上面有个switch的循环 ,我看着有点小毛病,就第二个switch 嵌套

使用特权

评论回复
14
软和硬是个问题| | 2016-12-30 21:33 | 只看该作者
第一天第二次,很受用,老师辛苦了

使用特权

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

本版积分规则

个人签名:交流QQ:  2659533057 交流网址:http://shop111345649.taobao.com/

17

主题

150

帖子

38

粉丝