硅谷杂志:浅议51系列单片机编程的实现 |
2012-07-31 10:49 作者:曹治龙 来源:硅谷网 HV: 编辑: 【搜索试试】
|
|
硅谷网7月31日消息 (原文载于《硅谷》杂志)介绍单片机的现状,当前应用较多的主流单片机,并着重对主流单片机C语言编程的具体实现细节进行分析与总结。
1单片机的现状及应用
1.1单片机
单片机是把组成微型计算机的各种功能部件,包括微处理器(CPU)、随及存储器(RAM)、只读存储器(ROM)、定时器/计时器及输入输出接口等部件都集成在一块芯片上而构成的一个完整的微型计算机系统,实现微型计算机的基本功能。
早期的单片机基本是4位或8位的。其中intel的8008简单可靠而且性能稳定,市场占有率较高。后来又发展出了MCS51系列单片机。随着工业信息控制领域要求的提高,出现了16位单片机。上世纪90年代单片机技术得到了巨大提高,32位单片机迅速取代了16位单片机的高端地位而进入主流市场。与此同时,传统8位单片机的性能也得到有效的提升。现阶段,高端32位单片机的主频已超过300MHz,当前单片机系统已不只在祼机环境下开发和使用,大量专用的嵌入式操作系统已被应用在全系列的主流单片机上。而高端掌上电脑和手机所用的单片机甚至可以直接使用专用的windows和linus操作系统。
单片机相当于一个微型计算机,它质量小、价格便宜,为学习、应用和开发提供了有利条件。更重要的是,学习使用单片机是了解掌握计算机原理与结构的最佳选择。
随着信息技术的发展,单片机正朝着高性能和多品种方向发展。主要表现在:CMOS化、低功耗、小体积、大容量、低噪声与高可靠性以及价格低和外围电路内装化等方面。同时,嵌入到工业控制、智能仪表、通信设备、家用电器等很多领域。单片机原理与应用已成为高等工科类院校等专业的必修课。
1.2单片机的种类
单片机的种类很多如:MCS-51单片机、AVR、PIC、AT89C51单片机、ATMEL单片机、microchip单片机、motorola单片机等,MCS-51单片机是Intel公司的产品,产量大,技术成熟,资料丰富,价格低廉,最具代表性,下面以几个主要的做一粗略介绍。
1.2.1MCS-51单片机
MCS-51单片机的编程语言常用的有二种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,我认为在学习时选择C语言较好。同时,MCS51单片机在结构上有以下特点:程序寄存器和数据寄存器在空间是分开的,可以采用不同的寻址方式,使用两个不同的地址指针即PC指向程序计数器,DPTR指向数据存储器。这样可以满足工业控制中较大程序空间和较小数据空间的需要。同时,引脚在程序控制下有第二功能,方便设计人员良活选择。内部含有一个全双工的异步接口,可同时发送和接收数据。另外,此单片机内部有专门的位处理机,具有较强的位处理功能。
1.2.2motorola单片机
Motorola是世界上最大的单片机厂商之一。从M6800开始,开发了广泛的品种,4、8、16、32位的单片机都能生产,其中典型的产品有:8位机M6805,16位机M68HC16,32位机M683XX。其特点之一,就是在同种类单片机的速度下所用的时钟频率较Intel单片机低很多,进而能使其高频低噪,具有较强的抗干扰能力,更是适合于工业控制领域或恶劣环境下设备工作的需要。
1.2.3Microchip单片机
MicroChip单片机的主要产品是PIC16C系列和17C系列8位单片机,CPU采用MISC结构,Harvard双总线结构,运行速度快,工作电压低,功耗小,而有较大的输入输出直接驱动能力,价格低,一次性编程,适用于用量大。在自动化设备,通信,智能仪表,工业控制等领域都有广泛应用,而且市场份额逐年提高,发展迅速。
2单片机编程
单片机主要是通过汇编语言和C语言实现编程,发展到后来已实现与高级语言的混合编程。
汇编语言编程
汇编语言是面向计算机的程序设计语言,与计算机语言指令----对应,需要了解硬件结构,执行速度快,所占内存少,编程比较良活,操作简洁,代码精炼,执行高效。但是,程序不易理解,对产品的移植升级不太有利、代码不易读懂,维护困难等缺点。如用定时器实现灯的闪烁功能程序如下:下9C51
ORG0000H
AJMPSTART
ORG000BH;
AJMPTIME0;
ORG30H
START:
MOVP1,#0FFH;
MOV30H,#00H;
MOVTMOD,#00000001B;
MOVTH0,#3CH
MOVTL0,#0B0H;
SETBEA;
SETBET0;
SETBTR0;
LOOP:AJMPLOOP;
TIME0:;
PUSHACC
PUSHPSW;
INC30H
INC31H;
MOVA,30H
CJNEA,#20,T_NEXT;
T_L1:CPLP1.0;
MOV30H,#0;
T_NEXT:
MOVA,31H
CJNEA,#40,T_RET;
T_L2:
CPLP1.1
MOV31H,#0;
T_RET:
MOVTH0,#15H
MOVTL0,#9FH;
POPPSW
POPACC
RETI
END
C语言编程:
C语言现已有非常丰富的函数库供使用,并保留了部分低级语言的功能,同时又加入了高级语言的设计理念,普遍被称作中级语言,程序代码的编写非常人性化,易于阅读和理解,现已成为计算机领域普遍使用的语言。在很多方面都得到广泛应用。例如:用C语言编写单片机接收主机的数据:“Giveexamplesofthingstheydo.”然后将数据传送到P0口,并传回给主机。其程序及烧写过程如下:
2.1程序
#include<reg51.h>
#include<intrins.h>
unsignedcharkey_s,key_v,tmp;
charcodestr[]="Giveexamplesofthingstheydo.";
voidsend_str();
bit scan_key();
voidproc_key();
voiddelayms(unsignedcharms);
voidsend_char(unsignedchartxd);
sbit K1=P3^2;
main()
{
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
SCON=0x50;
PCON&=0xef;
TR1=1;
IE=0x0;
while(1)
{
if(scan_key())
{
delayms(10);
if(scan_key())
{
key_v=key_s;
proc_key();
}
}
if(RI)
{
RI=0;
tmp=SBUF;
P0=tmp;
send_char(tmp);
}
}
}
bitscan_key()
{
key_s=0x00;
key_s|=K1;
return(key_s^key_v);
}
voidproc_key()
{
if((key_v&0x01)==0)
{
send_str();
}
}
voidsend_char(unsignedchartxd)
{
SBUF=txd;
while(!TI);
TI=0;
}
voidsend_str()
{
unsignedchari=0;
while(str[i]!='\0')
{
SBUF=str[i];
while(!TI);
TI=0;
i++;
}
}
voiddelayms(unsignedcharms)
{
unsignedchari;
while(ms--)
{
for(i=0;i<120;i++);
}
}
2.2烧写过程
首先,使用C语言编译器KEIL,它支持众多公司的芯片,同时集编辑、编译、仿真于一体,支持C和汇编的程序设计,界面友好,易学易用。其次,建立一个C程序项目。第三,点击菜单(如Project),在文件名中输入C程序项目名称。第四,选择要写入程序的单片机如AT89C51。第五,在项目中创建新的程序文件并保存。第六,把C程序文件加入到项目文件组中。第七,编译程序。第八,调度运行程序并把调试正确的程序烧到芯片上。
3结束语
从以上不难看出,在单片机编程中汇编语言和C语言各自有各自的优点,同时又有各自的不足,那么究竟应该在什么时候用汇编,什么时候用C语言来实现,这个分界点应该如何把握?通常解决办法是用C语言编写大部分的功能代码,当出现调用子程序瓶颈时,再调用外部汇编函数或直接在C语言中嵌入汇编代码,实现优势互补。同时,单片机的应用已体现在生活中的各个领域,凡是有自动控制的地方,就会有单片机的影子。它的应用有利于系统向小型化、智能化、多功能化发展。单片机的应用系统已经从根本上改变了传统控制系统设计思想和方法。
|
|
|
|
【对“硅谷杂志:浅议51系列单片机编程的实现”发布评论】 |
版权及免责声明:
① 本网站部分投稿来源于“网友”,涉及投资、理财、消费等内容,请亲们反复甄别,切勿轻信。本网站部分由赞助商提供的内容属于【广告】性质,仅供阅读,不构成具体实施建议,请谨慎对待。据此操作,风险自担。
② 内容来源注明“硅谷网”及其相关称谓的文字、图片和音视频,版权均属本网站所有,任何媒体、网站或个人需经本网站许可方可复制或转载,并在使用时必须注明来源【硅谷网】或对应来源,违者本网站将依法追究责任。
③ 注明来源为各大报纸、杂志、网站及其他媒体的文章,文章原作者享有著作权,本网站转载其他媒体稿件是为传播更多的信息,并不代表赞同其观点和对其真实性负责,本网站不承担此类稿件侵权行为的连带责任。
④ 本网站不对非自身发布内容的真实性、合法性、准确性作担保。若硅谷网因为自身和转载内容,涉及到侵权、违法等问题,请有关单位或个人速与本网站取得联系(联系电话:01057255600),我们将第一时间核实处理。
|
|
|
|