搜索
bottom↓
回复: 2

在编写atmega32程序中遇到的问题

[复制链接]

出0入0汤圆

发表于 2014-11-11 17:58:50 | 显示全部楼层 |阅读模式
  哈哈新手哈,以前一直用的是51单片机,现在学习avr做一个测试工装,用atmega32A单片机做的,用的外部中端执行程序的方式,但是在执行的时候发现,程序在中断中没有执行完就跳出中断了,是什么原因啊,求指教,以下是编写的程序;






//ICC-AVR application builder : 2014-07-15 9:48:44
// Target : M32
// Crystal: 8.0000Mhz

#include <iom32v.h>
#include <macros.h>
#define  TW            PIND&PD1      
#define  HW            PIND&PD0      
#define  SGZGJ         PINB&PB3      
#define  DX            PIND&PD5      
#define  FT            PIND&PD6      
#define  TESTING       PORTD=(1<<PA4)
void Delay_us(unsigned int time)
{
while(time--);
}
void Delay_ms(unsigned int time)   //延时1ms
{
while(time--)
        {
        Delay_us(1000);
        }
}     
void st(void)
{
         PORTA=~(1<<PA1);
         PORTA=~(1<<PA2);
         _NOP();
         PORTA=(1<<PA0);
         Delay_ms(1000);
         PORTA=~(1<<PA0);
}

void bt(void)
{
         PORTA=~(1<<PA0);
         PORTA=~(1<<PA2);
         _NOP();
         PORTA=(1<<PA1);
         Delay_ms(1000);
         PORTA=~(1<<PA1);
}

void hzr(void)
{
         PORTA=~(1<<PA1);
         PORTA=~(1<<PA0);
         _NOP();
         PORTA=(1<<PA2);
         Delay_ms(1000);
         PORTA=~(1<<PA2);
}

void ng(void)
{
  PORTA=(1<<PA6);
  PORTD=(1<<PD4);
  PORTA=~((1<<PA1)|(1<<PA0)|(1<<PA2)|(1<<PA3));
  PORTD=~(1<<PA4);
}
void port_init(void)
{
PORTA = 0x00;
DDRA  = 0xDF;
PORTB = 0x00;
DDRB  = 0x00;
PORTC = 0x00;
DDRC  = 0x00;
PORTD = 0x04;
DDRD  = 0x10;
}

#pragma interrupt_handler int0_isr:2        
void int0_isr(void)                 //中断函数
{
   port_init();
   PORTD=(1<<PA4);
   Delay_ms(500);
   if(DX==1)
   {
   PORTA=(1<<PA3);
   Delay_ms(500);
   if(DX==0)
     {
           hzr();
           Delay_ms(500);
           if(TW==0&HW==1&SGZGJ==0&DX==0)
           {
                    st();
                 Delay_ms(500);
                 if(TW==1&HW==0&SGZGJ==0&DX==0)
                 {
                          hzr();
                        Delay_ms(500);
                        bt();
                        Delay_ms(500);
                        if(TW==1&SGZGJ==1&HW==0&DX==0)
                           {
                                    if(FT==1)  //带防跳
                                {
                                   PORTA=~(1<<PA1);
                                 PORTA=~(1<<PA0);
                                 _NOP();
                                 PORTA=(1<<PA2);
                                Delay_ms(500);
                                PORTA=(1<<PA0);
                                Delay_ms(1000);
                                PORTA=~(1<<PA0);
                                if(TW==1&SGZGJ==1&HW==0&DX==0)
                                {
                                 PORTA=(1<<PA7);
                                 PORTA=~(1<<PA2);
                                 PORTA=~(1<<PA0);
                                }
                                else{ng();}
                                }
                               
                                if(FT==0)   //不带防跳
                                {
                                PORTA=~(1<<PA1);
                                 PORTA=~(1<<PA0);
                                 _NOP();
                                 PORTA=(1<<PA2);
                                Delay_ms(500);
                                PORTA=(1<<PA0);
                                Delay_ms(1000);
                                PORTA=~(1<<PA0);
                                if(TW==0&SGZGJ==0&HW==0&DX==1)
                                {
                                 PORTA=(1<<PA7);
                                 PORTA=~(1<<PA2);
                                 PORTA=~(1<<PA0);
                                }
                                else{ng();}
                               
                                }
                               
                               
                           }
                        else{ng();}
                       
                       
                 }
                 else{ng();}
                 
           }
           else{ng();}
          
             
     }
         else{ng();}
   
   }
   else{ng();}
   
   

}

//call this routine to initialize all peripherals
void init_devices(void)         //中断使能函数
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
GICR  = 0x40;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}

void main(void)
{
port_init();
init_devices();                 //TART初始化
SEI();                       //全局中断使能
while(1)
     {
         
         }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-11-11 18:22:36 | 显示全部楼层
&??    &&??

出0入0汤圆

 楼主| 发表于 2014-11-15 13:14:49 | 显示全部楼层

的确是这样的  呵呵  自己太不小心了  
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 04:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表