单片机学习手册C51版.docx
- 文档编号:28317215
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:97
- 大小:184.67KB
单片机学习手册C51版.docx
《单片机学习手册C51版.docx》由会员分享,可在线阅读,更多相关《单片机学习手册C51版.docx(97页珍藏版)》请在冰豆网上搜索。
单片机学习手册C51版
单片机知识学习手册
项目一单片机的认识
一、单片机芯片引脚
89C51/89S51共有40个引脚,说明如下:
⒈电源:
⑴VCC<40>-芯片电源,接+5V
⑵VSS<20>-接地端;
⒉时钟:
XTAL1<19>、XTAL2<18>-晶体振荡电路反相输入端和输出端。
⒊控制线:
控制线共有4根,
⑴ALE/PROG<30>:
地址锁存允许/片EPROM编程脉冲
①ALE功能:
用来锁存P0口送出的低8位地址
②PROG功能:
片有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵PSEN<29>:
外ROM读选通信号。
⑶RST/VPP<9>:
复位/备用电源。
①RST〔Reset〕功能:
复位信号输入端。
②VPP功能:
在Vcc掉电情况下,接备用电源。
〔4〕EA/VPP:
/外ROM选择/片EPROM编程电源。
89C51/89S51芯片用部ROM〔程序存储器〕,所以此引脚必须接高电平+5V.
4.输入/输出口线
•P0.0~P0.7<39~32>P0口8位双向口线
•P1.0~P1.7<1~8>P1口8位双向口线
•P2.0~P2.7<21~27>P2口8位双向口线
•P3.0~P3.7<10~17>P3口8位双向口线
其中P3中的各位有第二功能
思考:
判断第1脚的方法是什么?
二、单片机的最小系统
能够让单片机工作的最小硬件电路,称为单片机最小系统。
包括单片机芯片、电源电路、晶振电路、复位电路。
1、电源电路
如果有现成的5V稳压电源,可直接把VCC脚与EA脚接+5V,然后把VSS脚接5V电源的地就可以了。
如果没有现成的稳压电源,可通过220V交流电进行降压→整流→滤波→稳压得到。
2、复位电路
复位是指单片机的初始状态,当单片机刚上电时,单片机应在初始状态。
有时程序执行过程中会出现动作乱的现象,也可让单片机复位一下,让程序从头开始执行。
单片机复位后,各特殊功能寄存器的初始状态教材。
复位电路的工作原理是一个RC电路的充电过程,因单片机的复位是高电平复位,必须在RST引脚上保持两个机器周期以上的高电压才能让单片机可靠复位,所以上图中的电阻与电容的大小要选择合适。
复位过程是:
当刚接上电源时,+5V通过22UF的电容与10KΩ的电阻进行充电,电容相当于短路,所+5V直接加到RST引脚上而复位,称之为上电复位,过一段时间,电容充电完毕,流过10KΩ的电阻的电流为零,RST引相当于与地〔低电平〕接在一起,单片机在工作状态。
当在程序执行过程中要进行复位时,可按下按键K1,RST为高电平而复位。
3、晶振电路
如右上图所示,晶振电路主要由晶振〔12MHZ〕与两个电容〔30PF左右〕组成,为单片机提供时钟脉冲。
三、单片机中数的使用
⒈十进制数
主要特点:
①基数是10。
有10个数码〔数符〕构成:
0、1、2、3、4、5、6、7、8、9。
②进、借位规则是"逢十进一、借一当十"。
[例]
1234.56
=1×103+2×102+3×101+4×100+5×10-1+6×10-2
=1000+200+30+4+0.5+0.06上述,103、102、101、100、10-1、10-2
称为十进制数各数位的"权"
⒉二进制数
主要特点:
①基数是2。
只有两个数码:
0和1。
②进、借位规则是"逢二进一、借一当二"。
每左移一位,数值增大一倍;右移一位,数值减小一半。
二进制数用尾缀B作为标识符。
[例]
111.11B
=1×22+1×21+1×20+1×2-1+1×2-2
=7.75其中,22、21、20、2-1、2-2称为二进制数各数位的"权"
⒊十六进制数
主要特点:
①基数是16。
共有16个数符构成:
0、1、…、9、A、B、C、D、E、F。
其中,
A、B、C、D、E、F代表的数值分别为
10、11、12、13、14、15。
②进、借位规则是"逢十六进一、借一当十六"。
十六进制数用尾缀H表示。
在C51中十六进制数"0X"开头的。
[例]0XA3.4
=10×161+3×160+4×16-1=160+3+0.25
=.25其中,、162、161、160、16-1、16-2
称为十六进制数各数位的"权"。
十六进制数、二进制数和十进制数对应关系表
十进制数
十六进制数
二进制数
十进制数
十六进制数
二进制数
0
0X00
0000B
11
0X0B
1011B
1
0X01
0001B
12
0X0C
1100B
2
0X02
0010B
13
0X0D
1101B
3
0X03
0011B
14
0X0E
1110B
4
0X04
0100B
15
0X0F
1111B
5
0X05
0101B
16
0X10
00010000B
6
0X06
0110B
17
0X11
00010001B
7
0X07
0111B
18
0X12
00010010B
8
0X08
1000B
19
0X13
00010011B
9
0X09
1001B
20
0X14
00010100B
10
0X0A
1010B
21
0X15
00010101B
二、数制转换⒈二进制数与十六进制数相互转换
⑴二进制数转换成十六进制数①整数部分:
自右向左,四位一组,不足四位,向左填零,各部分用相应的十六进制数替代;
例 01011010B=0X5A11110101B=0XF5
1101010B=0X10111B=0X
1011011B=0X1011000B=0X
②小数部分:
自左向右,四位一组,不足四位,向右填零,各部分用相应的十六进制数替代;
如:
0.1101B=0.D
0.1010B=0X0.11101B=0X
⑵十六进制数转换成二进制数
每一位十六进制数分别用相应4位二进制数替代。
十六进制数
二进制数
十六进制数
二进制数
0X0
0000B
0X8
1000B
0X1
0001B
0X9
1001B
0X2
0010B
0XA
1010B
0X3
0011B
0XB
1011B
0X4
0100B
0XC
1100B
0X5
0101B
0XD
1101B
0X6
0110B
0XE
1110B
0X7
0111B
0XF
1111B
如16H=0001,0110B0X1FF=0001,1111,1111B0X4F=0100,1111B
0X16.D=0001,0110.1101B
0X89=B0XF8=B
0XED=B0XBC=B
⒊十进制数转换成二进制数、十六进制数
⑴整数部分的转换
①十进制整数转换成二进制整数的方法:
②十进制数整数转换成十六进制数的方法:
除2取余法除16取余法
如48D<十进制>=110000B<二进制数>323D<十进制>=143H<十六进制数>
⑵小数部分的转换
①十进制小数转换成二进制小数的方法:
将小数部分乘2取整数法
0.75D<十进制数>=0.11B
4、二进制数运算
<1>二进制数加法运算规则:
0+0=0,0+1=1+0=1,1+1=0〔向高位进1〕
~:
运算对象在运算符的右边
功能:
对运算对象的各二进位按位求反,
即使每一位上的0变1;变1为0。
~14:
即~00001110B按位求反得
0
0
0
0
1
1
1
0
1
1
1
1
0
0
0
1
<<:
左移
例如:
a<<4
功能:
把a的各二进制位向左移动4位
若a=00010011<十进制19>,左移4位后为00110000<十进制48>,其中左端移出的0001四位丢弃,右边四位补0000
0
0
0
1
0
0
1
1
0
0
1
1
0
0
0
0
>>:
右移
例如:
a>>2
功能:
把a的各二进位向右移动2位
若a=0000000000001111<十进制15>,
右移2位后为0000000000000011<十进制3>。
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
有符号数与无符号数
有符号数:
最高位为符号位,最高位为"0"表示正数,最高位为"1"表示负数。
00001010B表示是正数<+10>,而10010001B表示负数。
无符号数:
最高位不作为符号位,而当成数值位。
二进制数有原码、反码与补码三种编码形式
原码:
二进制数的原形,可为无符号数,也可有符号数。
8位无符号数原码围:
0000 0000B~11111111B〔0~FFH或0~255〕
8位有符号数原码围:
11111111B~01111111B〔FFH~7FH或-127~+127〕
反码:
正数的反码与原码相同;
负数的反码,符号位不变,数值部分按位取反。
如:
原码:
10000100B→反码11111011B
补码:
正数的补码与原码相同;
负数的补码,符号位不变,数值部分按位取反再在<右边最低位>加1。
如:
原码:
10000100B→反码:
11111011B→+1→补码:
11111100B
补码的用途:
将减法运算转换为加法运算。
三、单片机部结构
单片机部包括有:
一个CPU,两个定时/计数器T1、T0,4KB的程序存储器,128B<字节>的数据存储器,中断系统,串行通信口,4个并行I/O口。
1、存储器的结构
单片机中的数据以8位二进制数为一个单元进行存储的,所以存储器的结构以8位二进制数为一个单元,一个单元就象一层有8位房间的楼层,每个房间只能存放0或1
<1>程序存储器ROM
89S51单片机部有4KB的程序存储器,用于存放用户编写的程序。
单元地址从0000H到0FFFH,在一般的单片机控制系统中一般是够用的,如果不够用,可外加芯片扩展到64KB。
<2>数据存储器RAM
89S51单片机部有256B<字节/含特殊功能寄存器>的数据存储器,用于存放运算过程中产生的中间结果。
如果不够用,可外加芯片扩展到64KB
为了方便数据存储器的使用,又将它分成几个区
1〕工作寄存器区:
地址从00H到1FH,共32个存储单元。
单片机复位后,默认选择0区,工作区的选择由程序状态字PSW中的RS1、RS0两位设置。
PSW程序状态字的各位定义
D7
D6
D5
D4
D3
D2
D1
D0
CY
AC
F0
RS1
RS0
OV
-
P
各位的说明在教材11页,请阅读。
工作寄存器区的选择方法
RS1
RS0
区号
0
0
0区
0
1
1区
1
0
2区
1
1
3区
2〕位寻址区:
地址从20H到2FH共16个单元,见教材15页的表1.3,在这16个单元中的每一位均有一个地址与它对应。
3〕堆栈和数据缓冲区:
地址从30H到7FH,本区主要由用户存放数据。
当然工作寄存器、位地址区在没有被用时也可用来存放用户数据。
4〕特殊功能寄存器区:
地址从80H到FFH,特殊功能寄存器区是分散的,见教材的15页表1.4。
在特殊功能寄存器中,如果地址能被8整除,则可进行位操作。
如P1口的地址为90H,90H=9X16=144144÷8=18所以可用P1.0=1将P1.0置1或P1.2=1清零
Keil软件的使用
一、软件启动
在桌面上双击,或在开始→程序→。
二、界面图
1、首先建立一个工程
点击Project→NewProject如下图所示。
则会出现如下图。
注意工程保存在什么位置<要方便自己查找>,输入文件,保存类开会自动生成,不用管,然后点保存,则会出如下图
则会出现
。
则出现
可点是或否,影响不大。
则会出现:
这样应建立了一个新的工程。
可在保存的位置找工程文件名。
2、建立一个汇编语言文件。
点击File→New,如下图所示
则出现
Text1为文件名,先要保存一下。
选为文件保存的位置,文件名要注意一下,用汇编语言编写则后缀<扩展名>为.ASM,如果用C语言编写则为.C。
设置好后点击保存,则程序文件应建立好了。
在保存的位置可找到该文件。
3、程序录入编辑与编译
<1>在程序编辑区录入程序
<2>将程序文件添加到工程文件中
右键单击SourceGroup1如下图
则出现
点击,AddFilestoGroupSourceGroup1则出现如下图
选好文件类型为CSourcefile<*.C>,再在保存位置中找到刚才编辑好的程序文件,然后点Add即可。
<3>必要的参数设置
点击Project→OptionforTarget
则会出现如下图:
在Target选项卡中设置好晶振频率。
再选Output选项卡,如下图:
设置好各项后点击确定,必要的参数应设置完毕。
<4>程序编译检查
点击Project→Buildtargetfiles如下图所示
则在界面的最下面出现指示:
如果有错误要改正程序的错误,再进行编译,一直到没有错误为止,要生成HEX文件,我们才能下载到单片机中。
程序下载到单片机的程序应用
1、启动软件:
在桌面找到图,双击将会出现如下图
必须要选择正确的端口与单片机型号,然后调入从KEILC51编译生成的HEX文件。
2、调入HEX文件:
左键单击调入FLASH,如下图所示:
X
将会出现HEX文件选择窗口:
选择正确文件后,点打开,则出现如下图
3、将HEX文件下载到单片机芯片
选择正确后,检查单片机是否连接好,准备好后就点击自动,则会出现如下图,
程序下载完成后,就会看到单片机板上LED灯在点亮了。
如果要修改源程序,一定要重新编译,重新调入HEX文件,重新将HEX文件下载到单片机芯片上,才能反映出修改后的程序是否正确。
如果下面的提示框出现表示USBASP驱动文件安装有问题。
如果下面的提示框出现,请检查USB连接线,ISP连接线和开发板的电压。
项目二单片机控制8位发光二极管
一、发光二极管〔LED〕工作原理
LED的符号图与电路图
工作原理:
当LED的阳极加正电压,阴极加负电压,就有电流流过LED,则会发光。
实训板控制LED的电路图。
从上图可看出,由于二极管的阳极已接上了+5V,所以只要在阴极接地〔0V〕就可以发光。
由于阴极接的是P1口,所以只要P1口的某一位输出二进制的0,对应的二极管就发光。
如:
当P1=F0H时,则LED1,LED2,LED3,LED4亮,只要执行指令:
#include
voidmain<>//主函数
{//花括号开头
P1=0xF0;//P1〔P1要大写〕口低4位LED亮
}
当需要LED1,LED3,LED5,LED7亮时,P1中各位的电平是<1表示高电平,0表示低电平>
分别用二进数与十六进制数表示:
当需要LED2,LED4,LED6,LED8亮时,P1中各位的电平是<1表示高电平,0表示低电平>
分别用二进数与十六进制数表示:
当需要LED1,LED2,LED3,LED8亮时,P1中各位的电平是<1表示高电平,0表示低电平>
分别用二进数与十六进制数表示:
当需要LED1,LED2,LED3,LED4亮时,P1中各位的电平是<1表示高电平,0表示低电平>
分别用二进数与十六进制数表示:
二、延时函数〔程序〕
第一种方法:
void delay
{
unsigned int i;
for<;t>0;t-->
{for;}
}
第二种方法:
void delay
{
unsigned char i;
while
{for;}
}
学习体验例子一
用C51编程实现LED1到LED8循环点亮<跑马灯>
#include
#defineucharunsignedchar//定义无符号字符型数据用uchar代替unsignedchar
#defineuintunsignedint//定义无符号整型数据用uint代替unsignedint
sbitP10=P1^0;//用P10定义单片机的1号引脚
sbitP11=P1^1;//用P11定义单片机的2号引脚
sbitP12=P1^2;
sbitP13=P1^3;
sbitP14=P1^4;
sbitP15=P1^5;
sbitP16=P1^6;
sbitP17=P1^7;//用P17定义单片机的8号引脚
//下面是延时子程序
voiddelay
{
uchari;
while
{for;}
}
//下面是主函数,整个程序中有且只有一个主函数
voidmain<>
{
while<1>//一直执行以下程序
{
P10=0;//LED0亮
delay<600>;//调用延时函数,括号的600要与uintx类型对应
P10=1;//LED0灭
P11=0;//LED1亮
delay<600>;//调用延时函数,括号的600要与uintx类型对应
P11=1;//LED1灭
P12=0;//LED2亮
delay<600>;//调用延时函数,括号的600要与uintx类型对应
P12=1;//LED2灭
P13=0;//LED3亮
delay<600>;//调用延时函数,括号的600要与uintx类型对应
P13=1;//LED3灭
P14=0;//LED4亮
delay<600>;//调用延时函数,括号的600要与uintx类型对应
P14=1;//LED4灭
P15=0;//LED5亮
delay<600>;//调用延时函数,括号的600要与uintx类型对应
P15=1;//LED5灭
P16=0;//LED6亮
delay<600>;//调用延时函数,括号的600要与uintx类型对应
P16=1;//LED6灭
P17=0;//LED7亮
delay<600>;//调用延时函数,括号的600要与uintx类型对应
P17=1;//LED7亮
}
}
修改delay<600>延时函数中的数据如改为100或800,发现什么问题?
说明什么问题?
拓展任务:
1、若要实现LED8到LED1循环点亮,应如何修改程序?
2、若要实现LED1、LED2、LED3、LED4亮灭两,再到LED5、LED6、LED7、LED8亮灭两次,应如何修改程序?
项目三C51编程基础
一、C51程序的基本结构
以P1.0控制LED闪烁程序为例说明
#include
#defineucharunsignedchar//定义用uchar表示unsignedchar
#defineuintunsignedint//定义用uint表示unsignedint
sbitLED=P1^0;//定义用LED=P1^0〔P1.0>
//下面是定义延时函数
voidDelayMS
{
uchari;//定义i为无符号〔uchar〕变量8位二进数
while
{
for;
}
}
//下面是主函数〔程序〕
voidmain<>//主函数开头
{
while<1>//while循环语句
{
LED=~LED;//P1.0取反,0变1,1变0
DelayMS<150>;//调用延时函数
}
}
格式特点
关键字必须用小写字母,大小写敏感
不使用行号
可使用空行和空格
常用锯齿形书写格式
优秀程序员的素质之一:
使用TAB缩进
{}对齐
有足够的注释
有合适的空行
用流程图描述算法
用一些图框表示各种操作的算法描述方法。
特点:
用图形描述算法,直观形象,易于理解。
二、流程图描述算法的三种基本结构
顺序结构:
选择结构:
循环结构:
当型
直到型
三、C51基本数据类型、运算符与表达式
1、C语言的数据类型
序号
数据类型
名称
长度
取值围
1
unsignedchar
无符号字符型
单字节<8位二进制数>
0~255
2
signedchar
有符号字符型
单字节<8位二进制数>
-128~+127
3
unsignedint
无符号整型
双字节<16位二进制数>
0~65535
4
signedint
有符号整型
双字节<16位二进制数>
-32768~+32767
5
unsignedlong
无符号长整型
4字节<32位二进制数>
0~4294967295
6
signedlong
有符号长整型
4字节<32位二进制数>
-2147483648~+2147483647
7
folat
浮点型
4字节<32位二进制数>
±1.175494E-38~±3.402823E+38
8
*
指针型
1~3字节
对象的地址
9
bit
位类型
位
0或1
10
sfr
特殊功能寄存器
单字节<8位二进制数>
0~255
11
sfr16
16位特殊功能寄存器
双字节<8位二进制数>
0~65535
12
sbit
可寻址位
位
0或1
2、常量
定义:
程序运行时其值不能改变的量〔即常数〕
分类:
符号常量:
用标识符代表常量
定义格式:
#defin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 学习 手册 C51