C51精简版教程(AT89C51/STC89C52)

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

一、PDIP封装引脚图:

在这里插入图片描述

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

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

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

P1. 0T2定时计数器2的外部脉冲输入及时钟输出
P1.1T2EX定时计数器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 R008H R010H R018H R0
01H R109H R111H R119H R1
02H R30AH R312H R31AH R3
07H R70FH R717H R71FH R7

相关汇编操作

RS1=0CLR RS1
RS1=0CLR RS0
RS1=1CLR RS1
RS0=0SETB 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;

内部RAM20h-2fhbdata(位寻址)
内部RAM00h-ffhidata(间接寻址)
外部RAM00H-ffhpdata ( MOVX A,@R0 MOV @R0,A)
外部RAM0000H-ffffhxdata ( 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+10ACC=246+10
MOV P1,A把ACC载入到P1中
MOVC A,@A+DPTR查表,DPTR是首地址

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

MUL AB乘法
DIV AB除法

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

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

PSW 程序状态字

CYACF0RS1RS0OV-P
76543210

|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
codeROM区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.20003H0
外部中断1(INT1)P3.30013H2
定时计数器0(T0) 16bit000BH1
定时计数器1(T1)001BH3
定时计数器2(T2)002BH5
异步串行通信口(UART)0023H4
CPU外围模块的掌握方法:
(1)相关口线
(2)相关控制字
(3)模块的工作方式
一、外部中断
(1)相关口线
P3.2int0,外部中断0输入。分为低电平和下降沿两种可选触发
P3.3int1,外部中断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 中断优先级控制寄存器

PT2PSPT1PX1PT0PX0
76543210
PX0外部中断0优先级控制位
PX1外部中断1优先级控制位
PT0定时中断0优先级控制位
PT1定时中断1优先级控制位
PT2定时中断2优先级控制位
PS串行中断优先级控制位
优先级控制位为0时表示中断优先级为低,
为1时表示中断优先级为高,
中断优先级高的中断源可再次中断中断优先级低的中断源
同级间不能发生再次中断

TCON 定时计数器控制寄存器

TF1TR1TF0TR0IE1IT1IE0IT0
76543210
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 定时计数器控制寄存器

TF1TR1TF0TR0IE1IT1IE0IT0
76543210
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.0RXD串行接收
P3.1TXD串行发送
波特率:串行通行的速率,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串行控制寄存器
SM0SM1SM2RENTB8RB8TIRI
76543210
      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、制定通信协议

  • 31
    点赞
  • 291
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

化作尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值