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

標(biāo)題: 單片機(jī)程序 只能切換LED1和LED2的狀態(tài),不能同時(shí)亮或同時(shí)滅 不知問題出在哪里? [打印本頁]

作者: 木示    時(shí)間: 2023-3-6 14:59
標(biāo)題: 單片機(jī)程序 只能切換LED1和LED2的狀態(tài),不能同時(shí)亮或同時(shí)滅 不知問題出在哪里?
本例程是,STC官方的例程,學(xué)習(xí)過后,欲將其改造:通過按鍵改flag次數(shù),然后將flag次數(shù),寫進(jìn)EEPROM,再讀取出來,相對應(yīng)的LED狀態(tài)隨著flag的改變而改變。現(xiàn)在問題是:只能切換LED1和LED2的狀態(tài),不能同時(shí)亮或同時(shí)滅。不知問題出在哪里?請高手們不吝指導(dǎo)一下!謝謝!

    #include "STC8G.h"
    #include "intrins.h"

    #define FOSC        11059200UL
    #define BRT         (65536 - FOSC / 115200 / 4)

    #define uchar unsigned char   
    #define uint unsigned int
    //sfr     P0M1    =   0x93;
    //sfr     P0M0    =   0x94;
    //sfr     P1M1    =   0x91;
    //sfr     P1M0    =   0x92;
    //sfr     P2M1    =   0x95;
    //sfr     P2M0    =   0x96;
    //sfr     P3M1    =   0xb1;
    //sfr     P3M0    =   0xb2;
    //sfr     P4M1    =   0xb3;
    //sfr     P4M0    =   0xb4;
    //sfr     P5M1    =   0xc9;
    //sfr     P5M0    =   0xca;

    //sfr     AUXR    =   0x8e;
    //sfr     T2H     =   0xd6;
    //sfr     T2L     =   0xd7;

    //sfr     IAP_DATA    =   0xC2;
    //sfr     IAP_ADDRH   =   0xC3;
    //sfr     IAP_ADDRL   =   0xC4;
    //sfr     IAP_CMD     =   0xC5;
    //sfr     IAP_TRIG    =   0xC6;
    //sfr     IAP_CONTR   =   0xC7;
    //sfr     IAP_TPS     =   0xF5;

    //void UartInit()
    //{
    //    SCON = 0x5a;
    //    T2L = BRT;
    //    T2H = BRT >> 8;
    //    AUXR = 0x15;
    //}

    //void UartSend(char dat)
    //{
    //    while (!TI);
    //    TI = 0;
    //    SBUF = dat;
    //}
    sbit LED1=P5^4;
    sbit LED2=P3^3;
    sbit KEY=P3^2;
    //          uchar V;
    char flag=1;

    void IapIdle()
    {
            EA=0;                                          //禁止中斷
        IAP_CONTR = 0;                              //關(guān)閉IAP功能
        IAP_CMD = 0;                                //清除命令寄存器
        IAP_TRIG = 0;                               //清除觸發(fā)寄存器
        IAP_ADDRH = 0x80;                           //將地址設(shè)置到非IAP區(qū)域
        IAP_ADDRL = 0;
            EA=0;                                         //重啟中斷
    }

    char IapRead(int addr)
    {
        char dat;
    EA=0;
        IAP_CONTR = 0x80;                           //使能IAP
        IAP_TPS = 12;                               //設(shè)置等待參數(shù)12MHz
        IAP_CMD = 1;                                //設(shè)置IAP讀命令
        IAP_ADDRL = addr;                           //設(shè)置IAP低地址
        IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
        IAP_TRIG = 0x5a;                            //寫觸發(fā)命令(0x5a)
        IAP_TRIG = 0xa5;                            //寫觸發(fā)命令(0xa5)
        _nop_();
        dat = IAP_DATA;                             //讀IAP數(shù)據(jù)
        IapIdle();                                  //關(guān)閉IAP功能
            EA=1;
        return dat;

    }

    void IapProgram(int addr, char dat)
    {
            EA=0;
        IAP_CONTR = 0x80;                           //使能IAP
        IAP_TPS = 12;                               //設(shè)置等待參數(shù)12MHz
        IAP_CMD = 2;                                //設(shè)置IAP寫命令
        IAP_ADDRL = addr;                           //設(shè)置IAP低地址
        IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
        IAP_DATA = dat;                             //寫IAP數(shù)據(jù)
        IAP_TRIG = 0x5a;                            //寫觸發(fā)命令(0x5a)
        IAP_TRIG = 0xa5;                            //寫觸發(fā)命令(0xa5)
        _nop_();
        IapIdle();                                  //關(guān)閉IAP功能
            EA=1;
    }

    void IapErase(int addr)
    {
            EA=0;
        IAP_CONTR = 0x80;                           //使能IAP
        IAP_TPS = 12;                               //設(shè)置等待參數(shù)12MHz
        IAP_CMD = 3;                                //設(shè)置IAP擦除命令
        IAP_ADDRL = addr;                           //設(shè)置IAP低地址
        IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
        IAP_TRIG = 0x5a;                            //寫觸發(fā)命令(0x5a)
        IAP_TRIG = 0xa5;                            //寫觸發(fā)命令(0xa5)
        _nop_();                                    //
        IapIdle();                                  //關(guān)閉IAP功能
            EA=1;
    }

    void main(void)
    {
      uchar V;
        P0M0 = 0x00;
        P0M1 = 0x00;
        P1M0 = 0x00;
        P1M1 = 0x00;
        P2M0 = 0x00;
        P2M1 = 0x00;
        P3M0 = 0x00;
        P3M1 = 0x00;
        P4M0 = 0x00;
        P4M1 = 0x00;
        P5M0 = 0x00;
        P5M1 = 0x00;

    //    UartInit();
    //    IapErase(0x0400);
    //    UartSend(IapRead(0x0400));
    //        P5=IapRead(0x0400);
    //    IapProgram(0x0400, 0x12);
    //    UartSend(IapRead(0x0400));
    //P3=IapRead(0x0400);
                  IT0 = 0;
            EX0 = 1;
            EA = 1;
               
          V = IapRead(0x0400);             // 開機(jī)讀取EEPROM區(qū)數(shù)據(jù),還原關(guān)電前LED的亮滅狀況
            IapErase(0x0400);                 //擦除
                                 
             while(1)            
                                    
            {
                           IapProgram(0x0400, V);      //寫入     
                            V= IapRead(0x0400);         //讀取                        

               
                                          
          for(V=flag;flag<=4;flag++)
             {
                     if(V==1)
                            {
                                     LED1=0;LED2=1;
                                     IapErase(0x0400);          // 擦除
                                     IapProgram(0x0400, 1);     //寫入
                                        }
                        if(V== 2)
                            {
                                                LED1=1; LED2=0;
                                                IapErase(0x0400);          // 擦除
                                               IapProgram(0x0400, 2);     //寫入
                                                    }
                        if(V== 3)
                                 {
                                          LED1=0; LED2=0;
                                           IapErase(0x0400);          // 擦除
                                           IapProgram(0x0400, 3);     //寫入
                                                            }
                      if(V== 4)
                              {
                                 LED1=1; LED2=1;
                                  IapErase(0x0400);          // 擦除
                                 IapProgram(0x0400, 4);    //寫入
                                                            }
    }
                     }
            
                            }
    //--------------中斷函數(shù)--------------
               
                            void int0_process() interrupt 0
    {

            if (KEY==1)  
        {  
                  
           if(flag<=4)flag++;
           else flag=1;
    //                         _nop_();
    //                         _nop_();
    //                         _nop_();
    //                         _nop_();

            
        }     



0dd052a361c499db25608fbb65b5c09.jpg (234.06 KB, 下載次數(shù): 151)

0dd052a361c499db25608fbb65b5c09.jpg

作者: lkc8210    時(shí)間: 2023-3-6 17:38
EEPROM有擦寫壽命,大概100k
你把擦寫放到while(1)中,估計(jì)一下子就爆了
建議當(dāng)V有改變時(shí)才擦寫EEPROM
作者: wulin    時(shí)間: 2023-3-6 20:25
V是隨時(shí)變化的變量,只有斷電保存才有實(shí)際意義。如此頻繁保存,要不了幾個(gè)時(shí)辰,單片機(jī)就廢了。
作者: 君工創(chuàng)    時(shí)間: 2023-3-6 23:56
進(jìn)入while(1)之后就是不斷擦除、寫入,用意何在?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 中文视频在线 | 一区二区三区免费观看 | 国产高清精品在线 | 欧美精品一区二区三区在线播放 | 亚洲成人av在线播放 | 特黄色一级毛片 | 麻豆亚洲 | 人人干免费| 91大神xh98xh系列全部 | 插插插干干干 | 欧美中文字幕一区 | 久久久毛片 | 日韩视频精品在线 | 四虎影视1304t| 欧美极品在线视频 | 99精品免费在线观看 | 欧美激情五月 | 亚洲人在线 | 国内精品视频在线 | 国产精品久久精品 | 91精品国产91久久久久久丝袜 | 一区二区三区视频 | 亚洲精品9999久久久久 | 欧美大片在线观看 | 久久99久久99 | 91一区二区在线观看 | 夜夜草天天草 | 日韩一区二区三区在线观看视频 | 亚洲av毛片 | 久久成人精品视频 | 精品久久精品 | 亚洲天堂一区二区 | 国产激情视频在线 | 成人在线免费视频 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 黄免费观看视频 | 91香蕉嫩草| 日韩久久精品视频 | 超碰91在线 | 午夜精品久久久久久久99黑人 | 欧美久久不卡 |