一.简介
89c51
单片机工作基本时序
引脚
二、基本函数
延时函数
循环左右移
三、锁存器
四、中断
五、定时/计数器
六、键盘
七、D/A&A/D
八、计算机通信
九、IIC总线
十、芯片使用心得
stc89c52rc
stc:公司名
89:系列
c:cmos
52:内存2x4k
ps.引脚默认为高电平1
sfr:特殊功能寄存器声明
sfr16:sfr的16位数据声明
sbit:特殊功能位声明
bit:位变量声明
unsigned char 定义变量默认值为0
单片机工作基本时序
1.振荡周期(时钟周期):指为单片机提供时钟脉冲信号的震荡源的周期,TX实验板上为11.0592MHZ。
2.状态周期:每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。
3.机器周期:1个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可完成一个独立操作,约为1us。
4.指令周期:指CPU完成一条操作所需的全部时间。每条指令执行时间都是由一个或几个机器周期组成。
引脚
RST:高电平有效,持续两个机器周期,程序指针指向0地址,完成复位操作。
EA上划线:访问内外部存储器。当为H,访问内部存储器,当程序计数器超过存储限度时,访问外部程序;当为L,只访问外部程序。
ALE:正常工作时输出1/6时钟周期的方波,可用来检测是否正常工作。
P1、P2、P3口有上拉电阻,P0口没有上拉电阻。
延时函数
void delay500ms() { uint x, y; for(x = 100;x>0;x--) { for(y = 600;y>0;y--) { } } }
x,y参数需在keil调试中根据时间调整,设置中晶振频率(keil模拟)调为11.0295
循环左移:_crol_(右移为_cror_)
#include
void tst_crol_() { char a; a = 0xA5; #10100101 b = _crol_(a,3); #00101101 }
OE加上划线表示该芯片OE端为低电平时有效。
通过LE进行锁存数据。当LE为H是时,Q端随E端变化;当LE为L时,Q保持之前之前状态不在随D改变。
Q0表示维持之前状态。
Z为高阻态。
五个中断源:
中断请求标志:
TCON为定时器/计数器的控制寄存器:锁存外部中断请求标志(IE0),也保存触发控制方式(IT0)。
ps.字节地址能被8整除可以进行位寻址(8位1个字节)
中断优先级:
80c51有两个中断优先级,可实现二级中断嵌套
从上到下中断函数interrupt 0~4
中断允许寄存器:
中断响应条件:
①总中断打开(EA = 1)
②对应中断源的中断允许位为1
③中断源有中断请求(与触发控制方式搭配)
结构及原理:
实质是16位加1计数器,由低8位和高8位两个寄存器构成,经过一个机器周期加1,直到两个寄存器均为1时,再加1使两个寄存器回0且计数器溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定数/计数器中断允许时)。
ps.若晶振频率为12MHz,则一个机器周期为1μs
TMOD工作方式寄存器:
GATE = 0时,TR0或TR1为1就可启动定时/计数器工作;GATE = 1时,除上述条件还需要外部中断引脚为高电平才能工作
C/T = 0 为定时模式;C/T = 1为计数模式
M1M0可调工作方式(只讨论方式1:M1M0 = 01)
TCON(中断部分有图):
TCON低八位控制外部中断,高八位控制定时/计数器,控制T0、T1的启动和停止及设置溢出标志。
TR1控制T1,TR0控制T0,为1时开始工作,0时停止工作
TF0、TF1由硬件自动控制不做解释
方式1:
TMOD由T0部分控制
初始值:
TH0 = (65536-次数)%256
TL0 = (65536-次数)/256
最大计时约65ms。
定时/计数器应用条件:
①对TMOD赋值,以确定T0,T1的工作方式。
②计算初值,并将其写入TH0、TL0或TH1、TL1。
③两级中断都打开
④TR0或TR1置位
每50ms进入一次中断程序interrupt 1:
\\T0方式一每次50ms TMOD = 0x01; //设置T0工作方式 TH0 = (65536-50000)/256; TL0 = (65536-50000)%256;//初值 EA = 1;//总中断 ET0 = 1;//T0溢出中断 TR0 = 1;//T0开始工作 void exter0() interrupt 1 { TH0 = (65536-50000)/256; TL0 = (65536-50000)%256; }
键盘抖动:
抖动大约持续5ms,设置延迟10ms比较稳妥。
低电平即接地,高电平引脚与低电平引脚或与地相连时,高电平变低电平,即由1→0,用以检测按键是否按下。
①D/A
原理:
从D7~D0依次接1,I01得到的电流值为(VREF/R)*(1/2+1/2^2……+1/2^8),依此来将电压值转化为8位二进制数。
分辨率:
指最低位接1时,输出模拟量的变化(I01的变化量),上图8位则分辨率位VREF/2^8,通常VREF=5V,则分辨率为5/256=19.5mv。
②A/D
原理(逐次逼近式):
以VREF位参考,通过电压比较器使VIN与VREF逐位比较,从高位到低位逐个存放至寄存器,直到最低为存好时,控制逻辑EOC,寄存器数据输出。
分辨率:
只有超过分辨率的电压量才能使数码加1,具体定义与D/A分辨率类似。
简介
并行通信:
串行通信:
异步通信
异步通信发送/接收设备有各自的始终,传输数据时尽量保持一致
单个字符(1帧)内位与位间隔时间固定,帧与帧间隔时间任意
同步通信
发送方对接收方时钟的完全控制,后文均为主要介绍异步通信
数据格式:
10位1帧,起始位低电平,停止位高电平,校验位进行错误校验。
串行通信传输方向:
调制与解调:
Ⅰ调制器(Modulator):把数字信号转换成模拟信号
Ⅱ解调器(Demodulator):把模拟信号转换成数字信号
由于通信是双向的,两者合并到一个装置,即为调制解调器(MODEM)
错误校验:
Ⅰ奇偶校验:奇校验时数据位与校验位所有的“1”加起来应为奇数,偶校验时数据位与校验位所有的“1”加起来应为偶数。
Ⅱ代码和校验:发送方将发送的多个字节数据相加,接收方将接收的多个字节相加,若两者相等,则无差错。
Ⅲ循环冗余校验:广泛用于同步通信。
传输速率(比特率):每秒钟传输二进制代码的位数,单位:位/秒(bps)
串行通信接口标准:
①RS-232C:
数据终端设备(DTE)、数据通信设备(DCE)
RS-485:
ps.一般PC机不带RS485接口,故须RS-232C/RS-485转换器,如MAX485可进行此转换。
80C51串行口结构:
A=SBUF;(读数据)
SBUF=A;(发数据)
51单片机波特率由定时器1(T1)溢出率决定,故编程时只能用T1不能T0。
80C51串行口控制寄存器:
ps.此处只讨论方式1,fosc位晶振频率。
SM2:多机通信控制位,方式1为0。
REN:允许串行接收位,REN=1启动串行口接收数据,REN=0禁止接收。
TB8:在方式2、3中,是发送数据第九位,即校验位,方式0、1中均未用,设置为0。
RB8:在方式2、3中,是接收数据第九位,其他同TB8。
TI:发送中断标志位,方式1、2、3中,串行发送停止位开始,内部硬件使TI自动置1,即向CPU发送中断申请,在中断程序中,需手动输入程序清0,取消此中断申请。
ps.若ES=0,也会自动置1,只是不会进入中断。
RI:接收中断标志位,其他同TI。
SMOD:波特率倍增位,在方式1、2、3中,当SMOD=1时,波特率增加一倍。复位时,SMOD=0。
方式1:
波特率的计算:
串口通信应用步骤:
Ⅰ确定T1工作方式(编程TMOD寄存器)。
ps.计时器工作方式需为方式2,TH0满了后TH1自动将值赋给TH0。
Ⅱ计算T1初值,载入TH1、TL1。
ps.通过波特率计算初值。
Ⅲ启动T1(编程TCON中TR1位)
Ⅳ确定串行口控制(编程SCON寄存器)
Ⅴ串口工作在中断方式时,要进行中断设置(编程IE、IP寄存器)
1.IIC总线组成及工作原理
①IIC总线概述:
主线空闲时均为高电平,当有任何一器件的SDA/SCL为低电平时,主线的SDA/SCL也变为低电平
SDA:数据线 SCL:时钟线
总线仲裁:主机发送地址与相应器件匹配,多主机系统中,可通过总线仲裁决定那个主机控制主线
②IIC总线数据传送:
Ⅰ有效性
只有时钟信号高电平是,才能读到数据
ps.当收到一个完整字节后开始中断则需先将时钟信号SCL调为低电平,调为待机状态,直到中断程序结束后再调为高电平继续传送。
Ⅱ起始终止信号
只有时钟信号高电平期间检测到数据信号变化才能开始/结束读所需数据
③数据传送格式
Ⅰ字节的传送与应答
应答由从机发给主机,若为非应答,则主机发送终止信号
起始信号由7位从机地址(从机地址分为固定部分和可编程部分,用以多个相同从机与主机相连)与第8位传送方向位(R/T)组成,当传送方向位为“0”时主机传送数据(T),当传送方向位为“1”时主机接收数据(R)
a、主机一直向从机发送数据
S:起始信号
A:应答
A上划线:非应答
P:终止信号
b、主机在发送起始信号后一直从从机接收信号
c、中间出现发送/接收信号转换
2.EEPROM--AT24C02
地址固定部位为1010,A0、A1、A2通过高低电平确定可编程部分3位编码
读/写数据:
主机起始信号发送完后需再发送被写入器件存储的首地址
读:
重点: