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

一世年华 分享 2020-06-28 下载文档

TDxxxV1.0

图4-4 并行多分支结构流程

C可以用switch…Case来实现:

switch(step) { case 0:

//侍机状态下第一次按时钟键

//按第二次设置时钟的分钟位 //按第三次时钟设置完毕

ks81();break;

case ONE_PRESS_CLOCK_KEY_C: ks82();break;

case TWO_PRESS_CLOCK_KEY_C : ks83();break;

case BESPOKE_ING_C : ks84();break;

case SELECT_TIME_C :

查询预约的时间

运行的时间

//设置好预约后再按下时钟键可以

//按时钟键之前已经设置过烹调程序表

示想预约,置预约标志bespoke_f=1

if(job_mode1== DEFROST_MODE_C) break; else ks85();break; case START_ING_C: //在开始过程中按时钟键可以查询当前正在

if(job_mode1 == DEFROST_MODE_C) ks86();break;

}

汇编的实现如下:

预约

mov a,step b0bts1 fz

;=0侍机状态按时钟键设置小时

jmp ks82

cmprs a,ONE_PRESS_CLOCK_KEY_C

jmp ks83

cmprs a,TWO_PRESS_CLOCK_KEY_C jmp ks84 ;完成时钟设置 cmprs a,BESPOKE_ING_C ;预约状态下查询时间 jmp ks85

cmprs a,SELECT_TIME_C

;选择过功能后再按时钟键表示要

jmp ks86 key81: key82: key83: key84:

jmp jmp jmp jmp

key89 key89 key89 key89

26

TDxxxV1.0

key85: key86: key89:

jmp jmp ret

key89 key89

4.3循环结构

N P为真? Y A

图4-5 While型循环

While型循环的C语言实现:

tempbuf = 0;

while(tempbuf==15){++tempbuf;}

While型循环的汇编实现:

Loop:

Clr y B0mov a,y Cmprs a,#15 Jmp $+2 Jmp decms

loop90 y loop

;delay //delay

jmp

loop90:

RET

27

TDxxxV1.0

A Y P为真? N

图4-6 Do…while 循环

Do…while 循环的C实现:

unsigned int * pyz = (unsigned int *)0x7f; do{ *pyz = 0x00;

--i; }while(i);

Do…while 循环的汇编实现:

ClrRAM:

clr Y b0mov Z,#0x7f

;Select bank 0 ;Set @YZ address from 7fh

ClrRAM10:

clr @YZ

;Clear @YZ content ;z = z - 1 , skip next if z=0 ;Clear address 0x00

decms Z jmp ClrRAM10 clr @YZ mov a,#00H

28

TDxxxV1.0

五、函数

函数在C当中占有相当重要的地位,它是组成程序的元素。函数的定义、函数的调用构成C程序的主要结构。而以单片机为对象的编程又与通用C 的编程略有不同,主要表现在全局变量与函数参数的选择上以及参数类型的选择上。

5.1 函数定义

函数是完成一定的功能的模块,函数的出现使代码可以得以复用,可以大大减少产生的代码量,这是使用函数最为充分的理由。但是,从另一方面来看,函数基本都涉及参数的传递,若是处理不好就很容易产生参数传递的冗余代码,还有就是调用函数就一定涉及到入栈和出栈的处理,这些都占用CPU的资源,影响程序的实时性,若函数调用过于频繁,势必影响程序的执行效率。所以函数定义之前要考虑函数的划分,函数功能既不能覆盖过大,也不能覆盖过小,使函数的划分太细。

SN8 C 函数声明方式:

返回值类型 函数名(形参1数据类型,形参2数据类型,??);

函数定义方式:

返回值类型 函数名(参数列表) {

函数体; }

无返回值,无参数函数定义:

Void 函数名(void){}

Note: 对于无返回值的函数,都要声明是void,以免系统为其预留空间!

在C当中,函数都应该先声明,后调用,标准C的写法一般是先在程序的开头声明要用到

的函数,然后在程序中编写完整的函数,我们先来看看C的函数。

如:

unsigned int bcd(unsigned int); . .

clock_min = bcd(clock_min);

29

TDxxxV1.0

. . .

unsigned int bcd(unsigned int input) { unsigned int result_buf; }

result_buf = input & 0x0f; if(result_buf > 0x0a) { result_buf = input + 6; } else {

result_buf = input;

}

return(result_buf);

上面的函数完成一个固定的功能,能提供给程序中任意一个地方来调用并完成所需的功能,在C中都是通过给予不同的参数来得到需要的计算结果,这样就可以节省代码量,使程序得到复用。

其实汇编一样可以写成函数形式,这样就可以起到和C一样的效果,我们来看看汇编是怎么来完成的。

如:

调用点的汇编代码:

mov

a,clock_min

b0mov y,a call bcd mov

clock_min,a

功能函数代码:

bcd: b0mov a,y

30

;调整前的数放在Y

and cmprs nop b0bts0

a,#0fh a,#0ah fc

jmp $+3 b0mov a,y ret

b0mov a,y add a,#6h ret

;调整后的数放在a


松翰C语言编程指导C+Program+Guide (10).doc 将本文的Word文档下载到电脑

下一篇:高层悬挑卸料平台施工方案 - 图文

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx