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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1691|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)程序 只能切換LED1和LED2的狀態(tài),不能同時亮或同時滅 不知問題出在哪里?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:706724 發(fā)表于 2023-3-6 14:59 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本例程是,STC官方的例程,學(xué)習(xí)過后,欲將其改造:通過按鍵改flag次數(shù),然后將flag次數(shù),寫進(jìn)EEPROM,再讀取出來,相對應(yīng)的LED狀態(tài)隨著flag的改變而改變。現(xiàn)在問題是:只能切換LED1和LED2的狀態(tài),不能同時亮或同時滅。不知問題出在哪里?請高手們不吝指導(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
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2023-3-6 17:38 | 只看該作者
EEPROM有擦寫壽命,大概100k
你把擦寫放到while(1)中,估計一下子就爆了
建議當(dāng)V有改變時才擦寫EEPROM
回復(fù)

使用道具 舉報

板凳
ID:213173 發(fā)表于 2023-3-6 20:25 | 只看該作者
V是隨時變化的變量,只有斷電保存才有實際意義。如此頻繁保存,要不了幾個時辰,單片機(jī)就廢了。
回復(fù)

使用道具 舉報

地板
ID:965189 發(fā)表于 2023-3-6 23:56 | 只看該作者
進(jìn)入while(1)之后就是不斷擦除、寫入,用意何在?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久软件 | 欧美一级特黄aaa大片在线观看 | 成人在线播放网站 | 91中文| av片网| 久久精品网 | 日韩在线资源 | 高清成人av| 久久精品国产一区 | 欧美一区在线视频 | 久热精品在线 | a级黄色片在线观看 | 国产精品有限公司 | av在线天堂 | 日韩网站免费观看 | 二区在线观看 | 亚洲精品一 | 91久久久久久 | 国产精品视频观看 | 久久国产精品一区二区三区 | 国产精品视频久久久久久 | 国产免费一区 | 亚洲在线视频 | 一区二区在线不卡 | 日日夜夜天天 | 久久国产精品偷 | 久久一二区 | 老司机深夜福利网站 | 全免费a级毛片免费看视频免费下 | 国产精品我不卡 | 91精品无人区卡一卡二卡三 | 欧美在线观看一区 | 99久久99久久精品国产片果冰 | 欧美视频一区二区三区 | 欧美成人激情 | 久久精品国产一区 | 日本黄色一级片视频 | 91av在线看 | 久久久久国产一区二区三区四区 | 久久天天躁狠狠躁夜夜躁2014 | 91免费高清视频 |