您的位置 首页 发布

PIC单片机CCS之C言语(#INT_XXXX的使用)

#INT_XXXX语法:#INT_AD//AD转换完成#INT_ADOF//AD转换时间溢出#INT_BUSCOL//总线冲突#INT_BUTTON//按钮#INT_CCP1//捕获或比较…

#INT_XXXX

语法: #INT_AD //AD转化完结

#INT_ADOF //AD转化时刻溢出

#INT_BUSCOL //总线抵触

#INT_BUTTON //按钮

#INT_CCP1 //捕获或比较器1

#INT_CCP2 //捕获或比较器1

#INT_COMP //比较器勘探

#INT_EEPROM //EEPROM写完结

#INT_EXT //外部中止

#INT_EXT1 //外部中止1

#INT_EXT2 //外部中止2

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

#INT_LCD //LCD举动

#INT_LOWVOLT //低电压勘探

#INT_PSP //并行端口PSP数据输入

#INT_RB //端口B在B4~B7的电平改变

#INT_RC //端口C在C4~C7的电平改变

#INT_RDA //RS232接纳到的数据有用, 使能UART接纳中止

#INT_RTCC //Timer0(RTCC)溢出

#INT_SSP //SPI口或I2C被激活

#INT_TBE //RS232发送缓冲区是空的

#INT_TIMER0 //Timer0(RTCC)溢出

#INT_TIMER1 //Timer1溢出

#INT_TIMER2 //Timer2溢出

#INT_TIMER3 //Timer3溢出

留意:大多数#INT_options在指定的芯片上是有用的. 在devices.h文件中,查看所给芯片的悉数列表.

意图:这些指令指定下面的函数是一个中止服务函数,中止函数可以没有任何参数.不是一切指令都可用于一切的元件,为了取得元件的有用中止,请参看devices.h文件或在PCW中,点击VIEW|Valid ints也可查得有哪些中止.

当中止被检测届时,编译器将发生代码跳到中止服务函数.它将发生代码来存储或从头存储机器状况,而且铲除中止标志位.为了避免标志位被铲除,请在#INT_XXXX后边增加NOCLEAR句子即可.

ENABLE_INTERRUPTS(INT_XXXX)在中止前初始化时要被激活,而且ENABLE_INTERRTUPTS(GLOBAL)也要使能中止,才可进入中止.

关键字HIGH和FAST可用于PCH编译中,用来标志高中止优先权.一个高优先权的中止可在另一中止正在进行的情况下发生中止.一个标有FAST中止在履行时,它不存储或从头存储任何寄存器,这就要你尽可能地存储你自己需求的存储器.标有HIGH的中止可以正常运用.在树立高优先权中止时,请参看#DEVICE以获取更多的信息.

比如:#int_ad

adc_handler(){

adc_active=FALSE;

}

#int_rtcc noclear

isr(){

}

比如文件:参看ex_sisr.c和ex_stwt.c以获取彻底的比如

文件: ex_stwt.c在前面现已介绍过了,这儿不再重述

文件: ex_sisr.c如下:

#if defined(__PCM__) //若运用了PCM编译器,则defined( __PCM__)回来值为1

#include <16F877.h> //包括16F877.h头文件

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

// NOPROTECT:程序存储器代码不维护

#use delay(clock=20000000) //使能内置函数的功用:delay_ms()和delay_us()

//#USE DELAY()必须在#use rs232()运用之前呈现.

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

//运用波特率为9600,

//发送脚为PIN_C6

//接纳脚为PIN_C7

//使能内置函数: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 //完毕if界说

#define BUFFER_SIZE 32 //用BUFFER_SIZE替代32

BYTE buffer[BUFFER_SIZE]; //声明字符型数组buffer[BUFFER_SIZE]

BYTE next_in = 0; //声明字符型变量next_in,并赋初值为0

BYTE next_out = 0; //声明字符型变量next_out,并赋初值为0

#int_rda //RS232接纳到的数据有用,指定下面的函数是一个中止函数

void serial_isr() {

int t; //声明整型变量t;

buffer[next_in]=getc(); //从RS232接口读1个字节,存到数阻buffer[]中

t=next_in; //将next_in赋给暂态变量t

next_in=(next_in+1) % BUFFER_SIZE; //%用来求余数

if(next_in==next_out)

next_in=t; // Buffer full !!

}

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

BYTE bgetc() {

BYTE c; //声明字符型变量c;

while(!bkbhit) ; //当next_in=next_out时,空操作,等候next_in不等于next_out

c=buffer[next_out];

next_out=(next_out+1) % BUFFER_SIZE; //%用来求余数

return(c); //函数回来暂态变量c的值,并退出该函数

}

void main() {

enable_interrupts(global); //使能总中止

enable_interrupts(int_rda); //使能UART在接纳到1个字节时,中止答应

printf(“\r\n\Running…\r\n”);

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

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

do {

delay_ms(10000); //延时10秒

printf(“\r\nBuffered data => “);

while(bkbhit) //当接纳缓冲区没有满,则履行下面句子

putc( bgetc() ); //将接纳到的数据再经过UART发送出去显现

} while (TRUE);

}

上面的比如首要介绍UART接纳中止的规划,将接纳到的数据及时送去显现.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/268172.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部