导航:首页 > 操作系统 > 单片机c语言技巧

单片机c语言技巧

发布时间:2022-12-31 11:38:14

1. 单片机的C语言怎样去学

你最好是买一个单片机,对所有的管脚功能进行熟悉,然后进行编程练习。还有就是看相关的书籍,最好是有例子和习题那种的,边学习边做练习,这样进步会很快!如果到一定程度了的话,你就可以根据你的想法自己给自己出题,然后实现。

2. 单片机C语言培训 应注意哪些学习方法

学习单片机C语言的话,注重多实践,不要好高骛远。
把学习到的程序一个字符一个字符的敲出来,用来加深编写代码的印象。用仿真软件看现象,再下载到实际电路板看运行状态。初期编写简单的程序进行仿真,逐渐增加代码量,增加难度。再去网上找一些好玩的程序去学。
建议先看看51单片机的程序,进行模拟。然后直接用STM32系列单片机进行单片机C语言学习及实践。

3. 如何写出高效的单片机C语言程序代码

由于单片机的性能同电脑的性能是天渊之别的,无论从空间资源上、内存资源、工作频率,都是无法
与之比较的。PC 机编程基本上不用考虑空间的占用、内存的占用的问题,最终目的就是实现功能就可以了。
对于单片机来说就截然不同了,一般的单片机的Flash 和Ram 的资源是以KB 来衡量的,可想而知,单片
机的资源是少得可怜,为此我们必须想法设法榨尽其所有资源,将它的性能发挥到最佳,程序设计时必须
遵循以下几点进行优化:

1. 使用尽量小的数据类型
能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变
量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。当然,在定义变
量后不要超过变量的作用范围,如果超过变量的范围赋值,C 编译器并不报错,但程序运行结果却错了,
而且这样的错误很难发现。

2. 使用自加、自减指令
通常使用自加、自减指令和复合赋值表达式(如a-=1 及a+=1 等)都能够生成高质量的
程序代码,编译器通常都能够生成inc 和dec 之类的指令,而使用a=a+1 或a=a-1 之类
的指令,有很多C 编译器都会生成二到三个字节的指令。

3. 减少运算的强度
可以使用运算量小但功能相同的表达式替换原来复杂的的表达式。
(1) 求余运算
N= N %8 可以改为N = N &7
说明:位操作只需一个指令周期即可完成,而大部分的C 编译器的“%”运算均是调用子程序来
完成,代码长、执行速度慢。通常,只要求是求2n 方的余数,均可使用位操作的方法来代替。
(2) 平方运算
N=Pow(3,2) 可以改为N=3*3
说明:在有内置硬件乘法器的单片机中(如51 系列),乘法运算比求平方运算快得多, 因为浮点数
的求平方是通过调用子程序来实现的,乘法运算的子程序比平方运算的子程序代码短,执行速度快。
(3) 用位移代替乘法除法
N=M*8 可以改为N=M<<3
N=M/8 可以改为N=M>>3
说明:通常如果需要乘以或除以2n,都可以用移位的方法代替。如果乘以2n,都可以生成左移
的代码,而乘以其它的整数或除以任何数,均调用乘除法子程序。用移位的方法得到代码比调用乘除法子
程序生成的代码效率高。实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果。如N=M*9
可以改为N=(M<<3)+M;
(4) 自加自减的区别
例如我们平时使用的延时函数都是通过采用自加的方式来实现。
void DelayNms(UINT16 t)
{
UINT16 i,j;
for(i=0;i<t;i++)
for(j=0;i<1000;j++)
}
可以改为
void DelayNms(UINT16 t)
{
UINT16 i,j;
for(i=t;i>=0;i--)
for(j=1000;i>=0;j--)
}
说明:两个函数的延时效果相似,但几乎所有的C 编译对后一种函数生成的代码均比前一种代码少1~3
个字节,因为几乎所有的MCU 均有为0 转移的指令,采用后一种方式能够生成这类指令。

4. while 与do...while 的区别
void DelayNus(UINT16 t)
{
while(t--)
{
NOP();
}
}
可以改为
void DelayNus(UINT16 t)
{
do
{
NOP();
}while(--t)
}
说明:使用do…while 循环编译后生成的代码的长度短于while 循环。

5. register 关键字
void UARTPrintfString(INT8 *str)
{
while(*str && str)
{
UARTSendByte(*str++)
}
}
可以改为
void UARTPrintfString(INT8 *str)
{
register INT8 *pstr=str;
while(*pstr && pstr)
{
UARTSendByte(*pstr++)
}
}
说明:在声明局部变量的时候可以使用register 关键字。这就使得编译器把变量放入一个多用途的寄存
器中,而不是在堆栈中,合理使用这种方法可以提高执行速度。函数调用越是频繁,越是可能提高代码的
速度,注意register 关键字只是建议编译器而已。

6. volatile 关键字
volatile 总是与优化有关,编译器有一种技术叫做数据流分析,分析程序中的变量在哪里赋值、在
哪里使用、在哪里失效,分析结果可以用于常量合并,常量传播等优化,进一步可以死代码消除。一般来
说,volatile 关键字只用在以下三种情况:
a) 中断服务函数中修改的供其它程序检测的变量需要加volatile(参考本书高级实验程序)
b) 多任务环境下各任务间共享的标志应该加volatile
c) 存储器映射的硬件寄存器通常也要加volatile 说明,因为每次对它的读写都可能由不同意义
总之,volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素
更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码
就不再进行优化,从而可以提供对特殊地址的稳定访问。

4. 怎样学习单片机c语言

1,楼主,你首先要学习C语言基础,就相当于80%会单片机了,因为现在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C语言。
2,先看内核8051的单片机:台湾宏晶的STC89C51-DIP40/或其它如新茂,到网上买一个开发板,价格不会超过200元。
3,看一下单片机功能:包换内部FLASH、RAM、TIMER、INT、ADC、USB、ISP/IAR等。
4,编译环境、编程软件KEIL。
5,打开开发板的例子程序,在KEIL编译,下载到板,看结果和说明是不是相符,达到这样效果时,你心里肯定很秀激动,这时你真正学会了单片机,你成功了!!!!!。
6,单片机C语言举例:
sbit SPEAK = P1^5; //IO口定义为蜂鸣器控制
如果蜂鸣器正极接电源,SPEAK =0;蜂鸣器就会响,你看就是这么简单。
unsiggne char temp;//定义TEMP为单字节变量。
sfr PORTA P1;//将P1口定义为PORTA
总结:多做开发板上的实验,你要多参与这样的项目开发,慢慢就会了。

5. C语言怎么用到单片机

1、把C语言编译为编程器支持的语言格式,比如常用的bin,或hex等格式。
2、如果是可在线编程的,可以用ISP直接进行烧录。
3、如果不是可在线编程的,将单片机芯片,放入编程器,然后烧录。
注意:编译和烧录时,都要选择和单片机芯片一致的型号,否则会出错。
如果找不到对应的型号,说明不支持该型号的单片机。

6. 单片机c语言如何精通

用过瑞萨R8C25的,和你分享一下心得:
1.C语言基础打扎实,指针这块一定要透彻,比如随便问一下,int a[3][4],请问a+2是第几号元素的地址,答案有a[0][2]和a[2][0]。很容易弄错的。
2.文件方面倒是不用看了,单片机不用C语言文件操作。
3.学一个单片机关键学的是它的说明书,像我们学的R8C25说明书是英文版的,当然后来搞到了一些中文的资料,学得很费劲,我学单片机的起步时51单片机,那个时候只用看看课本,背熟指令轻松考了个96,以为R8C25和51一样,信手拈来,后来遭受打击,我囧!51单片机不论是从功能还是指令都简单多了,而其他的商用单片机就不是那么简单,不是一本课本就可以搞定的。说这个是预防你由于以前有过单片机基础,以为就好学、简单,其实不然,作好心理准备,不简单!
4.多实践是真理,每一个说明书或者是学习资料上的例子都给它调通,不要放弃难的,越难的越不能放弃。
5.单片机挺有意思的,能做一些定时、LED、凤鸣、通信,能达到让君会心一笑,祝你学得开心哈哈!

7. 如何快速的学会单片机C语言编程

很多想学单片机的人问我的第一句话就是怎样才能学好单片机?对于这个问题我今天就我自己是如何开始学单片机,如何开始上手,如何开始熟练这个过程给大家讲讲。

先说说单片机,一般我们现在用的比较多的的MCS-51的单片机,它的资料比较多,用的人也很多,市场也很大。就我个人的体会怎么样才能更快的学会单片机这门课。单片机这门课是一项非常重视动手实践的科目,不能总是看书,但是学习它首先必须得看书,因为从书中你需要大概了解一下,单片机的各个功能寄存器,而说明白点,我们使用单片机就是用软件去控制单片机的各个功能寄存器,再说明白点,就是控制单片机那些管脚的电平什么时候输出高,什么时候输出低。由这些高低电平的变化来控制你的系统板,实现我们需要的各个功能。至于看书,只需大概了解单片机各管脚都是干什么的?能实现什么样的功能?第一次,第二次你可能看不明白,但这不要紧,因为还缺少实际的感观认识。所以我总是说,学单片机看书看两三天的就够了,看小说你一天能看五六本,看单片机你两三天看两三遍就够了,可以不用仔细的看。推荐一本书,就这一本就足够,书名是《新编MCS-51单片机应用设计》,是哈尔滨工业大学出版社出的的,作者是张毅刚。大概了解一下书上的内容,然后实践,这是非常关键的,如果说学单片机你不实践那是不可能学会的,关于实践有两种方法你可以选择,一种方法:你自己花钱买一块单片机的学习板,不要求功能太全的,对于初学者来说你买功能非常多的那种板子,上面有很多东西你这辈子都用不着,我建议有流水灯、数码管、独立键盘、矩阵键盘、AD或DA(原理一样)、液晶、蜂鸣器,这就差不多了。如果上面我提到的这些,你能熟练应用,那可以说对于单片机方面的硬件你已经入门了,剩下的就是自己练习设计电路,不断的积累经验。只要过了第一关,后面的路就好走多了,万事开头难,大家可能都听过。方法二:你身边如果有单片机方面的高手,向他求助,让他帮你搭个简单的最小系统板。对于高手来说,做个单片机的最小系统板只需要一分钟的时间,而对于初学者可就难多了,因为只有对硬件了解了,才能熟练运用。而如果你身边没有这样的高手,又找不到可以帮助你的人,那我劝你最好是自己买上一块,毕竟自己有一块要方便的多,以后做单片机类的小实验时都能用得上,还省事。

有了单片机学习板之后你就要多练习,最好是自己有台电脑,一天少看电影,少打游戏,把学习板和电脑连好,打开调试软件坐在电脑前,先学会怎么用调试软件,然后从最简单的流水灯实验做起,等你能让那八个流水灯按照你的意愿随意流动时你已经入门了,你会发现单片机是多么迷人的东西啊,太好玩了,这不是在学习知识,而是在玩,当你编写的程序按你的意愿实现时你比做什么事都开心,你会上瘾的,真的。做电子类的人真的会上瘾。然后让数码管亮起来,这两项会了后,你已经不能自拔了,你已经开始考虑你这辈子要走哪一行了。就是要这样练习,在写程序的时候你肯定会遇到很多问题,而这时你再去翻书找,或是问别人,当得到解答后你会记住一辈子的,知识必须用于现实生活中,解决实际问题,这样才能发挥它的作用,你自己好好想想,上了这么多年大学,天天上课,你在课堂上学到了什么?是不是为了期末考试而忙碌呢?考完得了90分,哈哈哈好高兴啊,下学期开学回来忘的一干二净,是不是?你学到什么了?但是我告诉你单片机一旦学会,永远不会忘了。另外我再说说用汇编和C语言编程的问题。很多同学大一二就开设了C语言的课,我也上过,我知道那时天天就是几乘几,几加几啊,求个阶乘啊。学完了有什么用?让你用C语言编单片机的程序你是不是就傻了?书上的东西我们必须要会运用。单片机编程用C语言或汇编语言都可以,但是我建议用C语言比较好,如果原来有C语言的基础那学起来会更好,如果没有,也可以边学单片机边学C语言,C语言也挺简单,只是一门工具而已,我劝你最好学会,将来肯定用得着,要不你以后也得学,你一点汇编都不会根本无所谓,但你一点C语言都不会那你将来会吃苦头。汇编写程序代码效率高,但相对难度较大,而且很罗嗦,尤其是遇到算法方面的问题时,根本是麻烦的不得了,现在单片机的主频在不断的提高,我们完全不需要那么高效率的代码,因为有高频率的时钟,单片机的ROM也在不断的提高,足够装得下你用C语言写的任何代码,C语言的资料又多又好找,将来可移植性非常好,只需要变一个IO口写个温度传感器的程序在哪里都能用,所以我劝大家用C语言。

总结上面,只要你有信心,做事能坚持到底,有不成功不放弃的强烈意志,那学个单片机来说就是件非常容易的事。

步骤:1.找本书大概了解一下单片机结构,大概了解就行。不用都看懂,又不让你出书的。(三天)

2.找学习板练习编写程序,学单片机就是练编程序,遇到不会的再问人或查书。 (二十天)

3.自己网上找些小电路类的资料练习设计外围电路。焊好后自己调试,熟悉过程。 (十天)

4.自己完全设计具有个人风格的电路,产品,。。。你已经是高手了。 。。。。

看到了吗?下功夫一个多月你就能成为高手,我就讲这么多了,学不学得会,下不下得了功夫就看你的了。
参考资料:

8. 如何提高单片机C语言编程能力

1.先自己写一些小程序,然后再从网上下载些优秀代码回来,对比自己的程序,找出差别,认真对比学习,吃透优秀算法,慢慢积累。
2.从小的模块程序开始,一步一步优化自己的程序,这样的话,以后写的大程序就慢慢好了,没事的时候多看看C的书,不懂的要搞懂,已经懂的要多想想有没有更好的方法。
3另外,单片机与硬件有关,不可能说编译器中的库函数有什么什么,就可直接使用,还得考虑自己单片机的执行速度等好多方面的问题。
4.有空的话,也可以看看软件方面的书,学学一些典型算法。
5.这是后话,程序的效率除了编程外,还与编译器有大的关系,可以从网上看看,学习一下自己使用的编译器的特点。
反正不断努力,肯定会有进步。编程需要练习,不练习,空想成不了高手,不要
浮躁,会驱动51的几个小东西,就得意
编程需要的是综合能力。各个方面都兼顾到,

9. 怎样提升自己单片机C语言编程能力啊求高手指点迷津!我硬件也懂一点 但我想朝编程方面发展 跪求高手指教

到楼主描述的这种程度,比较实际的只有两种方法:一是实践,实际做一个较大的项目,二是多看看网上的一些好的范例,哪怕是你做过的项目,重点不是看其所实现的功能,而是看其源程序的特点和结构!个别的可以关注一下算法。还有一种方法,学一些软件专业的必修基础课,了解软件编程的思维模式,这可能要搭些功夫,而且影响是潜移默化的,如果不是搞纯软件的话,个人观点可以不学。

C语言编程能力并不完全体现在代码的编写效率和执行效率高。注意:是不完全,这方面的提升与个人的逻辑思维能力和其它知识水平有关。举个例子:假如让你编制一个函数实现求arctan反三角函数的值,你会怎么做?如果你不知道采用级数展开的方法就无从下手。其实这考验的是你的数学水平。所以这方面的提高是综合性的,无法具体而谈。
可以提升的我认为体现在如下几个方面,这几方面做好了,同样也可以说具备相当的编程能力了。

1、软件版本管理:任何软件,每次修改发布后必须更新软件版本号,这点工作后尤其关键,我见过这方面不认真的,别多了,3、4个版本后就焦头烂额。
2、源程序中多些注释:比如函数的功能描述、入口参数说明、返回值说明、调用的要求、完成日期等。另外,关键算法的说明也应该注释。常言道:好记忆不如烂笔头,不能太过相信自己的智商。
3、工程化管理源程序:比如对一些常数、接口地址、数据类型定义(typedef)、数据结构定义、自定义的函数声明等,应写入单独建立.H文件,然后在其它.C文件中包含。.C文件,如果软件大的话也尽量的按照功能分别建立,然后在工程中包含。
4、有时,一个软件会针对不同型号的设备,此时应采用#ifdef等编译控制语句加以区分;而且,为方便调试,有时需要对一些状态或变量赋与初值,而正式版本中不能要,也可以采用这种方法,便于管理,不易出错。这部分内容应放在前面所说的.H文件中。
5、尽量多使用函数,这样模块化强,也能通过函数名看出函数功能,易于代码阅读。最简单的例子就是初学者常用的Delay()。不过也别太过了,A=B+C就没必要了。
6、对一些常数、地址,最好使用#define通过英文字符来代替,将其放在.H文件中,这样万一有变化,只需改一处即可,方便,又不会遗漏。比如定时器重装值:
#define C_TH0_50MS (65536-50000)/256
如果需要改晶振,只需改此处即可。

以上注重的是整个软件方面,下面说一些具体需要注意的,不成系统,也没整理过,想到那说到哪吧。基本上是些规范,规范同样代表着水平:
1、多分枝逻辑判断类语句:应养成将所有判断情况都写出来、不用的注掉的习惯,这类语句包括if、switch,举例
if(i==4)
{....}
//else if i>4
//else i<4
其中else的两部份不用,那也写出来,注掉。这样帮助你保证程序的严密型,也有助于问题排查
2、常数、变量、函数、端口等的命名:(不要出现全局变量名与局部变量名相同的情况,虽然在C里允许这样做)我个人采用如下规则
全局变量:类型+具有实际意义的词组或拼音,其中词组或拼音中每个字首字母应大写。
例如: iSecondCount:一个int类型的秒计数变量
局部变量:全小写字符,循环计数变量可以采用诸如i、j、k、n之类的无意义字符。最好不用
a、b、c之类的16进制数所使用的字符。
端口:全大写,并使用具有实际意义的词组或拼音,使用_作为分割符。如KEY_COM
常数:前面加“C_”,后面每个单词之间最好也加“_”,如上例中的C_TH0_50MS
函数:类似于全局变量,只是前面不加类型说明符。如Timer0、Delay、DelayMs。
3、源程序中的注释符尽量不使用/* */,而使用//,这样如果要临时注掉大块程序时,使用一次/* */就可以了,否则可能需要修改多处,麻烦。
4、格式上,注意缩进,尤其是多级判断。而且执行体既便只有一句,有些地方也尽量不要忽略大括号,举例:
if(a>4)
{
a++;
}
else
{
a=0;
}
5、..............还有很多,一下想不起来。你可以自己体会,自己制定。

能力的体现方式有很多,比如说求职是否能如愿。看人看细节,如果编程时养成了上述的习惯,不管你的实际水平如何,都说明了你的处事态度,在大家的智商水平差不多的前提下,无论于公于私,如果我是老板的话会选择你,放心的把任务交给你去做。
你先试试吧,说起来容易,做起来难,我自己的规则,我的执行度也就达到70%水平吧。

10. 单片机 用C语言怎么编程!

每一种单片机都有一套自己的C编译器,你可以直接用,也可以挂载到其他的编译环境中
比如
Wave6000

51系列的
推荐用keilV8
Microchip系列的推荐用HT-PICC
编译环境用MPLAB
然后编程代码部分你写好之后,编译,此时会生成一些文件,如*.hex
,*.bin
……
然后把.hex
文件
利用烧写器烧写到单片机里面
这样单片机就可以按照编译的程序执行了
单片机的种类不一样,程序代码也略有区别

阅读全文

与单片机c语言技巧相关的资料

热点内容
addto新建文件夹什么意思 浏览:158
有服务器地址怎么安装软件 浏览:659
安卓如何完全清除数据 浏览:690
安卓安卓证书怎么信任 浏览:53
服务器被攻击如何解决 浏览:221
学霸变成程序员 浏览:881
c语言编译错误fatalerror 浏览:441
ipv4内部服务器地址怎么分配 浏览:463
java线程安全的方法 浏览:950
重复命令画梯形 浏览:164
在疫情就是命令 浏览:328
自己搭建一个什么服务器好玩 浏览:253
java基础马士兵 浏览:823
完美世界手游如何查看服务器 浏览:859
光遇安卓与ios什么时候互通 浏览:598
js如何运行时编译 浏览:917
引力app在哪里下载 浏览:609
编写app如何得到钱 浏览:801
吉利汽车软件放哪个文件夹安装 浏览:223
多文件编译c 浏览:543