C51精简版教程(AT89C51/STC89C52)

第一章:AT89S52(STC89C52)的引脚功能介绍

一、PDIP封装引脚图:

在这里插入图片描述

二、引脚功能介绍
IO口灌(流进)电流大,拉(流出)电流小。
P0:漏极开路的双向IO口,使用时,当电流流出需外加上拉电阻

外部地址数据总线,可带八个TTL负载 

P1:准双向口(当作输入口用时,须将IO口置1
(P1=0XFF;),可带四个TTL负载

P1. 0 T2定时计数器2的外部脉冲输入及时钟输出
P1.1 T2EX定时计数器2的捕捉、自动重装的触发输入及减法计数控制
P1.5: MOSI,主动输出从动输入引脚,用于flash(闪存)编程
P1.6: MISO, 主动输入从动输出引脚,用于flash编程
P1.7: SCK, 同步时钟,用于flash编程 ISP编程时用

P2:准双向口,可带四个TTL负载

 外部地址总线高八位

P3:准双向口,可带四个TTL负载

P3.0: RXD,串行输入
P3.1: TXD,串行输出
P3.2: INT0,外部中断0输入
P3.3: INT1,外部中断1输入
P3.4: T0,定时计数器0的外部脉冲输入
P3.5: T1,定时计数器1的外部脉冲输入
P3.6: /WR,外部数据存储器的写选能信号
P3.7: /RD,外部数据存储器的读选能信号

其他非IO口

VCC: 电源正极,工作电压范围:4.0v-5.5v。
GND
RST 复位端,高电平有效
XTAL1 (clock in)
XTAL2 (clock out )时钟引脚,外接晶振和谐振电容(5-47PF),晶振的谐振频率范围:0hz–33Mhz,用作工控产品时不超过6MHZ。常用晶振型号: 4MHZ,6MHZ,8MHZ,16MHZ,12MHZ,24MHZ,5.5296MHZ,11.0592MHZ,22.1184MHZ,33.1776 MHZ
EA/Vpp 外部程序存储器的选通信号/编程电压输入 EA=0:使用外部程序存储器 EA=1:先使用内部程序存储器,后使用外部程序存储器
ALE/PROG: 外部低八位地址总线锁存信号/编程脉冲输入,Fosc/6
PSEN: 外部程序存储器的读选通信号

三、最小系统工作电路
在这里插入图片描述

四、ISP下载线相关针脚
(一)针对AT89C51:

单片机引脚 40 20 9 6 7 8
VCC GND RST MOSI MISO SCK
Usbasp引脚 1 2 3 4 5 6

(二)针对STC89C52:

单片机引脚 40 20 10 11
VCC GND RXD TXD
Usb->TTL引脚 1 2 3 4

第二章:51的存储器结构(89s52或90C52RC为例)

一、程序存储器(ROM)
只读不写 code (0x0000-0xffff) 共有8k,主要放写的程序代码。

1、类型:FLASH(闪存) ISP code 区所写的程序的容量不能超过8192个字节。

2、作用:存放程序代码

3、容量:8KB=8*1024字节=8192bit=2^13bit

4、地址编码:16位二进制编码

 0000 1111 1111 1111 0~0FFFH  4095  89s51   
 0001 1111 1111 1111 0~1FFFH  8191  89s52

5、功能分区:0000H-0002H,启动单元,复位中断入口 (中断矢量)

入口地址 中断事件 中断号
0003H 外部中断0入口 0
000BH 定时中断0入口 1
0013H 外部中断1入口 2
001BH 定时中断1入口 3
0023H 串行 中断入口 4
002BH 定时中断2入口 5
0100H 主程序区(预留32个中断入口)

汇编例子:


   ORG   0000H
   LJMP  MAIN  ;转向主程序
   ORG   0003H 
   LJMP  ZD0   ;转向中断0程序
   ORG   0023H
   LJMP  CS    ;转向串行中断程序
   ORG   0033H  ;ORG 定义程序存放的首地址
   MAIN:            ;主程序

   zd0: 


   cs:

二、数据存储器(RAM) (文件寄存器)
1、类型:静态数据存储器 (数据总线8根)

2、作用:存放临时数据 idata间接寻址,一般省略不写

3、容量:256字节=2^8 0X00~0Xff

4、地址编码:
八位二制表示
0000 0000 ~ 1111 1111 0~0ffh (S52)

 mov 30H,#05H;把0x05写入地址为30H的存储器   
 mov 7fh,#01h

5、功能分区

1)00h-1fh,工作寄存器区(32个)

00H R0 08H R0 10H R0 18H R0
01H R1 09H R1 11H R1 19H R1
02H R3 0AH R3 12H R3 1AH R3
07H R7 0FH R7 17H R7 1FH R7

相关汇编操作

RS1=0 CLR RS1
RS1=0 CLR RS0
RS1=1 CLR RS1
RS0=0 SETB RS0

选择当前寄存器组

using 0 选择当前寄存器组0

2)20H-2FH,位寻址区 bdata

16*8位=128(位地址:00H-7FH) 
寄存器操作 MOV 20H,#91H
位操作 CLR 20H.0
20H.7 20H.6 20H.5 20H.4 20H.3 20H.2 20H.1 20H.0=1001 0001

3)30H-7FH,用户RAM区
缓冲区或是堆栈区(RAM 07h)

4)80-ffh,高128单元,只能间接寻址

6、51变量的存贮类型与其数据存储器的关系
内部RAM 00h-7fh data (直接寻址)

unsigned char data i=3;

内部RAM 20h-2fh bdata(位寻址)
内部RAM 00h-ffh idata(间接寻址)
外部RAM 00H-ffh pdata ( MOVX A,@R0 MOV @R0,A)
外部RAM 0000H-ffffh xdata ( MOVX A,@DPTR)

三、51特殊功能寄存器(SFR)

P0 (80H)
P1 (90H)
P2 (A0H)
P3 (B0H)
ACC (E0H)
B (F0H)
PSW (D0H)
SP (81H)
DPL (82H)
DPH (83H)
IE (A8H)
IP (B8H)
TCON (88H)
TMOD (89H)
TL0 (8AH)
TL1 (8BH)
TH0 (8CH)
TH1 (8DH)
SCON (98H)
SBUF (99H)
PCON (87H)

在SFR中,地址以0或是8结尾的,可以位寻址,其位地址从字节地址开始,例如:
P0、P1、P2、P3、ACC、B、PSW、IE、IP、TCON、、SCON、

ACC累加器
作用:运算 数据传送 数据转换

相关操作

ADD ACC,#10 累加器ACC=ACC+10
ACC=246+10 ACC=246+10
MOV P1,A 把ACC载入到P1中
MOVC A,@A+DPTR 查表,DPTR是首地址

B 寄存器
作用:乘除法运算

MUL AB 乘法
DIV AB 除法

SP: 堆栈指针
作用:存放栈顶,保护临时数据,

DPTR:(dph+dpl)数据指针
作用:数据传送 数据转换

PSW 程序状态字

CY AC F0 RS1 RS0 OV - P
7 6 5 4 3 2 1 0
CY 进位标志位
AC 辅助进位标志位, 加法运算时,低四位向高四位有进位为1
F0 用户标志位
RS1 RS0 当前寄存器组选择位
OV 溢出标志位 OV=CYC67=10=1
P 寄偶校验位 (偶校验,由ACC中1的个数决定的,若为寄数个1,则P=1,反之为0)

PC:程序指针(0000H)
作用:存放即将执行指令的首地址(ROM)

四、51的时序

振荡频率: Fosc
振荡(时钟)周期 T=1s/Fosc (12M晶振就是1/12M)
机器周期 Tfr(Tcyc)=12s/Fosc (12M晶振为1us)
指令周期 根据指令不同,1个机械周期~4个机械周期

五、51的工作方式
连续运行
单步运行
空闲方式:CPU停止工作,睡眠方式
掉电保护方式:RAM工作
编程方式:
校验方式:
复位方式:P0 P1 P2 P3 全为高电平
SP=07H
其余大都00H pc=0000h

第三章: C51的语法基础

1、数据类型
(1)基本类型 0000 0001 +1

无符号字符型(unsigned char) 0~255
有符号字符型(char) (1个字节) -128~+127
无符号字符型(unsigned char ) (1个字节) 0-255
有符号整型(int) (4个字节) -32768~+32767
无符号整型(unsigned int) (4个字节) 0~65535
位类型(1位) (bit)
有符号长整型(long (int))(8个字节) -2^31~+ 2^31-1
无符号长整型(unsigned long int)(8个字节) 0~2^32-1
单精度实型(float)(4个字节) ~
双精度实型(double)(8个字节) ~

(2)构造类型

数组类型 (array)
结构体 (struct)
共用体 (union)
枚举类型 (enum)

(3)指针类型 (* ) 24位(3个字节)
(4)空类型(void)

2、常量
固定不变的量,称为常量,通常用大写字符串表示
常量的定义:

#define 常量名 常数表达数
#define SHANGXIAN 242
#define uc unsigned char
#define ui unsigned int

3、变量
变量的定义:
数据类型 <存贮类型> 变量名;

unsigned int data i;
unsigned char xdata j;

变量的存贮类型有时可以省略,即为系统默认类型
全局变量、局部变量

4、C51的存贮类型

data 内部RAM区0x00~0x7f单元,128字节;ram
xdata 外部RAM区0x0000~0xffff单元,64K
code ROM区0x0000~0xffff单元,64K 0x0000-0x1fff,flash
idata 内部RAM区0x00~0xff单元,256字节
bdata 内部RAM区0x20~0x2f单元,16字节允许位寻址
pdata 外部RAM区当P2口固定0x00~0xff单元,分页256字节

5、C51中特殊功能寄存器(SFR)的定义
格式:
sfr 特殊功能寄存器名称=特殊功能寄存器地址;
sfr IE=0XA8; //定义寄存器IE地址为0XA8

sfr16 特殊功能寄存器名=低八位特殊功能寄存器地址;
sfr16 TMR0=0XCC; T2则为16位,包括TH2及TL2
注:必须是高八位与低八位寄存器地址连续才能用sfr16定义

6、C51中并行I0口的定义
(1)CPU自带并口P0、P1、P2、P3,用sfr定义

P0:0x80 P1:0x90 P2:0xA0 P3:0xB0
sfr P0=0x80;

   注:<reg52.h>中已定义

(2)外扩并口
#include <absacc.h>
#define IO口名称 XBYTE [IO口地址]

   #include <absacc.h>
   #define PA8255 XBYTE [0X7C00] 
   #define PB8255 XBYTE [0X7D00]

7、C51中特殊功能位及位变量的定义
(1)特殊功能位的定义
sbit 位名称=位地址;
在特殊功能寄存器中,地址以“0”或是“8”结尾的SFR才能定义特殊功能位

   IE (0XA8)
   EA X ET2 ES ET1 EX1 ET0 EX0 
   sbit EA=IE^7; 
   sbit EX0=IE^0;
   sbit EX0=0XA8^0;
   sbit EX0=0XA8;
   sbit EA=0XAF;
   sbit EX1=0xAA;
   sbit EX1=IE^2;   
   sbit EX1=0XA8^2;
   sbit led=P1^0;
   sbit bee=P1^7;

(2)位变量的定义
bit 变量名;
bit statues; statues=0;
(3)在字节变量中定义位变量
#define uchar unsigned char
uchar bdata kk;

第四章:IO口输入输出原理

在这里插入图片描述

一、51单片机IO口工作原理
(一)、IO口原理图
1、P0口
在这里插入图片描述
2、P1口
在这里插入图片描述
2、P2口
在这里插入图片描述
3、P3口
在这里插入图片描述

第五章: 内部资源之外部中断

在这里插入图片描述

中断类型 中断入口地址 中断序号
外部中断0(INT0)P3.2 0003H 0
外部中断1(INT1)P3.3 0013H 2
定时计数器0(T0) 16bit 000BH 1
定时计数器1(T1) 001BH 3
定时计数器2(T2) 002BH 5
异步串行通信口(UART) 0023H 4

CPU外围模块的掌握方法:
(1)相关口线
(2)相关控制字
(3)模块的工作方式
一、外部中断
(1)相关口线

P3.2 int0,外部中断0输入。分为低电平和下降沿两种可选触发
P3.3 int1,外部中断1输入。分为低电平和下降沿两种可选触发

(2)相关控制字IE IP TCON

IE 中断允许控制寄存器

EA ET2 ES ET1 EX1 ET0 EX0
7 6 5 4 3 2 1 0
EA 中断总允许控制位
ET2 定时中断2允许控制位
ES 串行中断控制位
ET1 定时中断1允许控制位
ET0 定时中断0允许控制位
EX0 外部中断0允许控制位
EX1 外部中断1允许控制位

当中断控制位为0时禁止中断,为1是允许中断

IP 中断优先级控制寄存器

PT2 PS PT1 PX1 PT0 PX0
7 6 5 4 3 2 1 0
PX0 外部中断0优先级控制位
PX1 外部中断1优先级控制位
PT0 定时中断0优先级控制位
PT1 定时中断1优先级控制位
PT2 定时中断2优先级控制位
PS 串行中断优先级控制位

优先级控制位为0时表示中断优先级为低,
为1时表示中断优先级为高,
中断优先级高的中断源可再次中断中断优先级低的中断源
同级间不能发生再次中断

TCON 定时计数器控制寄存器

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
7 6 5 4 3 2 1 0
IT0: 外部中断0触发方式选择位当IT0=0时,外部中断0为低电平触发中断当IT0=1时,外部中断0为下降沿触发中断,优先选择
IE0: 外部中断0中断请求标志位 ,当EA&EX0=1时,如果中断外部(P3.2)有信号时,IE0自动置1,当CPU响应中断后自动清零。
IT1 外部中断1触发方式选择位当IT1=0时,外部中断1为低电平触发中断,当IT1=1时,外部中断1为下降沿触发中断
IE1 外部中断1中断请求标志位。当EA&EX1=1时,如果中断外部脚(P3.3)有信号时,IE1自动置1,当CPU响应中断后自动清零。

(3)CPU外围模块的使用方法:
<1>相关控制字初始化;
<2>如果模块工作在中断模式,则编写响应中断功能的子程序。

第六章:内部资源之定时计数器T0、T1

在这里插入图片描述

16位计数器:T0 分为 TH0(高八位) 和 TL0(低八位)
T1 分为TH1(高八位) 和 TL1(低八位)
(1)相关口线:

T0:P3.4 定时计数器0外部脉冲输入端;如果是内部时钟,则工作时钟为fosc/12,此时P3.4作IO口使用
T1:P3.5 定时计数器1外部脉冲输入端;如果是内部时钟,则工作时钟为fosc/12,此时P3.5作IO口使用

输入信号下降沿有效,前一个机期周期为高电平 ,后一个机期周期为低电平表示有脉冲,信号周期: T>=2Tfr=212Tosc,
信号的频率:f(1/f)>=(24/fosc) >> f<=fosc/24

(2)相关控制字:TMOD TCON IE IP
TH0 TL0 TH1 TL1

计数器TH0 TL0 TH1 TL1
用于存计数值,若TR0(TR1)=1,如果有脉冲信号 则自动加1

TH0 定时计数器0的高8位 65536 取高八位则X/2^8(256)
TL0 定时计数器0的低8位 取低八位则X%2^8(256)
TH1 定时计数器1的高8位
TL1 定时计数器1的低8位

TCON 定时计数器控制寄存器

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
7 6 5 4 3 2 1 0
TR0 定时计数器0的启动控制位,当TR0=1,允许计数,TR0=0时,停止计数
TR1 定时计数器1的启动控制位,当TR1=1,允许计数,TR1=0时,停止计数 65535
TF0 定时计数器0的溢出标志位 ,当TH0与TL0计数计满溢出时自动置1; 若EA&ET0=1时,即定时中断0处于开启状态,则TF0等效为定时中断0的中断请求标志位,CPU响应中断后自动清零;如果EA&ET0=0,则必须软件清零(TF0=0)。
TF1 定时计数器1的溢出标志位 ,当TH1与TL1计数计满溢出时自动置1;若EA&ET1=1时,即定时中断0处于开启状态,则TF1等效为定时中断1的中断请求标志位,CPU响应中断后自动清零;如果EA&ET1=0,则必须软件清零(TF1=0)。
IE1 外部中断1
IT1 触发方式 1下降沿 0上升下降沿
IE0 外部中断0
IT0 触发方式 1下降沿 0上升下降沿
TMOD 定时计数器的工作方式选择控制寄存器
GATE C/T M1 M0 GATE C/T M1 M0
7 6 5 4 3 2 1 0
GATE 门控位, 当GATE=0,T0(T1)与外部中断脚INT0(INT1)无关;当GATE=1时,必须INT0(INT1)=1时定时计数器T0(T1)才能工作
C/T 定时方式与计数方式选择位,C/T=0时,定时方式,计数器的工作脉冲来自内部时钟信号,为Fosc/12(即十二个振荡脉冲向定时提供一个工作脉冲,即每个机器周期自动加1), C/T=1时,计数方式,计数器的工作脉冲来自外部时钟信号(P3.4或是P3.5),有脉冲时自动加1)
M1M0 定时计数器的工作方式选择位

M0 M1选择4种工作模式

0 0 :方式0,TH0(TH1)+TL0(TL1)
	 的低五位  13位计数器
0 1  方式1,TH0(TH1)+TL0(TL1)
	 16位计数器
1 0  方式2,8位自动重装方式,
	 TL0(TL1)计数,TH0(TH1)
	 存放初值(重装值)
1 1  方式3,T0具有,TH0与TL0
	 为两个独立的八位计数器,
	 th0占用原有T1的资源TL0
	 即可定时亦可计数(P3.4),
	 TH0只能定时

设置TR0 TL0 TF0 EA ET0 进中断1 T0
设置TR1 TH0 TF1 EA ET1 进中断 3 T1

T1为波特率发生器时,不能用于定时或是计数
t=P(2^n-x)Tfr  
 t:为定时时间,
 x:为TH0与TL0中的初值
 Tfr:机期周期 
 n:为计数器的长度,与工作方式有关。
 机器周期:
	Tfr=12*1s/Fosc    FOSC=24M
	Tfr=12*1s/(12*10)=0.5*10s=1us=10^-6s  
定时时间:t=pluse*Tfr       t=5ms   
脉冲数:pluse=t/Tfr    pluse=1ms/1us=1000    
定时数初值:x=2-pluse 
 n:表示定时计数器的长度,
 	由工作方式决定 
	x=2-1000=64536 

T=0.707(R1+R2)C+0.707*R2*C  
F=1/T     		
483 =1/(0.707(R1+R2)C+0.707*R2*C)>>C
	=1000 000 	/(zi*0.707*3) nf

t=(2^n-初值)Tfr   1000=2^n-x  x=2^13-1000=8192-1000=7192
f=38k  T=1s/f t=T/2   13us=(2^n-x)Tfr 13=2^n-x x=2^n-13=2^8-13

第七章: 通用异步串行口(UART)

在这里插入图片描述
内部结构:
在这里插入图片描述

(1)相关口线:

P3.0 RXD 串行接收
P3.1 TXD 串行发送
波特率:串行通行的速率,BIT/S
数据帧:起始位 8个数据位(D0-D7)
		D8(奇偶校验位) 停止位 
起始位:低电平
数据位:高电平表示数据1,低电平表示数据0;低位在前,高位在后
奇偶校验位:MCS-51默认为偶校验,
			经常用作数据第九位
奇校验=D0⊕D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕1
偶校验=D0⊕D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕0
停止位:高电平
点对点通信模式:单工模式  半双工模式 
			   全双工模式

(2)相关控制字
SCON SBUF IE IP PCON TH1 TL1 TCON TMOD T2CON RCAP2H RCAP2L TH2 TL2

SCON 串行控制寄存器
SM0 SM1 SM2 REN TB8 RB8 TI RI
7 6 5 4 3 2 1 0
      SM0 SM1 :串行工作方式选择位
       0   0    方式0,同步移位寄存器方式
       0   1    方式1,10位UART
       1   0    方式2,11位UART(波特率不可调)  DMAX512  250K
       1   1    方式3,11位UART   P0=0xf0 
      SM2:多机通信位
       0   REN=1,即允许接收数据(接收与RB8无关)
       1   REN=1,且RB8=1时才接收前收前八位(SBUF)
      REN  接收使能位
       0   禁止接收
       1   允许接收
      TB8  发送数据第九位,在多机通迅中,TB8=1,表示前八位(SBUF)发送地址信号,TB8=0,表示前八位(SBUF)发送数据信号。
      RB8  接收数据第九位,由发送方决定
      TI   发送中断标志位 
           当串口发送完一帧数据,自动置“1”,如果EA&ES=1,则会触发串行中断,但必须软件清零。
      RI   接收中断标志位 
           当串口接收完一帧数据,自动置“1”,如果EA&ES=1,则会触发串行中断,但必须软件清零。
      SBUF:串行缓冲器,专用于收发数据
           发:SBUF=0xaa;
           收:data1=SBUF;  MOV A,SBUF
PCON 电源管理寄存器
SMOD X X X GF1 GF0 PD ID
7 6 5 4 3 2 1 0
SMOD 波特率倍增位
         0  波特率不倍增
         1  波特率倍增
GF1 GF0 用户标志位
PD      掉电保护模式控制位
        RAM保存数据,其它部件停上工作,
        只能复位激活
ID   空闲模式控制位,CPU不工作,
	 其余外围模块正常,可用中断激活

TMOD TH1 TL1 TCON与PCON配合设置通信波特率,
T1工作方式2,定时状态
IE IP 控制串行中断 EA ES PS三位
(3)工作方式

 1、方式0 八位同步移位控制方式(属于主动的同步串行模式)
    特点:波特率=Fosc/12;
          数据帧格式:8位
          P3.0: 数据线,即可发送亦接收
          P3.1:时钟线,用于产生移位脉冲
 2、方式1 10位通用异步串行通信模式特点:
 	波特率=(2SMOD/32)*Fosc/(12(256-x)), 
	Fosc=11.0592 ,22.1184,5.5296   
	9600=28800/(256-X)
	X为T1工作在定时mode 2 下TH1中的初值
    数据帧格式:10位,
    起始位 8位数据位 停止位
 3、方式2 11位通用异步串行通信模式 
    DMAX512
    特点:波特率=2SMOD *Fosc/64;
    数据帧格式:11位,
    起始位 8位数据位 奇偶校验位
   (TB8或是RB8) 停止位
 4、方式3 11位通用异步串行通信模式特点:
 	波特率=(2SMOD /32)*Fosc/(12(256-x)),
    X为T1工作在mode 2 下TH1中的初值
    数据帧格式:11位,
    起始位 8位数据位 奇偶校验位
   (TB8或是RB8) 停止位 

在这里插入图片描述
(4)串口用法:
1、设相同工作方式
2、设相同波特率
3、制定通信协议

猜你喜欢

转载自blog.csdn.net/mbs520/article/details/105664240