单片机学习-2
为了方便记忆和使用,给每一个特殊功能寄存器都起了一个名字。
如果在程序设计中想直接使用这些名字,那么就需要引入对应当芯片头文件,例如51单片机,需要引入“reg52.h”文件。
特殊功能寄存器P0的地址为80H,引入这个头文件之后,就可以使用P0这个名字了
P0 = 0x02;
中断服务函数的格式:
在51单片机中有5个中断源,每个中断源都有固定的入口地址(也就是中断向量)和中断号。我们在程序设计的过程中,不需要记住中断向量地址,但需要知道每个中断源对应的中断号(参考【单片机学习-01】)
一般情况下,中断的处理函数有两个,其一为中断初始化函数,其二为中断服务函数。初始化函数就是一个普通的函数,而中断服务函数却有特殊的格式要求:
A. 中断函数没有返回值,也不能带参数。
B. 函数名后面要跟一个关键字interrupt,说明这是一个中断服务函数。
C. 在关键字interrupt后面要跟上中断号,说明这个中断服务函数是为那个中断服务的。
中断服务函数的格式为:
void 函数名() interrupt 中断号
{ ----函数体---- }
例如,定时器0的中断服务函数,我们C语言可以这样写:
对于每一个外设,我们都需要编写一个初始化函数和中断服务函数。这些函数在不同的应用工程中实际上都差不多,也就是说代码的重用性很高
1、外部中断模块
在51单片机中有INT0和INT1两个中断模块,外部的触发信号可以是电平,也可以是边沿,由寄存器TCON的IT0和IT1位来决定。
2、定时/计数模块
在51单片机中有T0和T1两个定时器,对内部可以定时,对外部可以计数。在初始化的时候,需要确定该模块是定时功能还是技术功能,工作模式是什么,最大计数值是多少。
3、串行接口模块
在51单片机的串行接口中,产生波特率需要占用定时器T1,发送数据时,将内容放到SBUF中,数据发送完毕,TI会置1。当完整接收到一个数据后,RI会置1,这时从SBUF中将内容读出即可。不管是TI还是RI标志位,都需要人工清0。
一般情况下,发送数据采用查询方式,接收数据采用中断方式。