单片机师傅清指教
我是12年毕业的,现在在一家公司工作,想好好学习下单片机的知识,自己学很吃力,想找个单片机方面的高手做师傅,有时间的时候能知道我一二。最好精通单片机硬件,搭线,汇编,C语言,C++的,工作经验经验丰富。。。如果有好心人请回复我。还有我是新手,很多地方不懂,如果不能悉心指导的就不要回复了。非诚勿扰
可采用Arduino开发板,程序和应用程序是免费,特别适合菜鸟!
如果想讨论之类的我可以帮你,师傅之类的就不敢当了,我学过几年单片机,现在也是做单片机工作的
状态机的概念状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。
比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些,但这不影响我们对状态机的认识。
进一步看,击键动作本身也可以看做一个状态机。一个细小的击键动作包含了:释放、抖动、闭合、抖动和重新释放等状态。
同样,一个串行通信的时序(不管它是遵循何种协议,标准串口也好、I2C也好;也不管它是有线的、还是红外的、无线的)也都可以看做由一系列有限的状态构成。
显示扫描程序也是状态机;通信命令解析程序也是状态机;甚至连继电器的吸合/释放控制、发光管(LED)的亮/灭控制又何尝不是个状态机。
当我们打开思路,把状态机作为一种思想导入到程序中去时,就会找到解决问题的一条有效的捷径。有时候用状态机的思维去思考程序该干什么,比用控制流程的思维去思考,可能会更有效。这样一来状态机便有了更实际的功用。
程序其实就是状态机。
也许你还不理解上面这句话。请想想看,计算机的大厦不就是建立在“0”和“1”两个基本状态的地基之上么?
状态机的要素
状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
①现态:是指当前所处的状态。
②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
如果我们进一步归纳,把“现态”和“次态”统一起来,而把“动作”忽略(降格处理),则只剩下两个最关键的要素,即:状态、迁移条件。
状态机的表示方法有许多种,我们可以用文字、图形或表格的形式来表示一个状态机。
纯粹用文字描述是很低效的,所以就不介绍了。接下来先介绍图形的方式。
状态迁移图(STD)
状态迁移图(STD),是一种描述系统的状态、以及相互转化关系的图形方式。状态迁移图的画法有许多种,不过一般都大同小异。我们结合一个例子来说明一下它的画法,如图1所示。
图1 状态迁移图
①状态框:用方框表示状态,包括所谓的“现态”和“次态”。
②条件及迁移箭头:用箭头表示状态迁移的方向,并在该箭头上标注触发条件。
③节点圆圈:当多个箭头指向一个状态时,可以用节点符号(小圆圈)连接汇总。
④动作框:用椭圆框表示。
⑤附加条件判断框:用六角菱形框表示。
状态迁移图和我们常见的流程图相比有着本质的区别,具体体现为:在流程图中,箭头代表了程序PC指针的跳转;而在状态迁移图中,箭头代表的是状态的改变。
我们会发现,这种状态迁移图比普通程序流程图更简练、直观、易懂。这正是我们需要达到的目的。
状态迁移表
除了状态迁移图,我们还可以用表格的形式来表示状态之间的关系。这种表一般称为状态迁移表。
表1就是前面介绍的那张状态迁移图的另一种描述形式。
表1 状态迁移表
①采用表格方式来描述状态机,优点是可容纳更多的文字信息。例如,我们不但可以在状态迁移表中描述状态的迁移关系,还可以把每个状态的特征描述也包含在内。
②如果表格内容较多,过于臃肿不利于阅读,我们也可以将状态迁移表进行拆分。经过拆分后的表格根据其具体内容,表格名称也有所变化。
③比如,我们可以把状态特征和迁移关系分开列表。被单独拆分出来的描述状态特征的表格,也可以称为“状态真值表”。这其中比较常见的就是把每个状态的显示内容单独列表。这种描述每个状态显示内容的表称之为“显示真值表”。同样,我们把单独表述基于按键的状态迁移表称为“按键功能真值表”。另外,如果每一个状态包含的信息量过多,我们也可以把每个状态单独列表。
④由此可见,状态迁移表作为状态迁移图的有益补充,它的表现形式是灵活的。
⑤状态迁移表优点是信息涵盖面大,缺点是视觉上不够直观,因此它并不能取代状态迁移图。比较理想的是将图形和表格结合应用。用图形展现宏观,用表格说明细节。二者互为参照,相得益彰。
用状态机思路实现一个时钟程序
接下来,我将就状态机的应用,结合流程图、状态迁移图和状态迁移,举一个实际例子。下面这张图是一个时钟程序的状态迁移图,如图2所示。
图2 时钟程序状态迁移图
把这张图稍做归纳,就可以得到它的另一种表现形式——状态迁移表,如表2所示。
表2 时钟程序状态迁移表
状态机应用的注意事项
基于状态机的程序调度机制,其应用的难点并不在于对状态机概念的理解,而在于对系统工作状态的合理划分。
初学者往往会把某个“程序动作”当作是一种“状态”来处理。我称之为“伪态”。那么如何区分“动作”和“状态”。本匠人的心得是看二者的本质:“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。
初学者的另一种比较致命的错误,就是在状态划分时漏掉一些状态。我称之为“漏态”。
“伪态”和“漏态”这两种错误的存在,将会导致程序结构的涣散。因此要特别小心避免。
更复杂的状态机
前面介绍的是一种简单的状态结构。它只有一级,并且只有一维,如图3所示。
图3 线性状态机结构
如果有必要,我们可以建立更复杂的状态机模型。
1 多级状态结构
状态机可以是多级的。在分层的多级状态机系统里面,一个“父状态”下可以划分多个“子状态”,这些子状态共同拥有上级父状态的某些共性,同时又各自拥有自己的一些个性。
在某些状态下,还可以进一步划分子状态。比如,我们可以把前面的时钟例子修改如下:
把所有和时钟功能有关的状态,合并成1个一级状态。在这个状态下,又可以划分出3个二级子状态,分别为显示时间、设置小时、设置分钟;
同样,我们也可以把所有和闹钟功能有关的状态,合并成1个一级状态。在这个状态下,再划分出4个二级子状态,分别为显示闹钟、设置“时”、设置“分”、设置鸣叫时间。
我们需要用另一个状态变量(寄存器)来表示这些子状态。
子状态下面当然还可以有更低一级的孙状态(子子孙孙无穷尽也),从而将整个状态体系变成了树状多级状态结构,如图4所示。
图4 树状多级状态结构
2 多维状态结构
状态结构也可以是多维的。从不同的角度对系统进行状态的划分,这些状态的某些特性是交叉的。比如,在按照按键和显示划分状态的同时,又按照系统的工作进程做出另一种状态划分。这两种状态划分同时存在,相互交叉,从而构成了二维的状态结构空间。
举一个这方面的例子,如:空调遥控器,如图5所示。
图5 多维状态机结构
同样,我们也可以构建三维、四维甚至更多维的状态结构。每一维的状态都需要用一个状态变量(寄存器)来表示。
无论多级状态结构和多维状态结构看上去多么迷人,匠人的忠告是:我们依然要尽可能地简化状态结构,能用单级、单维的结构,就不要给自己找事,去玩那噩梦般的复杂结构。
简单的才是最有效的。
结束语
对状态机的理解需要一个由浅入深的过程。这个过程应该是与实践应用和具体案例思考相结合的。当一种良好的思路成为设计的习惯,它就能给设计者带来回报。愿这篇手记里介绍的基于状态机的编程思路能给新手们带来一些启迪,帮助大家找到“程序设计”的感觉。
...转速进给都调过,怎么回事,请师傅们指教,谢谢
1.打表装刀杆,如果刀杆装的不正会影响切刀的角度,会造成某一边挤压,损坏刀片和刀杆。2.中心高不对,会崩刀头。3.不锈钢比较黏,转速进给不易过高,冷却液要充分。400转,F.03,
请教老师时用指教好还是指点好?
老师指点好。因为学生不会可以让老师指点。指教是指不管学生会不会只是老师都在讲。有人说过:孩子读书80%靠自己,老师指点10%。也就是说孩子最后能不能学习到东西,关键的还是看孩子自己,对于这样的观点,你们觉得这句话对吗?我们曾有句老话说:师傅领进门,修行靠个人。那么,在学习上,老师到底是...
请指教,那位师傅知道缝纫机的调试?
我只会机械的
想知道注塑机怎样调坐台高低,有懂得师傅请指教谢谢了
座台支座上的固定螺丝就是调节高低左右的。
请指教一下,机预盒安装时信号效好,搜索后就没有够号,信号变红足什么原因...
信号强度高时,显示的信号好,但这种信号可能没有接收到有效的信息,就和电脑接通路由器一样,电脑虽然显示接通,但路由器没有连接外部网络,也不能用。
各位师傅,请指教一下,这是什么植物
猫眼竹芋(学名:Calathea veitchiana Veitch ex Hook.f.)[1]:竹芋科,肖竹芋属多年生常绿草本观叶植物。株高可达100厘米,叶片长椭圆形,头状花序,小苞片膜质;萼片近相等;花冠管与萼片硬革质,蒴果开裂为3瓣,种子三角形。原产于热带美洲及印度洋的岛域中。性喜半阴,不耐直射阳光,适应在...
电脑花样机老是起针时不上底线怎么办求师傅指教,
1-调系统,增加起针慢针功能。2-前三针中压脚可以适当底一些。增加压脚压料时间,有利于起线。3-挑线弹簧强度、行程降低。4-修改图形,起针部分多来回走几针。如果以上不行,只能增加起针夹面线装置。有效避免起针脱线问题。
...加载不卸载.把发动机憋熄火.是哪个阀出问题了.请师傅们指教.原...
压力调节阀 或者是鸡头上面的进气阀片控制脱落就会出现这现象
请问DK77-20线切割机床最大切割锥度是多少?请师傅们指教 谢谢
锥度大小是机器固有的参数,绝大部分是3°的,单边要做到17°只能选用大锥度的,大锥度和小锥度在锥度装置上有明显区别,导轮会跟着一起丝架一起旋转的一般是大锥度机器
...油压油温气压都正常,但就是不走路,请师傅们指教一下。
1:先检查手刹车是否松开,(我们的手刹车是停车制动,如不松开车无法行走) ,2:检查右手侧高低速是否处于空当位置,3:检查变速操纵阀上的隔离阀是否卡滞。4:检查住传动轴是否转动,(转不行走为变速箱离合器打滑,不转不行走于变速箱无太大关系)如果是新车就按上列检查,无太大问题,旧车排除...
实浩康力: 很多想学单片机的人问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机,如何开始上手,如何开始熟练这个过程给大家讲讲. 先说说单片机,一般我们现在用的比较多的的MCS-51的单片机,它的资料...
九寨沟县17196188067: 单片机高手指教~~~ - ?
实浩康力: 从字面上分析,这是一个通过SPI总线向nRF24L01写控制字的函数,括号内的参数的意思是写nRF24L01中的REGISTER(配置寄存器)+STATUS(状态寄存器),而最后一个参数不看具体程序是不知道含义的.其实这些文字都是编程的人根据自己的习惯,出于易读方面的考虑确定的,并不是语法方面的硬性规定.
九寨沟县17196188067: 单片机编程求指教?
实浩康力: 还有一种就是uchar table【】,加code的表示将数组存放在rom里面,不加的话就会放在ram里面.
九寨沟县17196188067: 单片机师傅教教我 - ?
实浩康力: 还有一个办法,就是采用64个光敏电阻来检测,最为简单.
九寨沟县17196188067: 请问老师,单片机系统的FLASH与EEPROM怎样加密?请师傅指教. - ?
实浩康力: 一般来说有编程器的话这些都可以一次性解决了.看了你的信息了,你要是用的AT89S51的话也可以把产品做好后通过ISP编程线来进行编程了,ISP编程线可以自己做,只要我们的PCB板上留出接口就可以,软件可以在爱特梅尔公司的网站上下载,这些都可搜的到,我现在在越南出差,网速很慢你要是一直没有找到的话等我回家后可以发给你个.不过给M29F040-120N1写程序的话要用编程器,但具体的型号我一下也想不出,你可以在百度里面搜下,我的网速很慢.
九寨沟县17196188067: 自学单片机,怎么学比较快?高手指教. - ?
实浩康力: 自学单片机需要数字电路 模拟电路 特别是数字电路当然最好有些汇编语言的基础,不过没有也没有关系,自学单片机需要的重在不断实践,调试程序,读程序,分析程序,最后才能编制程序, 另外自学单片机首先要掌握单片机的 硬件的 所有资...
九寨沟县17196188067: 零基础想学单片机,想请高手指教?
实浩康力: 会了51 ,avr就更好学了 ,先51吧 最基础了开始 51论坛的资料也多些 板子应该有一个,淘宝去淘一个大概100多,软件就keil和ISP,keil是编译器, ISP是烧写用的
九寨沟县17196188067: 请教一下各位单片机师傅!! 单片机是不是有分可多次性擦清资料跟一次性写入资料就不可再擦清的呢? - ?
实浩康力: 是的,有的只能写入一次,叫OTP,可以多次写入的,叫MTP,或Flash的.
九寨沟县17196188067: 新手学单片机怎么入门??
实浩康力: 我也是刚上手,我大一,没有指导老师,周围没有氛围,没有项目,全凭网络和自己摸索,我先在网上买了一块开发板,100多,带了一块光盘,里面是郭天祥的十天学会51单片机,这时候我的c语言还基本是o基础,然后就看郭天祥的视频,一点一点的看,不懂再倒回去看,同时keil上写视频上的小程序,写完下到开发板上看现象,一点一代从点亮一盏灯,到软件延时,按键检测,定时器设置,中断,串口,这些都是单片机基础盖帘,我建议初学先选51上手,它8位,对初学者好上手,渐渐地,你就会发现你会自己分析程序了,会有些想法,想要自己组装硬件,写程序,再看其他单片机也没什么问题了,对硬件底层的理解也越来越深刻了,这时候再到机构去上个培训,往嵌入式发展,前景就很好了
九寨沟县17196188067: 单片机清零 - ?
实浩康力: 这种一般这样搞还可以,程序里隔一段时间显示一次,也就是循环显示,当然还要循环检测按键,当第二次按键按下时,给那几个变量赋值,全部清零,然后就不管了,等下一次显示时就更新了,但是你用的是液晶显示就可以不这样,每次这几个变量改变时显示一次,应为液晶显示后不会消失,方法就像楼上朋友那样,祝你好运