新聞中心

        C8051F330串口UART0示例程序

        作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏

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

        本文引用地址:http://www.104case.com/article/201611/320381.htm

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

        //-----------------------------------------------------------------------------
        // 常量定義
        //-----------------------------------------------------------------------------
        // 系統(tǒng)工作頻率
        #define SYSCLK 24500000
        // 串口工作波特率
        #define BAUDRATE 9600

        //-----------------------------------------------------------------------------
        // 功能函數(shù)
        //-----------------------------------------------------------------------------
        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();
        // 初始化系統(tǒng)時(shí)鐘
        UART0_Init();
        // 串口初始化
        EA=1 ;
        ES0=1 ;
        while(1)
        {
        delay_ms(1000);
        sendstr("Welcome to Julys Hut!");
        //Uart0_Transmit(0x00);
        }
        }

        //-----------------------------------------------------------------------------
        // 端口初始化
        //-----------------------------------------------------------------------------
        //
        // 配置交叉開關(guān)和通用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 ;
        //使能交叉開關(guān)
        }

        //-----------------------------------------------------------------------------
        // 系統(tǒng)時(shí)鐘初始化
        //-----------------------------------------------------------------------------
        void SYSCLK_Init(void)
        {
        OSCICN|=0x03 ;
        // 配置內(nèi)部振蕩器的的最大頻率
        RSTSRC=0x04 ;
        // 使能始終丟失檢測(cè)寄存器
        }

        //-----------------------------------------------------------------------------
        // 串口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);
        }
        //發(fā)送中斷
        else TI0=0 ;
        }
        //-----------------------------------------------------------
        // 串口UART0發(fā)送
        //-----------------------------------------------------------
        void Uart0_Transmit(unsigned char tmp)
        {
        ES0=0 ;
        //關(guān)UART0中斷
        EA=0 ;
        //關(guān)全局中斷
        SBUF0=tmp ;
        while(TI0==0);
        //TI0=0 ;
        ES0=1 ;
        //開UART0中斷
        EA=1 ;
        //開全局中斷

        }
        //-----------------------------------------------------------
        // 發(fā)送字符串
        //-----------------------------------------------------------
        void sendstr(unsigned char*tmp)
        {
        while(*tmp)
        {
        Uart0_Transmit(*tmp++);
        }
        }



        關(guān)鍵詞: C8051F330串口UART

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 平南县| 龙口市| 加查县| 微博| 育儿| 秀山| 盐源县| 台东县| 全州县| 车险| 北川| 三门县| 肇庆市| 西昌市| 泽库县| 内丘县| 兴化市| 乾安县| 芦溪县| 固镇县| 沂水县| 盐城市| 镇沅| 壤塘县| 东安县| 太湖县| 宁蒗| 黎川县| 甘德县| 赤壁市| 甘南县| 宣汉县| 芮城县| 阳西县| 赤峰市| 许昌市| 海原县| 来安县| 英德市| 库车县| 北辰区|