菜鸟学习单片机
本人是一名学习单片机的菜鸟,现在对于单片机虽然算不上很精通,但是写这篇文文档就是想和正在学习单片机的菜鸟们分享一下自己的经验和想法,其实单片机的世界是非常深奥的,我现在所了解的是皮毛中的毫毛,文中有不对的地方或者有更好的思想请联系本人,我们一起探讨。
本人邮箱:sniper_m99@163.com
一.什么是单片机?是干什么用的?
1.什么是单片机?
这是单片机的定义:单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。
直观上单片机就是一个黑乎乎的周围有很多引脚的很小的芯片,如图:
以上两种都是单片机,但是封装的形式不同。而在我看来这种单片机还没有实现真正意义上的单片机,因为你直接按着引脚功能接通电源是不能工作的,还缺少晶振,如图
没有晶振和复位电路单片机是不能工作的,而我在网上浏览《第八届全国信息技术应用水平大赛STC杯单片机系统设计大赛》的时候,看到STC15F2K60S2系列的单片机,它不需要外部晶振,外部复位电路和外部的EEPROM,我个人认为STC15F2K60S2才实现了真正意义上的单片机。
2.单片机是干什么用的?
单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
例如我买的普中科技的开发板,图片如下:
图中红色圈住的部分是单片机,蓝色圈住的部分晶振,绿色圈住的部分是外部的元器件。
我们可以把这个开发板整体看成是一个人,红色圈住的单片机好比人的大脑(单单有一个大脑那不能称之为人,或者可以说是一个死人);蓝色圈住的晶振好比人的心脏(有了心脏和大脑才勉强算是一个活人);绿色圈住的外部的元器件就好比人的眼睛,耳朵,手,脚等等,电路板上的连线就是发送信号的“神经”。
其工作状态和我们人一样,前提是当我们的心脏在跳动,我们的大脑通过神经对我们的眼睛,鼻子等发出信号完成不同的动作,同样,晶振在工作,单片机通过引脚所连接的连线对不同元器件操作,达到控制该元器件的目的,来完成你想要的工作。而如果你想让单片机按着你的思想来控制外部元器件工作,就需要你编写程序来告诉单片机,让他去控制外围元器件。编写程序用到汇编语言,C语言,个人认为汇编语言对于理解单片机的内部寄存器配置什么的是非常有帮助的,但是移植性不好,C语言移植性好,但是感觉更偏向于应用了,不利于理解其内部的寄存器等。
例如:
/*点灯程序汇编代码*/
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV P0, #OFFH ;P0口初始化,8个灯全灭
MOV P1,#0FFH ;P1口初始化,设置P1口为输入方式
LOOP: MOV A,P1 ;读P1口数据
MOV P0,A ;送P0口输出
LJMP LOOP
END
/*点灯程序C代码*/
#include
#define uchar unsigned char
#define uint unsigned int
uchar temp;
delay(uint);
void main ()
{
while(1)
{
temp=P1;
delay(100);//去抖动
if (P1==0xff);
else
{
switch(temp)
{
case 0x7f:P0=0x7f;break;
case 0xbf:P0=0xbf;break;
case 0xdf:P0=0xdf;break;
case 0xef:P0=0xef;break;
case 0xf7:P0=0xf7;break;
case 0xfb:P0=0xfb;break;
case 0xfd:P0=0xfd;break;
case 0xfe:P0=0xfe;break;
}
}
}
}
delay(uint z)
{uint x,y;
for (y=z;y>0;y--)
for (x=100;x>0;x--);
}
虽然看起来这个C代码比汇编代码要长很多,但是写大型程序时就会感觉C的好处了,本人建议汇编语言只要了解基础就行了,主要C语言,当然如果你特别喜欢汇编语言,那可以继续往深了研究。