中科因仑“3+1”工程特种兵精英论坛

标题: 008、STC12C5A60S2单片机之串口一应用 [打印本页]

作者: 张衍波    时间: 2015-5-5 16:38
标题: 008、STC12C5A60S2单片机之串口一应用
/********************************************************************
                            汇诚科技

实现功能:STC12C5A60S2单片机之串口一应用
使用芯片:STC12C5A60S2
晶振:11.0592MHZ
波特率:9600
编译环境:Keil
作者:zhangxinchun
网站:www.ourhc.cn
淘宝店:
汇诚科技 http://ourhc.taobao.com
郑兴电子直销部 http://shop68451856.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
功能    :串口一收发8位数据。(采用中断方式,T1产生波特率)
其他    :采用查询方式发送稳定,但是接收数据极不稳定由于
官方资料使用的是中断方式,所以建议使用中断方式收发数据。
注意    :下载完程序后请复位系统后运行!(切记!!)
*********************************************************************/
#include "STC12C5A60S2.h"  //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int  //宏定义无符号整型
/********************************************************************
                            初始定义
*********************************************************************/

uchar tab[]={"www.ourhc.cn"};  //程序下载完毕后,连接串口,波特率9600 单片机复位后会自动收到数据
uchar dat=0;
/********************************************************************
                            延时函数
*********************************************************************/
void delay ( uchar t )
{
        uchar i,j;
        for( i=0; i<t; i++)
        for( j=0; j<250; j++);
}

/********************************************************************
                            串口初始化
*********************************************************************/

void init(void)
{
        TMOD = 0x20;                                  //定时器1产生波特率
           SCON = 0x50;                                 //方式2,8位数据,波特率可变
        PCON = 0x00;                                 //不倍增波特率
        AUXR = 0x00;                                 //1T工作方式,不使用波特率发生器
        IP   = 0x00;                                 //优先级默认
        TH1  = TL1 = 0xfd;                         //波特率 9600
        TR1  = 1;                                     //启动定时器产生波特率
        EA   = 1; ES = 1;                         //开总中断,开串口中断
}

/********************************************************************
                            发送一个字符
*********************************************************************/

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

/********************************************************************
                            发送接收中断函数
*********************************************************************/

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

/********************************************************************
                            主函数
*********************************************************************/

void main()
{
        uchar x;
        init();
        for( x=0;x<14;x++ ){
                txd_c(tab[x]);
                delay(200);
                                    }
        while(1) P0 = dat;                       
}
/********************************************************************
                              结束
*********************************************************************/

[attach]2687[/attach]







欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4