×
单片机 > 单片机程序设计 > 详情

C8051F330串口UART0示例程序

发布时间:2020-09-02 发布时间:
|

//****************************************************************************
// 功能:C8051F330串口UART0示例程序
//****************************************************************************
//使用F330,串口为P0.4(TX0),P0.5(RX0);
//-----------------------------------------------------------------------------
// UART0.c
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// 所包含的头文件
//------------------------------------------------------------------------
#include
//#include

//-----------------------------------------------------------------------------
// 常量定义
//-----------------------------------------------------------------------------
// 系统工作频率
#define SYSCLK 24500000
// 串口工作波特率
#define BAUDRATE 9600

//-----------------------------------------------------------------------------
// 功能函数
//-----------------------------------------------------------------------------
void SYSCLK_Init(void);
void PORT_Init(void);
void UART0_Init(void);
void Uart0_Transmit(unsigned char tmp);
void sendstr(unsigned char*tmp);
unsigned char temp ;
void delay_1ms()
{
    unsigned int j ;
    for(j=3060;j>0;j--);
}
void delay_ms(unsigned int i)
{
    for(;i>0;i--)delay_1ms();
}
//-----------------------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------------------

void main(void)
{
    PCA0MD&=~0x40 ;
    // 禁止看门狗
    PORT_Init();
    // 初始化端口I/O
    SYSCLK_Init();
    // 初始化系统时钟
    UART0_Init();
    // 串口初始化
    EA=1 ;
    ES0=1 ;
    while(1)
    {
        delay_ms(1000);
        sendstr("Welcome to July's Hut! ");
        //Uart0_Transmit(0x00);
    }
}

//-----------------------------------------------------------------------------
// 端口初始化
//-----------------------------------------------------------------------------
//
// 配置交叉开关和通用IO
//
// P0.4 - UART TX0
// P0.5 - UART RX0

void PORT_Init(void)
{
    P0MDOUT|=0x10 ;
    // 使能 UTX 为推挽输出
    XBR0=0x01 ;
    // 使能 UART0 占用 P0.4(TXD) 和 P0.5(RXD)
    XBR1=0x40 ;
    //使能交叉开关
}

//-----------------------------------------------------------------------------
// 系统时钟初始化
//-----------------------------------------------------------------------------
void SYSCLK_Init(void)
{
    OSCICN|=0x03 ;
    // 配置内部振荡器的的最大频率
    RSTSRC=0x04 ;
    // 使能始终丢失检测寄存器
}

//-----------------------------------------------------------------------------
// 串口UART0初始化
//-----------------------------------------------------------------------------
void UART0_Init(void)
{
    SCON0=0x10 ;
    if(SYSCLK/BAUDRATE/2/256<1)
    {
        TH1=-(SYSCLK/BAUDRATE/2);
        CKCON&=~0x0B ;
        CKCON|=0x08 ;
    }
    else if(SYSCLK/BAUDRATE/2/256<4)
    {
        TH1=-(SYSCLK/BAUDRATE/2/4);
        CKCON&=~0x0B ;
        CKCON|=0x09 ;
    }
    else if(SYSCLK/BAUDRATE/2/256<12)
    {
        TH1=-(SYSCLK/BAUDRATE/2/12);
        CKCON&=~0x0B ;
    }
    else
    {
        TH1=-(SYSCLK/BAUDRATE/2/48);
        CKCON&=~0x0B ;
        CKCON|=0x02 ;
    }
   
    TL1=TH1 ;
    TMOD&=~0xf0 ;
    TMOD|=0x20 ;
    TR1=1 ;
    // TI0 = 1;
}
//-----------------------------------------------------------
// 串口UART0中断
//-----------------------------------------------------------
//中断向量0x0023
void UATR0_ISR(void)interrupt 4
{
    //Rx、Tx共用中断
    //接收中断
    if(!TI0)
    {
        RI0=0 ;
        temp=SBUF0 ;
        Uart0_Transmit(temp);
    }
    //发送中断
    else TI0=0 ;
}
//-----------------------------------------------------------
// 串口UART0发送
//-----------------------------------------------------------
void Uart0_Transmit(unsigned char tmp)
{
    ES0=0 ;
    //关UART0中断
    EA=0 ;
    //关全局中断
    SBUF0=tmp ;
    while(TI0==0);
    //TI0=0 ;
    ES0=1 ;
    //开UART0中断
    EA=1 ;
    //开全局中断
   
}
//-----------------------------------------------------------
// 发送字符串
//-----------------------------------------------------------
void sendstr(unsigned char*tmp)
{
    while(*tmp)
    {
        Uart0_Transmit(*tmp++);
    }
}

关键字:C8051F330  串口  UART0 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会