第一章 认识单片机及其如何工作
一、单片机简单说明
目前单片机主要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下载的非常适合学习和实验,而通用烧录的适合工厂生产.
现在,你已经学会了单片机怎么使用了,休息一下!进行第二章的讲解
工程师手把手教你学习单片机(作者原创)
全部回复(11)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
第二章 单片机基础实验
一、单片机控制发光二极管实验
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/72/67561228365123.jpg');}" onmousewheel="return imgzoom(this);">
首先学习一下硬件,拿第一路为例,R1为限流电阻,发光二极管导通后的压降为Ud,那么流过此二极管的电流为(U-Ud)/R,大家可以根据二极管的大小来调整电阻大小,以保证亮度.开发板用的0805/1206发光二极管使用1K电阻即可.如果是大功率的发光管需要加驱动如三极管电路之类的,不能直接连接单片机引脚的.各种品牌的IO驱动能力不一样的,STC89C51的IO灌电流能力是20mA.
上面发光二极管的原理是,P00为高电平(5V),D1截止,不亮;P00为低电平(0V),D1导通,发光.二极管控制就这么简单,下面来编写程序吧
C语言程序:
#include //调用头文件(单片机内部的寄存器定义)
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.ednchina.com/ahai0306/19917/message.aspx
这时候大家已经会点亮第一个灯了,然后大家可以随便点亮其它的灯了,可以使用P0直接点亮8个灯了
C语言程序:
#include //调用头文件(单片机内部的寄存器定义)
main() //主函数
{
P0=0; //P0口的8个发光二极管全亮
while(1); //单片机在这里等待(待机)
}
汇编程序:
ORG 0000H ;上电后程序从这里运行
AJMP MAIN
MAIN:
MOV P0 #00H ;P0的8个发光二极管全亮
SJMP $ ;单片机在这里等待(待机)
END
现在大家可以用移位指令加上适当延时,来进行流水灯实验了,大家先思考一下如何实现?
不明白的地方和本人交流!
QQ:464976346
http://blog.ednchina.com/ahai0306/(我的博客)
一、单片机控制发光二极管实验
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/72/67561228365123.jpg');}" onmousewheel="return imgzoom(this);">
首先学习一下硬件,拿第一路为例,R1为限流电阻,发光二极管导通后的压降为Ud,那么流过此二极管的电流为(U-Ud)/R,大家可以根据二极管的大小来调整电阻大小,以保证亮度.开发板用的0805/1206发光二极管使用1K电阻即可.如果是大功率的发光管需要加驱动如三极管电路之类的,不能直接连接单片机引脚的.各种品牌的IO驱动能力不一样的,STC89C51的IO灌电流能力是20mA.
上面发光二极管的原理是,P00为高电平(5V),D1截止,不亮;P00为低电平(0V),D1导通,发光.二极管控制就这么简单,下面来编写程序吧
C语言程序:
#include
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.ednchina.com/ahai0306/19917/message.aspx
这时候大家已经会点亮第一个灯了,然后大家可以随便点亮其它的灯了,可以使用P0直接点亮8个灯了
C语言程序:
#include
main() //主函数
{
P0=0; //P0口的8个发光二极管全亮
while(1); //单片机在这里等待(待机)
}
汇编程序:
ORG 0000H ;上电后程序从这里运行
AJMP MAIN
MAIN:
MOV P0 #00H ;P0的8个发光二极管全亮
SJMP $ ;单片机在这里等待(待机)
END
现在大家可以用移位指令加上适当延时,来进行流水灯实验了,大家先思考一下如何实现?
不明白的地方和本人交流!
QQ:464976346
http://blog.ednchina.com/ahai0306/(我的博客)
0
回复
提示
@ahai0306
第二章 单片机基础实验一、单片机控制发光二极管实验[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/72/67561228365123.jpg');}"onmousewheel="returnimgzoom(this);">首先学习一下硬件,拿第一路为例,R1为限流电阻,发光二极管导通后的压降为Ud,那么流过此二极管的电流为(U-Ud)/R,大家可以根据二极管的大小来调整电阻大小,以保证亮度.开发板用的0805/1206发光二极管使用1K电阻即可.如果是大功率的发光管需要加驱动如三极管电路之类的,不能直接连接单片机引脚的.各种品牌的IO驱动能力不一样的,STC89C51的IO灌电流能力是20mA.上面发光二极管的原理是,P00为高电平(5V),D1截止,不亮;P00为低电平(0V),D1导通,发光.二极管控制就这么简单,下面来编写程序吧C语言程序:#include //调用头文件(单片机内部的寄存器定义)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.ednchina.com/ahai0306/19917/message.aspx这时候大家已经会点亮第一个灯了,然后大家可以随便点亮其它的灯了,可以使用P0直接点亮8个灯了C语言程序:#include //调用头文件(单片机内部的寄存器定义)main() //主函数{ P0=0; //P0口的8个发光二极管全亮 while(1); //单片机在这里等待(待机)}汇编程序: ORG 0000H ;上电后程序从这里运行 AJMP MAINMAIN: MOVP0 #00H ;P0的8个发光二极管全亮 SJMP $ ;单片机在这里等待(待机) END现在大家可以用移位指令加上适当延时,来进行流水灯实验了,大家先思考一下如何实现?不明白的地方和本人交流!QQ:464976346http://blog.ednchina.com/ahai0306/(我的博客)
0
回复
提示
@ahai0306
第二章 单片机基础实验一、单片机控制发光二极管实验[图片]500){this.resized=true;this.width=500;this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}"onclick="if(!this.resized){returntrue;}else{window.open('http://u.dianyuan.com/bbs/u/72/67561228365123.jpg');}"onmousewheel="returnimgzoom(this);">首先学习一下硬件,拿第一路为例,R1为限流电阻,发光二极管导通后的压降为Ud,那么流过此二极管的电流为(U-Ud)/R,大家可以根据二极管的大小来调整电阻大小,以保证亮度.开发板用的0805/1206发光二极管使用1K电阻即可.如果是大功率的发光管需要加驱动如三极管电路之类的,不能直接连接单片机引脚的.各种品牌的IO驱动能力不一样的,STC89C51的IO灌电流能力是20mA.上面发光二极管的原理是,P00为高电平(5V),D1截止,不亮;P00为低电平(0V),D1导通,发光.二极管控制就这么简单,下面来编写程序吧C语言程序:#include //调用头文件(单片机内部的寄存器定义)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.ednchina.com/ahai0306/19917/message.aspx这时候大家已经会点亮第一个灯了,然后大家可以随便点亮其它的灯了,可以使用P0直接点亮8个灯了C语言程序:#include //调用头文件(单片机内部的寄存器定义)main() //主函数{ P0=0; //P0口的8个发光二极管全亮 while(1); //单片机在这里等待(待机)}汇编程序: ORG 0000H ;上电后程序从这里运行 AJMP MAINMAIN: MOVP0 #00H ;P0的8个发光二极管全亮 SJMP $ ;单片机在这里等待(待机) END现在大家可以用移位指令加上适当延时,来进行流水灯实验了,大家先思考一下如何实现?不明白的地方和本人交流!QQ:464976346http://blog.ednchina.com/ahai0306/(我的博客)
很不错!!!
很合适初学者
很合适初学者
0
回复
提示