標(biāo)題: PIC16F616單片機(jī)程序編譯哪里出了問(wèn)題? [打印本頁(yè)]

作者: hjx5548    時(shí)間: 2023-2-20 15:09
標(biāo)題: PIC16F616單片機(jī)程序編譯哪里出了問(wèn)題?
#include "pic.h"
//__CONFIG(INTIO&WDTDIS&BOREN);                        //PICC9.80版本配置字寫(xiě)法
//__CONFIG(FOSC_INTRCIO&WDTE_OFF&BOREN_ON&MCLRE_ON);                //PICC9.83版本配置字寫(xiě)法0000   0000  0101
#define __CONFIG(ox0005)                //芯片PIC16F616
/*使用內(nèi)部RC振蕩器,關(guān)閉看門(mén)狗,*/

#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                //無(wú)符號(hào)字符型簡(jiǎn)寫(xiě)成uchar
#define uint unsigned int                //無(wú)符號(hào)整形簡(jiǎn)寫(xiě)成uint
uint  i=0,j=0;

uint ledFlashCnt = 0;        //ERR_LED指示燈閃爍周期計(jì)數(shù)
uchar Flag2ms = 0;
uchar u8Flag15min = 0;        //15分鐘到標(biāo)志

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

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


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

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

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

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

        while(1)
        {        
            if(L_KEY1==1 & M_KEY1==1 & H_KEY1 ==1)    //一、 三個(gè)開(kāi)關(guān)全部斷開(kāi)高電平 111,
                       
                        {
                                JS_JDQ = 0;           //JS_JDQ關(guān)閉
                                d_s(1);//延時(shí)1秒
                FMQ = 1;                 //JS_JDQ打開(kāi)
                d_s(1);//延時(shí)1秒
                                JR1_JDQ = 0;          //JR1_JDQ關(guān)閉
                                                               
                                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分鐘到,開(kāi)關(guān)沒(méi)有動(dòng)作
                                                            //也就是開(kāi)關(guān)一直斷開(kāi)高電平,則        FMQ工作JS_JDQ、JR1_JDQ關(guān)
                                {
                                        if (ledFlashCnt>=500) //500*2=1000ms
                                        {
                                                ledFlashCnt = 0;
                                                 FMQ ^= 1;
                                        }
                                }
                        }
                       
                        else if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)    //二、開(kāi)關(guān)011時(shí), JS_JDQ開(kāi),F(xiàn)MQ、JR1_JDQ關(guān)
                        {   
                            d_s(3);//延時(shí)3秒
                                JS_JDQ = 1;                              
                            d_s(1);//延時(shí)1秒
                              
                FMQ = 0;
                                d_s(5);//延時(shí)5秒
                              
                                JR1_JDQ = 0;
                            d_s(3);//延時(shí)3秒
                        }
                       
                        else if(L_KEY1==0 & M_KEY1==0 & H_KEY1 ==1)    //三、開(kāi)關(guān)001時(shí), JS_JDQ、JR1_JDQ開(kāi),F(xiàn)MQ關(guān)
                        {
                            d_s(3);//延時(shí)1秒
                                JS_JDQ = 1;
                FMQ = 0;
                                d_s(5);//延時(shí)1秒
                                JR1_JDQ = 1;
                        }

                        else if(L_KEY1==0 & M_KEY1==0 & H_KEY1 ==0)    //四、開(kāi)關(guān)000時(shí),JR1_JDQ開(kāi),F(xiàn)MQ、JS_JDQQ關(guān)
                       
                        {
                            d_s(5);//延時(shí)1秒
                            JR1_JDQ =1;
                            d_s(3);//延時(shí)1秒
                                JS_JDQ = 0;FMQ = 0;
                d_s(1);//延時(shí)1秒
                        }                       
        }
}

作者: 藍(lán)魄    時(shí)間: 2023-2-21 08:20
按照語(yǔ)法,if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)應(yīng)該是用邏輯與&&,而不是位與&;還有FMQ ^= 1;不知道編譯器是按照0x01來(lái)異或,還是一位異或;用FMQ ~= FMQ;應(yīng)該也是可以的
作者: hjx5548    時(shí)間: 2023-2-21 19:24
藍(lán)魄 發(fā)表于 2023-2-21 08:20
按照語(yǔ)法,if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)應(yīng)該是用邏輯與&&,而不是位與&;還有FMQ ^= 1;不知道編 ...

用邏輯與&&不是改變判斷條件了?另外這種語(yǔ)句在九齊單片機(jī)編譯環(huán)境能通過(guò)。
作者: hjx5548    時(shí)間: 2023-2-21 19:25
藍(lán)魄 發(fā)表于 2023-2-21 08:20
按照語(yǔ)法,if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)應(yīng)該是用邏輯與&&,而不是位與&;還有FMQ ^= 1;不知道編 ...

為什么: if(L_KEY1==1 & M_KEY1==1 & H_KEY1 ==1)  這句語(yǔ)句沒(méi)有錯(cuò)誤?
作者: hjx5548    時(shí)間: 2023-2-21 19:28
藍(lán)魄 發(fā)表于 2023-2-21 08:20
按照語(yǔ)法,if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1)應(yīng)該是用邏輯與&&,而不是位與&;還有FMQ ^= 1;不知道編 ...

用FMQ ~= FMQ;應(yīng)該也是可以的,是不是FMQ延時(shí)一秒間隔接通?
作者: pdwdzz    時(shí)間: 2023-2-21 21:11
首先,提問(wèn)題請(qǐng)說(shuō)明你想實(shí)現(xiàn)什么功能,實(shí)際什么現(xiàn)象。
讓后關(guān)于樓上提的 if(L_KEY1==1 & M_KEY1==1 & H_KEY1 ==1)問(wèn)題,正確是要用&&的,因?yàn)檎Z(yǔ)句的本意是要進(jìn)行邏輯判斷,并非位運(yùn)算。一些編譯器回提示你這里有問(wèn)題,一些不會(huì)。
作者: 藍(lán)魄    時(shí)間: 2023-2-22 08:12
hjx5548 發(fā)表于 2023-2-21 19:24
用邏輯與&&不是改變判斷條件了?另外這種語(yǔ)句在九齊單片機(jī)編譯環(huán)境能通過(guò)。

不會(huì)改變判斷條件的,因?yàn)長(zhǎng)_KEY1==0的運(yùn)算結(jié)果是 真或假,而不是十六進(jìn)制等,所以用邏輯與&&運(yùn)算才對(duì);能不能編譯通過(guò)要看編譯器;并不是所有的編譯器都是一樣的;
作者: watsonbu    時(shí)間: 2023-2-22 09:18
同意樓上的說(shuō)法,消抖時(shí)間是不是太短了?
作者: hjx5548    時(shí)間: 2023-2-24 05:31
藍(lán)魄 發(fā)表于 2023-2-22 08:12
不會(huì)改變判斷條件的,因?yàn)長(zhǎng)_KEY1==0的運(yùn)算結(jié)果是 真或假,而不是十六進(jìn)制等,所以用邏輯與&&運(yùn)算才對(duì);能 ...

MPLAB-IDE編譯器
作者: hjx5548    時(shí)間: 2023-2-24 05:32
pdwdzz 發(fā)表于 2023-2-21 21:11
首先,提問(wèn)題請(qǐng)說(shuō)明你想實(shí)現(xiàn)什么功能,實(shí)際什么現(xiàn)象。
讓后關(guān)于樓上提的 if(L_KEY1==1 & M_KEY1==1 & H_KE ...

是邏輯運(yùn)算,同時(shí)滿足三個(gè)條件,才能輸出。
作者: hjx5548    時(shí)間: 2023-2-24 05:34
pdwdzz 發(fā)表于 2023-2-21 21:11
首先,提問(wèn)題請(qǐng)說(shuō)明你想實(shí)現(xiàn)什么功能,實(shí)際什么現(xiàn)象。
讓后關(guān)于樓上提的 if(L_KEY1==1 & M_KEY1==1 & H_KE ...

功能就是同時(shí)滿足if條件,才輸出下面的結(jié)果
作者: hjx5548    時(shí)間: 2023-2-24 05:36
watsonbu 發(fā)表于 2023-2-22 09:18
同意樓上的說(shuō)法,消抖時(shí)間是不是太短了?

但是在九齊單片機(jī)運(yùn)行都正常,移植到picMPLAB-IDE的編譯環(huán)境就出現(xiàn)問(wèn)題。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1