一、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 |
一、程序存储器(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
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;
注:中已定义
(2)外扩并口
#include
#define IO口名称 XBYTE [IO口地址]
#include
#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;
一、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>如果模块工作在中断模式,则编写响应中断功能的子程序。 |
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
(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) 停止位