新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機一鍵下載相關(guān)

        51單片機一鍵下載相關(guān)

        作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

        void tm0() interrupt 1 using 1
        {
        if(RING)
        {
        if(--RCNT == 0)
        {
        RCNT = 3;//復(fù)位接收波特率計數(shù)器
        if(--RBIT == 0)
        {
        RBUF = RDAT;//保存數(shù)據(jù)到RBUF
        RING = 0;//停止接收
        REND = 1;//接收完成標志
        }
        else
        {
        RDAT >>= 1;
        if(RXB)RDAT |= 0x80; //RX數(shù)據(jù)轉(zhuǎn)移到RX緩沖區(qū)
        }
        }
        }
        else if(!RXB)//是否檢測到低電平
        {
        RING = 1;//設(shè)置開始接收標志
        RCNT = 4;//初始接收波特率計數(shù)器
        RBIT = 9;//初化始接收比特數(shù)(8個數(shù)據(jù)位+1個停止位)
        }

        if(REND)
        {
        REND = 0;
        if(RBUF == 0x7F){ if(++cnt > 30)START=1; } //“0x7F”連續(xù) > 30次,則打開重啟標志
        else cnt = 0;
        }
        }





        ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※



        用STC-ISP V6.03、STC-ISP V4.88默認的最低波特率不同,
        懶得每次修改,
        重新寫了個程序,
        自動適應(yīng)3種最低波特率:1200bps/2400bps/4800bps


        #define uint8unsigned char
        #define uint16 unsigned int
        #include "STC15F104E.H"

        sbit RXB= P3^4;
        sbit Key= P3^1;//自動/手動開關(guān)(根據(jù)需要使用)
        sbit Relay = P3^3;//繼電器
        sbit LED= P3^0;

        uint8 RBUF;//接收緩存
        uint8 RDAT;//接收數(shù)據(jù)暫存
        uint8 RCNT;//接收計數(shù)器
        uint8 RBIT;//接收比特數(shù)
        bitRING;//開始接收標志
        bitREND;//接收完成標志

        uint8 cnt;//重啟計數(shù)器
        bitSTART; //重啟標志

        uint16 cn;//波特率切換計數(shù)器
        uint8Status;//波特率狀態(tài)
        bitNEW;//波特率更新標志

        void YS100ms(uint8 n)
        {
        uint8 a,b,c;
        while(n--)
        {
        for(c=89;c>0;c--)
        for(b=230;b>0;b--)
        for(a=12;a>0;a--);
        }
        }

        void UART_INIT()
        {
        RING = 0;
        REND = 0;
        RCNT = 0;

        cnt = 0;
        cn= 0;
        }

        void main()
        {
        P3M1 = 0x00;
        P3M0 = 0x09;//P3.0、P3.3推挽輸出
        Key= 1;
        Relay= 0;//斷開繼電器
        LED= 0;//關(guān)LED


        TMOD = 0x00;//T0處于16位自動重裝模式
        AUXR = 0x80;//T0工作在1T模式
        TL0 = 0x00;//初始化Timer0和設(shè)定重載值
        TH0 = 0xFA;//默認 2400bps @ 11.0592MHz
        TR0 = 1;
        ET0 = 1;
        PT0 = 1;//提高Timer0的中斷優(yōu)先級
        EA= 1;

        UART_INIT();

        while(1)
        {
        if(START)
        {
        START = 0;
        if(Key)
        {
        ET0 = 0;
        Relay = 1;//繼電器吸合
        LED = 1;
        YS100ms(50);//從『加載HEX』到『提示上電』有5秒
        Relay = 0;
        LED = 0;
        YS100ms(30);
        UART_INIT();
        ET0 = 1;
        }
        }

        if(NEW)
        {
        NEW = 0;
        TR0 = 0;
        if(++Status > 2)Status=0;
        switch(Status)
        {
        case 0:TL0=0x00; TH0=0xFA; // 2400bps @ 11.0592MHz
        //P31=0;P32=1;P35=1;//狀態(tài)指示燈(根據(jù)需要使用)
        break;
        case 1:TL0=0x00; TH0=0xFD; // 4800bps @ 11.0592MHz
        //P31=1;P32=0;P35=1;//狀態(tài)指示燈(根據(jù)需要使用)
        break;
        case 2:TL0=0x00; TH0=0xF4;// 1200bps @ 11.0592MHz
        //P31=1;P32=1;P35=0;//狀態(tài)指示燈(根據(jù)需要使用)
        break;
        }
        UART_INIT();
        TR0 = 1;
        }
        }
        }

        void tm0() interrupt 1
        {
        if(RING)
        {
        if(--RCNT == 0)
        {
        RCNT = 3;//復(fù)位接收波特率計數(shù)器
        if(--RBIT == 0)
        {
        RBUF = RDAT;//保存數(shù)據(jù)到RBUF
        RING = 0;//停止接收
        REND = 1;//接收完成標志
        }
        else
        {
        RDAT >>= 1;
        if(RXB)RDAT |= 0x80; //RX數(shù)據(jù)轉(zhuǎn)移到RX緩沖區(qū)
        }
        }
        }
        else if(!RXB)//是否檢測到低電平
        {
        RING = 1;//設(shè)置開始接收標志
        RCNT = 4;//初始接收波特率計數(shù)器
        RBIT = 9;//初化始接收比特數(shù)(8個數(shù)據(jù)位+1個停止位)
        }

        if(REND)
        {
        REND = 0;
        if(RBUF == 0x7F)
        {
        cnt++;
        if(cnt > 1)cn=0;//“0x7F”連續(xù) > 1,則清切換計數(shù)器
        if(cnt > 100)START=1; //“0x7F”連續(xù) > 100,則打開重啟標志
        }
        else cnt = 0;
        }

        if(++cn>600){ cn=0; NEW=1; }//切換計數(shù)器 > 600,則打開更新標志
        }
        //有一舊時期的STC-ISP_4.88版的引導(dǎo)信號間隔時間有差異( 需要切換計數(shù)器 > 800 ),建議用最新時期的
        最新版本最新版本:

        (原文件名:STC免手動燒寫+邏輯分析儀電路圖(初始版).jpg)


        (原文件名:STC免手動燒寫+邏輯分析儀電路圖(改進版).jpg)


        (原文件名:a.jpg)


        (原文件名:20111229019.jpg)

        上一頁 1 2 3 下一頁

        關(guān)鍵詞: 51單片機一鍵下

        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 达州市| 双江| 临城县| 江陵县| 交口县| 山丹县| 兴安盟| 浦城县| 大邑县| 灵寿县| 万安县| 蒙自县| 铜梁县| 元阳县| 永福县| 淮南市| 鄂尔多斯市| 德化县| 五大连池市| 泰和县| 荃湾区| 横山县| 河源市| 双桥区| 柳河县| 班戈县| 长寿区| 池州市| 牟定县| 和顺县| 黔南| 宿迁市| 社旗县| 奎屯市| 吉安县| 子长县| 定兴县| 北辰区| 新营市| 麦盖提县| 习水县|