后记:补考结束,没啥问题,虽然结果还没出来,这里要说明一下平时多学习积累的重要性,还有平时多进行记忆,不然很多东西其实一下子没法记住,特别是光看不练,还是得多靠自己的脑子进行复现,复现是检验你是否理解的重要指标之一,然后才是创造和提高,先能进行复现其他再说,还有就是有人给你指明方向也很重要,如果没有老师进行透题,虽然我复习了很多,但大部分都不考,相当于做无用功,很多时候就是这样子,学的全面自然重要,但要是能知道考试范围就能大大降低学习难度

目录

01绪论
02微型计算机组成与结构
03单片机汇编语言指令系统
04数据传送与交换指令
05中断服务
06定时/计数器
07单片机串行通信
08考题

一、绪论

  • 冯·诺依曼计算机由运算、控制、储存、输入、输出五个部件构成
  • 第四代电子计算机以微处理器(MPU)为核心
  • 单片机由中央处理器CPU、储存器RAM、ROM、并行I/O、串行I/O、定时器/计数器、中断系统、系统时钟电路和总线8个构成

二、微型计算机组成与结构

  • 计算机由硬件和软件组成
  • 运算器进行算术运算、逻辑运算、数据转换
  • 控制器是从内存期初指令的
  • 指令告诉控制器做什么,数据从哪来到哪去
  • 指令由操作码和地址码构成,操作码说明执行的操作,地址码说明数据的来源和去向
  • 指令放在存储器里,叫做储存程序
  • 控制器靠储存的程序执行叫做程序控制
  • 冯诺依曼设计思想的核心在于储存程序和程序控制
  • 储存器,一个触发器有两个状态可以表示一位二进制数,16位数要16个触发器
  • 保存一个数的所有触发器合起来叫做一个存储单元,每个单元的编号叫做地址
  • 所有储存单元的数量叫做存储容量
  • 中央处理器CPU:CPU = 运算器 + 控制器
  • 计算机主机:主机 = 中央处理器 + 主存储器
  • 一个8位中央处理器
  • 一个片内振荡器和时钟电路
  • 4KB片内程序存储器
  • 256字节片内RAM
  • 4个8位并行的双向I/O口
  • 2个16位定时器/计数器
  • 1个全双工串行口
  • 5个中断源
  • 累加器Acc是8位寄存器
  • PSW是一个8位的特殊功能寄存器,存放状态信息,包括进位信息C,半进位标志位AC,RS1和RS0是选择当前工作的寄存器,ov是溢出标志位,p奇偶校验位,奇数个1为1
  • 一个字节是8位二进制数,每个地址单元只能存1个字节
    PSW状态字
    8个状态字 功能
    CY 进位标志位,最高位进位或借位置一
    AC 半进位标志位,第四位进位或借位置一
    F0 用户标志位
    RS1 选择寄存器组
    RS0 选择寄存器组
    OV 溢出标志位
    F1 保留位,不用
    P 奇偶校验位,奇数个1为1

单片机引脚

五个中断源

5个中断源 中断入口地址
外部中断0 0003H
定时器/计数器0溢出中断 000BH
外部中断1 0013H
定时器/计数器1溢出中断 001BH
串行中断 0023H

数据存储器RAM分为低一百二十八字节,和高一百二十八字节
低一百二十八字节存放四组通用寄存器区,位寻址区和用户RAM区
高一百二十八单元是特殊功能寄存器区SFR
低128单元从00H~7FH
高128单元从80H~FFH

序号 符号 名称
1 B B寄存器
2 ACC 累加器
3 PSW 程序状态字
4 P0 P0口锁存器
5 P1 P1口锁存器
6 P2 P2口锁存器
7 P3 P3口锁存器
8 TL0 T0的低八位
9 TH0 T0的高八位
10 TL1 T1的低八位
11 TH1 T1的高八位
12 DPL DPTR的低8位
13 DPH DPTR的高8位
14 IP 中断优先级控制器
15 IE 中断允许控制寄存器
16 TMOD 定时/计数器工作方式寄存器
17 TCON 定时器控制寄存器
18 PCON 电源控制寄存器
19 SP 堆栈指针
20 SBUF 串行数据缓冲器
21 SCON 串行控制寄存器

注:TOT1不是特殊功能寄存器,而是TH0TH1TL0TL1

1个机器周期=6个状态周期=12个振荡周期
振荡周期=晶振频率的倒数
指令周期是1到4个机器周期
复位的条件,RST端保持至少2个机器周期的高电平
复位方式有三种:上电复位,按键电平复位,按键脉冲复位
复位后,特殊功能寄存器回到初始状态,其中SP=07H,P0到P3=FFH(悬1)

P0口:可以位寻址,扩展时作为低8位数据线,也可以作为通用I/O口
P1口:通用I/O口,没有第二功能
P2口:可以位寻址,扩展时作为高8位数据线,也可以作为通用I/O口
P3口:每一位都有第二功能,也可以作为通用I/O口

P3口 功能
P3.0 RXD串行输入口
P3.1 TXD串行输出口
P3.2 反INTO外部中断0
P3.3 反INTO外部中断1
P3.4 T0定时器0外部输入
P3.5 T1定时器1外部输入
P3.6 反WR外部数据存储器写选通
P3.7 反RD部数据存储器写选通

三、单片机汇编语言指令系统

完整指令:
标号:操作码 操作数;注释
其中标号、操作数和注释有时候没有

操作码 功能
Rn n取工作寄存器组的R0~R7
Ri 取R0和R1
dir 8位直接地址
(dir) 8位直接地址单元中的内容
#data 8位立即数
#data16 16位立即数
addr16 16位地址值
addr11 11位地址值
bit 位地址
rel 相对偏移量,1字节补码数
@ 间接寄存器或基地址寄存器的前缀
DPTR 16位外部数据指针寄存器
A 累加器
B 寄存器B
C 进位位,借位或累加器
$ 本条指令的起始地址
寻址方式:
1.寄存器寻址
2.直接寻址
3.寄存器间接寻址
4.立即寻址
5.变址寻址
6.相对寻址
7.位寻址

1.寄存器寻址
寻址范围包括:
通用寄存器R0~R7
特殊功能寄存器A、B、DPTR
例如 MOV A,R0;
2.直接寻址
直接给出操作数的地址
直接地址可以是特殊功能寄存器和内部RAM低128字节
例如 MOV A,30H;
3.寄存器间接寻址
能用于间接寻址的有:R0,R1,DPTR,SP
寻址范围:
(1)内部RAM低128个单元,通用形式为@Ri
(2)对片外数据存储器的64K字节间接寻址
(3)堆栈区:堆栈指令PUSH和POP用SP作为简介地址寄存器
4.立即寻址
有8位和16位
用#表示
eg:MOV A,#0FH;
5.变址寻址
地址为:PC或DPTR+A
只能对程序存储器ROM的数据进行操作,64KB,通常用于查表操作
MOVC A,@A+DPTR;
MOVC A,@A+PC;
JMP @A+DPTR;跳转
6.相对寻址
SJMP rel
地址偏移量用rel表示,rel是1个有符号的8位二进制补码,范围是-128~127
转移的目的地址=转移指令地址+转移指令字节数+rel
程序存储器
7.位寻址
寻址范围:
(1)内部RAM的位寻址区
(2)特殊功能寄存器的可寻址位
eg:
SETB 20H;
MOV 32H,C;

四、数据传送与交换指令

操作码<目的操作数>,<源操作数>
MOV 片内RAM
MOVX 片外RAM
MOVC ROM
源操作数不变,目的操作数变成源操作数
片内MOV转移
别人都可以传给A
除了RnRi都可以传给Rn
直接地址全都可以传给自己,包括自己
立即数都不能传给自己,但都可以传给别人
建议记住画法

MOVX 的所有指令(与外部RAM进行数据交换)
MOVX A,@Ri;
MOVX @Ri,A;
MOVX A,@DPTR;
MOVX @DPTR,A;

MOVC 查表指令,只能读取程序存储器,不能写
MOVC A,@A+DPTR;
MOVC A,@A+PC;

字节交换指令
XCH A,Rn;
XCH A,dir;
XCH A,@Ri;
低半字节交换
XCHD A,@Ri;A是八位的,交换低八位
SWAP A;自己的高四位和低四位交换

堆栈指令
用于保护程序断点和数据
PUSH dir;SP加一,(dir)→(SP)
POP dir;(SP)→(dir),SP减一
用于保护现场和回复现场

不带进位加法指令
ADD A,#data;A+data→A
ADD A,direct;A+(direct)→A
ADD A,Rn;A+Rn→A
ADD A,@Ri;A+(Ri)→A
如果位3有进位(位0到位7)
PSW里面的半进位标志AC置一,反之清零
如果位七有进位
PSW里面的进位标志CY置一,反之清零
如果两个有符号数在加减法时,只有低六位或者第七位发生进位或借位,则OV=1

带进位的加法指令
ADDC A,#data;A+data+CY→A
ADDC A,direct;A+(direct)+CY→A
ADDC A,Rn;A+Rn+CY→A
ADDC A,@Ri;A+(Ri)+CY→A

加一指令
INC A;
INC Rn;
INC direct;
INC @Ri;
INC DPTR;
说明:INC A只影响P(奇偶标志位)不影响其他的

例题:
例题

带借位的减法指令
SUBB A,#data;A-data-CY→A
SUBB A,direct;A-(direct)-CY→A
SUBB A,Rn;A-Rn-CY→A
SUBB A,@Ri;A-(Ri)-CY→A
如果位3有借位(位0到位7)
PSW里面的半进位标志AC置一,反之清零
如果位七有借位
PSW里面的进位标志CY置一,反之清零
如果两个有符号数在加减法时,只有低六位或者第七位发生进位或借位,则OV=1

减一指令
DEC A;
DEC Rn;
DEC direct;
DEC @Ri;
只影响p

十进制调整指令
进位或半进位标志为一,则A+06H或60H
DA A;

乘法指令
MUL AB;A*B的结果放在BA中,B为高字节,A存低字节
若乘机大于255即一个字节,则OV=1

除法指令
DIV AB;A/B=A…B商存在A,余数存在B

逻辑与ANL
ANL A,Rn;
ANL A,direct;
ANL A,@Ri;
ANL A,#data;
ANL direct,A;
ANL direct,#data;
先转换成二进制再按位计算
结果存放入目的地址
逻辑或XRL
逻辑异或ORL
逻辑与用于清零
逻辑或用于置1
逻辑异或用于取反(与1异或取反)

清零
CLR A;

按位取反
CPL A;

循环左移
RL A;先转换成二进制

循环右移
RR A;

带进位的左移
RLC A;

带进位的右移
RRC A;

控制转移类指令

绝对转移指令
AJMP addr11;范围是2kb
长转移指令
LJMP addr16;范围64kb
短转移指令
SJMP rel;
变址寻址转移指令
JMP @A+DPTR;

条件转移指令
JZ rel;A为零则转移,不为零顺序跳转
JNZ rel;不为零跳转

比较不相等转移
CJNE A,direct,rel;
CJNE A,#data,rel;
CJNE Rn,#data,rel;
CJNE @Ri,#data,rel;

例题

减一不为零跳转

DJNZ Rn,rel;
DJNZ direct,rel;
相当于计数器

例题

子程序调用
调用指令和返回指令在子程序成对出现
调用子程序指令,会自动进行入栈和出栈操作,进行现场保护
短调用指令
ACALL addr11;2KB
长调用指令
LCALL addr16;64KB
返回指令
RET;子程序返回
RETI;中断程序返回

NOP;空操作指令,用于测试或者延时

位传送指令
MOV C,bit;
MOV bit,C;
例如
MOV P1.0,C;

位置一,位清零
SETB C;
SETB bit;
CLR C;
CLR bit;
例如
SETB P1.2;
CLR P3.3;
位与指令
ANL C,bit;
ANL C,/bit;将bit取反后再和C相与,存入C
位或指令
ORL C,bit;
ORL C,/bit;
位取反指令
CPL C;
位控制转移指令
JC rel;CY=1 转移
JNC rel; CY=0 转移

JB ACC.7,rel; 这样也可以
JNB rel;if bit=0 jump
JBC bit,rel;if bit=1 jump and bit clear to 0

Program Design
伪指令(编写程序要用,生成的汇编程序中没有)
ORG 16位地址
程序开始规定起始地址,一般是0030H开始,如果不规定就是0000H

END 汇编结束指令,整个源程序只能有一条END;

EQU 标号赋值伪指令
字符名称 EQU 赋值项
例如:
TEMP EQU 20H;
则之后的TEMP都可以用20H代替

DB从指定的地址开始,在程序存储器的连续单元定义数据
DB 8位数表
可以是一个字节常数或者字符或者字节串和字符串
例如
DB 30H,40H,21,10

定义字伪指令
DW 16位数表
例如
ORG 1000H
DW 1234H,55H,9876H
每个地址单元存两位,如1000=12H,1001H=34H,1002H=00H,1003H=55H…

定义存储区
从指定地址开始,保留指定个字节单元作为存储区
DS 表达式
例如
ORG 3000H
TAB:DS 08H

BIT位地址赋给名称
例如
P10 BIT P1.0
用P1.0代替P10
例题
例题

循环结构
要先初始化,然后进行计算,还要有个循环计数器
例题

例题
例题

五、中断服务

中断源 中断请求标志位 中断入口地址 自然优先级 触发方式
反INT0(P3.2) IE0 0003H 最高 低电平触发、或下降沿
T0(P3.4) TF0 000BH T0溢出
反INT1(P3.3) IE1 0013H 最高 低电平触发、或下降沿
T1(P3.5) TF1 001BH T1溢出
串行口 T1/R1 0023H 最低 串行口发送完成或接收完数据
注:INT是外部中断interfere

中断系统结构

中断相关的特殊功能寄存器 名称
TCON 定时控制寄存器
SCON 串行口控制寄存器
IE 中断允许控制寄存器
IP 中断优先级控制寄存器
都可以进行位寻址
(1)TCON
D7 D6
—- —-
TF1 TR1

IE0、IE1:外部中断请求标志,硬件自动设置,CPU接收到INTX端有效的中断请求后IEX位自动置1,中断响应期间自动清零
IT0、IT1:外中断请求触发方式控制位
ITX=0为低电平触发,一个机器周期
ITX=1为负跳脉冲触发,至少两个机器周期
TF0、TF1:定时器溢出中断请求标志位,相应溢出标志位TFx由硬件置1,a:软件查询由用户软件清零 b:中断方式是作为中断请求标志位,为1自动转向中断服务程序,再由硬件自动清零
TR0、TR1:T0、T1的运行控制位,相应的位等于1开启

(2)SCON
串行口控制寄存器

D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 T1 R1

T1:串行口发送中断标志位,将CPU的数据写入缓冲器,启动发送
R1:串行口接收中断标志位,将CPU接收数据

(3)IE
中断允许控制寄存器:由用户软件设置

0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H
EA / / ES ET1 EX1 ET0 EX0
EA:中断允许总控制位
EA=0,中断总禁止
EA=1,中断总允许

EX0(EX1):外部中断允许控制位(INT0、INT1)
同理
ET0(ET1):定时/计数中断允许控制位(T0、T1)
ES:串行中断允许控制位

结论:
51单片机实行两级控制
单片机复位后处于禁止状态
单片机在中断响应后不会自动关闭中断,因此要手动关闭软件中断

(4)IP
中断允许控制寄存器:由用户软件设置

0BFH 0BEH 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H
/ / / PS PT1 PX1 PT0 PX0
系统复位后,各位均为0,如果同级多个中断请求同时出现,则按从PX0到PS的顺序开始
低优先级不能打断高优先级

中断处理:
中断请求,IE置1
中断响应:满足中断响应的条件

  • 有中断请求,标志位置1
  • EA=1
  • 中断允许位置1
  • 无同级或更高级中断正在被服务
  • 当前执行指令的指令周期已经结束
  • 不能是RETI和IE、IP的指令,否则要等下一条
    中断服务框架

中断初始化

  • 开中断,设置EA
  • 若是外中断,则定义外中断触发方式TCON
  • 定义中断优先级IP
    中断服务程序
  • 在中断入口地址处设置一条跳转指令
  • 现场保护
  • 清除中断请求标志位的操作
  • 恢复现场
    中断例题
    中断例题

六、定时/计数器

定时,即对机器周期进行计数,如果是12MHz的晶振,则机器周期为1/12*12=1微秒,计数频率1MHz
计数,对外来脉冲进行计数
从外部输入口T0(P3.4)和T1(P3.5)两个引脚输入,对下降沿计数
一个下降沿跳变要两个机器周期,则要24个振荡周期,则频率就是1/24振荡周期

51单片机里面有两个可编程的16位定时器和计数器,简称T0,T1,
分为T0:TH0,TL0 T1:TH1,TL1
定时器计数不占用CPU时间
开始工作时要对定时器计数器进行初始化
包括TCON和TMOD
TMOD
TCON

初始化

1.对TMOD赋值
2.计算初值,送入TH0、TL0
3.如果使用中断要对IE赋值
4.将TR0或TR1置1,启动定时器和计数器

如果有多个中断入口,CPU会自动进入它要响应的那个入口,然后进行跳转,给它一个新的地址来写中断响应程序,它不会进到别人的入口,因为CPU会将这些入口屏蔽

工作方式:
工作方式
工作方式
工作方式
工作方式
定时器/计数器例题
定时器/计数器例题
定时器/计数器例题
(2)
定时器/计数器例题
定时器/计数器例题
(3)
定时器/计数器例题
定时器/计数器例题

七、单片机串行通信

通信方式分为串行通信和并行通信
(1)并行方式————数据的各位同时发送或同时接收,速度快,但是要用到多根传输线,所以一般只在近距离使用
并行通信
(2)串行通信
分为单工、全双工和半双工

  • 单工就是只允许一方是发送端,一方是接收端
  • 全双工就是双方都可以同时收发数据
  • 半双工就是双方可以收发数据但不能同时收发,只能是一方收,一方发
    串行通信

串行通行可以分为:同步串行通信和异步串行通信
同步:先发送一个字符作为同步字符,再连续发送数据,数据之间不能有间隔,用时钟来同步,速度比异步快
异步:一个字符一个字符发送,因此要增加起始位、奇偶校验位和停止位

起始位 数据位8位 奇偶校验位 停止位

先发送起始位,规定数据发送线上无数据时电平为1,发送数据时先发送一个低电平
数据位,低位先发送再发送高位
奇偶校验位,数据发送完后,发送奇偶校验位检验数据正确性
停止位,高电平有效,可以是1、1.5、2位
波特率,每秒传送二进制数码的位数 b/s
串行口:由发送寄存器,接收寄存器,移位寄存器组成

串行通信
串行通信
串行通信
串行通信
串行通信
串行通信
串行通信
串行通信
串行通信
串行通信
串行通信
波特率例题
串行通信

八、考题

考题

解答:
1.复位后,特殊功能寄存器回到初始状态0000H,不过其中SP=07H,P0到P3=FFH(悬1)
2.答: 80C51 有七种寻址方式:

1、立即寻址,用#表示,寻址空间为ROM;
2、直接寻址,例如A,30H,寻址空间为片内RAM的低128B和特殊功能寄存器;
3、寄存器寻址,用上Rn,寻址空间为A、B、DPTR、CY、通用工作寄存器等;
4、寄存器间接寻址,用上@,片内RAM低128B、片外RAM;
5、相对寻址,MOV rel;一般是标号,寻址空间为ROM; .
6、变址寻址,@A+DPTR,寻址空间为ROM;
7、位寻址,SETB,C等,寻址空间为片内RAM低128B的位寻址区的128个位,其字节地址为20H~2FH; 以及部分可以位寻址的特殊功能寄存器。

3.串行口有4种工作方式,通过SCON中的SMl、SM0位来决定

|SM0 |SM1 |工作方式 |功能说明|
|—-|—-|—-|—-|—-|
|0|0|0|同步移位寄存器输入/输出,波特率为fOSC/12|
|0|1|1|8位UART,波特率可变(TI溢出率/n,n=16或32)|
|1|0|2|9位UART,波特率为fosc/n,n=32或64)|
|1|1|3|9位UART,波特率可变(TI溢出率/n,n=16或32)|

工作方式0:
八位同步移位寄存器
(1)数据发送
数据从RxD引脚串行输出,TXD引脚输出同步脉冲。
(2)数据接收
在满足REN=l和RI=0的条件下,串行口处于方式0输入。
此时,RXD为数据输入端,TXD为同步信号输出端
工作方式1:
八位异步移位寄存器
(1)数据发送
发送时,数据从TXD端输出

4.一条乘法指令或者一条除法指令都需要 4 个机器周期,一个指令周期由1~4个机器周期组成,一个机器周期由6个状态周期,12个振荡周期组成
5.最长时间为2^N *机器周期=2^N * (1/晶振频率)*12
6.工作寄存器0区—3区,每个工作寄存器区为8字节(其中每字节分别记作R0-R7),共占用32字节的空间,0区的地址为00H-07H,1区的地址为08H-0FH,2区的地址为10H-17H,3区的地址为18H-1FH, 工作寄存器的选择由程序状态字PSW中RS0、RS1位的值决定,当RS1、RS0为00时选中0区,为01时选中1区,为10时选中2区,为11时选中3区
7.EA:中断允许总控制位
EA=0,中断总禁止
EA=1,中断总允许
EA引脚必须接低电平
8.80C51的中断系统有5个中断源:3个在片内;2个在片外

中断源 中断请求标志位 中断入口地址 自然优先级 触发方式
反INT0(P3.2) IE0 0003H 最高 低电平触发、或下降沿
T0(P3.4) TF0 000BH T0溢出
反INT1(P3.3) IE1 0013H 最高 低电平触发、或下降沿
T1(P3.5) TF1 001BH T1溢出
串行口 T1/R1 0023H 最低 串行口发送完成或接收完数据

注:INT是外部中断interfere
这些在TCON里面
当IT0 = 0时,外部中断0被控制为电平触发方式。
当IT0 = 1时,外部中断0被控制为边沿触发方式。

IE0:外部中断0的中断请求标志。
当P3.2引脚信号有效时,IE0 = 1,外部中断0向CPU申请
中断,当执行完后,由片内硬件自动清0。

IE1:外部中断1的中断请求标志。
当P3.3引脚信号有效时,IE1 = 1,外部中断1向CPU申请
中断,当执行完后,由片内硬件自动清0。

TF0:定时器0溢出中断标志。
T0被启动计数后,从初值做加1计数,当计满溢出后由
硬件置位TF0,同时向CPU发出中断请求,此标志一直保
持到CPU响应中断后才由硬件自动清0。也可以由软件查
询该标志,并且由软件清0。

TF1:定时器1溢出中断标志。
T1被启动计数后,从初值做加1计数,当计满溢出后由
硬件置位TF1,同时向CPU发出中断请求,此标志一直保
持到CPU响应中断后才由硬件自动清0。也可以由软件查
询该标志,并且由软件清0。

串行的在SCON里面

TI:串行发送中断标志。
CPU将一个数据写入发送缓冲器SBUF时,就启动发送,
每发送完一个串行帧数据后,硬件将使TI置位。但CPU
响应中断时并不清除TI,必须在中断服务程序中由软件
清除。

RI:串行接收中断标志。
在串行口允许接收时,每接收完一个串行帧数据,
硬件将使RI置位。同样,CPU在响应中断时不会
清除RI,必须在中断服务程序中由软件清除。

中断服务入口地址设置一条跳转指令,转移到
中断服务程序的实际入口地址。 最好用LJMP指令,
这样很方便地将中断服务程序不受限制的安排在64K
B任何地方。因为51单片机的5个中断源的中断服务程序入口地址太接近,就8个单元的空,一般的中断程序放不下,所以编程时把中断服务程序放在较远的容量足够大的地方

9.访问外扩展的数据存储器,要由P2口提供高8位地址,P0
口提供低8位地址和8位双向数据总线

10.存储类型

存储类型
函数类型 函数名(形式参数表) interrupt n using n
关键字interrupt是中断号,对于51单片机,n取值为
0~4。
关键字using后的 n是所选择的寄存器组,using是一个
选项,可省略

11

C51语言的强大功能及其高效率在于提供了丰富的可直
接调用的库函数。库函数可以使程序代码简单、结构清晰、
易于调试和维护。

下面介绍几类重要的库函数。
特殊功能寄存器包含文件reg51.h或reg52.h。
reg51.h中包含所有的8051的sfr及其位定义。
reg52.h中包含所有8052的sfr及其位定义,一般系统
都包含reg51.h或reg52.h。

绝对地址包含文件absacc.h:该文件定义了几个宏,
以确定各类存储空间的绝对地址。

输入/输出流函数位于stadio.h文件中。流函数默认
8051的串口来作为数据的输入/输出。如果要修改为
用户定义的I/O口读写数据,例如,改为LCD显示,
可以修改lib目录中的getkey.c及putchar.c源文件,
然后在库中替换它们既可。

动态内存分配函数,位于stdlib.h中。
能够对方便地对缓冲区进行处理的缓冲区处理函数位
于string.h中。其中包括复制、移动、比较等函数

  1. CPU(微处理器)
    8位,与通用CPU基本相同,包括了运算器和控制器两大部分,
    还有面向控制的位处理功能。
    运算器:
    算术逻辑运算单元ALU
    累加器A
    程序状态字寄存器PSW

控制器包括:程序计数器、指令寄存器、指令译码器、定
时及控制逻辑电路等。功能是控制指令的读入、译码和执
行,从而对各功能部件进行定时和逻辑控制。
13
指示堆栈顶部在内部RAM块中的位置。
堆栈结构–向上生长型。单片机复位后,SP为07H,使
得堆栈实际上从08H单元开始,由于08H~1FH单元分别属
于1~3组的工作寄存器区,最好在复位后把SP值改为60H或
更大值,避免堆栈与工作寄存器冲突。
14
51单片机数据储存器扩展最大容量可达64K字节, 地址范围:0000h~FFFFh
15
关键字 at 可对指定的存储器空间的绝对地址访问,格
式如下:
[存储器类型] 数据类型说明符 变量名 at 地址常数
其中,存储器类型为C51能识别的数据类型;数据类型为
C51支持的数据类型;地址常数用于指定变量的绝对地址,
必须位于有效的存储器空间之内;使用 at 定义的变量必
须为全局变量
16
与8051汇编语言相比, C51有如下优点。

可读性好。C51语言程序比汇编语言程序的可读性好,
编程效率高,程序便于修改、维护以及升级。

模块化开发与资源共享。用C51开发的程序模块可不经
修改,直接被其他工程所用,使得开发者能够很好地
利用已有的大量标准C程序资源与丰富的库函数,减少
重复劳动,同时也有利于多个工程师进行协同开发。

可移植性好。为某种型号单片机开发的C语言程序,只
需把与硬件相关的头文件和编译链接的参数进行适当
修改,就可方便地移植到其他型号的单片机上。
C51语言与8051汇编语言比较

生成的代码效率高。当前较好的C51语言编译系统编
译出来的代码效率只比直接使用汇编语言低20%左右,
如果使用优化编译选项,最高可达到90%左右

#include<reg51.h>
unsigned char dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90}; //共阳数码管的段码
void delay10ms(int n);
void main(void)
{
char i;
while(1)
{
for (i = 0; i <10; i++)
{
P1 = dispcode[i]; //数码管更新显示
delay10ms(50); //延时500ms
}
}
}
//10ms延时函数,应用于12.0MHz时钟。
void delay10ms(int n)
{
int i=0,j;
while(n–)
{
for(i=0;i<10;i++)
{
for(j = 0; j < 125; j++);
}
}
}

数码管码段的计算方式
https://jingyan.baidu.com/article/20b68a88f2c3bf796dec625f.html
其实就是8的每个管对应a、b、c…g,还有一个dp共阴的是0,共阳的是1,然后翻译成二进制到十六进制,前面用0x(十六进制的前缀)
阴极1表示开,阳极是0表示开,他们刚好所有数字都是反过来的