在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)CCS之C語(yǔ)言(#BIT的用法)

            PIC單片機(jī)CCS之C語(yǔ)言(#BIT的用法)

            作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
            #BIT

            語(yǔ)法: #bit id=x.y

            本文引用地址:http://www.biyoush.com/article/201611/315392.htm

            id是一個(gè)有效的C標(biāo)識(shí)符;

            x是一個(gè)常數(shù)或是一個(gè)C變量;

            y是一個(gè)常數(shù)(為0~7)

            目的:創(chuàng)建一個(gè)新的C變量(是一位),放置在存儲(chǔ)區(qū)中,對(duì)應(yīng)的是字節(jié)x中y位,有益于在C語(yǔ)言中只接存取CPU特殊功能寄存器中的一位.它也可用來(lái)存取標(biāo)準(zhǔn)C變量的一位.

            例子:

            #bit T0IF = 0xb.2 //定義T0IF的位地址為0xb.2

            T0IF=0; //清除Timer0的中斷標(biāo)志位

            int result;

            #bit result_odd = result.0 //定義result_odd的位地址為result.0

            if(result_odd){;} //若result_odd為1,則空操作

            例子文件: ex_glint.c

            #if defined(__PCM__) //若使用了PCM編譯器,則defined(__PCM__)返回值為1

            #include <16F877.h> //包含16F877.h頭文件

            #fuses HS,NOWDT,NOPROTECT,NOLVP //HS:高速晶振/諧振器, NOWDT:不使用WDT

            // NOPROTECT:程序存儲(chǔ)器代碼不保護(hù)

            #use delay(clock=20000000) //使能內(nèi)置函數(shù)的功能:delay_ms()和delay_us()

            //#USE DELAY()必須在#use rs232()使用之前出現(xiàn).

            #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) //使用波特率為9600,

            //發(fā)送腳為PIN_C6

            //接收腳為PIN_C7

            //使能內(nèi)置函數(shù):GETC,PUTC和PRINTF;

            #elif defined(__PCH__)

            #include <18F452.h>

            #fuses HS,NOWDT,NOPROTECT,NOLVP

            #use delay(clock=20000000)

            #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

            #endif //結(jié)束if

            long counter; //將counter定義為long型變量

            #if defined(__PCM__) //若使用了PCM編譯器,則defined(__PCM__)返回值為1

            int save_w; //將save_w定義為int型變量

            #locate save_w=0x7f //將save_w定位在RAM中,0x7f的地址處, 用來(lái)暫存W的內(nèi)容

            int save_status; //將save_status定義為int型變量, 用來(lái)暫存status的內(nèi)容

            #locate save_status=0x20 //將save_status定位在RAM中, 0x20的地址處,

            #byte status = 3 //定義status的地址為3,即狀態(tài)寄存器的地址

            #bit zero_flag = status.2 //定義zero_flag的位地址為status.2,即status的Z位

            #bit t0if = 0xb.2 //定義t0if的位地址為0xb.2,即timer0的溢出標(biāo)志位

            #elif defined(__PCH__)

            int save_w;

            #locate save_w=0x80

            int save_status;

            #locate save_status=0xFF

            #byte status = 0xFD8

            #bit zero_flag = status.2 //status的全0位,即Z

            #bit t0if = 0xFF2.2

            #endif //結(jié)束if

            #INT_GLOBAL //指示下面的函數(shù)代替編譯器產(chǎn)生中斷

            void isr() {

            #asm //插入?yún)R編開(kāi)始

            //store current state of processor

            MOVWF save_w //將W的內(nèi)容存到save_w中,目的是保存W,即將W入棧

            SWAPF status,W //將status內(nèi)容高半字節(jié)和低半字節(jié)進(jìn)行交換,存入W中

            BCF status,5 //將status的第5位清0,即將RP0=0

            BCF status,6 //將status的第6位清0, 即將RP1=0,兩句是用來(lái)選擇bank0

            MOVWF save_status //將W的內(nèi)容存到save_status中,目的是保存status,即將status入棧

            BCF t0if //將timer0的中斷標(biāo)志位t0if清0

            INCF counter,F // counter加1后存到counter

            BTFSC zero_flag //若counter不等于0x00, 則zero_flag=0,跳過(guò)下一句;

            //若counter=0x00,zero_flag=1,則執(zhí)行下一句;

            INCF (&counter+1),F // counter的地址加1, (&counter+1)的內(nèi)容加1

            SWAPF save_status,W //將save_status內(nèi)容高半字節(jié)和低半字節(jié)進(jìn)行交換,存入W中

            MOVWF status //將W的內(nèi)容存到status中, status出棧

            SWAPF save_w,F //將save_w內(nèi)容高半字節(jié)和低半字節(jié)進(jìn)行交換,其結(jié)果存入save_w中

            SWAPF save_w,W //將save_w內(nèi)容高半字節(jié)和低半字節(jié)進(jìn)行交換,存入W 中, W出棧

            #endasm //插入?yún)R編結(jié)束

            }

            void main() {

            printf("rnStarting the counter.rnn");

            counter = 0;

            setup_counters(RTCC_INTERNAL,RTCC_DIV_32); //設(shè)置Timer0的時(shí)鐘源為內(nèi)部時(shí)鐘源

            //每隔32個(gè)脈沖,TMR0計(jì)數(shù)1次

            enable_interrupts(INT_RTCC); //允許Timer0(RTCC)溢出,建立中斷標(biāo)志位

            enable_interrupts(GLOBAL); //使能總中斷

            while(TRUE)

            {

            printf("The counter value is currently: %5lurn", counter);

            delay_ms(1000); //延時(shí)1000ms

            }

            }

            //上面的例子只是說(shuō)明用timer0對(duì)內(nèi)部時(shí)鐘源進(jìn)行32分頻后計(jì)數(shù).



            關(guān)鍵詞: PIC單片機(jī)CCSBI

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉