电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

单片机程序方案傍边的“分层屏蔽”思维原理和运用

2017-04-17 19:22分类:PLC基础知识 阅读:

 

分层的思想,并不是啥奥妙的东西,实习上许多做项意图工程师自身自个也会在用。看了不少帖子都发现没有提及这个东西,可是分层构造确是很有用的东西,参透后会有一种茅塞顿开的感触。假定说我不了解LCD怎样驱动,那好办,看一下datasheet,参看一下他人的程序,很快就可以做出来。可是假定不了解程序方案的思想的话,会给你做项意图进程中带来许多许多的利诱。

参看了市道上各式各样的嵌入式书本,MCS-51,AVR,ARM等都有看过,可是没有发现有哪本是介绍方案思想的,就算有也是百里挑一。写程序不难,可是程序怎样才调写的好,写的快,那是需求害履历堆集的。构造化模块化的程序方案的思想,使最根柢的恳求。可是这么将这个笼统的概念运用到工程实习傍边恩那需求在做项意图进程中履历苦难,将一些东西总结出来,笼统跋涉为理论,对履历的堆集和技能的传达都大有裨益。所以鄙人出来献丑一下,总结一些东西。

就我自个的履历而谈,有两个方案思想对错常首要的。

一个即是“时刻片轮的方案思想”,这个对实习中处理多使命疑问十分有用,通常可以用这个东西来区别一自个是单片机学习者,仍是一个单片机工程师。这个有必要把握。因为网上介绍这个的帖子也不少,所以这儿就不多说了。

第二个即是我今日想说的主题“分层屏蔽的方案思想”。下面用扫描键盘程序比方作为引子,引出今日说的东西。

疑问的提出

单片机学习板通常为了简略起见,将按键分配的极好,例如悉数4*4的键盘矩阵分配到P1口上面,8条操控线,刚好。这么的话程序也十分好写。只需求简略的

KEY_DAT = P1;

端口的数据就读进来了。

当然,实习中没有这么好的作业。在实习的项目运用傍边,单片机引脚的复用恰当凶狠,这跟那些所谓的单片机学习板就有很大的纷歧样了。

别的一个要素,通常方案来说,是“软件协作硬件”的方案流程,简略点说即是,先断定好硬件原理图,硬件布线,终究才是软件的开发,因为硬件批改起来比照费事,相对来说软件批改的时分比照好改。这个即是中国传统的阴阳平衡哲学原理。硬件方案和软件方案正本即是鱼和熊掌的联络,两者不行兼得。便当了硬件方案,很或许给写软件带来很大的费事。反过来说,便当了软件方案,硬件方案也会恰当的费事。假定硬件方案和软件计齐截同便当了,那只需两种或许,一是这个方案方案十分简略,二是方案师现已到达了一个十分高的境地。咱们不思考那么多状况,单纯从常用的实习运用的视点来看疑问。

硬件为了布线的便当,许多时分会或许将IO口分配到纷歧样的端口上面,例如上面说的4*4键盘,8根线别离分配到P0 P1 P2 P3上面去了。那么,开发板的那些扫描键盘程序可以去见鬼了。怎样扫按键我想起了我刚开端学习的时分,分红3段十分相似的程序,一个一个按键的扫描的履历……

或许有人不甘愿,“那些东西我花了很长期学习的,也用的好好的,怎样能说一句不必就不必”虽然有点残暴,可是我仍是想说“兄弟,承受实习吧,实习是严峻的……”

不过,人区别于低一级动物的纷歧样,是人会发明,在碰到艰难的时分会想办法处理,所以咱们开端了深思……

终究咱们引进初中数学学的“映射”的概念来处理疑问。根柢思想即是,将纷歧样端口的按键映射到相同端口上面。

这么按键扫描程序就分红3个层次了。

1)最底层的是硬件层,完毕端口扫描,20ms延时消抖,将端口的数据映射到一个KEY_DAT寄存器上面,KEY_DAT作为对上层驱动层的一个接口。

2)基地的一层是驱动层,驱动层只对KEY_DAT寄存器的数值进行操作。简略点说,咱们不论底层的硬件是怎样接线的,在驱动层都不需求关怀,只需求关怀KEY_DAT这个寄存器的数值是啥就可以了。这么出来的直接作用即是“屏蔽了底层硬件的区别”,所以驱动层写的程序就可以通用了。

驱动层的别的一个功用是为了上层供给音讯接口。咱们用了相似window程序的音讯的概念。这儿可以供给一些按键音讯,例如:按下音讯,松开音讯,长按键音讯,长按键的时分的步进音讯,等等。

3)运用层。这儿即是依据项意图纷歧样别离写按键功用程序,归于最上层的程序。它运用的是驱动层供给的音讯接口。在运用层写程序的思想即是,我不论底层是怎样作业的,我只关怀按键音讯。有按键音讯来的时分我就施行功用,没有音讯来的时分,我就啥也不做。

下面用一个简略的常用的比方,阐明咱们这个方案思想的用法。

秒表调整时刻的时分,恳求按着某个按键不放,时刻能接连的向上添加。这个东西很有用,实习的家电顶用处很广泛。

在看下面的东西之前,咱们可以想一下,这东西难吗信任咱们都会很嘹亮的答复,“不难!!”,可是我再问:“这东西费事吗”我信任许多人必定会说“很费事!!”这不由让我想起先步学单片机的时分写这种按键的那程序,杂乱无章的构造。假定不信任的话,可以自个用51写一下哦,那样就愈加能领会这篇文章说的分层构造的优胜性。

项目恳求:

两个按键,别离分配在P10和P20,别离是“加”“减”按键,恳求长按键的时分完毕接连加和接连减的功用。

实战:

假定:

按键上拉,没有按键的时分高电平,有按键的时分低电平,别的,为了超卓疑问,这儿没有将延时消抖的程序写上去,在实习项目中应当加上。C言语函数参数的传递多种多样,这儿作为比方,用了最简略的大局变量来传递参数,当然你也可以用unsigned char ReadPort(void)回来一个读键作用,乃至还可以void ReadPort(unsigned char *pt)用一个指针变量传递地址而到达直接批改动量的意图。办法是多种多样的,这个挑选于每自个的程序特性。

1)开端写硬件层程序,完毕映射

#define KYE_MIN 0X01

#define KEY_PLUS 0X01

unsigned char KeyDat;

void ReadPort(void)

{

if (P1 KEY_PLUS == 0 ){

KeyDat |= 0x01 ;

}

if (P2 KEY_MIN == 0 ){

KeyDat |= 0x02 ;

}

}

C言语应当很简略看懂吧假定KEY_PLUS按下,P10口读到低电平,则P1 KEY_PLUS的作用为0,满意if的条件,进入KeyDat |= 0x01是将KeyDat的bit0置一,也即是说,将KEY_PLUS映射到KeyDat的bit0

KEY_MIN是相同的道理映射到KeyDat的bit1

假定KeyDat的bit0为1,则阐明KEY_PLUS按下,反则亦然。

不需求想的很奥妙,映射即是这么一回事。假定还有别的按键的话,用相同办法,将他们悉数映射到KeyDat上面。

2)驱动层程序编写

假定将KeyDat期望成P1口,那么这个跟学习板那规范的扫描程序不便当当当利利利当当当利当利当利当当利当利利利利利利利当当是相同了吗对的,这个即是底层映射的意图了。

3)运用层程序编写

依据音讯

硬件层是有必要别离出来,可是驱动层和运用层的恳求就不那么严峻了,实习上一些简略的项目没有必要将这两层别脱离来,依据实习运用活络应对就可以了。正本这么写程序是很便当移植的,依据板子的纷歧样而恰当的批改一下硬件层那个ReadPort函数就完毕了,驱动层和运用层许多代码可以不经过批改派接用,很能跋涉开发功率的。当然这个按键程序会存在必定的疑问,格外是遇到常闭按键和点触按键的混合运用的场合。这个留给咱们自个去想了,横竖疑问老是能找处处理办法的,虽然办法有好有坏。

完毕语

以按键为前语,介绍了程序方案傍边的“分层屏蔽”的思想的原理和运用,按键仅仅一个比方,正本分层的思想广泛存在着程序方案傍边。仔细留神一下的话发现正本window,linux,网络的tcp/ip构造悉数都是分层的。这东西不是绣花枕头,而是实惯用在工程上面的,仅仅往常不多见帖子介绍,或许没有人特意这么来总结,又或许是有履历的工程师作为藏在心中的法宝吧,这个就不得而知。

上一篇:RS-422A接口_RS-422A平衡驱动差分接纳电路

下一篇:51单片机的引脚及功用

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部