51单片机各种中断粗谈(串口通信详谈)

各个中断标志位

中断标志号

TMOD 工作方式设置

 

 

(一)定时器0或1初始化,定时模式:

 

TMOD|=     ;工作方式设置

TH0=       ;

TL0=        ;计数初值设置

 

EA=1;    打开总中断

ET0=1;    打开定时器0中断

TR0=1;开启定时器0

(二)关于计数器应用,P3.4,P3.5口分别是计数器的计数脉冲输入端(即把T0和T1设置为计数模式),每当外部输入的脉冲由1到0发生负跳变时,计数器加1,直到加满溢出,向cpu申请中断。对于12Mhz频率晶振,最高可输入500khz的外部脉冲(根据单片机的指令周期啥的计算),如果是外部脉冲,需要将其接入P3.4或P3.5

定时器0,计数模式:

TMOD|=0x       ;工作方式设置

TH0=0X00;

TL0=0X00;计数值设为0

 

EA=1;

ET0=1;

TR0=1;(这三个也得写),最后注意在中断中要把计数值清零。count=th0;   count=count<<8;   count=count+tl0,最后count值即为计数总个数(十进制)

(三)外部中断0或1初始化

EA=1;

EX0=1;下降沿触发(=0为高电平触发,一般不用)

IT0=1;打开INT0的中断允许

设置完之后即可在中断里设置外部中断

(四)串行口中断

比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:            10位×240个/秒 = 2400 bps

传输距离随传输速率的增加而减小。当比特率超过1000 bps 时,最大传输距离迅速下降,如9600 bps 时最大距离下降到只有76m(约250英尺)。

SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接收/发送控制以及设置状态标志:

SM0和SM1为工作方式选择位,可选择四种工作方式:

PCON电源管理寄存器 :(不可位寻址) 用来管理单片机的电源部分,包括上电复位检测、掉电模式 、空闲模式等

暂时只列出这么多,

当发送使用时,就采用SBUF=XXX;  (XXX为需要传送的数据)

当接收使用时,采用XXX=SBUF; 

注意:波特率设置在51单片机里只能使用T1(定时器1),T0不能设置,对于12mhz晶振,波特率一般4800,同时令SMOD=1(波特率加倍),这样误差会很小,且传输速率对于一般操作足够用。

例如下边程序,通过串口助手,发送数字(或一个字节)后会,再次在屏幕上接收到数字

#include "reg51.h"
#define u16 unsigned int
#define u8 unsigned char
 
void delay(u16 x)
{
    while(x--);
}
 
void UsartInit() //串口初始化
{
    SCON=0x50; //设置为工作方式1,8位异步模式,REN=1,则启动串行口接收数据
    TMOD|=0x20;    //定时器1工作方式2,用于产生固定频率的波特率,

    PCON=0x80;//波特率加倍

    TH1=0XF3;                //定时初始值设置,波特率4800,加倍后为9600,波特率一般为9600,我也不太清楚为啥
    TL1=0XF3;                
    ES=1;                        //打开接收中断
    EA=1;                        //打开总中断
    TR1=1;                    //打开定时器
    
}
 

 
void main()
{
    UsartInit();
    while(1);
   
}

void UsrtInit () interrupt 4

{

u8 receivedata;

receivedata=SBUF;//PC机发送数据存入变量中,接收数据

RI=0;//清除接收中断标志位

SBUF=receivedata;//将接收到的数据放入发送寄存器中,

while(!TI);//当TI=0时,说明还在发送,直到TI=1表示在发送停止位,

TI=0;//清除发送中断标志位

}

 

暂时写这么多,可能会再次更新。

 

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值