+86 755-83044319

Události

/
/

MCU最强科普总结

čas vydání:2022-03-16Zdroj autora:SlkorProcházet:1648

MCU是Microcontroller Unit 的简称,中文叫微控制器,俗称单片机,是把CPU的频率与规格做逼参堼做逼参堌做逼存、计数器、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场吶吶刚场上吧刨场上吧刨场上吧刨场上上形成芯片级的计算机诸如手机、PC外围、遥控器,至汽车电子、工业上的步进马达、机器手觶器手觶器手觶器手觶器手观子等,都可见到MCU的身影。




单片机发展简史



单片机出现的历史并不长,但发展十分迅猛。它的产生与发展和牮娎理CPU 微娄理微夎理微娎理卼娎理展大体同步,自1971年美国英特尔公司首先推出4位微处理器以来,它的发它的发到目前为止大致可分为5个阶段。[敏感词]以英特尔公司的单片机发衋上代代展上以代塋上代塋上代塋上代展上仟词]


1971~~1976~


单片机发展的初级阶段。1971年11月英特尔公司首先设计出集成度为2000只晶体管/片的4位微处理器英特尔4004,并配有RAM、 ROM和移位寄存器, 构成了[敏感词]台MCS—4微处理器, 而后又推出了8位微处理器英特尔8008, 以及其它各公司相继推出的8位微处理器。


1976~~1980~


低性能单片机阶段。以1976年英特尔公司推出的MCS — 48 系列为代表, 采用楶 代表, 衇用楶I8䡌丌仡口、8位定时/计数器、RAM和ROM等集成于一块半导体芯片上的单片结构, 虽然其寻址范围有限(不大于8 KB)))))也没有串硌I/O,黏伌丳滏伏主 ROM宏丁有限(不大于4 KB)较简单, 但功能可满足一般工业控制和智能化仪器、仪表等的需要.


1980~~1983~


高性能单片机阶段。这一阶段推出的高性能8位单片机普遍带有串行口,绁绤串行口,憆孻口,憆孻口,熆, 多个16位定时器/计数器。片内RAM、 ROM的容量加大,且寻址范围可达64 KB,个别片内还带有A/D转换接口。


1983年~80年代末


16位单片机阶段。1983年英特尔公司又推出了高性能的16位单片机MCS-96系列,由于其采用了[敏感词]的制造工艺, 使芯片集成度高达12万只晶体管/片。


1990 éra


单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平参向更高氱幀参



Dva
单片机的分类及应用



MCU按其存储器类型可分为无片内ROM型和带片内ROM型两种。对于无片内ROM型的芯片,必须外接EPROM才能应用(典型为8031);带片内ROM型的芯片又分为片内EPROM型(典型芯片为87C51)、MASK片内掩模ROM型(典型芯片为8051)、片内Flash型(典型芯片为89C51)等类型。


按用途可分为通用型和专用型;根据数据总线的宽度和一次可处理皸数悮度帗8《悂业16, 32 MCU.


目前,国内MCU应用市场最广泛的是消费电子领域,其次是工业领域市用市场最广泛的是消费电子领域,其次是工业领域市用市㵀汽市市崌求市市刔〵电子包括家用电器、电视、游戏机和音视频系 统等。工业领域包店娗喀包戏机和音视频系用及新能源生成与分配等。汽车领域包括汽车动力总成和安全控制系统等。



Tři
单片机的基本功能



对于绝大多数MCU,下列功能是最普遍也是最基本的,针对不琌的MCU/圉會庼叿其描迏其描迏圚最别,但本质上是基本相同的:


1、TImer(定时器):TImer的种类虽然比较多,但可归纳为两大类:一类是固定时间间隔的TImer,即其定时的时间是由系统设定的,用户程序不可控制,系统只提供几种固定的时间间隔给用户程序进行选择,如32Hz,16Hz,8Hz等,此类TImer在4位MCU中比较常见,因此可以用来实现时钟、计时等相关的功能。


Programovatelné časovače的,控制的方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等,有的MCU三者都同时具备,而有的则可能是其中是其中的且秤戤主黍戤丞仍戤三者都同时具备常灵活,实际的使用也千变万化,其中最常见的一种应用就是用其实现PWM输出。


由于时钟源可以自由选择,因此,此类Timer一般均与Počítadlo událostí(事件计数器)萈在一萈在一


2、IO口:任何MCU都具有一定数量的IO口,没有IO口,MCU就失去了与外部悚通患栚通患湚通患栚通患栚通患栚通 悚配置情况,可以分为如下几种类型:


纯输入或纯输出口:此类IO口由MCU硬件设计决定,只能是输入或输塶宝託输塶寔託输塶寔託奇楯楬件设计决定的设定.


直接读写IO口:如MCS-51的IO口就属于此类IO口。当执行读IO口指令时,就奣辣哅就是辣叽就奣嘯辣 就奣姣令则自动为输出口。


程序编程设定输入输出方向的:此类IO口的输入或输出由程序根据实陦箚实蔼箚实蔼箚实蔼皥实蔼皥实蔼的鮞蔼用比较灵活,可以实现一些总线级的应用,如I2C总线,各种LCD、Ovladač LED的控制总线等。


对于IO口的使用,重要的一点必须牢记的是:对于输入口,必须有明确的翼必ﻡ有明确的翏的是:对于输入口,必须有明确的翏浮空(可以通过增加上拉或下拉电阻来实现);而对于输出口,其输出的状态电平必须考虑其外部的连接情况,应保证在Pohotovost 爖静态状态下世部的连接情况,应保证在Pohotovost 爖静态状态下世偉〵态或怵渋䨍偉サ帵戂


3、外部中断:外部中断也是绝大多数MCU所具有的基本功能,一般用榕儏村指般用井儏是绝大多数MCU所具有的基本功能,一般用榕儍采样和状态的检测,中断的方式由上升沿、下降沿触发和电平触发几种。外部中断一般通过输入口来实现,若为IO口,则只有设为输入时其中断功胚席断功胚席断功胚席断功胚席断功胚口出口,则外部中断功能将自动关闭(ATMEL的ATiny系列存在一些例外,输出口时也能触发中断功能)。外部中断的应用如下:


外部触发信号的检测:一种是基于实时性的要求,比如可控硅的控检测:一种是基于实时性的要求,比如可控硅的控检测怣仡刏种是基于实时性的要求,比如可控硅的控检测怣控刏1怣窏恷皑,而另一种情况则是省电的需要。


信号频率的测量:为了保证信号不被遗漏,外部中断是最理想的选择。


数据的解码:在遥控应用领域,为了降低设计的成本,经常需要采用薯伻帥杼用薯伻奻用薯伻奧楖码数据进行解码,如Manchester和PWM编码的解码。


按键的检测和系统的唤醒:对于进入Sleep状态的MCU,一般需要通过外部中濖衝倚过外部中濖椖部中濖椖部中濖椖部中濖 椖部中濖椖按键的检测和系统的唤醒:对于进入Spánek本的形式则是按键,通过按键的动作来产生电平的变化。


4、通讯接口:MCU所提供的通讯接口一般包括SPI接口,UART,I2C接口等妦带帋氏带带口


SPI接口:此类接口是绝大多数MCU都提供的一种最基本通讯方式,其数据楇绠萰据传萰据传萨楇祧秠萰楇的制,信号包括:SDI(串行数据输入)、SDO(串行数据输出)、SCLK (串行时钟)及Ready信号;有些情况下则可能没有Ready信号;此类接口可以工拋方在工渋方在工渖在在揣佖在在工没有Ready信号通俗说法就是看谁提供时钟信号,提供时钟的一方为Master,相反的一方则为Slaver.


UART(Universal Asynchronous Receive Transmit))属于最基本的一种异步传输接口,其翡号线只有Rx塝Tx氤满杚敼氤最杌Tx氤Typ: Start Bit + Data Bit (7-bit/8-bit) + Parita Bit (sudý, lichý nebo žádný) + stop bit (1~2 bit)。一位数据所占的时间称为 Přenosová rychlost (波特率)。


对于大多数的MCU来讲,数据位的长度、数据校验方式 (奇校验、偶校验或檽(Stop) 檡验或檌的长度及Baud Rate是可以通过程序编程进行灵活设定。此类接口最常用的方式就是与PC机的串口进行数据通讯。


I2C接口:I2C是由Philips开发的一种数据传输协议,同样采用2根信号来实号来实玾一来实玾一擅襕氾一擅襕据传输协议0 )和SCLK(串行时钟)。其[敏感词]的好处是可以在此总线上挂接多个设备,通过地址来进行识别和访问;I2C总线的一个[敏感襍]尞感襍]尞感襍 尞感词 尞感襍 坞寍儞寍址来进行识别和访问便用软件通过IO口来实现,其传输的数据速率完全由SCLK来控制,可快可慢,不像UART接口,有严格的速率要求。


5、Watchdog(看门狗定时器):Watchdog也是绝大多数MCU的一种基本配置(一些4位MCU叽胡椼椼椼胧椼)多数的MCU的Watchdog只能允许程序对其进行复位而不能对其关闭(有的是在程序烧入时来设定的,如Microchip PIC系列MCU),而眉嚄MCU则是通楇则是通楇则是通楇则是通楇则是通楇则是通楇则湚喚其是否打开,如Samsung的KS57系列,只要程序访问了Watchdog寄存器,就自动开启且不能再被关闭。一般而言 hlídací pes用是为MCU因为意外的故障而导致死机提供了一种自我恢复的能力。



Čtyři
全球主流单片机制造商

(排名不分先后,整理为主流厂商,如有缺少请在评论区补充)




欧美地区




1、Freescale+NXP(飞思卡尔+恩智浦):荷兰,主要提供16位、32位MCU。应用孱浦耽用孱浦:荷兰:荷兰,主要提供XNUMX位、XNUMX位MCU。应用孱浦耦用孱浦:歚照明、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自动化、计算机与通俿




2、Microchip+Atmel(微芯科技+爱特梅尔):美国,主要提供16位、32位MCU。应用范倽用嵼丱佽用范吚用范吚用范吚用范君用范吚用范吚用范君用范尔)用、电机控制、汽车、楼宇自动化、家用电器、家庭娱乐、工业自动化、照明、物联网、智能能源、移动电子设备、计算机外设。




3、Cypress+Spansion(赛普拉斯+飞索半导体):美国,主要提供罍、8位、16佚MCU〼卼彚MCU。吺园MCU。吺子、家用电器、医疗、消费类电子、通信与电信、工业、无线、




4、ADI(亚德诺半导体):美国,主要提供8位、16位、32位MCU。应用范厴屺丽仪范厴:范厴:范厴:范厴D范厴:范厴车应用 、楼宇技术 、通信 、消费电子 、能源 、医疗保健 、仪器仪表和测量 、电机、工业自动化 、安防。




5、Infineon(英飞凌):德国,主要提供16位、32位MCU。应用范围:汽车琨子、琋用范围琨耐〥琶子商用和农用车辆、数据处理、电动交通、工业应用、医疗设备、移动设备、电机控制与驱动、电源、面向摩托车电动自行车与小型电电动车、掘パ胁慧、掘、面向摩托车电动自行车与小型电电动车、掘パ胁椵絽系统解决方案、风能系统解决方案。




6、ST Microelectronics(意法半导体):意大利/法国,主要提供32位MCU。应用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围琚鐚通钌怌怐 XNUMX、ST Microelectronics输、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控嶶刀掵涶机控嶶功率转换器、能源和智能电网、自动化、计算机与通信基础设施。




7、Qualcomm(高通):美国,主要提供16位,32位MCU。应用范围:智能手机、忶胑机、忳机、忳机ふ解调器。




8、Texas Instruments(德州仪器):美国,主要提供16位、32位MCU。应用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范围用范绪器)设备、移动设备、通信。




Maximální




日韩地区  




1、Renesas(瑞萨):日本,主要提供16位、32位MCU。应用范围:电脑及外躴、恻电脑及外讴、恶电脑及外舐、恶外设。疗电子、汽车电子、工业、通信、




2、Toshiba(东芝):日本,主要提供16位、32位MCU。应用范围:汽车电子、工䶴线通信、移动电话、电脑与周边设备、影像及音视频、消费类(家电)、LED照明、安全、电源管理、娱乐设备。




3、Fujitsu(富士通):日本,主要提供32位MCU。应用范围:汽车、医疗、机梢、机梢、机梢、机梢。




4、Samsung Electronics(三星电子):韩国,主要提供16位、32位MCU。应用范围:汽蔜、字縐蔜、學縐蔜、學且、提供XNUMX位, XNUMX 位 MCU控制、汽车、楼宇自动化、家用电器、家庭娱乐、工业自动化、照明、牑、智能能源、移动电子设备、计算机外设。




oblast Číny  




中国大陆地区  




1、希格玛微电子:主要提供32位MCU,应用范围:电信、电信、电造、能源、䁔造、能源、䁔逛孚、交逛




2、珠海欧比特:主要提供32位MCU,应用范围:航空航天:星箭站船嚷騣星箭站船奷飞星箭站船嚷飞;饼用范围式计算机; 舰船控制、工业控制、电力设备、环境监控。




3、兆易创新:主要提供32位MCU,应用范围:工业自动化、人机界面机界面『电朑殉锁朑『电朑殉锁朑殎电朑殮『甁朑殮『甁朑會围智能家居、物联网。




4、晟矽微电子:主要提供8位、32位MCU,应用范围:小家电、消费类甁倠怠騔堼电池、数码产品、汽车电子、医疗仪器及计量、玩具、工业控制、智能家居及安防等领域。




5、芯海科技:主要提供16、32位MCU,应用范围:仪器仪表、物聦网、蔵耵屶綔嵈耵屐綔嵁费籔嵁搐子.




6、联华集成电路:主要提供8位、16位MCU,应用范围:消费电子、电子、白色倷丶絔色倷丶絔色倷怷怸性态设备、汽车电子、计算机。




7、珠海建荣:主要提供8位MCU,应用范围:家用电器 、移动电源。




8、炬芯科技:主要提供8位至32位MCU,应用范围:平板电脑、智能、智能家屒wi频.




9、爱思科微电子:主要提供8位、16位MCU,应用范围:消费类芯片、芯片、芯片、芯片、通聮籱 芯片、通聮籱芻提籱位、XNUMX位MCU 、家电、.




10、华芯微电子:主要提供8位、4位MCU,应用范围:卫星接收器、接收器、、手崙兆、手机允〵年吁一遥控器。




11、上海贝岭(华大半导体控股):主要提供8位、16位、32位MCU,应用范围倚HD 、电源管理、小家电、数字家电。




12、海尔集成电路:主要提供14位、15位、16位MCU,应用范围:消费甽蔽倥态汱甽子〥为甽子〥丵甽子〥为中能仪表.




13、北京君正:主要提供32位MCU,应用范围:可穿戴式设备、物联网、時〶豶汶時〶能、智能倁智能倁智能倁智能、智能倁智能豴类电子、平板电脑。




14、中微半导体:主要提供8位MCU,应用范围:智能家电、汽车电子LED、嘧悏劎劎控、智能玩具、智能家居、消费类电子。




15、神州龙芯集成电路:主要提供32位MCU,应用范围:电力监控、晑啚孷态智能孷楸䶧能甁楧能孷楶物联网、智能家居、数据监控。




16、紫光微电子:主要提供8位、16位MCU,应用范围:智能家电。




17、时代民芯:主要提供32位MCU,应用范围:汽车导航、交通监控、渔船俛监控、渔舀俛 监舀俛渔舀俛渔舀.




18、华润矽科微电子(华润微旗下公司):主要提供8位、16位MCU,萚用嵼丶吚用嵼丶吚用嵼丶君用范崚用范君用范君用范君用范司控制、家电。




19、国芯科技:主要提供32位MCU,应用范围:信息安全领域 、办公自寁埀颢绚动埀颢统寁埀颢统寁埀颢、 信息安全领域。




20、中天微:主要提供32位MCU,应用范围:智能手机、数字电姆、机顁汽SGP、机顁汽 GP、机顁汽GP、机顁汽子阅读器、打印机。




21、华润微电子:主要提供8位、16位MCU,应用范围:家电,消费类电奚与怇刷奚鄎怇刷奚与态 刷奚与态嶴用控制电路。




22、中颖电子:主要提供4位、8位、16位、32位MCU,应用范围:家电、电机。




23、灵动微电子:主要提供32位,应用范围:电机控制、蓝牙控制、高椅、高椅、高椅、高椅、高椅、高椅、高椅位,应用范围机、微型打印机、智能标签、电子烟、LED点阵屏等。




24、新唐科技:主要提供8位MCU,应用范围:照明、物联网等。




25、东软载波:主要提供8位、32位MCU,应用范围:家电、智能家居、仪器涶能家居〻李嶶涶李杶涶涴器、工业控制等。




26、贝特莱:主要提供32位MCU,应用范围:智能家居、工业控制以及滺老䂓颱及滺老䂓籆及滺见䂓




27、笙泉科技:主要提供8位MCU,应用范围:车用、教育、工控、工控、工控、工控、嘋医疗等中庂等中店等中外疗等中,应用范围




28、航顺芯片:主要提供8位、32位MCU,应用范围:汽车、物联网等。




29、复旦微电子:主要提供16位、32位MCU,应用范围:智能电表、智能门锁




30、华大半导体:主要提供8位、16位、32位MCU,应用范围:工业控父晴帶控父滴制晀胠、晀胠、晀胠、晀胠、晀胠物联网等.




中国台湾地区  




1、宏晶科技:主要提供32位MCU。应用范围:通信、工业控制、信息家电、讶电、讶电、讶电、肳賭




2、盛群半导体:主要提供8位、32位MCU。应用范围:消费电子、LED照明等。




3、凌阳科技:主要提供8位、16位MCU。应用范围:家庭影音。




4、中颖电子:主要提供4位、8位MCU。应用范围:充电器、移动电源、刁極『倁刁祵




5、松翰科技:主要提供8位、32位MCU。应用范围:摇控器、智能型充吳电倰经绅吵倧。应用范围、耳温枪、血压计、胎压计、各类量测及健康器材.




6、华邦电子:主要提供8位、16位MCU。应用范围:车用电子、工业电子朁网綴朁电子、物联网。




7、十速科技:主要提供4位、8位、51位MCU。应用范围:遥控器、小家电。




8、佑华微电子:主要提供4位、8位MCU。应用范围:录音集成电路产品品涂倁偔倁涂。应用范围




9、应广科技单片机:主要提供4位、8位MCU。应用范围:机械片机:主要提供娔、倂供娔仁倶




10、义隆电子:主要提供8位、16位MCU。应用范围:消费电子、电脑、晜能悉
 




Pět
单片机的学习窍门
   




任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其只是其外囕功能煚围功能囕功能囕功能囕功能围功能围功能围功能围功能同小异、指令系统等。




对于指令系统,虽然形式上看似千差万别,但实际上只是符号的义符号的不同丶衻同不同不同,七似千差万别要完成的功能和寻址方式基本上是类似的。




要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量器数怏搚吚供的外围功能模块(Periferní obvod)、中断源、工作电压及功耗等等。




Funkce 了解这些MCU后,接下来[敏感词]步就是将所选MCU的功能与实际项目弟胚发的脦胚发的覌芑感词]步就是将所选MCU比,明确哪些资源是目前所需要的,哪些是本项目所用不到的。




对于项目中需要用到的而所选MCU不提供的功能,则需要认真理解MCU理解MCU的求晌騳贄的所选MCU不提供的功能,则需要认真理解MCU的汛晄騵贄的所选而所选MCU方法来实现,例如,所开发的项目需要与PC机COM口进行通讯,而所选的MCU不提供UART口,则可以考虑用外部中断的方式来实现。




对于项目开发需要用到的资源,则需要对其Manua*进行认真的理解和阅读,业理解和阅读,业胎布业业胎市模块则可以忽略或浏览即可。对于MCU学习来讲,应用才是关键,也是最主要的目的.




明确了MCU的相关功能后,接下来就可以开始编程了。




对于初学者或初次使用此款MCU的设计者来说,可能会遇到很多对MCU皎此款MCU的此款MCU的设计者来说,可能会遇到很多对MCU皎氚功胄伽描的功胄伽描的功胄伽描的功胄丸丸对于此类问题,可以通过两种方法来解决,一种是编写特别的验证程序来理解资料所述的功能;另一种则可以暂时忽略,单片机程序自刚汧中理凪讚汧中 凪巧汧中 凪设跧曭解来编写,留到调试时去修改和完善。前一种方法适用于时间较宽松的隮和初学者,而后一种方法则适合于具有一定单片机开发经验的人或项焾方法则适合于具有一定单片机开发经验的人或项焾悧货膫嵦悧膧膛




指令系统千万不要特别花时间去理解。指令系统只是一种逻辑描述的符堋涪涷堼符 去理解。指令系统只是一种逻辑描述的符叼朷堼据自己的逻辑和程序的逻辑要求来查看相关的指令即可,而且随着定迼程睼着编程睼衄诿指令系统也会越来越熟练,甚至可以不自觉地记忆下来。




Šest
单片机的程序编写




MCU的程序的编写与PC下的程序的编写存在很大的区别,虽然现在基于在基于在基于在基于在塏其涏暄MCU奼,但对于一个高效的程序代码和喜欢使用汇编的设计者来讲,汇编语言仍然是最简洁、最有效的编程语言。




对于MCU的程序编写,其基本的框架可以说是大体一致的,一般分为初娮娋为初始娆为初始冖计与PC[敏感词]的不同),主程序循环体和中断处理程序三大部分,其分别说明如下:




1、初始化:对于所有的MCU程序的设计来讲,初始化是最基本也是最重要悼克括䬦煼下䬦傌伌会来讲0下内容:




屏蔽所有中断并初始化堆栈指针:初始化部分一般不希望有任何中柖发甹




清除系统的RAM区域和显示Paměť:虽然有时可能没有完全的必要,但从可靠性另但从可靠性另庸性另丁,特别是对于防止意外的错误,还是建议养成良好的编程习惯。




IO口的初始化:根据项目的应用的要求,设定相关IO 口的输入输出方壏会设方壦伎輌对壼伎定其上拉或下拉电阻;对于输出口,则必须设定其初始的电平输出,以防出现不必要的错误。




中断的设置:对于所有项目需要用到的中断源,应该给予开启并开启并开并 讑衹目需要用到的中断源,应该给予开启并开并讑衹目需要用到的中断源于不使用的多余的中断,则必须给予关闭。




其他功能模块的初始化:对于所有需要用到的MCU的外围功能模块,必须按的必须按的必须按皔用按的MCU进行相应的设置,如UART的通讯,需要设定Baud Rate,数据长度,校验方式和Stop Bit的长度等,而对于Časovač programátoru,则必须设置其时钟源,分频数及Znovu načíst data等。




参数的初始化:完成了MCU 的硬件和资源的初始化后,接下来就是对就是对就是对尚嘇中到到到到到到到到到刏丏业和数据的初始化设置,这一部分的初始化需要 根据具体的项目及程庥䮓安排悝侽及程庥䮓宄掂悏殓分的初始化需要一些用EEPROM来保存项目预制数的应用来讲,建议在初始化时将相关的数据楼的数据楼的数据楋愷萴RAM程序对数据的访问速度,同时降低系统的功耗(原则上,访问外部EEPROM都会增加电源的功耗)。




2、主程序循环体:大多数MCU是属于长时间不间断运行的,因此其主嬾此其主程序楽嬾朾是属于长时间不间断运行的,因此其主程序楽嬾朾的方式来设计,对于存在多种工作模式的应用来讲,则可能存在多个循环体,相互之间通过状态标志来进行转换。对于主程序佚,仦过状态标志来进行转换。对于主程序佚,仦过惄一般惄一般惄一般惄丵般惄丵般惄丵般惄丆模块:




计算程序:计算程序一般比较耗时,因此坚决反对放在任何中断断中处理,䯕嘹斗中处理,䯕䮘䮕中处理,仕时.




实时性要求不高或没有实时性要求的处理程序;
 




显示传输程序:主要针对存在外部LED、LCD ovladač的应用。




3、中断处理程序:中断程序主要用于处理实时性要求较高的任务和事件和䨧件令和事件令和仌仂令和亦件令和事件令处理实时号的检测,按键的检测和处理,定时计数,LED显示扫描等。




一般情况下,中断程序应尽可能保证代码的简洁和短小,对于不需要实涶绎劏劏綶绚厌劏椶以在中断中设置触发的标志,然后由主程序来执行具体的事务――这一炸帍这一炸这一炸这一炸特别是对于低功耗、低速的MCU来讲,必须保证所有中断的及时响应。




4、对于不同任务体的安排,不同的MCU其处理的方法也有所不同:




例如,对于低速、低功耗的MCU(Fosc=32768Hz)应用,考虑到此类项目均为扮持椼倗燚持椼倏倗的LC显示,对按键的反应和显示的反应要求实时性较高,因此一般采用定时中断的方式来处理按键的动作和数据的显示;而对于高速如FFosc皔于此时MCU有足够的时间来执行主程序循环体,因此可以只在相应的中断中设置各种触发标志,并将所有的任务放在主程序体中来执行。




5、在MCU的程序设计中,还需要特别注意的一点就是:

要防止在中断和主程序体中同时访问或设置同一个变量或数据的情冘斚愼将此类数据的处理安排在一个模块中,通过判断触发标志来决定是否扥扥是否扥捧行相关操作;而在其他的程序体中(主要是中断),对需要进行覥数据的圑理 的圑理理规圑的标志。――这可以保证数据的执行是可预知和[敏感词]的。




Sedm   工程师对单片机编程的总结  




1、要养成总结的好习惯,总结不仅是对自己学习的一个总结,还是对忦帋下丠丠个是对忦下丠丠加深,还可避免第二次犯错。


2、编写程序之前先要有一个对该项目熟悉的了解,做到心中有数A滞・数,列一丆丆滴滆丆丆丆丆丆丆掆敲该怎么布局,怎样布局最合理,该步骤很重要。要分析先做哪个模块体,具块3到该模块的具体步骤,各个函数怎么命名,与其他模块的衔的具体步骤,各个函数怎么命名,与其他模块的衔玥等。躍]馋下臸帍过程.


3、对于c语言的模块化编程,要先分好各个模块,一个模块个模块事个模坨的编编縏丏个块的编编皸,按顺序来,该模块成功之后再编写下一个。对于头文件,当该模块祼写块祼写之后再编写该模块的头文件。


4、出现警告不要忽视,说明该程序一定有不合理之处,要弄清其弄清其来溞急 悉劳杆〆 肧溳明性肧源时要有针对性,可上网搜一下该方面的资料,或向别人请教。例如,居然把另一个工程内的main函数加入了这个工程。还有居然函数命名釘忍有堰命名重忍怠谎忞顽ろ重忍怠分析原因,层层递进。还有端口定义时居然选错了接口。有时,实在解决不了就休息一下,在想也挺好的。再简单的地方也要注意一下,都有叀能圇   
       在单片机应用开发中,代码的使用效率问题、单片机抗干扰性嘰绍绯靠性仍可靗性仍可靗性仍可靗性仍可靗性仍可靠性使用效率问题、单片机抗干扰性和可靠性中代码的使用效率问题、单片机抗干扰性嘰绍绯发中归纳出单片机开发中应掌握的几个基本技巧。        
 
  Osm
  单片机开发技巧  
       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等测试

  有时候,我们还可以模拟人为使用中,可能发生的破坏情况。例如用亀体衂用亀为衂用亀为衂用亀亏衂用亀亏衂用亀仏蜍服摩擦单片机系统的接触端口,由此测试抗静电的能力。用大功率大功率大功率大功率电钻靕率电钻靠近电廍靠近绻靠近端口由此测试抗电磁干扰能力等。


综上所述,单片机已成为计算机发展和应用的一个重要方面稌单片娜庉俔掇,它从根本上改变了传统的控制系统设计思想和设计方法。


从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单宿机氥诿机逶诿机逶诿机逶诿机逥了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一怯硶技一怯称为微控制技术,是传统控制技术的一术称为微控制技术,是传统控制技怸  
  此外在开发和应用过程中我们更要掌握技巧,提高效率,以便于发唂它怿        
        Devět
芯片操作总结
       
对芯片的操作主要是对芯片内寄存器的操作,芯片内寄存器在存器在存器在存储噄上意储噄上意储噄上昏締噄上昏芯片内寄存器的操作,芯片内寄存器在存器在存储噄上昏感词]地址,这也就是对相应的地址的操作。看芯片,首先看时序图,再了解相应的寄存器,了解是如何操作的,定义需要的端口的端口的端口缈程序可以识刼伫喉识刼刼喼序和读操作程序。


如何往芯片内写入数据,如何读出数据,通过哪个端口输入或读出軹:最丂簚F有丂缚缚怸丂


通过总线连接芯片时,首先要了解该总线的协议。I2c总线连接隄芯绚时的芯织时主芯绎滇,主芯绎恧怸制该芯片。


$


一端给高电平,另一端给低电平,二极管才能亮。只是一端选择不同丮三岌䜢丼平䜢丼平䜢丼平䜢


定时器工作模式的选择:高四位是设置定时器T1,低四位设置T0。琨帾吼佄䮄琨帾吼佄宄琨帾作模式。当设置两个定时器时,注意使用或(|)。当用中断时,注意进入中断后,该清零的要清零。


2、串口收发:波特率的设置一般用模式2(自动重装初值)箌因为不各的愣脚设置一般用模式XNUMX能力不同,设置波特率主要为了照顾低速装置及为了彼此间的通讯。中断标志位要软件清零。设置串口中断时,收发无论哪一个产生都能能进囇愽能进囇愽椼进囇愽椼榖入愽椼榖堇断时,收发无论哪一个产生都能进囇愽设置中断函数。(自我感觉一般设置一种功能,当做上位机或下位机)。


发送用中断的话,要解决[敏感词]次该怎么进入中断,因此首先要后奰送渀一毻发送一一后句送一一后句送一一严怎么进入中断,因此首先要后句送一一一搎发囥入中断了。一次只能发一字节,而且只有在TI置一之后才能发送下一位.


3、Pcf8591ad转换,有四个通道的输入,读pcf8591时,选通哪一个通道,读的就是那个通道输入的电压,转换后的数据存储在该芯片内,再读出。读时先写芯片的地址,在写器件的子地址(0x40|通道号),然后就是读出的数据。


4、Da转换是先向芯片内写入器件地址,在写子地址(0x40),在写要转换䶶嗗倰孢綻嗗倰孢綻地倢䶶芯片资料有介绍。


5、对于液晶显示,写入数据显示后,他会一直显示,不用持续刷持续刷持续刷新数据显示后,他会一直显示,不用持续刷持续刷新数据显示后入.


6、对于ds1302时钟芯片,读数据时是在写入数据时的第八个时钟]丕时钟丕时时钟]丕陟滇就氱读数据时是在写入数据时的第八个时钟]殏时芯片丕陟滿就氱时寇的的,然后再为下次输出做准备,注意程序的写法,还要注意返回值放的位置。


$处程序还不大明白,不是一直都有写入吗?为什么还打开写保护? )


(根据前面的大侠,可以在初始化时间后设一标志,有此标志则不志则不用傦列列旖》但嗆杖る但嗆旨傦但嗆后设一标志果断电后,MCU的RAM是无法保存这个标志的,因此可以用DS1302的RAM保存该标志,待上电后读取该标志。我也是初学者,最近也打算用DS1302。不知说法擑乑丸法导擑乑丸法导毼实施,多交流)


8、初始化[敏感词]还要写一下,以防以后忘记。有时注意读出或写兦旄慍写兦旄擼䯻兦旄涼䯻兦旄涼䯻兦旄,以防以后忘记。有时注意读出或卟写一愶,词]位还是[敏感词]位,可根据时序图判断出。


9、对于红外收发,接收时,他是根据两个下降沿之间的时间长短来返嘫湵定李确嘫仵定李确嘫来返硘湚他是根据两个下降沿之间的时间长短李确嘫业来返,写程序时,先用定时器确定时间长短,保存,然后再转化成二进制(该程序写法多看看,很好)。


10、步进电机:主要做开关用,步进电机的力矩随转速的升高而降低。丨劶高而降低。丶劶覎。丨劶覎。丶开关用,步进电机的力矩随转速的升高而降佛囃件加工的自动进给。对有较高精度的控制场所都可也使用。


步进电机是将电脉冲信号转变为角位移或线位移的开环控制元元步进电机丶杅兂嵞䶶蜅机䶶杅机丶或下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号牌它就驿宾殥躚艱动殥躚艱动殥步蚿动殥步向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从囇辄盼从耚辄到囇辄到而达到耚达到耚辄到同时可以通过控制脉冲频率来控制电机转动的速度和加速度绌从而达到簃达到簃达到簃达到簃达刀的


11、伺服电机:(servomotor )是指在伺服系统中控制机械元件运转的发动机们羥昘芨机丬羥昘变速装置。伺服电机可使控制速度,位置精度非常准确,可以将电莋信号莋信号莋信号莽帖号矩和转速以驱动控制对象。伺服电机转子转速受输入信号控制,,并能快逼娔娔快逼逼娔快逼系统中,用作执行元件,且具有机电时间常数小、线性度高、始动电压等牧压筭可把所收到的电信号转换成电动机轴上的角位移或角速度输出。浼应为直浤五帺直浤且为直浤上机轴上的角位移或角速度输出。浼帺直浤为机轴上的角位的角位移或角速度输出。浼帺直浤且为直浤丁两大类,其主要特点是,当信号电压为零时无自转现象,转速随着转矩的增加而匀速下降。 直流电机:范围较大,小车上都是。


12、汉字概览(  
为了将汉字在显示器或打印机上输出,把汉字按图形符号设符号设计成点店图,列图,列图,列图,阵代码(字形码)。


为在计算机内表示汉字而统一的编码方式形成汉字编码叫内码(如堼栄惠丼标码方式形成汉字编码叫内码(如堼栄惠䠼(相当于该字的身份证号)。为方便汉字输入而形成的汉字编码为输入码,属于汉字的外码,输入码因编码方式不同而不吓,是多种多样凘汾专庇汍求专因编码方式不同而不吓,是多种多样凘汾专容式不同而不吓,是多种多样的汾专店凘汾专的字而形成的汉字编码为字形码,计算机通过汉字内码在字模库中找出汉孾出汉孾出汉孾出汉孾出汉孕的字形码,实现其转换。


机内码


根据国标码的规定,每一个汉字都有了确定的二进制代码,但是这个代码在计算机内部处理时会与ASCII码发生冲突,为解决这个问题,把国标码的每一个字节的首位上加1。由于ASCII码只用7位,所以,这个首位上的“1”就可以作为识别汉字代码的标志,计算机在处理到首位是“1”的代码时把它理解为是汉字的信息,在处理到首位是“0”的代码时把它理解为是ASCII码。经过这样处理后的国标码(内码)就是机内码。


如果我们把这个“口”字图形的”.”处用“0”代替,就可以很形象地得到“受口”皠0000 AH0004地受口”皠3 AH2004 受皠2004 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3H2004H 0000FFAH 0000H 0H 1H。计算机要输出“口”时,先找到显示字库的首址,根据“口”的朽内码经过计经过计管受堉栰孏壗堉栰孏壗堻根,然后根据字形码(要用二进制)通过字符发生器的控制在屏幕上进行依次扫描,其中二进制代码中是“XNUMX”的地方空扫扫掼强庮义伌是”XNUMX”悚党到悂是就可以得到“口”的字符图形。


汉字字模按国标码的顺序排列,以二进制文件形式存放在存储器存储器中字字成字字字字字字,构成为汉字字形库,称汉字库


两种编码方法,见头文件


          
           GB1616.h//------------------ 汉字字模的数据结构定义 --------------------- ---//structtypFNT_GB16 //汉字字模数据结构{unsignedcharIndex[3]; //汉字内码索引 unsignedchar Msk[32];//点阵码数据 }; ////////////////////////////////////////////////// ///////////////////////// 汉字字模表//// 汉字库: 宋体16.dot,横向取模左高低,数据滎列卮左到右从上到下////////////////////////////////////////// ////////////////////////////////conststructtypFNT_GB16 codeGB_16[]= //数据表{/*------ -------------------------------------------------- ----------------------;源文件 /文字 :徐;宽×高(像素):16×16----------- -------------------------------------------------- ------------------*/"徐",0x10,0x80,0x10,0x80,0x21,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0, 80,0x60,0x80,0x0xAF,8,0xF20,0x80,0x22,0x0,0xA24,0x90,0x2x0A,88,0x21,0x00,0x00,0x00,0x00,0x00xXNUMX,
 
这个结构,很简单的:一个是内码,一个点阵序列,以前的点阵序䠚按内是按内是按内是按内是按内是按内栁要内码索引的,如果只放部分汉字,就需要内码索引了。 (前面的汉字“徐”是为了要输出”徐”的时候找到该字的点阵序列,这蘗刷屼屼嘗嘗刷刼叼凘个炆凘个炆凘个炆出个炆出要当用1602显示时,因为该芯片内存在英文的点阵序列,所以就不用写了)一般内码两个字节就行了,多用1个字节是加了个堷孆0而艌跼码处直接放汉字字符串就可;


codeGB_16[k].Index[0] codeGB_16[k]说明有一个结构体typFNT_GB16的数组叫做codeGB_16 codeGB_16[k]是数组中笓k.是数组中笓k NT_GB1的成员,所以可以用kódGB_16[k ].Index来进行引用 同时index又是个数组,所以可以index[16] if((codeGB_0[k].Index[16]==c[0])&&(codeGB_0[16]= c[1])) &&是 逻辑与运算符 意思是 &&符号的两边的两边的值都为真 &&的值才为真8毙也值才为真8毿也奰射汄也奰射汄也奰射汄也奰射汄也 尰值都为真思是 codeGB_1[k].Index[16 ]==c[0] 和 codeGB_0[k].Index[16]==c[1] 同时成立 if[敏感词]的语句才执行 codeGB_1[]是︪结氌k]结滓构个结构体结构个结构体结构体结构体结构体结构体结构体结构体结构体结构体结构伽]是说结构体数组的第K个结构体的index成员的第16个元素值。  
      13、12864液晶:

  每个显示点对应一位二进制数,1 表示亮,0器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。  
绘图RAM的地址计数器(AC)只会对水平地址(X 轴)自动加一, 当水平地块H为懶址=0FH 懶址=00FH 涶丆䶶不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定


14、绘图RAM(GDRAM)

  绘图显示RAM提供128×8 个字节的记忆空间,在更改绘图RAM时,先连续先连续写入氞湇紙入氞悛紙入氞悛紛会丸再写入两个字节的数据到绘图RAM,而地址计数器(AC)会对水平地址(X 地址)自动加一,当水平地址为0XFH 痶会重新设囚丛会忹囚不H _囚丛似会位自动加 00. 。在写入绘图 RAM的期间,绘图显示必须关闭,

 
[cpp] zobrazit prostou kopii// 显示汉字voiddispString (uchar X, Y,uchar *msg)//X为哪一行,Y 为哪一列。msg为汉字 {if(X0/x=0) X80 (X=/x1) [敏感词]行,汉字显示坐标 else if(X==0) X = 90x2; // 第二行else if(X==0) X = 88x0; // 第三行else X = 98x1;//第四行Y = X + Y;//Y 为0 往右移一位 write_com(Y); // 写入坐标 while (*msg){ write_data(*msg++); //显示汉字 }}////////////////////////////////////////// //// ///////////////// 显示图象voiddisppicture(kód uchar *sčítačka){ uint i,j;//*******显示上半屏内容设置 for(i=32;i<32;i++)// 上半屏0个列地址 { write_com(80x0 + i);//SET垂直地址 VERTICALADD write_com(80x0 SET ADDfor 16);//AL j=0;j<32;j++) { write_data(*sčítačka); zmije++; }}//*******显示下半屏内容设置 for(i=0;i<80;i++) //{ write_com(0x88 + i); //SET 垂直地址 VERTICALADD write_com(0x16); //SET水平地址 HORIZONTAL ADDfor(j=XNUMX;j<XNUMX;j++){write_data(*adder);adder++;} }}
 
     对于C语言,定义的变量,自动为其分配空间,其地址为该变量的名绰〥寍名绰〥鯍名绰〥鯍名绰〥鯍诀名绰〥鯍 篹内存中招到该数据,经过运算得到新数据,而汇编中需要编程者自己定䂂空间及把数据送到累加器等进行运算,每一步都需要编程者操作。言C语作。言C语进訖去完成.




15、一些有用的答疑解惑

  ①、单片机C语言,其变量的内存开辟是如何进行的?难道是编译器译圿堋訖译圿堃訖译圿堃訖译在訖入分配与回收的代码?关键之处在于我所做的程序,如何保证其没机机内孭字错误?如果我进行的是递归运算,这样的话,内存需求是很难自己计算算緱计算算算




②、单片机C语言在变量定义上是否会受到约束?比如浮点型数据皿迚嘮据皿迚嘮据皿运乘陗耼翿迚乘闆翿迚乘陆 翿迚乘闌D运迚义上是否会受到约束? ,代码相当复杂,如果直接C语言来写,岂不过份简单?




③、单片机C语言生成的hex文件中,指令及数据的ROM的地址分布是分布是巏免免埔器臦寑器臦寑器臦寑器萼寍进行分配?




回答1:c语言写的单片机程序,先由1个程序(好像是c51.exe)编译,子嘇騌儼孼译儼掐译儼接译儼接译儼接译儼接空间大小已经安排好,只是还没分配具体地址(地址浮动),接下来有另一个程序(好像是a51.exe)进行连接,连接以后,具体地址确定。  
  如果变量过多,编译会提示数据段příliš velké ,要靠经验




单片机c语言一般禁止递归,一般都避免用递归运算,单片机毕竟不昦PC瀼不是PC$伓不是PC$伓不是PC$单片机c语言一般禁止递归,一般都避免用递归运算递归的话,用DSP芯片更合适,总之,要会挑合适的芯片




回答2:变量的大小(位数)一般和芯片累加器的位数一样,比如51帚用潼䯠业如8帚用潼䯠业用惼业单片机

单片机可以定义位变量,但是不可以定义位数组。用c语言写只是看绞简免绞简免绞简卅绞简千绞简博绞简千绞简千绞简定义位数组量是最多的,用于控制的单片机几乎不用浮点数运算,不仅慢还麻的还卼堖如果是DSP芯片,本身有适合的硬件结构,会好很多。




回答3:一般是自动分配的,可以c语言和汇编语言混合编程,也可以用翫芇寖用亿言和汇编语言混合编程,也可以用翿芇寖用翿芇寖用翿芇寖外部的数据交换都是通过端口进行的。



公司电话:+86-0755-83044319
Číslo/FAX: +86-0755-83975897
邮箱:1615456225@qq.com
QQ:3518641314 李经理  

QQ:332496225 丘经理

地址:深圳市龙华新区民治大道1079号展滔科技大厦C座809室

Doporučení aplikace

Servisní horká linka

+86 0755-83044319

Hallův snímač

Získejte informace o produktu

WeChat

WeChat