GPIO;见单片机原理接口:胡汉才243页硬件图
MCS-51的4个I/O端口共有三种操作方式:输出数据方式,读端口数据方式,
读端口引脚数据方式。
在数据输出方式下,CPU通过一条数据操作指令就可以完成数据的输出,也即
往P0~P3的端口锁存器中写入数据了。 例如:MOV PO,A;累加器A中的内容送往PO口,输出了
读端口数据方式下,是一种仅对端口锁存器中的数据进行读入的操作方式,
CPU读入的这个数据并非端口引脚线上的数据,而是上次从该端口输出的数据
。因此,CPU只要一条传送指令就可把端口锁存器中的数据读入累加器A或内
部RAM中 例如:MOV A,P1 MOV 20H,P1
读引脚方式可以从端口引脚线上读入信息,在这种方式下,CPU首先必须
使欲读端口引脚所对应的锁存器置位(也即写入1,其实默认状态下端口引脚
都是高电平,所以一开始这步骤可以省略),然后打开输入三态缓冲器使相
应的引脚线上的信号输入MCS51内部数据总线上。因此,用户在读引脚时必须
连续使用两条指令,
例如: MOV P1,#0FH ;使P1口第四位锁存器置位 MOV A,P1 ;读P1口第四位引脚线信号送A
所以说,51单片机和其他的单片机不一样,其他的单片机例如430,s3c2440
,pic等他们IO引脚到底是作为输入还是输出他们有专门的寄存器的设置,还
有他们还有第二功能的引脚的设置,这个都是寄存器完成的,而51没有这么
复杂,直接读写就OK了
好下面接着外部中断: 在51单片机中外部中断也是通过外部引脚实现的,如果再430,pic(查查),
或者S3C2440中外部引脚当成外部中断时要设置寄存器,使它的外部引脚成为
中断引脚,而非普通的IO端口
基础知识介绍: 中断是支持中断嵌套的,中断嵌套支持中断优先权队列(按照表6-1《胡
汉才P209》)查询中断标志状态的,再有就是自动响应中断
其中自动响应中断,通常CPU总是在每条指令的最后状态对中断请求进行
一次检测,因此中断源(中断输入线INT,NMI)产生中断请求道被CPU检测到
的时间不会超过一条指令的时间。
CPU在响应中断时,通常要自动做三件事:一是自动关闭中断(严防其他
中断进来干扰本次中断),并把源执行程序的断点地址压入堆栈,以便中断
服务程序末尾的中断返回指令RETI可以按照此地址返回执行源程序;二是按
中断源提供的中断矢量(前面的那个地址也即“中断源入口地址”《胡汉才
P210》)自动转入响应的中断服务程序执行;三是自动或通过程序来撤除本
次中断请求,以避免再次响应本次中断请求。
中断源 中断服务程序入口 INT0 0003H 定时器T0 000BH INT1 0013H 定时器T1 001BH 串口中断 0023H
程序是这样跑的:当中断的一些寄存器设置好了之后,当来了中断的时
候,就跑到中断服务程序的入口地址处,然后再跳转到中断服务程序中去。
所有的中断都是一样的ARM9 S3C2440也是一样的!!也叫中断向量表 ! 外部中断:8051单片机只有5级中断源,两个外部中断,两个定时中断,
和一个串行口中断。 INT0,INT1两条外部中断请求输入线,用于两个外部中断请求信号,并
允许外部中断源以低电平或负边沿两种中断触发方式输入中断请求信号。 _________________________________________________________ TCON |TF1 |TR1 |TF0 |TR0 |IE1 |IT1 |IE0 |IT0 | 位地址 |8f |8e |8d |8c |8b |8a |89 |88 | | | | | | | | | T1中断标志<-| | | | | | | | 硬件复位0 | | | | | | | 中断标志位1 | | | | | | |_>触发控制 | | | | | | 0电平触发 T1计数:0停 <---| | | | | | 1下降沿 T1计数:1启 | | | | | | | | | ->外部中断0: T0中断标志 <---------| | | | 硬件复位0 硬件复位0 | | | 中断标志1 中断标志位1 | | |--->触发控制:0低电平 | | 1负边沿 T0计数:0停 <---------------| |--------->外部中断1:硬件复位0 T0计数:1启 中断标志1
解释下:标志位都是硬件置位的我们不需要软件置位,所以,标志位我们都
不需要设置,在这个寄存器中需要我们软件设置的只有四位,IT0,IT1用于
设置外部中断的触发方式,TR0,TR1,让定时器0和1启动的!!
定时器溢出中断源: 8031内有两个16位的定时器,计数器,内部定时脉冲(住脉冲经12分频
得到),或TO,T1引脚上输入的外部定时脉冲计数。
串行口中断:发送中断,接收中断两种。每当串行口发送/接收完一组串行数
据时,串行口电路自动使串行口控制寄存器SCON中的RI/TI中断标志位置位,
向CPU发出串行口中断请求,因此只要在串行口中断服务程序中安排一段对
SCON中的RI/TI中断标志位状态的判断程序,便可以区分发生了接收中断请求
还是发送中断请求。
_____________________________________________________ SCON |SM0 |SM1 |SM2 |REN |TB0 |RB8 |TI |RI | 位地址|9f |9e |9d |9c |9b |9a |99 |98 | | | | | |_>0无接收中断 | (注意需要软件清零) | 1有接收中断 | |->0表示无发送中断 1表示有发送中断 (同样是软件清零) 8031中断标志位集中在定时器控制寄存器TCON和串行口控制寄存器SCON中 外部中断标志位都是硬件自动的置位,复位 定时器中断标志位是硬件自动的置位,复位 串行口中断标志位是硬件自动的置位,软件复位(手动);
8031中断的控制; 中断的开放和关闭是通过中断允许寄存器IE进行两级控制,所谓两级控制是
指有一个中断允许总控制位EA,配合各中断源的中断允许控制位共同实现对
中断请求的控制。
这些中断允许控制位集中在终端允许寄存器IE中
_______________________________________ IE |EA | |ET2 |ES |ET1|EX1|ET0|EX0| 位地址|af | |AD |AC |AB |AA |A9 |A8 |
EA:总中断允许控制位,EA位不打开其它所有的中断都被关闭EA=0所有的中
断源都关闭,EA=1所有的中断源中断请求均被开放,但是他们是否能为CPU响
应还取决于IE中相应中断源的中断允许控制位状态
EX0/EX1:EX0/EX1为INT0/INT1中断请求控制位,都可由用户设定,若该位为
0则表示外部中断0/1被关闭,等于1则表示外部中断0/1被打开。再结合EA则
可以构成中断了
ET0/ET1/ET2:ET0/ET1一样溢出则中断,结合EA位一起组成两级控制源。
ES:ES串行口中断控制位,
总结下:首先中断设置使这样的:
对于外部中断:主要设置IE寄存器中的位进行两级控制,同时设置一下TCON
中的沿的触发方式 寄存器有:IE,TCON;
对于定时中断:主要设置IE寄存器中的位进行两级控制,同时设置一下TCON
中让定时器跑起来(定时时间是机器中期的12倍),对于中断上面的就够了,
但是要让单片机能够让定时器工作在自己想它工作的方式还得设置定时器模
式TMOD寄存器,给定时计数器装初值,TH0,TL0 __________________________________ TMOD|GATE|C/T|M1|M0|GATE|C/T|M1|M0| 低四位是定时器0的控制,高四位是定时器1的控制; GATE=0只要软件使TCON中的TR0或TR1为高电平就可以启动定时器,为1的话要
用软件是TR0或TR1为1,同时外部引脚也要是高电平,才能启动定时器/计数
器
C/T:定时/计数模式选择位。 =0为定时模式,=1为计数模式(从外面引入)
M1M0:工作方式设置位,定时/计数器有四种工作模式由M1M0进行设置。 00 方式0 13位定时/计数器 01 方式1 16位定时/计数器 10 方式2 8位自动重装定时/计数器 11 方式3 T0分成两个独立的定时/计数器,T1此方式停止计数
一般工作在方式1 寄存器有:IE,TCON,TMOD,THX,TLX;
对于串口中断: 主要设置IE寄存器中的位进行两级控制,同时设置SCON
—————————————————————————— SCON|SM0 |SM1 |SM2 |REN |TB8 |RB8 |TI |RI
SM0,SM1串口工作方式选择的,-------------------|->一般选择工作方式1
也即SM0=0,SM1=1; SM2用于多机通信的 0单机对单机,1,多机通信
REN 接收控制位 0,禁止接收,1,允许接收
TB8发送数据第九位
RB8接收数据第九位
TI 发送中断标志| |这两个标志位都需要软件清0 RI 接收中断标志|
PCON寄存器中的SMOD位是来波特率加倍用的, 其中方式一的波特率计算公式为:(2^SMOD/32)*(T1溢出率); T1溢出率=fsoc/(12*[256-TH1]); 串口的波特率产生由定时器1来产生的。
此时的定时器1是工作在方式2,此时定时器的一些寄存器也需要设置。
TH1的值一般为0XFD此时在晶振为11.0592M时产生的波特率刚好为9600无误差
。
PCON中的SMOD位(最高位)要值得注意,波特率翻倍的东西;
寄存器有:IE,TCON,TMOD,TH1,TL1,SCON,PCON;
中断优先级: 1,INT0 | 2,TIMER0 | 3,INT1 | 越往下越低!! 4,TIMER1 | 5,UART |
闲来无事,稍微总结了下,单片机的学习感觉根据资源的不一样功能也不大一样,但是大体单片机也就这些主要功能了,控制IO口和,中断,定时器,串口也基本组成了单片机的主要资源,其他的学习也大同小异,主要还是一些寄存器的设置。
|