单片机编程范文
时间:2023-04-08 05:33:29
导语:如何才能写好一篇单片机编程,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。
篇1
中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)03-10765-01
1 引言
随着单片机技术日新月益的发展,学习它的人可是越来越多了。对于初学者来说,好多人一开始总会被单片机的各种各样的编程语言搞糊涂了。因为单片机目前的编程语言常见的有四种,即汇编语言、C语言、PL/M和BASIC。究竟要学哪一种编程语言好呢?我们先来做个比较吧。
2 单片机的BASIC编程语言
BASIC是一种高级语言,它的英文含义是“初学者通用符号指令代码”,是在1965年5月,由美国科学家托马斯・库尔兹研制出来的。10多年后,微软公司把它移植到微型机上。几十多年来,BASIC语言一直被认为是初学编程的语言。它已经由QBASIC发展到VB#版本,具备了很多结构化思想和编程方式,如函数、模块、局部变量、全局变量、数据传递等。早期的BASIC语言由于生成的代码不是最终目标机器的代码,而是经过一个RUNTIME程序解释后运行的,所以执行效率低。而单片机的BASIC编译器是直接将程序代码编译成相应芯片的机器码,不需要在单片机的内存中驻留RUNTIME程序,执行效率与其他编译器编译出来的一样。
我们现在以MCS-Electronics公司开发出来的BASCOM-8051开发环境为例,简要介绍一下以BASIC语言为基础的单片机编程系统。
它和一般BASIC语言一样具有如:For、To、Step、If、Else、End 、Select Case等等命令,其用法及功能是没有什么区别的,因此初学者比较容易入门。
另外,它还有针对单片机硬件所设计的命令如:LCD命令可以用一条命令来实现LCD的显示操作。
Cls '清LCD屏
Lcd"Hello world." '向LCD输入字符串
类似于这样的命令主要是提供了直接对单片机及其外部硬件的操作,特别是提供了对单片机端口的直接操作,如:P1、P2、P2.1、P0.3等等,简化了整个开发过程,是开发人员重点学习的部分。
例如有硬件电路如图(1)所示,编程使发光二极管间隔两秒钟闪烁一次的程序如下:
While I = 2
P1.0 = Not P1.0
Wait I
Wend
End
3 单片机的PL/M编程语言
PL/M 语言是Intel公司从8080微处理器开始为其系列产品开发的编程语言,其特点是:
3.1 简单易学
PL/M-51语言只有两类语句:一类是说明语句,用于说明变量和过程;另一类是可执行语句,如赋值语句、条件语句和循环语句等。这些语句的功能和BASIC语言中相应的语句相似,如:
P1=02H;/*赋值语句*/
IF M>2 THEN N=P1;/*条件语句*/
DO I=0 TO 10;/*循环语句 */
3.2 可读性好
PL/M-51是一种结构化语言,其程序是块式结构,可采用缩进式方法书写源程序,使程序层次清楚,便于理解和阅读。一个完整的程序可由多个模块组成,而每个模块又是由多个程序块构成。
3.3 可靠性高
PL/M-51编译软件检查用户程序对单片机的各种资源使用情况,对冲突使用情况或不合理使用情况能提出警告,并能自动为用户程序合理分配内存。
3.4 隔离性好
PL/M-51中,既可有全局的静态变量,也可有局部的动态变量,对于全局性的静态变量,其性质和BASIC中的变量一样,该变量在整个程序中均有效。对于局部的动态变量,它只有在其所说明的程序块中或过程中有效,在该程序块或过程之外则无效。局部动态变量的特点是,当由多个人共同编制一个程序中的不同模块时,而不必担心是否使用了相同的标识符而发生冲突。模块化的程序设计增加了程序设计的灵活性的方便性。
3.5 兼容性好
PL/M-51可同汇编语言或其他语言的目标模块连接起来,生成可执行代码如果用户必须使用汇编语言编制一段程序,或是想利用已调好的汇编语言程序块,那么该段汇编可以很方便地连接到PL/M-51程序目标块中。
3.6 具有良好的算法库和库管理能力
PL/M-51语言具有INTEL公司所提供的算法库和库管理功能用户能利用现成的算法库完成加、减、乘、除等运算,并能建立自己的特定算法库,使得编程一劳永逸,提高软件的开发效率。
由上面几点可见,PL/M语言是类似于Pascal一种语言,是一种结构化语言。PL/M编译器好像汇编器一样可产生紧凑代码,可以说它是一种"高级汇编语言",可详细控制着代码的生成。但对51系列的单片机来说,PL/M不支持复杂的
算术运算、浮点变量而无丰富的库函数支持。学习PL/M无异于学习一种新语言。
4 单片机的汇编语言
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少,程序执行效率高,由于它一条指令就对应一条机器码,每一步的执行动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。但是不同的类型的单片机,其汇编语言可能有点差异,所以不易移植。比如你在PIC12CE518单片机上用汇编语言编了一个程序,到了STC89C51单片机上那可就运行不了,因为他们的指令系统是有区别的。
单片机的汇编语言非常像其他汇编语言。指令系统比第一代微处理器要强一些。但单片机拥有不同存储区域使得其编程变得复杂一些,可是作为一位电子工程师,懂得汇编语言就可帮助你了解影响任何语言效率的特殊规定。例如,懂得汇编语言指令就可以使用在片内RAM作变量的优势,因为片外变量需要几条指令才能设置累加器和数据指针进行存取。同样的,当要求使用浮点数和启用函数时也只有具备汇编编程经验才能避免生成庞大的、效率低的程序,对于这方面的编程,没有汇编语言是做不到的。
5 单片机的C语言
单片机的C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言具有功能丰富的库函数,运算速度快,编译效率高,有良好的可移植性,而且可以实现直接对系统硬件的控制。此外,C语言程序具有完整的程序模块结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。与汇编相比,有如下优点:
(1)对单片机的指令系统不要求了解,仅要求对51的存储器结构有初步了解,至于寄存器分配、不同存储器的寻址及数据类型等细节均由编译器管理。
(2)程序有规范的结构,可分为不同的函数。这种方式可使程序结构化,将可变的选择与特殊操作组合在一起,改善了程序的可读性。
(3)编程及程序调试时间显著缩短,从而提高效率。 提供的库包含许多标准子程序,具有较强的数据处理能将已编好程序可容易的植入新程序,因为它具有方便的模块化编程技术。
单片机C语言作为一种非常方便的语言而得到广泛的支持,C语言程序本身并不依赖于机器硬件系统,基本上不做修改就可根据单片机的不同较快地移植过来。
综上所述,单片机的四种编程语言各有各的优缺点,作为单片机初学者,笔者认为还是应该先学习汇编语言,不一定要学得很精很熟悉,但要有一定的了解。因为汇编语言程序除了具有简洁明快、跳跃性强、占ROM资源少等优点以外,还因它和单片机底层硬件紧密联系,可以让初学者更加了解单片机硬件系统各种资源,熟悉各个功能模块的作用,从而为编出更高效率的程序打好扎实的基础。
用单片机汇编语言编写的程序代码效率高,但学习起来相对难度较大,而且对于一个大型项目,如果完全采用汇编语言来编程,就显得很繁琐,尤其是遇到算法方面的问题时,汇编语言根本就应付不了。况且现在单片机的主频在不断的提高,在高频率时钟的作用下,我们完全不需要那么高效率的代码;另外,单片机的ROM和RAM空间也在不断的增加,足够装得下你用C语言写的任何程序代码,单片机C语言相关的资料又多又好找,可移植性非常好,比如只需要改变一个IO口写个温度传感器的程序在任何一个单片机上都能使用。由此可见用单片机C语言进行程序设计,已成为单片机软件开发的一个主流,作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。
当然,有时候用单片机C语言也不能够实现所有要编写程序的功能,比如当想编写一个精确控制的定时程序时,用起汇编语言来还是比较方便的。因此想成为一个优秀的单片机编程技术员,最好就是能懂得单片机C语言和汇编语言的混合编程。
参考文献:
[1]蓝点方舟科技网. . 8051系列单片机BASIC语言开发环境简介[Z].
[2]/. PL/M-51高级语言特点[Z].
[3]王杰洁,耿英杰. 单片机C语言和汇编语言的简单比较[Z].
篇2
关键词:51单片机;多任务;动态显示;键盘显示控制
中图分类号:TP313文献标识码:Adoi: 10.3969/j.issn.1003-6970.2011.03.006
51 Single-Chip Computer Multitask Programming Process and it's Application
XU Hua1,2
(1.College of Software and Engineering,Chongqing University,Chongqing 400044, China;
2.No.59 Institute of China Ordnance Industry,Chongqing 400039, China)
【Abstract】This paper explain One Multitask Programming Process on 51 Single-Chip Computer System. Unlike the Principle of Real-time Operating System , This Process is neither based on the time sharing Operation nor using interrupt for switchover task. One simple system consisted of the 4 digits LED digit display, the 12 keys scan keyboard and the series port used for communication with other system is taken for example, to illustrate this process is used in programming, Single Chip Computer system has characteristic of simpler hardware, higher efficiency of operation and better real-time. This process is based on assemble language, but it is easy for C51 language according to the same principle and thinking.
【Key words】51 Single-chip Computer;Multitask;Dynamic scan Display;Keyboard and display control
0引言
51单片机在微型智能控制系统中应用广泛。随着人们对控制系统要求的不断提高,针对51单片机不具备实时多任务支持功能,在控制系统的进一步发展很受限制的情况,人们做了很多关于51单片机多任务实时编程的研究和实验。罗江等在四川省教育厅资助的基金项目《基于多任务机制的51单片机在微型智能控制系统中的应用研究》中,借鉴多任务操作系统的设计特点,提出了利用时间片分配机制,实现多任务分时轮流执行,和利用中断强行切换任务的多任务编程方法[1];在的单片机技术交流中,阮元提出了依据分时操作系统思想实现单片机多任务编程的方法[2];厦门大学的王辉堂等在一安防系统的设计中,通过对嵌入式实时操作系统RTOS的分析,认为其核心是利用中断切换任务,提出了用C51编程实现的多任务编程方案[3];美国Keil公司开发的MCS51系列单片机的实时多任务操作系统RTX51,占用定时器T0中断产生时间片来切换任务[4-5];此外,还有时间片轮转算法[6]、时分多线程[7]等多种单片机多任务设计方法在实际系统中应用。
综上所述,在目前51单片机多任务编程工作中,大多采用了基于实时操作系统RTOS分时操作的思路和采用中断切换任务。但也有人认为,这种任务切换产生大量数据,额外占用系统资源,不适合资源有限的单片机系统[8]。本文提出的51单片机多任务编程方法,不采用时间片,而是基于一个完整过程切换任务,并将任务调度分配到各任务内部,任务的切换和调度都不占用系统额外资源。通过实际系统应用证明,用该方法设计系统,硬件电路更简单,单片机工作效率更高。
本文首先阐述多任务编程设计方法的原理,然后介绍几种典型任务的设计方法,最后通过一个简单的实例来说明该方法的可行性。
1多任务设计原理
多任务要求系统在同一时间执行多个任务,对于一个处理器,并不可能在同一时间运行多个任务程序,而是按时间片在各个任务间快速切换执行来完成多任务要求的。这是基于实时操作系统RTOS的方法。本文提出的方法也是按时间片切换任务的,但有所不同的是,执行任务的时间不是由定时器平均分配的,而是按照执行任务中一个完整过程的时间来自动分配的。
在单片机系统设计中,可按系统的功能或模块划分为任务,而每个任务可按具体作业细分为各个过程。可见任务由过程组成。按时间片分配任务的设计,任务的调度可分为两级,一是对任务的调度,二是在每项任务中对过程的调度。由于采用两级调度,比较繁琐,也占用了系统较多资源。如果不考虑对任务的调度,直接调度各任务的过程,其系统运行的效率就能极大地提高。同时,在任务中主动设置切换点自动切换任务,切换时不需保留大量现场数据,系统效率就会更高。再进一步,将过程的调度分配到各个实际任务之中,不设专门的过程调度表。系统的运行效率就会达到最高。为此本文提出的51单片机多任务编程的原理是:
1)将系统的各任务依次排成队列,处理器依次执行各任务,在执行完最后一项任务后,马上回头执行第一任务,并以此循环。
2)在每次执行一项任务时,只执行该任务的其中一个过程,并完整执行。其它的过程需等待下一轮执行该任务时才有机会执行。这可保证系统尽快从本任务切换到其它任务。
3)每个过程不包括循环延时、等待等浪费CPU时间的程序,循环延时、等待等程序将作为一个特殊过程独立设计。
4)常规任务(甚至实时任务)都设有一个空执行过程,以便系统跳过该任务的执行。优先任务或抢占式任务可利用此功能保证任务优先执行或独占运行。
5)系统不设专门的过程调度表,过程的调度在实际任务之中进行。
6)中断只用于调度过程,不处理任务,更符合系统实时性要求。
7)系统、任务和过程间均通过全局变量共享和交换数据。任务、过程间切换不保留现场数据和传递参数。
由此可见、系统按完整过程(最小作业单元)自动切换任务,不需保留临时现场数据,不需定时被动切换,不需额外的调度表。和单任务编程相比,多任务编程也没有占用系统任何额外资源。其结构和代码的可读性也没有较大的改变。
实际上,设计操作系统与设计应用系统最本质的区别是,操作系统面临的任务是不确定的,在设计完成后还允许应用添加新的任务;而应用系统面临的任务是事先定制的。因此,多任务应用系统的设计可不完全基于操作系统分时的思路。本文提出的多任务编程方法,就不需要强制的时间片划分,也不需要占用中断切换任务。
2多任务编程的实现方法
2.1一般任务的设计
任务分为实时任务和常规任务,实时任务是需无条件执行的任务,即在系统每次扫描任务队列时都必需执行的任务。通常是显示,检测等实时任务;常规任务是在满足一定条件时才启动的任务,通常被中断或其它任务调度,也能被中断或其它任务中止。为将实时任务与常规任务排在同一队列中执行,我们为常规任务增设了一个特殊过程,在调度这个过程时,该任务不执行任务的实际操作。这个过程称为空过程。例如,下面例举的任务包括一个空过程和三个实际操作过程,在任何其它任务中,通过屏蔽本任务的空过程,即SETB 00H,就可启动本任务,同理,CLR 00H就可在任何时候中止本任务的执行:
PROC:JNB 00H, PROCE ;空过程调度,不执行本任务
JB 11H,PROC2 ;11H置位时,执行过程2
JB 10H,PROC1 ;10H置位时,执行过程1
PROC0:……;过程0:本过程通常为任务初始化
SETB10H ;调度过程1
AJMPPROCE
PROC1: ……. ;过程1
SETB11H ;调度过程2
AJMPPROCE
PROC2: …… ;过程2
CLR11H
CLR10H
CLR00H ;任务完成,调度本任务的空过程
PROCE:NOP ;空过程
由任务设计可以看出,过程是通过消息(位寻址变量置位)来调度的。每次执行任务只执行该任务的一个过程,并且过程不能包括循环延时、等待等代码,以保证系统轮流执行多任务的实时性。如果一个过程必需包括等待或延时,则将过程从等待或延时处分解为两个过程,并在两个过程中插入专门的延时或等待过程。延时和等待过程的设计说明如下。
2.2延时等待过程设计
延时,等待等过程在程序设计中是必不可少的,为不影响系统的实时性,多任务编程的延时和等待需要特殊设计。
延时分为短延时和长延时,短延时是通过一个和几个计数变量计数就能完成的延时,长延时则通常利用计数变量配合计时器中断来完成延时。短延时可设计成任务中的一个特殊过程,长延时可设计成任务中的一个特殊过程或一个独立的特殊任务。
1)短延时,以下程序设计了一个特殊过程PROC1:一个计数变量30H递减实现延时,其计数周期是系统执行任务队列中全部任务所需的时间。
PORC:JNB 00H,PROCE
JB 10H,PROC1
MOV30H,#03H ;30H的值控制延时时间的大小
SETB10H
AJMPPROCE
PROC1:DJNZ30H, PROCE
;以每次执行完所有任务时间为周期的延时
CLR10H
CLR00H ;00H清0本任务执行完毕
PROCE:NOP
…… ;其它任务过程
LJMP PROC
2)长延时,利用定时器中断配合计数变量设计延时,20H清零设置一个等待过程。等待时间到,20H由定时器中断程序置位。20H的置位周期可由编程确定,本例为5ms:
PORC:JNB 00H,PROCE
JB 10H,PROC1
MOV30H, #64H ;30H的值初始化为100
CLR 20H
SETB10H ;调等待过程
AJMPPROCE
PROC1:JNB20H, PROCE
CLR20H
DJNZ30H, PROCE ;以5mS为周期的延时
CLR 10H ;总延时为500mS左右
CLR 00H ;00H清0本任务执行完毕
PROCE:NOP
……
LJMPPROC
PRIT0: …… ;定时中断程序,定时设置为500uS
DJNZ70H, PRIT0D
MOV70H, #0AH
SETB 20H ;定时周期为5mS
……
PRIT0D: NOP
……
RETI
2.3串行口连续发送数据任务
串行口发送数据需占用较长时间,连续发送多个字节数据将影响多任务系统的实时性。基于时间片的多任务切换系统,一般通过计算发送一帧数据所需的时间,采用约大于这一时间的定时方式,来作为发送两帧数据间的时间间歇,而不是在检测到发送数据缓冲区SBUF为空时立即发送后一帧数据。其连续发送数据的实时性较差,不能保证在数据总线上较好地与其它系统协调工作。本方法通过以下程序解决这一问题(假设数据缓冲区30H-3FH的16字节数据需要从串行口发送):
PROC:JNB00H, PROCE ;串行口发送数据程序
JB 10H, PROC1
MOVR0, #30H
;发送数据任务初始化,指针R0设为#30H
MOVR3, #10H ;发送数据为16字节
SETB10H
PROC1:JB 30H,PROCE
;等待过程:30H在串行发送中断程序中清0
SETB30H ;30H置1,调度本任务的等待过程
MOVSBUF, @R0
INCR0
DJNZR3,PROCE ;
CLR 10H ;
CLR 00H ;00H清0,所有数据发送完毕
PROCE: NOP
…… ;其它任务过程
AJMP PROC
SINP: …… ;串行中断程序
JNBTI,SINP1
CLRTI ;发送缓冲区空
CLR30H;30H清0,结束发送任务的等待过程
SINP1:JNBRI,SINPD
CLRRI
SINPD:NOP
……
RETI
3单片机多任务编程实例
3.1说明
本实例是从楼宇可视对讲系统的门口主机系统中简化出来的,可视对讲系统是一计算机支持的分布式多设备协同工作系统,总线制通信对串行口收发数据具有很高的实时要求。门口主机系统包括4位LED数码显示,12键键盘,串行口发送、接受数据,处理数据,以及控制开锁、发出蜂鸣声,密码数据闪存,计时,切换工作状态等多项任务。采用多任务编程是十分必要的。本实例就其LED显示,键盘扫描和串行换数据功能来说明该系统的多任务编程过程。
3.2硬件设计
能完成上述几项功能的硬件电路设计如图1所示,这是一个单片机最小系统。4位LED数码管采用动态显示,键盘为矩阵扫描键盘,这两个模块在单任务设计中,都需要较多的延时过程,很难保证系统的实时性,操作按键时还会造成显示闪烁或停顿。为此,很多类似设计都增加硬件或采用专用芯片如CH451来驱动[9],而多任务编程可省去这些硬件。图中75176芯片的AB端接楼宇对讲系统的485总线,与其它设备交换数据协同工作。
图1 多任务编程实例硬件设计图
Fig. 1 Schematic for Multitask Programming Example
3.3软件设计
3.3.1编程说明
编程目的:
1)从键盘键入4位数据,键入过程中可按*键清除重输。
2)每键入1位数据。LED屏从最右边1位开始显示,原各位显示向左移1位。
3)键入数据过程中,如果有5s钟没有继续按键,系统清除输入数据和显示。
4)当输入完4位数据后,系统将4位数据从串行口发送到数据总线。
5)当从数据总线上接收到数据#0D8H时,开始发送4位数据。
6)75176芯片平时为接收状态,当接收到#0D8H时,如果系统有数据要发送,则变为发送状态,发送数据,当数据发送完毕时,75176芯片恢复为接收状态。
根据上述编程目的将系统编程划分为以下7个任务:
1)4位LED数码管动态显示;
2)键盘扫描检测;当有按键时,启动第3任务。
3)处理键盘检测结果,设置防抖动延时;计算键值;并在释放键后启动第4任务;
4)将键值转换为输入数据和显示数据,分别送输入数据缓存区和显示缓存区;当键入*时清除已输入数据和显示;当输入第1位数据时,启动第5任务;当输入数据缓冲区满时,启动第6任务的一个条件;
5)5s延时,5s过后没有继续按键时,清除已输入数据和显示;
6)串行口发送数据,启动本任务同时需满足有数据要发送和接收到#0D8H两个条件;
7)串行口接收数据,当接收到#0D8H时,启动第6任务的另一条件。
其它说明:
1)在上述7个任务中,LED显示和键盘检测是实时任务,其余是常规任务。
2)系统采用执行其它任务的时间处理LED动态显示和键盘扫描检测任务所需的延时。
3)系统采用定时器0中断处理5s延时。定时标志20H置位间歇为25ms;计数变量6EH初始化和重置值为200(#0C8H)。
4)系统采用串行口中断处理串行数据的接收和发送。串行口接收中断启动系统第7项任务。
3.3.2系统流程图
图2是7个任务轮流执行的系统总流程图
图2多任务编程实例系统流程图
Fig.2 System Flowchart of Multitask Programming Example
3.3.3任务设计说明
1)4位LED数码管动态显示
在单任务设计中,4位LED数码管显示是一次完成的[10],每显示1位,都要设计一定的延时,这会浪费CPU时间,影响其它任务的实时执行。多任务设计的方案是,每次执行显示任务只依次显示一位,然后就执行下一任务。系统利用执行其它任务的时间来为LED的每位显示延时,即在显示延时过程中,系统同时在执行其它任务。
系统设有一个显示缓冲区7CH-7FH,LED显示是通过自动扫描显示缓冲区进行的。
显示初始化:
MOV 30H, #3FH ;0 30-39H显示数字段表
MOV 31H, #06H ;1
MOV 32H, #05BH ;2
MOV 33H, #4FH ;3
MOV 34H, #66H ;4
MOV 35H, #6DH ;5
MOV 36H, #7DH ;6
MOV 37H, #07H ;7
MOV 38H, #7FH ;8
MOV 39H, #6FH ;9
MOVR0, #7FH ;启动显示位指针初始化
显示任务代码:
DISP: CJNE R0, #7FH,DISP1 ;DISP,LED动态显示任务
MOV R3,#0FEH;初始化,先显示最左边位
MOV R0,#7CH;R0,显示缓存指针初始化
MOV 40H, #01H;40,键盘扫描键值初始化
AJMP DISP2
DISP1:MOV A, R3
RL A
MOV R3,A
INCR0
INC40H
DISP2:MOV P2,#00H;熄灭显示
MOV P0,R3 ;R3控制显示位
MOV P2,@R0 ;7CH-7FH 4位显示字缓存
DISPE:NOP
2)键盘扫描检测
矩阵键盘扫描检测的典型设计是依次置每行电平为低,对键盘行进行扫描,检测各列是否有键按下。由图1所示,矩阵键盘的行线和LED显示的位线是一致的,键盘扫描和动态显示扫描保持同步,很便于程序设计。所以,在多任务设计方案中,和LED显示任务一样,每次执行键盘检测任务时,只对一行进行检测。当没有按键按下时,系统依次对每行都进行检测;当有按键按下时,系统只对上次检测到按键按下的行进行检测,从而锁定对该按键的继续检测。
键盘扫描任务与LED显示任务通过共享全局变量R0保持同步:
GETK: JNB 00H, GETK0;GETK,按键扫描检测任务
MOVA,R0
CJNEA, 41H, GETKE
GETK0:MOVA,P0 ;键盘检测
ANLA, #0F0H
CJNEA, #0F0H, GETK1
CLR00H ;未检测到按键
AJMPGETKE
GETK1:SETB00H ;已检测到按键
MOV42H, A ;42H缓存按键状态
MOV41H, R0 ;41H记录检测到按键的行,以后锁定对这行的继续检测
GETKE:NOP
3)按键的处理
按键的处理主要包括计算按键持续按下的时间,键值计算和对按键释放后的处理。为防止按键抖动,持续按键需在一定的延时后,才能处理。多任务设计是在其任务中插入一个短延时过程。在处理完按键键值后,需等待释放按键。多任务设计通过设置消息(11H置位)屏蔽本任务和不启动后续相关任务的方式来设计等待过程:
KEYPR: JNB 00H, KEYPRD;KEYPR,处理按键任务
JB 11H, KEYPRE ;
JB 10H, KEYPR1
SETB10H
MOV 63H, #0FFH ;第一步设置键盘防抖动延时时间
MOV 64H, #04H
AJMP KEYPRE
KEYPR1:DJNZ 63H,KEYPRE ;第二步延时过程
DJNZ 64H, KEYPRE
SETB 11H ;第三步计算键值并等待释放键
ANL 40H, #0FH ;键值由40H的高4位和低4位组合。
KEYPR2:MOV A,42H;根据42H缓存的按键状态进行计算
JB ACC.4,KEYPR3 ;根据从P0口数据计算键盘值
ORL40H, #10H
AJMP KEYPR5
KEYPR3:JB ACC.5,KEYPR4
ORL40H, #20H
AJMPKEYPR5
KEYPR4:JBACC.6,KEYPRE
ORL40H, #30H
KEYPR5:MOV 43H, 40H ;43H缓存已确定的键值
AJMP KEYPRE
KEYPRD:CLR 10H ;按键释放,恢复到检测第一步
JNB 11H, KEYPRE
CLR 11H ;如果已计算出键值
SETB 01H 启动键值数据转换任务
KEYPRE:NOP
4)键值转换和数据处理
键值转换的目的是将键值转换为输入数据和显示数据,分别存入数据缓冲区和显示缓冲区。当输入数据缓冲区满时,系统将缓冲区数据从串行口发送到总线上,当输入数据是*时,系统清除缓冲区数据和显示。为检测输入一位数据后,继续输入是否被放弃,每输入一位数据,系统启动或重置一个5s延时。R2为输入数据缓冲区指针,初始值为#50H:
LOADC: JNB 01H, LOADCE ;LOADC,键值转换成数据
CLR 01H ;和转换成LED段码值任务
MOV A, 43H ;根据43H缓存的键值进行数据转换
PRO11: CJNE A, #11H, PRO12;按*建清除数据和显示
AJMP LOADC3
PRO12:CJNE A, #12H, PRO13 ;"7"
MOV R1,#37H
AJMP LOADC1
PRO13:CJNE A,#13H, PRO14 ;"4"
MOV R1,#34H
AJMP LOADC1
PRO14:CJNE A,#14H, PRO15 ;"1"
MOV R1,#31H
AJMP LOADC1
PRO15:CJNE A,#21H, PRO16 ;"0"
MOV R1,#30H
AJMP LOADC1
PRO16:CJNE A,#22H, PRO17 ;"8"
MOV R1,#38H
AJMP LOADC1
PRO17:CJNE A,#23H, PRO18 ;"5"
MOV R1,#35H
AJMP LOADC1
PRO18:CJNE A,#24H, PRO19 ;"2"
MOV R1,#32H
AJMP LOADC1
PRO19:CJNE A,#31H, PRO1A ;"#"
AJMP LOADCE
PRO1A:CJNE A,#32H, PRO1B ;"9"
MOV R1,#39H
AJMP LOADC1
PRO1B:CJNE A,#33H, PRO1C ;"6"
MOV R1,#36H
AJMP LOADC1
PRO1C: CJNEA,#34H,LOADC0A ;"3"
MOV R1,#33H
LOADC1: PUSH 00H
MOV00H, R2 ;R2指定数据缓存地址
MOV @R0,01H ;根据R1的值存入数据缓存区
POP 00H
MOV 7FH, 7EH
MOV 7EH, 7DH
MOV 7DH, 7CH
MOV 7CH, @R1 ;与R1值对应的段码送显示缓存区
LOADC1C:CJNER2,#53H, LOADC2
LOADC1L:SETB17H ;输入数据达4位,准备从串行口发送
AJMPLOADCE
LOADC2:INC R2 ;数据缓存区指针加1
SETB02H ;启动或重置5s延时任务
MOV6EH,#0C8H ;初始或重置计数器
AJMPLOADCE
LOADC3:MOV R2,#50H;清除数据缓存区数据和显示
MOV7FH,#00H
MOV 7EH,#00H
MOV 7DH,#00H
MOV 7CH,#00H
CLR 02H ;中止5s按键延时任务
LOADCE:NOP
5)按键间延时
系统通过按键连续输入数据,要求按键间间隙时间不能超过5s,超过5s被认为是放弃输入,系统将清除已输入数据和显示。在本实例中,按键间延时设计为一个特殊任务。该任务的5s计数值在键值转换中启动或重置,可保证每次按键后都有5s时间延时。该延时可在5s后自动结束或被其它任务中止。
按键延时代码中,21H在定时器0中断程序中置位,设计置位周期为50ms,计算变量6EH在键值转换任务中设置或重置:
KYWAIT:JNB 02H, KYWAITE;KYWAIT,等待延时任务
JNB 21H, KYWAITE
CLR 21H
DJNZ 6EH, KYWAITE
CLR 02H ;结束5s延时
MOV R2, #50H ;清除按键输入和显示
MOV 7FH, #00H
MOV 7EH, #00H
MOV 7DH, #00H
MOV 7CH, #00H
KYWAITE:NOP
6)串行口发送4字节数据
串行口连续发送数据任务是配合串行口发送中断进行的。除第2节典型示例外,串行口发送数据任务还可按下面方式设计:
TXGL:JNB 03H, TXGLE ;TXGL,串行发送任务
JNB 17H, TXGLD ;17H置位,已有要发送的数据
JB30H, TXGLE ;等待上一帧数据发送完毕
SETB30H ;设置等待过程
JB 3CH,TXGL2
JB 3BH, TXGL1
JB 3AH, TXGL0
SETBP3.6 ;将75176转换成发送状态
MOVSBUF, 50H ;发送第一字节
SETB3AH
AJMPTXGLE
TXGL0:MOVSBUF,51H ;发送第二字节
SETB3BH
AJMPTXGLE
TXGL1: MOV SBUF,52H ;发送第三字节
SETB3CH
AJMPTXGLE
TXGL2:MOVSBUF,53H ;发送第四字节
SETB48H ;48H置位,数据发送完毕后,让75176恢复接收状态
CLR 3CH
CLR 3BH
CLR 3AH
CLR 17H
TXGLD:CLR 03H ;结束串行发送任务
TXGLE:NOP
7)串行口接收数据
为了串行口中断不对系统的实时性产生较大影响,对串行口接收数据的处理是在中断外多任务队列中进行的。限于篇幅,系统只考虑从管理中心接收到发送数据允许同步信号#0D8H,开始向管理中心发送数据:
SHJJS:04H,SHJJSE;SHJJS,串行接收数据任务
CLR04H
MOVA,4FH
CJNEA,#0D8H, SHJJSE ;接收到数据08H
SETB 03H ;03H置位,启动串行发送任务
SHJJSE:NOP
8)串行中断程序
在串行发送数据中断中,系统设计了75176芯片转换为接收状态的过程,48H在串行发送最后一字节时置位,以便在发送完数据后,改变系统状态。
在串行接收数据中断中,04H置位,通知系统从串行口接收到一字节数据,并已存入4FH,同时04H启动串行口接收数据任务:
SINP: PUSHPSW;SINP,串行口中断程序
JNB TI, SINP0
CLR 30H
CLR TI
JNB 48H, SINP0
CLR 48H
CLR P3.2
SINP0: JNBRI, SINP3
CLRRI
MOV 4FH,SBUF
SETB 04H
SINP3: POPPSW
RETI
3.3.4系统的构成
将系统的7个任务经过上述设计,然后排成队列,并在队列最后设置一个长调转指令到队列中最前一个任务,构成一个依次执行并轮流循环的系统,这就是多任务编程的系统实例。在系统中,各任务需然是依次排成队列执行的,但任务的排序是可任意改变的。在任务间任意插入新的任务,也不会影响原系统正常运行。基于这一特征,各任务被看成是并发执行的。
4结论
单片机多任务编程方法可归纳为:
1)在单片机多任务编程中,各任务依次排成队列轮流执行。
2)每次执行任务只调用其一个过程来执行,可保证各任务间最快速地切换。
3)和时间片任务切换不同,切换任务不占用堆栈和额外的系统资源。
4)各任务、过程间使用全局变量共享或交换数据,避免各种参数传递。
5)基于消息(位寻址变量的置位),每项任务,都可被其它任务启动和中止。
通过对循环延时和等待过程的重新设计,单片机多任务设计的每项任务和每个过程都是连续执行的。这可保证多任务间的切换最快,单片机的运行效率最高。因为任务的过程是完整执行的,所以和时间片强制切换不同,任务和过程的切换不占用堆栈和额外的系统资源。因为任何任务都可中止和屏蔽其它任务的执行,本方法也可设计抢占式任务。只要给实时任务也设计一个空过程,抢占式任务甚至还可屏蔽实时任务。达到最优先,最快执行的目的。本方法基于消息,但没有单独的消息循环过程[11-13],可最大限度地减少系统开支。
本文介绍的多任务编程方法是用汇编语言实现的,但显而易见,根据本方法的原理,用C51语言同样也可设计单片机多任务系统。
在过去采用传统方法设计复杂的单片机系统过程中,人们容易发现系统交叉调用多,重复代码多,系统运行效率差,容易逻辑混乱且难以调试。例如要完成本文实例的设计,键盘处理过程需反复进行键盘检测。为了不让显示中断,键盘处理防抖延时和等待释放键盘时,又要多次调用显示过程,串行口连续发送数据过程中,更是频繁调用显示。显示、键盘检测、键盘处理等任务不能成为低耦合性的独立模块。系统程序的层次结构和可读性也都较差,并很难移植和重用。鉴于此,为探索一个结构清晰,易调试,任务明确且可重用、提高开发效率,无相互调用,无重复代码的系统,一个新的编程方式开始了实践和研究,并被总结为多任务编程方法。在近八年不断利用新方法设计(如楼宇对讲系统、联网报警系统、门禁系统,安防监控、广播控制、一卡通等)智能系统产品的同时,本多任务编程方法取得了成熟和发展。与传统设计相比,这些系统产品硬件资源少,运行效率高。其硬件功能更多以软件取代,所以运行更稳定,且易维护,性价比高,取得了更高的经济效益。
参考文献
[1] 罗江,户永清.51单片机多任务机制的实现策略研究[J].四川文理学院学报(自然科学),2008,18(2):82-84.
[2] 阮元.分时操作系统思想在单片机编程中的实现[OL].[2009-7-13]..
[3] 王辉堂,颜志勇,陈文芗.一种基于C51的多任务机制及应用[J].电子技术应用,2006,6(1):45-48.
[4] 李仕涌,谭南林.多任务操作系统在嵌入式系统开发中的应用[J].北方交通大学学报,2002,26(4):79-82.
[5] 刘蕊.基于实时操作系统RTX51的多任务处理设备设计[J].计算机光盘软件与应用,2010 9(1):25-26.
[6] 陈劲松,程新民,魏忠.时间片轮转算法在单片机程序设计中的应用[J].电子技术应用,2003,29(3):79-82.
[7] 王江宁,吕军.时分多线程在单片机系统中的应用研究[OL].[2008-07-22]..
[8] 潘永雄.基于过程的单片机多任务程序结构及实现方法[J].电子工程师,2005,31(3).
[9] 胡全.51单片机的数码管动态显示技术[J].中国新技术新产品[J],2009,13(1).
[10] 施隆照.数码管显示驱动和键盘扫描控制器CH451及其应用[J].国外电子元器件,2004,1(1):53-57.
[11] 杨金,孙世新.基于消息机制的单片机多任务系统的开发[J].计算机时代,2007,11(1).
[12] 周国柱,张道德,杨光友.基于消息的单片机多任务编程[J].湖北工学院学报,2002,9(1).
篇3
关键词:单片机;梯形图;结构化数据;自编程
中图分类号:TP334 文献标识码:A
一、概述
通常基于单片机开发的智能控制器,因内部程序已固化,开发完成后,其功能基本定型,只能应用于设计时的特定目标,现场如需变更控制方案也非常困难。针对这一短板,我们设计一种基于单片机开发控制器的一种新方案,实现内核驱动与逻辑运算、控制分开,并以简明梯形图语言实现运行逻辑编程,不仅扩展了控制器的应用范围,而且减轻现场调试难度,控制方案的变动,只需修改梯形图逻辑即可解决。
二、原理
单片机应具备的特性:足够容量的可擦写flash程序存储器,支持IAP功能,现在大多单片机芯片都支持用户自编程IAP功能,如Atmega128、STM32F3、STM32F4系列皆能满足要求。首先将单片机flash存储器划分为3块,一部分存储实现IAP功能的Boot Loader程序,一部分存储单片机内核程序,余下的部分用于存储用户程序。内核程序主要是硬件驱动及用户程序间代码接口与算法。用户程序即为用梯形图编辑工具形成顺序控制逻辑,比较规则及数据输出去向等。
内核程序周期性地扫描内外部设备内存映射地址,并调用用户区逻辑运算,将结果以数据量及消息量的方式输出到设备,如此周而复始,完成用户逻辑的控制方案。
三、具体实现
单片机如何实现硬件驱动及通信不在本议题讨论范围内,重点论述如何实现梯形图编译工具软件与单片机执行梯形图控制逻辑。
1.用户程序编辑与编译(梯形图编译工具):
梯形图的编辑元器件主要包括常开接点、常闭接点、继电器等简单元件和定时、比较等功能元器件。为了灵活应用和扩展编辑元器件,方便编程,将梯形图元件数据结构定义如下:
type
Tmdevice=record
name: string[4]; //元件名称
mclass: byte; //元件类型
memo: string; //元件备注,消息变量为消息变量实体
end;
其中Mclass的取值0:开关量输入(DI),1:开关量输出(DO),2:定时器(T),3:计数器(C),4:内部继电器(M),5:数据寄存器(D),6:消息输入(MI),7:消息输出(MO)。
梯形图用户程序我们可以看成是有限个逻辑节点构成固定列宽,可扩展行数的表,每个节点代表元件加逻辑操作构成的数据结构体,因此首先定义节点数据结构:
Type
Tprodata=record
Opclass: byte; //节点类型(元件类型+连接类连)
notop: byte; //操作码
Address: byte; //操作数内存地址
Chadd: word; //比较数
end;
依据上述约定实现绘制的梯形图,如图1所示。
2.梯形图逻辑扫描算法
梯形图语言描述一个逻辑网络自左向右的能量潮,元件的逻辑运算总是与左侧的运算“与”运算,分支总是与左侧结果“或”运算,逐行扫描遇分支节点先将运算结果压入栈,扫描暂时放弃分支节点右侧元件,进行下一行扫描,如遇分支,继续执行压栈,一直扫描到没有分支时,将结果与栈顶“或”运算,执行出栈(先进先出原则),同时判断栈顶节点连接类型,决定下一步是出栈还是扫描,如遇出栈节点有右侧分支,则扫描右侧元件,并作逻辑运算,直至扫描至行结束标志节点,并将运算结果赋值与最后节点元件,因此位于结束标志点的元件一定是输出型元件。如果在扫描过程中,能量潮在开始标志与结束标志中有中断或能量潮开始与结束标志不完整,都视为梯形图编译未能通过。
我们将上面元件扫描顺序及元件操作类型记录在一个顺序数据组中,这个顺序数组结构应是这样:
Type
Tprodata=record
Oprate: byte; //数据运算类型
selfop: byte; //自身附加运算
Address: byte;//元件内存映射地址
Chadd: word;//比较运算值
end;
其中Oprate对应的逻辑运算,1表示与,2表示异或,4表示赋值,5表示压栈,6表示出栈,7表示栈更新,8表示定时器操作,9:定时器溢出处理,10:计数器操作,11:计算器溢出处理,12:表示位操作,13:寄存器数值比较。
然后定义一个Tprodata类型变长数组,将上面梯形图扫描编译顺序结果存放在这个变长数组中,最后将这个数据数据按Intel Hex格式格式化输出文件,并保存在磁硬盘中。
3.下载用户程序到单片机用户程序寄存器
单片机具有自编程(IAP)功能,将梯形图编译结果文件(Intel Hex格式)下载到单片机用户程序寄存器分区,因用户程序寄存器分区是可单独通过IAP擦写,这样修改控制器运行逻辑,只需修改梯形图,编译下载就可实现控制逻辑与内核程序分离。
4.单片机执行梯形图逻辑实现
5.梯形图元件在单片机内存映射
单片机内核程序中首先定义一组元件内存映射,数组的大小与梯形图中元件数组大小一致,并保持与梯形图编辑工具中元件类型对应,这里定义为u16 opdate[255]。
为处理梯形图用户逻辑,在单片机内核程序中建立几个接口函数,如图2所示。
接口函数实现方式中已明确了数据处理细节,单片机内核循环执行ReadDI()、checkprodata()、OutDO()函数。ReadDI()将输入端口的逻辑状态读入映射区。通信控制字、消息输入通过中断接口调用中断处理函数将数据存入相应的内存映射地址,checkprodata()顺序读取、处理用户逻辑,并将逻辑运算、比较结果传递相应的输出映射内存地址,OutDO()函数将输出映射地址中的结果输出控制器的输出端。通过图3更清晰彼此间的作用机制。
结论
本文设计基于单片机开发智能控制器,实现内核程序与用户控制逻辑分离,控制逻辑通过梯形图编辑工具编译与下载,控制目标的变更,只需修改梯形图逻辑即可实现。此设计方案成功应用在江苏盐城供电公司东郊变、安泰变环境监测与报警,智能排水不同控制目标。
篇4
0 引言
PIC18F__8单片机是美国微芯公司推出的16位RISC指令集的高级产品,由于芯片内含有A/D、内部E2PROM存储器、I2C和SPI接口、CAN接口、同步/异步串行通信(USART)接口等强大的功能,具有很好的应用前景。但是,目前介绍其应用和以C语言编程的中文参考资料很少。本文将探讨该型单片机异步串行通信的编程应用,程序用HI-TECH PICC-18 C语言编写,并在重庆大学-美国微芯公司PIC单片机实验室的PIC18F458实验板上通过。
1 PIC18FXX8单片机同步/异步收发器(USART)
通用同步/异步收发器(USART)模块是由PIC18FXX8内的三个串行I/O模块组成的器件之一(USART也叫串行通信接口即SCI),可以配置为全双工异步方式、半双工同步主控方式、半双工同步从动方式三种工作方式。
TXSTA是PIC18FXX8单片机串行通信发送状态和控制寄存器,RCSTA是接收状态和控制寄存器。由于在实际工程中,异步方式用得最多,这里仅介绍异步工作方式,其它方式可参阅相关资料。
1.1 USART 异步工作方式
在异步工作方式下,串行通信接口USART采用标准的不归零(NRZ)格式(1位起始位、8位或9位数据位和一位停止位),最常用的数据位是8位。片内提供的8位波特率发生器BRG可用来自振荡器时钟信号产生标准的波特率频率。通过对SYNC位(在TXSTA寄存器中)清零,可选择USART异步工作方式。
1.2 USART波特率发生器(BRG)
USART带有一个8位的波特率发生器(BRG),这个BRG支持USRAT的同步方式和异步方式。用SPBRG寄存器控制一个独立的8位定时器的周期。在异步方式下,BRGH位(控制寄存器TXSTA的)也被用来控制波特率。在同步方式下,用不到BRGH位。表1给出了在主控方式下(内部时钟)不同USART工作方式时的波特率计算式。
表1 主控方式下的波特率计算式
SYNC
BRGH=0(低速)
BRGH=1(高速)
(异步)波特率=FOSC/[64(X+1)]
波特率 = FOSC/[16(X+1)]
1
(同步)波特率=FOSC/[4(X+1)]
无
1.3 USART 异步工作方式配置
下面是串行通信异步工作方式配置步骤(顺序可以改变):
(1)配置发送状态和控制寄存器TXSTA;
(2)配置接收状态和控制寄存器RCSTA;
(3)配置RX(RC7引脚)、TX(RC6引脚)分别为输入和输出方式;
(4)通过设定的通信波特率配置SPBRG寄存器,计算公式参见表1;
(5)设置串行通信接收或发送中断是否使能;
(6)清串行通信接收或发送中断标志;
(7)设置串行通信接收中断或发送中断的优先级是高或低优先级中断方式,PIC18单片机默认情况下是高优先级中断,若是低优先级中断,则必须进行设置;
(8)设置串行通信接收和发送数据是否允许。
若用到了中断功能,还需设置总中断和中断使能,以开放未屏蔽的中断。
2 USART接口硬件电路
利用PC机配置的串行口,可以很方便地实现PC机与PIC18单片机的串行数据通信。PC机与PIC单片机USART连接最简单的是三线方式。由于PIC单片机输入、输出电平为TTL电平,而RS-232C PC机配置的是RS-232C标准串行接口,二者电气规范不一致,因此要完成PC机与微控制器的串行数据通信,必须进行电平转换。图1为PIC18F458单片机的RS-232电平转换电路。图中MAX232(或MAX202)将PIC18单片机TX输出的TTL电平信号转换为RS-232C电平,输入到PC机,并将PC机输出的RS232C电平信号转换为TTL电平输出到PIC微控制器的RX引脚。J9和PC机的连接方式见RS-232标准,与单片机相接的D型头(J9)的2脚(PIC接收信号)与接PC机D型头的3脚(PC机发送信号)相连,与单片机相接的D型头(J9)的3脚(PIC发送信号)与接PC机D型头的2脚(PC机接收信号)相连,二者的5脚与5脚相连(地相连)。PC机串口数据的发送和接收显示均可采用各种串口调试软件,我们使用的是串口调试助手V2.2(或V2.1、V2.0均可),在网上可以下载该调试软件,该软件操作简单,这里不作介绍。
3 USART异步工作方式编程
串行通信的接收有查询和中断2种方式,在实际应用中,一般不采用查询接收数据,常用的是中断接收数据。发送有中断发送和非中断发送,在下面的例程中我们采用了中断接收数据,发送数据采用中断方式还是非中断方式可以在程序中通过对发送方式标志Send_Mode(不为0,中断方式发送;=0,非中断方式发送)进行设置实现。
在PIC单片机发送数据时,发送中断标志TXIF不能用软件清0,只有当新的发送数据送入发送数据寄存器TXREG后,TXIF位才能被硬件复位,因此在程序中清该标志是无效的。采用中断发送数据的方法是:在主程序中启动发送一串数据的第一个数据,然后利用发送完成中断启动下一个数据发送,当一串数据发送后,不再发送数据,但有发送完成中断标志,程序还要进入一次中断,这最后一次中断对数据发送是无用的,必须将该标志清0,采用的方法是禁止发送使能(TXEN=0)而引起发送被终止或对发送器复位。
下面是一个用串行通信进行接收和发送数据的例程,程序实现功能:PIC18单片机接收到PC机下发的8个数据后,将收到的8个数据以中断或非中断发送方式返送回PC机。
#include "pic18.h" /* PIC18系列的头文件 */
unsigned char receive232[8]; /* 接收数据数组 */
unsigned char send232[8]; /* 发送数据数组 */
unsigned char receive_count=0; /* 接收数据个数计数 */
unsigned char send_count=0; /* 发送数据个数计数 */
unsigned char *point
er; /* 发送数据指针 */
unsigned char i; /* 程序中用到的循环变量 */
unsigned char SciReceiveFlag; /* =1,接收到8个数据 */
unsigned char Send_Mode=0; /* 不为0,中断方式发送;=0,非中断方式发送 */void sciinitial() /* 串行通讯初始化子程序 */
{
TXSTA=0x04; /* 选择异步高速方式传输8位数据 */
RCSTA=0x80; /* 允许串行口工作使能 */
TRISC=TRISC|0X80; /* :将RC7(RX)设置为输入方式 */
TRISC=TRISC&0Xbf; /* RC6(TX)设置为输出 */
SPBRG=25; /* 4M晶振且波特率为9600时,SPBRG设置值为25 */
PIR1=0x00; /* 清中断标志 */
PIE1=PIE1|0x20; /* 允许串行通讯接口接收中断使能 */
RCIP=0; /* 设置SCI接收中断为低优先级中断 */
CREN=1; /* 允许串口连续接收数据 */
if(0==Send_Mode) TXEN=1; /* Send_Mode=0,非中断方式发送,串口发送数据使能 */
else /* Send_Mode=1,中断方式发送 */
{
PIE1=PIE1|0x10; /* 允许中断发送 */
TXIP=0; /* 发送低优先级中断 */
}
}
void interrupt low_priority LOW_ISR() /* 低优先级中断子程序 */
{
if(RCIF==1) /* RS232接收中断 */
{
RCIF=0; /* 清中断标志 */
receive232[receive_count]=RCREG; /* 接收数据并存储 */
send232[receive_count]=RCREG; /* 接收数据存放到发送缓冲数组 */
receive_count++; /* 接收计数器加1 */
if(receive_count>7) /* 如果已经接收到8个数据 */
{
receive_count=0; /* 接收计数器清0 */
SciReceiveFlag=1; /* 置接收到8个数据标志 */
}
}
else if((0!=Send_Mode)&&(TXIF==1)) /* 中断发送数据方式且为发送中断 */
{
if(send_count>7) /* 已经发送完8个数 */
{
TXEN=0; /* 发送不使能 */
return;
}
else
{
send_count++; /* 发送计数器加1 */
TXREG=*pointer++; /* 发送当前应发送数据,发送指针加1 */
}
}
}
main() /* 主程序 */
{
INTCON=0x00; /* 关总中断 */
ADCON1=0X07; /* 设置数字输入输出口,不用作模拟口 */
PIE1=0; /* PIE1 的中断不使能 */
PIE2=0; /* PIE2 的中断不使能 */
PIE3=0; /* PIE3 的中断不使能 */
Send_Mode=1; /* Send_Mode不为0,中断方式发送数据;
Send_Mode =0,非中断方式发送数据 */
sciinitial(); /* 串行通讯初始化子程序 */
IPEN=1; /* 使能中断高低优先级 */
INTCON=INTCON|0xc0; /* 开总中断、开接口中断 */
while(1)
{
if(1==SciReceiveFlag) /* 是否接收到8个通信数据 */
{
SciReceiveFlag=0; /* 清接收到8个通信数据标志 */
if(0!=Send_Mode) /* Send_Mode不为0,中断方式发送 */
{
send_count=0; /* 发送数据计数清0 */
pointer=&send232[0]; /* 发送指针指向发送数据数组首地址 */
TXREG=*pointer++; /* 发送第一个数据后,将发送指针加1 */
TXEN=1; /* 使能发送 */
}
else /* Send_Mode =0,非中断方式发送数据 */
{
pointer=&send232[0]; /* 发送指针指向发送数据数组首地址 */
for(i=0;i<8;i++)
{
TXREG=*pointer++; /* 发送数据后,将发送指针加1 */
while(1) /* 等待发送完成 */
{
if(TXIF==1) break; /* 等待发送完成 */
}
}
}
}
}
}
篇5
关键词:SPWM信号;51单片机;FGA25N120ANTD 管;光电隔离驱动芯片
中图分类号:TP202 文献标识码:A 文章编号:1009-3044(2014)34-8320-02
目前市场上常见设备的电机,多使用调整皮带在不同直径的皮带槽运转来实现调速,而这种方法存在需要停机、费时费力、不可连续调速等诸多缺点。为改善对上述缺点,多采用可连续调速的CVT变速装置,但是CVT变速装置同样存在不易于加工、造价高等缺点。
针对如上问题,采用微处理器结合驱动电路,在不改变电动机输出扭力的同时使其转速连续可调,成为了一种切实可行的调速方法。
1 方案论证
目前实现对交流电机的调速一般有晶闸管移相调速与全控桥变频调速。移相调速虽然结构简单容易实现,但是却会影响波形的连续性,电机低速运转时力矩明显减小。另外就是采用脉宽等效方法SPWM调制输出正弦交流信号,再改变正弦信号的频率实现对电机的变频调速。
脉宽调制技术通过一定的规律控制开关元件的通断,来获得一组等幅而不等宽的矩形脉冲波形,用以近似正弦电压波形。脉宽调制技术在逆变器中的应用对现代电力电子技术。现代调速系统的发展起到极大的促进作用。
近几年来,由于场控自关断器件的不断涌现,相应的高频SPWM(正弦脉宽调制)技术在电机调速中得到了广泛应用。SA8281是MITEL公司推出的一种用于三相SPWM波发生和控制的集成电路,它与微处理器接口方便,内置波形ROM及相应的控制逻辑,设置完成后可以独立产生三相PWM波形,只有当输出频率或幅值等需要改变时才需微处理器的干预,微处理器只用很少的时间控制它,因而有能力进行整个系统的检测。保护和控制等。
经过对两种方案认真的比较最终采用由单片机产生SPWM信号控制的三相桥,对电机进行变频调速。
2 SPWM介绍
PWM的全称是Pulse Width Modulation(脉冲宽度调制),它是通过改变输出方波的占空比来改变等效的输出电压。广泛地用于电动机调速和阀门控制,比如电动车电机调速就是使用这种方式。
所谓SPWM,就是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规律排列,这样输出波形经过适当的滤波可以做到正弦波输出。它广泛地用于直流交流逆变器等,比如高级一些的UPS就是一个例子。三相SPWM是使用SPWM模拟市电的三相输出,在变频器领域被广泛的采用。
3 基于单片机生成SPWM信号控制电机实现变频调速的设计
3.1主处理器选型
涉及到SPWM运算等高速处理,因此主处理器的选择至关重要,目前市面上流行的单片机主要有51单片机、PIC单片机、AVR单片机,以及cortex-M3芯片。
51单片机应用的早,影响很大,已成为世界上的工业标准。随着技术的不断发展,51因其拥有广泛的市场认知度,所以得到了更多厂商的重视,新技术层出不穷,带PWM、带AD、带时钟、带USB等等,处理速度也不断增强。PIC单片机是Microchip公司的产品,它也是一种精简指令型的单片机,指令数量比较少,中档的PIC系列仅仅有35条指令而已,低档的仅有33条指令。但是如果使用汇编语言编写PIC单片机的程序有一个致命的弱点就是PIC中低档单片机里有一个翻页的概念,编写程序比较麻烦。
AVR单片机属于使用精简指令集的高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。AVR单片机易于入手、便于升级、费用低廉。
Cortex-M3是一个32位的核,在传统的单片机领域中,有一些不同于通用32位CPU应用的要求。在实际应用中,因为用户要求具有更快的中断速度,所以Cortex-M3采用了Tail-Chaining中断技术,完全基于硬件进行中断处理,最多可减少12个时钟周期数,在实际应用中可减少70%中断。并且处理速度明显高于普通8位单片机。但价格略高。
对本项目而言,多功能新型51单片机以其低廉的价格,超强的稳定性,而且本身带有强大的PWM功能无疑为最佳选择。
3.2 功率器件与驱动器件选型
绝缘栅双极型晶体管,是由双极型三极管和绝缘栅型场效应管组成的复合全控型电压驱动式功率半导体器件, 具有高输入阻抗和低导通压降两方面的优点。因此本项目选用具备上述优点的FGA25N120ANTD 管作为功率输出器件。
驱动电路采用较为成熟的东芝光电隔离驱动芯片 TLP-250。
3.3 原理图的绘制
因为电路中强电与弱电并存,因此在PCB作图时候必须着重考虑避免强电给弱电带来的干扰,对可能产生谐波、感应电流都因该加入吸收电容,对大功率器件的控制端加入磁珠进行滤波。另外为了增大电路板对电流的承载能力,大电流部分应采用堆锡焊法。
4 调试
因为电路中涉及到强电,调试具有一定的危险性,为确保安全,应采36v隔离变压器低压调试的方法,待参数确定后再接入高压。电流反馈的采集应使用0.01欧的康铜丝电阻。结合示波器与SPWM计算器计算出每个点的脉冲宽度,经过反复比对,最终完成调试。
5 结论
本项完成后已经成功运用到一些设备中,运行良好,达到了预期的效果。
参考文献:
[1] 东栋,何向涛,刘建政.用MCS-51实现UPS电源SPWM控制的一种方法[J].通信电源技术,2007(1).
[2] 杨旭,王兆安.一种新的准固定频率滞环PWM电流控制方法[J].电工技术学报,2003(3).
[3] 夏凤仙,陈小平.逆变式工频交变电流源研制[J].仪器仪表学报,2008(8).
篇6
一、章节教学VS项目教学
通常单片机教材的章节有绪论、单片机的结构和原理、指令系统、程序设计、中断系统及定时/计数器、串行接口、系统扩展、测控接口、应用系统设计方法等。理论性较强,每一个章节都是单片机应用系统的一个局部,学生要把所有局部都学完,才能完整地了解单片机。对于高职学生而言这种只见树木不见森林的学习方法实在是难度大、效率低。学到最后学生还是不知道单片机怎么应用,更不用说单片机设计、编程、调试能力的培养了。
因此要培养学生的单片机应用能力,按书本一讲到底不符合高职教育的需要。本课程的教学改革首先要打破章节的局限,以实际的项目为载体进行项目教学,把企业中实际的、常用的项目引入教学中,并且每一个项目都是一个完整的单片机应用系统开发设计过程。起初的项目可以非常简单,比如点亮一个发光二极管,相对容易实现的项目在学习的初期就容易激发他们的学习兴趣。通过实训,发现单片机的学习并不是那么高不可攀,学生就会信心倍增,更加努力的学习。在项目教学法中,不同的项目体现不同的单片机应用知识点,用一个一个的项目把整个教学内容贯穿起来。随着项目的不断深入,学生对单片机的认识水平将逐渐提高,应用能力和编程能力也会越来越强。这种项目化教学融“教、学、做”于一体,是符合高职学生认知规律的教学方法。
针对高职院校的学生,本文对《单片机编程及接口技术应用》课程教学做了一定的规划和改革。具体的项目安排如表1所示。
二、汇编编程VS C语言编程
汇编语言是一种用文字助记符来表示机器指令的符号语言,最接近机器码。主要的优点是每一条指令都对应单片机的一个执行动作,因此程序执行效率高,可以避免生成庞大的、效率低的程序。汇编语言还可实现精确的时序控制。但是不同型号的单片机其指令系统是不完全相同的,因此汇编程序的移植性差。并且由于汇编语言是助记符,不利于记忆。
单片机C语言是一种编译型语言,兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言是高级语言,程序符合人类的思维逻辑,可读性强;不需要了解单片机指令系统,只要对单片机的内部资源稍有认识就可以进行编程控制。C语言可根据功能划分为不用的函数进行调用,有利于程序的模块化设计和分工合作。此外,由于C语言控制不基于特定的单片机底层结构和指令系统,因此程序的移植性好。用单片机C语言进行程序设计已成为单片机软件开发的一个主流。
基于以上分析比较,对于高职学生而言,完全掌握单片机的内部结构和上百条的指令系统是困难的,也是没有必要的。完全可以用C语言作为编程语言。同时C语言也是一些高级控制器的编程语言,学习C语言的单片机编程有利于学生未来的发展。
三、实验箱平台VS仿真实验平台
单片机实验箱实验在全国范围内的单片机教学中是非常普遍的,其独特的优势是实验箱中集成了单片机及其应用接口和常用的被控对象,实验的硬件设计部分简单且可靠性高,学生在实验中能够集中精力在系统的架构和软件开发上,而不会造成硬件线路搭建不当的问题,从而加深学生对实验目的的掌握。但问题是实验箱的功能有限,箱内固定的器件配搭限制了学生的思维,使其无法真正发挥主观能动性及创造思维。
针对上文提及的情况,本文提出用时下流行的单片机仿真软件Proteus作为实验平台进行单片机仿真实验。该软件支持单片机汇编源码级、C源码级仿真与调试。无需硬件电路就可对单片机电路进行软硬件的开发、测试与调试。并且这款软件支持的单片机类型非常多,包括8051、ACR、PIC10/12、PIC16、PIC18、HC11、ARM7等。与此同时,对学校而言构建实验室的硬件投入也相应减少了,只需提供计算机和相应的软件即可。并且整个使用过程中损耗很小,基本没有元器件的损耗问题。这样实验室的运行成本就会大幅降低。当然使用Proteus也会有不可避免的缺点,对于系统而言,开发不能只停留在仿真阶段,教学中不能只使用仿真实验,否则学生不可能认识真正的元器件,不会使用实际的仪器仪表,不会排查和调试电路故障。因此,笔者在实现仿真后还加入了学生自己动手制作实物的过程,并要求学生完成简单的排故和调试工作,让学生能够真正了解单片机系统是如何一步步开发并付诸于现实的。
四、试卷考核VS多样的考核方法
考试的目的在于检查教学效果、教学目标实现的程度,以便于改进教学工作、提高教学质量,鞭策学生积极努力地学习。由于本课程应用性强、实践性强,对学生的动手能力要求比较高,所以仅一张试卷闭卷考核不能完全完成考试目的。本文认为总体来讲单片机教学有以下几种考核形式:(1)理论+实践=最终考核成绩;(2)课内实践+实习实训=最终考核成绩;(3)课内实践+设计作品=最终考核成绩;(4)理论+设计作品=最终考核成绩。
针对高职院校的学生,本文把表1所示的四个教学模块分为三个阶段考核,如表2所示。
五、课内VS课外
单片机课程教学改革能够保证培养学生的实践动手能力、仪器使用能力、单片机技术应用能力。但是单片机的课程效果应该不仅仅局限于课内。可以在课堂教学的基础上,发展单片机兴趣小组,并引导和鼓励学生参加各种级别的电子设计竞赛等,从而进一步提高学生的实践技能和创新能力。
本文仅对单片机课程教学改革中比较突出的五个方面进行了阐述。除此之外,在教学过程中还应该注重校企合作、工学结合等各种教学模式,开发适合高职院校教学的教学教材,运用多种生动有趣的教学方法等。
总之希望经过教学改革实践,学生不再认为单片机是门晦涩难懂的课程,从而激起他们对该课程的学习热情,使其真正能够成为培养高职学生成为市场上抢手的单片机应用技能型人才的金钥匙。
篇7
【关键词】 中职电子 单片机 教学 应用
随着时代的发展,传统的单片机教学模式已经不能满足创新型人才培养的需要,如何激发学生的学习兴趣、改善教学技巧、提高教学水平,已经成为单片机课程教学中急需解决的问题。
一、C51单片机的优点及教学现况
现今的一些大专、中职类的学校也开设了单片机课程。教学大多采用讲解硬件和软件知识为主,软件编程选用汇编语言。学习时学生需要记住很多条指令的助记符和使用格式,多数学生觉得没有挑战性,学习兴致不高。教师的教学效果不明显。C语言是一种编译型程序设计语言,它具有多种高级语言的特点,并且可以调用汇编语言的子程序。它与8051单片相结合得到的C51单片机使用范围广,可移植性强;且C语言与生俱来的模块化特性使开发出来的程序模块可不经过修改,直接被其它项目所应用,从而最大程度的实现资源共享;C语言开发的代码便于开发小组计划项目,灵活管理,分工合作以及后期维护;C语言还比较好入门,只需掌握一些基本的语句就能编写简单的程序。初学者不熟悉单片机的指令集,也能够编写完美的单片机程序;不理解单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序。随着企业对C51单片机的推广和应用,一些高校也开始相应地调整了单片机的教学内容和教学方法。教师在进行理论教学时除了要讲解单片机的结构外,还要讲解C语言,还有一些学校添加了相应的仿真模拟设备。但是学生对单片机的学习兴趣提高不明显。
二、从培养学生竞赛的角度出发,进行C51单片机理实一体化教学
省市级的单片机竞赛题都是给出一个工程具体的项目让学生在短时间内去解决。学生需要进行需求分析、模块选择、线路连接和程序调试。为此,从培养学生竞赛的角度出发,提出C51单片机理实一体化教学模式的新思路如下:首先,教学方法,教学时,主要采用讲授法与问答法、演示法等教学方法。但要注意多留给学生一点时间让他们自己去编程。其次,教学设备,所需要的教学设备主要有电脑、开发板等。开发板的功能不需要太全面只需具有流水灯、数码管、独立键盘、矩阵键盘、AD或DA、液晶、蜂鸣器即可。最后,教学内容,教学时将C51的知识分为六个部分来讲解。每一部分教师既要讲解C51单片机相应的硬件结构,又要讲解软件编程,并让学生进行仿真,建议采用理实一体化教学模式。这六部分如下:⑴C51的编程软件Keil和仿真软件Proteus。该部分主要是让学生熟悉软件编程的工作环境、操作界面,学会设置与编程有关的一些参数以及如何将两者结合起来进行仿真;⑵51单片机I/O口的应用、数据的串并行传输和C语言基本语句。C语言中的基本语句if、while、switch/case等运用很广泛,学生掌握了这些语句就可以编程。51单片机I/O口的应用、数据的串并行传输是重点,讲授时可以先让学生掌握这些理论的知识再进行编程,或者先选出一个端口来进行软件编程,再讲解他们的硬件结构让学生自己去编程;⑶LED和数码管的显示。简单的单片机多用于控制一些LED和数码管,而程序是否正确也要通过数码管来体现;⑷内部定时器与中断。中断在单片机中非常重要;⑸键盘。这一部分内容包括键盘的结构原理、软硬件去抖动等相关的知识;⑹A/D,D/A转换。在键盘的基础上,若要显示时间,但时间不太准确,就需通过键盘来调节,我们可以先设置键盘上的键的作用。以上这些内容基本涵盖了单片机的软、硬件最关键的内容,其他一些比较复杂的控制系统都以此为基础,学生在做其他课题时,可以先搭建这些框架,在再进行其它功能的添加和修改。
三、C51系列单片机的应用
篇8
关键词:单片机;实训设备;编程语言
一、选择合适的实训设备
不一定需要买数千元以上的实训设备。像STC89C52等51单片机价格仅几元钱、可以反复烧写程序,最适合初学者入门。在淘宝网上可购买相应的实训板,其价格低廉,有配套的例程、视频教程和相关开发软件,功能也很强大,可以达到和数千元设备一样的实训效果。
二、选择编程语言
单片机编程语言有汇编语言和C语言两种。汇编语言要求编程者对寄存器的地址非常清楚,指令较多,中职学生很难入门。而C语言灵活、编程思路符合人们的思维习惯,很容易实现模块化编程,可供参考的程序示例也很多,可移植性强,所以要采用C语言编程。编程环境一般都采用传统的 keil uvision 4或其他版本。
三、循序渐进做好入门五步
1.做好第一个C51工程(点亮一个灯)
所谓做好第一个C51工程,就是通过点亮一个LED来使学生学会“了解单片机的I/O口搭建硬件电路启动keil uvision 4并进行设置建工程、命名、保存建.c文件、命名、将.c文件添加到工程中去输入用‘位操作’点亮一个LED的程序代码(注:代码只有几行,这里不要求学生理解代码的含义,只要求知道一个C51工程的基本结构)编译烧写程序到单片机观察效果在此基础上,再讲解代码的含义”。
第一个C51工程很简单,但也很关键。做好了第一个C51工程,可以使学生掌握开发一个工程的步骤,激发学生的好奇心并增强自信心。
巩固与提高:指导学生做好“操作单个端口(位操作)”同时点亮多个灯的实验,再讲清10进制、16进制、二进制数的含义和相互转换的方法,再指导学生做“操作一组端口(字节操作)”,同时点亮多个灯的实验。这时学生就能感受到已站在“入门的门槛上”了。
2.让灯眨眨眼―― 一只脚踏进单片机的大门
给学生讲清一个带参数的延时函数,学生就能够在第一个工程的基础上编程控制灯,并周期性地点亮、熄灭。
巩固与提高:学生独立做多个灯的亮、灭闪烁实验,可以用位操作或字节操作,但因为用字节操作程序简洁一些,所以提倡该方法。
3.学会花样流水灯――真正入门
该实验可以把C51的基本知识――常量、变量、数据类型、运算符、语法、语句全部用到,还会用到单片机的定时器,学会配置寄存器的基本方法。
这部分要采用即学即用的方法。将C51的知识分解成若干个小模块,每讲一个小模块,就指导学生用该模块的知识做一个流水灯的实验,这样,学生更容易掌握,并能够及时看到成果。具体做法是:
(1)先让学生分别用位操作、字节操作实现流水灯,并进行复习、巩固。
(2)学习库函数后,用循环移位库函数实现流水灯。
(3)学习if语句、swtich...case语句后,分别用这两个语句实现流水灯。
(4)学习数组、指针后,分别用数组、指针实现流水灯。
巩固与提高:指导学生完成数码管的静态显示和动态显示。动态显示有一定的难度,老师可以讲解典型范例,使学生理解,然后改变硬件的接线、改变显示的内容,让学生自己完成,这样可使学生真正掌握。
到达这里,学生就算入门了。然后指导学生学习单片机的器件(如小型液晶屏、温度传感器、各种电机、AD/DA模块等),并用这些器件和单片机组合来模拟很多产品(如微波炉、豆浆机、生产线等)的设计,使学生综合编程能力在实战中得到实质的提升。
四、初学者学习单片机的方法与技巧
1.记忆
对C51的规则、语法、语句要记忆。在实际应用中可以使记忆更加牢固。
2.对关键状态的处理
首先阅读项目任务书,搞清楚产品的工作过程,特别要搞清楚工作过程中有哪些关键时刻(状态)。用标志变量赋不同的值(如a=1;a=2;…)或者给不同的标志变量赋一个值(如a=1;b=1;…)表示这些关键状态,有利于编程时对这些关键状态的表述。这是解决复杂问题的关键措施之一。
3.仿写
当找不到编程思路时,可以看别人写好的例程,找到思路后,再自己独立地完成仿写,这样可使自己较快地解决问题,增强信心。坚持下去,就会逐步形成自己的编程思想。
4.对单片机的器件的使用
应阅读其资料,大致了解,再结合例程(网上一般都有)进行套用,只需修改部分参数或部分代码就可符合自己的需求,这是快速应用的技巧。
5.精炼、高效
对自己的代码,要反复检查,删掉多余的语句,使代码更精炼、更高效,还要考虑用其他的思路来实现本项目。要保存自己成熟的代码,以便移植到其他项目中去。
篇9
关键词:单片机技术;教学改革;培养兴趣;教学手段;实践应用
【中图分类号】TP368.1-4
1引言
“单片机技术及应用”是大学计算机科学与技术专业的一门专业必修课程,对于高校学生来说,学习该课程是初步认识单片机的整体设计过程,为将来从事信息系统工作及电子产品的设计、检测和维修奠定坚实的基础,具有不可替代的作用和意义。
2培养学习兴趣
单片机技术与应用课程是大四学生需要学习的一门专业课程,因此在课堂教学过程中,教师要结合学生的培养目标、就业方向,从实际出发,注重理论基础与实际应用的结合,多给学生展示单片机广阔的应用前景和具体产品,使他们体会到单片机技术在以后的工作生活中都具有很强的实用性,认识到单片机技术强大的潜能和发展空间,从而激发他们学习的兴趣和求知欲。
2.1 联系实际
为使学生更好的接受抽象的知识,在讲述具体内容之前,可以列举大量单片机的应用实例。如在日常生活中常见的洗衣机、冰箱、热水器和空调等家用电器的智能化控制[1],这些都离不开单片机。抽象的教学内容与身边活生生的应用实例相结合,给学生一个看得到、听得见、摸得着的学习目标,大大提高了学生学习单片机的兴趣。
2.2 组织竞赛
学以致用是教学的根本目标,结合新形势下教育目标模式转型,对学生的培B重在能力的培养,这就需要给学生一个平台,让学生自己去动手、去实践。单片机课程为学生安排了对应的实验课程,但这在实际应用中是远远不够的,因此可以组织一些电子设计大赛,让学生积极的参与其中,为其学习兴趣的培养提供一个积极的推进作用,大大激发学生的学习主动性。
3优化教学内容
3.1 紧跟时代步伐
在课堂教学中,教师应选用应用广泛、实用性好、易学易懂易掌握的优秀教材。但教材往往是落后于科技发展的,所以教师还要了解单片机技术的发展现状以及前沿技术,根据实际需要,在课堂上适时适当地向学生补充当前使用比较热门的硬件接口和软件编程技术,了解当前有关单片机的新信息、新技术和新发展,来拓宽学生的知识面,延伸和补充课堂之外的教学内容,让学生紧跟时代步伐。
3.2 选取合适的编程语言
单片机课堂教学注重的不只是基本原理的讲解,更多的是应用设计。单片机教学通常采用纯汇编语言教学,这需要有前导课程“微机原理及应用”所学习的汇编语言作支撑,而在教学过程中,学生普遍认为汇编语言不易掌握,并且目前在实际的单片机应用项目开发中,使用较多的开发语言并不是汇编语言,而是单片机C51语言。单片机C51语言是由C语言继承而来的。因此,可以将“微机原理及应用”与“单片机技术及应用”进行整合,在单片机编程设计上以C51语言为主,特别注意C51与C语言的区别,以汇编语言为辅的形式进行讲解,降低由语言选择带来的编程难度,提高教学质量。
3.3 选取适合的软件平台
与C语言不同的是,C51语言运行于单片机平台,而C语言则运行于普通的桌面平台。因此,可以采用专门针对MSC-51系列单片机的软件开发平台Keil C51,以加强培养学生对C51的编程能力。在选用实验箱时,还要考虑到培养学生的创新能力要求,尽量使用具有现在先进技术接口的实验箱,通过课程设计或毕业设计积极引导学生使用C51开发语言进行相关软件设计,设计难度明显减小,程序也更加简洁清晰[2]。
4丰富教学手段
新型人才的培养最重要的是能力的培养。知识转化为能力必须通过实践,实践性教学结合理论与实际、综合思维和感官、提高个性与社会化水平,是培养学生创新意识和创新能力的重要途径。因此,在高校单片机的课程教学中,一定要从实际需要出发。
4.1 借助多媒体教学手段
单片机课程内容抽象,要在有限的课时内讲深懂、讲透课程内容,依靠传统的教学手段很难实现,这就需要教师精心设计讲解内容,制作生动形象的多媒体课件,将抽象难懂的概念具体化、形象化,单调枯燥的理论多样化、生动化,将重难点知识内容通过多媒体进行演示,可以加深理解,便于记忆。
4.2 利用仿真软件演示
在单片机应用开发过程中,更侧重于硬件设计。而在单片机教学过程中,由于硬件条件或时间条件的限制,教师在课堂上很难向学生直接具体的展示硬件设计的整个过程。而在实践教学过程中,可以有效利用仿真软件来达到更好的教学效果。Keil-C51和Proteus professional的出现可以满足对单片机进行随堂编程和电路仿真的需求。Keil软件为项目的开发制定了一套完整的方案,学生在使用时可以直接进行编程,编译和仿真方面的练习;Proteus是集电路分析和硬件电路仿真于一体的软件,可以很好的实现一个完整的电路设计系统。
5 提高教师的业务能力
5.1 及时补充新知识
要培养高素质的学生,必须要有高素质的教师队伍,授课教师应紧跟软硬件技术的发展动态,不断学习充实自己,才能够胜任工作的需要,才能跟上时代的步伐。单片机的发展速度较快,利用单片机技术来进行产品开发、控制系统设计的过程中,需要用的知识较多,这就需要教师具有电子产品研发和工程实践的经验,否则就无法使学生对该课程产生深刻的理解。
5.2 提高科研能力
教师在课堂上的旁征博引,大都以科研经验为背景,正所谓见多识广,见得多用得多,自然能够讲的深入浅出、得心应手。教学和科研是相辅相成的,教学是科研的基础,科研是教学的提高,教学与科研的这种关系,反映了教学与科研的内在联系,决定了高校离不开科研的职能。用科研实例的形式来调动学生学习的积极性、主动性,培养学生的创新能力。
6 总结
“单片机技术及应用”是一门应用性极强的课程,随着单片机新技术的飞速发展,给单片机课程内容本身增了很多新的元素。而对于高校来说,教育的基本任务是从学生原有基础和身心发展特点出发,使他们的素质获得发展,逐步适应社会建设和发展的客观需要。因此高校教师在教学过程中,要不断探索研究行之有效的方法措施,紧紧抓住“应用”这个纲领,注重学生实际设计能力的培养,实现教与学的最佳统一。
参考文献:
篇10
【关键词】单片机 LED 电子烟花 软件编程
1 引言
当今社会,在喜庆的日子里,燃放烟花已经成了必不可少的项目,但燃放烟花爆竹带来的危险事故也不计其数。近年来出现了一种安全环保的电子烟花,然而市场上电子烟花点火电路大多是电路设计负责、涉及元器件众多。所以笔者提出以单片机为控制核心,用LED模拟普通烟花引线燃烧过程来实现电子烟花的点火过程,且成功完成硬件到软件的设计研制出完整的电子烟花点火部件。由于单片机体积小、质量轻、价格低、可靠性高、灵活性好、编程开发较为容易等有点,所以此项工作有较广阔的应用前景。
2 设计思路
(1)为了能更好的欣赏烟花绚丽效果,点燃烟花通常是发生在无光的夜晚,所以可采用光敏电阻将点火者发出的光信号转换为启动电子烟花的电信号。
(2)单片机内部烧写的程序处于查询状态,一旦接收到启动电子烟花的电信号立即执行LED流水灯程序模拟引线燃烧,之后再发出打开电子烟花的数字信号(如控制继电器)。
(3)可用较多的LED固定为长条引线状(本次实验用8个LED与单片机P1.0-P1.7八个I/O口相连)
(4)将光信号转换为电信号的模拟电路部分,可以采用光敏电阻的分压来实现,在未点火情况下,光敏电阻阻值很大,大部分电压被光敏电阻分得,常值电阻分压很小(小于0.5伏,无法启动单片机);在点火情况下,在光源照射下,光敏电阻阻值减小(远小于常值电阻阻值),导致5伏电压的分压大部分将在常值电阻上(单片机接收到高电平信号,启动点火装置)
(5)编程实现流水灯和启动信号的发出,软件模块化,方便调用,循环结构体保证可循环重复使用(详见单片机控制LED源程序)
3 硬件设计
本装置的硬件设计分为将光信号转换为电信号的转换模拟电路和单片机最小应用系统的设计。
3.1 转换模拟电路的原理及实现
将5伏电压经光敏电阻和常值电阻分压,如图1所示,选择型号为MG44-3的光敏电阻(亮阻值≤5KΩ,暗阻值≥1MΩ,以下记为R2)和阻值为20KΩ的常值电阻(以下记为R1)连接如图所示,通过简单计算可知在无光黑暗条件下R2的阻值是R1阻值的50倍以上,即在R1上的分压小于0.1伏,单片机识别为低电平信号不启动装置;反之,在点火条件下光敏电阻受到光照,阻值急剧下降(≤5KΩ),此时R1的阻值为R2阻值的4倍以上,记载R1上的分压大于4伏,单片机识别为高电平信号启动装置,模拟烟花点火引线燃烧的过程,并启动电子烟花开关。
3.2 单片机最小应用系统设计
因为市场上单片机开发板价格偏高,所以本装置采用购买基础元器件和单片机芯片自主设计并焊接单片机最小应用系统。单片机要正常工作,必须具有5个基本电路:电源电路、时钟电路、复位电路、程序存储器选择电路、电路。
本装置的单片机最小应用系统设计如图2所示,电路焊接顺序依次为:振荡电路、复位电路、电源电路、电路、程序存储器选择电路。按顺序完成焊接,将3.1中设计的分压转换模拟电路和3.2中设计完成的单片机最小应用系统按图2所示连接,并在通用板上焊接固定。
4 软件设计
4.1 软件编程(本文采用C语言)
因为本装置使用LED模拟烟花引线点燃后燃烧过程,所以编程设计只需简单的给单片机I/O口输出高低电平就能取得满意的效果。具体C语言源程序给出如下:
4.2 LED显示图案改进
为吸引烟花观赏者,增强LED显示效果,将简单的流水灯显示加以改进。最简单的方法是改变各个LED发光顺序和发光持续时间,如可以让序号为奇次的和偶次的LED交替发光,形成动态闪烁的效果。其软件编程都可以使用汇编语言或Keil软件公司的C51语言编写调试。
5 结语
由于LED具有亮度高、低热量、体积小、功率低、使用寿命长、环保和响应速度快等系列优点广泛应用于照明和电子图案显示市场,具有广阔的发展前景。单片机渗透到我们生活的各个领域,某些专用单片机设计用与实现特定功能,从而在各种电路中进行模块化应用,本文所述的基于单片机控制的电子烟花点火电路方案只是该模块化电路的一个应用方面,对很多应用和设备都可以将该装置作为启动或报警电路,例如光电信号转换在火灾报警器中的应用。
参考文献
[1]樊梅香,崔琳.单片机控制LED显示屏动态显示的设计[J].河北工业科技,2011.
[2]何立民.MCS-51系列单片机应用系统设计[M].北京:北京航空航天大学出版社,1990.
[3]李华.MCS-51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1993:561-571.
[4]刘昆山.用单片机控制一个LED[J].电子制作,2010-02-01.
[5]乔月.基于光电检测技术的光盘刻录演示系统研究[D].长春:长春理工大学,2012.
[6]朱美杰.感应式无线充电技术的研究[D].南京:南京信息工程大学,2012.
- 上一篇:stc单片机
- 下一篇:单片机原理及接口技术