注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

III = Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C51串口方式1发送  

2017-07-17 10:56:48|  分类: C51(C&ASM) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
概述
串口在工作方式1时,是波特率可调的10位通用异步接口UART,一帧数据包含10位,即1位起始位(=0),8位数据位和1位停止位(=1)。其波特率取决于定时器1的溢出率以及PCON中波特率选择位SMOD。
波特率调制
定时器1作为波特率发生器时,通常工作在模式2下,即自动装载8位初始值的定时器。波特率计算方式如下:
波特率=fosc/12/(256-X)*2^SMOD/32
其中X就是定时器的初始值,SMOD位为0时,相当于波特率不加倍,SMOD=1,波特率加倍。
例如晶振频率是11.0592MHz,如果SMOD=0,则为了调出9600Bit/s的波特率:
11.0592*10^6/12/(256-X)/32=9600
计算得:X=253,转化为HEX是0xFD。其他波特率可采用类似方式计算。
发送
发送时,只要将数据写入SBUF,就会启动发送器发送,数据发送完毕之后硬件将中断标志TI置1,如果要进行下一次发送,必须将TI清零。另外, 在有串口中断响应函数时,可以采用软件将TI置1,主动创造一个中断(即使没有产生实质的数据传输)。
代码
#include <reg51.h>
#include <intrins.h>

unsigned char INFO[] = "The quick brown fox jumps over the lazy dog.";//串口输出数据
unsigned char IDX = 0;//数组索引

//简单延时函数
void delay(unsigned char z)
{
    unsigned char y=80;
    while(z--)
        while(y--);
}

void main(void)
{
    PCON = 0x00;//SMOD=0,波特率不变
    SCON = 0x40;//串口工作方式1,不接收
    //计时器1,工作方式2
    TMOD = 0X20;
    //9600BPS@11.059MHz
    TH1 = 0xfd;
    TL1 = 0xfd;

    //中断开关
    EA = 1;
    ES = 1;
    TR1 = 1;
    EX0=1;
    IT0=1;//中断1下降沿触发
    TI=1;//制造一个串口中断  
    P1=0xfe;//常规例程,流水灯
    while(1)
    {
        P1=_cror_(P1,1);
        delay(50);
    }
}

//外部中断0响应函数
void INT_EX0() interrupt 0
{
    EX0=0;
    IDX=0;
    TI=1;
    EX0=1;
}

//串口中断响应函数
void INT_SERIAL() interrupt 4
{
    if(TI == 1)  
    {         
        if (INFO[IDX] != '\0') 
        {
            SBUF = INFO[IDX++];
        }
        TI=0;
    }
}

有图有真相:
C51串口方式1发送 - Lemniscate - 信息 灵感 创新
 代码中,单片机运行时,由主函数中主动创造一个串口中断(P1=0xfe前的那个),CPU执行串口中断函数,在此函数中,检查数据是否发送完毕,如果没有发送完毕,则将TI清零,并准备好下一个数据,下个数据发送完自动使TI=1,you,带来中断,直到达到字符串的结尾。SBUF也没有数据写入。
外部中断0用于将串口发送数据初始化,下降沿触发,每次外部中断触发时,串口将把数据再次发送一次。
 而常规例程只是点亮流水灯,模拟正常运行,具体可根据硬件连接调整。
  评论这张
 
阅读(46)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017