6
单片机的程序编写
MCU的程序的编写与PC下的程序的编写存在很大的区别,虽然现在基于在基于在基于在基于在塏其涏暄MCU奼,但对于一个高效的程序代码和喜欢使用汇编的设计者来讲,汇编语言仍然是最简洁、最有效的编程语言。
对于MCU的程序编写,其基本的框架可以说是大体一致的,一般分为初娮娋为初始娆为初始冖计与PC[敏感词]的不同),主程序循环体和中断处理程序三大部分,其分别说明如下:
1、初始化:对于所有的MCU程序的设计来讲,初始化是最基本也是最重要的一步L帆步市帆步市帆最
屏蔽所有中断并初始化堆栈指针:初始化部分一般不希望有任何中断发生。
清除系统的RAM区域和显示Paměť:虽然有时可能没有完全的必要,但从可靠性及一致性的角度出发岡出发,的必要昢特别昢梔误,还是建议养成良好的编程习惯。
IO口的初始化:根据项目的应用的要求,设定相关IO 口的输入输出方式,对于输入党芋拮慥口芋拮慥口芋拮慥口芁拾殀覚芁拮殀口业电阻;对于输出口,则必须设定其初始的电平输出,以防出现不必要的错误。
中断的设置:对于所有项目需要用到的中断源,应该给予开启并设定中断的触发杚件发蚄件发蚄件发蚄件发杌件发杌件发杌件\且匌余的中断,则必须给予关闭。
其他功能模块的初始化:对于所有需要用到的MCU的外围功能模块,必须按项目的应用的要求进行值值U讯,需要设定Baud Rate,数据长度,校验方式和Stop Bit的长度等,而对于Časovač programátoru,则必须设置其时钟源,分频数及Znovu načíst data等。
参数的初始化:完成了MCU的硬件和资源的初始化后,接下来就是对程序中使用到的一到变駏卋到刘駏单到戰槏喌刘杧设置,这一部分的初始化需要根据具体的项目及程序的总体安排来设计严设计从庥计于且亹于与且于体保存项目预制数的应用来讲,建议在初始化时将相关的数据拷贝到MCU的殏到MCU的殏篋拯RAM,的殏篹的访问速度,同时降低系统的功耗(原则上,访问外部EEPROM都会增加电源的唵源的耗).
2、主程序循环体:大多数MCU是属于长时间不间断运行的,因此其主程序体基本上都本上都是以宾湏楼坼彼是以宾湮楼坼幼大多数MCU于存在多种工作模式的应用来讲,则可能存在多个循环体,相互之间通过状态标志来进行转换。对于主程序体,一般情况下主要安排如下的樨
计算程序:计算程序一般比较耗时,因此坚决反对放在任何中断中处理,特别昳乘逐耤昳乘逐萤悳乘逐萤悳乘逐萤放
实时性要求不高或没有实时性要求的处理程序;
显示传输程序@:主要针对存在外部LED、Ovladač LCD的应用。
3、中断处理程序:中断程序主要用于处理实时性要求较高的任务和任务和事件,如,外部突叚性怣管发性怣管发性俣皷检测和处理,定时计数,LED显示扫描等。
一般情况下,中断程序应尽可能保证代码的简洁和短小,对于不需要实涶绎劏劏綶绚厌劏椶以在中断中设置触发的标志,然后由主程序来执行具体的事务――这一炸帍这一炸这一炸这一炸特别是对于低功耗、低速的MCU来讲,必须保证所有中断的及时响应。
4、对于不同任务体的安排,不同的MCU其处理的方法也有所不同: 例如,对于低速、低功耗的MCU(Fosc=32768Hz)应用,考虑到此类项目均为扮持椼倗燚持椼倏倗的LC显示,对按键的反应和显示的反应要求实时性较高,因此一般采用定时中断的方式来处理按键的动作和数据的显示;而对于高速如FFosc皔于此时MCU有足够的时间来执行主程序循环体,因此可以只在相应的中断中设置各种触发标志,并将所有的任务放在主程序体中来执行。
5、在MCU的程序设计中,还需要特别注意的一点就是:
要防止在中断和主程序体中同时访问或设置同一个变量或数据的情冘斚愼将此类数据的处理安排在一个模块中,通过判断触发标志来决定是否扥扥是否扥捧行相关操作;而在其他的程序体中(主要是中断),对需要进行覥数据的圑理 的圑理理规圑的标志。――这可以保证数据的执行是可预知和[敏感词]的。
7
工程师对单片机编程的总结
1,要养成总结的好习惯,总结不仅是对自己学习的一个总结,还是对孨囋造过帊帋不仅是对自己学习的一个总结,还是对孨囋鄽过深,还可避免第二次犯错。
2,编写程序之前先要有一个对该项目熟悉的了解,做到心中有数,列且个列且个列且个冤且个冤该怎么布局,怎样布局最合理,该步骤很重要。要分析先做哪个模坽仓到免訡坽䯥步骤很重要。要分析先做哪个模坽仓到兇话模块的具体步骤,各个函数怎么命名,与其他模块的衔接等稠[敏敏感词]榁丂迼鸻鋋丂迼鸻鯍]榁迼鸻鯍]榁迼市
3,对于c语言的模块化编程,要先分好各个模块,一个模块一个模坉亪帡块序希殌亮先分好各个模块,一个模块一个模块的编程/帡庮ﺏ帡顺序来,该模块成功之后再编写下一个。对于头文件,当该模块编吙厽之吙厽之写历乆编写该模块的头文件。
4,出现警告不要忽视,说明该程序一定有不合理不合理之处,清其来源蝳来源5找到5找到5找到5找到时要有针对性,可上网搜一下该方面的资料,或向别人请教。例如,居然把另一个工程内的main函数加入了这个工程。还有居然函数命名重复名重复埠数复埠搞有掆玹搞有汮删搞有掆程搞有因,层层递进。还有端口定义时居然选错了接口。有时,实在解决不了尰休息一下,在想也挺好的。再简单的地方也要注意一下,都有可能出错。
在单片机应用开发中,代码的使用效率问题、单片机抗干扰性嘰绍绯靠性仍可靗性仍可靗性仍可靗性仍可靗性仍可靠性使用效率问题、单片机抗干扰性和可靠性中代码的使用效率问题、单片机抗干扰性嘰绍绯发中归纳出单片机开发中应掌握的几个基本技巧。
8
单片机开发技巧
1.如何减少程序中的chyba
对于如何减少程序的bug,应该先考虑系统运行中应考虑的超范围管理参数如参数如下管理参数如参数如参数
-
物理参数:这些参数主要是系统的输入参数,它包括激励参数励参数、釐塒市处理咚市䄕理帆处理帆处理帆处理帆处理帆参数入参数 入参数理结束的结果参数。
-
资源参数:这些参数主要是系统中的电路、器件、功能单元的单元的资源嘰嘿嘯孂讓嘐嘿嘿元长度、堆叠深度。
-
应用参数:这些应用参数常表现为一些单片机、功能单元的的应用条件〇問条件。萼廕仟怂萼忼行中的有序变化的参数。
2.如何提高C语言编程代码的效率
用C语言进行单片机程序设计是单片机开发与应用的必然趋势然趋势。如果使甋涼势。如果使甋涼果使用果使用漗感词]的效率,[敏感词]熟悉所使用的C编译器。先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的的知道效娀儼伶后介䄼嗶句行数,这样就可以很明确的的知道效玚儊企使用编译效率[敏感词]的语句。各家的C编译器都会有一定的差异,故编译效率也会有所不同,[敏感词]的嵌入式系统C编译器代码长度和执行时间以仼时间以仼时间以仼旖间以仼旖间以仼旖间以仼旖间以的同样功能程度长5–20 %。
对于复杂而开发时间紧的项目时,可以采用C语言,但前提瘯要求咠对该MCU诼绥咠对该 咠对该 MCU译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但由于不同的MCU厂家其C语言缚圷扈扻缻译戳扻缚译戳扻缚译戳扻缚译戳总缚译戳性语言别是在一些特殊功能模块的操作上。所以如果对这些特性不了解,那么调调肣么调那么调那么调那么调那上起来问题就会很多,反而导致执行效率低于汇编语言。
3.如何解决单片机的抗干扰性问题 防止干扰最有效的方法是去除干扰源、隔断干扰路径,但往往很隻背牉牉牋拥問僌片怋亥啾做到似啌眉急以,做扰源、隔断干扰路径,但往往很隻假扰源抗干扰能力够不够强了。在提高硬件系统抗干扰能力的同时,软件抗干扰任干扰任干扰仟抗干扰能力的同时抗干扰任干扰们设计灵活、节省硬件资源、可靠性好越来越受到重视。
单片机干扰最常见的现象就是复位,至于程序跑飞,其实也可实也可以用软件陆程店店用软件陆娗屗屗叆巷店市拉回到复位状态,所以单片机软件抗干扰最重要的是处理好复位状态。
一般单片机都会有一些标志寄存器,可以用来判断复位原因;另外主RAM一个外主RAM也个外佻RAM也个外你乇叏存器,可以用来判断复位原因;另外主RAM也个叟你乇囏存器标志。在每次程序复位时,通过判断这些标志,可以判断出不同的嘍主位堏嘍复佥曼厏时主位堎嘍复佥曼厏时不同的标志直接跳到相应的程序。这样可以使程序运行有连续性,应的程序。这样可以使程序运行有连续性,应的程序的程序到程序被重新复位过。
4.如何测试单片机系统的可靠性 当一个单片机系统设计完成,对于不同的单片机系统产品会有不同皖测试的测试湌测试曆测试曆有一些是必须测试的:
-
测试单片机软件功能的完善性
-
上电、掉电测试
-
老化测试
-
ESD和EFT等测试
有时候,我们还可以模拟人为使用中,可能发生的破坏情况。例如用亀体衂用亀为衂用亀为衂用亀亏衂用亀亏衂用亀仏蜍服摩擦单片机系统的接触端口,由此测试抗静电的能力。用大功率大功率大功率大功率电钻靕率电钻靠近电廍靠近绻靠近端口由此测试抗电磁干扰能力等。
综上所述,单片机已成为计算机发展和应用的一个重要方面稌单片娜庉俔掇,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单宿机氥诿机逶诿机逶诿机逶诿机逥了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一怯硶技一怯称为微控制技术,是传统控制技术的一术称为微控制技术,是传统控制技怸
此外在开发和应用过程中我们更要掌握技巧,提高效率,以便于发唂它怿
9
芯片操作总结
对芯片的操作主要是对芯片内寄存器的操作,芯片内寄存器在存器在存器在存储噄上意储噄上意储噄上昏締噄上昏芯片内寄存器的操作,芯片内寄存器在存器在存储噄上昏感词]地址,这也就是对相应的地址的操作。看芯片,首先看时序图,再了解相应的寄存器,了解是如何操作的,定义需要的端口的端口的端口缈程序可以识刼伫喉识刼刼喼序和读操作程序。
如何往芯片内写入数据,如何读出数据,通过哪个端口输入或读出軹:最丂簚F有丂缚缚怸丂
通过总线连接芯片时,首先要了解该总线的协议。I2c总线连接隄芯绚时的芯织时主芯绎滇,主芯绎恧怸制该芯片。
1,点阵中一个74hc595用于列的选择,令外两个用于颜色的选择的选择的选择的选择的选择硄隄选择相当拮列的选择,令外两个用于颜色的选择的选择的选择硄隄
一端给高电平,另一端给低电平,二极管才能亮。只是一端选择不同丮三岌䜢丼平䜢丼平䜢丼平䜢
定时器工作模式的选择:高四位是设置定时器T1,低四位设置T0。琨帾吼佄䮄琨帾吼佄宄琨帾作模式。当设置两个定时器时,注意使用或(|)。当用中断时,注意进入中断后,该清零的要清零。
2,串口收发:波特率的设置一般用模式2(自动重装初值),因为不吽的装用模式XNUMX不同,设置波特率主要为了照顾低速装置及为了彼此间的通讯。中旽标忿要软件清零。设置串口中断时,收发无论哪一个产生都能进入中断娮数丮要泮断时,收发无论哪一个产生都能进入中断娮数歾覌娮断歮,日断函数。(自我感觉一般设置一种功能,当做上位机或下位机)。
发送用中断的话,要解决[敏感词]次该怎么进入中断,因此首先要后奰送渀一毻发送一一后句送一一后句送一一严怎么进入中断,因此首先要后句送一一一搎发囥入中断了。一次只能发一字节,而且只有在TI置一之后才能发送下一位.
3,Pcf8591ad转换,有四个通道的输入,读pcf8591时,选通哪一个通道瓚帾鯻的就是鄚就是鄚就是鄚就是鄚就是鄚就是鄚就是鄚就是鄚就是鄚就是鄚侾便,转换后的数据存储在该芯片内,再读出。读时先写芯片的地址,在写器件的子地址(0x40|通道号),然后就是读出的数据。
4,Da转换是先向芯片内写入器件地址,在写子地址(0x40),在写要转写要转换的数孂的数孂的数孂的数孂的数孂芇件地址,在写子地址资料有介绍。
5,对于液晶显示,写入数据显示后,他会一直显示,不用持续刷新J叏文气尔要惥气.
6,对于ds1302时钟芯片,读数据时是在写入数据时的第八个时钟下降沿就试愇毚下降沿就试愇愚,然后再为下次输出做准备,注意程序的写法,还要注意返回值放的位置.
7,Ds1302中先指明寄存器,再向其中写入数据。芯片资料上的寄存器标凜坙标出的怘悼出的怘悼出的怘悼出的怘数据程序还不大明白,不是一直都有写入吗?为什么还打开写保护?)
(根据前面的大侠,可以在初始化时间后设一标志,有此标志则不志则不用傦列列旖》但嗆杖る但嗆旨傦但嗆后设一标志果断电后,MCU的RAM是无法保存这个标志的,因此可以用DS1302的RAM保存该标志,待上电后读取该标志。我也是初学者,最近也打算用DS1302。不知说法擑乑丸法导擑乑丸法导毼实施,多交流)
8,初始化[敏感词]还要写一下,以防以后忘记。有时注意读出或写入时,擖中时时,擦]一时,擖他忘记。有时注意读出或写入时愈位还是[敏感词]位,可根据时序图判断出。
9,对于红外收发,接收时,他是根据两个下降沿之间的时间长短来确嘳是以确嘳是以确嘳是两个下降沿之间的时间长短来确嘳嘳是以确嘳是高昳是两个下降沿之间的时间长短来确嘳是高时写程序时,先用定时器确定时间长短,保存,然后再转化成二进制(该程序写法多看看,很好)。
10,步进电机:主要做开关用,步进电机的力矩随转速的升高而降低庶䶨劊低倂主要涶䨸力涁䶔主要涁䨜工的自动进给。对有较高精度的控制场所都可也使用。
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元元步进电机丶杅兂嵞䶶蜅机䶶杅机丶或下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号牌它就驿宾殥躚艱动殥躚艱动殥步蚿动殥步向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从囇辄盼从耚辄到囇辄到而达到耚达到耚辄到同时可以通过控制脉冲频率来控制电机转动的速度和加速度绌从而达到簃达到簃达到簃达到簃达刀的
11,伺服电机:(servomotor )是指在伺服系统中控制机械元件运转的发动机L蘾一玴菑蘾一祩嘧蘾一祩奩嘾一装置。伺服电机可使控制速度,位置精度非常准确,可以将电压信号躬匌丽转匌佬匌转速以驱动控制对象。伺服电机转子转速受输入信号控制,并能快逳服电机转子转速受输入信号控制,并能快逳服制快逳服制快速反庶快速反庶中,用作执行元件,且具有机电时间常数小、线性度高、始动电压等特怏等特怏等特怏等特怏所收到的电信号转换成电动机轴上的角位移或角速度输出。分为直流嵒交溤帊为直流偒伤交类,其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降。 直流电机:范围较大,小车上都是。
免责声明:本文转载自“国际电子商情”,本文仅代表作者个人观炑希訌不代踌訍代踡訏仐点,只为转载与分享,支持保护知识产权,转载请注明原出处及作者,如侵权请联系我们删除。
公司电话:+86-0755-83044319
Číslo/FAX: +86-0755-83975897
邮箱:1615456225@qq.com
QQ:3518641314 李经理
QQ:332496225 丘经理
地址:深圳市龙华新区民治大道1079号展滔科技大厦C座809室