久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機串口1打印程序 可以打印3個十六位的變量 波特率9600 [打印本頁]

作者: 人人學會單片機    時間: 2021-1-16 19:15
標題: 單片機串口1打印程序 可以打印3個十六位的變量 波特率9600
WQX開發板串口1打印程序.zip (7.76 MB, 下載次數: 38)
//*************************************************************************************************************************************

//使用本程序打印顯示的變量,需按照1、2、3、4進行設置,不同單片機頭文件不同,根據需要選擇系統時鐘頻率

//使用STC-ISP軟件的串口助手顯示,波特率9600,需要自動發送一個字符。文本模式接收顯示 0~65535

//如果需要軟件自動復位,請根據108、109行選擇。

//*************************************************************************************************************************************
typedef unsigned char         u8;
typedef unsigned short         u16;

#include <STC8.H>                                                //-串-口-打-印-第1步:選擇頭文件,STC8單片機                                                                                       
//#include <STC15.H>                                                //-串-口-打-印-第1步:選擇頭文件,STC15單片機                                                
//#include <STC89.H>                                                //-串-口-打-印-第1步:選擇頭文件,STC89單片機        

//#define FOSC 11059200UL                                        //-串-口-打-印-第2步:設置系統頻率,11.0592M
//#define FOSC 12000000UL                                        //-串-口-打-印-第2步:設置系統頻率,12M
//#define FOSC 24000000UL                                        //-串-口-打-印-第2步:設置系統頻率,24M
#define FOSC 30000000UL                                        //-串-口-打-印-第2步:設置系統頻率,30M
#define BRT (65536-FOSC/9600/4/12)                //確定波特率的定時器初值,STC15、STC8單片機
#define BRT89 (65536-FOSC/9600/32)                //確定波特率的定時器初值,STC89單片機

u16 xdata Uart1_Byte[3]={0,0xffff,0x55};//-串-口-打-印-第4步:需要打印的變量
bit Uart1_Flag=0;                                                //-串-口-打-印-第4步:這個標志位寫1 就開始打印

//*************************************************************************************************************************************
//串口初始化,根據設計需要,選擇定時器1或者定時器2做波特率發生器
//*************************************************************************************************************************************
void Uart1_Init()
{
        /*
        RCAP2L=BRT89;                                                //-串-口-打-印-第3步:STC89單片機
        RCAP2H=BRT89>>8;                                        //-串-口-打-印-第3步:STC89單片機
        T2CON=0x34;                                                        //-串-口-打-印-第3步:STC89單片機 RCLK、TCLK、TR2都置1
        //*/
        
        //以下代碼的定時器1做波特率源
        AUXR &= 0xBF;                                                //-串-口-打-印-第3步:STC15、STC8單片機 定時器1時鐘為Fosc/12,即12T
        AUXR &= 0xFE;                                                //-串-口-打-印-第3步:STC15、STC8單片機 串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                                                //-串-口-打-印-第3步:STC15、STC8單片機 設定定時器1為16位自動重裝方式
        TL1 = BRT;                                                        //-串-口-打-印-第3步:STC15、STC8單片機 設定定時初值
        TH1 = BRT>>8;                                                //-串-口-打-印-第3步:STC15、STC8單片機 設定定時初值
        TR1 = 1;                                                        //-串-口-打-印-第3步:STC15、STC8單片機 啟動定時器1
        //*/
        
        /*//以下代碼的定時器2做波特率源
        AUXR |= 0x01;                                                //-串-口-打-印-第3步:STC15、STC8單片機 串口1選擇定時器2為波特率發生器
        AUXR &= 0xFB;                                                //-串-口-打-印-第3步:STC15、STC8單片機 定時器2時鐘為Fosc/12,即12T
        T2L = BRT;                                                        //-串-口-打-印-第3步:STC15、STC8單片機 設定定時初值
        T2H = BRT>>8;                                                //-串-口-打-印-第3步:STC15、STC8單片機 設定定時初值
        AUXR |= 0x10;                                                //-串-口-打-印-第3步:STC15、STC8單片機 啟動定時器2
        //*/
        
        SCON = 0x50;                                                //8位數據,可變波特率
        ES = 1;                                                                //串口1 允許
        EA=1;
}

//*************************************************************************************************************************************
//串口發送函數。主函數調用,或者串口發送完中斷后馬上調用
//*************************************************************************************************************************************
void Uart1_Up_Data_Drive()
{
        static u8 xdata count=0;
        if(Uart1_Flag)                                                //標志允許,發送一個字節
        {
                Uart1_Flag=0;                                        //標志位翻轉,只允許發送一個字節
                count++;                                                //字節編號增加。
                switch(count)
                {
                        case 1 : SBUF='\r';break;                                                                // 回車
                        case 2 : SBUF='\n';break;                                                                // 換行
                        case 3 : SBUF=0x30+Uart1_Byte[0]/10000;break;                        // 字節0 萬位
                        case 4 : SBUF=0x30+Uart1_Byte[0]%10000/1000;break;                // 字節0 千位
                        case 5 : SBUF=0x30+Uart1_Byte[0]%10000%1000/100;break;        // 字節0 百位
                        case 6 : SBUF=0x30+Uart1_Byte[0]%10000%1000%100/10;break;//字節0 十位
                        case 7 : SBUF=0x30+Uart1_Byte[0]%10000%1000%100%10;break;//字節0 個位
                        case 8 : SBUF=' ';break;                                                                // 空格
                        case 9 : SBUF=0x30+Uart1_Byte[1]/10000;break;                        // 字節1 萬位
                        case 10 :SBUF=0x30+Uart1_Byte[1]%10000/1000;break;                // 字節1 千位
                        case 11 :SBUF=0x30+Uart1_Byte[1]%10000%1000/100;break;        // 字節1 百位
                        case 12 :SBUF=0x30+Uart1_Byte[1]%10000%1000%100/10;break;//字節1 十位
                        case 13 :SBUF=0x30+Uart1_Byte[1]%10000%1000%100%10;break;//字節1 個位
                        case 14 :SBUF=' ';break;                                                                // 空格
                        case 15 :SBUF=0x30+Uart1_Byte[2]/10000;break;                        // 字節2 萬位
                        case 16 :SBUF=0x30+Uart1_Byte[2]%10000/1000;break;                // 字節2 千位
                        case 17 :SBUF=0x30+Uart1_Byte[2]%10000%1000/100;break;        // 字節2 百位
                        case 18 :SBUF=0x30+Uart1_Byte[2]%10000%1000%100/10;break;//字節2 十位
                        case 19 :SBUF=0x30+Uart1_Byte[2]%10000%1000%100%10;break;//字節2 個位
                        case 20 :count=0;break;//最后一步 沒有發送字節,串口TI不會置1,所以不再發送
                }
        }
}
//*************************************************************************************************************************************
//串口中斷,接收一個字節,馬上發送N個字節,發送數組顯示到電腦
//*************************************************************************************************************************************
void Uart1_Routine() interrupt 4
{
        static char Uart1_ser_n=0;                        //用于接收計數
        if(RI)                                                                //如果接收到一個字節
        {
                RI=0;                                                        //標志位清除
                Uart1_Flag=1;                                        //串口發送允許
                if(SBUF==0x7f)                                        //最低波特率9600,最高波特率9600,判斷連續多個0x7f
                {
                        Uart1_ser_n++;                                //判斷連續多個0x7f
                        if(Uart1_ser_n>=10)                        //判斷連續多個0x7f
                        {
                                Uart1_ser_n=0;                        //清0
                                IAP_CONTR|=0xe0;                //執行自動軟復位,可以做調試用,STC12、STC15、STC8
                                //ISP_CONTR|=0xe0;                //執行自動軟復位,可以做調試用,STC89
                        }
                }
        }
        if(TI)                                                                //如果上一個字節發送完成了        
        {
                TI=0;                                                        //標志位清除
                Uart1_Flag=1;                                        //串口發送允許
                Uart1_Up_Data_Drive();                        //執行串口發送下一個字節
        }
}

//*************************************************************************************************************************************

//*************************************************************************************************************************************
void main()
{
        Uart1_Init();
        while(1)
        {
                Uart1_Up_Data_Drive();
        }
}



作者: 人人學會單片機    時間: 2021-1-19 01:01
這是打印16進制的效果,我分享的程序只能打印十進制0~65535  

作者: 山外天驚天外山    時間: 2021-2-8 19:08
終于找到一份 不需要死等的串口打印程序了  謝謝分享 WQX-15




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产午夜精品一区二区三区 | 韩国久久 | 日本免费在线观看视频 | 理论片午午伦夜理片影院 | 欧美亚洲视频在线观看 | 免费看91| jizz18国产 | 久久久久99 | 男女羞羞视频在线免费观看 | 欧美黄色一区 | 亚洲国产精品va在线看黑人 | 久久午夜视频 | 成人精品一区二区三区中文字幕 | 国产成人高清成人av片在线看 | 久久成人久久 | 天天色天天色 | а天堂中文最新一区二区三区 | 日本一区二区三区四区 | 国产欧美久久一区二区三区 | 中文字幕综合 | 日本高清精品 | 日韩在线大片 | 欧美一级在线免费 | 一区二区三区视频在线观看 | 最新中文字幕 | 精品一区二区三区四区外站 | 亚洲国产aⅴ精品一区二区 免费观看av | 国产区视频在线观看 | 亚洲精品9999 | 中文字幕1区2区 | 中文字幕第一页在线 | 国产精品日韩在线观看一区二区 | 国产精品a一区二区三区网址 | 欧美日本韩国一区二区 | 亚洲视频免费观看 | 久久亚洲国产 | 国产精品一区二区在线播放 | 亚洲视频在线观看免费 | 久久久男人的天堂 | 欧美精品1区 | 国产成人jvid在线播放 |