找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9658|回复: 2
打印 上一主题 下一主题
收起左侧

C51单片机基础知识整理(部分)

[复制链接]
跳转到指定楼层
楼主
ID:743558 发表于 2021-4-24 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
虽然学习这一门新的语言充满种种困难,但是只有困难的东西才值得去学习,去突破,由学习知识到热爱知识再到使用知识,掌握一门有区分度的知识这才是以后工作的坚实后盾,加油!
第一部分基础知识
1单片机定义
2单片机结构
3基本的关系与计算
4基本数据类型
5基本语句
必会知识点:
1掌握单片机最小系统运作的必要条件(电源 晶振 复位电路)
2掌握对单片机I/O接口的操作(输出控制电平高低 输入检测电平高低)
3定时器 (重点掌握最常用方式2
4中断  (掌握外部中断,定时中断,串口中断)
5串口通信(掌握单片机之间的通信,单片机与计算机之间的通信)
第一部分——基础
1单片机定义:单片机就是在一片硅片上集成微处理器,存储器及各种输入输出端口芯片,这块芯片具有计算机的属性所以被称为单片微型计算机,简称单片机。
解释:通俗地讲就是一块集成芯片,但这个集成芯片有特殊功能,这些功能的实现是靠使用者自己来编程控制各个引脚在不同时候输出不同电平,进而控制外围电路电气状态。
2各类有代表性的51芯片
公司
                      产品
ATAtmel
AT89C51  AT89C52  
Intel(英特尔)
i87C54   i87C58
STC
STC89C51RC  STC89C52RC  
芯片标号解释:STC89C51RC 40C-PDIP 0707CU813.00D
STC——表示STC公司的产品
8——表示该芯片为8051内核芯片
9——内部含有flash 存储器  0表示内部含有Mask ROM存储器  7表示内含有紫外线可擦除存储器
C——表示该器件为CMOS 产品  LVLE表示该芯片为低压产品 S表示含有可串行下载flash存储器
5——固定不变
1——表示该芯片内部程序存储空间大小14KB,28KB,程序存储空间(ROM=n4KB
RC——内部随机读写存储器(RAM)为512B  RD+表示内部RAM1280B
40——芯片外最高接入40MHZ晶振 AT单片机一般是24
C——产片级别 C表示商业级,温度范围0-70  I表示工业级,温度范围-40-85
              A表示汽车用产品  温度范围-40-125 M 军用产品  温度范围-55-150
PDIP——双列直插式封装 PLCC 塑料封装 QFPPFP塑料扁平式封装 PGA 插针网络阵列封装 BGA 球栅阵列封装
单片机应用:
智能仪表:数字示波器 数字万用表   通信:手机  小灵通
武器装备:飞机 军舰 坦克 鱼雷制导
单片机学习方法:
1首先51单片机作为入门芯片,适合初学者学。
2只用软件仿真是学不会单片机的,要把硬件摆在面前(开发板)亲自操作,体会。
3不能只看书,也不能不看书,需要大致了解单片机各个引脚功能,了解寄存器。
4实践最重要,自己买一块单片机开发板只需要有流水灯,数码管,键盘(独立,矩阵),A\D,D\A转换,液晶,I2R总线,USB扩展就够了
单片机有40个引脚,按照功能可以分为三类:
电源及时钟引脚:VCC GND XTAL1 XTAL2(必会)
I/O口引脚:   P1 P2 P3 四组8I/O接口(必会)
编程控制引脚:RST PSEN ALE\PROG EA/VPP(了解)
XTAL1 片内振荡电路输入端,XTAL2 片内振荡电路输出端
8051芯片时钟振荡有两种方式:
1片内振荡 两个引脚接石英晶体振荡器和电容(10PF-30PF
2外部时钟 外部时钟信号从XTAL2XTAL1 接地
I/O口引脚——P0P1P2P3
P0口(39-32脚)
每个口可独立控制,无内置上拉电阻,使用时需要外接
P1口(1-8脚)
每个口可独立控制, 内置上拉电阻 ,使用时需要进行写1操作
P2口(21-28脚)
P0
P3口(10-17
P1
P3引脚第二功能定义
标号
引脚
第二功能
说明
P3.0
10
RXD
串行输入
P3.1
11
TXD
串行输出
P3.2
12
TNT0\
外部中断0
P3.3
13
TNT1\
外部中断1
P3.4
14
T0
定时器/计数器0外部输入端
P3.5
15
T1
定时器/计数器1外部输入端

电平特性
数字电路只有两种电平高电平1和低电平0
TTL型集成:+5V1  0V0
CMOS型集成:VCC可达12V,高电平为0.9VCC 低电平为0.1VCC
二进制和十六进制
十进制
二进制
十六进制
十进制
二进制
十六进制
0
0
0
8
1000
8
1
1
1
9
1001
9
2
10
2
10
1010
A
3
11
3
11
1011
B
4
100
4
12
1100
C
5
101
5
13
1101
D
6
110
6
14
1110
E
7
111
7
15
1111
F
二进制逻辑运算

必须都有,否则就没有  C语言中的符号 & 运算规则:0&0=0&1=1&0=0 1&1=1

只要其中之一有就有 C语言中的符号 | 运算规则: 0|1=1|0=1|1=1  0|0=0

求反运算          C语言中的符号 ! 运算规则: !1=0 0=1

C51中的基本数据类型
作用:设定变量前要声明这个变量类型,好让单片机分配合适的存储空间
数据类型
关键字
所占位数
表示数范围
无符号字符型
unsigned char
8
0-255
有符号字符型
char
8
-128-127
无符号整型
unsigned int
16
0-65535
有符号整型
int
16
-32768-32767
无符号长整型
Unsigned long
32


无符号长整型
long
32


单精度实型
float
32


双精度实型
double
64


位类型
bit
1
0-1

二进制两个数每个数所占空间就是1位(b)位也是单片机存储器最小的单位 字节B1B=8b
floatdouble区别:float只能提供7位有效数字,double可以提供6位有效数字。
数据类型扩充定义:
背景:当我们需要在程序中操作这些特殊功能寄存器时,必须在程序最前面将这些名称加以声明,就是把寄存器器地址编码赋给这个名称,这样编译器才认识。
sbit ——特殊功能位声明,声明某个特殊寄存器的某一位
C51中的运算符
分为算术运算符 逻辑运算符 位运算符
算术运算符
逻辑运算符
位运算符
  算术运算符
含义
逻辑运算符
含义
位运算符
含义
+
>
大于
&
逻辑与
-
<
小于
逻辑或
*
>=
大于等于
^
异或
/
<=
小于等于
~
取反
++
自加
==
测试相等
>>
左移
--
自减
=
测试不等
<<
右移
%
求余
& &
按位与








||
按位或








!




C51中的基础语句
语句
类型
If
选择语句
while
循环语句
for
循环语句
switch/case
多分支选择语句
do-while
循环语句
for 语句
格式:for(表达式1;表达式2;表达式3
        {语句(可以为空)}
执行过程:
1求解第一次表达式1
2求解表达式2,若为真则执行for中的语句,然后执行第3步,否则结束for语句,直接跳出,不执行第3
3第三步:求解表达式3
4步:跳到第2步重复执行
delayms(uint xms)
{
uint  i,j;
for(i=xms;i>0;i--)
     for(j=110;j>0;j--);     //延时xms
}

while()语句
格式:while(表达式)
      {内部语句(内容可为空)}
特点:先判断表达式,后执行语句
原则:若表达式不为0即为真,执行语句,否则跳出while循环,执行后面语句
应用:1让程序停止   while(1);
      2不停地执行某段程序
      while1
      {
P0=0xfe;
      }
If语句
格式:if(表达式)
      {内部语句}
特点:如果条件表达式为真(非0值),就执行后面的语句;如果条件表达式为假(0值),就不执行后面的语句
解释:使用条件语句if可以构成分支结构,它通过用户给定的条件进行判断,根据判断的结果决定执行不同的分支程序
if(key1=0)        //如果key=1(按下S2键)
{
  delayms(10);    //延时去抖
  if(key1=0);  //再次检测按键是否按下,如果按下
   {
num++;          //数字自加1
if(num=60)     //如果数字与60测试相等
     num=0;    //则回到0
while(!key1);  //等待按键释放
}
}



switch-case语句
背景;if语句一般用来处理两个分支,处理多个分支需要用if—else—if结构,但若分支较多,就要用switch语句,又称开关语句,switch语句可以直接处理多个分支
格式:
switch(表达式)
{
  case常量表达式1:(注意这里是“:”)       执行过程:   
语句1;                                首先计算switch后面表达式的值
break;                                用此值一次与各个case后常量表达式比较
case常量表达式2:   如果此值与某个case后面常量表达式值相等就执行此case后语句
语句2;            当执行遇到break语句就退出switch语句                  
break;      若表达式值与所有case后面表达式都不相等则执行default后语句并退出
......
case常量表达式n:
语句n;
break;
default:
  语句n+1;
  break;
}
应用:根据输入考试成绩的等级,输出百分制分数段
switch(grade)
{
caseA:
   printf(85-100\n)
   break;
caseB:
   printf(70-84\n);
   break;
caseC:
   printf(60-69\n);
   break;
caseD:
   printf(<60\n);
   break;
default:
   printf(error!\n);
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶3 踩
回复

使用道具 举报

沙发
ID:789476 发表于 2021-4-25 16:38 | 只看该作者
整理的非常详细,作为小白的我 很容易看懂。
回复

使用道具 举报

板凳
ID:289013 发表于 2021-4-28 18:49 | 只看该作者
这篇是精华啊!很全面!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表