S3F825A串口通信C语言编程示例
文章来源: DAMI的QQ空间   更新时间: 2008-10-12

;点击这里直接下载该示例源码

//本文链接:http://user.qzone.qq.com/361902503/blog/1217917474

//825a串口 C
//***********************dami 2006,9,6************************
//这里实现: 9位异步,可变波特率 (其他就不搞了)
//825a串口通信,有关的寄存器有:P5CONH,UARTCON,INTPND,BRDATA,UDATA ,还有关连
//波特率的寄存器(CLKCON,要有FXX的值).
//825a串口通信模式有四种:
//同步:一个时钟,一个数据
//8位异步 可变波特率
//9位异步 FXX/16
//9位异步 可变波特率
//825a校验和,发送TB8,接收RB8,用户计算校验和,处理校验和.
//如果用户不用校验,TB8,RB8可以作为一般的数据位传送.
//多机通信:有专用多机通信位

#include


#include
#define uchar unsigned char
#define uint unsigned int
#definetestbit(var,bit)((var)&(1<<(bit)))//位测试
#definesetbit(var,bit)((var)|=(1<<(bit)))//位置1
#defineclrbit(var,bit)((var)&=~(1<<(bit)))//位清零 clrbit(p3,1);就是了
void delay();
unsigned int i;
     
void main()
{
     
    BTCON = 0xa2;
    CLKCON = 0x98;//时钟控制器不分频
    OSCCON = 0x0;//主从晶体及运行/停止
    IMR = 0X8;
    WTCON = 0x0;
    P5CONH = 0x8c;//P3CONL.7~5:011,P3CONL.4~2=001
    BRDATA = 0x19;//4M 晶体频率不分频. 波特率9600
    UARTCON = 0xd2;//模式:11,MCE:0,TB8,RB8:00,RIE:接收中断允许,TIE发送中断不允许
     
    //__disable_interrupt();
    __enable_interrupt();
    //while(1)
    //{
    UDATA = 0x55; //发送数据就直接写UART就行
    delay();
    UDATA = 0x33; //发送数据,注意延时要够啊.用中断方式也行.我嫌麻烦就不搞了
    delay();
     
    //}
     __enable_interrupt();
     while(1)
     {
      __no_operation();
       __no_operation();
     }
   
}
// if(testbit(P0,3)==1)
// {
// setbit(P3,1);
// //delay();
// clrbit(P3,1);
// while(!testbit(P0,3));
// }
// while(1);
//}
void delay()
{
  unsigned int i;
  for (i=1000;i>0;i--);
}

#pragma vector=__UART_RX_vector
__interrupt void UART_RX_interrupt( void )
{
  unsigned char rxdatabuf;
  rxdatabuf = UDATA;
  rxdatabuf++;
  UDATA = rxdatabuf;
  delay();
  INTPND = 0x0;
}
相关备注: http://user.qzone.qq.com/361902503/blog/1217917474
 
三星单片机开发网首页