导航:首页 > 编程知识 > 单片机mcu编程怎么学

单片机mcu编程怎么学

发布时间:2025-07-11 15:25:20

❶ 51单片机应该掌握哪些

任何一款mcu,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。因此,对于任何一款mcu,主要应从如下的几个方面来理解和掌握:

* mcu的特点:要了解一款mcu,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块(Peripheral Circuit)、中断源、工作电压及功耗等等。

* 了解这些mcu Features后,接下来第一步就是将所选mcu的功能与实际项目开发的要求的功能进行对比,明确那些资源是目前所需要的,那些是本项目所用不到的。对于项目中需要用到的而所选mcu不提供的功能,则需要认真理解mcu的相关资料,以求用间接的方法来实现,例如,所开发的项目需要与PC机COM口进行通讯,而所选的mcu不提供UART口,则可以考虑用外部中断的方式来实现;

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

* 明确了mcu的相关功能后,接下来就可以开始编程了。对于初学者或初次使用此款mcu的设计者来说,可能会遇到很多对mcu的功能描述不明确的地方,对于此类问题,可以通过两种方法来解决,一种是编写特别的验证程序来理解资料所述的功能;另一种则可以暂时忽略,程序设计中则按照自己目前的理解来编写,留到调试时去修改和完善。前一种方法适用于时间较宽松的项目和初学者,而后一种方法则适合于具有一定mcu开发经验的人或项目进度较紧迫的情况;

* 指令系统千万不要特别花时间去理解。指令系统只是一种逻辑描述的符号,只有在编程时根据自己的逻辑和程序的逻辑要求来查看相关的指令即可,而且随着编程的进行,对指令系统也会越来越熟练,甚至可以不自觉地记忆下来;

mcu的基本功能:

对于绝大多数mcu,下列功能是最普遍也是最基本的,针对不同的mcu,其描述的方式可能会有区别,但本质上是基本相同的:

* Timer(定时器):Timer的种类虽然比较多,但可归纳为两大类:一类是固定时间间隔的Timer,即其定时的时间是由系统设定的,用户程序不可控制,系统只提供几种固定的时间间隔给用户程序进行选择,如32Hz,16Hz,8Hz等,此类Timer在4位mcu中比较常见,因此可以用来实现时钟、计时等相关的功能;另一类则是Programmable Timer(可编程定时器),顾名思义,该类Timer的定时时间是可以由用户的程序来控制的,控制的方式包括:时钟源的选择、分频数(Prescale)选择及预制数的设定等,有的mcu三者都同时具备,而有的则可能是其中的一种或两种。此类Timer应用非常灵活,实际的使用也千变万化,其中最常见的一种应用就是用其实现PWM输出(具体的应用,后续会有特别的介绍)。由于时钟源可以自由选择,因此,此类Timer一般均与Event Counter(事件计数器)合在一起;

* IO口:任何mcu都具有一定数量的IO口,没有IO口,mcu就失去了与外部沟通的渠道。根据IO口的可配置情况,可以分为如下几种类型:

** 纯输入或纯输出口:此类IO口有mcu硬件设计决定,只能是输入或输出,不可用软件来进行实时的设定;

** 直接读写IO口:如MCS-51的IO口就属于此类IO口。当执行读IO口指令时,就是输入口;当执行写IO口指令则自动为输出口;

** 程序编程设定输入输出方向的:此类IO口的输入或输出由程序根据实际的需要来进行设定,应用比较灵活,可以实现一些总线级的应用,如I2C总线,各种LCD、LED Driver的控制总线等;

** 对于IO口的使用,重要的一点必须牢记的是:对于输入口,必须有明确的电平信号,确保不能浮空(可以通过增加上拉或下拉电阻来实现);而对于输出口,其输出的状态电平必须考虑其外部的连接情况,应保证在Standby或静态状态下不存在拉电流或灌电流。

* 外部中断:外部中断也是绝大多数mcu所具有的基本功能,一般用于信号的实时触发,数据采样和状态的检测,中断的方式由上升沿、下降沿触发和电平触发几种。外部中断一般通过输入口来实现,若为IO口,则只有设为输入时其中断功能才会开启;若为输出口,则外部中断功能将自动关闭(ATMEL的ATiny系列存在一些例外,输出口时也能触发中断功能)。外部中断的应用如下:

** 外部触发信号的检测:一种是基于实时性的要求,比如可控硅的控制,突发性信号的检测等;而另一种情况则是省电的需要;

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

** 数据的解码:在遥控应用领域,为了降低设计的成本,经常需要采用软件的方式来对各种编码数据进行解码,如Manchester和PWM编码的解码;

** 按键的检测和系统的唤醒:对于进入Sleep状态的mcu,一般需要通过外部中断来进行唤醒,最基本的形式则是按键,通过按键的动作来产生电平的变化;

* 通讯接口:mcu所提供的通讯接口一般包括SPI接口,UART,I2C接口等,其分别描述如下:

** SPI接口:此类接口是绝大多数mcu都提供的一种最基本通讯方式,其数据传输采用同步时钟来控制,信号包括:SDI(串行数据输入)、SDO(串行数据输出)、SCLK(串行时钟)及Ready信号;有些情况下则可能没有Ready信号;此类接口可以工作在Master方式或Slave方式下,通俗说法就是看谁提供时钟信号,提供时钟的一方为Master,相反的一方则为Slaver;

** UART(Universal Asynchronous Receive Transmit):属于最基本的一种异步传输接口,其信号线只有Rx和Tx两条,基本的数据格式为:Start Bit + Data Bit(7-bits/8-bits) + Parity Bit(Even, Odd or None) + Stop Bit(1~2Bit)。一位数据所占的时间称为Baud Rate(波特率)。对于大多数的mcu来讲,数据为的长度、数据校验方式(奇校验、偶校验或无校验)、停止位(Stop Bit)的长度及Baud Rate是可以通过程序编程进行灵活设定。此类接口最常用的方式就是与PC机的串口进行数据通讯。

** I2C接口:I2C是由Philips开发的一种数据传输协议,同样采用2根信号来实现:SDAT(串行数据输入输出)和SCLK(串行时钟)。其最大的好处是可以在此总线上挂接多个设备,通过地址来进行识别和访问;I2C总线的一个最大的好处就是非常方便用软件通过IO口来实现,其传输的数据速率完全由SCLK来控制,可快可慢,不像UART接口,有严格的速率要求。

* Watchdog(看门狗定时器):Watchdog也是绝大多数mcu的一种基本配置(一些4位mcu可能没有此功能),大多数的mcu的Watchdog只能允许程序对其进行复位而不能对其关闭(有的是在程序烧入时来设定的,如Microchip PIC系列mcu),而有的mcu则是通过特定的方式来决定其是否打开,如Samsung的KS57系列,只要程序访问了Watchdog寄存器,就自动开启且不能再被关闭。一般而言watchdog的复位时间是可以程序来设定的。Watchdog的最基本的应用是为mcu因为意外的故障而导致死机提供了一种自我恢复的能力。

mcu程序的编写:

mcu的程序的编写与PC下的程序的编写存在很大的区别,虽然现在基于C的mcu开发工具越来越流行,但对于一个高效的程序代码和喜欢使用汇编的设计者来讲,汇编语言仍然是最简洁、最有效的编程语言。对于mcu的程序编写,其基本的框架可以说是大体一致的,一般分为初始化部分(这是mcu程序设计与PC最大的不同),主程序循环体和中断处理程序三大部分(见图1 a 和 b),其分别说明如下:

* 初始化:对于所有的mcu程序的设计来讲,出世化是最基本也是最重要的一步,一般包括如下内容:

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

** 清除系统的RAM区域和显示Memory:虽然有时可能没有完全的必要,但从可靠性及一致性的角度出发,特别是对于防止意外的错误,还是建议养成良好的编程习惯;

** IO口的初始化:根据项目的应用的要求,设定相关IO口的输入输出方式,对与输入口,需要设定其上拉或下拉电阻;对于输出口,则必须设定其出世的电平输出,以防出现不必要的错误;

** 中断的设置:对于所有项目需要用到的中断源,应该给予开启并设定中断的触发条件,而对于不使用的多余的中断,则必须给予关闭;

** 其他功能模块的初始化:对于所有需要用到的mcu的外围功能模块,必须按项目的应用的要求进行相应的设置,如UART的通讯,需要设定Baud Rate,数据长度,校验方式和Stop Bit的长度等,而对于Programmer Timer,则必须设置其时钟源,分频数及Reload Data等;

** 参数的出世化:完成了mcu的硬件和资源的出世化后,接下来就是对程序中使用到的一些变量和数据的初始化设置,这一部分的初始化需要根据具体的项目及程序的总体安排来设计。对于一些用EEPROM来保存项目预制数的应用来讲,建议在初始化时将相关的数据拷贝到mcu的RAM,以提高程序对数据的访问速度,同时降低系统的功耗(原则上,访问外部EEPROM都会增加电源的功耗)。

* 主程序循环体:大多数mcu是属于长时间不间断运行的,因此其主程序体基本上都是以循环的方式来设计,对于存在多种工作模式的应用来讲,则可能存在多个循环体,相互之间通过状态标志来进行转换。对于主程序体,一般情况下主要安排如下的模块:

** 计算程序:计算程序一般比较耗时,因此坚决反对放在任何中断中处理,特别是乘除法运算;

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

** 显示传输程序:主要针对存在外部LED、LCD Driver的应用;

* 中断处理程序:中断程序主要用于处理实时性要求较高的任务和事件,如,外部突发性信号的检测,按键的检测和处理,定时计数,LED显示扫描等。一般情况下,中断程序应尽可能保证代码的简洁和短小,对于不需要实时去处理的功能,可以在中断中设置触发的标志,然后由主程序来执行具体的事务——这一点非常重要,特别是对于低功耗、低速的mcu来讲,必须保证所有中断的及时响应。

* 对于不同任务体的安排,不同的mcu其处理的方法也有所不同。例如,对于低速、低功耗的mcu(Fosc=32768Hz)应用,考虑到此类项目均为手持式设备和采用普通的LCD显示,对按键的反应和显示的反应要求实时性较高,应此一般采用定时中断的方式来处理按键的动作和数据的显示;而对于高速的mcu,如Fosc>1MHz的应用,由于此时mcu有足够的时间来执行主程序循环体,因此可以只在相应的中断中设置各种触发标志,并将所有的任务放在主程序体中来执行;

* 在mcu的程序设计中,还需要特别注意的一点就是:要防止在中断和主程序体中同时访问或设置同一个变量或数据的情况。有效的预防方法是,将此类数据的处理安排在一个模块中,通过判断触发标志来决定是否执行该数据的相关操作;而在其他的程序体中(主要是中断),对需要进行该数据的处理的地方只设置触发的标志。——这可以保证数据的执行是可预知和唯一的。

总之,对于mcu开发来讲,必须记住一点:“条条大路通罗马”,没有做不到的事,关键是看方法是否正确!再就是多做多动手和多想。

❷ 怎么学习嵌入式STM32

1、首先选择菜单栏上面的project的按钮,在弹出的右键菜单中点击new uVision Project...的选项。

❸ 单片机编程知识九大问答知识

单片机编程知识九大问答知识

为帮助大家更加了解单片机编程知识,下面,我为大家分享单片机编程知识问答知识,希望对大家有所帮助!

搞单片机开发,一定要会C吗?

答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。

对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。

而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。

综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。

当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好?

答:对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。如果对这些特性不了解,那调试起来就有的烦了,到头来可能还不如用汇编来的快。

C语言和汇编语言在开发单片机时各有哪些优缺点?

答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的.一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。

C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。

对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题,而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。

如果对单片机C语言有兴趣,HOLTEK的单片机就有提供C编译器,可以到HOLTEK的网站免费下载使用。

C或汇编语言可以用于单片机,C++能吗?

答:在单片机开发中,主要是汇编和C,没有用C++的。

在教学中要用到8088和196芯片单片机教材,请问哪里可以找到关于这方面的书或资料?

答:有关这方面的教材,大学里常用的一本是《IBM-PC汇编语言程序设计》清华大学出版社出版的,在网上以及书店都是可以找到的,另外网上还可以搜索到很多其他的教材如:《微机原理及汇编语言教程》(杨延双 张晓冬 等编著 )和《16/32 位微机原理、汇编语言及接口技术》(作者: 钟晓捷 陈涛 ,机械工业出版社 出版)等,可以在较大型的科技书店里查找或者直接从网上订购。

初学者到底是应该先学C还是汇编?

答:对于单片机的初学者来说,应该从汇编学起。因为汇编语言是最接近机器码的一种语言,可以加深初学者对单片机各个功能模块的了解,从而打好扎实的基础。

我是一名武汉大学电子科技大3的学生,学了电子线路、数字逻辑、汇编和接口、C语言,但是总是感觉很迷茫,觉好象什么都不会,怎么办?

答:大学过程是一个理论过程,实践的机会比较少,往往会造成理论与实践相脱节,这是国内大学教育系统的通病,不过对于学生来说切不可好高骛远。一般从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程并且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操作练习。平时可以多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。有可能的话,还可以参加一些电子设计大赛,借此机会2-3个人合作做一个完整系统,会更有帮助。到了大四毕业设计阶段,也可以选择相关的课题作些实际案例增长经验。做什么事情都有个经验的积累过程,循序渐进。

请问作为学生,如何学好单片机?

答:学习好单片机,最主要的是实践,在实践中增长经验。在校学生的话,实践机会的确会比较少,但是有机会的话,可以毕业实习选择相关的课题,这样就可以接触到实际的项目。而且如果单片机微机原理是一门主课的话,相信学校会安排比较多的实践上机机会。有能力的话,可以找一些相关兼职工作做做,会更有帮助。而且单片机开发应用需要软硬件结合,所以不能只满足于编程技巧如何完美,平时也要注意硬件知识的积累,多上上电子论坛网站,买一些相关杂志。可能的话,可以到电子市场去买一些小零件,自己搭一个小系统让它工作起来。

如何才能成为单片机的高手啊?

答:要成为单片机高手,应该多实践,时常关注单片机的发展趋势;经常上一些相关网站,从那里可以找到许多有用的资料。

;
阅读全文

与单片机mcu编程怎么学相关的资料

热点内容
win10如何强制重命名文件 浏览:204
java集合随机打乱顺序 浏览:805
qq怎么解绑app 浏览:995
苹果设备优盘考文件 浏览:662
java项目部署与测试 浏览:728
个人微信号和公众平台 浏览:988
微信显示网络不可用 浏览:478
现实编程怎么敲键盘 浏览:950
怎么做招标文件 浏览:543
黑苹果macminidiy 浏览:105
系统暂时删除应用程序 浏览:400
怎么更改qq邮箱的账号和密码 浏览:947
电视剧周边是什么网络用语 浏览:130
网络信号怎么来的 浏览:802
win10文件默认颜色 浏览:713
安卓的荣耀战区 浏览:621
使excel文件损坏的原因 浏览:746
有个搜题网站叫知什么 浏览:17
川剧迷app在哪里下载 浏览:677
加工中心m30螺纹怎么编程 浏览:29

友情链接