51单片机 stc89c51
1、电瓶特性
单片机一般使用TTL(晶体管-晶体管逻辑电平)
TTL电瓶高电平是5v,低电平是0v。5v为1,0v位0.这被称作TTL。
TTL组成的电路的电平是个电压范围,规定输出高电平>2.4v,输出低电平<0.4v。室温下,一般输出高电平是3.5v,输出的低电平是0.2v。最小的输入高电平和低电平位>=2.0v和<=0.8v。
计算机串口用的是MAX232电平,高电平是-12v,低电平是+12v。
计算机串口和TTL通信需要进行电平转换。依赖电平转换芯片。
2、io口介绍
io为输入输出接口
分为总线型和非总线型。总线型的拥有四组io口,非总线型的拥有两组io口。
3、单片机最小组成系统
电源、单片机、晶振(cpu执行频率)、复位电路(进行程序复位) 复位引脚通常会接一个电容和按钮,电容是为了通电的一瞬间进行程序复位。按钮则是为了手动复位。
4、工作频率
晶振决定了cpu的工作频率,接到cpu的两个时钟引脚上。XTAL1,XTAL2
5、引脚功能
vcc接正极5v电源,vss接地。xtal1和xtal2接外部晶振。RST为复位信号输入引脚,单片机运行时,此引脚加上持续两个周期的高电平时,就可以完成复位操作。Vpd为备用电源输入端,当主电源vcc发生故障,降低到某一规定时,将+5v电源自动接入RST端,为内部RAM提供备用电源。
EA为内外部程序存储器的选择端,89c52单片机内部有8kb程序存储空间,当EA为高电平的时候,单片机访问内部程序存储空间,为低电平的时候访问外部程序存储空间,一般来讲内部程序存储空间已够用,直接接高电平即可。Vpp为编程电压输入端,需要输入12v的电压才能把程序烧写进去,现在已经不需要了,通过串口就可以进行下载,直接接高电平即可。ALE为地址所存允许信号,访问外部存储器的时候用的,现在基本用不到。PROG对片内EPROM的单片机编写程序时,此引脚做编程脉冲输入。现在使用的都是flashROM,以前使用EPROM的时候用得到,现在基本已用不到。PSEN当单片机访问外部程序存储器时,此引脚为读取外部存储选通信号,现在也很少用到。
P1 P2 P3作为输入输出双向口,p0口拥有三种状态,高电平、低电平、高阻态。P3口有第二个功能,也可以配置特殊功能寄存器来实现。
P3.0:RXD串行口输入 P3.1:TXD串行口输出 P3.2:INT0外部中断0输入 P3.3INT1外部中断1输入 P3.4:T0定时器0外部输入 P3.5:T1定时器1外部输入 P3.6:WR外部写控制 P3.7:RD外部读控制
此处掌握P3.0 P3.1,P3.6 P3.7已很少使用。P3.2 3.3 3.4 3.5可以通过配置特殊功能寄存器来实现。
6.中断
计算机执行某程序时,发生了紧急或特殊请求,cpu暂停某程序的执行,转而去处理上述的事件或请求,处理完毕后再重新执行某程序的过程叫中断。
和中断相关的特殊功能寄存器:
EX0 外部中断0 IT0 低电平触发方式 EA 总中断 中断服务程序的方法后面需要加上 interrupt 0
51单片机系列一共有5个中断源
外部中断源2个,INT0和INT1 分别由P3.2、P3.3端口线引入,低电平或下降沿引起,下降沿是一个高电平变为一个低电平。这两个外部中断源标志和她们的触发方式控制位由特殊功能寄存器TCON的低4位控制。TCON的高4位是控制定时器0和定时器1的,TR位是控制定时计数器的启动,TF位是定时计数器+1累加器的溢出的标志位。
内部中断源3个,T0、T1分别为定时器/计数器 0和1中断,分别由T0和T1回零溢出引起。TI/RI串行I/O口中断,串行端口完成一帧字符发送/接受后引起(TI/RI中断标志位不会主动清0,需要我们在中断程序里清0,这样才不会反复的触发中断),这三个内部中断源的控制位分别锁存在特殊功能寄存器TCON和SCON中。
TCON的8位分别为(从第七位到第零位)
TF1(定时器+1时溢出的标志)
TR1(控制定时器的启动)
TF0(定时器+1时溢出的标志)
TR0(控制定时器的启动)
IE1(外部中断申请标志位)
IT1(外部中断请求的触发方式选择位,为0在INT0/INT1端申请中断的信号为低电平有效,为1在INT0/INT1端申请中断的信号为负跳变有效,也就是下降沿,高电平和低电平必须持续一个周期)
IE0(外部中断申请标志位)
IT0(外部中断请求的触发方式选择位,为0在INT0/INT1端申请中断的信号为低电平有效,为1在INT0/INT1端申请中断的信号为负跳变有效, 也就是下降沿,高电平和低电平必须持续一个周期)
地址为88H,可以被8整除,可以进行位寻址。为什么被8整除的可以位寻址,个人猜想跟所有能被8整除的二进制后三位都是0有关系,要么这三个0用来表示位,要么就是没有道理就是这么干。
中断允许控制寄存器IE(A8H):CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。8位从高位到低位分别为:
EA:CPU中断允许(总允许)位,0全部禁用中断,1时允许中断。
第六位空
第五位空
ES:串行口中断允许位:0禁止中断,1允许中断
ET1:定时/计数器T1中断允许位,0时禁止中断,1允许中断
EX1:外部中断1允许位,0时禁止中断,1允许中断
ET0:定时/计数器T0中断允许位,0时禁止中断,1允许中断
EX0:外部中断0允许位,0时禁止中断,1允许中断
这5个中断源分别有2个优先级,低优先级的中断,在执行过程中,如果高优先级的中断请求过来,那么则会处理高级中断请求,请求完毕后再返回低级中断请求。通过寄存器IP来设置
IP(B8H) — — — PS(串行口中断优先级控制,1高优先级,0低优先级) PT1(T1中断优先级控制,1高优先级,0低优先级) PX1(INT1优先级控制,1高优先级,0低优先级) PT0(T0中断优先级控制,1高优先级,0低优先级) PX0(INT0优先级控制,1高优先级,0低优先级)
如果相同优先级同时发送中断请求(低概率),顺序为:
0、外部中断0
1、T0溢出中断
2、外部中断1
3、T1溢出中断
4、串行口中断
中断程序的方法后面要加interrupt 0,0就是代表优先级,依次为01234
中断响应条件:总中断、中断源的中断允许位为1,如果时外部中断的话,需要中断模式选择。
51单片机有2个16位的定时器/计数器:T0 T1,每经过一个机器周期,寄存器+1,
定时器控制寄存器TCON(0x88)
TF1:定时器1溢出标志,溢出的时候,此位为1
TR1:定时器1运行控制位,置1开始计时,0停止计时
TF0:定时器0溢出标志,溢出的时候,此位为1
TR0:定时器0运行控制位,置1开始计时,0停止计时
IE1:
IT1:
IE0:
IT0:
定时器工作模式寄存器TMOD,地址0x89,前四位控制定时器T1,后四位控制定时器T0
GATE:门空位
C/T:0工作在定时模式下,1为计数模式下
M1:
M0:
GATE:门空位
C/T:0工作在定时模式下,1为计数模式下
M1:
M0:
M1,M0 组成工作模式:00模式0 、01模式1(16位计数器,定时器1初始值存放寄存器TH1,TL1,定时器0一样)、10模式2、11模式3
7、串口通信
通信方式分为并行通信和串行通信
并行通信指数据的各位同时在多根数据线上发送或接受。如P0-7同时发送/接受数据给外界。
串行通信是指用一条数据线将数据一位一位的依次传输,每一位数据占据一个固定的时间长度,所谓的双工,就是指一根线接受,一根线发送。
通信分为异步通信和同步通信:
异步通信是指通信的发送于接受设备使用各自的时钟控制数据的发送和接受过程。为了双发的收发协调,要求发送和接受设备的时钟尽可能一致。异步通信是指以字符(构成的帧)为单位进行传输,字符与字符的间隔是任意的,但是每个字符中的各位是以固定的时间传送的。
同步通信时要建立发送方时钟对接收方时钟的直接控制,使双发达到完全同步。这样传输位字符时无间隔。一位一位的一直发。
数据的发送方向可分为三种:单工:单向发送,半双工:收发不可同时进行,全双工:收发可同时进行。
上面说的时钟指的就是比特率,比特率是每秒传输二进制代码的位数,单位是位/秒(bps),也叫波特率。传输与接受的波特率需要设置成一样。
串口控制寄存器SCON(98H):用于设置串行口的工作方式、监视串行口的工作状态、控制发送与接收的状态等,它是一个既可以字节寻址又可以位寻址的8位特殊功能寄存器。
SM0,SM1:0,0 工作方式0(移位寄存器。基本用不到,扩展io口用的。) fosc/12 波特率,fosc晶振频率
0,1 工作方式1(10位异步收发器,8位是数据位,还有一位是起始位,一位停止位。发送数据的波特率是可变的。) (2SMD/32)×(T1溢出率)
1,0 工作方式2 (11位异步收发器,9位数据位,其中有一位是校验位,波特率是fosc/64或fosc/32)(2SMD/64)×fosc
1,1 工作方式3(11位异步收发器,9位数据位,其中有一位是校验位,波特率可变)(2SMD/32)×(T1溢出率)
SM2:多机通信 0双机 1多机
REN:接收控制 0禁止 1允许
TB8:发送数据第9位
RB8:接收数据第9位
TI:发送中断标志,发送完一帧后,TI置1,表示发送一结束,可以软件查询TI,也可以向cpu申请中断。再次发送下一个需要置0,必须由软件置0.
RI:接受中断标志,原理同上。
TI和RI的中断地址是同一个地址0023H,因此再中断程序中必须由软件查询TI和RI的状态才能确定是接收还是发送中断。
电源控制寄存器PCON
D7:SMOD 再串行口工作方式123中是波特率加倍位,产生高波特率时启用,平时不用。比如11.0592晶振产生的57600波特率就要设置成SMOD=1
D6、D5、D4 空
D3:GF1
D2:GF0
D1:PD
D0:IDL
8、IIC通信
目前通常用的串行总线主要有IIC总线,SPI总线和SCI总线
IIC总线以同步串行2线的方式进行通信(一条时钟线,一条数据线) 主从方式
SPI总线以同步串行3线的方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)
SCI总线以异步方式进行通信(一条数据输入线,一条数据输出线)
SCL位高电平期间,数据线上的数据必须保持稳定,只有SCL信号为低电平期间,SDA状态才允许变化。
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号。SCL为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
每个字节必须保证长度是8位。数据传送时,先传送最高位,每一个被传送的字节后面必须都跟随一位应答位。