PIC16LF1503 代码查了2天都查不出来,求大神指点迷津!

2020-02-06 09:55发布

根据RC2的电平控制RC0的电平,可是实际上不管RC2的电平高低,RC0都是低电平!!查了2天都查不到原因  TT

#include <htc.h>
//__CONFIG(FOSC_ECL&WDTE_OFF);
__CONFIG(0x3fe4);
//内部晶振,禁止看门狗

void init_gpio()
{
        TRISA0=1;   //ICSPDAT        
        TRISA1=1;        //ICSPCLK
        TRISA2=1;        //DIM  INT
        TRISA3=1;         //VPP
        TRISA4=1;         //DIM  SAMP
        TRISA5=1;        //NC

        SDOSEL = 1;
        ANSELC |= 0X04;
        TRISC = 0X04;

        INTCON = 0x00;   //关闭所有中断
}

main()
{
        OSCCON=0B01101011;        //fosc=4Mhz; internal osc;
        WDTCON = 0;

        init_gpio();

        while(1)
        {
                if(PORTC & 0X04)
                        PORTC |= 0X01;
                else
                        PORTC &= ~0X01;       
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
zpywz
1楼-- · 2020-02-08 04:23
ADC、比较器都关掉。
这里有两个1503的初始化,你参考一下:
-------------------------------------------
        OSCCON        =        0B1101010        ;        //4MHz内置振荡
        OPTION_REG        =        0x81        ;        //4分频
        PORTA        =        0        ;
        LATA        =        0        ;
        ANSELA        =        0        ;
        TRISA        =        0B11000                ; //RA5,RA2,RA1,RA0:OUTPUT;                RA4,RA3:INPUT
        PORTC        =        0        ;
        LATC        =        0        ;
        ANSELC        =        0        ;
        TRISC        =        0xFF        ;        //RC全部为输入脚
------------------------------------------------------------
INITIALIZATION
        BANKSEL OSCCON  ;;★设置RC/4M,选择1扇区
    MOVLW 6AH       ;H'01101010'
    MOVWF OSCCON    ;
        ;
    BANKSEL LATA    ;;★设置PA状态,选择0扇区
    CLRF LATA       ;PA输出缓存状态寄存器清零
    BANKSEL PORTA   ;
    CLRF PORTA                ;PORTA输出为低电平
    BANKSEL ANSELA  ;选择1扇区
    CLRF ANSELA     ;取消PA引脚和PC引脚的模拟输入功能,设置相应的引脚为数字IO
    BANKSEL TRISA   ;
    MOVLW B'00000100';
    MOVWF TRISA     ;设置PA引脚方向,PA0/1/5为输出,SYN/ALT/RED
        ;
    BANKSEL LATC    ;;★设置PC状态,
    CLRF LATC       ;PC输出缓存状态寄存器清零
        BANKSEL PORTC   ;;★设置PC状态,
    CLRF PORTC      ;设置PORTC输出为0
    BANKSEL ANSELC  ;选择1扇区
    CLRF ANSELC      ;取消PA引脚和PC引脚的模拟输入功能,设置相应的引脚为数字IO
    BANKSEL TRISC   ;
    MOVLW B'00000011';
    MOVWF TRISC     ;设置PC引脚方向,PC4/5为输出(BLUE/WHITE),PC0/1为输入(WHITE/GREEN)

;
    BANKSEL OPTION_REG;★设置TIM0,开始计时                    ;
    MOVLW 87H       ;关闭弱上拉,选择内部时钟作为TIM0时钟源,预分频分配给TIM0
    MOVWF OPTION_REG;256分频,0.00001s*256*256=0.065536s
    BANKSEL LAMP_STATE
        MOVLW 7FH                                ;
        MOVWF ADDRH                                ;
        MOVLW 0FDH                                ;
        MOVWF ADDRL                                ;
        ;
        CLRF GREEN_COUNT                  ;EQU 0X25,绿线计时寄存器
    CLRF SLAVE_SYN_COUNT        ;
        ;CLRF SLAVE_FLASH_COUNT
        ;
        CALL DATA_READ                        ;
        ;

        MOVLW 0AH                                ;
        SUBWF BANK_TEMP,W                ;
        BTFSS STATUS,Z                        ;
        GOTO GO_NEXT
        GOTO MAIN       
EMC菜鸟
2楼-- · 2020-02-08 09:33
 精彩回答 2  元偷偷看……
laujc
3楼-- · 2020-02-08 11:06
EMC菜鸟 发表于 2017-2-10 10:32
说这话之前先检验一下自己吧

if(RC2) 直接等同汇编的:BTFSS 0x7,0x2,你要是还能更省,算你NB! ...

不同的编译器,处理方式不同,不和你讨论这个无意义的问题。
EMC菜鸟
4楼-- · 2020-02-08 12:28
laujc 发表于 2017-2-10 10:53
不同的编译器,处理方式不同,不和你讨论这个无意义的问题。

如果不了解PIC的汇编,就不要乱现,PIC的BTFSS指令是可以直接对C2口操作的,跟哪个编译器都无关!

跟你这种半瓶子醋讨论才是无意义的事情,这里只不过借讨论给楼主提供个更好思路而已!
laujc
5楼-- · 2020-02-08 17:52
EMC菜鸟 发表于 2017-2-10 10:58
如果不了解PIC的汇编,就不要乱现,PIC的BTFSS指令是可以直接对C2口操作的,跟哪个编译器都无关!

跟你 ...

我也是想给LZ提供一个思路。

我针对的不单是PIC的C2口。我当时是想着所有的单片机。有些单片机的端口不支持位操作。

foxcase
6楼-- · 2020-02-08 23:16
if((PORTC & 0X04)!=0)应该写出 if((0!=PORTC & 0X04) )

一周热门 更多>