查看: 1419|回复: 0
打印 上一主题 下一主题

串口12演示

[复制链接]
跳转到指定楼层
沙发
发表于 2015-5-6 09:43:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*--------------------------------------
芯片    :STC12C5A60S2
晶振    :11.0592MHZ
开发平台:KEIL
功能    :串口一,串口二,同步发送接收数据(采用中断方式,波特率发生器产生波特率)
波特率  :9600BPS
日期    :11.5.19
注意    :下载完程序后请复位系统!!(切记!)
--------------------------------------*/

#include "STC12C5A60S2.h"
#define  uchar unsigned char
#define  uint  unsigned int

uchar dat1=0,dat2=0;


void init ()
{

        TMOD = 0x20;                                  //定时器1产生波特率

        SCON = 0x50;                                 //方式1,8位数据,波特率可变

        TH1  = TL1 = 0xfd;                         //波特率 9600
       
        S2CON = 0x50;                                 //方式1,八位数据,可变波特率

        BRT   = 0XFD;                                  //设置波特率9600

        TR1  = 1;                                          //启动定时器产生波特率       

        AUXR  = 0x10;                                 //启动波特率发生器

        IP   = 0x00;                                 //优先级默认

        EA    = 1;                                  //开总中断

        ES = 1;                                         //开串口1中断
       
        IE2   = 0x01;                                 //开串口2中断

}

/*--------------------------------------
        串口一 发送一个字符
--------------------------------------*/

void  uart1_txd(uchar x)
{
        SBUF = x;
}

/*--------------------------------------
         串口一 发送接收中断函数
--------------------------------------*/

void uart_isr()  interrupt 4
{
        if( RI ) RI = 0;
       
        dat1 = SBUF;
       
        if( TI ) TI = 0;
}

/*--------------------------------------
      串口二   发送一个字符
--------------------------------------*/
void  uart2_txd(uchar x)
{
        S2BUF = x;
}

/*--------------------------------------
      串口二    发送接收中断函数
--------------------------------------*/
void uart2_isr()  interrupt 8
{
        if( S2CON & 0x01 ){

                S2CON &= ~0x01;

                dat2    = S2BUF;
                               
                                   }

        if( S2CON & 0x02 ){
               
                S2CON &= ~0x02;
                       
                                    }

}

/*--------------------------------------
          延时函数
--------------------------------------*/
void delay ( uint t )
{
        uint i,j;

        for( i=0; i<t; i++)

        for( j=0; j<250; j++);
}


/*--------------------------------------
          主函数
--------------------------------------*/
void main()
{
        uchar tab[]={"liguangyang!"};

        uchar i,j=12;

        uchar *p;

        init();

        p=tab;

        for(i=0;i<13;i++){

        j--;

        uart1_txd(p[j]);

        uart2_txd(p);

        delay(150);          }


        while(1){
               
                P0=dat1;

                delay(500);

                P0=dat2;

                delay(500);

                        }

}





















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?加入因仑

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表