MCC18 编译器 编译 PIC18F25K20

2020-02-08 09:13发布

MCC18 编译器 编译 PIC18F25K20

#include <p18f25k20.h>

void delay (void)
{
  int i;

  for (i = 0; i < 10000; i++)
    ;
}

void main (void)
{


        WDTCON = 0x01 ;   //close watchdog

        PORTB = 0Xff ;

//        PORTB = 0x00;  
//        LATB = 0X00;
//        PBADEN = 0xff;
        ANSELH = 0x00 ;
          TRISB = 0X00;
        
          OSCCON  = 0b11111100;   //16 MHz
        OSCTUNE = 0b11011111;   //来自16 MHz HFINTOSC
        //CONFIG1H = 0b10001000; //内部振荡器模块, RA6 和RA7 均用作端口引脚

        ClrWdt() ;
        PORTBbits.RB2 = 1;

          while (1) ;
            
}


正常的话:PORTBbits.RB2 会被拉高, 但是 我量了PORTBbits.RB2 这个引脚 居然输出方波信号 ! ??????????
是不是还需要配置什么寄存器呢 ?
用过PIC18F2xK20系列的高手 请指导小弟!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
surf_131
1楼-- · 2020-02-08 14:37
在TRISB=0;之后,用LATB=0XFF;就该正常了。
shaofan
2楼-- · 2020-02-08 16:39
surf_131 发表于 2012-5-28 10:57
在TRISB=0;之后,用LATB=0XFF;就该正常了。

#include <p18f25k20.h>

void delay (void)
{
  int i;

  for (i = 0; i < 10000; i++)
    ;
}

void main (void)
{


        WDTCON = 0x01 ;   //close watchdog

        PORTB = 0X00 ;
        LATB = 0Xff;
//        PBADEN = 0xff;
        ANSELH = 0x00 ;
          TRISB = 0X00;
        
          OSCCON  = 0b11111100;   //16 MHz
        OSCTUNE = 0b11011111;   //来自16 MHz HFINTOSC
        //CONFIG1H = 0b10001000; //内部振荡器模块, RA6 和RA7 均用作端口引脚

        ClrWdt() ;
        PORTBbits.RB2 = 1;

          while (1) ;
            
}



兄弟: 还是输出方波信号 ! 电压 1.32V 50hz   是不是还得配置一些什么其它的寄存器呢 ?
surf_131
3楼-- · 2020-02-08 17:44
shaofan 发表于 2012-5-28 11:30
#include

void delay (void)

手上一时没有找到18fxxk20的手册,用18F25K22的手册,有ANSELA/ANSELB/ANSELC........是用来决定各个IO口的模拟或者数字状态选择的。
ANSELB给设置为0。

这种查找手册分析问题的做法,是标准的PIC程序员必须熟悉的工作。模拟/数字选择的方法,在各个系列当中变化非常大,必须注意。
surf_131
4楼-- · 2020-02-08 18:18
还有,你为什么在TRISB改为输出之前设置LATB?这是什么恶劣的编程习惯?
leolong03
5楼-- · 2020-02-08 18:40
 精彩回答 2  元偷偷看……
shaofan
6楼-- · 2020-02-08 20:16
surf_131 发表于 2012-5-28 15:17
还有,你为什么在TRISB改为输出之前设置LATB?这是什么恶劣的编程习惯?

  PORTB = 0xff;
  TRISB = 0x00;



  TRISCbits.TRISC7 = 0;     //RC7 Output h
  PORTBbits.RB7 = 1;


LATBbits.LATB2 = 1;


问题已经解决! 是硬件的设计问题 ! PIC单片机复位引脚 MCLR 没接 上拉 10K 电阻就可以了 ! 之前估计就是这个的原因 导致单片机一直处于复位状态吧 ?!?  多谢各位大哥的关心!

一周热门 更多>