单片机编程心得

发布者:MysticalSoul最新更新时间:2013-05-11 来源: 21IC关键字:单片机  编程心得  数据类型 手机看文章 扫描二维码
随时随地手机看文章

1. 无论什么时候我们都要以实际应用的角度去考虑程序的编写。

2. 无论什么时候都不要让CPU白白浪费等待,尤其是延时(超过1MS)这样的地方。

3.设计相应驱动电路时候,应该仔细阅读芯片的数据手册,了解每个引脚的驱动能力,以及整个芯片的驱动能力。

4.最重要的是,如何去释放CPU(如果是led每500ms闪烁一次,那么可以设置1ms为基准,定时器定时1ms后,进入相应操作使计数加1,判断达到500时,进入led(),这些函数执行的时间是相当短的,如果主程序中还有其他函数,则CPU会顺次往下执行,对于其它函数(有的话)也要采取相同的措施,保证其不堵塞CPU,若全部基于这种方法执行,我们的小系统依旧可以保证多个任务(多个函数)同时进行,系统的实时性得到了一定的保证。),这是写出合格程序的基础。

5.数码管显示,动态显示的亮度比静态显示要差一点,所以在限流电阻时应略小于静态显示电路中,动态扫描显示刷新频率最好大于50HZ,即每显示一轮的时间不超过20ms,每个数码管显示的时间不能太长也不能太短,时间太长会影响刷新率,导致总体显示呈现闪烁的现象,时间太短发光二级管的电流导通时间也就短,会影响总体的显示亮度,一般控制在1ms左右最佳。

6.模块化编程,初学单片机的时候(开始是C语言),是接触一些芯片实现独立的功能,如DS1302,DS18B20等,程序也不会很大,所以所有的程序都放在一个文件里面。随着学习的逐步深入,程序也愈来愈大,这给调试带来了一定的困难,后来了解了模块化编程这个概念,运用之后大大地改善了程序的可读性和可移植性。下面简单的介绍

C语言源文件*.c 稍微比较大的设计都会涉及到众多模块,我们可以被各自独立的模块封装到不同的*.c源文件中,该文件中定义模块函数,申明部分一般不放入

C语言头文件*.h 把各个模块的的申明文件(说模块的接口比较合适),放在相应的*.h头文件中,相应的模块对应相应的.h头文件.形如

#ifndef __DS1302_H__

#define __DS1302_H__

/*模块ds1302.c文件中函数等的申明文件*/

#endif

//上面几个条件编译和宏定义是为了防止重复包含

这样我们就把各个模块的接口函数都引出到各自的头文件中,然后在主程序中调用这些模块的*.h头文件即可。这点和C++中的类很像。

在数据类型定义的时候,有时候用typedef会取得很好的效果。

说到模块化编程,以前曾看过不少大虾的例子,他们的源文件和输出下载文件是放在项目文件夹下地不同文件夹中,如源文件放在src文件夹中,输出*.hex放在output文件夹中,这样整个项目就更显得清晰明了。[page]

7.多任务程序,这个概念在前面也有提到,就是充分地利用CPU来实现多任务的前后台操作,相当于自己用程序构造一个基于前后台的多任务操作系统,换句话说就是通过定时器中断合理地分配CPU资源来响应不同的任务。多个任务需要CPU关照的频度不一样,我们选择最快的那个频度来作为定时器的节拍(通常为最小公倍数,这样方便定时器分配),然后通过定时器分频,即满足各个任务的响应节拍。比如任务A频度为50HZ,任务B为40HZ,这样我们就可以去定时器中断节拍为200HZ,每个任务设定一个节拍控制计数器C,当C计数4次时,任务切换到A,计数到5次切换B……

void Timer0(void) interrupt 1

{

//赋初值,定义变量

for(i=0; i

{

if(task_delay[i]) task_delay[i]--;

}

void (*run_task[MAX_TASK])(); //定义一个函数指针数组

void main()

{

//***其余部分省略

while(1)

{

if(task_delay[0] == 0) {(*run_task[0])();task_delay[0] = C;/*任务0计数初值*/}

//类似任务调度部分省略

}

}

同时我们也很清楚的知道,有些任务需要很长的时间,如DS18B20温度传感器完成一次温度转换需要很长的时间(相对于单片机的us级来说),这样我们就可以将器件驱动任务在划分为:初始段,启动段,获取结果段,等子任务段,可分别设定标志位(switch+case语句),在需要等待较长时间的地方,允许CPU去执行其余任务,另外可在主程序任务轮训中添加break来实现任务的优先级划分。

关键字:单片机  编程心得  数据类型 引用地址:单片机编程心得

上一篇:单片机的历史与发展现状
下一篇:sonix单片机做的消毒柜

推荐阅读最新更新时间:2024-03-16 13:24

单片机c语言中的左移右移
单片机c语言中的左移右移 左移 变量1 变量2 将变量1的二进制位值向左移动由变量2所指定的位数。 例如: a = 0x8f; // 10001111 a 2; // 左端移出的值丢弃,右端补0 结果:a = 0x3c (00111100) 在keil c51中,内部函数库INTRINS.H中_crol_(m,n)表示将m循环左移n位, 与m n的效果不同。前者的低位移进高位移出的位,后者低位填入0 右移 变量1 变量2 将变量1的二进制位值向右移动由变量2所指定的位数。 例1: unsigned char a; a = 0x8f; // 10001111 a 2; // 右端移出的值丢弃,左端补0 结果:a = 0
[单片机]
基于AT89C51CC01单片机的CAN—LIN网关设计
引言 现场总线技术已经广泛应用于工业控制中,尤其是CAN(Controler Area Nerwork)总线由于具有可靠性高、成本低、容易实现等优点,在现场总线实际工程应用中占有了较大份额。伴随着总线技术发展,LIN(Local Interconnect Network)总线作为一种低成本串行通信网络,其目标是为现有现场总线控制网络提供辅助功能,特别是汽车控制网络中总线应用,因此必然存在一个LIN总线和其它总线通信接口实现,本文以CAN总线为例,提出了一种基于AT89C51CC03单片机CAN-LIN网关设计方案。 LIN是一种低成本串行通讯网络用于实现汽车中分布式电子系统控制,LIN目标是为现有汽车网络(例如CAN
[单片机]
基于AT89C51CC01<font color='red'>单片机</font>的CAN—LIN网关设计
单片机专用系统的系统程序构成
专用系统是指利用微处理器构成的具有特定功能的系统,它是针对某个特定的功能专门设计的。近年来随着计算机技术的发展,使家用电器到形形色色的工控系统、通信系统的智能化成为可能。这些系统采用微处理器或微控制器构成智能系统,即在一个电子系统中内含微处理器或微控制器进行系统的信息处理和控制。由于在系统中,微处理器仅作为一个部件,因而将其称为嵌入式处理器。   专用系统的设计包括了系统的硬件设计和软件设计。   专用系统的硬件设计是根据专用系统的功能要求选择硬件设备,设计硬件设备的接口电路,并分配其地址。除此之外,还需根据系统对存储器的需要选择程序存储器和数据存储器的容量并分配地址。   专用系统的软件即系统程序包含了程序区、数据区和堆栈区等部分
[单片机]
51单片机之矩阵按键
1.说在前面 1.今天从图书馆借到了一本51单片机的基础教程,从其中看到了一些关于单片机的基础知识 1-1:单片机是在一块硅片上集成微处理器,储存器以及各种输入输出接口,所以被称为单片微型计算机,简称单片机 1-2:通俗的来说,单片机就是一块集成芯片,但是有一些特殊的功能,通过在不同时间控制芯片输出高低电平从而输出不同的电平,控制和引脚相连的外围电路的电气情况 对于我的单片机板子ST89c52 40I STC:前缀 8:8051内核 9:内部是FlashE^2prom存储器 c:cmos存储器 5:无特殊含意 2:内存为2*4KB 40I:40表示单片机的最高晶振为40mhz,I:表示为工业用(c:商业 a:汽车用品
[单片机]
51<font color='red'>单片机</font>之矩阵按键
单片机实现温度远程显示
    摘要: 介绍用AT89S8252单片机的串行接口与智能温度巡回检测仪(XJ-08S)通过RS485总线相互通信实现热水温度远程显示的一种低成本解决方案。内容涉及RS485总线通信、单片机驱动数码管显示、数据转换以及键盘处理软硬件设计等内容。     关键词: 单片机 RS485总线 数码管显示 数据转换 键盘处理 引 言   目前检测温度一般采用热电偶或热敏电阻作为传感器。这种传感器至仪表之间一般都要用专用的温度补偿导线;而温度补偿导线价格很贵,并且线路太长也会影响测量精度。在实际应用中往往需要对较远处(1 km左右)的温度信号进行监视。现有的解决方案有很多,例如:① 在现场用
[应用]
单片机51多任务的操作系统原理
  想了很久,要不要写这篇文章?最后觉得对操作系统感兴趣的人还是很多,写吧。我不一定能造出玉,但我可以抛出砖。   包括我在内的很多人都对51使用操作系统呈悲观态度,因为51的片上资源太少。但对于很多要求不高的系统来说,使用操作系统可以使代码变得更直观,易于维护,所以在51上仍有操作系统的生存机会。   流行的uCos,Tiny51等,其实都不适合在2051这样的片子上用,占资源较多,唯有自已动手,以不变应万变,才能让51也有操作系统可用。这篇贴子的目的,是教会大家如何现场写一个OS,而不是给大家提供一个OS版本。提供的所有代码,也都是示例代码,所以不要因为它没什么功能就说LAJI之类的话。如果把功能写全了,一来估计你也不
[单片机]
单片机+CPLD结构体系在电子设计中的应用
  自20世纪80年代单片机引入我国以来,学习和应用单片机的热潮始终不减,特别是MCS51系列。这是由单片机的特点决定的。实际上,从单片机/CPLD应用通用数字集成电路系统,到广泛应用单片机,是我国电子设计在智能化应用水平上质的飞跃。据统计分析,单片机的销量单片机/CPLD到目前为止依然逐年递增,而且在很长一段的时间内,单片机依然会是电子设计的主角(虽然这一地址已经受到了CPLD的挑战)。 1 纯单片机系统优缺点 ①大量单片机/CPLD的外围芯片和接口电路使得单片机应用系统的设计变得简单而且快捷,新型单片机的上市和高级语言的支持(如C51)进一步延长了单片机的寿命。 ②长期稳定的发展和使单片机性价比非
[单片机]
<font color='red'>单片机</font>+CPLD结构体系在电子设计中的应用
8位MCU TM56F1552在电陶炉的应用方案,集成低噪声OPA
随着人们生活水平的不断提高,消费者对厨房电器的要求越来越高,对电器的环保节能特性,安全性,灵活性等都有很高的需求,电陶炉由于其加热效率高且可以持续加热,无辐射,适用性高等特点很好的满足了目前消费者的需要。 为了满足市场上对于电陶炉产品的需求,本文介绍一种成熟的电陶炉产品整体解决方案,方案由AC-DC电源芯片与8位MCU主控两部分组成,MCU内置触摸模块,LED/LCD显示驱动模块,多路PWM输出,带基准电压源的ADC以及EEPROM存储器等模块。其中主控TM56F1552芯片内集成了低噪声OPA,CMP,LDO,CTK,可以减少产品零件数目及降低成本。 方案中TM56F1552是一款8位内置OPA,外围电路简单,可以节省B
[嵌入式]
8位<font color='red'>MCU</font> TM56F1552在电陶炉的应用方案,集成低噪声OPA
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved