打印

定时器0延时2秒仿真可以,程序下载到芯片运行时没有2秒的

[复制链接]
4262|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WXJPCY888|  楼主 | 2013-8-9 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 WXJPCY888 于 2013-8-9 14:57 编辑

使用MPLAB IDEv8.92,mplab c18-v3.46编译器,芯片采用PIC18F2520,外部晶振10MHZ,用MPLAB SIM仿真RA0端口是延时了2秒后置1,但把程序下载的芯片内,一上电RA0就输出高电平5V,想让RA0端口延时2秒后再输出高电平5V,起不到延时效果。不知是什么原因,本人新手,求各位高手大侠点拨一下,多谢!!!

#include <p18F2520.h>      /*头文件*/

void PIC18F_High_isr(void);/*中断服务函数声明*/
void PIC18F_Low_isr(void); /*中断服务函数声明*/

#define RA0 PORTAbits.RA0
#define RC7 PORTCbits.RC7
unsigned int intnum;

       /*高优先级中断入口*/
#pragma code high_vector_section=0x8
void high_vector (void)
{
        _asm goto PIC18F_High_isr _endasm
}

       /*低优先级中断入口*/
#pragma code low_vector_section=0x18
void low_vector (void)
{
        _asm goto PIC18F_Low_isr _endasm
}

    /*高优先级中断服务程序函数*/
#pragma code
#pragma interrupt PIC18F_High_isr
void PIC18F_High_isr (void)    /*每进入一次中断需要200us*/
{                     
  intnum++;                  /*计数器加一*/
  TMR0L=20;                 /*TMR0重新置初值*/
  INTCONbits.TMR0IF=0;/*中断标志位清零*/         
}

    /*低优先级中断服务程序函数*/
#pragma interruptlow PIC18F_Low_isr
void PIC18F_Low_isr (void)
{
   RC7=1;                         /* 输出高电位*/
   INTCON3bits.INT1IF=0; /*外部中断标志位清零*/
}

/*初始化函数*/
void init()         
{
        WDTCONbits.SWDTEN = 0;  /* 看门狗关闭*/
        RCONbits.POR =0;                /*上电复位使能*/  
        OSCCON=0xfc;                     /* 使能外部晶振10MHZ*/
        TRISAbits.TRISA0=0;            /* 端口为输出*/
        TRISCbits.TRISC7=0;            /* 端口为输出*/        
}

/*扫描函数*/
void scanf()
{
        if(intnum==10000)                  /*如果2秒到*/
        {
                intnum=0;                       /*计数器清零*/
                  RA0=1;                         /* 输出高电位*/        
                  T0CONbits.TMR0ON=0; /*关闭TMR0定时器*/
        }
        
}

/*TMR0定时器初始化函数*/
void TMR0_init()
{
   T0CON=0x40;              /*8位定时器未分频*/
   TMR0L=20;                   /*TMR0定时器赋初值*/                       
    INTCONbits.TMR0IF=0; /*中断标志位清零*/
    INTCONbits.TMR0IE=1; /*TMR0定时器中断允许*/      
    T0CONbits.TMR0ON=1; /*TMR0定时器中断使能*/     
}

/*主函数*/
void main(void)
{        
        init();                                 /*初始化*/
        TMR0_init();                      /*TMR0定时器初始化*/
        INTCONbits.GIE=0;           /*关全局中断*/
        RCONbits.IPEN=1;            /*使能中断优先级*/
        INTCON2bits.TMR0IP=1;  /*TMR0中断为高优先级*/
        INTCON3bits.INT1IP=0;    /*外部中断为低优先级*/
        INTCON2bits.INTEDG1=1;/*外部中断上升沿触发*/
        INTCON3bits.INT1IF=0;    /*外部中断标志位清零*/
        INTCON3bits.INT1IE=1;   /*外部中断允许*/
        INTCONbits.PEIE=1;        /*开低优先级全局中断*/
        INTCONbits.GIE=1;          /*开全局中断*/
        while(1)
        {
                scanf();                   /*扫描函数*/
        }
}
评分
参与人数 1威望 +1 收起 理由
nami2013 + 1 赞一个!
沙发
NE5532| | 2013-8-9 12:07 | 只看该作者
PIC的Timer0好像是关不断的,楼主先把问题分开,以实际运行为准,如果是每2秒扫描了一次,只是第一次上电没有延时,就去找标志问题,否则就找定时器相关设置和程序问题。

使用特权

评论回复
板凳
WXJPCY888|  楼主 | 2013-8-9 12:17 | 只看该作者
NE5532 发表于 2013-8-9 12:07
PIC的Timer0好像是关不断的,楼主先把问题分开,以实际运行为准,如果是每2秒扫描了一次,只是第一次上电没 ...

感谢 NE5532 版主的解答,我的程序进一次中断需要200us,仿真正常,就是烧到芯片内就没效果,求您帮忙。。。

使用特权

评论回复
地板
yklstudent| | 2013-8-9 13:01 | 只看该作者
先确定MCU有没有在跑 再谈其他

使用特权

评论回复
5
NE5532| | 2013-8-9 13:10 | 只看该作者
WXJPCY888 发表于 2013-8-9 12:17
感谢 NE5532 版主的解答,我的程序进一次中断需要200us,仿真正常,就是烧到芯片内就没效果,求您帮忙。 ...

没效果是什么意思?咱是工程师,不能学老百姓描述问题啊,要说清楚什么现象。

使用特权

评论回复
6
弓长月月鸟| | 2013-8-9 13:21 | 只看该作者
  RD0=1;              /* 输出高电位*/        
                  T0CONbits.TMR0ON=0;        /*关闭TMR0定时器*/
建议楼主此处先不要关闭TMR0定时器,RD0 = !RD0; 试试该端口会不会出现方波再说。

使用特权

评论回复
7
yklstudent| | 2013-8-9 13:34 | 只看该作者
楼主的程序能编译通过 真是能扯 PIC18F2520根本就没有PORTD引脚  自然也就不会有TRISD的

使用特权

评论回复
8
WXJPCY888|  楼主 | 2013-8-9 13:54 | 只看该作者
弓长月月鸟 发表于 2013-8-9 13:21
建议楼主此处先不要关闭TMR0定时器,RD0 = !RD0; 试试该端口会不会出现方波再说。 ...

感谢张鹏的建议!

使用特权

评论回复
9
WXJPCY888|  楼主 | 2013-8-9 13:57 | 只看该作者
yklstudent 发表于 2013-8-9 13:34
楼主的程序能编译通过 真是能扯 PIC18F2520根本就没有PORTD引脚  自然也就不会有TRISD的  ...

多谢参与!原来用的是pic18f4520程序调试不行,后改为pic18f2520也不行,实在蛋疼。。。

使用特权

评论回复
10
WXJPCY888|  楼主 | 2013-8-9 14:00 | 只看该作者
yklstudent 发表于 2013-8-9 13:01
先确定MCU有没有在跑 再谈其他

感谢参与!MCU确实在跑

使用特权

评论回复
11
WXJPCY888|  楼主 | 2013-8-9 14:04 | 只看该作者
NE5532 发表于 2013-8-9 13:10
没效果是什么意思?咱是工程师,不能学老百姓描述问题啊,要说清楚什么现象。 ...

多谢版主!现象是电路板一上电端口就有输出,用示波器抓不到延时的时间,没有延时效果。。。

使用特权

评论回复
12
yklstudent| | 2013-8-9 14:14 | 只看该作者
WXJPCY888 发表于 2013-8-9 14:00
感谢参与!MCU确实在跑

你说的RD0延时2s  程序中哪里能体现????

使用特权

评论回复
13
WXJPCY888|  楼主 | 2013-8-9 14:27 | 只看该作者
yklstudent 发表于 2013-8-9 14:14
你说的RD0延时2s  程序中哪里能体现????

你好!yklstudent ,中断一次需要200us,计数器计到10000刚好是2s.
void PIC18F_High_isr (void)    /*每进入中断需要200us*/
{                     
  intnum++;           /*计数器加一*/
  TMR0L=20;           /*TMR0重新置初值*/
  INTCONbits.TMR0IF=0;/*中断标志位清零*/          
}
void scanf()
{
        if(intnum==10000)       /*如果2秒到*/
        {
                intnum=0;           /*计数器清零*/
                  RD0=1;              /* 输出高电位*/       
                  //T0CONbits.TMR0ON=0;        /*关闭TMR0定时器*/
        }
       
}

使用特权

评论回复
14
WXJPCY888|  楼主 | 2013-8-9 14:35 | 只看该作者
WXJPCY888 发表于 2013-8-9 13:54
感谢张鹏的建议!

多谢你张鹏,我用示波器按照你说的方法測试有2s的方波(不标准)和高电平5V,如果让端口置1,它就直接输出,没有延时,真蛋疼。。。

使用特权

评论回复
15
NE5532| | 2013-8-9 14:39 | 只看该作者
WXJPCY888 发表于 2013-8-9 14:04
多谢版主!现象是电路板一上电端口就有输出,用示波器抓不到延时的时间,没有延时效果。。。 ...

看楼主还没学会描述现象的科学方法,一上电就输出了什么??你想看到什么现象?

使用特权

评论回复
16
WXJPCY888|  楼主 | 2013-8-9 14:45 | 只看该作者
NE5532 发表于 2013-8-9 14:39
看楼主还没学会描述现象的科学方法,一上电就输出了什么??你想看到什么现象? ...

本人愚昧,请包涵,我的意思是一上电秒针走两个刻度后,RA0端口输出高电平5V,

使用特权

评论回复
17
NE5532| | 2013-8-9 14:58 | 只看该作者
WXJPCY888 发表于 2013-8-9 14:45
本人愚昧,请包涵,我的意思是一上电秒针走两个刻度后,RA0端口输出高电平5V, ...

那我再帮你翻译一下,你想上电以后,RA0先输出为低,2秒以后输出为高对吧。

那单片机上电以后,RA0的状态是什么呀?我好像没看到你输出低电平的代码呢??

使用特权

评论回复
18
WXJPCY888|  楼主 | 2013-8-9 15:14 | 只看该作者
NE5532 发表于 2013-8-9 14:58
那我再帮你翻译一下,你想上电以后,RA0先输出为低,2秒以后输出为高对吧。

那单片机上电以后,RA0的状 ...

多谢版主的点拨,在程序初始化时加了RD0=0;再重新烧写就OK了,您不愧是大侠呀,我好崇拜您!!!给您加分!

使用特权

评论回复
19
NE5532| | 2013-8-9 15:21 | 只看该作者
WXJPCY888 发表于 2013-8-9 15:14
多谢版主的点拨,在程序初始化时加了RD0=0;再重新烧写就OK了,您不愧是大侠呀,我好崇拜您!!!给您加分 ...

呵呵,所以很多时候问题并不复杂,说清楚自己要干什么,可以解决很多问题。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
WXJPCY888 + 3 很给力!
20
tergy2012| | 2013-8-9 16:56 | 只看该作者
谢谢分享啊

使用特权

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

本版积分规则

8

主题

134

帖子

0

粉丝