欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PIC16F616單片機程序編譯哪里出了問題?

[復制鏈接]
跳轉到指定樓層
樓主
ID:72649 發表于 2023-2-20 15:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "pic.h"
//__CONFIG(INTIO&WDTDIS&BOREN);                        //PICC9.80版本配置字寫法
//__CONFIG(FOSC_INTRCIO&WDTE_OFF&BOREN_ON&MCLRE_ON);                //PICC9.83版本配置字寫法0000   0000  0101
#define __CONFIG(ox0005)                //芯片PIC16F616
/*使用內部RC振蕩器,關閉看門狗,*/

#define L_KEY1 RC3  //E3
#define M_KEY1 RC4  //E2
#define H_KEY1 RC5  //E1

#define JR1_JDQ  RC0
#define JS_JDQ   RC1
#define FMQ      RC2

#define uchar unsigned char                //無符號字符型簡寫成uchar
#define uint unsigned int                //無符號整形簡寫成uint
uint  i=0,j=0;

uint ledFlashCnt = 0;        //ERR_LED指示燈閃爍周期計數
uchar Flag2ms = 0;
uchar u8Flag15min = 0;        //15分鐘到標志

void delay_1ms(void);                                //函數聲明
void delay_nms(uint var);

void delay_1ms(void)     //此函數在4M晶體下產生10003us的延時,也就是10MSus
{
        unsigned int d=1000;
        while(--d){;}
}


void delay_nms(uint var)//延時單位為毫秒,最多延時65.535秒(65535mS)
{
        while(var--)
        {
                delay_1ms();
                CLRWDT(); //喂狗
        }
}

void init()
{
    TRISC = 0x38;                //RB0、RB1、RB2設為輸出,RB3、RB4、RB5設為輸入0011 1000
    PORTC = 0x3a;                //RB初始值0011 1100
}

#define d_s(s) delay_nms((s)*100ul)//延時單位為秒

void main(void)
{
    INTCON = 0;             //暫禁止所有中斷
    init();

        while(1)
        {        
            if(L_KEY1==1 & M_KEY1==1 & H_KEY1 ==1)    //一、 三個開關全部斷開高電平 111,
                       
                        {
                                JS_JDQ = 0;           //JS_JDQ關閉
                                d_s(1);//延時1秒
                FMQ = 1;                 //JS_JDQ打開
                d_s(1);//延時1秒
                                JR1_JDQ = 0;          //JR1_JDQ關閉
                                                               
                                if(!u8Flag15min)
                                {
                                        if(Flag2ms)
                                         {
                                                Flag2ms=0;

                                                if(i<0xFFFF)
                                                        i++;
                                                if(i>=30000)   //60000ms,1分鐘
                                                {
                                                        i=0;
                                                        j++;
                                                }
                                                if(j>=15)  
                                                {
                                                        u8Flag15min = 1;
                                                        JS_JDQ = 0;
                                                        JR1_JDQ = 0;
                                                }
                                    }
                                }
                                else        //15分鐘到,開關沒有動作
                                                            //也就是開關一直斷開高電平,則        FMQ工作JS_JDQ、JR1_JDQ關
                                {
                                        if (ledFlashCnt>=500) //500*2=1000ms
                                        {
                                                ledFlashCnt = 0;
                                                 FMQ ^= 1;
                                        }
                                }
                        }
                       
                        else if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)    //二、開關011時, JS_JDQ開,FMQ、JR1_JDQ關
                        {   
                            d_s(3);//延時3秒
                                JS_JDQ = 1;                              
                            d_s(1);//延時1秒
                              
                FMQ = 0;
                                d_s(5);//延時5秒
                              
                                JR1_JDQ = 0;
                            d_s(3);//延時3秒
                        }
                       
                        else if(L_KEY1==0 & M_KEY1==0 & H_KEY1 ==1)    //三、開關001時, JS_JDQ、JR1_JDQ開,FMQ關
                        {
                            d_s(3);//延時1秒
                                JS_JDQ = 1;
                FMQ = 0;
                                d_s(5);//延時1秒
                                JR1_JDQ = 1;
                        }

                        else if(L_KEY1==0 & M_KEY1==0 & H_KEY1 ==0)    //四、開關000時,JR1_JDQ開,FMQ、JS_JDQQ關
                       
                        {
                            d_s(5);//延時1秒
                            JR1_JDQ =1;
                            d_s(3);//延時1秒
                                JS_JDQ = 0;FMQ = 0;
                d_s(1);//延時1秒
                        }                       
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:86926 發表于 2023-2-21 08:20 | 只看該作者
按照語法,if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)應該是用邏輯與&&,而不是位與&;還有FMQ ^= 1;不知道編譯器是按照0x01來異或,還是一位異或;用FMQ ~= FMQ;應該也是可以的
回復

使用道具 舉報

板凳
ID:72649 發表于 2023-2-21 19:24 來自觸屏版 | 只看該作者
藍魄 發表于 2023-2-21 08:20
按照語法,if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)應該是用邏輯與&&,而不是位與&;還有FMQ ^= 1;不知道編 ...

用邏輯與&&不是改變判斷條件了?另外這種語句在九齊單片機編譯環境能通過。
回復

使用道具 舉報

地板
ID:72649 發表于 2023-2-21 19:25 來自觸屏版 | 只看該作者
藍魄 發表于 2023-2-21 08:20
按照語法,if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)應該是用邏輯與&&,而不是位與&;還有FMQ ^= 1;不知道編 ...

為什么: if(L_KEY1==1 & M_KEY1==1 & H_KEY1 ==1)  這句語句沒有錯誤?
回復

使用道具 舉報

5#
ID:72649 發表于 2023-2-21 19:28 來自觸屏版 | 只看該作者
藍魄 發表于 2023-2-21 08:20
按照語法,if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)應該是用邏輯與&&,而不是位與&;還有FMQ ^= 1;不知道編 ...

用FMQ ~= FMQ;應該也是可以的,是不是FMQ延時一秒間隔接通?
回復

使用道具 舉報

6#
ID:146878 發表于 2023-2-21 21:11 | 只看該作者
首先,提問題請說明你想實現什么功能,實際什么現象。
讓后關于樓上提的 if(L_KEY1==1 & M_KEY1==1 & H_KEY1 ==1)問題,正確是要用&&的,因為語句的本意是要進行邏輯判斷,并非位運算。一些編譯器回提示你這里有問題,一些不會。
回復

使用道具 舉報

7#
ID:86926 發表于 2023-2-22 08:12 | 只看該作者
hjx5548 發表于 2023-2-21 19:24
用邏輯與&&不是改變判斷條件了?另外這種語句在九齊單片機編譯環境能通過。

不會改變判斷條件的,因為L_KEY1==0的運算結果是 真或假,而不是十六進制等,所以用邏輯與&&運算才對;能不能編譯通過要看編譯器;并不是所有的編譯器都是一樣的;
回復

使用道具 舉報

8#
ID:1063483 發表于 2023-2-22 09:18 | 只看該作者
同意樓上的說法,消抖時間是不是太短了?
回復

使用道具 舉報

9#
ID:72649 發表于 2023-2-24 05:31 來自觸屏版 | 只看該作者
藍魄 發表于 2023-2-22 08:12
不會改變判斷條件的,因為L_KEY1==0的運算結果是 真或假,而不是十六進制等,所以用邏輯與&&運算才對;能 ...

MPLAB-IDE編譯器
回復

使用道具 舉報

10#
ID:72649 發表于 2023-2-24 05:32 來自觸屏版 | 只看該作者
pdwdzz 發表于 2023-2-21 21:11
首先,提問題請說明你想實現什么功能,實際什么現象。
讓后關于樓上提的 if(L_KEY1==1 & M_KEY1==1 & H_KE ...

是邏輯運算,同時滿足三個條件,才能輸出。
回復

使用道具 舉報

11#
ID:72649 發表于 2023-2-24 05:34 來自觸屏版 | 只看該作者
pdwdzz 發表于 2023-2-21 21:11
首先,提問題請說明你想實現什么功能,實際什么現象。
讓后關于樓上提的 if(L_KEY1==1 & M_KEY1==1 & H_KE ...

功能就是同時滿足if條件,才輸出下面的結果
回復

使用道具 舉報

12#
ID:72649 發表于 2023-2-24 05:36 來自觸屏版 | 只看該作者
watsonbu 發表于 2023-2-22 09:18
同意樓上的說法,消抖時間是不是太短了?

但是在九齊單片機運行都正常,移植到picMPLAB-IDE的編譯環境就出現問題。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表