基于C语言的单片机技术应用期刊论文

C51语言应用程序设计中的几个问题

简要介绍了Franklin C51交叉编译器的特点,详细讨论了C51语言编程的基本技巧、其与汇编语言程序的混合编程、中断处理等实际问题,并给出了相应的处理程序。

富兰克林C51编译器;汇编语言;结构化设计;模块中断

-

汇编语言是开发单片机应用系统时常用的软件工具。可以直接操作硬件,指令执行速度快。但其指令系统的固有格式受硬件结构限制较大,编写和调试困难,可移植性也较差。随着单片机硬件性能的提高,其工作速度越来越快,所以在编写单片机应用系统程序时,更多的是关注程序本身的编程效率。富兰克林C51交叉编译器是专为80C51系列单片机设计的高效C语言编译器。使用它可以缩短开发周期,降低开发成本。此外,开发的系统易于维护,可靠性高,可移植性好。甚至在代码的使用效率上,完全可以和汇编语言相比。因此,它成为开发80C51系列单片机的流行工具。

1 C51语言编程的基本技巧

c语言是一种高级编程语言,提供了非常完整的标准化过程控制结构。因此,在用C51语言设计单片机应用系统程序时,首先应尽可能采用结构化编程方法,这样可以使整个应用系统程序结构清晰,易于调试和维护。对于一个较大的程序,可以把整个程序按照功能分成几个模块,不同的模块完成不同的功能。针对不同的功能模块,分别指定相应的入口参数和出口参数,将一些经常使用的程序更好地编译成函数,既不会造成整个程序管理的混乱,又增强了可读性和可移植性。

在编程过程中,要充分利用C51语言的预处理命令。对于一些常用的常量,如TRUE、FALSE、PI、各种特殊函数寄存器,或者程序中一些受外部条件影响的重要常量,可以使用宏定义“# #define”或者将它们放在一个头文件中一起定义,然后使用文件包含命令“# #include”将它们添加到程序中。这样,当一个参数需要修改时,只需要修改相应的包含文件或宏定义,而不需要修改每一个使用它们的程序文件,有利于文件的维护和更新。以下是一些例子:

例1对于不同的单片晶体振荡器,程序采取不同的延迟时间,延迟时间的长短可以根据外界条件的变化进行修改。对于这样的程序,可以用宏定义和条件编译来实现。该过程如下:

#定义标志1

#ifdef标志==1

#定义fosc 6M

延迟= 10;

#elif标志= = 0

#定义fosc 8M

延迟= 12;

#否则

#定义fosc 12M

延迟= 20;

#endif

主()

{

for(I = 0;IdelayI);

}

这样,源程序不需要任何修改就可以应用于不同时钟频率的单片机系统,并且可以根据不同的情况取不同的延迟值来完成不同的目的。

2 C51语言和汇编语言程序的混合编程

C51编译器可以高效地编译C语言源程序,生成高效简洁的代码。大多数情况下,用C语言编程就可以达到预期的目的。但是有时候为了直观编程或者处理一些特殊地址,就需要使用某种汇编语言来编程。在其他场合,出于某种目的,汇编语言也可以调用C语言。在这种混合编程中,关键是参数的传递和函数的返回值。他们必须有完整的协议,否则数据的交换可能是错误的。下面以力源公司的10位串行A/D转换器TLC1549为例,来讲解一下C语言程序和汇编语言程序的调用。

图1 TLC1549引脚图

1549的引脚图和时序开/关时序图分别如图1和图2所示。假设数据输出连接到P1.0、P1.1,时钟连接到P1.2..

1549的具体特性请参考相关资料。

图2 TLC 1549的时序图

例2 C语言程序和汇编语言程序之间的调用,其子程序如下:

公共广告;入口地址

SEG_AD段代码;程序段

RSEG赛格阿德

使用0

广告:MOV·R6,第00名

MOV R7,#00

SETB P1.1

呼叫延迟

CLR P1.1

呼叫延迟

MOV R0,10号

RR0: SETB P1.2

nototherwiseprovided(for)除非另有规定

CLR P1.2

DJNZ R0,RR0

呼叫延迟

MOV 30H,R6;高模数转换

;两位存储在R6。

阿卡尔·CIR

MOV R6,30H

SETB P1.2

nototherwiseprovided(for)除非另有规定

CLR P1.2

R6 MOV 30H

阿卡尔·CIR

MOV R6,30H

MOV R0,# 8;低模数转换

;8位存储在R7中。

RR2: SETB P1.2

nototherwiseprovided(for)除非另有规定

CLR P1.2

MOV 30H,R7

阿卡尔·CIR

MOV R7,30H

DJNZ R0,RR2

浸水使柔软

CIR

MOV C,P1.0

MOV A,30H

RLC A

MOV 30H,A

浸水使柔软

结束

在上面的程序中,函数的返回值是一个无符号整数。根据调用规则,返回值的高阶必须在R6,低阶必须在R7,这样才能保证数据传输不出错。另外,在调用的过程中,一定要注意寄存器的堆栈。这样以后用A/D转换的时候,可以用C语言调用汇编语言子程序AD()。

3 C51中断处理程序

C51编译器支持在C源程序中直接开发中断进程,减少了使用汇编语言的繁琐工作,提高了开发效率。中断服务函数的完整语法如下:

Void函数名(void)[模式]

中断数控语言在单片机中的应用 单片机就像一个身体,程序是它的灵魂。c语言是制造(书写)其灵魂的工具。

单片机中的C语言和标准C语言有一些区别,对位有很多定义和运算。KEIL是单片机应用中最常用的编译软件。

C51,功能强,但是功能强。

c语言是一种高级语言,在单片机应用中优势突出:编程灵活、可读性强、可移植性强。当然,在学习C之前先了解一些汇编语言会更好,不仅可以熟悉位运算,还可以充分发挥C语言的优势。

球一篇关于单片机或者C语言的论文!2000字左右? 基于MSP430单片机的电源监控管理系统(单片机论文)

介绍

大功率DC开关电源由PFC和DC-DC变换器组成。为了提高可靠性,实现离线或远程监控,在开关电源模块中设置了监控管理系统。该系统监测电源故障,自动设定和调整电源输出的电压和电流,并通过串行通信接口与远程中央监控站进行远程监控和管理。该功能在通信系统基站的电源系统中尤其重要。介绍了一种基于MSP430单片机的电源监控管理系统的设计与实现。

1系统结构和硬件电路设计

系统的总体设计结构如图1所示。本系统采用的核心芯片是TI公司推出的16位系列MCU MSP430。MSP430具有集成度高、外设丰富、超低功耗等优点。单芯片集成多通道12位A/D转换器、片内精密比较器、带PWM功能的多个定时器、片内USART、看门狗定时器、片内数控振荡器(DCO)、大量I/O端口和大容量片内存储器。采用串行在线编程方法,单片机可以满足大多数应用需求。MSP430的高集成度使得用户可以很容易地设计出真正的单片系统,而无需在接口、外部I/O和内存上花费太多的精力,在很多领域得到了广泛的应用。下面介绍系统可以实现的功能以及基于MSP430F149的电控系统的设计。

1.1系统功能:

A.通电控制。上电后,单片机开始工作,按下电源按钮,指示灯亮,将电网220V接入PFC,接通电源关断,再接入负载。

B.电压设置和调整。开关电源的输出电压值由单片机A/D口采集并显示在液晶屏上,由单片机控制的数字电位器调节输出电压值,实现自动调节。或者通过键盘左右键选择电压调整页面,用上下键手动调整;也可以通过通讯接口实现远程调节。

C.现行规定。当多个开关电源并联使用时,要求每个电源的负载电压相等。单片机A/D口采集转换成电压值的负载电流值,通过通讯口获取各站电流值,取平均电流值,控制数字电位器调节输出电压,使输出负载电流达到平均值;或者通过键盘左右键选择当前调整页面,用上下键手动调整。

D.故障报警。当单片机通过光电耦合器检测到各种输入输出故障时,扬声器会发出蜂鸣声,相应的报警灯会闪烁,故障类型和处理方法会显示在液晶屏上。

E.监控。单片机的A/D口采集测量电网电压、输出电压、输出电流,超限时报警。

F.交流。包括单片机与各开关电源之间的通信以及单片机与中央监控站之间的通信。

1.2电压调节电路

调压残猜电路由单片机、数字电位器X9313和可调并联参考芯片TL431组成,其电路原理图如图2所示。Xicor9313是一款固态非易失性电位计,可用作数字控制微调电位计。TL431是TI公司生产的三端可调分流基准,具有良好的热稳定性,其输出电压可以用两个电阻任意设置为VREF(2.5V)到36V之间的任意值。工作时,单片机的IO控制器对输入管脚计数,并提供计数脉冲。该输入端子由下降沿触发。另一个IO控制U/D提升输入端子。当U/D处于高电平时,X9313内部计数器进行加法计数,VW端输出电压上升。由于VW接地,VH的端电压降低,而TL431的REF输出端电压恒定在2.5V,因此Vcc的输出电压增加。同样,当U/D较低时,Vcc处的输出电压降低,从而实现电压输出调节。

1.3带垂直间隙的模拟数据采集

MSP430F149内置具有采样保持功能的高精度12位ADC转换模块,提供多种采样保持时钟源。MSP430有8个外部输入通道可供选择,最高采样速度可达200KHZ。它还有一个内置的温度传感器,可以测量芯片中的温度。如果测量温度高于或低于预设温度,它可以通过外部组件显示报警信息,并具有6个可编程的内部参考电压。转换模块为一些需要模拟采集的场合提供了方便。我们选择的基准电压为0 ~ 2.5V,所以MSP430F149的AD分辨率约为2.5/4096 = 0.61V,由于输入的模拟电压较高,无法直接连接到单片机的ADC采样口,所以采用滑动变阻器串联降压,成功解决了上述问题。

1.4人机对话设计

系统的人机界面由液晶屏、指示灯和键盘组成。选择了基于T6963C的液晶模块YM12864。键盘以3×3阵列连接,系统采用图形用户界面,操作简单,显示实用美观。工作时,液晶屏可以实时显示采集到的电网电压、输出电压、输出电流以及各种报警信息。通过操作相应的键盘,可以切换显示页面,输出电压和输出电流可以自动、手动、远程控制和调节。当有报警信息产生时,相应的指示灯会闪烁警告,同时与单片机相连的扬声器会发出报警蜂鸣器,提醒操作者做出相应的处理。

2系统软件设计

430同时支持汇编语言和C语言编程,所以你可以在一个工程文件中同时使用两种语言和汇编语言,方便在调试时找到逻辑和指令之间的联系以及地址的正确位置。用C语言编程大大减少了工作量,编译后的程序可读性强,易于修改和维护。开发工具采用IARSystems公司的IAR Embedded Workbench,集成了编辑、编译、链接、下载、在线调试等多种功能。它易于使用,具有高效的C语言编译能力。

考虑到软件开发的效率和可维护性,系统软件设计遵循模块化编程思想,将系统功能划分为几个相对独立的功能模块。它们包括:液晶显示模块、AD转换模块、按键监控响应模块、报警监控响应模块、电压电流调节模块、数据处理模块和通信模块。每个模块都应该独立测试,最后组合在一起。整个系统的软件流程如图3所示。

按键监控模块是其中的重要组成部分,控制AD转换的启动,显示页面的切换,以及电压电流自动调节、手动调节、远程调节的启动和切换。报警监控模块在开关电源的保护中起着重要的作用。它实时监控开关电源是否出现故障。当输入电压过压,输入电压欠压,PFC失效时,应切断主电源。当输出电压过压、输出电压欠压、模块过热以及IPM保护失效时,DC-DC转换器应该关闭。

在集成各个模块时,要注意中断之间的冲突。在MSP430的中断优先级中,ADC12采样转换中断的优先级高于TIMERA中断,因此在响应TIMERA中断的过程中会执行ADC12采样转换中断,或者TIMERA中断响应延迟,影响TIMERA中断中执行的报警监控响应程序,无法实现开关电源故障的实时检测。在本系统中,按键用于控制ADC12采样转换中断的开始和停止,从而解决中断冲突。

3结论

以基于MSP430F149的电源监控管理系统的设计与实现为背景,讨论了MSP430的系统设计,提出并解决了设计中的问题。作者的创新点:利用MSP430系统结构简单、外围电路少、效率高的特点,设计并实现了一个电源监控管理系统,该系统简单直观、使用方便、全程汉字提示、监控能力强、运行稳定、安全可靠,大大降低了成本,取得了可观的经济效益,满足了实际需求。

二、C语言论文:

嵌入式系统用高门槛、难入门的方式挡住了无数学者。但是作为嵌入式系统的入门课程,如何正确的学习单片机,将关系到我们能否学好嵌入式系统。

众所周知,学习嵌入式系统要先玩ptotel,再做MCU。Protel简直就是PCB的纯英文软件。在学习ptotel之前,你必须有一定的电路基础和英语能力。我觉得大部分同学都有电路基础,但是英语是很多人头疼的问题。这对英语基础差的学生来说是一个打击。另外,如果你毅力不强,我觉得你是学不会的。毅力是学习任何事情的必备能力和品质,是遇到挫折不放弃的决心。

不管你是学protel还是单片机,首先要找一个能指导你的人。什么是指导?指导不是说他会一步一步的教你做,而是在关键时刻能为你指出一条路的人。

我认为学习嵌入式方法是最重要的。在学习protel和单片机之前,我们应该尽力了解如何学习它们。比如protel,很多理科生都是从纯理解的角度学习的。画一根线和一个元件问为什么要这样画,生成网络表问网络表的由来。其实很多东西只要会用就行了,知道再多理论上的东西不去用也是徒劳的。

所以如果你对学习protel有什么不明白的地方,去问你的导师。有很多东西是死的,半天一夜也换不来你的。这和软件设计不一样。软件设计在你的苦苦思索下可能会找到另一种更好的方法。

单片机,不得不承认中国没有一本好的单片机书。我在学习单片机的时候看了七本关于单片机的书,大部分都不尽如人意。我在这里冒昧说一句,中国人写书真的缺乏“读者第一”的原则。我觉得我看过的单片机书很多都是从他的角度写的,很少有人从读者的角度写。书中的章节注释极其不清晰,很多重要的地方都没有说明。说得好听点,作者似乎认为读者的水平和他一样高。而外国人的书,同样的书,同样的知识点,比国内同样的人的书厚两三倍。为什么?这是因为外国人的书是针对读者的。有注释、解释和总结。所以我想表达一个观点,我的同胞可能会向我扔鸡蛋,那就是无论我学什么,我都会优先选择国外翻译的书或者纯英文的书。得到一本好书对我们有很大的影响。我可以用一句话概括这部分:中国人的书适合教,外国人的书不仅适合教也适合自学。

中国人的单片机书籍往往先介绍单片机的内部结构、中断、定时器,再到I/O口。从一开始我们先学习单片机的内部结构,中断和定时器的内部结构和原理,然后在我们乱七八糟的时候给我们讲一个例子,如何操作实验板。如果自学的话,我觉得很多学生都学不会。为什么一定要把单片机的内部结构做得像解剖一样透彻,才能练出来?就算你把单片机彻底解剖了,你也不会用你手里的这块实验板。我觉得如果在学习单片机之前,没有学习汇编语言,直接学习C语言,即使学习了单片机之后,也不会知道单片机的内部结构和工作原理。学完汇编再学单片机会好很多,所以不要着急,有些事情不能操之过急。

所以我觉得学习单片机要在实践中学习,然后要了解它的结构和原理。如果你实在看不懂它的结构和原理,没关系,只要你知道怎么用!(没学过汇编的只能这么说)

我们可以先从I/O口开始学习,看一些例子,烧一些程序,然后看现象,再去尝试了解要用的单片机的内部结构。最后,基于对这种现象的认识,我们可以编出一个我们想要的程序和现象。这样学习就不会无聊,会有成就感。我想部分原因是,有些人可以把学习当成一种乐趣,而很多人却在叹息。

不同的实验板有不同的PCB图,所以I/O操作也不同。但是,操作原理是一样的。有些同学可能会抱怨教程里的实验板和自己手里的实验板不一样,没必要担心。I/O是调试中的一个重要步骤。比如一个语句被改动会出现什么样的现象,为什么会这样,这些都是调试中要掌握的。

中断学习法也类似。第一,如果你在实践中发现一些奇怪的事情,你应该检查相应的登记簿。实现了自己想要的现实之后,就可以慢慢解剖单片机的寄存器了,学习起来会更有意义,也更容易记忆。中断没什么复杂的,学几个中断函数,优先级之类的就行了。有一定C语言基础的同学可以在优先级字段接触C语言的运算符优先级。我相信用C语言基础定义一两个中断函数不是问题。

我所学的单片机的内容在我文档中的例题之中,例题数量不多,但这些都是直接点中单片机的知识点。随着学习的深入,我会把我所取得的成绩写成例子。

希望对你有帮助,祝你成功!

相关文章

发表新评论