| 
 
| 本帖最后由 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();                   /*扫描函数*/
 }
 }
 | 
 评分
查看全部评分
 |