打印
[PIC®/AVR®/dsPIC®产品]

请教PIC18F47Q10 定时器1

[复制链接]
1249|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jhcj2014|  楼主 | 2020-7-2 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jhcj2014 于 2020-7-2 22:45 编辑

因MCC生成的程序中的函数很多,不理解,有点乱,所以主程序还是调试不了用定时器1进行1S时间闪烁LED。所以用下面手输的程序进行调试。但程序下载后还是无法运行,LED灯是一直灭的。请教下大家,下面程序哪些地方是错误的。
#include <xc.h>
#define uint unsigned int
uint num;

void timer1_init();

void main(void)
{
    timer1_init();

    while(num==20)
    {

        num=0;
        PORTEbits.RE0=0;
        
    }
    return;
}
void timer1_init()
{
    num=0;
    TRISE=0x00;
    PORTE=0xFF;
   
     //TMR1CLK = 0x01;
     TMR1CLK=0x04;
     OSCFRQ=0x05;
     TMR1H =(65536-50000)/256;
     TMR1L = (65536-50000)%256;
     T1CON = 0x03;
     //IPR4=0x04;
     PIE4bits.TMR1IE = 1;
     PIR4bits.TMR1IF = 0;
     INTCON = 0xC0;
}
void __interrupt() _tmer1(void)
{
    PIR4bits.TMR1IF = 0;
    TMR1H =(65536-50000)/256;
    TMR1L = (65536-50000)%256;
    num++;
}

使用特权

评论回复
沙发
jhcj2014|  楼主 | 2020-7-2 22:57 | 只看该作者
本帖最后由 jhcj2014 于 2020-7-2 22:59 编辑

正文里没写出MCU型号,这里补充下是:PIC18F47Q10,此程序也是基于PIC16F73程序上做修改的。

使用特权

评论回复
板凳
GIGGWANG| | 2020-7-2 23:19 | 只看该作者
是不是配置字没设

使用特权

评论回复
地板
hu9jj| | 2020-7-3 07:03 | 只看该作者
没有使用MCC来配置代码?使用MCC来配置就简单方便的多。

使用特权

评论回复
5
she20191204| | 2020-7-3 07:46 | 只看该作者
本帖最后由 she20191204 于 2020-7-3 07:50 编辑
GIGGWANG 发表于 2020-7-2 23:19
是不是配置字没设

配置字和PIC16F系列的不一样,我也想了解下。感 觉和以前的不一样。

使用特权

评论回复
评论
GIGGWANG 2020-7-3 17:12 回复TA
手册 有配置字这个章节,每个应该都有描述的。 
6
she20191204| | 2020-7-3 07:49 | 只看该作者
本帖最后由 she20191204 于 2020-7-3 07:52 编辑
hu9jj 发表于 2020-7-3 07:03
没有使用MCC来配置代码?使用MCC来配置就简单方便的多。

想看下各位大佬手写的程序,我想应该会比MCC软件配置来得更直观吧。

使用特权

评论回复
7
jhcj2014|  楼主 | 2020-7-3 07:55 | 只看该作者
GIGGWANG 发表于 2020-7-2 23:19
是不是配置字没设

配置字加了很多遍但都是不行,现在就按默认的。大佬能不能帮忙看下会是什么原因?

使用特权

评论回复
8
jhcj2014|  楼主 | 2020-7-3 07:58 | 只看该作者
hu9jj 发表于 2020-7-3 07:03
没有使用MCC来配置代码?使用MCC来配置就简单方便的多。

能不能教下如何用MCC配置后,主要是主程序如何写。

使用特权

评论回复
9
hu9jj| | 2020-7-3 09:18 | 只看该作者
jhcj2014 发表于 2020-7-3 07:58
能不能教下如何用MCC配置后,主要是主程序如何写。

您可以参考这个帖子:https://bbs.21ic.com/icview-2966980-1-1.html

使用特权

评论回复
10
CoolSilicon| | 2020-7-3 10:15 | 只看该作者
好的PIC程序,需要具备以下几点,
1. 可以看到代码化的配置字设置.
2. 在main起始处可以看到明显的时钟及频率设置
3. 在mian的起始处可以看到明显的IO口初始化(输入输出,模拟/数字)
4............

你这个程序的写法 槽点太多了....
请回到MCC生成代码的正确结构的道路上来~~~

使用特权

评论回复
11
oxygenzz| | 2020-7-3 13:15 | 只看该作者
从你帖的代码中,发现的主要问题:

1. 没有使能全局中断
- 在main()函数中,加入代码  ei();

2. 主函数中,缺少while(1), 导致main 函数执行一次即退出。

使用特权

评论回复
12
ynwa| | 2020-7-3 13:16 | 只看该作者
LED不亮可以调试啊,不要只靠肉眼看。比如,有没有执行到点亮LED的语句,有没有进中断,作为条件判断的变量怎么样在变等等。。。

使用特权

评论回复
13
oxygenzz| | 2020-7-3 13:30 | 只看该作者
楼主,修改了一下你的程序,你运行下看看。


// PIC18F47Q10 Configuration Bit Settings

// 'C' source line config statements

// CONFIG1L
#pragma config FEXTOSC = HS     // External Oscillator mode Selection bits (HS (crystal oscillator) above 8 MHz; PFM set to high power)
#pragma config RSTOSC = HFINTOSC_64MHZ// Power-up default value for COSC bits (HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1)

// CONFIG1H
#pragma config CLKOUTEN = OFF   // Clock Out Enable bit (CLKOUT function is disabled)
#pragma config CSWEN = ON       // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)

// CONFIG2L
#pragma config MCLRE = EXTMCLR  // Master Clear Enable bit (MCLR pin (RE3) is MCLR)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (Power up timer disabled)
#pragma config LPBOREN = OFF    // Low-power BOR enable bit (Low power BOR is disabled)
#pragma config BOREN = SBORDIS  // Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)

// CONFIG2H
#pragma config BORV = VBOR_190  // Brown Out Reset Voltage selection bits (Brown-out Reset Voltage (VBOR) set to 1.90V)
#pragma config ZCD = OFF        // ZCD Disable bit (ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
#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 STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)

// CONFIG3L
#pragma config WDTCPS = WDTCPS_31// WDT Period Select bits (Divider ratio 1:65536; software control of WDTPS)
#pragma config WDTE = OFF        // WDT operating mode (WDT always enabled)

// CONFIG3H
#pragma config WDTCWS = WDTCWS_7// WDT Window Select bits (window always open (100%); software control; keyed access not required)
#pragma config WDTCCS = SC      // WDT input clock selector (Software Control)

// CONFIG4L
#pragma config WRT0 = OFF       // Write Protection Block 0 (Block 0 (000800-003FFFh) not write-protected)
#pragma config WRT1 = OFF       // Write Protection Block 1 (Block 1 (004000-007FFFh) not write-protected)
#pragma config WRT2 = OFF       // Write Protection Block 2 (Block 2 (008000-00BFFFh) not write-protected)
#pragma config WRT3 = OFF       // Write Protection Block 3 (Block 3 (00C000-00FFFFh) not write-protected)
#pragma config WRT4 = OFF       // Write Protection Block 4 (Block 4 (010000-013FFFh) not write-protected)
#pragma config WRT5 = OFF       // Write Protection Block 5 (Block 5 (014000-017FFFh) not write-protected)
#pragma config WRT6 = OFF       // Write Protection Block 6 (Block 6 (018000-01BFFFh) not write-protected)
#pragma config WRT7 = OFF       // Write Protection Block 7 (Block 7 (01C000-01FFFFh) not write-protected)

// CONFIG4H
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-30000Bh) not write-protected)
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)
#pragma config SCANE = ON       // Scanner Enable bit (Scanner module is available for use, SCANMD bit can control the module)
#pragma config LVP = ON         // Low Voltage Programming Enable bit (Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored)

// CONFIG5L
#pragma config CP = OFF         // UserNVM Program Memory Code Protection bit (UserNVM code protection disabled)
#pragma config CPD = OFF        // DataNVM Memory Code Protection bit (DataNVM code protection disabled)

// CONFIG5H

// CONFIG6L
#pragma config EBTR0 = OFF      // Table Read Protection Block 0 (Block 0 (000800-003FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF      // Table Read Protection Block 1 (Block 1 (004000-007FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF      // Table Read Protection Block 2 (Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF      // Table Read Protection Block 3 (Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks)
#pragma config EBTR4 = OFF      // Table Read Protection Block 4 (Block 4 (010000-013FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR5 = OFF      // Table Read Protection Block 5 (Block 5 (014000-017FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR6 = OFF      // Table Read Protection Block 6 (Block 6 (018000-01BFFFh) not protected from table reads executed in other blocks)
#pragma config EBTR7 = OFF      // Table Read Protection Block 7 (Block 7 (01C000-01FFFFh) not protected from table reads executed in other blocks)

// CONFIG6H
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>

#define uint unsigned int
uint num;

void timer1_init();

void main(void)
{

    timer1_init();
   
    ei();
    while(1){
         while(num==20)
        {

            num=0;
            PORTEbits.RE0 = 1 - PORTEbits.RE0 ;

        }
    }

   
}
void timer1_init()
{
    num=0;
    TRISE=0x00;
    PORTE=0xFF;
    ANSELE = 0;
   
     //TMR1CLK = 0x01;
     TMR1CLK=0x04;
     OSCFRQ=0x05;
     TMR1H =(65536-500)/256;
     TMR1L = (65536-500)%256;
     T1CON = 0x03;
     //IPR4=0x04;
     PIE4bits.TMR1IE = 1;
     PIR4bits.TMR1IF = 0;
     INTCON = 0xC0;
}
void __interrupt() _tmer1(void)
{
    PIR4bits.TMR1IF = 0;
    TMR1H =(65536-500)/256;
    TMR1L = (65536-500)%256;
    num++;
}

使用特权

评论回复
14
jhcj2014|  楼主 | 2020-7-3 18:14 | 只看该作者
oxygenzz 发表于 2020-7-3 13:30
楼主,修改了一下你的程序,你运行下看看。

谢谢!程序可以正常运行了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

703

帖子

1

粉丝