京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1806|回复: 0

单片机编程语言及应用技巧解析

[复制链接]

18

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2019-7-18 15:02:50 | 显示全部楼层 |阅读模式 来自 中国
文末有"惊喜",记得看到最后~
, x; k; Z& }8 v1 o: d" [' `3 Y
* n7 |1 y" I5 Y. L% y, b, r

) d2 E" u7 f- N( c. G1. C语言和汇编语言在开发单片机时各有哪些优缺点?
# O6 H5 c# E6 f/ Y
1 h% T' y% Y$ b3 W
! \+ z" O' h4 F5 w( E
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU, 其汇编语言可能有所差异,所以不易移植。0 n4 r, R. a  e" K4 Z
7 h7 I1 h9 y% U1 Z* k$ x

0 S+ h3 }5 }; o7 g3 k4 ~C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。1 f$ Z$ i2 D( D# Y' K. y

1 _! E8 E! d9 m$ U. t& l+ G# C- q8 \( h! Z. \" d
对于目前普遍使用的RISC 架构的8bit MCU来说,其内部ROM、RAM、 STACK 等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,我们还是建议采用汇编语言比较好。
- [- U% p* G% K
* `' C' \  n) m2 H: O0 z0 l8 z

  g- s' @: h  h( `, L+ r! o0 Y/ x8 r2. C或汇编语言可以用于单片机,C++能吗?* u0 e# f9 h$ q3 {6 L6 O- S8 e

0 I) d( y* {# p在单片机开发中,主要是汇编和C。9 K! L5 ?6 O4 f$ L

" _+ b4 l3 W5 e2 g

9 Y: @/ ~9 i9 v9 Q5 Z4 b7 {8 `3. 搞单片机开发,一定要会 C 吗?! X% c* K% l* f: U: `5 ?+ z$ C
, _3 J, H8 K- B& w+ [: H3 p# F; k

8 [" Q7 W  s( n) K# f% L# s' o汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU, 其汇编语言可能有所差异,所以不易移植。
! L' z& ^. u! ]4 N5 k' i9 Y
7 Z5 v  d$ h9 ^+ E$ @5 V# P
/ z( U, Z5 @" X% T0 ]9 {# sC语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、 有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。
2 G8 X' T$ C$ f- L5 ^" j+ T
: D5 \6 {3 X- i4 F) r
, r* v7 c- x9 J此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。
" m; |' C7 H4 \/ L7 L& l1 L; e: p  E1 x) _# s, x" J* W

2 i! l% G/ B6 y2 d$ r+ E综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。 所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。
4 z- l! l2 I9 i3 o
* B* g* l- O2 v" G2 J- w5 O& p
; T$ F: m( D! P( P8 W. [6 J
4. 当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好?
, N$ l, v3 e! d# e9 d3 [+ S" C# u5 }5 \" i

3 K0 K, u4 p. }- ~& ^2 H. F对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。如果对这些特性不了解,那调试起来就有的烦了,到头来可能还不如用汇编来的快。( i  x, s5 ^, l# l& m# v- D
, u) F' j$ c2 p% }$ \9 H$ r

' F9 H. a$ }" J/ ?5 K5. 在教学中要用到8088和196芯片单片机教材,请问那里可以找到关于这方面的书或资料?% o8 V( c  L' D$ H9 |
* ~- r/ ~' T; A2 `4 n# u1 w$ s

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

% v4 S2 R5 N% P  h) B" H, Z. e- p

2 w% T  g" o% S/ t6. 初学者到底是应该先学C还是汇编?
2 R3 i5 ?, l( |) j+ R! v
% v; H8 i9 ]4 p2 @6 r) O
$ N9 O2 ?7 m( J" R4 Z对于单片机的初学者来说,应该从汇编学起。因为汇编语言是最接近机器码的一种语言,可以加深初学者对单片机各个功能模块的了解,从而打好扎实的基 础。
2 t% F* E* }$ j1 u
) s' w( `3 R; `6 F( ^9 Y

& Y& a; E* e: D7. 在芯片集成技术日益进步的今天,单片机的集成技术发展也很迅速,在传统的40引脚的基础上,推出20引脚的单片机系列,使很多的引脚可以复用,这种复用技术的使用在实际应用中会不会影响其功能的执行?
* ^2 L( Q7 M6 V, ^4 f3 `* T" h
8 }* F/ |& S, B' p0 L7 ?6 C& a* R
8 ?0 E# V+ n) H0 D5 s* ^! T! _
在实际应用中不会影响其功能的执行,但是要注意的是, 有的MCU如果采用复用引脚的话,该引脚会有一些应用上的限制,这在相应的datasheet里面都会有描述,所以在系统规划的时候都要予以注意。% O# i7 x: u* v6 V

# Q2 f) j- q0 V& v, k4 }% y3 n' r$ ?+ U; W8 s

/ H1 C0 H2 Z0 c7 r" k8. Delta-Sigma软件测量方式,是什么概念?
( x* ~* H. s3 m5 y* n3 e' g9 W) F% T) F4 _- u4 C( @. a! Y
* c$ K' l$ ?: @: g" V' p0 g
Delta-Sigma原理一般应用在ADC应用中。具体来说,Delta-Sigma ADC的工作原理是由差动器、积分器和比较器构成调制器,它们一起构成一个反馈环路。 ! P8 p0 y. o0 b' A4 z
. ~5 O* U& o5 r' p4 Z
# R( a- s( }# `) t
调制器以大大高于模拟输入信号带宽的速率运行,以便提供过采样。模拟输入与反馈信号(误差信号)进行差动 (delta)比较。该比较产生的差动输出馈送到积分器(sigma)中。然后将积分器的输出馈送到比较器中。比较器的输出同时将反馈信号(误差信号)传送到差动器,而自身被馈送到数字滤波器中。这种反馈环路的目的是使反馈信号(误差信号)趋于零。8 H+ H* E2 T1 K. T7 m3 n: b5 F' M

" B6 f1 O. ]- [# L/ N5 A1 |
/ R* o# ?. y9 m/ O( f比较器输出的结果就是 1/0 流。该流如果 1 密度较高,则意味着模拟输入电压较高;反之,0 密度较高,则意味着模拟输入电压较低。接着将 1/0 流馈送到数字滤波器中,该滤波器通过过采样与抽样,将 1/0 流从高速率、低精度位流转换成低速率、高精度数字输出。( v4 [/ b9 f- I0 s+ u2 H+ A; F! J* @+ H
% [9 d  e+ m9 A; G4 y) p( @' B4 i
0 Y6 V' ^8 w) D0 t6 s6 u
简而言之,Delta就是差动,Sigma就是积分的意思。Delta-Sigma软件测试,简单理解应该是通过软件模拟差动积分的过程。具体来说,就是侦测外部输入的 电压(或者电流)信号变化,然后通过软件积分运算,得出外部信号随时间变化的基本状况。
* c, Y$ |5 w" m6 j5 i' o' F! g1 P
2 j  U0 o% w! w9 f% y# z0 u
欢迎大家在文末留言
: f4 S* h& e8 z# U9 P. j6 _$ i2 B3 J9 e1 C0 h' r% V
小编将从留言中抽出1名粉丝) A5 x# F' C6 p* x0 Q
送上小礼物一份
. h# R2 z7 h" F. ]( F  {! ?5 R: g9 E( X3 s3 t

+ d, p/ Z' N: J# i0 |后台回复【我要入群5 n! t; U6 h' s0 d$ E9 Z) i4 L$ I
加入EEPW公众号粉丝群
9 c+ `' f0 G; c( B# O& q+ X2 Z
2 V$ f; x0 N# S: b. }5 t
) t7 N4 h9 E6 x  q7 {# M* n
<span style="max-width: 100%;box-sizing: border-box !important;word-wrap: break-word !important;overflow-wrap: break-word !important;">

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-10-23 10:22 , Processed in 0.044373 second(s), 27 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表