在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            avr中斷使用例子

            作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
            在ICCAVR下,用以下語句可定義中斷程序
            #pragma interrupt_handler 函數(shù)名:中斷向量
            要注意不同的AVR芯片的中斷向量是不同的,因此在ICCAVR下編譯,除了要在程序上注明芯片的類型外,還要在PROJECT的OPTION頁選擇正確的芯片,否則有可能導(dǎo)致程序運(yùn)行不正常;而GCC只要在MFILE里面選定芯片型號就可以,GCC在這點(diǎn)上的使用比ICCAVR的方便。
            附:定時(shí)器1溢出中斷例子,每溢出一次就令i自加1,然后在LCD1602上顯示出來
            ------------------------------------------------------------------------------------------------
            #include
            #include
            #pragma interrupt_handler ANA_COMP:10 //定時(shí)器1溢出中斷
            #define uchar unsigned char
            #define uint unsigned int
            #define LcdBus PORTA
            #define rs 2 //LCD端口定義
            #define rw 3
            #define en 4


            void LcdIni(void);
            void WrOp(uchar dat);
            void WrDat(uchar dat);
            void ChkBusy(void);
            void DisText(uchar addr,uchar *text);
            void DisTextConst(uchar addr,uchar const *text);
            void ShowNum(uchar addr,uint num); //在addr處顯示數(shù)字num
            int AdcVal(uchar n);
            void delayms(uint n);
            int AdcValPro(uchar n);
            void ANA_COMP(void);

            char BCD[6]; //十位二進(jìn)制的顯示碼分別是千百十個(gè)位的顯示
            int Adc[3]; //存放Adc轉(zhuǎn)換后的值
            int i=0;
            void main(void)
            {
            LcdIni();
            TIMSK=0X04;
            TCNT1H=0XFF;
            TCNT1L=0X00;
            TCCR1A=0X00;
            TCCR1B=0X01;
            SEI(); //允許全局中斷
            while(1);
            }

            void ANA_COMP(void)
            {//中斷處理程序,溢出時(shí)就令i增加1
            TCNT1H=0XFF;
            TCNT1L=0X00;
            ShowNum(0x82,i++);
            }

            int AdcVal(uchar n)
            {//軟件濾波
            uchar i,k;
            uint tmp=0;
            for(i=0;i<20;i++)
            tmp=(tmp+AdcValPro(n))/2;
            k=tmp>Adc[n] ? (tmp-Adc[n]):(Adc[n]-tmp);
            Adc[n]=k>0 ? tmp:Adc[n];
            return Adc[n];
            }

            int AdcValPro(uchar n)
            {//返回第N個(gè)ADC的值從0到7
            uchar dat1,dat0;
            int val;
            DDRA &=~BIT(n); //設(shè)置對應(yīng)的ADC口為輸入
            PORTA &=~BIT(n);
            ADMUX=0x40+n; //選擇AVCC,選擇第N個(gè)ADC
            ADCSRA=0xc0; //允許轉(zhuǎn)換ADEN,ADSC
            while(ADCSRA & BIT(ADSC)); //
            dat1=ADCH;
            dat0=ADCL;
            val=ADCH*256+ADCL;
            return val;
            }

            void ShowNum(uchar addr,uint num) //在addr處顯示數(shù)字num
            {//將num轉(zhuǎn)化成五個(gè)BCD碼存放在全局?jǐn)?shù)組BCD[5]中
            uchar i;
            for(i=5;i>0;i--) //將NUM數(shù)據(jù)轉(zhuǎn)化成ASCII碼,如521會(huì)轉(zhuǎn)化為00521
            {
            BCD[i-1]=(uchar)(num%10+0x30); //取出最低位
            num/=10; //去掉最低位
            }
            i=0;
            while(BCD[i] ==0x30 && i<4) BCD[i++]= ; //NUM轉(zhuǎn)換成數(shù)組存放,但還沒有加上小數(shù)點(diǎn)
            BCD[5]=