51单片机串口发送字符事例

发布者:SereneVoyage最新更新时间:2020-03-03 来源: eefocus关键字:51单片机  串口  发送字符 手机看文章 扫描二维码
随时随地手机看文章

#include

#define jingzhen     11059200UL             /*使用22.1184M晶体*/     

#define botelv   9600UL             /*波特率定义为9600*/

unsigned char zifuchuan[]="您好!n";            //待显示字符。

volatile unsigned char sending;

sbit S4=P3^2;


void delay(unsigned char i)

{

    unsigned char j,k;

    for(j=i;j>0;j--)

        for(k=90;k>0;k--);

}

void init(void)                //串口初始化

{

EA=0; //暂时关闭中断

TMOD&=0x0F;  //定时器1模式控制在高4位

TMOD|=0x20;    //定时器1工作在模式2,自动重装模式

SCON=0x50;     //串口工作在模式1

TH1=256-jingzhen/(botelv*12*16);  //计算定时器重装值

TL1=256-jingzhen/(botelv*12*16);

PCON|=0x80;    //串口波特率加倍

ES=1;         //串行中断允许

TR1=1;        //启动定时器1

REN=1;        //允许接收 

EA=1;         //允许中断

}


void send(unsigned char d)          //发送一个字节的数据,形参d即为待发送数据。

{


SBUF=d; //将数据写入到串口缓冲

sending=1;     //设置发送标志

while(sending); //等待发送完毕

}


void sendc(unsigned char * pd)

{

while((*pd)!='') //发送字符串,直到遇到0才结束

{

  send(*pd); //发送一个字符

  pd++;  //移动到下一个字符

}

}


void main()

{

    init();

    while(1)

    {

        if(S4==0)

        {

            delay(20);

            if(!S4)

            {

                while(!S4);           

                sendc(zifuchuan);

            }

        }

    }

}


void uart(void) interrupt 4         //串口发送中断

{

if(RI)    //收到数据

{

  RI=0;   //清中断请求

}

else      //发送完一字节数据

{

  TI=0;

  sending=0;  //清正在发送标志

}

}


关键字:51单片机  串口  发送字符 引用地址:51单片机串口发送字符事例

上一篇:基于51单片机的可调PWM波程序
下一篇:单片机风扇模拟控制系统

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved