分享

零基础学嵌入式

 lixinhecom 2016-12-28
 本帖最后由 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,软件的下载地址是:http://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仿真与程序调试了,不再是纯理论的知识,学习起来会更有趣一些。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多