51单片机自学必读.docx
《51单片机自学必读.docx》由会员分享,可在线阅读,更多相关《51单片机自学必读.docx(17页珍藏版)》请在冰豆网上搜索。
![51单片机自学必读.docx](https://file1.bdocx.com/fileroot1/2022-12/7/df5b4e1d-7372-4449-ba2b-28b45f2c0c45/df5b4e1d-7372-4449-ba2b-28b45f2c0c451.gif)
51单片机自学必读
1.系统概述
89C51-III单片机学习板是一款基于8位单片机处理芯片STC89C52RC的系统。
其功能强大,可以实现单片机开发的多种要求,学习、开发者可以根据需要选配多种常用模块,达到实验及教学的目的。
89C51-III单片机学习板功能强大,具有报警,跑马灯、串行通信(max232)、段码液晶(msm0801LCD)和字符液晶显示(LCD1602)、电机控制(L298)、A/D转换(TLC2543)、D/A转换(TLC5615)、温度采集(DS1602)、数字信号合成(AD9851)、实时时钟电路(DS1302)、4—20mA输出、PWM输出(UC3842)、红外检测(KSM-603LM)控制等十七种功能,供学习者学习开发使用。
89C51-III单片机学习板采用的芯片都是常用芯片,使学习者对常用电子产品进一步学习理解。
2.系统原理
2.1系统组成
图1-1系统原理图
2.2主CPU电路
主CPU电路选用STC89C52RC系列单片机,STC89C52RC是采用8051核的ISP(InSystemProgramming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8KBytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。
STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,内部集成MAX810专用复位电路。
STC89C51系列单片机的特点:
(1)增强型1T流水线/精简指令集结构8051CPU
(2)工作电压:
3.4V-5.5V(5V单片机)/2.0V-3.8V(3V单片机)
(3)工作频率范围:
0-35MHz,相当于普通8051的0~420MHz.实际工作频率可达48MHz.
(4)用户应用程序空间12K/10K/8K/6K/4K/2K字节
(5)片上集成512字节RAM
(6)通用I/O口(27/23个),复位后为:
准双向口/弱上拉(普通8051传统I/O口)
可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏
每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55mA
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器
可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片
(8)EEPROM功能
(9)看门狗
(10)内部集成MAX810专用复位电路(外部晶体20M以下时,可省外部复位电路)
(11)时钟源:
外部高精度晶体/时钟,内部R/C振荡器。
用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟。
常温下内部R/C振荡器频率为:
5.2MHz~6.8MHz。
精度要求不高时,可选择使用内部时钟,因为有温漂,请选4MHz~8MHz
(12)有2个16位定时器/计数器
(13)外部中断2路,下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒
(14)PWM(4路)/PCA(可编程计数器阵列),也可用来再实现4个定时器或4个外部中断(上升沿中断/下降沿中断均可支持)
(15)STC89Cc516AD具有ADC功能。
10位精度ADC,共8路
(16)通用异步串行口(UART)
(17)SPI同步通信口,主模式/从模式
(18)工作温度范围:
0-75℃/-40-+85℃
(19)封装:
PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20(超小封状,定货)
STC89C52RC系列单片机为真正的看门狗,缺省为关闭(冷启动),启动后无法关闭,可省去外部看门狗。
此系列单片机P4口地址为E8H,并有2个附加外部中断,P4.2/INT3,P4.3/INT2。
晶振电路部分,使用11.0592M晶体,和20PF的电容。
在复位电路中,采用阻容复位时,电容为10uF,电阻为10k;晶振及复位电路如图2.1。
因为STC89C52RC系列单片机RESET脚内部没有下拉电阻,必须接10k电阻。
图2.1晶振及复位电路
2.3电源电路:
电源电路采用外部供电的方式,通过变压器将220V交流电转变为12V,再通过接口J0向实验板供电,为保护系统的安全性,增加了开关k0,防止因电源不当引起硬件的烧坏,电源经过k0后,经过整流桥,再通过电源芯片7805和7809得到+5V和+9V,为系统及周围芯片提供电源。
电源供电原理图如图2.2
图2.2电源供电原理图
2.4报警器电路
报警器电路如图2.3所示,使用三极管9012进行驱动控制。
用单片机控制引脚P3.2控制报警器工作,实现报警功能。
图2.3报警器电路与STC89C52RC的连接
2.5按键
系统设计有三路独立的输入按键,按键直接接入到单片机的P1口,键盘电路如图2.4所示。
当按键未按下时,由于上拉电阻的作用,单片机检测到引脚为高电平;当按键被按下时,单片机检测到引脚为低电平。
所以只要通过检测相应端口的状态的变化,就可以检测到是否有按键按下。
图2.4键盘电路与STC89C52RC的连接
2.6串行通信模块
2.6.1.RS232接口电路
系统设计了RS232接口电路,来实现系统与PC机串口通讯。
在此系统中RS232接口电路主要用来将用户程序下载进控制器。
用户通过USB线将程序代码送入RS232串口J9,经MAX232将程序下载进单片机。
接线方法如图2.6.1。
用户也可在自己的目标系统上,可将P3.0/P3.1经过RS-232电平转换器转换后连接到电脑的普通RS-232串口,就可以在系统编程/升级用户软件。
建议如果用户板上无RS-232电平转换器,应引出一个插座,含Gnd/P3.1/P3.0/Vcc四个信号线,当然如能引出Gnd/P3.1/P3.0/Vcc/P1.1/P1.0六个信号线为最好,这样就可以在用户系统上直接编程了。
关于ISP编程的原理及应用指南详见附录部分“STC12C5410AD系列单片机ISP编程原理工具使用说明”部分。
图2.6.1RS232、与TTL电平转换电路与STC89C52RC的连接
2.6.2.RS485接口电路
RS485是一个半双工通信的接口电路,其电路采用MAX485。
利用RS485接口可方便实现多一机对多机的组网通信。
P3.5为收发控制脚。
电路如图2.6.2
图2.6.2RS485接口电路与STC89C52RC的连接
2.7液晶显示模块
系统设计中,液晶显示采用SMS0801LCM液晶屏。
SMS0801LCM可以显示8位带小数点数字,采用串行接口,使用方便,只需将1,2脚接电源地,3脚接单片机P1.6,4,5脚接电源,6脚接单片机P1.3即可实现显示。
如图2.7所示。
表1SMS0801LCM使用说明
一.主要技术参数
显示容量
8位带小数点数字
芯片工作电压
2.7v~5.5v
工作电流
20uA(3.0V)
字 高
10.7mm
环境相对湿度
<85%
视 角
6:
00
工作温度
-10~+50℃
显示方式
反射式正显式
存储温度
-20~+60℃
接口方式
串行接口
二.接口信号说明
1VSS:
电源地
2 VSS:
电源地
3CLK:
串行移位脉冲输入
4VDD:
电源正极
5VDD:
电源正极输入
6DI:
串行数据输入
三、SMS0401地址映射表
LCDBUF
D7
D6
D5
D4
D3
D2
D1
D0
0
A1
B1
C1
D1
E1
F1
G1
H1
1
A2
B2
C2
D2
E2
F2
G2
H2
2
A3
B3
C3
D3
E3
F3
G3
H3
3
A4
B4
C4
D4
E4
F4
G4
H4
4
A5
B5
C5
D5
E5
F5
G5
H5
5
A6
B6
C6
D6
E6
F6
G6
H6
6
A7
B7
C7
D7
E7
F7
G7
H7
7
A8
B8
C8
D8
E8
F8
G8
H8
图2.7SMS0801的结构图
2.8电机控制模块
电机控制模块中采用驱动二相和四相步进电机的专用芯片L298来完成,其内部包含4通道逻辑驱动电路,具有双电机控制功能,内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。
这种驱动电路可以很方便实现直流电机的四象限运行,分别对应正转、正转制动、反转、反转、制动等功能。
为了进一步将功能扩展,将L298的输出out1,out2,out3,out4经扩展口J6,J7扩展出来。
电机控制电路接线图如图2.8所示。
表2-2为电机控制功能表
表2-2电机控制功能表
输入
电机状态
备注
Ven(6脚、11脚)
C(5脚、10脚)
D(7脚、12脚)
H
H
L
正转
电机转动
L
H
反转
0
0
停止
电机被制动
1
1
停止
L
X(任意)
X(任意)
停止
电机不受控制
图2.8电机控制电路与STC89C52RC的连接
2.9A/D模块
系统使用12位模数转换器TLV2543来实现,TLVC2543采用串行接口,具有11路输入,有三个控制输入端为CS(片选)、输入/输出时钟(I/O CLOCK)以及串行数据输入端(DATA INPUT)。
片内的14通道多路器可以选择11个输入中的任何一个或3个内部自测试电压中的一个,采样-保持是自动的,转换结束,EOC输出变高。
主要特性如下:
11个模拟输入通道;66ksps的采样速率;
最大转换时间为10μs;SPI串行接口;
线性度误差最大为±1LSB;
低供电电流(1mA典型值);
TLC2543与STC89C52的连接如图2.9所示。
TLC2543的I/O时钟、数据输入、片选信号由P2.1、P2.2、P2.0提供,转换结果由P2.3口串行读出。
另外将11路输入端接J3扩展接口,以便信号输入。
图2.9A/D转换电路与STC89C52RC的连接
2.10D/A模块
TLV5615是一个10位电压输出数模转换器(DAC),包括4个控制位和12个数据位的16位字符串来编程,可以用于宽范围的电源电压:
2.7V至5.5V。
引脚说明如下:
DIN:
串行数字数据输入;
SCLK:
串行数字时钟输入;
/CS:
片选。
数字输入,用来使能和禁止输入,低电平有效;
FS:
帧同步,数字输入用于4线串行接口;
AGND:
模拟地
REFIN:
基准模拟电压输入;
OUT:
DAC模拟输出;
Vdd:
电源;
图2.10D/A转换电路与STC89C52RC的连接
2.11温度采集模块
温度采集部分采用单总线温度采集芯片DS18B20,DS18B20独特的单线接口仅需要一个端口引脚进行通讯。
测量温度范围为-55
~+125
,在-10~+85
范围内,精度为±0.5
。
。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
支持3V~5.5V的电压范围,
接线方法如图2.11所示:
DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端。
图2.11DS18B20与STC89C52RC的连接
2.12数字频率合成电路
直接数字信号合成部分采用180
直接数字频率合成器(DDS)AD9851来实现,AD9581是一个高度集成的器件,它是用先进的DDS技术,内部有一个高速的高性能的D/A转换器和比较器以构成一个可数字编程的频率发生器和时钟功能。
当作为准确的时钟参考时,AD9851可以通过数字编程产生一个具有稳定的频率和相角的模拟正弦函数波形输出信号。
产生的正弦波形可被直接用作一个频率信号,或者可在内部转换为一个方波信号,可作为灵活调节的时钟发生器。
AD9851创新的高速DDS内
核,可接受32位的可调频率的信息,可以产生一个大约0.04
的调谐输出信号并伴有180
的系统时钟。
AD9851包含一个特殊的
乘法器电路,因此不需要高速的振荡器。
这个
乘法器对SFDR只有很微弱的冲击和很小的相角噪声特点。
AD9851提供了5位可编程的相角调节方案,使相角能随输出信号的增加11.25°。
接线图如图2.12。
图2.12DDS数字频率合成器连接电路与STC89C52RC的连接
2.13锁存器及其外扩接口
系统通过锁存器74HCS373暂存单片机输出信号,74LS373包含了8个具有三态输出的D型锁存器。
当LE为高电平时,数据从
输入端进入锁存器。
8位锁存器74LS373的逻辑图见图所示2.13.1。
其中使能端G加入CP信号,D为数据信号。
输出控制信号为0时,锁存器的数据通过三态门进行输出。
输出后通过外扩接口J3将数据引出。
电路原理图如图2.13.2。
图2.13.174HC373原理图及功能
图2.13.274HC373及对外扩展电路与STC89C52RC的连接
2.14
E²PROM电路
系统设计了一个
E²PROM电路,用于存储数据,该电路使用24LC02B芯片,可以存储2Kbit数据,是电可擦除的PROM。
由256*8位的记忆单元与两线串口单元相连接。
电路如图2.14所示。
图2.14EEOROM电路与STC89C52RC的连接
2.15实时时钟电路
系统使用DALLAS公司的具有涓细电流充电能力的低功耗实时时钟电路DS1302。
它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
DS1302的主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。
采用普通32.768kHz晶振。
工作电压为2.5V~5.5V。
DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),SCLK始终是输入端。
DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。
DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。
其电路连接
如图2.15所示。
图2.15DS1302实时时钟电路与STC89C52RC的连接
3.单片机的C51编程技巧
3.1C51与C 语言
1、Main()
{
//通信初始化
SCON=0x40;//串行口工作方式1,TI=0,RI=0
TMOD=0x20;//定时器1工作方式2,8位自动重装式,晶振频率11.0592MHz
PCON=0;
TH1=0xFD;//9600bps
TL1=0xFD;
TR1=1;
TI=1;
printf("%f,%f\n",ppf,mf);//通信
}
2、C51的数据类型
bit01
char8-128~127
unsignedchar80~256
int16-32768~32767
unsigned160~65535
longint32-231~(231-1)
unsigned320~(232-1)
float32//在汇编中有24位
例:
inta=721BCD
inta=07218
inta=0xFFHex
3、C51的函数
intj全局变量
voidfun()
{
inti;
}
3.2C语言中常用的语句(也适合于C51)
if(条件)
{
}
②if()
elseif()
else
③switch(条件式)
{case:
值1
break;
case:
值2
break;
……..
}
④while(条件)
{动作
先条件
后内容
}
⑤do
{先内容
后条件
}while(条件)
⑥for(算式1;算式2;算式3)
//(赋植;条件;增量)
{
}
例1:
for(i=0;i<10;i++)
{
动作
}
例2:
for(;;);//C语言认为合法
例3:
i=0;
for(;i<10;i++)
{
}
3.3指针与数组
char*a;
charab;
a=&ab;
char名[][][](三维)
voiddalay(unsignedintcount)
{
unsignedintI;
for(i=0;i{
}
}
main()
{
dalay(100);
}
3.4语言中按地址传递
voiddemo(charbuf[10])
{
chari;
for(1=0;i<10;i++)
{
buf[i]=0;
}
}
main()
{
chardat[10];
demo(dat);
}