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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4025|回復: 2
打印 上一主題 下一主題
收起左側

單片機串口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();
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:390416 發表于 2021-1-19 01:01 | 只看該作者
這是打印16進制的效果,我分享的程序只能打印十進制0~65535  
回復

使用道具 舉報

板凳
ID:883622 發表于 2021-2-8 19:08 | 只看該作者
終于找到一份 不需要死等的串口打印程序了  謝謝分享 WQX-15
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区精品 | 国产成人精品免费视频大全最热 | 国产美女在线观看 | 国产精品久久久久久久午夜片 | 精品久久电影 | 国产精品乱码一区二三区小蝌蚪 | 一级毛片播放 | 在线观看视频亚洲 | 一区二区三区 在线 | 国产ts人妖一区二区三区 | 麻豆久久久久久久 | 欧美一区二区在线视频 | 天天艹日日干 | 日本又色又爽又黄又高潮 | 欧美色欧美亚洲另类七区 | av网站免费| 国产精品看片 | 国内自拍偷拍视频 | 午夜精品一区二区三区在线观看 | 日本精品一区二区在线观看 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 国产精品毛片久久久久久 | 国产亚洲一区二区三区在线观看 | 伊人久久免费视频 | 欧美黑人又粗大 | 精品三级在线观看 | 天天艹| 精品福利在线 | 国产综合久久 | 国产精品国产馆在线真实露脸 | 日韩www视频| 91精品久久久久 | 天天躁日日躁狠狠的躁天龙影院 | 91麻豆产精品久久久久久夏晴子 | 羞羞视频网站免费观看 | 国产精品视频一二三区 | av毛片免费| 精品欧美色视频网站在线观看 | 日日碰狠狠躁久久躁婷婷 | 久久精品免费 | 91五月婷蜜桃综合 |