发新帖本帖赏金 1.00元(功能说明)我要提问
12下一页
返回列表
打印
[PIC®/AVR®/dsPIC®产品]

PIC18F24Q10 定时器0不会输出,是不是PPS配置问题?

[复制链接]
34651|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请教一下大家,我用 PIC18F24Q10 定时器0每0.5秒中断一次,中断正常,就是T0OUT不会输出

请问:
1:是不是配置位或者PPS配置有问题?
2:还是T0OUT输出不能驱动LED的?仿真时可以看到T0OUT位是有变化的

使用特权

评论回复
评论
cooldog123pp 2021-5-26 19:20 回复TA
网上找个现成的程序对照一下! 
沙发
panxiaoyi|  楼主 | 2021-4-5 17:37 | 只看该作者
// PIC18F24Q10 Configuration Bit Settings

#include <xc.h>

#pragma config RSTOSC = HFINTOSC_64MHZ // Power-up default value for COSC bits (HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1)
#pragma config MCLRE = INTMCLR         // Master Clear Enable bit (If LVP = 0, MCLR pin (RE3) is an input; If LVP =1, MCLR pin (RE3) is MCLR)
#pragma config PPS1WAY = ON            // PPSLOCK bit One-Way Set Enable bit (PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
#pragma config WDTE = OFF              // WDT operating mode (WDT Disabled)

void __interrupt() isr(void)
{
    TMR0IF=0;                          //清零中断位
    LATC1=~LATC1;                      //驱动LED,每秒闪烁一次,正常
}

void main(void)
{
    TRISC1=0;                          //输出驱动LED,测试T0计数溢出中断
    TRISC2=0;                          //输出驱动LED,测试T0输出,LED不会闪烁,不正常

    ANSELC2=0;
    //PPSLOCK=0;
    RC2PPS=0x13;                       //端口定义为由计数器TMR0计数溢出输出
    //PPSLOCK=1;

    GIEH=1;                            //全局中断允许位
    GIEL=1;                            //外设中断允许位
    IPEN=0;                            //禁止中断优先级

    T0CON0|=0x80;                      //TMR0 使能位
    T0CON0+=8;                         //0->15 = 1-16分频(后分频),值是8就是9分频
    T0CON1=64+12;                      //时钟源=Fosc/4,4096预分频
    TMR0H=217;                         //8位计时的周期值
    TMR0IE=1;                          //中断使能,速度=16M/(9*4096*217)=2次/秒
   
    while(1);
}


使用特权

评论回复
板凳
panxiaoyi|  楼主 | 2021-4-5 17:39 | 只看该作者
上面的是全部代码

使用特权

评论回复
地板
panxiaoyi|  楼主 | 2021-4-5 17:46 | 只看该作者
图中红色的,Bit5 就是T0OUT位,仿真时能观察到它的变化

捕获.PNG (250.78 KB )

捕获.PNG

使用特权

评论回复
5
panxiaoyi|  楼主 | 2021-4-5 17:48 | 只看该作者
PPS的说明

捕获.PNG (76.7 KB )

捕获.PNG

使用特权

评论回复

打赏榜单

永恒heng 打赏了 1.00 元 2021-04-12

6
panxiaoyi|  楼主 | 2021-4-5 17:54 | 只看该作者
代码比较简单,请问谁能帮我调试一下,或者用类似的芯片,让T0OUT能正常的从RC2输出驱动LED,谢谢,第一次玩PIC的PPS。

芯圣电子的51单片机 HC89F0541 也有这个功能,它就很好调试,感觉它更人性化

使用特权

评论回复
7
panxiaoyi|  楼主 | 2021-4-5 18:12 | 只看该作者
为了怕人家误会我是伸手党,特发一个小程序,OLED驱动,希望上面的代码有人能帮一下我,谢谢

//
#include <xc.h>
#include "Configuration.h"
#include "BIT.h"
#include "DELAY_LONG.h"
#include "FONT0805.h"
#include "MCUIIC.h"
#include "SH1106.h"

unsigned int i;

void main(void)
{
    IIC_init();
    OLED_init();
    OLED_clear();
    OLED_gotoxy(11,1);
    OLED_string("PIC18F24Q10>SH1106");
    OLED_gotoxy(11,5);
    OLED_string("21IC.COM PANXIAOYI");
   
    while(1)
    {
        OLED_gotoxy(52,3);
        OLED_show(i);
        i++;
    }
    return;
}


捕获.PNG (541.6 KB )

捕获.PNG

PIC18F24Q10 IIC SH1106 OLED.rar

134.23 KB

使用特权

评论回复
8
panxiaoyi|  楼主 | 2021-4-5 18:26 | 只看该作者
回到最开始的问题,使用了下面的这个语句,RC2的端口是有点不同,它会干扰正常的RC2端口驱动LED,甚至是注释掉它,编译、下载,RC2驱动LED还是有问题,要重新上电复位,RC2才能正常驱动LED

RC2PPS=0x13;                       //端口定义为由计数器TMR0计数溢出输出

使用特权

评论回复
9
lcczg| | 2021-4-6 12:06 | 只看该作者
在数据手册(https://ww1.microchip.com/downlo ... Sheet-40001945D.pdf)里270页Table17-2,应该是RC2PPS = 0x0F;

使用特权

评论回复
10
panxiaoyi|  楼主 | 2021-4-6 13:00 | 只看该作者
多谢,改成0x0F就可以了。驱动LED正常闪烁,看来中文手册不可信啊

使用特权

评论回复
11
panxiaoyi|  楼主 | 2021-4-6 13:25 | 只看该作者
又发现了一个新问题,就是上面的代码,修改成 RC2PPS = 0x0F; 之后,RC1和RC2分别驱动LED1和LED2
编译,下载
下载后,有时候LED是同步闪烁,又下载后,有时候LED是交替闪烁,重新上电复位,LED交替闪烁
我想RC1驱动LED1肯定是没有问题的,如果有问题的话,我上面驱动OLED显示屏就会有问题
难道是T0OUT输出RC2驱动LED那里软复位和硬复位不同?

使用特权

评论回复
12
名字是啥样| | 2021-4-6 14:10 | 只看该作者
学习了,太多了,不错。

使用特权

评论回复
13
lcczg| | 2021-4-6 15:25 | 只看该作者
panxiaoyi 发表于 2021-4-6 13:25
又发现了一个新问题,就是上面的代码,修改成 RC2PPS = 0x0F; 之后,RC1和RC2分别驱动LED1和LED2
编译,下 ...

应该不会同步。即便看起来同步,你应该用示波器看看。

使用特权

评论回复
14
panxiaoyi|  楼主 | 2021-4-7 09:30 | 只看该作者
是视觉上的同步或者交替变化

使用特权

评论回复
15
panxiaoyi|  楼主 | 2021-4-7 09:33 | 只看该作者
经过仿真测试,感觉 LATC 寄存器的每次复位值是个随机数,所以就有了上面的LED同步或者交替变化了

使用特权

评论回复
16
panxiaoyi|  楼主 | 2021-4-7 09:40 | 只看该作者
我在仿真时,点击复位图标,点击一次单步,查看 LATC 的值,然后把芯片拔下来,插上芯片,又点击复位图标,点击一次单步,查看 LATC 的值,就这样反复测试的

使用特权

评论回复
17
panxiaoyi|  楼主 | 2021-4-7 10:47 | 只看该作者
所以,估计在程序的开始加入 LATx=0 就保险很多

使用特权

评论回复
18
panxiaoyi|  楼主 | 2021-4-7 11:04 | 只看该作者
还是回到第一个问题,都是怪自己没有认真的看数据手册,原来 PIC18F24Q10 跟 PIC18F27Q10 虽然是一个系列,但是,还是有不同的地方的,如图

微信截图_20210407110025.png (189.9 KB )

微信截图_20210407110025.png

使用特权

评论回复
19
永恒heng| | 2021-4-12 22:08 | 只看该作者
本帖最后由 永恒heng 于 2021-4-12 22:45 编辑
panxiaoyi 发表于 2021-4-7 11:04
还是回到第一个问题,都是怪自己没有认真的看数据手册,原来 PIC18F24Q10 跟 PIC18F27Q10 虽然是一个系列, ...

      

使用特权

评论回复
20
李奶奶| | 2021-4-15 11:21 | 只看该作者
emmmm

使用特权

评论回复
发新帖 本帖赏金 1.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

397

帖子

2

粉丝