单片机编程范文

时间:2023-03-12 14:21:07

单片机编程

单片机编程范文第1篇

Atmel公司的AVR 8位RISC单片机是一种非常普通的单片机.它是一个具有电擦写可编程只读存储器(EEPROM),随机访问存储器(RAM),模数转换器,大量的输入和输出线路,计时器,RS-232通讯接口UART以及其他很多功能的单片集成电路.

最好的莫过于在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:///pub/GNU/binutils/下载gcc-core-3.0.3.tar.gz可以从: ftp://ftp.informatik.rwth-aachen.de/pub/gnu/gcc/

或者

ftp:///pub/GNU/gcc/下载avr-libc-20020106 .tar.gz这个AVR C语言库可以从: www.amelek.gda.pl/avr/libc/ 也可以从这个服务器下载:下载主页 uisp-20011025.tar.gzAVR编程器可以从: www.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欧元.尽管它是非常普通的单片机,它也不是随便在那家当地的无线电商店就能买到的,象那些大的电子部件销售商例如:(www.reichelt.de(德国),www.conrad.de(德国),www.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, 原作 /AVRGCC/). 从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, REA

DONLY, 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字节.

下面这个命令也非常有意思:

avr-objdump -S avrledtest.out

单片机编程范文第2篇

关键词:单片机;编程语言

中图分类号:TP313文献标识码:A文章编号:1007-9599 (2010) 04-0000-01

Comparison on Various Microcontroller Programming Languages

Zhou Hao

(China West Normal University, Physics and Electronic Information College,Nanchong 637002,China)

Abstract:MCU applications now is gradually expanding,meanwhile microcontroller programming language can be used for it is also more and more, the most commonly used languages are C language, PL / M. and the BASIC language, etc. This paper will give a variety of Comparison of these languages and strengths and weaknesses, to provide quick and easy path for beginners.

Keywords:Single chip micyoco(MCU);Programming language

一、引言

随着计算机技术和产业的不断发展,单片机的优点和特性十分突出,其应用领域也非常广泛。下面分别对汇编语言、C语言、PL/M.和BASIC等4种语言做个对比,让大家对这4总语言有一个较为清晰的认识。

二、汇编语言

汇编语言是是最接近机器码的一种语言,它用来表示机器指令的符号语言,一种用文字助记符。占用资源少是其主要优点,程序执行效率高。汇编语言调试起来也比较方便是因为它一条指令就对应一条机器码,每一步的对应都很清楚,并且程序大小和堆栈调用情况都容易掌控。但是因为不同的类型的单片机的指令系统是有区别的,所以其汇编语言也有些差异,不易移植。单片机的汇编语言和其他汇编语言也很相像。指令系统比第一代微处理器要好一些。但单片机编程之所以变得复杂一些是因为其拥有不同存储区域,如果你是一位电子工程师,懂得汇编语言就等于是一个基础,它可以帮助你了解影响任何语言效率的特殊规定。

三、单片机的C语言

单片机的C语言是一种具备汇编语言功能以及多种高级语言的编译型程序设计语言。C语言可以直接控制系统硬件,此外还具有许多其他功能。如库函数功能多样,操作运算速度快,编译效率强,可移植性也较强。值得一提的是在软件开发中如果采用模块化程序设计方法C语言就具有明显的优势,因其具有完整的程序模块结构。它与汇编相比,有如下几大优点:

(一)程序函数可互有差异且组织结构规范,其最大的优点就是使程序的可读性得到很大的提高,程序结构化趋于完善。

(二)模块化编程技术使得其数据处理力较强,它能将已编好的程序轻松的植入新程序且所需要的编程及程序调试周期短,效率高。

(三)C语言程序最大的优点就是它不依赖于机器硬件系统,因此它能较快地移植且不做修改。

(四)它是一种中级语言。他具有承上启下功能,上则具有高级语言的基本结构和语句,下则具备低级语言的实用性,他可以对位、字节和地址进行操作,就像汇编语言,上述三个地址是计算机最基本的工作单元。

(五)它是结构式语言。结构式语言的显著特点是代码及数据的分隔化,有

各种各样的数据类型,这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

(六)C语言功能齐全。具并引入了指针概念,可使程序效率更高。另外C

语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。

四、PL/M编程语言

PL/M语言具有以下几大优点:

(一)具有较好的可读性

模块式的程序,结构化的语言以及缩进式的书写方法,这都使得其可读性提高。一个大型的程序是由多个模块组成的,而在每一个模块下面又分布着多个程序块,这样每个程序块负责一部分功能,各司其责,即缩短了编程时间又提高了程序设计的灵活性。

(二)具有较好的可依赖性

如果程序中有冲突使用或不合理使用时其能在提出警告的同时自动为用户程序重新合理分配内存,给使用者带来了方便也有效地节约了空间资源。

(三)具有较好的结合性

局部动态变量是指一个程序中的不同模块由多个人共同编制,但其不会因为使用了相同的标识符而发生冲突,从而减小了工作量.全局的静态变量不像局部动态变量那样在所说明的程序块中有效而在其以外无效,它是在整个程序中都有效,而PL/M正是这两者的结合。

(四)具有较好的兼容性

PL/M程序可以使用户方便地连接某段特定的汇编语言程序并生成可执行代码。

(五)BASIC编程语言

BASIC译成中文是“初学者通用符号指令代码”,它是由美国科学家托马斯库尔兹研制出来的,后由微软公司把它应用到微型机上,BASIC一直被定义为初学者最合适的编程语言,它的最大特点及优点就是容易入门,现在BASIC语言也包括了很多结构化程序及编程方式。例如,局部变量,全局变量,数据传递,函数,模块等。

六、结语

单片机编程范文第3篇

关键词: 矩阵键盘;单片机;按键;程序

中图分类号:TP311.52 文献标识码:A 文章编号:1671-7597(2012)0310172-01

0 引言

在许多智能化设备中,常常需要人机交换界面,而通过矩阵键盘可以完成输入操作。本文中就矩阵键盘的电路接口及软件编程进行了分析。矩阵键盘在使用中硬件连接方便,编程简单,价格低廉,稳定性好,得到广泛应用。

1 接口电路设计

对于独立键盘,8个I/0口只能接8个按键。而矩阵键盘,按键排列成矩形,一般为4*4矩阵,有4行4列,共16个交叉点,按键接在交叉点上。这时用8个I/0口可接16个按键0~F(如下图),大大提高了I/0口的利用率。

4*4键盘上,每个按键开关的两端分别接行线和列线,其中行线和+5V电源之间接上拉电阻。在没有按键按下时,行线和列线是不相连的,当有按键按下时,列线的电平会随行线电平值而改变(如下图),通过单片机检测到的I/0口值,判断有键按下,并通过软件判别按下去的为哪个键。

2 软件编程

对于矩阵键盘的编程大概包含以下几个步骤:首先判断有无按键按下,若有,则进行延时消抖动,再次判断,确实有键按下,判断按下的为哪个键,最后检测释放。如何判断按键是关键,下面我们以反转扫描法介绍编程思路:先对P3口进行赋值0xf0,即高低四位分别为高低电平,如果有键按下,则高四位中有一位会被拉低,读取P3口的值,把它赋给一个中间变量w,此时行就确定了;再给P3口赋值0x0f,即高低四位分别为低高电平,如果有键按下则低四位中对应的位会被拉低,再读取P3口的值,赋给另一个中间变量x,这样按键的行和列都确定了,然后再对变量w和x进行“按位与”操作得到一个值y,根据y的值来判断按下的键。按键从0~F分别是0xee、0xde、0xbe、0x7e、0xed、0xdd、0xbd、0x7d、0xeb、0xdb、0xbb、0x7b、0xe7、0xd7、0xb7、0x77。在主程序中直接调用此按键子程序即可。按键子程序如下:

void anjian()

{

while(1)

{

P3=0x0f;

w=P3;

P3=0xf0;

x=P3;

y=(w&0x0f)+(x&0xf0);

switch(y)

{

case 0xee: j=0; break;

case 0xde:j=1; break;

case 0xbe:j=2; break;

case 0x7e:j=3; break;

case 0xed:j=4; break;

case 0xdd:j=5; break;

case 0xbd:j=6; break;

case 0x7d:j=7; break;

case 0xeb:j=8; break;

case 0xdb:j=9; break;

case 0xbb:j=10; break;

case 0x7b:j=11; break;

case 0xe7:j=12; break;

case 0xd7:j=13; break;

case 0xb7:j=14; break;

case 0x77:j=15; break;

}

if(i!=0)

{

while(P3!=0xf0);

delay(5);

break;

}

}

}

3 结论

使用矩阵键盘可以更好地利用单片机的I/0口,提高了I/0口的利用率,使单片机可以连接更多的模块,实现更多的功能。在当今工业化社会中得到更大的发展。

参考文献:

[1]刘春龙、张炜,单片机控制装置安装与调试[M].高等教育出版社,2010.3.

[2]仝为民、徐日生,智能化键盘的设计,电测与仪表,2000,37(10):

35-36.

单片机编程范文第4篇

本文介绍笔者设计的PLDICR控制电路,它不但线路结构简洁、开发容易、体积小、成本低,并且在图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(FlexibleLogicElementMatrix)系列产品。相对于其它一些厂家的FPGA产品来说,ALTERA公司的FLEX系列产品有其独特之处。这主要表现在高密度、在线配置功能、高速度和连续式布线结构等方面。

查找表LUT(Look-Up-br)是基于SRAM的可重配置PLD的一个重要组成部分,LUT本质上就是一个RAM。目前CPLD中多使用4输入的LUT,所以每一个LUT可以看成个有4位地址线的16×1bit的RAM。当用户通过GDF原理图或VHDL语言描述了一个逻辑电路后,CPLD开发软件会自动计算逻辑电路的所有可能结果,并把结果事先存入查找表。这样,当多信信号进行逻辑运算时就等于输入一个地址进行查表,找出地址所对应的内容,然后将其输出即可。

2可编程逻辑器件的配置原理

首先在开发软件MAX+PLUSII的ASSIGN菜单下选择将要采用的基于SRAM的器件名称。经过编译、优化、逻辑综合、仿真等步骤达到设计要求后,软件会自动产生一个编程文件(扩展名为.SOF文件)。对于基于SRAM工艺的可编程逻辑器件(如ALTERA的所有FLEX、ACEX、APEX系列,XILINX的Sparten、Vertex系列),由于SRAM存储器的特点,掉电后数据会消失,因此在调试期间可以采用并口ByteblasteMV下载电缆多次重复配置PLD器件。当电路设计成功,调试完成后,需要将配置数据烧写固化在一个由ALTERA生产的专用EEPROM(如EPC1441)中。上电时,由这片配置EEPROM先对PLD加载数据,几十毫秒后,PLD即可正常工作。

CPLD器件的工作状态分为三种:首先是上电配置状态(ConfigurationMode),将编程的数据装入CPLD器件的过程,也可称之为构造;然后是初始化状态(InitializationMode),在配置完成后,CPLD器件复位内部各类寄存器,让I/O引脚为逻辑器件正常工作做准备;最后是用户状态(UserMode),指电路中CPLD器件正常工作时的状态。

ALTERA公司具有ICR功能的PLD器件有FLEX8000、FLEX10K、APEX和ACEX系列,它们的配置方式可分为PS、PPS和JTAG(JointTestActionGroup)等方式。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输入状态位(如果该信号线为低,表明在配置过程中出现错误,需重新配置)

该单片机外接晶振最大频率为40MHz,它在串行口方式0下波特率可设置为fosc/4。另外通过设置特殊功能寄存器CKCON的MD0、MD1、MD2三位,可以将MOVX、MOVC等指令周期缩短至2个机器周期。与普通单片机相比,可使配置时间大为缩短。WINBOND78E58单片机内部拥有32KBFLASHROM.由配置文件数据表2可知,只需一片单片机就可以对EPF10K20系列以下的PLD进行配置了。本系统中使用了一片APEX20K300E,因此在硬件电路设计中,扩展了一片WINBOND29C040FLASH存储器(容量为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程序经MAXPLUSII或QUARTUS编译后将产生后缀后为.sof的SRAM目标文件。该文件含有除配置数据以外的控制字符,不能直接写入到PLD中去,需要利用软件的编程文件转换功能将文件转换成.rbf(RawBinaryFile)十六进制文件。把.rbf文件烧写到存储器中,单片机通过MOVX指令读入后,串行移位到PLD。

单片机编程范文第5篇

关键词:有限状态机;单片机;按键

中图分类号:TB文献标识码:A文章编号:16723198(2013)22018701

0引言

有限状态机FSM(Finite State Machine)是一种数学模型,它以有限个状态以及在这些状态间的转移和动作构成,它适用于系统分析到设计整个过程,应用十分广泛。

有限状态机以描述控制特性为主,它特别适合发生有先后顺序或者有逻辑规律的事件,也是软件上常用的一种处理方法。在单片机程序的应用上,有限状态机把复杂事件分解成有限个稳定状态,通过外部事件的驱动,改变程序当前的状态同时做出相应的操作处理。

1有限状态机

有限状态机主要按照规定的顺序依次完成各种操作,它由一定数目的状态和相互之间的转移构成,在任何时候系统只能处于给定状态中的一个,在外部事件的驱动下,状态机会产生相应的动作处理,同时也可能伴随着状态的转移。有限状态机可以分成两类,第一类为Moore状态机,它的输出只和状态有关而与输入无关;第二类称为Melay状态机,它的输出不仅和状态有关而且和输入有关系。

1.1有限状态机要素

有限状态机包含了现态、条件、动作、次态4个要素。现态指程序所处的当前状态,在满足一定的条件下,系统将会产生一个动作或者执行一次状态的转移,次态是满足条件后转移的新的状态,一旦次态被激活,则转变为新的现态。在这4个要素体现出了状态机内部各状态的因果关系,现态和条件是因,次态和动作是果。

1.2建立有限状态机

有限状态机通常主要有两种方式表现方式,一种是“状态转移图”,另一种是“状态转移表”,这两种方式都可以有效的表现出各个状态间的转移关系。

通常,我们用SWITCH-CASE、IF-ELSEIF-ELSE语句在软件中实现状态机的方法和程序结构。实际编程过程中,虽然有限状态机思想提供了很好的编程思路,但是还应该探讨使用归类的方法来进一步提高程序执行效率,因此在编程之前,应该确定程序中存在哪几个状态,这样能够大大缩短程序的长度,可读性也明显增强。

本文通过单个按键信号的检测为例,对状态机的使用进行说明。

在实际应用中,按键的操作是随机的,系统需要对按键一直循环查询。按键的按下和释放检测过程也需要进行消抖处理,这个过程大概需要10ms左右,因此需要设置S0到S2,分别表示判断有无键按下、确定有键按下、等待按键释放3个基本状态。

图2单个按键的状态机转换图采用有限状态机检测按键的过程中,次态与输入以及当前状态有关,因此采用的是Melay状态机模型。在检测过程中,输入为按键信号,鉴于按键普遍连接方法,一般情况下都是“1”表示无键按下,“0”表示有键按下。

在程序中,首先设置按键初始状态为s0,进入按键检测程序,读出按键的当前状态,进入判断过程。如果为s0或s1,通过判断语句判断是否有键按下,即输入信号是否为“0”,如果为“0”则此时进入下一个状态,s0状态对应进入s1状态,s1状态对应进入s2状态;如果为“1”则表示无键按下,返回初始状态s0;如果进入的当前状态为s2,则表示此时确实有键按下需要等待按键释放,再次检测按键输入信号,如果输入为“0”,表示按键未释放,输入为“1”表示按键已经释放,返回到状态s0。

具体软件实现如下:

static char key_state=s0;// 按键初始状态

char key_press,key_return=0;

key_scan()

{

key_press=key_input;//读按键输入

switch(key_state)

{

case s0:if(!key_press) key_state=s1; // 有键按下,程序进入状态s1,

Break;

case s1:if(!key_press)//确认按键按下,进入状态s2

{

key_return=1;

key_state=s2;

}

else//无键按下,按键抖动,返回状态s0

key_state=s0;

break;

case s2:if(key_press) key_state=s0;//按键释放,返回状态s0

break;

}

}

3结语

有限状态机简单易用,它可以使程序各个状态间的关系变得直观,更有利于程序的模块化。使用有线状态机对单片机编程,可以增强程序的实时性,同时也大大提高了程序的可读性、可移植性。

参考文献

[1]马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2011.

单片机编程范文第6篇

关键词:单片机; 编程; 仿真; 实验

目前,单片微型计算机已经在人们的工作生活中广泛应用。就我国而言,大部分高等院校中的电子信息专业也开设有涉及到单片机相关内容的专业教学课程。大量的实践研究结果表明,实验是单机片技术教学过程中最必不可少一大环节。然而在当前单片机技术蓬勃发展的推动作用下,市场所提供的各种实验仪器无法满足教学的发展要求,同时增大了教学成本。因此,如何才能降低教学成本、满足教学需要,已成为单片机教学中不得不思考的问题,设计高技术、易更新的单片机编程仿真实验系统,对支持单片机课程教学以及培养单片机专业人才具有重要意义。

1、 单片机编程仿真实验系统概述

一般而言,单片机编程仿真实验系统使用主板以及诸多12C总线基础上进行扩展的实验板共同构成。在这一实验系统系统当中,主板部分实现了包括单片机仿真、单片机基本实验电路、ISP在线系统编程以及总线等子系统结构的有机结合。在这当中,仿真实验系统的仿真部分发挥着最为重要的功效,其各种应用功能均是通过“SST89E564RD”的仿真监控芯片得以实现的。

该单片机的仿真系统CPU利用SST89E564RD,兼容性强、功能丰富、应用较为广泛,且其中集合了很多功能部件,这使得该仿真系统能够在降低系统的复杂性与研发应用成本投入的基础上,对整个系统运行稳定性以及可靠性提供支持与依据。本文设计的单片机编程仿真实验系统,具有较强的综合性,集合编程、仿真、实验为一体,全面支持单片机的实验教学,提高教学质量与效率[1]。

大量的实践研究结果表明,在单片机编程仿真试验系统中应用模块式的结构设计思路,不仅实现了各个实验接口相互间依存性与独立性的统一,促进各项实验工作内容循序渐进的开展,同时这种以该系统支持为基础建设的编程仿真实验系统平台,在顺利完成基础性的单片机原理、理论传授的同时,还可对单片机的扩展接口、串等进行实验。这样做既满足了高等学院不同层次的学生对发散性知识的学习需求,为学习过程中各阶段实践性教学模式,例如课程实验、电子设计比赛以及毕业设计等工作的开展营造练好的外部环境,同时也利于学生形成创新精神与创新能力,提高学习积极性。

2、 单片微型计算机(MCU)的选型

单片机从本质上来说是嵌入式微控制器的具体体现。单片机的问世意味着现代社会计算机应用技术的发展迈入一个崭新的阶段,其最大的特点在于实现了计算机应用功能由模式下单一的计算数据逐步发展为智能化的计算与分析,这也使得单片微型计算机具备了体积小、性能稳定、成本投入低、操作性强、可靠性高、以及适用性强等诸多特点。其主要运行思路在于:单片机系统能够将其嵌入对象所处基本环境当中,并与结构、体系发生联动关系,从而形成一个智能化的控制单元[2]。单片机的应用系统主要包括硬件与软件两大类。据相关数据显示,目前全世界已研发MCU的品种与数量高达一千种,普遍应用的约为30多种,以8051体系为代表。一个良好的单片机编程仿真实验运行系统,必须选择相匹配的MCU支持开展工作。有关MCU的选择应主要参照以下原则:

2.1典型性

首先,选择MCU应先了解有关单片机使用的产品概念。美国英特尔公司于1980年推出的MCS-51单片机,其中就包含有包含8031,但由于这种型号单片机并未设置系统程序存储器,使用起来不够方便,现已基本被市场淘汰;而8051系列所采用的HMOS芯片决定了其使用过程中的功耗较高;以及8751等通用性产品。目前,MCS-51仍然是单片机应用中的主流产品,各高校及相关专业的教材也主要以MCS-51为实验代表开展理论教学,因此实验系统的设计,应该始终坚持系统、理论的充分契合[3]。

2.2可编程功能

当前单片机编程可以划分为三种形式:专业级。它所采用的高端仿真芯片虽然能够仿真包括单片机、接口在内的系统运行全部资源,但芯片投入成本高,普及性不够;二是单片机生产商提供的IDE软件烧录,目前多应用在高档单片机的芯片中,其最要功能在于仿真芯片并支持单片机实验的进行。其价格适中,仿真单机资源较为全面并且调试方便[4];三是以单片机可编程功能为参考依据,在软件仿真性能得以确保的基础上,对单片机实施直接的系统编程,并将运行效果及时呈现出来。其成本不高,便于进一步研究与推广。这也就说明,单片机的可编程技术是该行业领域发展中的必然选择与趋势。。

2.3性价比

微控制器的成本问题是所有单片机仿真实验系统需要考虑的基本问题之一,如忽略成本因素,将会造成产品造价过高,市场竞争力比较弱,进而对仿真实验的开展带来一定影响。为了控制成本,本文中提到的单片机编程仿真实验系统,集合了编程、仿真、实验为一体,具有强大的MCU功能性[5],一方面是MCS-51系列的基本作用;另一方面则具备仿真功能与在线编程。由美国艾特梅尔公司生产的AT89S51单片机,性价比较高,既可满足各种基本功能,同时成本不高。

3、 单片机编程仿真实验系统的设计

3.1单片机的编程器模块

一般而言,单片机编程仿真实验系统所涉及到的编程器模块总体设计可以划分为操作部分、显示部分以及设置部分三大板块。在这一系统当中,操作部分还能够进一步划分为文件保存、文件打开、读器件、写器件、擦除器件、数据检测以及系统锁定等子功能;而设置部分则将括编程器类型选择、串口和波特率的性能设置、加密位的设置纳入工作范畴;显示部分包括缓冲存储区的1内容与2内容、提示信息等。

3.2 Flash闪速存储器的并行编程

以AT8951单片机为例,它所具备的4K字节的快速Flash编程存储阵列使其在编程方法的选择过程中可以采取以EPROM编程器为中心,以高压及协调控制信号为主要手段进行编程的方式。具体方法可以归纳为以下几个步骤:①在地址线中添加编程的地质信号;②在数据线中加入需写入数据的字节;③将相对应的控制信号激活,以备使用;④在EA/VPP终端加入编程电压(+12V)[6];⑤当Flash存储阵列写入新建字节或是写完程序时,ALE/PROG编程脉冲需要做到及时的,在编程过程中循环以上步骤,直至整个文件编写工作的顺利完成。

3.3 Flash闪速存储器的串行编程

一般来说,其串口接口主要包括:输入线(MOSI)、输出线(MISO)、SCK线。当RST被拉高之后,应该在进行其他操作之前,发出编程的相关指令,并擦除芯片。以33MHz的晶体为例,最高串行时钟的频率为2MHz[7]。那么其具体编程方法与步骤分析包括以下几方面:①上电的程序。将电源添加到GND与VCC,将RST设置成“H”代码,若系统还存在XTSL1/XTAL2接入晶体、时钟频率等,需要等候约10ms;②将编程的指令发送至MOSI,编程的时钟接到SCK,在该频率状态下,应比晶体时钟频率小于1/16;③代码阵列编程的可选择字节模式,由自身定时决定写周期,一般在0.5ms范围内;④所有的代码单元都可以与读指令选择相对应的地址,并与回读数据进行验证;⑤完成整个编程过程之后,将RST设置成“L”,即代表操作结束;⑥断电的程序,如果没有在系统中应用任何晶体,那么将XTAL设置为低档、RST设置为低档,对VCC进行判断。

3.4系统的可编程功能

系统涉及到了ISP可编程接口的设置与应用。ISP 下载的同时配合上位机的应用编程软件,整个仿真实验系统能够实现直接插入单片机的功能,并以此完成编程、烧写等过程,这种方法既稳定又快捷。在实际应用过程中,这些编程软件不需要再额外安装绿色软件,使用起来非常便捷,且功能强大,支持写入、读写、代码区的数据检验、器件的自动检验等,完成自动化、智能化过程。

参考文献:

[1]马忠梅等.单片机的C语言应用语言设计[M].北京:北京航空航天大学出版社.2007

[2]姚烨.基于PROTEUS和KEIL C的单片机仿真技术浅析[J].科技经济市场.2008(6)

[3]范维浩.控制器编程智能仿真模块[J].仪表技术与传感器.2011(4)

[4]马淑华、王凤文、张美金.单片机原理与接口技术[J].北京:北京邮电学院出版社.2005

[5]谭林.基于单片机的温度监控系统设计[J].国外电子测量技术.2009(4)

[6]周艳香.掌握Visual FoxPro 应用的一些小技巧[J].职业圈.2007(17)

[7]赵义强、康静、郭向亮.Proteus仿真软件在单片机设计中的应用[J].中国集成电路.2007(2)

单片机编程范文第7篇

关键词 功能表图;单片机;编程;程序设计

中图分类号:TP313 文献标识码:A 文章编号:1671—7597(2013)031-114-03

功能表图也称顺序功能表图或称状态转移图,它是描述控制系统过程、功能和特征的一种图形。功能表图作为一种控制系统的设计工具包含了状态机的思想。它在较复杂的PLC程序设计中的应用已充分显示出优越性。利用功能表图设计PLC程序不仅明显提高设计效率,而且设计的程序可读性好、便于调试和修改。笔者在单片机编程中使用功能表图法同样获得很好的效果。

该文的程序例均用Keil C51语言编写。

1 概念说明

为了实际使用的便利我们对功能表图的某些概念做更具体的说明。

1)关于“步”:步是控制系统中一个相对不变的状态。这里所指的系统状态在物理上通常是由控制器的输出所决定。所以“步”总是与特定的输出联系在一起的。在以单片机为中心的控制器中,从广义角度看,“输出”可以是对单片机端口的赋值,可以是对一个标志变量的赋值,也可以是调用一个数据处理子程序。如果一个步不涉及端口赋值,那么这个步是一个虚拟意义上的步,我们称之为虚步。

2)关于“转换条件”:当转换条件由多个条件组成时,我们可以将它们划分为预备条件和触发条件。预备条件即预先需准备好的条件。触发条件即为转换发生的“点火”条件。在编程时我们将预备条件放在内层判断,将触发条件放在外层判断。这样安排的好处是:当触发条件不成立时不需要对预备条件进行无效的重复判断,以节约单片机的程序执行时间。

3)关于“路”的定义:如果一个序列中最多只有一个步活动则这个序列称为一路。同一路中不同的步不能同时活动。不同路的步可以同时活动。只有一个步的序列,称为单步路。我们可以设计多路结构的程序以完成多任务操作。在C语言程序中我们用一个无符号单字节型变量表示同一路各步的进展,这样从形式上保证同一路不会出现二个以上步同时活动。

2 功能表图的C语言表达

2.1 单序列的C语言表达

图1为第1路第i步到第m步单序列的功能表图。

4 基于状态机思想的单片机主程序架构

图6显示的主程序流程图是一种基于状态机思想的主程序架构。其的特点是单大循环、模块化、按步无等待轮询。

输入查询模块将端口值输入到内存变量,后续要引用的端口输入改为引用对应的内存变量。这样安排是保证同一扫描周期内的输入变量值保持不变。前公共处理模块用于处理预先要处理的非步内事务,以及来自中断服务程序的消息(标志)所触发的事务。后公共处理模块用于处理下一扫描周期开始前需要处理的非步内事务,如保存本次扫描的端口输入值,以便检测该输入的跳变情况。各路模块是指各路序列对应的程序模块。各种中断服务程序处理强实时性事务。中断服务中如有耗时长且实时性要求不高的事务,应该使用标志,将此类事务引到主程序中处理。

5 应用实例

举一个简单的实例来进一步说明功能表图的使用方法。图7为一个单车道车辆闯红灯抓拍的功能表图。本例不考虑两车紧跟闯红灯、车辆检测器误动作及红灯故障等情况。停车线两侧埋有2个车辆检测器的地感线圈。车辆先进入线圈1再进入线圈2。对闯红灯的车辆需要抓拍3张照片作为违章证据。

上述代码中,Capture()为抓拍子程序。TM1的定义及相关代码见3。51单片机定时器0做时标定时器,TM1计时单位为10ms。biSen1与biSen2分别为车辆检测器1和2的状态变量,=0为有车。biSen10为前一扫描周期的biSen1值。语句biSen10==1&& biSen1==0表示车辆检测器1输出为下降沿,即车辆进入线圈1时的车辆检测器1输出状态的变化。

6 结束语

该文探讨了功能表图在单片机编程中的应用方法。该方法已应用于产品开发的单片机编程中,实践表明使用该方法具有以下优点:1)可更清晰地描述编程思路,便于交流,减少疏漏。2)使程序更易于模块化,便于修改。3)可提高单片机的运行效率,增加系统的实时性。

参考文献

[1]GB/T 21654-2008顺序功能表图用GRAFCET规范语言.

[2]GB/T 6988.6-93控制系统功能表图的绘制.

[3]张惠生.控制系统功能表图在PLC程序设计中的应用研究[J].北京建筑工程学院学报,2003(12).

[3]张俊.状态机思路在单片机程序设计中的应用[J].今日电子,2009(2).

[4]贺海峰.基于消息的单片机编程方法[J].广西大学梧州分校学报,2005(01).

作者简介

单片机编程范文第8篇

【关键词】单片机;汇编程序;编程技巧

Programming skills of MCU assembly program

【Abstract】In the MCU programing in assembly language,programming methods or selection of different instructions,may cause the program to achieve the same functionality,the implementation of the length of time and program size is not the same Occupy less memory space,short execution time is the basic principle of programming.This article from the two evaluation criteria to start,briefly assembler tips to optimize the time and space,the aim is to improve the efficiency of the implementation of the program,or reach a certain limit,the requirements to better meet the application requirements.

【Key words】MCU;Assembly program;Programming skills

0.引言

单片机应用系统由硬件和软件组成。软件是系统监控程序的总称,也就是各种指令依某种规律组合而形成的程序,单片机应用系统的软件设计是系统设计中最基本而且工作量较大的任务。迄今为止,单片机的程序设计语言主要采用汇编语言和高级语言。汇编语言是面向机器的语言,常称为低级语言,但比机器语言直观, 便于理解和记忆,适合编写短小、高效、实时控制的程序。在单片机应用系统中经常用汇编语言编写程序,在用汇编语言编写一个单片机应用系统的程序时,往往选择的程序结构、选用的汇编指令以及占用的存储空间都不相同,这就导致实现同一个功能的汇编程序不唯一。一个好的汇编程序应该执行时间短,占用系统的存储空间少,这就是评价汇编程序的时间和空间标准。

1.程序的时间和空间

先看个例子,用汇编程序将单片机数据存储器30H开始的16个单元中的数据依次循环左移8位,有三种实现方法:

方法一

MOV A,30H

MOV R1,#10H

MOV R0,#3FH

JH:XCH A,@R0

DEC RO

DJNZ R1,JH

方法二

MOV A,30H

MOV 30H,31H

MOV 31H,32H

......

MOV 3EH,3FH

MOV 3FH,A

方法三

MOV A,30H

XCH A,3FH

XCH A,3EH

......

XCH A,31H

XCH A,30H

上例中,三段汇编程序实现的功能相同,但占用的时间和空间却不相同,程序运行的时间分别为67个周期,32个周期和17个周期;程序占用的空间分别是10个字节、52个字节和34个字节。其中方法三和方法二相比较,不仅速度提高了将近1倍,而且减少了一半的存储空间。可见,不同的程序编写方法, 程序的时间和空间不相同。

2.时间和空间的优化

从上述分析得知,同一个功能的汇编程序有多种实现方法,在编写程序时,应该考虑系统对时间和空间的要求,对一般控制系统来说,主要考虑空间,保证程序能装下,而对于实时控制系统来说,主要希望程序执行的时间越短越好。正是由于不同的系统对时间和空间的要求不尽相同,所以在程序编写过程中,就要对汇编程序进行时间和空间的优化,来满足单片机应用系统的要求。下面笔者就浅谈在时间和空间优化上的一些小技巧。

2.1时间的优化

程序在时间上的优化最基本的就是用周期更短的指令代替原来的指令,例如当遇到乘除运算时,尽可能地用移位来实现;其次,寄存器寻址的指令具有指令周期数少的特点,所以尽量采用寄存器寻址,可以优化程序的执行时间。另外对于有很大存储空间的单片机应用系统, 还可以采用“空间换时间”的方法,即充分利用那部分闲置的存储空间,来编写执行时间短的程序,例如可以将循环程序分成几个单独的程序段执行,将带参数的子程序改成可以直接调用的子程序,省去对参数进行赋值上的时间等。上例中的方法三就采用的这种方法。

2.2空间的优化

程序在空间上的优化最基本的就是采用循环结构和子程序,使程序的长度大幅减少,占用内存空间减少,从而简化程序的逻辑结构,提高了空间效率。其次就是存储空间的复用,一般来说,一个存储空间只作一个用途, 但是在可利用资源非常有限的情况下,可以适当的实现存储空间的复用。另外在单片机应用系统对时间要求不高的情况下,可以使用“ 时间换空间” 的策略来压缩程序大小,即使用执行时间长但占用存储空间少的程序或程序段。例如, 将功能相同或相近的几个主程序段合并为一个子程序, 将几个相近的子程序合并成一个子程序等等。上例中方法一使用的就是这个策略。

3.结论

除以上的方法外, 一些小技巧的使用也可以优化程序。例如一些指令的配合经常可以做成模块使用, 多编制和收集一些模块化的子程序不仅有助于程序的编制, 也有利于提高所编制程序的可读性。

总之, 用汇编语言编写单片机程序不仅要能用, 而且要实用, 占用芯片内存少、执行时间短是编程的基本原则, 程序的逻辑性和可读性也是程序优劣的一项重要指标。

【参考文献】

[1]张友德等.单片微型机原理应用与实验[M].上海:复旦大学出版社.2003:618-619.

[2]谢敏.单片机应用技术 [M].北京:机械工业出版社.2010:61-62.

单片机编程范文第9篇

关键词:单片机应用编程与仿真;现状分析;教学建议

单片微型计算机(MCU)经过多年的发展,在性能上有很大的进步,在型号上发展到上千种类,已经广泛应用于人类社会生活的各个领域。单片机课程已经成为高校计算机、自动化、测控以及电子信息工程等专业的重要课程。该课程是一门理论性和实践性都很强的课程,在实际教学中,应将理论教学和实验教学紧密结合。从加强学生能力培养的要求来看,这类课程仅在课堂上讲授基本原理是不够的,必须在教学中加强实践环节,开设一定数量的高质量配套实验课或独立的实验课程,让学生有足够的实践机会。那么对于单片机实验教学环境建设就相应提出了较高要求。

一、课程教学现状分析

目前,在单片机教学中普遍存在着一些问题。

1.单片机课程往往多以理论为主,实验为辅的教学形式。实验也多是进行验证性实验。实验现在普遍采用“实验箱”,学生在做实验时都是按指导书上现成的资料,编译现成的程序,很少有同学去分析编程的原理和实验程序的流程,更谈不上去修改和完善。对于单片机电路也只是按实验指导书在实验箱上做简单的连线,没有一个整体的电气原理图概念,最终还是不会设计电路,甚至连基本的电气原理图都读不懂。但单片机是一门实践性很强的学科,只学习理论不做实验练习,很难真正地把单片机方面的知识理解掌握,很难真正成为单片机应用领域的高级人才。

2.学生实验时也存在着诸多限制,单片机实验室由于存在着场地和时间有限等问题,学生除了上课外,平时很难有机会实践。个人配备单片机编程实验开发系统,因成本较高,很多学生无法承受。同时一般单片机实验箱由于是成品,学生很难参与到其中的细节设计中去,一般单片机实验箱也只是起验证实验的作用,学生动手能力很难得到训练与提高。

3.教学过程中应用的单片机编程软件都是封装后,学习者根本不了解单片机编程器的工作原理,对于大多数的编程器软件只会简单的操作,不利于激发学生学习的积极性。

二、解决措施

1、构建单片机编程仿真实验系统得的必要性和类型选择

构建开放源代码、低成本、易更新的单片机编程仿真实验系统,对我国单片机领域人才的培养和单片机课程的教学具有重大的现实意义。它不仅可以显著降低实验设备投资,而且将培养学生的创新精神和探索精神,为单片机课程实验教学带来革命性的变化。

早期,人们曾把逻辑分析仪作为单片机应用系统的开发工具来使用,但功能有限只能用于简单的单片机系统;对于复杂的单片机系统,可以使用微型计算机来进行应用开发,把能开发单片机的微型计算机称为微型机开发系统MDS(Microcomput Development System):此外,还有专门的单片机开发系统,称为在线仿真器ICE(In Circuit Emulator),通过它可以进行单片机应用系统的软硬件开发和EPROM写入。完整的单片机开发和实验系统应包括微型计算机、编程器(又叫烧录器)、仿真器、实验电路板等。当今流行的计算机都能满足单片机学习与开发的要求。编程器用于把编译好的程序写入单片机的ROM里面,把写好后的芯片插到实验板上面进行试验。单片机仿真器用来实时仿真调试单片机程序及硬件电路,随时发现问题,修改程序,提高编写程序的效率。硬件实验板,作为单片机实验的电路部分,可以进行相关实验电路的单片机编程仿真实验,测试单片机程序能否实现实验电路的功能。

当今比较流行的单片机编程仿真实验系统,一般都是集编程、仿真、实验于一体,综合功能极强。在互联网上,设计开发单片机实验教学仪器的个人网站也是一种比较好的选择。

2、Keil C5 l集成开发环境和Proteus软件的引入和使用

Keil C5 l集成开发环境uVision3是基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立和管理、编译、连接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程。尤其C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。由于Keil本身是一个纯软件的东西,还不能直接进行硬件仿真,必须连接上面所述的在线仿真器硬件才可以进行仿真。Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其电路组成的系统的仿真、RS232动态仿真、i2c调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。②支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PICl2系列、PICl6系列、PICl8系列、Z80系列、HCll系列以及各种芯片。Proteus硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前

状态。

参考文献

[1]刘焕平.MCS 51系列单片机实验板[J].石家庄职业技术学院学报, 2002.14(4)

[2]廖平.单片机实验教学的改革[J].实验室研究与探索,2004,23(7):36-38.

[3]焦振宇.浅谈新形势下我国高校单片机教学的课程改革[J].高教论坛,2005,(1):102-104.

[4]彭勇.单片机课程的教学改革[J].农业网络信息,2006,6:115-116.

作者简介

单片机编程范文第10篇

【关键词】可编程控制器;单片机;串行通信

串行通信是一种广泛应用于各个领域的通信方式,西门子S7-226可编程控制器与AT89S51单片机的结合作为一种新的串行通信方式,它在工业领域有广泛的运用,无论是从实用性还是灵活度的角度分析,该设计的结构都相对比较简单,且制作成本也相对较低,具有较强的发展价值。

一、参与试验中的通信硬件综述

1、试验中的单片机通信功能概况

AT89S51单片机是一种低功耗,高性能的单片机,包括4k字节的网络服务提供商能够对Flash只读程序存储器反复擦写一千次,另外还有128字节的随机存储器和一个全双工串行通信端口,不仅可以进行网络间通讯,而且还可以实现串行的异步通讯,甚至可作为一个同步的移位寄存器进行使用。一般来说,这种单片机可通过串口的中断实现数据的传输,由于它的串行通信口输出为TTL电平,在外在端口变为RS232端口进行全双工通信时,可以通过相应可靠型号的芯片等进行电平转换。而与外设含有RS-485接口时,则必须选择与之相对应型号的配套芯片实现电平的转换来进行半双工通信。

2、试验中的可编程控制器通信功能概况

西门子S7-226可编程控制器具有13K字节程序的数据存储量,两个9针RS-485端口与24路输入和16路输出,共包含40个数字量的I/O点,支持点至点、多点接口,自由通信等协议。PPI协议作为主从协议中的主站必须按照所要求的指令向从站设备传输信息。而从站设备只有响应的职能却不能够提供有效的信息反馈给主站的一方。PPI协议广泛应用于可编程控制器同触摸屏之间的通讯中。这其中主站是触摸屏,从站是可编辑控制器,通过触摸屏来传输指令,可编程控制器进行响应,但是并不向触摸屏发送反馈信息。而相对于许多的端口来说,可编程控制器允许主站与主站,主站与从站之间的通讯,而如果控制器是相对较大的规模的话,并且这个控制系统具有大量的控制器和集成线路端口,完成通信过程则需要借助其他的协议才能实现。针对自由方式的通信,则可以依据用户的需求对通讯协议进行配置和编程,就可以达成像单片机、打印机和变频器等一系列类似设备之间的联通灵活通信了。

二、参与试验的项目设计

1、参与试验的项目硬件构成

AT89S51单片机同西门子S7-226可编程控制器之间实现信息传输与反馈需要遵守以下流程来实现。西门子S7-226控制器上只有唯一一个RS-485端口,通过此端口接受发送器来连接单片机。因此需要选择有效可靠的端口来达成,可编程控制器所发出的485电平信号就可以通过转换进而变为单片机可以接收的信号,并借助相应形式的串口联结线实现内部寄存器的输入。可编程控制器同单片机间无法同时进行接收和发送主要是由于端口处所使用的是半双工的方式。这样,它们在进行信息的实时发送过程中,需要一个来自外部的硬件握手信号来实现二者的联结。

此次试验项目里在可编程控制器端选用的是1个数字量的输入口I0.0和输出口Q0.0,而内部寄存器端口采用的是并口P1中的P1.0、P1.1以及P1.2。以下是二者实现联结的具体操作事宜:当单片机需要向可编程控制器反馈信息的时候,置位P1.2可通过光耦PC817进行24V高电平向I0.0的输出,当前可编程控制器便是处于接收端的状态,要中断并对接收信息进行相应地设置,微控制器置P1.0低电平时也可以实现与指定端口之间的传输。这样,信息便通过相应的端口向选定好的端口实现传输发送,并且又转换为可编程控制器端口可以接收到的信号。而可编程控制器需要向单片机进行信息的发送时,可编程控制器可借助输出口Q0.0向单片机的P1.1进行高平点的发送,微控制单元进行串口中断的设置,置P1.0作为高电平接收信息。

2、参与试验的项目通信协议的设计

可编程控制器和单片机二者实现串口通信需要借助RS-485来完成,RS-485作为一种标准协议必须规定并提供指定对应的七层网络协议模型中最底层的规定,双方还需要进行其他的一些协议规定,比如字符格式以及波特率等内容。依照参与试验中各个具体项目的实际特性,在传送过程中进行相应的规定,无奇偶校验,并选择相对应的波特率。同时,加入帧校验码或者对起始字符和结束字符进行相应的标准化规定以保障在发送数据时整个通信过程的稳定和可靠。在计算帧校验码的过程中,必须以字节为依据对所传输的数据通过异或运算方式得出最终的数据,将所得结果发送给接收方,后者再进行相同的运算。然后将后者得出的结果与前者相较,如果前后运算结果出现了偏差,那么就要对发送过来的错误信息予以放弃并要求重新发送,数据传输格式如下所示:

起始字符 状态信息 有效数据 帧校验码(FCS) 结束字符

实际上,无论什么样的可编程控制器都能够与单片机通过串口完成通信,关键是要掌握该可编程控制器的通讯协议,了解帧的传送格式,这样便可以达成两者之间的串行通信了。

结语

如今,单片机与可编程控制器的结合使用已被广泛应用于许多领域,掌握可编程控制器的通信协议,使其与单片机通过串口完成通信的设计具有重要的现实意义。

参考文献

[1]李生军,李少蒙.单片机与PLC之间的串行通信实现[J].化工自动化及仪表,2010,37(2):78-80.

[2]武德庆.单片机与PLC串行通信数据传输模式实现[J].民营科技,2010,(09).

[3]刘慧龙,陈高辉.单片机与PLC的串口通信设计[J].科技创新与应用,2012,(11).

上一篇:stc单片机范文 下一篇:单片机原理及接口技术范文