手把手教你学习应用51单片机(第一章)原创!

[复制链接]
3643|12
 楼主| ahai0306 发表于 2008-12-4 20:37 | 显示全部楼层 |阅读模式

第一章  认识单片机及其如何工作
 
一、单片机简单说明
目前单片机主要8位、16位、32位单片机, 8位单片机应用最为广泛,教材也比较多,16位和32位在最近几年也应用的越来越广泛。
51单片机是8位单片机中使用最早,在我国使用最广泛的一种。常见的品牌有atmel, STC, SST, NXP(飞利浦) ,freescale(原摩托罗拉),华邦,高性能C8051F等品牌。
Intel的8031,8051早就不生产了,其它公司都是根据其内核生产的,使用其指令系统和结构,但是各个品牌又增加了自己很多功能,如FLASH存储器,内置看门狗,AD功能等功能,各个品牌的功能也不大一样。
作为学生或者初学者,学习51非常适合入门,资料丰富,例子较多,对以后学习其它高级的单片机是一个非常好的基础。
本开发板选用的是STC89C51单片机,该单片机是最近几年新出的,完全兼容MCS-51,增加了FLASH,ISP下载,大容量RAM,看门沟,内部复位电路,EEPROM,及最高80M的运行速度等功能。
大家如果对以上介绍的不太了解,不要紧,随着学习和积累经验,就明白了。
 
二、单片机工作的条件
1、一个51单片机要工作需要具备哪些条件?
DC5V电源(有的单片机是3.3V),复位电路,和晶振,单片机只要有了这三点就可以工作了。
(但是有的单片机内部集成了复位电路或晶振,这时候外部的电路就可有可无了,比如STC单片机的内部集成了复位电路,C8051F单片机的内部集成了晶振电路)
复位电路,大部分51是高电平复位的(如下图),C8051F是低电平复位的,电阻和电容要更换位置。
  
晶振电路:常用的电容是22P或30P,晶振选择11.0592是为了通信的时候拨特率0误差。大家可以找教程查查拨特率和晶振的对应关系。

 
三、单片机如何编写程序呢?
单片机除了具备以上的硬件条件,还要有程序才能真正运行,就象电脑需要装操作系统才能用一样的道理。
单片机编程可以使用MCS-51汇编语言和C语言编程。其实单片机真正执行的是BIN或HEX文件,那么BIN和HEX文件是如何得到的呢,是通过汇编语言或C语言编写的程序,经过专门的软件编译后最后生成的。
C语言的编译软件主要用KEIL软件,也是最好用最常用的软件。汇编语言的编译软件比较多了,常用的有WAVE软件。
   四、单片机如何下载/烧录程序呢?
       1、使用通用的编程器烧录(并口烧录,可以烧录各种品牌的)
       2、使用下载线进行ISP下载,(只需要2-3根线),这种下载方式非常方便,缺点是各个品牌的下载方式不统一。比如STC,SST,飞利浦的使用TXD,RXD下载,比较方便;而atmel的,只有AT89S系列的才可以下载,AT89C51的就不可以ISP下载,并且使用P15,P16,P17三个引脚下载,而且下载线要有专用的下载电路。
        ISP下载的非常适合学习和实验,而通用烧录的适合工厂生产。
现在,你已经学会了单片机怎么使用了,休息一下!进行第二章的讲解
 
不明白的地方和我交流!
QQ:464976346
http://blog.**/ahai0306/(我的EDN博客)
 
相关链接:http://blog.**/ahai0306/
 楼主| ahai0306 发表于 2008-12-4 20:41 | 显示全部楼层

手把手教你学习单片机(2.1)


第二章  单片机基础实验
一、单片机控制发光二极管实验


首先学习一下硬件,拿第一路为例,R1为限流电阻,发光二极管导通后的压降为Ud,那么流过此二极管的电流为(U-Ud)/R,大家可以根据二极管的大小来调整电阻大小,以保证亮度。开发板用的0805/1206发光二极管使用1K电阻即可。如果是大功率的发光管需要加驱动如三极管电路之类的,不能直接连接单片机引脚的。各种品牌的IO驱动能力不一样的,STC89C51的IO灌电流能力是20mA。
上面发光二极管的原理是,P00为高电平(5V),D1截止,不亮;P00为低电平(0V),D1导通,发光。二极管控制就这么简单,下面来编写程序吧
C语言程序:
#include        <reg52.h>   //调用头文件(单片机内部的寄存器定义)
sbit  LED0   = P0 ^ 0;  //必须定义,P0 ^ 0 脱离开sbit指令是其它意思
main()         //主函数
{
  LED0=0;      //LED0发光二极管亮(P00输出低电平)
  while(1);    //单片机在这里等待(待机)

汇编程序:
;***********硬件I/O口定义************
LED0             EQU                   P0.0
               ORG    0000H                ;上电后程序从这里运行
               AJMP  MAIN
               
MAIN:       
                   CLR    LED0               ;LED0发光二极管亮(P00输出低电平)
                   SJMP   $                     ;单片机在这里等待(待机)
                   END
 
第一个程序已经编写完了,编译后下载到单片机体验一下吧,我以前写过初学者的第一个单片机程序,大家可以看看:
http://blog.**/ahai0306/19917/message.aspx
 
这时候大家已经会点亮第一个灯了,然后大家可以随便点亮其它的灯了,可以使用P0直接点亮8个灯了
C语言程序:
#include        <reg52.h>   //调用头文件(单片机内部的寄存器定义)
main()         //主函数
{
  P0=0;      //P0口的8个发光二极管全亮
  while(1);    //单片机在这里等待(待机)

汇编程序:
               ORG    0000H                ;上电后程序从这里运行
               AJMP  MAIN
MAIN:       
                   MOV P0    #00H              ;P0的8个发光二极管全亮
                   SJMP   $                     ;单片机在这里等待(待机)
                   END
现在大家可以用移位指令加上适当延时,来进行流水灯实验了,大家先思考一下如何实现?
不明白的地方和本人交流!
QQ:464976346
http://blog.**/ahai0306/(我的EDN博客)
相关链接:http://blog.**/ahai0306/
最最 发表于 2008-12-4 22:25 | 显示全部楼层

原创的,顶下。

zoudem500 发表于 2008-12-5 09:17 | 显示全部楼层

学习

学习中
zoudem500 发表于 2008-12-5 09:17 | 显示全部楼层

期待继续

第二章呢?
夜ˇ 发表于 2008-12-6 22:02 | 显示全部楼层

支持

呵呵 ~~
原野之狼 发表于 2008-12-6 22:46 | 显示全部楼层

顶!

继续写~
saul2006 发表于 2008-12-6 23:51 | 显示全部楼层

支持原创

dspjs 发表于 2008-12-7 10:35 | 显示全部楼层

re

支持,帮你顶下~~~
弟儿 发表于 2008-12-8 19:05 | 显示全部楼层

如何利用51单片机编程实现直流电动机调速!

新手上路,
如何利用51单片机编程实现直流电动机调速!给点思路吧!
弟儿 发表于 2008-12-8 19:21 | 显示全部楼层

如何利用51单片机编程实现直流电动机调速!给点思路吧!

这是我的邮箱:1065463644@qq.com
 楼主| ahai0306 发表于 2009-2-16 16:22 | 显示全部楼层

回复楼上的

楼上的,请把详细说明写下吧,
zigbee笔记 发表于 2009-2-16 17:26 | 显示全部楼层

顶,支持原创!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

158

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部