单片机编程篇1
最好的莫过于在Linux下具有一个可供利用的完整编程环境:你可以采用GCC对这种单片机进行C语言编程.本文我将向你讲述如何安装和使用GCC.我也将向你讲述如何把软件载入单片机.你所需要的只是一块AT90S4433单片机,一个4Mhz的晶震,一些电缆和少量其它便宜的部件.
这篇文章只是一个简单介绍.在以后的文章种我们将会制作一个具有少数按键的LCD显示屏,模数输入,硬件狗和一些LED.我们的想法是做一个普通的Linux服务器的控制面板,不过我们先要学习怎么配置编程环境,这也是本文的主要内容.
软件安装:哪些是你所需要的采用GNU C语言开发环境你需要下列软件:
binutils-2.11.2.tar.bz2可以从:
ftp://ftp.informatik.rwth-aachen.de/pub/gnu/binutils/
或者
ftp://gatekeeper.dec/pub/GNU/binutils/***gcc-core-3.0.3.tar.gz可以从: ftp://ftp.informatik.rwth-aachen.de/pub/gnu/gcc/
或者
ftp://gatekeeper.dec/pub/GNU/gcc/***avr-libc-20020106 .tar.gz这个AVR C语言库可以从: amelek.gda.pl/avr/libc/ 也可以从这个服务器***:***主页 uisp-20011025.tar.gzAVR编程器可以从: amelek.gda.pl/avr/libc/ 也可以从这台服务器***: ***主页 我们把所有这些程序安装到/usr/local/atmel下. 这是为了使这些程序和普通Linux C语言编译器分开. 用下面的命令建立这个目录: mkdir /usr/local/atmel
软件安装:GNU binutils这个binutils软件包提供建立目标文件所需要的所有低级工具.它包括一个AVR汇编器(avr-as),连接器(avr-ld),库处理工具(avr-ranlib,avr-ar),生成可载入单片机EEPROM目标文件的程序(avr-objcopy),反汇编器(avr-objdump)和象avr-strip和avr-size这类的工具软件.
运行下列命令编译安装binutils: bunzip2 -c binutils-2.11.2.tar.bz2 | tar xvf -
cd binutils-2.11.2
./configure --target=avr --prefix=/usr/local/atmel
make
make install
添加/usr/local/atml/lib这行到/etc/ld.so.conf文件里面,运行/sbin/ldconfig命令重建连接器缓存. 软件安装:AVR GCC编译器avr-gcc将是我们的C语言编译器.
运行下列命令编译安装这个编译器: tar zxvf gcc-core-3.0.3.tar.gz
cd gcc-core-3.0.3
./configure --target=avr --prefix=/usr/local/atmel --disable-nls --enable-language=c
make
make install
软件安装:AVR C语言库这个C语言库仍在开发中.安装过程可能版本与版本之间有些细微的差别.如果你想照着本文一步一步做的话我推荐采用上表列出的版本.上表中的软件我已经做过测试了,本文中我们所写的程序和后面的文章中的程序都在上面这个版本上工作得很好. 设置一些环境变量(bash语法):
export CC=avr-gcc
export AS=avr-as
export AR=avr-ar
export RANLIB=avr-ranlib
export PATH=/usr/local/atmel/bin:${PATH}
./configure --prefix=/usr/local/atmel/avr --target=avr --enable-languages=c --host=avr
make
make install
软件安装:编程器这个编程器将指定的准备好的目标代码载入到我们单片机的EEPROM中.
这个Linux下的uisp是一个非常好的编程器.可以直接用在Makefile里面.你只要添加"make load"规则,这样你就可以编译载入软件一次完成.
uisp按照下面这样安装: tar zxvf uisp-20011025.tar.gz
cd uisp-20011025/src
make
cp uisp /usr/local/atmel/bin
一个小的测试工程我们将以一个小的测试电路开始.这个测试电路的目的仅仅是测试我们的开发环境.我们用它来编译,***以及测试一个小程序.这个测试程序仅仅是引起LED闪烁.
我建议给这个单片机弄一个小的印刷电路板.以后你就可以在这块电路板的区域做你自己的试验.一个好办法是用一个模拟板当作这个.你无论如何也不能尝试着把AVR和它的4MHz晶震直接放在模拟板上.更好的办法是用少量的短线把输入和输出脚与模拟板相连,因为这样的模拟板不是为快速数字电路制作的. 4Mhz的晶震和电容器在物理上应该非常靠近单片机.
在我们这个例子里编程器的连接器电阻实际上是不必要的.只有在你打算把port-B 输入输出脚用于其他目的时才需要. 需要的硬件你需要的部件列在下表中.所有的这些都非常普通,便宜,只是单片机贵点,大概7.5欧元.尽管它是非常普通的单片机,它也不是随便在那家当地的无线电商店就能买到的,象那些大的电子部件销售商例如:(reichelt.de(德国),conrad.de(德国),selectronic.fr(法国)等等........,可能在你的国家这些类似的站点)的仓库里才有全部的部件. 1 x AT90S4433, Atmel 8 位AVR RISC处理器. 2 x 14脚 IC插槽
或者
1 x 28 脚 7.5mm IC插槽
这种28脚插槽要找到有点点困难,通常28脚插槽是14mm宽的,但是我们需要的是7.5mm的插槽. 1 x 10K 电阻 (颜色代码: 棕,黑,橙)
3 x 470 欧姆 电阻(颜色代码:黄,紫,棕)
1 x 1K 电阻 (颜色代码: 棕,黑,红)
1 x 220 欧姆 电阻 (颜色代码:红,红,棕)
1 x 4Mhz 晶震
2 x 27pf 陶电容 用于编译器的任意种类的5脚插头/插座.我们通常买些连接器条,然后5个折成一段. 聚酯板. 1 x DB25 连接器 用于插到并口. 1 x LED 一块模拟板. 我们在这里不用,但是如果你想做将来的AVR实验这是非重有用的.我建议你把微控制器与晶震和电容集中在聚酯板上,然后通过短电缆把它们的输入/输出脚连接到模拟板.除开上面的这些,还需要提供一个稳定的5V直流电源,你也可以采用4.5V的电池作为电源供应. 安装编程器硬件AT90S4433支持***编程(ISP).
简单说就是:你没有必要为了给单片机编程而移动单片机模块.你会看到可以用50-150欧元买到做好的编程器硬件,但没有必要为一个编程器更多地投资.采用Linux,uisp软件和免费的并口你就可以建立起一个非常好的简单的AVR编程器,也就采用一根简单的电缆连接而已.编程器电缆的线必须符合下列要求:
AVR端针脚并口端针脚SCK (19)Strobe (1)MISO (18)Busy (11)MOSI (17)D0 (2)Reset (1)Init (16)GNDGND (18)
电缆长度不超过70cm. 写入软件在GCC的帮助下AT90S4433可以用一般的C语言编程. 了解一些AVR汇编很有用,但也不是非要不可.AVR C语言库的avr-libc-reference 讲述了libc的大部分函数. Harald Leitner写了一个关于如何使用AVR和GCC的带有大量有用的例子的文档(haraleit.pdf, 286Kb, 原作 avrfreaks/AVRGCC/). 从Atmel公司的网页, (atmel, 找到: avr products -> 8 bit risc-> Datasheets), 你可以***完整的数据资料 (复制到本地: avr4433.pdf, 2361Kb) . 它描述了所有的寄存器以及如何使用CPU.
使用4433的时候有一点要注意的是它只有128字节的RAM和4K字节的EEPROM.这就意味着你不能定义大的数据结构和字符串.程序中不能采用深入的嵌套调用或者是递归调用. 就像写
char string[90];
这样一行就已经太大了. 一个整数是16bit,如果需要一个小的整数你可以采用
unsigned char i; /* 0-255 */
你将非常惊讶你的程序是多么大.它真是一个强大的处理器.
理论不如实践,我们将写一个程序让我们的LED每隔0.5秒闪烁一次.虽然不是很有用不过也是一个非常好的开头,而且可以用来测试我们的开发环境和编程器. void main(void)
{
/* enable PD5 as output */
sbi(DDRD,PD5);
while (1) {
/* led on, pin=0 */
cbi(PORTD,PD5);
delay_ms(500);
/* set output to 5V, LED off */
sbi(PORTD,PD5);
delay_ms(500);
}
}
上面的例子可以看出用它写个程序是多么简单.你看到的仅仅是主程序,delay_ms函数包含在全部的清单(avrledtest.c)中. PD5脚用作输出的话,你必须在数据寄存器中为D端口(DDRD)设置PD5位.然后就能用cbi*(PORTD,PD5)函数给PD5设置0V电压(清除PD5)或者用sbi(PORT,PD5)设置5V电压(设置PD5)."PD5"值的定义包含在通过io.h包含的io4433.h中.你不用担心这点. 如果你曾经在象Linux这样的多用户多任务系统下写过程序的话你就知道绝不要写一个非模块化的无穷的循环.这会浪费CPU时间,减慢系统速度.在AVR上就不一样了,我们没有多个任务,也没有其他程序在运行,这甚至不是一个操作系统,在这上面运用无穷循环显得很普遍. 编译和载入在开始之前确认一下PATH中包含了/usr/local/atmel/bin路径,必要的话编辑你的.bash_profile或者.tcshrc,添加如下内容: export PATH=/usr/local/atmel/bin:${PATH} (for bash)
setenv PATH /usr/local/atmel/bin:${PATH} (for tcsh)
我们用并口和uisp来为AVR编程.uisp使用内核的ppdev接口,因此你必须已经载入了下列内核模块: # /sbin/lsmod
parport_pc
ppdev
parport
用/sbin/lsmod命令检查是否已经载入,如果没有就以root用户载入它们.
modeprobe parport
modeprobe parport_pc
modeprobe ppdev
一个比较好的办法是在启动的时候就自动执行这些命令.你可以把这些命令添加倒rc脚本中(例如:Redhat下的/etc/rc.d/rc.local).
为了给普通用户ppdev接口写权限,运行一次下面的命令: chmod 666 /dev/parport0
确保没有在并口上的打印守护进程运行.如果你运行了就要在你连接编程器电缆前停止这个进程.现在编译和单片机编程的所有准备工作都做好了.
我们的测试程序包(avrledtest-0.1.tar.gz) 里面有个编译工程文件文件.你要做的只是输入:
make
make load
T这样就编译和载入软件了.我并不想详细描述所有的命令. 你可以打开那个 Makefile 查看,它们都是一样的.我自己都不能把它们完全记下来.我只是知道我只需要做"make load".如果你想写不同的程序你只要把Makefile中所有出现avrledtest的地方用你的程序名字替换就行了. 一些有趣的binutils比实际编译过程更有趣的是一些小工具软件. avr-objdump -h avrledtest.out
S显示程序的不同段的大小..text是调入falsh EEPROM的指令代码,.data是象
static char str[]="hello";
这类的初始化数据..bss是非初始化全局数据,在我们这个里面全是零..eeprom用于存储倒eeprom的变量,我从没有用过这个..stab和.stabstr是调试信息,不会载入AVR的. avrledtest.out: file format elf32-avrSections:Idx Name Size VMA LMA File off Algn 0 .text 0000008c 00000000 00000000 00000094 2**0 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00000000 00800060 0000008c 00000120 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00800060 0000008c 00000120 2**0 ALLOC 3 .eeprom 00000000 00810000 00810000 00000120 2**0 CONTENTS 4 .stab 00000750 00000000 00000000 00000120 2**2 CONTENTS, READONLY, DEBUGGING 5 .stabstr 000005f4 00000000 00000000 00000870 2**0 CONTENTS, READONLY, DEBUGGING你也可以用avr-size命令得到一个更精简的形式: avr-size avrledtest.out
text data bss dec hex filename 140 0 0 140 8c avrledtest.out在AVR上工作你必须特别注意.text+data+bss不超过4K,data+bss+stack(你可以不考虑stack的大小,它取决于有多少嵌套调用)不能超过128字节.
单片机编程篇2
关键词:单片机;梯形***;结构化数据;自编程
中***分类号: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更清晰彼此间的作用机制。
结论
本文设计基于单片机开发智能控制器,实现内核程序与用户控制逻辑分离,控制逻辑通过梯形***编辑工具编译与***,控制目标的变更,只需修改梯形***逻辑即可实现。此设计方案成功应用在江苏盐城供电公司东郊变、安泰变环境监测与报警,智能排水不同控制目标。
单片机编程篇3
关键词 单片机 C语言 规范性
中***分类号:G424 文献标识码:A DOI:10.16400/ki.kjdkz.2015.08.062
On the C Language Programming Normative in MCU Course
HUANG Xiaofeng
(Advanced Vocational Technical College, Shanghai University of Engineering Science, Shanghai 200437)
Abstract: For "SCM C language programming" teaching in programming problems, he attached importance to guide students in teaching practice modular, standardized program design emphasizes standardized programming for students to understand the structure and function of the program's important role and throughout the Teaching has always been, so that students micro controller applications has been greatly improved.
Keywords: SCM; C language; normative
0 引言
单片机技术课程一直以来作为高职计算机应用、电气自动化、应用电子技术等专业的主干课程。通过对单片机技术职业岗位需求分析可知,高职毕业生从事与单片机相关的职业技术岗位,主要有硬件测试工程师、软件测试工程师、硬件设计助理工程师、软件设计助理工程师等工作岗位。目前高职单片机课程多以MCS51系列为主,学生踏入工作岗位后,会涉及到其他各种类别的单片机,如AVR、MSP430、PIC等。由于软件编程灵活性强,对逻辑思维能力要求高,在单片机教学中学生普遍反映编程时无从下手,程序调试错误百出,面对调试中出现的问题不知如何修改验证,上机编程的教学实践过程更多则沦为代码录入。本文针对“单片机C语言程序设计”教学中存在的编程困扰,提出在教学实践中重视引导学生进行模块化、规范性程序设计,培养学生良好的编程习惯,提高程序的易读性、可移植性,为将来步入职业技术岗位打下坚实基础。
1 单片机C语言编程的规范性
以Kei C51软件编程为例并结合多年的教学经验,将单片机C语言编程的规范性主要归纳为:(1)文档的规范性;(2)变量、函数的规范性;(3)程序书写的规范性;(4)模块化编程等四个方面。
1.1 文档的规范性
任何一个单片机C程序都应该在工程下进行编译和管理,一个工程可以包含多个C文件,不同的C文件分别实现一个相对***的功能。在单片机课程教学中部分学生一开始就忽略了工程的概念,或者通过一个C文件试***实现所有功能,这在功能较为单一的系统中是可行的,但稍微复杂一点的系统要想通过一个程序来完成其所有功能,程序的可读性和可移植性就会变差。因此,在编程之初就要强调工程对C程序源文件的管理作用,以及工程所包含的各个C文件之间的相互关系,并通过对C文件规范化的命名体现其功能,如键盘模块命名为key.c,显示模块命名为display.c,数据处理模块命名为datapro.c。
1.2 变量、函数的规范性
变量、函数的规范主要体现在命名的规范,一般要符合匈牙利命名规范。如表1所示,主要注意字母的大小写是有区分的,取名要与变量或函数的含义或完成功能相一致,并且要在教学中一直贯彻使用,望文生义以增强易读性。
此外,由于单片机头文件对一些常用的符号变量和特殊功能寄存器进行了定义声明,因此编程时对相关符号变量和特殊功能寄存器的操作一定要与头文件中的定义声明保持一致。如51单片机reg51.h头文件对端口(P0~P3口)、特殊寄存器、特殊的位、中断函数等做了定义声明,用户在对相关端口或SFR进行操作时只能严格的按照头文件中的声明使用,不能按照自己的想法随便更换名字,否则会造成编译出错,如果要想按照自己的习惯书写,要重新声明定义。如P1.0口在<reg51.h>定义为P1^0,若想用P1_0表示则必须用“sbit P1_0=P1^0;”作声明。常用的51系列单片机在KeilC51软件中的一些定义格式如表2所示。
表2 <reg51.h>或<reg52.h>头文件中常用的一些定义
3 模块化编程
模块化、规范化的程序设计,是提高程序的易读性、可移植性和复用性最为重要的手段。模块化程序设计的集中体现为六个字即“高内聚低耦合”。按照自顶向下的原则进行程序设计时,首先是引导学生进行系统功能分析,按照“低耦合”的原则进行软件模块的划分,勾勒出由主程序及各模块子程序搭建的大骨架、粗线条轮廓,继而深入到各个软件模块内部,依据“高内聚”的原则确定模块内程序结构。
以单片机无线多路温度采集系统为例,简单介绍软件编程的具体思路。如***1所示,无线多路温度采集系统主要包括单片机、温度数据采集、无线信号传输、键盘与显示器等模块,完成四路温度数据采集,并在液晶屏上显示实时温度信息。
***1 温度采集系统硬件框***
***2 温度采集系统软件模块组成
在课程教学中,依据无线多路温度采集系统功能,软件编程划分为温度采集、按键控制、显示、无线通信等子模块。其中温度采集程序完成温度数据采集与处理,键盘控制程序键扫描及处理,LCD显示程序完成屏幕刷新,无线通信程序实现单片机与PC机间的数据交换。各模块功能单一,且模块之间无直接联系,通过主程序对各模块进行调用与协调完成系统功能,每个模块作为一个函数、或单独作为一个C文件,并通过主程序完成各模块文件的调用与协调,其关系***如***2所示。可以看到,模块与模块之间耦合度较低,有利于程序的维护与移植。
1.4 程序书写的规范性
程序书写的规范性能够极大增加了程序的易读性。主要体现在:采用空行或注释符号分隔程序段落;if、for、while、do等语句自占一行,执行语句不得紧跟其后;程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐;如果出现嵌套的{},则使用缩进对齐;一般重要的代码行或段落采用“//” 注释提示等。
单片机编程篇4
>> 单片机LED显示屏控制系统的设计与实现 基于单片机控制的LED点阵显示屏的设计与仿真 基于51单片机的LED点阵显示屏的设计 基于单片机的LED电子显示屏控制系统的设计 基于单片机的LED显示屏控制电路设计 基于AT89S51单片机的LED点阵显示屏设计 基于单片机的数字式LED多功能显示屏 教学用基于单片机的可编程控制器设计 基于单片机的可编程直流稳压电源设计 单片机与可编程控制器的串行通信设计 基于单片机的电子时钟和显示屏的设计 基于51单片机控制的液晶显示屏C程序设计 基于单片机的16*16点阵显示屏设计 LED显示屏网络直连的设计与实现 LED显示屏智能配置的设计与实现 基于单片机串行通信的LED点阵显示系统的设计与实现 基于单片机制作的简易LED显示屏 “TRIZ”理论在单片机实训教学中的应用尝试之《多功能全角LED点阵显示屏》教学工程实例的设计与实现 基于单片机开发可编程控制器的研究 基于单片机的教学用可编程控制器 常见问题解答 当前所在位置:l),该软件可以根据不同的选择得到汉字的不同字模,有颜色选择(黄、绿、红、粉、X、蓝色),字体样式(粗体、斜体、下划线、删除线)、显示形状(方形、圆形)、模式(A***、C51)、取模顺序(上下左右)、反色操作及字体按90°旋转显示,如***3所示。提取该汉字的字模到字模库中即可。
***3 字模提取软件
整个设计在Proteus中进行仿真,显示效果如***4所示:
***4 显示效果***
4 结束语
此LED汉字显示屏的设计简单,可以满足大部分汉字电子显示屏的设计要求,用户可以根据自己的需要在字模提取软件中提取汉字字模放入程序中的字模库编译后写入单片机后即可控制汉字电子显示屏显示。
参考文献:
[1]程国钢.51单片机应用开发案例手册[M].电子工业出版社,2011.
[2]刘继光.单片机应用技术[M].北京:北京邮电大学出版社,2013.
[3]陈龙三.8051单片机C语言控制与应用[M].北京:清华大学出版社,2009.
[4]王海欣,黄海宏.液晶显示器的汉字显示方法[J].液晶与显示,2005(02):155-157.
单片机编程篇5
基于SRAM(静态随机存储器)的可重配置PLD(可编程逻辑器件)的出现,为系统设计者动态改变运行电路中PLD的逻辑功能创造了条件。PLD使用SRAM单元来保存配置数据。这些配置数据决定了PLD内部的互连关系和逻辑功能,改变这些数据,也就改变了器件的逻辑功能。由于SRAM的数据是易失的,因此这些数据必须保存在PLD器件以外的EPROM、EEPROM或FLASH ROM等非易失存储器内,以便使系统在适当的时候将其***到PLD的SRAM单元中,从而实现在电路可重配置ICR(In-Circuit Reconfigurability)。
本文介绍笔者设计的PLD ICR控制电路,它不但线路结构简洁、开发容易、体积小、成本低,并且在***2介绍的ICR控制电路中,其存储PLD配置数据的FLASH存储器采用并行总线,交换速度较快。然而PLD配置数据较大,通常都在数十千字节以上。如何提高***2介绍的ICR控制电路的配置速度,使系统上电后的最短的时间内完成配置而进入正常工作状态,软件设计上的一个重点。
1 基于SRAM的可重配置CPLD的结构与原理
早期的可编程逻辑器件大多采用紫外线可擦除只读存储器(EPROM)和电可擦除只读存储器(EEPROM)方式。如GAL系列、EPF7064、EPF7128等。由于其结构简单、规模小,只能完成简单数字逻辑功能。此后,出现了一类结构上稍复杂的基于SRAM存储器的可编程芯片,即复杂可编程逻辑器件(CPLD),它能完成各种数字逻辑功能。
采用这些结构的可编程逻辑器件有ALTERA公司的FLEX、ACEX、APEX系列,XILINX公司的Spartan、Virtex系列。多年来,ALTERA公司一直致力于CPLD的开发。近几年,该公司又推出了很有竞争力的CPLD器件,即灵活的逻辑单元阵列的FLEX(Flexible Logic Element Matrix)系列产品。相对于其它一些厂家的FPGA产品来说,ALTERA公司的FLEX系列产品有其独特之处。这主要表现在高密度、***配置功能、高速度和连续式布线结构等方面。
查找表LUT(Look-Up-Table)是基于SRAM的可重配置PLD的一个重要组成部分,LUT本质上就是一个RAM。目前CPLD中多使用4输入的LUT,所以每一个LUT可以看成个有4位地址线的16×1bit的RAM。当用户通过GDF原理***或VHDL语言描述了一个逻辑电路后,CPLD开发软件会自动计算逻辑电路的所有可能结果,并把结果事先存入查找表。这样,当多信信号进行逻辑运算时就等于输入一个地址进行查表,找出地址所对应的内容,然后将其输出即可。
2 可编程逻辑器件的配置原理
首先在开发软件MAX+PLUS II的ASSIGN菜单下选择将要采用的基于SRAM的器件名称。经过编译、优化、逻辑综合、仿真等步骤达到设计要求后,软件会自动产生一个编程文件(扩展名为.SOF文件)。对于基于SRAM工艺的可编程逻辑器件(如ALTERA的所有FLEX、ACEX、APEX系列,XILINX的Sparten、Vertex系列),由于SRAM存储器的特点,掉电后数据会消失,因此在调试期间可以采用并口ByteblasteMV***电缆多次重复配置PLD器件。当电路设计成功,调试完成后,需要将配置数据烧写固化在一个由ALTERA生产的专用EEPROM(如EPC1441)中。上电时,由这片配置EEPROM先对PLD加载数据,几十毫秒后,PLD即可正常工作。
CPLD器件的工作状态分为三种:首先是上电配置状态(Configuration Mode),将编程的数据装入CPLD器件的过程,也可称之为构造;然后是初始化状态(Initialization Mode),在配置完成后,CPLD器件复位内部各类寄存器,让I/O引脚为逻辑器件正常工作做准备;最后是用户状态(User Mode),指电路中CPLD器件正常工作时的状态。
ALTERA公司具有ICR功能的PLD器件有FLEX8000、FLEX10K、APEX和ACEX系列,它们的配置方式可分为PS、PPS和JTAG(Joint Test Action Group)等方式。PS方式因PLD与配置电路的互连最简单,对配置时钟的最小频率没有限制而应用最广泛,因此在ICR控制电路中通常采用PS配置方式来实现ICR功能。
被动串行(PS)配置方式:在该配置方式下,由ByteblasteMV***电缆产生一个由低到高的跳变送到nCONFIG引脚脚复位PLD,然后将配置数据送到DATA0引脚,直到CONF_DONE引脚变为高电平。***1是PS配置方式的时序***。CONF_DONE变成高电平后,DCLK必须多余十个周期来初始化该器件。器件的初始化由***电缆自动执行。在PS方式中没有握手信号,所以配置时钟的工作频率必须低于10MHz。在多器件PS配置方式中,第一片PLD的nCEO引脚级联到下一片PLD的nCE引脚。在配置完第一个器件后,nCEO输出为低,使第二个PLD器件的nCE有效,开始对第二块器件进行配置。
3 用WINBOND78E58单片机配置可编程逻辑器件
用单片机配置可编程逻辑器件与上述PS配置方式原理一致,只需模拟PS配置方式中DATA0、DCLK、nCONFIG、CONF_DONE、nSTATUS引脚的配置时序,将配置数据串行移入PLD。配置引脚的功能如表1所示。
3.1 硬件设计
用单片机配置PLD,可以使用普通输入输出口或单行口。使用普通I/O口(如P1口),向PLD发送1Bit数据至少需要4个指令周期。一个指令给DATA0赋值,两个指令产生DCLK时钟,一个指令移位取数据。如果晶振为fosc,一个指令周期为12/fosc,因此它的***速率为fosc/48。然而如果采用串行口方式0,其***速率提高为fosc/12。考虑到PLD配置文件数据比较大,通常都在数十千字节以上(其配置文件大小如表2),为了加快配置速度,并适合各种不同规模的PLD,采用了WINBOND78E58单片机。
表1 配置引脚功能说明
DATA0输出配置数据DCLK输出配置时钟nCONFIG输出器件复位脚(该信号线的上升沿使配置开始)CONF_DONE输入状态位(在配置完成后,该信号线为高)nSTATUS输入状态位(如果该信号线为低,表明在配置过程中出现错误,需重新配置)表2 各种CPLD配置文件大小
器 件配置数据大小(Bits)配置文件大小(Kbytes)APEX 0K1000E
APEX 20K600E
APEX 20K400E
APEX 20K300E
APEX 20K200E
APEX20K100
EPF10K100E
EPF10K70
EPF10K40
EPF10K30
EPF10K20
EPF10K108,938,000
5,564,000
3,878,000
2,733,000
1,950,000
985,000
1,336,000
892,000
498,000
376,000
231,000
118,0001,029
680
474
333
238
121
164
109
61
46
29
15注:配置文件大小由.rbf文件决定
该单片机外接晶振最大频率为40MHz,它在串行口方式0下波特率可设置为fosc/4。另外通过设置特殊功能寄存器CKCON的MD0、MD1、MD2三位,可以将MOVX、MOVC等指令周期缩短至2个机器周期。与普通单片机相比,可使配置时间大为缩短。WINBOND78E58单片机内部拥有32KB FLASH ROM.由配置文件数据表2可知,只需一片单片机就可以对EPF10K20系列以下的PLD进行配置了。本系统中使用了一片APEX20K300E,因此在硬件电路设计中,扩展了一片WINBOND29C040 FLASH存储器(容量为512KB),其电路如***2。DATA0与RXD、DCLK与TXD、nCONF与P15、CONFIG_DONE与P16、nSTATUS与P17分别相连。
3.2 软件设计
在软件编程时,使用了串行口移位寄存器输入输出方式。本系统只需用到输出方式,串行数据通过RXD引脚输出,而在TXD引脚输出移位时钟。当一字节数据写入串行数据缓冲器SBUF时,就开始发送。在此期间,发送控制器送出移位信号,使发送移位寄存器的内容右移一位,直至最高位(D7位)数字移出后,停止发送数据和移位时钟脉冲。RXD、TXD时序如***3。由***3可知,它可以用来模拟配置时序。发送完一字节数据后,硬件置发送标志位TI为1,向CPU申请中断。若CPU响应中断,则从0023H单元开始执行串行中断服务程序。
为了提高配置速度,单片机程序用汇编语言编写。单片机上电后使nCONFIG脚由低到高复位待配置PLD;当判断到nSTATUS为高后,开始从外部FLASH存储器取数据串行移位。配置过程中,查询CONF_DONE。一旦为高,配置完成,但还要送40个DCLK脉冲,PLD才能进入用户工作状态。
用户设计PLD程序经MAXPLUS II或QUARTUS编译后将产生后缀后为.sof的SRAM目标文件。该文件含有除配置数据以外的控制字符,不能直接写入到PLD中去,需要利用软件的编程文件转换功能将文件转换成.rbf(Raw Binary File)十六进制文件。把.rbf文件烧写到存储器中,单片机通过MOVX指令读入后,串行移位到PLD。
部分asm语言源程序如下:
NCONFIG BIT P1.5
CONFDONE BIT P.6
NSTATUS BIT P1.7
ORG 000h
……
CLR ***0
CLR ***1 ;***0,***1为0,串口工作于方式0
CLR ***2 ;串口波特率为fosc/4
CLR REN
ANL 8EH,#0f8h ;地址8EH是CKCON单元,MD0、MD1、MD2清0
CLR EA
WJRESTART:CLR NCONFIG
SETB NCONFIG ;上升沿复位PLD
WAIT:JNB NSTATUS,WAIT ;NSTATUS为高,可进行配置
WJPEIZHI:MOV P1,COUNTER3
MOV DPH,COUNTER2
MOV DPL,COUNTER1 ;配置数据大,需3个单元作地址记数
MOVX A,@DPTA
MOV SBUF,A ;串行移位
NOP
NOP ;采用填充2个空指令,正好使一个字节发送完成,可发送下一个字节
INC COUNTER1 ;地址加
MOV A,COUNTER1
*** CONFDONE,WJEND1
CJNE A,#0,WJPEIZHI
INC COUNTER2
NOV A,COUNTER2
CJNE A,#0,WJPEIZHI
INC COUNTER3
LJMP WJPEIZHI
WJEND1:MOV R0,#60
WJEND:WOV A,#55H
……
MOV SBUF,A ;由此产生40个DCLK时钟
DJNZ R0,WJEND
单片机编程篇6
关键词:MCS-51单片机;汇编语言;C语言;教学探讨
中***分类号:G642.4 文献标志码:A 文章编号:1674-9324(2013)36-0259-02
一、引言
MCS-51单片机课属于嵌入式系统的基础专业课程,实践性很强[1]。其教学目前存在两种倾向:一种是采用传统的采用汇编语言教学;另一种是采用C语言教学。前者认为汇编语言贴近机器语言,有助于学生很好的理解单片机硬件资源;后者认为用C语言教学,能让学生掌握C语言在单片机中的应用。由于目前在嵌入式系统的工程项目开发中基本上都采用C语言,因此采用C语言教学,有助于学生尽快利用单片机进行相关工程项目的开发,使学生在日后的相关工作中尽早适应公司的需要,得到公司的认可。那么,在教学中到底如何处理语言的选择问题,本文就是基于这个问题进行探讨分析。
二、分析汇编语言的特性及应用
汇编语言主要特性表现如下:首先是汇编语言的可移植性和通用性差。汇编语言与机器的相关性很强,其指令是机器指令的一种符号表示。由于不同类型的CPU有不同的机器指令系统,从而其对应的汇编语言也是不同的,因此,汇编语言程序与机器有着密切的关系。对于同系列、不同型号CPU之间的汇编语言程序,它们有一定程度的可移植性,但对于其他不同类型CPU之间的汇编语言程序是无法移植的,所以说汇编语言程序可移植性比较差,即其通用性相对于其他语言(如C语言)来说比较差。其次是汇编语言执行的高效率。正是由于汇编语言与机器有很强的相关性,程序员用汇编语言编写程序时,可对机器内部的各种硬件资源进行合理的安排,使它们始终处于最佳状态。因此汇编语言程序代码能很好地对应机器内部资源,并可以对内部资源直接操作,相对于其他语言(如C语言)编写的程序,其程序执行代码短,执行速度快,执行效率高。再次是汇编语言编写程序的复杂性。由于汇编语言与机器的相关性强,因此是一种面向机器的语言。因为汇编语言的汇编指令与机器指令基本上一一对应,所以,汇编指令具有功能单一、具体的特点。要用这些简单指令完成某件具体任务,就要求对任务的每一个细节都进行具体细致的安排,那么编写出汇编语言程序一定比较繁琐、复杂,当然这也是相对于其他高级语言(如C语言)而言的。最后是汇编语言程序调试的复杂性。汇编语言程序调试的复杂性表现如下:
其一,由于汇编语言指令涉及到机器内部资源的具体细节,因此,要求程序员在编写具体任务程序前,首先必须清楚机器内部硬件资源,在程序的调试过程中必须清楚这些资源的状态变化;其二,为了很好地表示要完成的任务,程序员在编写程序时必须要用大量的各类转移指令,这些转移跳转指令将极大地增加了调试程序的难度。
综上,由于汇编语言的与机器相关性,使得它具有代码执行的高效性优势,但同时也引发其代码编写的复杂性,可移植性差和调试难等劣势。因此,在实际应用中汇编语言有其不可替代优势,有其在应用方面的复杂性。
三、分析C语言的特点及应用
标准C语言是一种不依赖于具体机器的智能化高级语言,易于学生接受学习。目前,C语言是世界上应用最广泛的几种计算机语言之一,国内工科院校普遍将其作为一种基础计算机语言进行教学。作为计算机基础语言,它有以下特点:
1.C语言简洁、紧凑,使用灵活、方便。C语言共有9种控制语句。由于引入结构化的控制语句(如for语句、while语句等),引入函数作为程序的基本模块,从而使C语言具有了结构化和模块化,使程序组织结构清晰,紧凑。C语言共有32个关键字,语法限制不太严格,区分大小写,主要用小写字母表示,程序设计自由度大,程序书写形式自由,使用方便、灵活。相对于其他高级语言,C语言简洁,源程序短,程序输入工作量少,使用灵活、方便。
2.C语言运算符和数据类型丰富。C语言运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理,使其运算符类型极其丰富。C语言丰富的运算符类型使其具备处理复杂运算的能力。C语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据结构的运算。
3.C语言可直接对硬件进行操作。由于C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作,因此它既有高级语言的功能,又有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
4.C语言生成目标代码质量高,程序执行效率高,可移植性好。相对于其他高级语言,C语言生成目标代码质量高,程序执行效率高。但相对于汇编语言,其生成的目标代码效率还是要低10%~20%。与汇编语言相比,C语言编写的程序基本上不做修改就能用于各种型号的计算机,因此C语言编写的程序便于移植。
综上,C语言是结构式模块化的高级语言,该语言简洁紧凑、灵活方便、运算符和数据结构丰富。其最大特点是适用范围大,数据处理能力强,可移植性好,正是基于这点使其在嵌入式系统开发中得到广泛应用。
四、单片机原理及应用课的教学分析
MCS-51单片机课是一门偏硬件的课程,包含两部分内容:单片机原理和单片机应用。因此,在教学中有必要对两者区别处理。单片机原理主要讲述MCS-51单片机的结构、组成原理;MCS-51单片机芯片的引脚结构、功能;MCS-51单片机的内部结构组成,包括其内部包含的寄存器、RAM、ROM等资源;MCS-51单片机P3口的第二功能:中断功能、定时/计数器功能以及串口通信功能。上述MCS-51单片机内容都是单片机的硬件组成结构,对这部分的讲解必须借助一种语言工具,而且要求这种语言工具能充分的表达单片机的硬件结构。
基于前面对汇编语言的分析,可以发现其与机器相关性的特点使得该语言工具能有效地表达单片机的硬件结构,满足教学MCS-51单片机原理的需要。比如,对MCS-51单片机的不同存储空间进行操作时,汇编语言可以通过采用不同的汇编指令加以区别:对内部RAM空间操作可采用MOV指令,对内部ROM空间操作可采用MOVC指令,而对外部扩展RAM空间操作时可采用MOVX指令。当然对MCS-51单片机的寄存器进行操作就是对内部RAM进行操作,也用MOV指令。还有,在对MCS-51单片机串口进行数据传送时,在硬件上只要对SBUF进行操作就行,即利用MOV SBUF,A发送数据,利用MOV A,SBUF指令接收数据[2],这样看起来就非常的清楚、简洁、易于理解。显然,汇编语言是理解整个单片机系统内部硬件结构的最佳起点和最有效途径[3]。汇编语言采用助记符直接描述机器指令,比机器指令容易记忆和理解。学习和使用汇编语言,能够感知、理解机器的硬件逻辑功能。因此,在单片机原理的教学中采用汇编语言效果会更好。目前,大多数MCS-51单片机的教材中对于单片机应用的讲解中,普遍将键盘,LED数码管,LCD以及电机等作为教学重点。有的教材还将I2C总线,SPI总线等的应用作为单片机的应用内容进行讲解,这主要是因为51单片机没有这些总线接口,一般采用MCS-51单片机模拟这些总线接口。单片机应用中的内容都利用了MCS-51单片机的IO端口来进行应用操作。如果学生通过汇编语言掌握了MCS-51单片机的硬件原理,那么应用内容可采用C语言进行讲解,使学生能理解C51语言在单片机上的应用。通过实验训练能够让学生掌握C51语言在单片机开发中的应用。
基于前面分析,C语言简洁紧凑、灵活方便、运算符和数据结构丰富。其最大特点是适用范围大,数据处理能力强,可移植性好[4]。那么,在单片机应用的教学中采用C51语言,不但有助于学生更好的掌握C51语言在单片机开发中的应用,也有助于学生为后续的嵌入式系统开发中利用C语言打下坚实的基础。
目前,在MCS-51单片机课的教学中,安排有理论课,实验课和课程设计。在理论课和实验课中,主要采用汇编语言,从而让学生熟悉汇编指令,并通过汇编语言理解、掌握单片机原理及部分应用内容;在课程设计中,让学生自己设计题目,利用C51语言完成题目所设定的任务。鉴于C语言在嵌入式工程应用中的重要性,在课程开始就强调让学生自学C51语言;讲解MCS-51单片机应用内容时采用C51语言;实验中,验证性实验要求用汇编语言,综合实验要求用汇编语言和C51语言两种语言完成;最后的课程设计中可以明确要求用C51语言完成题目要求。
五、结论
MCS-51单片机课是一门实践性很强的嵌入式基础性课程,因此,一方面在教学中对单片机原理采用汇编语言教学,以便学生理解MCS-51单片机的硬件结构[5];另一方面加强学生对C51语言在单片机应用中的熟练掌握,这可在单片机实验及课程设计中得到加强。实践证明,这种教学安排是可行的、有效的。
参考资料:
[1]赖晓晨,周宽久,夏锋,等.嵌入式系统工程实例解析[M].北京:清华大学出版社,2012.
[2]王新颖.单片机原理及应用[M].北京大学出版社,2008.
[3]张毅刚,彭喜元.单片机原理及接口技术[M].北京:人民邮电出版社,2008.
单片机编程篇7
单片机的特点主要有:高集成度,体积小,高可靠性;控制功能强;低电压,低功耗,便于生产便携式产品;易扩展;优异的性能价格比。目前,单片机的应用领域主要包括:办公自动化设备;单片机在机电一体化中的应用;在实时过程控制中的应用;单片机在日常生活及家用电器领域的应用;在各类仪器仪表中引入单片机,使仪器仪表智能化,提高测试的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比;在计算机网络和通信领域中的应用;商业营销设备;单片机在医用设备领域中的应用;汽车电子产品;航空航天系统和国防***事、尖端武器等领域,单片机的应用更是不言而喻。
二、单片机开发中的几个基本技巧
在单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着。现归纳出单片机开发中应掌握的几个基本技巧。
1、如何减少程序中的bug。对于如何减少程序的bug,应该先考虑系统运行中应考虑的超范围管理参数如下。物理参数:这些参数主要是系统的输入参数,它包括激励参数、采集处理中的运行参数和处理结束的结果参数。资源参数:这些参数主要是系统中的电路、器件、功能单元的资源,如记忆体容量、存储单元长度、堆叠深度。应用参数:这些应用参数常表现为一些单片机、功能单元的应用条件。过程参数:指系统运行中的有序变化的参数。
2、如何提高C语言编程代码的效率。用C语言进行单片机程序设计是单片机开发与应用的必然趋势。如果使用C编程时,要达到最高的效率,最好熟悉所使用的C编译器。先试验一下每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道效率。在今后编程的时候,使用编译效率最高的语句。各家的C编译器都会有一定的差异,故编译效率也会有所不同,优秀的嵌入式系统C编译器代码长度和执行时间仅比以汇编语言编写的同样功能程度长5-20%。对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求你对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。虽然C语言是最普遍的一种高级语言,但由于不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。所以如果对这些特性不了解,那么调试起来问题就会很多,反而导致执行效率低于汇编语言。
3、如何解决单片机的抗干扰性问题。防止干扰最有效的方法是去除干扰源、隔断干扰路径,但往往很难做到,所以只能看单片机抗干扰能力够不够强了。在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。单片机干扰最常见的现象就是复位;至于程序跑飞,其实也可以用软件陷阱和看门狗将程序拉回到复位状态;所以单片机软件抗干扰最重要的是处理好复位状态。一般单片机都会有一些标志寄存器,可以用来判断复位原因;另外你也可以自己在RAM中埋一些标志。在每次程序复位时,通过判断这些标志,可以判断出不同的复位原因;还可以根据不同的标志直接跳到相应的程序。这样可以使程序运行有连续性,用户在使用时也不会察觉到程序被重新复位过。
4、如何测试单片机系统的可靠性。当一个单片机系统设计完成,对于不同的单片机系统产品会有不同的测试项目和方法,但是有一些是必须测试的:测试单片机软件功能的完善性;上电、掉电测试;老化测试;ESD和EFT等测试。有时候,我们还可以模拟人为使用中,可能发生的破坏情况。例如用人体或者衣服织物故意摩擦单片机系统的接触端口,由此测试抗静电的能力。用大功率电钻靠近单片机系统工作,由此测试抗电磁干扰能力等。
综上所述,单片机已成为计算机发展和应用的一个重要方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次***。此外在开发和应用过程中我们更要掌握技巧,提高效率,以便于发挥它更加广阔的用途。
参考文献:
[1]何立民.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社,1990
[2]蔡美琴等.MCS-51单片机系统及其应用.北京:高等教育出版社,1992
[3]孙涵芳.MCS-51/96系列单片机原理及应用.北京:北京航空航天大学出版社,1996
单片机编程篇8
【关键词】单片机 虚拟仪器 ***形化 计算机辅助教学 模块化
引言
单片机被广泛应用于工业控制、智能仪器仪表及家电等各个领域[1],因此单片机课程成为高校计算机、测控及工业自动化等专业的核心课程。
传统的教学顺序是从硬件结构到指令系统、软件编程及器件的扩展及应用。其中在指令系统及软件编程学习过程中,教师普遍使用汇编语言编程、高级语言C或Basic语言教学,学生则主要把精力和时间放在这些语言的学习中,然而,多数学生普遍认为学习起来较为困难,导致学生感到枯燥乏味并产生厌学情绪。
一般认为,在单片机编程方面,需要熟悉各种特殊功能寄存器,如TMON、TCON及PSW等[2]。本文旨在采用模块化编程的思想,以Lab VIEW为开发平台,研究基于虚拟仪器的***形化编程软件的研制,并将其在单片机课程教学上进行新的尝试,采用流程***编程形式将学生从繁杂的文本语言学习中***出来,激发大学生的学习动力。
Lab VIEW和C8051F410单片机介绍
虚拟仪器是一种全新的仪器概念,它突破了传统仪器设备的功能单一化、固定化以及价格昂贵的缺陷。而Lab VIEW作为最常见的虚拟仪器软件,在自动化检测领域已成为工程师们首选的软件开发平台。Lab VIEW内置信号采集、测量分析与数据显示功能,摒弃了传统开发工具的复杂性,在为用户提供强大功能的同时还保证了系统灵活性,其***形化编程风格较文本语言更加形象,其功能是通过一系列的子vi实现了检测、控制及显示功能,具有容易学习、便于移植和升级容易等优点[3]。
C8051F410是Silicon Lab公司最新推出的小封装、高性能、低功耗混合信号片上系统型MCU,适用于测控系统、仪器仪表、便携式医疗设备、智能传感器、POS系统、游戏机、电子玩具等众多应用领域,片内自带12 位ADC、两个12 位电流模式DAC、两个比较器、24 个端口I/O以及4 个通用16 位计数器/定时器等资源,该单片机具有价格便宜、功能齐全及资料齐全的特点。
基于Lab VIEW的单片机***形化语言开发
单片机***形化语言编程目前只出现在智能教育机器人控制器上,如西米亚公司的乐高系列、博思威龙机器人、美国的VEX系列机器人、双龙公司的机器人DIY系列均可以采用可视化流程***编程[2]。这些软件只适合于特定功能机器人的应用,无法用来开发普通的单片机系统。
我们知道,正规的程序员所编写的程序具有标准化、模块化、便于移植的特点,往往把常用的程序写成操作系统(内核)一样,以后修剪一下就可以直接调用[3]。基于Lab VIEW的单片机***形化编程就是利用这种模块化编程的思路。学生在学习单片机时,只需要学会单片机的硬件结构及功能,能够根据功能需要和单片机自身的时序要求画出相应的流程***,然后在Lab VIEW流程***选择相应的子vi进行连线即可,无需学习各种寄存器的设置及软件编程,强调单片机系统设计的基本理念和设计思路。下面以C8051F410单片机实现两路模拟信号的输入为例,介绍本文系统的具体开发方法。
首先根据单片机手册绘制流程***(***1)。
然后,在Lab VIEW流程***里面放入相应的子vi即可生成相应的程序文件。采用本系统的程序如***2所示,本系统利用与流程***相似的模块化程序清晰简单地完成了采用单片机C语言需要110条语句才能完成的任务。
课程教学的改革
教学之前要准备一份只含有单片机功能和硬件而不包括寄存器介绍以及汇编或者单片机C语言的教材,在课程上现场演示编程、调试和仿真的整个过程,以明确单片机的硬件结构和功能设计为主要任务。以本文开发的软件平台为基础,使学生把精力更多地放在单片机结构和功能的了解上即可,无需死记硬背。教授学生程序的模块化思想,同时教授学生自定制子vi的方法。课程结束之后,将学生制作的优秀子vi与学生共享,以便学生在后期工作学习中更多更好地利用本软件进行单片机开发。
课程考核方式改革
在课程考核方面,采用理论笔试成绩与实验成绩两方面综合评定的办法给出期末成绩。学生的考试成绩不再作为唯一的期末成绩,教师更多地考虑学生在实验过程中的表现、对单片机的应用开发能力及利用子模块化对片外扩展芯片编程的能力。
结束语
通过本文开发的***形化编程软件对单片机课程进行改革,强调单片机设计的基本理念和设计思想、充分发掘计算机辅助教学的作用。通过对在校及毕业学生调查发现,普遍认为该方法把学生从繁杂的软件编程中***出来,并充分地调动了学生的学习积极性和兴趣。课程考核改变了传统的应试教育模式,更多地注重学生的实践能力,通过对单片机课程的模式改革,激发了学生的学习兴趣和学习动力。
参考文献:
[1]撒继铭,刘岚,王原丽,尹勇.单片机课程教学改革探索[J].陕西教育, 2012,9: 108.
[2]涂立,杨谷兰.单片机的现代教学方法研究[J].科技创新导报,2008,17: 231.
单片机编程篇9
关键词:单片机 教学改革 教学探索 任务驱动
1 引言
传统的单片机教学,均是以单片机的结构为主线,先讲单片机的硬件结构,然后是指令,然后是软件编程,然后是单片机系统的扩展和各种器件的应用,最后再讲一些实例。按照此种教学结构,按照这种结构,学生普遍感到难学。试想,一个从未接触过计算机结构的人,甚至数字电路也是刚刚接触的人,要他去理解单片机内部结构,这实在不是个容易的事,至于很多书一开始就提出的总线、地址等概念,更是初学者难以理解的——不管用什么巧妙的比方都不容易理解。于是糊里糊涂地学完了第一部份,第二部份一开始就是寻址方式,更抽象,好多人直到学完单片机还不能理解寻址方式究竟是什么意思,为什么需要这么多寻址方式,刚开始学当然更不懂了。然后是指令,111条指令,又不分重点,反正全是要记住的,等到指令全部学完,大部分同学已对单片机课程望而生畏,开始打退堂鼓了。第三部份是编程,如果说前面的东西不能理解,还能靠记忆来获得知识的话,这部份就纯是理解和掌握了,如果以前没学过编程,短时间内很难掌握编程的有关知识,更不必说编程技巧了。
2 教学总体规划和思路
基于以上情况,我尝试用一套全新的教学方法,以任务为教学单元,打破原有界限,不管硬件结构、指令、编程的先后顺序,将各部份知识分解成一个个知识点,为了完成一个任务抽取每个部份的不同知识点,加以组合,完成第一个任务就能清楚单片机的开发过程,完成第二、三个任务,就能自已模仿性地编出自已的程序,使得学习过程是一个不断成功地完成任务的过程。当所有任务全部完成,知识点就全学完了。即便只完成部份任务,也可以去做一些程序了——事实并没有必要学完全部知识才可以去做开发的,本人在编第一个商用程序时,还不懂定时器怎么用,编第二个商用程序,写了长达2K行的代码,可当时我还不懂怎么样用中断编程,因为当时我根本还不需要用中断。
新探索的教学方法应具有如下特点:
以人的认知规律为主线,而不是以课程结构为主线;以任务为单元构建认知单元,而不是以单片机功能为单元构建;完成第一个任务即可进行单片机的初步应用尝试,不必学完单片机的全部知识体系。随着任务的逐渐进行,知识逐渐完善,能力逐渐提高,所有任务完成时,已具有初步开发能力。
教学改革成功的关键:能否合理分解各部份知识点,能否将它们恰当地组合在一个任务中,能否不断保持学生的学习兴趣,能否找到大量的、确切、形象的比喻,能否编制出内容、难度恰当的习题……
难点应当在编程训练上,要将一个从未有任何编程经验的人训练成能熟练地编程,决非易事,当然这有点超过我们的范围了。
3 教学内容与方法
3.1建设单片机开放实验室,用生动的实例引导入门
利用单片机开放实验室,使同学们对单片机的基本应运以及整个的开发过程有最基本的了解,为同学们建立更直观的感性认识,以此,告诉同学们理论课和实验课结合的重要性,激发学生的学习兴趣。
3.2合理应用教材,加大实例的切入,循序增强学生编程能力
根据多年的学习和教学经验,更合理的分解、组合和设计教材的知识点,最大程度的使用学校现有的设备,使同学们在学习和完成任务过程中能一边学习一边实验,在实验中发现问题,进而进一步促进学生的学习,简单的说就是在不断的发现问题,解决问题,再发现问题,再解决问题中不断的充实和完善自己的学习。
3.3注重学生的机动时间,使学生有更多的机会调试自己的程序
有意识的增加学生的自学时间和章节,教师上课只讲解重点和难点,让学生有更多的时间和机会进入实验室调试和修改自己的程序,以改促学!
3.4更加重视和强调课程设计
课程设计是单片机实践环节的重要组成部分,通过课程设计的实战练习,可以进一补巩固所学理论知识;可以使学生对单片机系统有进一步的认识;可以培养学生的实际动手能力和创新意识;是学生学习单片机课程从理论跨入实践的关键一步!
单片机编程篇10
关键词:高等职业教育;学习领域课程;教学改革;工作过程
单片机应用课程是一门电子电气类跨专业的核心课程,对学生的职业技能培养起到主要的支撑作用。为了更好地服务区域经济发展,实现高职院校创新型高技能人才培养目标的要求,我们近年来一直在探求单片机课程教学的新理念、新方法和新的教学手段。来源于德国的基于工作过程导向的教学改革,根据企业岗位的工作任务、工作过程设计课程教学,注重学生的综合职业能力的培养。我们在单片机课程的教改中,采用了这种以工作过程为导向的教学改革,经过实践和探索,在培养创新型高技能人才方面取得了显著的成效。
一、以工作过程系统化引导课程改革
2008年10月,基于工作过程系统化的“单片机应用设计与制作课程设计”教改课题被批准为学院教学改革课题。在课题的研究过程中,我们采用基于工作过程系统化的方法进行单片机课程的教学改革,课程开发设计的步骤为:企业市场调研分析职业岗位群工作任务分析归纳确定典型工作任务分析研讨确定学习领域课程学习情境设计。课程开发设计过程如***1所示。
(一)根据人才培养目标和职业岗位,注重实践和创新,设计教学过程
根据应用电子、电气自动化技术等专业的人才培养目标,针对电子电气类企业的相关工作岗位,以职业能力培养为重点,与行业企业合作,从单片机应用产品设计与制作的方案设计、软硬件设计、装调测试等典型工作任务分析入手,编制《单片机应用设计与制作》课程标准。
以综合职业能力培养为重点,注重学生创新能力的培养,通过与行业企业合作,分析职业工作过程,整合典型工作任务,选择具有典型工作过程特征、符合教育教学原理及包含专业知识的工作任务作为课程载体,综合实际工作过程和完整思维过程训练设计学习情境。学习情境的设计类型从封闭型、开放型直到开放创新型,体现职业性、实践性和创新性的要求,学习情境的设计如***2所示。
(二)编写基于工作过程系统化的学习领域课程教材
通过对职业工作过程的分析,编写出具有学习目标、学习和工作内容的学习领域课程教材,以任务作为课程的载体组织教学内容,每个学习情境确定学习情境任务描述、学习目标、学习与工作内容和学业评价要求。教材的主要特点:
1.工学结合,以工作任务组织教与学。以任务为导向,将工作与学习相结合,既能通过学习性任务系统地学习单片机的知识,又能通过学习和工作的过程得到综合能力的培养和训练,教材的内容和编排体现了工学结合的职业教育特征。
2.依据职业工作任务,设计学习情境。根据职业工作任务的分析和归纳,按照职业工作过程和学习认知规律,根据教育教学原理,设计了6个学习情境,6个学习情境的工作任务来源于实际的职业工作任务,具备了典型工作过程的工作要素。
3.根据职业岗位需求,采用以汇编为基础,以C语言为主的编程语言。在目前实际的单片机开发应用工作中,C语言以优良的可读性,便于改进、扩充和移植,便于合作编程,成为目前单片机开发和应用的主要语言,但在一些实时性要求较高的应用和一些小型应用项目中,汇编语言仍然是很有效的编程语言,所以本书的单片机应用以C语言为主要编程语言,以汇编语言为要求基本掌握的编程语言,避免学生学完单片机课程后,却看不懂单片机的指令系统。以C语言为主,基本掌握汇编语言的学习方式,适应职业岗位的实际工作需求。
4.基于Keil和Proteus的开发仿真平台。Keil是目前职业岗位应用最多的MCS-51系列单片机软件开发平台,集成了文件编辑、项目管理和软件调试等多种功能,Proteus是一款功能很强的EDA工具软件,在单片机应用电路的仿真中具有突出的优势,将Keil开发软件和Proteus仿真软件结合应用,可以实时、动态地模拟单片机系统的动作,本课程所有任务和案例的程序和电路原理***都通过了Keil的项目编译和Proteus的仿真验证。
(三)具有丰富的现代教学手段的情境教学实验室的建设及实践教学
建立了三个能满足学习情境教学和实训工作要求的理实一体的单片机多媒体网络教室,配备了能够进行学习情境教学要求的实训设备;建立了能满足开放型创新实践教学的创新工作实验室。在经过教改建设后的单片机实验室,实现了理论知识的学习、虚拟实验和实物电路的实验能够在同一教室进行的实验室教学和实践教学相结合的模式。为实现职业教育课程的目标,学习的内容是工作过程,而通过工作过程为实践教学创造了良好的条件。
在校外实训基地实践教学方面,与扬州的多家企业建立了稳定的校企合作关系。通过合作,这些企业逐步成为学生和单片机课程教师参与单片机课程创新实践、参与行业企业创新实践的实训基地。
二、培养单片机应用创新型高技能人才取得丰硕成果
通过以工作过程系统化为导向的单片机课程的教学改革,收到了明显的效果,学生学习的兴趣提高了,应用单片机的能力也有了显著的提高;应用单片机技术进行课程设计、毕业设计和创新设计的学生越来越多。自单片机课程启动以工作过程系统化为导向的课程改革以来,每学年有400名左右的大二、大三的学生学习单片机应用,有越来越多的学生应用单片机技术进行毕业设计、参加大学生实践创新训练计划,其中获得多项省级、学院级大学生实践创新训练计划立项和省级院级优秀毕业设计。
特别是在“全国电子专业人才设计与技能大赛”活动中多人次取得优秀成绩,这项活动是为了推动高校教学改革,培养大学生的创新意识和工程实践素质,由工业和信息化部人才交流中心举办的,我系学生在“单片机设计与开发”中获得全国二等奖1名,全国三等奖2名,江苏一等奖2名,二等奖2名,三等奖5名和多名优秀奖。
三、教科研工作取得显著成绩
通过以工作过程系统化导向的教改教研活动,锻炼培养了一支教育教学理念先进、实践操作能力强、教学水平较高、专业素质好的教师队伍。编写由清华大学出版社出版的工学结合模式、21世纪高职高专规划单片机应用教材一部,《单片机应用设计与制作》教材被立项为学院精品教材。多名老师在指导学生参与技能竞赛中成绩突出,获得省级和全国性奖励。此外单片机课程教学团队在培养单片机应用创新型技能人才的同时,积极主动地开展教学和科研工作,获得过多次学院、省和全国性的奖励,主持了多项教科研项目,在多种专业学术期刊发表了10多篇和单片机应用相关联的教科研论著。
参考文献:
[1] 姜大源,吴全全.当代德国职业教育主流教学思想研究[M].北京:清华大学出版社,2007.