音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

求教mega8用中斷同時實現(xiàn)ADC和UART時出現(xiàn)的問題

作者:xinjie1023 欄目:單片機
求教MEGA8用中斷同時實現(xiàn)ADC和UART時出現(xiàn)的問題
    AVR高手,我在天河雙龍的MEGA8開發(fā)板上把ADC和UART兩個功能用中斷實現(xiàn)時出現(xiàn)怪問題(準確得說是UART的接收,ADC轉(zhuǎn)換完成用中斷,在中斷前單片機工作在空閑模式。),下面使我的程序,我說一下我碰到的現(xiàn)象:對ADC初始化時的ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADIE)|(1<<ADSC);這句話中的1<<ADIE出現(xiàn)問題,沒有這句話時程序可以受到sleep語句的影響,但是開了ADC轉(zhuǎn)換結(jié)束的使能中斷后,好像就不行了,我讓程序循環(huán)4次,有了那句話,從第二次循環(huán)開始sleep語句就不起作用了。請高手指點。
    還有我看了別人帖子怎么不能回復呢?

#include <iom8v.h>
#include <macros.h>
#define fosc 8000000 //晶振8MHZ
#define baud 19200     //波特率
#define osc_address   0x1ff0
unsigned int adc_rel;//AD轉(zhuǎn)換結(jié)果
unsigned int adcd_rel;//AD轉(zhuǎn)換結(jié)果的模擬化
unsigned CHAR adc_mux;//AD通道
unsigned int adc_flag;
#define osccal 0x7d//內(nèi)部RC校正常數(shù)
#define Vref   5//參考電壓值
//ADC完成中斷
#pragma interrupt_handler adc_isr:iv_ADC     
void adc_isr(void)
{
adc_rel=ADC&0x3ff; //得到轉(zhuǎn)換結(jié)果
}

#pragma interrupt_handler Reciverdata:12
//extern unsigned CHAR read_flash(unsigned int add);

/*  字符輸出函數(shù)      */
void putCHAR(unsigned CHAR c)
    {     
     while (!(UCSRA&(1<<UDRE)));//測到當前發(fā)出寄存器為空時則發(fā)出新數(shù)據(jù)
    UDR=c;    
    }
/*字符串輸出函數(shù)(人為加回車換行)   */    
int puts(CHAR *s)
    {
    while (*s)
        {
        putCHAR(*s);
        s++;
        }    
    putCHAR(0x0a);//回車換行
    putCHAR(0x0d);
    return 1;
    }
/* 不含回車換行的字符串輸出函數(shù)  */    
void putstr(CHAR *s)
    {
    while (*s)
        {
        putCHAR(*s);
        s++;
        }    
    }    

/*  字符輸入函數(shù) */    
unsigned CHAR getCHAR(void)
      {
     while(!(UCSRA& (1<<RXC)));  //如果測到接收結(jié)束則執(zhí)行下面條語句
     return UDR;
    }    
    
//ADC結(jié)果轉(zhuǎn)換成電壓值
void ADCtoBCD(unsigned int TEMP)
{
// TEMP=(unsigned int)(((unsigned LONG)((unsigned LONG)TEMP*Vref))/0x3ff);
}

void adc_init(void)
{
DDRC=0x00;  //選擇C口的方向,1為輸出
PORTC=0x00; //輸入0,關(guān)閉上拉電阻
ADCSRA = 0x00; //P194,
ADMUX =(1<<REFS0)|(adc_mux&0x0f);//選擇內(nèi)部AVCC為基準P192
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADIE)|(1<<ADSC);//64分頻
}//ADC啟動,啟動一次ADC轉(zhuǎn)換,中斷使能


//接受串口來的數(shù)據(jù)
void Reciverdata(void)
{
   unsigned CHAR i;
             int j;
     i=getCHAR();
       {
        putstr("當前按鍵是:");
        putCHAR(i);
        putCHAR(0x0a);
        putCHAR(0x0d);
        j=i-0x30;
        if((j>=0)&&(j<=3))
        {
        adc_flag=1;
        puts("進入AD轉(zhuǎn)換");
        adc_mux=j;
        }
        else
         {
         puts("無此通道1");
         adc_flag=0;
         }
       }     
}

/*UART初始化*/    
void uart_init(void)
{
// OSCCAL=read_flash(osc_address);//????????
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允許發(fā)送和接收
UBRRL=(fosc/16/(baud+1))%256;
UBRRH=(fosc/16/(baud+1))/256;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位數(shù)據(jù)+1位STOP位
  
}

/*RS232通信main函數(shù)*/
void main(void)
{
unsigned CHAR sd;
OSCCAL=osccal;//校正振蕩頻率
  ACSR  =(1<<ACD);//關(guān)閉模擬比較器
  uart_init();
  SREG=0X80;
  MCUCR=(1<<SE);
  asm("sleep");
  MCUCR=(0<<SE);
for(sd=0;sd<4;sd++)   //循環(huán)4次是為了測試SLLEP的作用以及程序流程的正確性
{
puts("廣州天河雙龍電子公司RS232通信演示程序");
puts("HTTP://WWW.SL.COM.CN");
puts("MAIL TO:sllg@sl.com.cn");
  adc_flag=0;
  MCUCR=(1<<SE);
  asm("sleep");
  MCUCR=(0<<SE);
  puts("測試休眠轉(zhuǎn)換1");
  MCUCR=(1<<SE);
  asm("sleep");
  MCUCR=(0<<SE);
  puts("再次測試休眠11");
  if((adc_mux>=0)&&(adc_mux<=3)&&(adc_flag==1))
  {     
        adc_flag=0;
    adc_init(); //ADC初始化,就是這里面開中斷出現(xiàn)問題
    MCUCR=(1<<SE);
        asm("sleep");
    MCUCR=(0<<SE);
        puts("測試休眠轉(zhuǎn)換2");
        
        
   }
   else{puts("此次無正確按鍵");
   }
}
}



參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
我是新手,現(xiàn)在想用AVR驅(qū)動液晶,咋就不行呢?
一塊做工暴臭的小PCB
請問ATMEGA128仿真器輸出頭的定義和引腳的對應關(guān)系
如何拯救熔絲位配置錯了的AVR芯片?
請問用ATMEGA128仿真器怎么樣仿ATMEGA8的芯片
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號