菜鸟学习ing, 学浅才疏,欢迎指正批评
自己作为大学生作为小白的学习总结,想有个写学习总结类博客的习惯.若有侵权请私信联系
单片机总览
<1> 四组8位并行I/O端口:
P0端口:PC门,集电极开路输出,必须接上拉电阻才能输出高电平。
P1端口:无特殊之处。
P2端口:访问外部存储器时,作高8位地址用。
P3端口:功能复用端口,详情看表。
<2> 三大外设:外部中断、定时/计数、串行通信
(1)外部中断
外部中断初始化程序应完成如下工作:
1.对TCON赋值,以确定触发方式(电平or边沿)。
2.中断方式时,则对EA赋值,开放外部中断。(IE中打开总线EA和外部中断EX0 )
3.等待外部中断信号
/*************外部中断初始化***************/
void Init_Into()
{
IT0 = 1; //触发方式
EX0 = 1; //使能外部中断0
EA = 1; //使能总中断
}
/*************外部中断0中断服务函数********************/
void ServiceInto0() interrupt 0
{
/*************中断后去干啥******************/
}
在51单片机中有INT0(P3.2)和INT1(P3.3)两个中断模块,外部的触发信号可以是电平,也可以是边沿,由寄存器TCON的IT0和IT1位来决定。
(2)定时/计数
在51单片机中有T0和T1两个定时器,对内部可以定时,对外部可以计数。在初始化的时候,需要确定该模块是定时功能还是技术功能,工作模式是什么,最大计数值是多少。
定时初始化程序应完成如下工作:
1.对TMOD赋值,以确定T0和T1的工作方式。
2.计算初值,并将其写入TH0、TL0或TH1、TL1。(TMOD & TCON)位于T0 T1中
3.中断方式时,则对EA赋值,开放定时器中断。(IE)
4.使TR0或TR1置位,启动定时/计数器定时或计数(TCON)
/*************定时器0初始化***************/
void Init_Timer0()
{
TMOD = 0x01; //定时器0定时功能,16位模式
TH0 = (65536 - 50000) / 256; //最大计数值的高八位
TL0 = (65536 - 50000) % 256; //最大计数值的低八位
ET0 = 1; //使能定时器0中断
EA = 1; //使能总中断
TR0 = 1; //启动定时器0
}
/*************定时器0中服务断函数********************/
void ServiceInto0() interrupt 0
{
/*************中断后去干啥******************/
}
(3)串行通信
在51单片机的串行接口中,产生波特率需要占用定时器T1,发送数据时,将内容放到SBUF中,数据发送完毕,TI会置1。当完整接收到一个数据后,RI会置1,这时从SBUF中将内容读出即可。不管是TI还是RI标志位,都需要人工清0。
串行口初始化程序应完成如下工作:
1.对TMOD赋值,.确定T1的工作方式;
2.计算T1的初值,装载TH1、TL1;(TMOD & TCON)
3.使TCON中的TR1置位,启动T1;
4.对SCON赋值,确定串行口控制;
5.串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。
如需要用到波特率翻倍要使PCON = 0x80,即第八位为1.
/*************定时器0初始化***************/
void Init_Uart()
{
TMOD = 0x20; //定时器0定时功能,16位模式
TH1 = 0xfd; //设置波特率为9600
TL1 = 0xfd; //11.0592或12M的12分频
TR1 = 1; //启动定时器1
SCON = 0x50; //串口参数模式1和允许接收
ES = 1; //使能串口中断
EA = 1; //使能总中断
}
/*************串行接口中服务断函数********************/
void SendByte(unsigned char dat)
{
SBUF = dat; //将数据放进SBUF缓存器
while (TI == 0); //等待发送数据完成
TI =0; //清除发送完成标志
}
/*************串行接口中服务断函数********************/
void ServiceUart() interrupt 4
{
if(RI == 1) //接收到一个完整的字节
{
RI = 0; //清除接收完成的状态
/*************便携中断服务函数逻辑代码********************/
}
}
数据传输图示
补充
IE/IP寄存器
定时器计算初值
例如j晶振为12MHZ,机器周期为1/1M=1us
我们定时1ms
1ms/1us = 1000.
因为216=65536
65536 - 1000 = 64536 = FC18H
TH0 = 0xFC;
TL0 = 0x18;
自动重装载
在重装载时对TH0 TL0 赋值时,低八位溢出后装载高八位
PCON
在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。
<3> 五个中断源:2个外部中断、2个定时/计数中断、1个串行通信中断
注意:要记住中断号与中断源的对应关系…编程时会用到!