| /******************************************************************** 汇诚科技
 
 实现功能:STC12C5A60S2单片机之双串口通信
 使用芯片:STC12C5A60S2
 晶振:11.0592MHZ
 波特率:9600
 编译环境:Keil
 作者:zhangxinchun
 网站:www.ourhc.cn
 淘宝店:
 汇诚科技 http://ourhc.taobao.com
 郑兴电子直销部 http://shop68451856.taobao.com
 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
 
 功能    :串口一,串口二,同步发送接收数据(采用中断方式,波特率发生器产生波特率)
 波特率  :串口一,4800  串口二,57600
 日期    :11.5.19
 注意    :下载完程序后请复位系统!!(切记!)
 *********************************************************************/
 #include "STC12C5A60S2.h"  //库文件
 #define uchar unsigned char//宏定义无符号字符型
 #define uint unsigned int  //宏定义无符号整型
 /********************************************************************
 初始定义
 *********************************************************************/
 uchar dat1=0,dat2=0;
 uchar tab[]={"www.ourhc.cn"};
 /********************************************************************
 串口初始化
 *********************************************************************/
 void init ()
 {
 TMOD = 0x20;                                  //定时器1产生波特率
 SCON = 0x50;                                 //方式1,8位数据,波特率可变
 TH1  = TL1 = 0xfa;                         //波特率 4800
 S2CON = 0x50;                                 //方式1,八位数据,可变波特率
 BRT   = 0XFD;                                  //设置波特率9600
 TR1  = 1;                                          //启动定时器产生波特率
 AUXR  = 0x10;                                 //启动波特率发生器
 
 AUXR |= 0x08;                //使能波特率倍速位S2SMOD
 S2CON = 0x50;                //8位数据,可变波特率
 BRT = 0xFF;                //设定独立波特率发生器重装值
 AUXR &= 0xfb;                //独立波特率发生器时钟为Fosc/12,即12T
 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 i;
 uchar *p;
 init();
 p=tab;
 for(i=0;i<13;i++)
 {
 uart1_txd(p);
 uart2_txd(p);
 delay(150);
 }
 while(1)
 {
 P0=dat1;
 delay(500);
 P0=dat2;
 delay(500);
 }
 }
 /********************************************************************
 结束
 *********************************************************************/】
 
 
 
 
 |