在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)CCS之C語言(#BYTE的用法)

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

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

            語法: #byte id=x

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

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

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

            目的:如果id是一個(gè)已知C的變量,那么它將定位在地址x處,在這種情況下,變量類型的最初定義不會(huì)被改變.若id不是已知的C變量,則利用#byte id=x就可創(chuàng)建一個(gè)新的C變量,且放在地址x處,類型為整型(8位).

            主意:在兩個(gè)不同的存儲區(qū)里,x不是唯一對應(yīng)這個(gè)變量(id)的地址.其它變量可能和它擁有相同的地址.實(shí)際上,當(dāng)x是一個(gè)變量時(shí),那么id和x就共享有相同的地址存儲單元.

            例子:

            #byte status=3 //定義status的地址為3

            #byte b_port=6 //定義b_port的地址為6

            struct{

            short int r_w; //定義位變量

            short int c_d; //定義位變量

            int unused :2; //保留兩位

            int data :4; //保留4位

            }a_port //將a_port定義為結(jié)構(gòu)變量, r_w對應(yīng)a_port.0, c_d對應(yīng)a_port.1

            #byte a_port=5 //定義a_port的地址為5,即端口RA口

            a_port.c_d=1;

            例子文件: ex_glint.c

            #DEFINE

            語法: #define id text

            or

            #define id(x,y…) text

            id是一個(gè)預(yù)處理器標(biāo)識符;text是任意字符文字;x,y等是被定位于預(yù)處理器中的標(biāo)識符,在這中形式下,有一個(gè)或更多的標(biāo)識符被逗號隔開.

            目的:利用簡單的字符來規(guī)定代替id,這個(gè)所給的字符來自于程序指針.

            在第二種形式下,原來的標(biāo)識符要同text中的那個(gè)簡單的標(biāo)識符相匹配,用text代替原來的標(biāo)識符;

            如果text包含#idx形式的字符,那么賦值后的結(jié)果是參數(shù)id和字符x連接;

            如果text包含idx##idy形式的字符,那么參數(shù)idx就和參數(shù)idy連接形成一個(gè)新的標(biāo)識符;

            例子: #define BITS 8 //用BITS代替8

            a=a+BITS; //相當(dāng)于a=a+8

            #define hi(x) (x<<4) //將(x<<4) 用hi(x) 代替

            a=hi(a); //相當(dāng)于a=(a<<4)

            例子文件:ex_stwt.c, ex_macro.c

            文件:ex_stwt.c如下:

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

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

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

            // NOPROTECT:程序存儲器代碼不保護(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) // Jumpers: 8 to 11, 7 to 12

            #endif //結(jié)束if

            #define INTS_PER_SECOND 76 // (20000000/(4*256*256)) 用INTS_PER_SECOND代替76

            BYTE seconds; //秒計(jì)數(shù)器,1秒=(4/20000000)*256*256* INTS_PER_SECOND

            BYTE int_count; // 在1秒未到之前,還要經(jīng)過多少次中斷,才夠1秒;

            #int_rtcc //Timer0(RTCC)溢出, 指定下面的函數(shù)是一個(gè)中斷服務(wù)函數(shù)

            void clock_isr() { // the RTCC (timer0) overflows (255->0),For this program this is apx 76 times

            if(--int_count==0) { // per second.

            ++seconds; //1秒到, seconds加1;

            int_count=INTS_PER_SECOND; ////給int_count賦初值

            }

            }

            void main() {

            BYTE start;

            int_count=INTS_PER_SECOND; //給int_count賦初值

            set_timer0(0); //設(shè)定實(shí)時(shí)時(shí)鐘/計(jì)數(shù)器的計(jì)數(shù)初值

            setup_counters( RTCC_INTERNAL, RTCC_DIV_256 | RTCC_8_BIT);

            //設(shè)置Timer0的時(shí)鐘源為內(nèi)部時(shí)鐘源

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

            //在PIC18XXXX中,RTCC_8_BIT設(shè)置Timer0為8位定時(shí)器方式;

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

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

            do {

            printf("Press any key to begin.nr");

            getc(); //從RS232口讀入1個(gè)字符

            start=seconds;

            printf("Press any key to stop.nr");

            getc(); //從RS232口讀入1個(gè)字符

            printf("%u seconds.nr",seconds-start);

            } while (TRUE);

            }

            上面的文件是利用Timer0采用內(nèi)部指令周期作為時(shí)鐘源,再256分頻,構(gòu)成1秒發(fā)生齊器.

            文件: ex_macro.c如下:

            #define BUFFERSIZE 10 //用BUFFERSIZE代替10

            #define BUFFER_EMPTY (next_in==next_out)

            //用BUFFER_EMPTY代替表達(dá)式(next_in==next_out)

            #define min(x,y) ((x

            #define max(x,y) ((x>y)?x:y) //用max(x,y)代替表達(dá)式((x>y)?x:y) ,若x>y,則返回x

            #define forever while(1); //用forever代替表達(dá)式while(1)

            #define MHZ(x) x##000000 //用MHZ(x)代替x##000000

            #ifndef __PCB__ //若沒有定義__PCB__,則執(zhí)行下面的語句;

            #define NORMAL_RS232 baud=9600, xmit=PIN_C6, rcv=PIN_C7 //

            #else //若有定義__PCB__,則執(zhí)行下面的語句;

            #define NORMAL_RS232 baud=9600, xmit=PIN_B1, rcv=PIN_B0

            #endif //結(jié)束if定義

            #define set_options(value) {#ASM

            MOVLW value

            OPTION

            #ENDASM}

            #define debug(x) printf("%s variable value is %drn",#x,x);

            //用debug(x)代替printf("%s variable value is %drn",#x,x);;

            #define TOSTRING(s) #s //用TOSTRING(s)代替#s

            #define DEVICE_FILE_FOR(chip) TOSTRING(chip##.h)

            #ifdef __pcb__ //若有定義__PCB__,則執(zhí)行下面的語句;

            #define IDLE {if(kbhit()) isr();} //用IDLE代替{if(kbhit()) isr();}

            //若getc()讀到數(shù)據(jù),則kbhit()返回1,否則, kbhit()返回0

            #else //若沒有定義__PCB__,則執(zhí)行下面的語句;

            #define IDLE ; //用IDLE代替; ;

            #endif //結(jié)束if定義

            #include DEVICE_FILE_FOR(16C74) //包含16C74.h頭文件

            #fuses HS,NOPROTECT //HS:高速晶振/諧振器, NOPROTECT:程序存儲器代碼不保護(hù)

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

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

            #use RS232(NORMAL_RS232) //使用波特率為9600,

            //發(fā)送腳為PIN_C6

            //接收腳為PIN_C7

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

            int buffer[BUFFERSIZE]; //聲明buffer[10]數(shù)組

            int next_in, next_out; //聲明整型變量next_in和next_out

            #ifndef __pcb__ //若沒有定義__PCB__,則執(zhí)行下面的語句;

            #int_rda //RS232接收到的數(shù)據(jù)有用,指定下面的函數(shù)是一個(gè)中斷函數(shù)

            #endif //結(jié)束if定義

            void isr() {

            buffer[next_in]=getc(); //從RS232口讀數(shù)據(jù)

            next_in=(next_in+1)%BUFFERSIZE; //將next_in加1后,除以10,將商賦給next_in

            }

            void main() {

            int x, largest; //聲明整型變量x和largest

            set_options(0x34); //用匯編設(shè)置option寄存器,將預(yù)分頻器留給Timer0使用

            //分頻比為1:32, Timer0的時(shí)鐘源選擇外部時(shí)鐘;

            // Timer0在下降沿遞增計(jì)數(shù);INT腳電平下降沿觸發(fā)中斷

            //使能GPIO上拉

            #ifndef __pcb__ //若沒有定義__PCB__,則執(zhí)行下面的語句;

            enable_interrupts(INT_RDA); //使能UART接收中斷

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

            #endif //結(jié)束if定義

            next_in=next_out=0; //初始化變量next_in 和next_out

            largest=0; //初始化變量largest

            do {

            while(BUFFER_EMPTY) //當(dāng)next_in=next_out時(shí)

            IDLE; //若定義__PCB__,則用IDLE代替{if(kbhit()) isr();}

            //若getc()讀到數(shù)據(jù),則kbhit()返回1,否則, kbhit()返回0

            //若沒有定義__PCB__,則用IDLE代替;

            x=buffer[next_out];

            next_in=(next_out+1)%BUFFERSIZE; //將next_out加1后,除以10,將商賦給next_in

            largest = max(largest,x); //求最大值

            debug(next_in); //用debug(x)代替printf("%s variable value is %drn",#x,x);;

            debug(next_out) //用debug(x)代替printf("%s variable value is %drn",#x,x);;

            } forever; //用forever代替表達(dá)式while(1)

            }上面的例子是通過UART接收10個(gè)數(shù)據(jù),求其最大值



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

            評論


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

            關(guān)閉