Lu.Shi 发表于 2014-2-20 13:51:18

PIC单片机的管脚复用设置问题

不知道坛子里的同志们有没有在用PIC18F24K22单片机的,妹纸我最近遇到一个奇怪的问题,具体描述如下。
大家都知道PIC18F24K22单片机的有的管脚会有复用,复用的功能多了,就会有一个功能使用优先级的问题,比如我举个例子:PIC18F24K22单片机的PORTB5口,如果我要使用它的GPIO的功能,同时设置为输出高电平,但是在此同时,会有CCP3、P3A和P2B的功能,并且GPIO的优先级是最低的,所以我现在设置TRISBbits.RB5 = 0; ANSELBbits.ANSB5 = 0; LATBbits.LATB5 = 1; 这个时候不会从PORTB5输出高电平,原因是高优先级的CCP3功能占用,所以设置了CONFIG3H,设置相应的配置字,但是还是输出不了高电平,求解释?我的设置有遗漏的地方吗?小女子先谢过大家了!!

yklstudent 发表于 2014-2-21 21:45:23

程序运行了 应该就能输出高电平的 最好先确定是否正常运行了

gaolf_2012 发表于 2014-2-21 22:16:48

配置位:P2BMX:T3CMX:CCP3MX:PBADEN和这个脚都有关系,你挑这个脚说事难道真的跟microchip有仇吗

Lu.Shi 发表于 2014-2-24 08:52:40

本帖最后由 Lu.Shi 于 2014-2-24 09:13 编辑

gaolf_2012 发表于 2014-2-21 22:16
配置位:P2BMX:T3CMX:CCP3MX:PBADEN和这个脚都有关系,你挑这个脚说事难道真的跟microchip有仇吗 ...

谢谢你的回复,还有我没有和Microchip有什么仇{:funk:} ,我遇到的问题就像上面的描述的,对TRISB5、ANSELB5以及LATB5都设置了,你上面说的P2BMX:T3CMX:CCP3MX:PBADEN这几个配置位都在CONFIG3H配置字里,我都按照datasheet的说明配置了,可是还是没有输出高电平,感觉是输出了高电平立马又被置低了,找不到原因,所以才在坛子里求助的,看看我是不是遗漏什么配置或设置的地方。
具体的配置如下:
#pragma config CCP2MX = PORTC1// CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = OFF      // PORTB A/D Enable bit (PORTB<5:0> pins are configured as analog input channels on Reset)
#pragma config CCP3MX = PORTC6// P3A/CCP3 Mux bit (P3A/CCP3 input/output is multiplexed with RB5)
#pragma config HFOFST = ON      // HFINTOSC Fast Start-up (HFINTOSC output and ready status are not delayed by the oscillator stable status)
#pragma config T3CMX = PORTB5   // Timer3 Clock input mux bit (T3CKI is on RC0),这个当TRISB5是高电平,ANSELB5低电平使能,所以和配置成GIO模式不冲突
#pragma config P2BMX = PORTC0   // ECCP2 B output mux bit (P2B is on RD2)
#pragma config MCLRE = EXTMCLR// MCLR Pin Enable bit (MCLR pin enabled, RE3 input pin disabled)
然后在主程序里面我就是让PORTB5输出高电平,但是软仿的时候明显知道数值有变动,只不过变成了高电平,立马又拉低成了低电平。。。。

Lu.Shi 发表于 2014-2-24 08:56:10

yklstudent 发表于 2014-2-21 21:45
程序运行了 应该就能输出高电平的 最好先确定是否正常运行了

谢谢回复,我对其他几个的管脚都进行了之前配置的操作,是可以的,但是就是PORTB5不可以。

gaolf_2012 发表于 2014-2-24 12:00:28

在线调试吧,最好断开B5的外围电路,直接测单片机管脚,以防外部电路在这捣乱。程序中在LATBbits.LATB5 = 1;处打断点,观看WATCH窗口中此位的值,RB5的值,TRISB5的值,和你理想的状态是否一致。

Lu.Shi 发表于 2014-2-24 12:11:37

本帖最后由 Lu.Shi 于 2014-2-24 12:13 编辑

还在思考琢磨当中。。。。。{:dizzy:}

Lu.Shi 发表于 2014-2-24 12:12:07

gaolf_2012 发表于 2014-2-24 12:00
在线调试吧,最好断开B5的外围电路,直接测单片机管脚,以防外部电路在这捣乱。程序中在LATBbits.LATB5 = 1 ...

额,我就是使用的MPLAB X IDE在进行simulator仿真,没有单片机系统,在做驱动模块的时候,偶然间发现的这个问题,所以直接重新建立了一个工程,里面就一个输出高电平,什么都没做,所以比较郁闷。。。

huangxiaowei 发表于 2014-4-16 15:04:20

   顶一下

Lu.Shi 发表于 2014-4-22 16:05:38

huangxiaowei 发表于 2014-4-16 15:04
顶一下

该不会也遇到了这个问题吧?!

xuanfong1 发表于 2014-4-28 11:23:58

路过路过 顺便看看   表示没学过PIC、

tlsmf 发表于 2014-5-6 14:48:56

mark         

Maurice 发表于 2014-5-6 16:41:40

gaolf_2012 发表于 2014-2-21 22:16
配置位:P2BMX:T3CMX:CCP3MX:PBADEN和这个脚都有关系,你挑这个脚说事难道真的跟microchip有仇吗 ...

哈哈,挑了个多功能脚

Lu.Shi 发表于 2014-5-13 16:53:24

Maurice 发表于 2014-5-6 16:41
哈哈,挑了个多功能脚

可不是么,但是管脚的功能优先级好像配置了没有起作用

zhgx2950 发表于 2014-5-15 23:13:23

将顺序调一下,试试
ANSELBbits.ANSB5 = 0; TRISBbits.RB5 = 0; LATBbits.LATB5 = 1;

zhgx2950 发表于 2014-5-15 23:14:20

你写的TRISBbits.RB5 = 0; ANSELBbits.ANSB5 = 0; LATBbits.LATB5 = 1;
将顺序调一下,试试
ANSELBbits.ANSB5 = 0; TRISBbits.RB5 = 0; LATBbits.LATB5 = 1;
页: [1]
查看完整版本: PIC单片机的管脚复用设置问题