第一范文网 - 专业文章范例文档资料分享平台

松翰C语言编程指导C+Program+Guide (6)

来源:用户分享 时间:2020-06-28 本文由一世年华 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

TDxxxV1.0

四、程序流程控制

程序流程控制是程序的精华所在,正确的程序流程才能实现正确的程序功能。安排精巧的程序流程控制才可能使程序具有高效率。程序流程控制不管是在C还是在汇编中都是程序设计者最值得思考的地方。

4.1顺序结构

顺序结构是程序最基本的流程,其语句顺序执行,PC指针依次下移,是CPU内部处理指令的初始方法。这也是编程思维的最初级方式,也是程序的最基本方式和流程。

顺序结构流程:

A操作 B操作

图4-1 顺序结构流程

其实,其描述的是一个向量方式发展的问题,是所有问题发展和描述的基本方法,具有明确的方向性和时间性,如图中的A操作的发展方向只有一个,即接下来就是B操作,中间既没有反复也没有曲折变化,B一定发生在A的后面。

我们平时可以看到的C语言的实现:(微波炉开机初始化)

key_bibi_f = 1; menu_disp_h = 0xf0U; menu_disp_l = 0;

21

//上电响一声 //上电显示0:00

TDxxxV1.0

disp5 = 0xffU;

上述简短的几条语句分别完成一定目的的初始化,虽然在这里没有强制要求什么样的顺序,但是执行过程中是严格按语句的先后来开关目标的。

SN8ASM的实现:

b0bset key_bibi_f ;上电响一声

mov mov mov mov mov mov

a,#0f0h menu_disp_h,a a,#00h menu_disp_l,a a,#11111111b disp5,a

;上电显示0:00

这是一段功能完全与上面这段C相同的汇编实现,我们可以看见在顺序结构的汇编语句当中没有任何的跳转和判断,都是按原功能的顺序来描述。

从对比当中我们完全可以找到它们的逻辑上的一一对应关系。

4.2选择结构

事实上,完全顺序结构的流程的程序很少,因为很多事情并不是一帆风顺,顺流而下。很多情况下,事件的发生都需要具备一定的条件,只有一定条件下才有可能实现。这就得使用选择结构来描述。

选择结构流程图:

P为真? A操作 B操作

22

TDxxxV1.0

图4-2 选择结构流程图

简单选择结构只判断一个条件的真假来决定下面的需要执行的操作,这是一个最简单的判断。

C语言实现:(BCD码调整)

if(result_buf > 0x0a) {

result_buf = input + 6;

} else { result_buf = input; }

我们看见在C语言当中,我们用判断语句来实现这样一个判断逻辑,不管是什么样的条件,我们只计算其真假,做出判断。If??else??是一个非常好的判断组合,很容易用它来完成下列我们用汇编来实现的功能。

SN8 汇编实现:

cmprs nop b0bts0

a,#0ah fc

jmp $+3

b0mov a,y ret

b0mov a,y add a,#6h

;调整后的数放在a

事实上,在汇编程序中,我们会遇到几种情况的条件选择:

一是当条件是一个位变量时,我们可以直接用b0bts指令来进行判断。

一是当条件是是否满足一个预定的值,我们可以用CMPRS指令来进行判断,当然也可以将其转化为标志位来判断。也可以用减法的方法将其转化成为标志位进行判断,就看需要来安排了

更深入。。。。。。

A、串行多分支结构流程: 事实上大多数时候,单个的条件无法分析判断复杂的问题,有时候一个结果的出现需要很多个条件同时成立,而每一个条件成立,又都有不同的结果产生,这样就会有一系列的有层次的判断!

23

TDxxxV1.0

N P1为真? Y N P2为真? N Pn为真? Y Y C1 C2 C3 C4

图4-3 串行多分支结构流程图

C用if,else if嵌套来实现:

if(key_bibi_f) { buzzer_time = d_buzzer_time1; buzzer_not = d_buzzer_not3; }

else if(end_bibi_f) //buzzer10 { buzzer_time = d_buzzer_time2; //响声长短,500ms buzzer_not = d_buzzer_not1; //要响几次,#10 }

else if(segment_bibi_f) {

//buzzer20

//响声长短,500ms

//响声长短,200ms //要响几次,#1

buzzer_time = d_buzzer_time2; buzzer_not = d_buzzer_not1;

//要响几次,#4

} 说明: key_bibi_f end_bibi_f

;按键响声请求标志

;烹调结束响声请求标志

;段切换响声请求标志

sgment_bibi_f 按键响声:200ms/1次 结束响声:500ms/5次 段切换响声:500ms/2次

问:SN8 ASM怎么实现?

24

TDxxxV1.0

SN8 ASM的实现:

Buzzer00: b0bts1 key_bibi_f jmp buzzer10

mov a,@buzzer_time1 ;200ms mov buzzer_time,a ;响声长短 mov a,@buzzer_not3 mov buzzer_not,a

;#1 ;要响几次

jmp buzzer40 buzzer10:

b0bts1 end_bibi_f jmp buzzer20

mov a,@buzzer_time2 ;500ms mov buzzer_time,a ;响声长短 mov a,@buzzer_not1 mov buzzer_not,a jmp buzzer40

;#10

;要取反的次数

buzzer20: b0bts1 segment_bibi_f

jmp buzzer30

mov a,@buzzer_time2 ;500ms mov buzzer_time,a ;响声长短 mov a,@buzzer_not2 mov buzzer_not,a

;#4

;要取反的次数

jmp buzzer40

B、并行多分支结构流程:

P=? P = 1 P = 2 P = 3 P = n A1 A2 A3 An

25

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新初中教育松翰C语言编程指导C+Program+Guide (6)全文阅读和word下载服务。

松翰C语言编程指导C+Program+Guide (6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1105808.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top