PIC单片机的管脚复用设置问题
不知道坛子里的同志们有没有在用PIC18F24K22单片机的,妹纸我最近遇到一个奇怪的问题,具体描述如下。大家都知道PIC18F24K22单片机的有的管脚会有复用,复用的功能多了,就会有一个功能使用优先级的问题,比如我举个例子:PIC18F24K22单片机的PORTB5口,如果我要使用它的GPIO的功能,同时设置为输出高电平,但是在此同时,会有CCP3、P3A和P2B的功能,并且GPIO的优先级是最低的,所以我现在设置TRISBbits.RB5 = 0; ANSELBbits.ANSB5 = 0; LATBbits.LATB5 = 1; 这个时候不会从PORTB5输出高电平,原因是高优先级的CCP3功能占用,所以设置了CONFIG3H,设置相应的配置字,但是还是输出不了高电平,求解释?我的设置有遗漏的地方吗?小女子先谢过大家了!! 程序运行了 应该就能输出高电平的 最好先确定是否正常运行了 配置位:P2BMX:T3CMX:CCP3MX:PBADEN和这个脚都有关系,你挑这个脚说事难道真的跟microchip有仇吗 本帖最后由 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输出高电平,但是软仿的时候明显知道数值有变动,只不过变成了高电平,立马又拉低成了低电平。。。。 yklstudent 发表于 2014-2-21 21:45
程序运行了 应该就能输出高电平的 最好先确定是否正常运行了
谢谢回复,我对其他几个的管脚都进行了之前配置的操作,是可以的,但是就是PORTB5不可以。 在线调试吧,最好断开B5的外围电路,直接测单片机管脚,以防外部电路在这捣乱。程序中在LATBbits.LATB5 = 1;处打断点,观看WATCH窗口中此位的值,RB5的值,TRISB5的值,和你理想的状态是否一致。 本帖最后由 Lu.Shi 于 2014-2-24 12:13 编辑
还在思考琢磨当中。。。。。{:dizzy:} gaolf_2012 发表于 2014-2-24 12:00
在线调试吧,最好断开B5的外围电路,直接测单片机管脚,以防外部电路在这捣乱。程序中在LATBbits.LATB5 = 1 ...
额,我就是使用的MPLAB X IDE在进行simulator仿真,没有单片机系统,在做驱动模块的时候,偶然间发现的这个问题,所以直接重新建立了一个工程,里面就一个输出高电平,什么都没做,所以比较郁闷。。。 顶一下 huangxiaowei 发表于 2014-4-16 15:04
顶一下
该不会也遇到了这个问题吧?! 路过路过 顺便看看 表示没学过PIC、 mark gaolf_2012 发表于 2014-2-21 22:16
配置位:P2BMX:T3CMX:CCP3MX:PBADEN和这个脚都有关系,你挑这个脚说事难道真的跟microchip有仇吗 ...
哈哈,挑了个多功能脚 Maurice 发表于 2014-5-6 16:41
哈哈,挑了个多功能脚
可不是么,但是管脚的功能优先级好像配置了没有起作用 将顺序调一下,试试
ANSELBbits.ANSB5 = 0; TRISBbits.RB5 = 0; LATBbits.LATB5 = 1;
你写的TRISBbits.RB5 = 0; ANSELBbits.ANSB5 = 0; LATBbits.LATB5 = 1;
将顺序调一下,试试
ANSELBbits.ANSB5 = 0; TRISBbits.RB5 = 0; LATBbits.LATB5 = 1;
页:
[1]