单片机程序设计范例6篇

前言:中文期刊网精心挑选了单片机程序设计范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。

单片机程序设计

单片机程序设计范文1

摘要:通过对鼠标底层通信原理及协议的深入分析,探讨了鼠标在80c196单片机系统中的应用价值与可行性,并介绍了鼠标接口软件设计的原理及方法,给出了80c196单片机与microsoft鼠标的具体接口程序。

送信息时,第三个字节为一个完整的信息报告。但80c196每接收到一个字节,就产生一次中断,然后根据当前字节是否大于40h确定其性质。若是信息报告的首字节,则还要进一步通过有效性检验后保存;若不是首字节,则必须经过一系列检验后保存起来。收到三个字节后立即进行命令分析和执行。具体处理过程可参看源程序。用户模块通过特定接口模块(图2(b))获得鼠标当前位置和按钮状,并可通过进位标志c=0/1判断鼠标是否安装。

jlt goud

单片机程序设计范文2

摘要:讨论如何利用软件控制LM3033B-0BR3液晶显示模块时序,采用C51语言编程,驱动液晶模块实现并行传输方式的字符、汉字以及图形显示。具体阐述了LM3033B-0BR3液晶显示模块与单片机AT89S52的并行接口电路和软件编程方法。

关键词:LM3033B-0BR3液晶显示模块;ST7920控制器;AT89S52单片机;C51编程

中图分类号:TN40文献标识码:A

Parallel Interface Technique between Chinese Graphic 12864 Dot Matrix LCD Module and 51 Singlechip and C51 Programming

LI Zhi-guang1,2,LI Xiao-quan3,HUAI Jun-xia1,2

(1.Department of Applied Physics, Hebei University of Technology, Tianjin 300130, China;2.Shenzhen Topway Technology CO.,LTD., Shenzhen 518057, China; 3.Tianjin Light Industry Design Institute,TianJin 300193,China)

Abstract: How to control the time sequence of LM3033B-0BR3 LCD module by C51 programming was discussed in this paper. In this way the LCD module was driven by parallel communication and the characters and graphics could be displayed well. The parallel interface circuit and the soft design between LM3033B-0BR3 LCD module and AT89S52 were narrated in detail.

Keywords:LM3033B-OBR3 LCD module;ST7920 controller;AT89S52 single chip micyoco; C51 programming

引言

显示器是人类与应用设备沟通的重要界面,近年来,随着电子技术的飞速发展,液晶显示技术在实际生活中得到了广泛应用。液晶显示模块以其微功耗、体积小、显示内容丰富、模块化以及接口电路简单等诸多优点在科研、生产和产品设计等领域中发挥着越来越重要的作用 [1-2]。LM3033B系列液晶显示模块是深圳TOPWAY公司生产的中文显示模块中的一员。采用了台湾的ST7920控制芯片,并提供了中文字库,为中文显示开发方面带来了更多的方便。本文以LM3033B-0BR3为例介绍了12864点阵液晶显示模块的引脚、结构、功能,详述了与AT89S52单片机的硬件接口电路及有关软件编程方法。

1 LM3033B-0BR3特点及操作

1.1字符显示

每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:显示自定义字型其代码分别是0000H、0002H、0004H和0006H共4个,显示半宽ASCII码字符为02H~7FH,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如表1所示[3]。

1.2图形显示

绘图显示RAM提供64x32个位元组的记忆空间(由扩充指令设定绘图RAM位址),在更改绘图RAM时,由扩充指令设定GDRAM位址先设置垂直位址,再设置水平位址(连续写入两个位元组的资料来完成垂直与水平的坐标位址),再写入两个8位的资料到绘图RAM,而位址计数器(AC)会自动加一,整个写入绘图RAM的步骤如下:

a.关闭绘图显示功能(在写入绘图RAM期间,绘图显示必须关闭)[4];

b.先将垂直的位元组(Y)写入绘图RAM位址;

c.再将水平的位元组(X)写入绘图RAM位址;

d.将D15~D8写入到RAM中;

e.将D7~D0写入到RAM中。

图1 绘图RAM与屏幕显示区域的对应关系

1.3 LM3033B-0BR3的操作指令

LM3033B-0BR3提供两套控制命令:基本指令集和扩充指令集。基本指令集包括了对液晶LM3033B-0BR3的基本操作,如判断控制器忙标志、清除显示、设定显示的地址、写数据和读数据等。而扩充指令集则包括设置睡眠模式,设置图形显示、设置反白、设置滚动等功能,可以进一步满足低功耗的需求,使显示效果更丰富,为使用者提供更方便的环境。

单片机对LM3033B-0BR3的操作过程为:单片机先确认ST7920内部处于非"忙"状态。即读取BF位,当BF为0时,LM3033B-0BR3才可接收新的指令或数据。在操作时,LM3033B-0BR3在单片机的时钟信号的控制下,数据通过数据线传送给LM3033B-0BR3,当LM3033B-0BR3成功接收到数据后,转入内部时钟控制,封锁I/O口缓冲器,置"忙"标志。ST7920根据接收数据中的RW和RS位判断所接收到的是数据还是指令,并进行相应的处理。处理完成后,撤消I/O口缓冲器的封锁,"忙"标志清零。

2 单片机与LM3033B-0BR3的接口电路

一般液晶显示模块与单片机的接口分为直接访问方式和间接控制方式,间接控制方式还分为一位串行、4位并行以及8位并行。本文采用的AT89S52和液晶LM3033B-0BR3模块的接口电路如图2所示。由于LM3033B-0BR3采用并口通信,外接电路简单,与单片机连接采用间接连接的方法,即用I/O口直接与LCD数据线和控制线相连,其特点是简单、直观、操作方便。在此电路中,采用软件模拟液晶的时序,达到正确显示的目的。

图2 AT89S52和液晶LM3033B-0BR3模块的接口电路及LM3033B-0BR3引脚功能

3 液晶显示C51程序设计

对LM3033B-0BR3的软件编程采用Medwin 语言开发,主要包括两部分,一部分是给液晶写指令,另一部分是给液晶写数据。有了这2个基本的子程序,就可以构造出各种实用的显示子程序。由于液晶内部自带汉字模块,只需发送汉字对应的代码就可以实现汉字的显示,其代码可以在ST7920模块的资料中查找。对于图形和曲线显示的原理类似,只需要设置好相应的水平地址和垂直地址,并把相应的图形编码写入液晶模块,就可显示出所要显示的内容[5]。

写命令到LCD:

void WRCMD(uchar cmdcode)

{

chk_busy();

RS=0;

RW=0;

E=1;

lcd_bus=cmdcode;

E=0;

}

写数据到LCD:

void WRData(uchar Dispdata)

{

chk_busy();

RS=1;

RW=0;

E=1;

lcd_bus=Dispdata;

E=0;

}

初始化程序:

void Init()

{

RES=1;

RES=0;

delay(1);

RES=1;

delay(1);

WRCMD(0x30); //选择8位并行

WRCMD(0x30); //选择8位并行

WRCMD(0x0c); //开显示(无游标、不反白)

WRCMD(0x01); //清除显示

WRCMD(0x04); ///shift=0,AC加1

}

4 结论

在单片机与液晶的接口中,关键是要满足液晶的时序要求;在软件编程中,关键是要进行正确的初始化、操作及写入显示内容的代码。以上接口电路和相应的程序已经通过调试,并在实际中得到应用。由ST7920构成的LM3033B-0BR3液晶显示模块与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多。因此,LM3033B-0BR3液晶显示模块将得到广泛的应用。

参考文献

[1]杨应平,石城,蒋爱湘,李振华. 图形点阵液晶显示模块与51系列单片机的接口设计[J].现代显示, 2006,(5):41-45.

[2]李良成,张永顺,张. 基于MSP430单片机的液晶显示[J]. 现代显示,2007,(5):32-33.

[3]深圳市拓普微科技开发有限公司. LM3033B(8位并行接口)液晶显示模块应用参考[R]. 2006.1.

[4]洪家平. 中文图形显示控制芯片ST7920的原理与应用[J]. 国外电子元器件, 2005,(1):38-40.

单片机程序设计范文3

【关键词】单片机 理论与实验 课程设计 协同教学

【中图分类号】G64 【文献标识码】A 【文章编号】2095-3089(2016)31-0243-01

引言

单片机理论、实验和课程设计相关课程体系是各高等院校电子电气信息类工科专业基础专业课程设置的重要组成部分,为大学生深入学习掌握单片机的基本原理,设计方法,实践应用等打下基础。大多数理工科高校开设这些课程,对学生进行综合培养。对于单片机的理论与实践教学,既可以选择汇编语言,也可以选择C语言进行。在高校的实际教学工作中,大多数老师是选择汇编语言进行教学的,因为从汇编语言入手能更好的掌握单片机的硬件资源使用原理等,也有部分老师是直接使用C语言进行教学,认为汇编语言编程过于繁琐,而C语言编程能够在将来的实践工作中得到更好的应用。本文通过总结作者多年来在单片机相关课程教学积累的经验和教学研究心得,以51单片机理论、实验和课程设计教学为例,对如何在使用不同编程语言进行繁琐和复杂的教学中使学生更好地掌握单片机知识体系进行了探讨。

1.单片机理论教学

1.1 汇编语言理论教学

单片机是一个把中央处理器CPU、数据存储器RAM、程序存储器ROM、并行IO接口、串行IO接口、定时器计数器、时钟振荡电路等集成在一起的控制芯片,硬件资源简单且丰富,也易于扩展电路,所以单片机的学习侧重点首先在于掌握硬件资源使用方法。因为汇编语言实际上是CPU能够识别的机器码的助记符,从汇编语言入手开始教学,能够使学生更好地掌握单片机的硬件资源使用原理。使用汇编语言编程可以很方便地对单片机存储器地址直接进行存取操作,也能很方便地对存储器地址进行整体安排分配,前提是对单片机硬件资源非常熟悉,能够灵活调用。比如指令MOV、MOVC和MOVX可以分别访问单片机内部的数据存储器、程序存储器和外部扩展的数据存储器。汇编编程的缺点在于进行算术运算和逻辑判断跳转等比较繁琐。

1.2 C语言理论教学

国内的单片机C语言程序设计教程多数的编排都会在前面开始的章节介绍单片机硬件资源以及汇编语言指令系统,然后以更大篇幅讲述C语言程序设计语法和针对硬件资源的编程。针对单片机的C语言程序设计语法与计算机C语言高级程序设计编程语法基本一致,而针对硬件资源的指令又类似于汇编语言指令系统,所以应该可以说单片机C语言程序设计是计算机C语言高级程序设计和汇编语言指令结合体。要掌握好C语言编程依然要对于单片机的硬件资源理解透彻并能灵活调用。但是C语言针对硬件资源的指令与汇编语言指令比较起来却不如汇编那么直观,也不如汇编指令那样更加有助于单片机硬件体系结构的理解。

为了使初学者能够更好地理解单片机硬件体系结构,掌握硬件资源的调用,选择汇编语言进行教学显然是更加合适的。

2.单片机实验教学

单片机作为电子电气信息类专业的一门专业基础核心课程,比某些专业基础课程如电路原理、数字电子技术、模拟电子技术等更加注重编程实践的练习。单片机实验课程一般都是配套安排在单片机理论课程的下半学期,这样能够更加有助于理论的理解和掌握。作为理论课程的配套课程,单片机实验课程在教学上必须与理论课程保持一致性,选择汇编语言进行实验教学就是必然和最好的选择。

在实验设备的选择上,学院实验室早期购置过星研单片机Star ES51实验箱,后来又购置了大批光佑STC开发板,可以两者选其一。

早期的单片机实验都是集中在实验室进行,两人共用一台实验箱,通过连线和读写配套程序仿真运行来进行实验。这样的实验有一些明显的不足,比如配套程序调用了很多键盘显示的子程序,而这些子程序没有直接给出来,实验箱的很多硬件电路连接也没有给出详细原理图,所以造成了实验结束后多数学生也是对实验原理和编程似懂非懂的结果。

有了STC开发板后,每个学生可以分配一块开发板,各自进行单片机的编程仿真实验,还可以将开发板带回宿舍课后继续练习,实验可以更方便地进行。实验开发板的原理图清晰,例子程序丰富,通过读写配套例程可以较好的掌握单片机的基本原理。

显然使用汇编语言选择STC开发板进行单片机实验是实验教学的最好安排。实验课程的要求注重于单片机基础知识的掌握和硬件资源的调用。

3.单片机课程设计教学

单片机课程设计的安排是为了进一步提高学生的实践能力,所以课程设计的教学就不再局限于基本原理的掌握,而是必须达到更高程度的实践效果。汇编语言编程有利于对基础知识的理解和单片机硬件资源的掌握,却不利于复杂逻辑的处理。所以在学生已经基本掌握了基础理论的情况下,课程设计选择C语言编程,可以让学生更加方便的进行复杂程序的编写。

单片机课程设计实践项目内容的安排上,必须注重单片机内部和外部硬件资源的综合调用,以便完成具有实际意义的综合程序的编写。课程设计实践项目安排了可以综合调用单片机I/O口资源进行键盘扫描数码管显示以及中断处理的实现计算器功能的程序编写,和能够使用I2C总线进行通讯的AD/DA处理的程序编写。这两种程序的综合度和复杂度都远远大于单片机实验题目的要求。从实践结果来看,通过这种综合性复杂程序的编写练习,能够大大提高学生的开发设计实际项目的动手实践能力。

结束语

在我国大力实行人才战略强调人才培养的大环境下,本文作者所在高校也响应国家号召加强本科生培养,实施卓越工程教育,取得了积极可喜的成绩。本文积极探索和提高单片机理论实验课程设计协同教学的方法,取得了长足的进步和发展,也得到了学生的高度认同。以此方法培养出来的本科生在参加全国大学生电子设计竞赛的过程中也取得了骄人的成绩。本文作者经验和方法也可以为兄弟院校相关专业的教学提供参考和借鉴。

参考文献:

[1]李朝青.单片机原理及接口技术(第4版),北京航空航天大学出版社,2013.7

[2]郭天祥.新概念51单片机C语言教程――入门、提高、开发、拓展, 电子工业出版社,2009.1

[3]彭伟.单片机C语言程序设计实训100例――基于8051+Proteus仿真(第2版), 电子工业出版社,2012.10

单片机程序设计范文4

关键词:单片机;自动控制系统;开发

1 前言

基于单片机的特点,单片机在自动控制系统开发中得到了重要应用,不但提高了自动控制系统的性能,同时也满足了自动控制系统的开发需求。考虑到单片机的应用情况,在单片机开发过程中认真总结经验,做到掌握单片机的特点,重点做好单片机的开发。结合单片机开发实际,要想提高单片机开发的实效性,就要从明确功能目标、合理设置硬件电路和做好控制程序设计等方面内容。因此,在单片机开发过程中,应重点做好以上几方面工作,保证单片机开发取得实效。

2 单片机开发应明确功能目标

在单片机开发过程中,单片机作为自动控制系统的核心部件,决定着自动控制系统的功能。基于这一认识,在单片机开发过程中,明确功能目标是十分必要的。为此,应从以下几个方面入手:(1)单片机开发应确定开发方向。由于单片机的功能较多,以单片机为基础可以开发出多种自动控制系统。基于单片机的这一特点,在单片机开发过程中,只有确定开发方向,并在开发方向上做好单片机配置,才能保证单片机开发达到预期目标。因此,确定开发方向,是保证单片机开发取得实效的关键;(2)单片机开发应确定自动控制系统功能。在单片机开发过程中,除了要明确开发方向之外,在开发方向框架下确定自动控制系统的功能,是满足单片机开发需要的重要步骤,关系到单片机开发的整体质量,并决定了单片机开发能否实现预定功能。因此,确定自动控制系统功能,是单片机开发的关键;(3)单片机开发应把握开发原则。单片机作为自动控制系统的重要元件,不但决定了自动控制系统的功能,同时也是自动控制系统开发的关键。因此,在开发过程中应把握高效性、全面性和合理性的原则,保证单片机开发能够取得积极效果,进而满足单片机开发需要,使单片机开发取得积极效果。

3 单片机开发应合理设置硬件电路

在单片机开发过程中,硬件电路的设定关系到单片机控制功能的实现,对单片机开发具有较强的决定作用。基于单片机开发实际,合理设置硬件电路,是保证单片机开发取得实效的关键措施。为此,单片机开发应将设置硬件电路作为重要内容,具体应从以下几个方面入手:(1)单片机开发应根据功能需要合理设置硬件电路。在单片机开发过程中,单片机的硬件电路布置决定着单片机的整体功能。基于这一特点,只有根据功能需要合理设置硬件电路,并保证硬件电路的合理性,才能提高单片机开发的整体质量,进而满足单片机开发需要;(2)单片机开发在硬件电路设置中应优化电路板空间。由于单片机的电路板空间有限,要想实现更多的控制功能,就要在电路设置中对电路板空间进行优化,进而实现单片机的其他功能。因此,合理优化电路板空间,是保证单片机开发质量的关键,对单片机开发具有重要意义;(3)单片机开发应保证硬件连接质量。在单片机开发过程中,为了保证硬件电路质量满足实际需要,应对硬件连接的紧固程度进行确认,保证单片机的硬件连接质量达标,避免硬件脱落造成单片机的功能无法实现。因此,对硬件连接质量进行检查是十分必要的。

4 单片机开发应做好控制程序设计

在单片机开发过程中,控制程序设计是关系到单片机开发质量的关键。基于这一认识,做好控制设计是满足单片机开发的重要措施。以下为热敏电阻温度计的控制程序设计实例:

系统扩展了一个按键,接于IOA15,当按键按下时,就进行A/D转换初始化,并进行4次A/D转换,SPCE061A的A/D转换结果在高10位,每次将其移入低10位再计算4次平均值作为AD有效结果返回;为了提高准确度,变量TempAD、Temper都采用浮点数,计算完成用语音将温度值报出来。由于在放音时播放函数会改变一些参数,为了稳定起见,在每次A/D转换前都做一次初始化。

由于每个热敏电阻的特性并非一样、与热敏电阻串联的固定电阻的不准确等原因,每支温度计在整个测量范围内至少找5点进行校正,并适当的修改参数以达到最佳状态。

A/D转换程序:

.PUBLIC _ReadAD _ReadAD: .proc R2=4 //共进行4次转换

R3=0

TestLoop:

R1=[P_ADC_MUX_Data] //进行一次AD转换

R1=0x8000 TempConverLoop:

TEST R1,[P_ADC_MUX_Ctrl] JZ TempConverLoop //转换完成?

R1=[P_ADC_MUX_Data] //读取AD转换值

R1=R1 LSR 4 //将AD值移到低10位

R1=R1 LSR 2 R3+=R1 //四次A/D值累加

R2-=1

JNZ TestLoop

R3=R3 LSR 2 //结果除以4,求4次A/D值的平均值

R1=R3 //R1-------A/D返回值

RETF

ENDP

从上述程序来看,单片机在控制程序设计过程中,应根据自动控制系统的功能进行设计,并保证程序的准确性,使控制程序能够全面反映自动控制系统功能。

5 结论

通过本文的分析可知,结合单片机开发实际,要想提高单片机开发的实效性,就要从明确功能目标、合理设置硬件电路和做好控制程序设计等方面内容。因此,在单片机开发过程中,应重点做好以上几方面工作,保证单片机开发取得实效。

参考文献:

[1]肖洪兵.跟我学用单片机[M].北京:北京航空航天大学出版社,2002(08).

[2]何立民.单片机高级教程(第1版)[S].北京:北京航空航天大学出版社,2001.

[3]赵晓安.MCS-51单片机原理及应用[S].天津:天津大学出版社,2001(03).

[4]李广第.单片机基础(第1版)[S].北京:北京航空航天大学出版社,1999.

单片机程序设计范文5

关键词: 单片机应用技术 教学 改革“五化”

近年来,我在从事计算机专业《单片机应用技术》课程的教学工作时,愈来愈感受到单片机应用技术的教科书与现状之间的差距逐渐加大。为此我特提出五个方面的问题,以鉴同行。

一、教学内容应该“硬件化”

这是个观念问题。学校中的大多数教师把《单片机原理及应用》这门课当做一门“汇编语言”来教,往往陷在指令系统这一章中拔不出来,既浪费了大量课时,又严重偏离了方向。

实践证明,单片机应用的工夫不在对单片机本身的掌握上,而在对单片机控制对象的了解上。搞单片机开发的成功者,往往不是计算机专业毕业的人,而是某行业中搞自动化控制的人。即熟悉电路硬件的比熟悉程序软件的干得更有出息。

我们一定要把这门课的重点放在“应用”两字上。对指令系统,我认为花4个课时就足够了,更应该完全删除教材中关于单片机程序设计结构的专门讨论章节。要知道游泳是在水中学会的,根本没有必要在岸上花大量的课时去训练划水的基本动作。一句话,在这门课的教学过程一定要突出硬件的地位,树立软件为硬件服务的观念。

二、存储器扩展已经“单片化”

在计算机技术发展的初始阶段,存储器曾是个昂贵的资源,而今的存储器制造技术已今非昔比。单片达兆位级的EPROM、FlashROM已比比皆是,RAM的单片容量则更不用说了。因此像8051单片机这类最大只支持64K存储空间的机种,存储器一片就能到位。这个技术现状反过来指导我们,在教学时可删除现有教科书中大篇幅的多片存储器扩展技术(这是一个突出的知识陈旧化问题)。

教过这门课的老师都知道,多片存储扩展时,如果不用全地址译码法,则会造成同一物理地址空间映射多个逻辑地址空间甚至出现存储器地址之间的交叠。在教学中这部分内容是非常难于让学生理解的,在工程中也会给程序设计带来不便,还可能留下隐患。而存储器“单片化”结构,可彻底避免这一现象。所以,扔掉“单片机存储器扩展”这一单元,不仅原来的难题不再是难题,而且可节约大量课时。

三、程序设计可以“模块化”

历来单片机以“短小精干”著称,因此开发应用系统十分珍惜资源(包括硬件与软件),十分强调简短。为此开发人员往往为“简之再简”而绞尽脑汁,有时不得不用一些“技巧”,使得设计出来的程序可读性差,移植性差。所以在这个领域以前是不提“结构化”设计的。

现在由于硬件技术的发展,有些情况正在变化。从应用开发的环境来看,应用领域越来越广泛、技术更新越来越快、开发周期必须越来越短。因此,开发人员不可能在每一产品的程序设计上精雕细琢地花费大量时间,更何况这个领域主要是非计算机专业的人员在工作。面对这种形势,要求单片机程序设计也要能结构化、模块化、乃至对象化,以便实现程序的交流和重用。

从单片机技术本身的发展来看,资源的不断扩大,已经允许我们在单片机这块“弹丸之地”上做一些像桌面系统上的事情。

程序模块化就是子程序化,子程序化就意味着堆栈的开销加大。以往,8051单片机的内存,包括堆栈在内用户真正可用的只有80个字节。现在我们可以用像8052这样的产品,用户实际可用的内存一下又多了128个字节。像台湾华邦公司W77E58等51系列型号,片内还带1024字节的RAM供用户使用。

程序模块化当然还会增多“履行公务”性的代码,即“过门关节”变多。以往的观点,这会使程序的运行时间加长,与单片机宗旨相违背。现在我们可以选用主频33MH。甚至60MH的单片机,还怕来不及吗?另外一个因素是存贮芯片的价格平民化,使我们不再怕程序太“臃肿”。

所有这些为我们在单片机应用领域里引进“结构化语言”的思想提供了有利条件。模块化在教学上的效益就是:利用现有的成熟模块,学生可以立即体验单片机应用的成果。体验完后,教师提出一些小要求,学生作些小调整,活动来些小变化……单片机教学不就成了“寓教于乐”的形式了吗?

四、课堂教学必须“实时化”

单片机技术近年的飞速发展,特别是器件的层出不穷,要求教师时刻把准“脉搏”,及时地根据技术现状对教学内容作出调整与取舍。

例如,在给学生介绍8051系列单片机的ROM形式时,必须及时地介绍“一次写入式”OPT型的PIC系列单片机及带“闪烁存储器”的AT89系列单片机。因为它们的出现,极大地改变了单片机的应用状况。

同理在给学生讲8051的串行口时,必须及时地介绍点对点通信技术及多机通信技术,因为提供单片机与其他计算机智能仪表或设备的数据交换。是近来的流行趋势在给学生介绍单片机的人机界面时一定要介绍点阵式液晶显示技术,因为它的出现使单片机亦能做到“图文并茂”;在给学生讲解I/O扩展时,一定要介绍IA2C总线,因为这是一种仅两条线的片间总线,它的应用对硬件设计模式将产生重大影响。

再有,在给学生讲A/D、D/A转换技术时,一定要介绍V/F、F/V转换技术,因为频率形式的量,是介于模拟与数字之间的量,在自动控制领域中有极广泛的应用。

五、实验调试应该“符号化”

单片机程序设计范文6

【关键词】单片机;仿真调试

在应用单片机开发设计电子产品的时候,绝大多数的设计人员都要使用仿真器。设计者在编制调试程序的时候,可以通过仿真器跟踪单片机内部程序的运行流程,检查程序的每一步执行的情况都否满足设计者的初衷。同时,设计者可以直观全面地得到单片机内部程序运行中的各项参数和数据,进而判断所设计软件程序的正确性和有效性,大大提高了程序设计的效率。可以说,仿真器是设计人员调试程序最有力的助手。

仿真器固然有很多的优点,笔者这里却另辟蹊径,在程序设计调试过程中抛开仿真器,单独谈一谈单片机的“在线仿真调试”方案,仅供单片机爱好者参考。

所谓的单片机的“在线仿真调试”方案,实际上就是我们把测试程序烧入单片机芯片中,让单片机脱离仿真器独立运行。在运行过程中,设计者可以通过合理有效的手段获取单片机实际运行过程中器件的一些状态和必要数据,检查单片机运行的程序是否符合设计要求,即所谓的“在线仿真调试”。

这种“在线仿真调试”的手段虽然得到的数据信息有限,但是也能得到一些必要的和关键的信息,对于熟练的设计人员也是可行的。获取信息的手段包括检查单片机外部连接发光二极管的状态、数码管或者液晶的显示内容、串行通讯的必要数据等。设计者可以根据所得到的状态或数据来验证程序运行的正确性。如果程序设计有疏漏,设计者需要重新调整编辑软件程序,烧入单片机后再次测试,直到圆满完成开发任务。

要想做到“在线仿真调试”,必须满足如下两个条件:(1)单片机内部的程序存储器具有FLASH功能,可以多次地把程序烧入单片机;(2)设计人员必须对所使用单片机的内部资源及周边功能都比较熟悉,能够迅速地编制出必要的测试程序。

从加快设计周期上讲,有些新开发的产品与原有产品硬件相近,软件功能差别也不大,开发任务时间又偏紧,设计人员也可以采用“在线仿真调试”的方式,即不必重画仿真目标板,直接设计生产用的线路板,只是通过改动原有的软件程序来适应新的产品要求。

从安全性上讲,有些情况下直接连接仿真器运行很危险,如目标板上有强电接入,使得强电与仿真器之间没有电气隔离,容易损坏仿真器的硬件,即使把强电用隔离变压器处理也不能保证绝对安全;有些场合程序运行时不允许中断,例如,在动态测试传动设备时,如果程序在断点停止运行后会损坏相关设备,进而造成巨大的损失。这样就必须用“在线仿真调试”来达到目的。

还有些无奈的情况,有些产品具有停电低功耗运行功能,这种低功耗工作方式仿真器无法实现仿真运行,只有脱机运行才能完成低功耗运行功能的测试工作;有些单片机厂家的单片机内部资源丰富,但是相应的仿真器很昂贵,动辄数万元人民币,租用和购买都不合适。如果研发项目需要几个人共同开发,那么在研发初期无法实现人手一台仿真器,就只有使用“在线仿真调试”的方式来节省研发设备的资金投入,并且可以不受场地限制,只需一台计算机和一个目标板,再外加一个串行TTL/RS232接口通讯模块就可以了。

“在线仿真调试”的方法给我们提供数据信息的方式有两种:一种是应用于数据量较少的系统,直接借助目标板上的显示器件(数码管或者液晶)就可以获取一些必要的信息,更有甚者,通过发光二极管也可以表达很多的状态;另一种是应用于数据量较大的系统,设计者在程序中先把数据组织好,然后借助于单片机上的异步通讯接口,通过串行TTL/RS232接口通讯模块把数据传送给计算机,在计算机上分析所得到的数据。这就像使用仿真器调试程序一样,通讯时就相当于使用仿真器运行程序至所设断点处,所得数据就相当于仿真器所得到的相应寄存器及变量的数值,唯一的区别就是这里介绍的断点是软断点,程序在执行断点后还可以继续运行。当然,设计者可以连续观察多组数据,更好地分析程序运行的流程。

我们在利用通讯接口“在线仿真调试”的时候,应把数据组织得有一定的规律,这样就可以迅速直观地检查运行结果,进而调整相应的程序段,为下一次的“在线仿真调试”做准备。这样的“在线仿真调试”虽然每次都得把程序写进单片机中,过程略显繁琐,但是所设置的软断点并不影响程序的连续执行,我们可以把多组数据放在一起比对查看,最大程度发挥“在线仿真调试”的优势。

“在线仿真调试”,实质上就是设计者编制并运行测试程序,单片机在程序的运行过程中有效地给设计者反馈出必要的数据信息,然后通过有效地调整单片机的程序来达到最理想的结果。这就要求设计者的产品设计经验丰富,处理问题时头脑灵活,对程序运行过程中发生的异常情况心中有数,并在最短的时间调整程序来完成进一步的“在线仿真调试”。

以上仅是一家之言,仅供参考。总之设计人员在进行程序设计的时候,一定要灵活地选取最安全最方便最有效的方案,不必过于教条,最主要的是要不断地积累经验,在满足产品设计要求的同时提升自己的价值。

【参考文献】

[1]单片机原理系统设计与开发应用.中国科学技术大学出版社,1995.

[2]何立民.单片机高级教程.北京航空航天出版社,2000.