传统流程图

传统流程图,第1张

流程图在思维导图中是相对比较复杂一点的图形样式,它的结构都是呈现发散形的信息,给我们融入了更多的逻辑推导因素。下面文章就带大家来看看在思维导图MindManager中如何使用流程图。

我们来来看看流程图,它的内在逻辑是程序的运行。从一个起始状态开始发展,可以朝着四个方向推进。鼠标放在每个方向的加号上,就可以选择需要的图形的形状。点击一个图形,它就会添加上来。当我们把鼠标放在主题上,通过右键就可以编辑主题的字体、格式、样式等参数。

图1:选择图形形状

图2:编辑样式

我们可以看到所有延伸出来的模块,都是默认通过程序推进箭头连接的。当鼠标点住箭头时,会出现蓝色的圆点,这个时候有三个可调整的参数。一个是关系线连接点的位置,一个是关系线的长短,另外一个可调整的是“标签”。标签默认在连接线中间,也可以拖动关系线上的小蓝点移到侧边。

图3:调整箭头以及标签

如果我们想更深入的调整箭头形式,可以双击关系线,进入“格式化关系”对话框,进一步调整线条参数。比如:颜色、粗细、图样、开始结束的样式和线条形状。预览后,点击确认即可。

图4:格式化关系

我们用鼠标选中关系线,点击右键,还能进行更多 *** 作。比如,粘贴、删除、翻转等等。

图5: *** 作关系线

如果我们按下快捷键ctrl+enter,就会出现一个决策程序结构。一个主题有两个决策方向,是与否。意思是,如果条件成立,流程会怎样推进;如果条件不成立,流程会怎样推进。

图6:决策程序

下面我们就用上述所讲的方法来用MindManager绘制一个简单的员工进、退公司轨迹流程图:

员工进入公司正常的流程都是通过招聘然后再入职,试用期过后再转正,然后就是正式的工作状态。所以我们的流程图主要的流程就是这几项,如下图所示:

图7:入职流程

员工退出公司又分在试用期退出和转正之后退出,以及又分为主动离职和被辞退的情况,每一种情况的具体 *** 作流程都不一样,我们可以通过上面所讲到的方法来绘制流程图,如下图所示:

图8:离职流程

最后如果觉得流程图过于简单,我们可以通过鼠标右键来进行填充颜色,改变形状等 *** 作。

图9:设置样式

图10:流程图效果图

以上就是用MindManager绘制流程图的方法,如果平时在工作或者学习中有需要记录事情发展过程的时候,我们可以用MindManager来绘制流程图。

程序流程图中断有以下表示方式:

1、执行框(矩形框)

执行框中写明某一段程序或某一个模块的功能,其特点是有一个人口一个出口。

2、判别框(菱形框)

可用菱形或尖角形框表示。框内写明比较、判断的条件。条件较长时,用尖角框表示较合适。它可有一个入口和两个出口,在每个出口处都要写明条件判断的结果。

若条件成立,一般写“是”或“Y”,也有写明具体条件的内容,如判断开关的状态,判断框如写明:“开关是处于开通状态否”,若条件成立可写明“开”;若条件不成立,则写成“否”或“N”。

3、起始框和终止框(圆圈)

表示程序段的起始和终止。起始框有个出口起始标号或地址,也可简单写为“开始”。终止框有一个入口。框中可写入“暂停”、“结束”、“返回”等等。

4、指向线(箭头线)

指向线由带箭头的线段表示,它表示程序执行的顺序和去向。

扩展资料:

程序流程图的作用程序流程图的作用程序流程图的作用 程序流程图是人们对解决问题的方法、思路或算法的一种描述。

流程图优点:

1、采用简单规范的符号,画法简单;

2、结构清晰,逻辑性强;

3、便于描述,容易理解。

延时程序在单片机编程中使用非常广泛,但一些读者在学习中不知道延时程序怎么编程,不知道机器

周期指令周期的区别,不知道延时程序指令的用法, ,本文就此问题从延时程序的基本概念、机器周期和指

令周期的区别和联系、相关指令的用法等用图解法的形式详尽的回答读者

我们知道程序设计是单片机开发最重要的工作,而程序在执行过程中常常需要完成延时的功能。例如

在交通灯的控制程序中,需要控制红灯亮的时间持续30秒,就可以通过延时程序来完成。延时程序是如何

实现的呢?下面让我们先来了解一些相关的概念。

一、机器周期和指令周期

1.机器周期是指单片机完成一个基本 *** 作所花费的时间,一般使用微秒来计量单片机的运行速度,

51 单片机的一个机器周期包括12 个时钟振荡周期,也就是说如果51 单片机采用12MHz 晶振,那么执行

一个机器周期就只需要1μs;如果采用的是6MHz 的晶振,那么执行一个机器周期就需要2 μs。

2 .指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计量指令周期。

在51 单片机里有单周期指令(执行这条指令只需一个机器周期),双周期指令(执行这条指令只需要两个

机器周期),四周期指令(执行这条指令需要四个机器周期)。除了乘、除两条指令是四周期指令,其余均

为单周期或双周期指令。也就是说,如果51 单片机采用的是12MHz 晶振,那么它执行一条指令一般只需

1~2 微秒的时间;如果采用的是6MH 晶振,执行一条指令一般就需2~4 微秒的时间。

现在的单片机有很多种型号,但在每个型号的单片机器件手册中都会详细说明执行各种指令所需的机

器周期,了解以上概念后,那么可以依据单片机器件手册中的指令执行周期和单片机所用晶振频率来完成

需要精确延时时间的延时程序。

二、延时指令

在单片机编程里面并没有真正的延时指令,从上面的概念中我们知道单片机每执行一条指令都需要一

定的时间,所以要达到延时的效果,只须让单片机不断地执行没有具体实际意义的指令,从而达到了延时

的效果。

1.数据传送指令 MOV

数据传送指令功能是将数据从一个地方复制、拷贝到另一个地方。

如:MOV R7,#80H   ;将数据80H 送到寄存器R7,这时寄存器R7 里面存放着80H,就单这条

指令而言并没有任何实际意义,而执行该指令则需要一个机器周期。

2.空 *** 作指令 NOP

空 *** 作指令功能只是让单片机执行没有意义的 *** 作,消耗一个机器周期。

3.循环转移指令 DJNZ

循环转移指令功能是将第一个数进行减1 并判断是否为0,不为0 则转移到指定地点;为0 则往下执行。

如:DJNZ R7,KK ;将寄存器R7 的内容减1 并判断寄存器R7 里的内容减完1 后是否为0,如果

不为0 则转移到地址标号为KK 的地方;如果为0 则执行下一条指令。这条指令需要2 个机器周期。

利用以上三条指令的组合就可以比较精确地编写出所需要的延时程序。

三、1 秒延时子程序、流程图及时间计算 (以单片机晶振为12MHz 为例,1 个机器周期需要1μs)

了解了以上的内容,现在让我们来看看

程序总共所需时间:1+10+2560+330240+660480+5120+20+2=998433 μs≈1S

在这里运行这段程序共需998433 μs,还差1567μs 才达到1S 的,所以想要达到完美的1S 延时,需

要在返回指令RET 前再添加一些指令让它把1567μs 的延时完成。有兴趣的读者可以自己试着添加完成。

最后补充一点,编写程序时一般将延时程序编写成独立的子程序,而所谓子程序也就是一个实现某个功能

的小模块。这样在主程序中就可以方便地反复调用编写好的延时子程序。

小提示:循环转移指令(DJNZ )除了可以给定地址标号让其跳转外,还可以将地址标号改成$,这样

程序就跳回本指令执行。例如:

DJNZ R7,$ ;R7 内容减1 不为0,则再次执行本指令;为0 则往下执行,当R7 的值改为10

时,则执行完该条程序所需的时间为210=20 μs。

51单片机汇编延时程序算法详解

将以12MHZ晶振为例,详细讲解MCS-51单片机中汇编程序延时的精确算法。

指令周期、机器周期与时钟周期

指令周期:CPU执行一条指令所需要的时间称为指令周期,它是以机器周期为单位的,指令不同,所需的机器周期也不同。

时钟周期:也称为振荡周期,一个时钟周期 =晶振的倒数。

MCS-51单片机的一个机器周期=6个状态周期=12个时钟周期。

MCS-51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12(1/12000000)=1μs。

程序分析

例1 50ms 延时子程序:

DEL:MOV R7,#200 ①

DEL1:MOV R6,#125 ②

DEL2:DJNZ R6,DEL2 ③

DJNZ R7,DEL1 ④

RET ⑤

精确延时时间为:1+(1200)+(2125200)+(2200)+2

=(2125+3)200+3 ⑥

=50603μs

≈50ms

由⑥整理出公式(只限上述写法)延时时间=(2内循环+3)外循环+3 ⑦

详解:DEL这个子程序共有五条指令,现在分别就 每一条指令 被执行的次数和所耗时间进行分析。

第一句:MOV R7,#200 在整个子程序中只被执行一次,且为单周期指令,所以耗时1μs

第二句:MOV R6,#125 从②看到④只要R7-1不为0,就会返回到这句,共执行了R7次,共耗时200μs

第三句:DJNZ R6,DEL2 只要R6-1不为0,就反复执行此句(内循环R6次),又受外循环R7控制,所以共执行R6R7次,因是双周期指令,所以耗时2R6R7μs。

例2 1秒延时子程序:

DEL:MOV R7,#10 ①

DEL1:MOV R6,#200 ②

DEL2:MOV R5,#248 ③

DJNZ R5,$ ④

DJNZ R6,DEL2 ⑤

DJNZ R7,DEL1 ⑥

RET ⑦

对每条指令进行计算得出精确延时时间为:

1+(110)+(120010)+(224820010)+(220010)+(210)+2

=[(2248+3)200+3]10+3 ⑧

=998033μs≈1s

由⑧整理得:延时时间=[(2第一层循环+3)第二层循环+3]第三层循环+3 ⑨

此式适用三层循环以内的程序,也验证了例1中式⑦(第三层循环相当于1)的成立。

注意,要实现较长时间的延时,一般采用多重循环,有时会在程式序里加入NOP指令,这时公式⑨不再适用,下面举例分析。

例3仍以1秒延时为例

DEL:MOV R7,#10 1指令周期1

DEL1:MOV R6,#0FFH 1指令周期10

DEL2:MOV R5,#80H 1指令周期25510=2550

KONG:NOP 1指令周期12825510=326400

DJNZ R5,$ 2指令周期212825510=652800

DJNZ R6,DEL2 2指令周期225510=5110

DJNZ R7,DEL1 2指令周期210=20

RET 2

延时时间=1+10+2550+326400+652800+5110+20+2 =986893μs约为1s

整理得:延时时间=[(3第一层循环+3)第二层循环+3]第三层循环+3 ⑩

结论:针对初学者的困惑,对汇编程序的延时算法进行了分步讲解,并就几种不同写法分别总结出相应的计算公式,只要仔细阅读例1中的详解,并用例2、例3来加深理解,一定会掌握各种类型程序的算法并加以运用。

单片机延时子程序

1)延时为:20ms 晶振12M

1+(1+2248+2)4+1+1+1=20000US=20MS

用汇编优点就是精确

缺点就是算有点复杂

DELAY20MS:

MOV R7,#4

D1:

MOV R6,#248

DJNZ R6,$

DJNZ R7,D1

NOP

NOP

RET

2)一些通过计算51汇编指令得出的软延时子程序

;

;延时10uS

;

time10us:               mov     r5,#05h                 ;11us

djnz    r5,$

ret

;

;延时50uS

;

time50us:               mov     r5,#19h                 ;51us

djnz    r5,$

ret

;

;延时100uS

;

time100us:              mov     r5,#31h                 ;996us

djnz    r5,$

ret

;

;延时200uS

;

time200us:              mov     r5,#64h                 ;201us

djnz    r5,$

ret

;

;延时250uS

;

time250us:              mov     r5,#7ch                 ;2496us

djnz    r5,$

ret

;

;延时350uS

;

time350us:              mov     r5,#0afh                 ;351us

time350us_1:            djnz    r5,time350us_1

ret

;

;延时500uS

;

time500us:              mov     r5,#0fah                 ;501us

time500us_1:            djnz    r5,time500us_1

ret

;

;延时1mS

;

time1ms:                mov     r5,#0fah                ;1001us

time1ms_1:              nop

nop

djnz    r5,time1ms_1

ret

;

;延时25mS

;

time2_5ms:              mov     r5,#05h          ;2496ms

time2_5ms_1:            mov     r6,#0f8h         ;497us

djnz    r6,$

djnz    r5,time2_5ms_1

ret

;

;延时10mS

;

time10ms:               mov    r5,#14h         ;10262ms

time10ms_1:             mov    r6,#0ffh        ;511us

djnz   r6,$

djnz   r5,time10ms_1

ret

;

;延时50mS

;

time50ms:               mov    r5,#63h         ;49996ms

time50ms_1:             mov    r6,#0fbh        ;503us

djnz   r6,$

djnz   r5,time50ms_1

ret

;

;延时100mS

;

time100ms:              mov     r5,#0c3h        ;100036ms

time100ms_1:            mov     r6,#0ffh        ;511us

djnz    r6,$

djnz    r5,time100ms_1

ret

;

;延时200mS

;

time200ms:              mov     r5,#02h         ;250351ms

time200ms_1:            mov     r6,#0f4h        ;125173ms

time200ms_2:            mov     r7,#0ffh        ;511us

djnz    r7,$

djnz    r6,time200ms_2

djnz    r5,time200ms_1

ret

;

;延时500mS

;

time500ms:              mov    r5,#04h         ;500701ms

time500ms_1:            mov    r6,#0f4h        ;125173ms

time500ms_2:            mov    r7,#0ffh        ;511us

djnz   r7,$

djnz   r6,time500ms_2

djnz   r5,time500ms_1

ret

;

;延时1S

;

time1s:                 mov    r5,#08h         ;1001401ms

time1s_1:               mov    r6,#0f4h        ;125173ms

time1s_2:               mov    r7,#0ffh        ;511us

djnz   r7,$

djnz   r6,time1s_2

djnz   r5,time1s_1

ret

12M晶振 机器周期为1US  NOP为单周期指令 DJNZ为双周期指令.

3)

;;晶振12MHZ,延时1秒

DELAY:MOV   72H,#100

LOOP3:MOV   71H,#100

LOOP1:MOV   70H,#47

LOOP0:DJNZ   70H,LOOP0

NOP

DJNZ   71H,LOOP1

MOV   70H,#46

LOOP2:DJNZ   70H,LOOP2

NOP

DJNZ   72H,LOOP3

MOV   70H,#48

LOOP4:DJNZ   70H,LOOP4

4);延时1分钟子程序,F=6MHz

;程序已测过,延时时间60,000,0000uS

delay60s:mov r3,#228

mov r2,#253

mov r1,#219

loop1:   djnz r1,$

djnz r2,loop1

djnz r3,loop1

nop

ret

5)计算机反复执行一段程序以达到延时的目的称为软件延时,单片机程序中经常需要短时间的延时,但是相当一部分人对延时程序很模糊,对延时程序的算法不够了解,在这里我以12MHz晶振和两个经典延时子程序为例,详细分析单片机汇编延时程序。

何为时钟周期、机器周期、和指令周期?

时钟周期:也就是振荡周期,以12MHz的时钟脉冲为例,那时钟周期就为(1/12000000)s=(1/12)us;

机器周期:1个机器周期=6个状态周期=12个时钟周期=1us;

指令周期:CPU执行一条指令所需要的时间称为指令周期,指令周期是以机器周期为单位的,不同的指令所需的机器周期不一定相同,可参考51单片机指令速查表。

由上可得:CPU执行一条单周期指令,需要1us;执行一条双周期指令需要2us。

下面是具体的延时子程序分析:

01s延时子程序(12MHz晶振):

MOV R7,#200   ;单周期指令(1us)

D1:     MOV R6,#250   ;单周期指令(1us)

DJNZ R6,$      ;双周期指令(2us)//该指令自身执行R6次

DJNZ R7,D1     ;双周期指令(2us)//D1执行R7次

RET            ;双周期指令(2us)

T=1+(1+2R6+2)R7+2

=100603us

≈01s

05s延时子程序(12MHz晶振):

MOV R7,#5     ;单周期指令(1us)

D1:     MOV R6,#200   ;单周期指令(1us)

D2:     MOV R5,#250   ;单周期指令(1us

DJNZ R5,$      ;双周期指令(2us)//该指令自身执行R5次

DJNZ R6,D2     ;双周期指令(2us)//D2执行R6次

DJNZ R7,D1     ;双周期指令(2us)//D1执行R7次

RET            ;双周期指令(2us)

T=1+[1+(1+2R5+2)R6+2]R7+2

=503018us

≈05s

6) 51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。

ORG        0                   ;程序从0地址开始

START:      MOV      A,#0FEH     ;让ACC的内容为11111110

LOOP:         MOV      P2,A            ;让P2口输出ACC的内容

RR          A                  ;让ACC的内容左移

CALL     DELAY       ;调用延时子程序

LJMP     LOOP          ;跳到LOOP处执行

;01秒延时子程序(12MHz晶振)===================

DELAY:      MOV      R7,#200      ;R7寄存器加载200次数

D1:               MOV      R6,#250      ;R6寄存器加载250次数

DJNZ     R6,$             ;本行执行R6次

DJNZ     R7,D1          ;D1循环执行R7次

RET                            ;返回主程序

END                           ;结束程序

执行程序的过程 :

开始执行程序时,必须先给程序计数器PC赋以第一条指令的首地址00H,然后就进入第一条指令的取令的取指令阶段。

第一条指令的执行过程:

取指令阶段:

①将程序计数器PC的内容(00H)送至地址寄存器AR,记为PC AR。

②程序计数器PC的内容自动加1变为01H,为取下一个指令字节作准备,记为PC+1 PC。

③地址寄存器AR将00H通过地址总线送至存储器,经地址译码器译码,选中00号单元,记为AR M。

④CPU发出"读"命令。

⑤所选中的00号单元的内容B0H读至数据总线DB,记为(00H) DB。

⑥经数据总线DB,将读出的B0H送至数据寄存器,记为DB DR。

⑦数据寄存器DR将其内容送至指令寄存器IR,经过译码,控制逻辑发出招待该条指令的一系列控制信号,记为DR IR,IR ID、PLA。经过译码,CPU"识别"出这个 *** 作码就是MOV A,03指令,于是,它"通知"控制器发出执行这条指令的各种控制命令。

进入 do

执行循环体

判断 while 小括号里的条件 (流程图分叉)

叉1,条件为真 回上面 执行循环体

叉2,条件为假 (为0就是假)退出循环,往下走。

while(0)条件为假,所以 do 循环体 执行1次。

以上就是关于传统流程图全部的内容,包括:传统流程图、程序流程图怎么表示中断啊、单片机延时子程序流程图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10131153.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存