<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          PIC單片機(jī)CCS之C語言(#INT_XXXX的應(yīng)用)

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

          語法: #INT_AD //AD轉(zhuǎn)換完成

          本文引用地址:http://www.ex-cimer.com/article/201611/315398.htm

          #INT_ADOF //AD轉(zhuǎn)換時(shí)間溢出

          #INT_BUSCOL //總線沖突

          #INT_BUTTON //按鈕

          #INT_CCP1 //捕獲或比較器1

          #INT_CCP2 //捕獲或比較器1

          #INT_COMP //比較器探測(cè)

          #INT_EEPROM //EEPROM寫完成

          #INT_EXT //外部中斷

          #INT_EXT1 //外部中斷1

          #INT_EXT2 //外部中斷2

          #INT_I2C //I2C中斷(只用于14000)

          #INT_LCD //LCD行動(dòng)

          #INT_LOWVOLT //低電壓探測(cè)

          #INT_PSP //并行端口PSP數(shù)據(jù)輸入

          #INT_RB //端口B在B4~B7的電平變化

          #INT_RC //端口C在C4~C7的電平變化

          #INT_RDA //RS232接收到的數(shù)據(jù)有用, 使能UART接收中斷

          #INT_RTCC //Timer0(RTCC)溢出

          #INT_SSP //SPI口或I2C被激活

          #INT_TBE //RS232發(fā)送緩沖區(qū)是空的

          #INT_TIMER0 //Timer0(RTCC)溢出

          #INT_TIMER1 //Timer1溢出

          #INT_TIMER2 //Timer2溢出

          #INT_TIMER3 //Timer3溢出

          注意:大多數(shù)#INT_options在指定的芯片上是有用的. 在devices.h文件中,檢查所給芯片的全部列表.

          目的:這些指令指定下面的函數(shù)是一個(gè)中斷服務(wù)函數(shù),中斷函數(shù)可以沒有任何參數(shù).不是所有指令都可用于所有的元件,為了獲得元件的有效中斷,請(qǐng)參閱devices.h文件或在PCW中,點(diǎn)擊VIEW|Valid ints也可查得有哪些中斷.

          當(dāng)中斷被檢測(cè)到時(shí),編譯器將產(chǎn)生代碼跳到中斷服務(wù)函數(shù).它將產(chǎn)生代碼來存儲(chǔ)或重新存儲(chǔ)機(jī)器狀態(tài),并且清除中斷標(biāo)志位.為了防止標(biāo)志位被清除,請(qǐng)?jiān)?INT_XXXX后面添加NOCLEAR語句即可.

          ENABLE_INTERRUPTS(INT_XXXX)在中斷前初始化時(shí)要被激活,并且ENABLE_INTERRTUPTS(GLOBAL)也要使能中斷,才可進(jìn)入中斷.

          關(guān)鍵字HIGH和FAST可用于PCH編譯中,用來標(biāo)志高中斷優(yōu)先權(quán).一個(gè)高優(yōu)先權(quán)的中斷可在另一中斷正在進(jìn)行的情況下產(chǎn)生中斷.一個(gè)標(biāo)有FAST中斷在執(zhí)行時(shí),它不存儲(chǔ)或重新存儲(chǔ)任何寄存器,這就要你盡可能地存儲(chǔ)你自己需要的存儲(chǔ)器.標(biāo)有HIGH的中斷能夠正常使用.在建立高優(yōu)先權(quán)中斷時(shí),請(qǐng)參閱#DEVICE以獲取更多的信息.

          例子:#int_ad

          adc_handler(){

          adc_active=FALSE;

          }

          #int_rtcc noclear

          isr(){

          }

          例子文件:參閱ex_sisr.c和ex_stwt.c以獲取完全的例子

          文件: ex_stwt.c在前面已經(jīng)介紹過了,這里不再重述

          文件: ex_sisr.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, kbhit();

          #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 BUFFER_SIZE 32 //用BUFFER_SIZE代替32

          BYTE buffer[BUFFER_SIZE]; //聲明字符型數(shù)組buffer[BUFFER_SIZE]

          BYTE next_in = 0; //聲明字符型變量next_in,并賦初值為0

          BYTE next_out = 0; //聲明字符型變量next_out,并賦初值為0

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

          void serial_isr() {

          int t; //聲明整型變量t;

          buffer[next_in]=getc(); //從RS232接口讀1個(gè)字節(jié),存到數(shù)阻buffer[]中

          t=next_in; //將next_in賦給暫態(tài)變量t

          next_in=(next_in+1) % BUFFER_SIZE; //%用來求余數(shù)

          if(next_in==next_out)

          next_in=t; // Buffer full !!

          }

          #define bkbhit (next_in!=next_out) //用bkbhit代替表達(dá)式(next_in!=next_out);

          BYTE bgetc() {

          BYTE c; //聲明字符型變量c;

          while(!bkbhit) ; //當(dāng)next_in=next_out時(shí),空操作,等待next_in不等于next_out

          c=buffer[next_out];

          next_out=(next_out+1) % BUFFER_SIZE; //%用來求余數(shù)

          return(c); //函數(shù)返回暫態(tài)變量c的值,并退出該函數(shù)

          }

          void main() {

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

          enable_interrupts(int_rda); //使能UART在接收到1個(gè)字節(jié)時(shí),中斷允許

          printf("rnRunning...rn");

          // The program will delay for 10 seconds and then display

          // any data that came in during the 10 second delay

          do {

          delay_ms(10000); //延時(shí)10秒

          printf("rnBuffered data => ");

          while(bkbhit) //當(dāng)接收緩沖區(qū)沒有滿,則執(zhí)行下面語句

          putc( bgetc() ); //將接收到的數(shù)據(jù)再通過UART發(fā)送出去顯示

          } while (TRUE);

          }

          上面的例子主要介紹UART接收中斷的設(shè)計(jì),將接收到的數(shù)據(jù)及時(shí)送去顯示.



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

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();