cai_xiao_xiang 发表于 2013-5-4 21:18:40

串口中断函数问题

在使用atmel 328p芯片的时候,也就是atduino uno 开发板的时候,想做一个串口接收中断的程序,但是看了很多的帖子,和调试了几个程序,都只能够做到串口的接收和发送程序,但是串口的中断程序没有做成功,请问 atmel 328p 有串口接收中断的功能的吗,像51单片机那样的串口中断功能???新人一个,先在此谢过了!!!

MicroCao 发表于 2013-5-4 22:54:23

当串口有数据时,若存在serialEvent()中断方法则会被调用,调用后需要通过Serial.read()读取所有字符后此中断才能被解除,不然会一直此于中断状态。

cai_xiao_xiang 发表于 2013-5-5 20:20:58

谢谢,帮了我一个大忙。:):):):):):):)非常感谢!!!

奈何col 发表于 2013-5-5 21:45:19

serialEvent()是一个伪事件,和中断没有任何关系

cai_xiao_xiang 发表于 2013-5-7 15:48:29

奈何col 发表于 2013-5-5 21:45 static/image/common/back.gif
serialEvent()是一个伪事件,和中断没有任何关系

这是什么意思的呢,能够举个具体的例子说明下的吗,我是新手的恩……

奈何col 发表于 2013-5-7 21:01:57

cai_xiao_xiang 发表于 2013-5-7 15:48 static/image/common/back.gif
这是什么意思的呢,能够举个具体的例子说明下的吗,我是新手的恩……

就是说这个函数和中断没有关系,2楼搞错了..

cai_xiao_xiang 发表于 2013-5-8 00:02:13

奈何col 发表于 2013-5-7 21:01 static/image/common/back.gif
就是说这个函数和中断没有关系,2楼搞错了..

String comdata ="";
intmark = 0;
void setup()
{

   pinMode(13, OUTPUT);
Serial.begin(38400);
}

void loop()
{
    digitalWrite(13,0);
    delay(1000);
// int j = 0;
// while (Serial.available() > 0)
// {
//   comdata += char(Serial.read());//读取串口数据
//   delay(2);
//   mark = 1;
// }

// if(mark == 1)
// {
//   Serial.println(comdata);
//   Serial.println(comdata.length());//输出数据的长度

//   comdata = String("");
//   mark = 0;
// }
}
void serialEvent()//串口中断函数
{
while (Serial.available())
{
    char inChar=Serial.read();
    Serial.println(inChar);
    Serial.println(comdata.length());//输出数据的长度
    for(int a=4;a>0;a--)
   { digitalWrite(13,1);
    delay(2000);
    digitalWrite(13,0);
    delay(2000);
    }
}
}
我写的这个程序,烧到板子上面去了,正常是13脚灯灭的,我用串口发生数据,那个灯就会闪烁亮的,请问这个怎么说的呢?我都糊涂了呢???

maxim 发表于 2013-11-20 15:49:57

SerialEvent occurs whenever a new data comes in the hardware serial RX.This routine is run between each time loop() runs, so using delay inside loop can delay response.Multiple bytes of data may be available.
这是官方文档里似例代码的注释,讲的很清楚。SerialEvent()这个函数会在loop()函数执行完后被自动调用,不是通过中断的方式调用的。

cai_xiao_xiang 发表于 2013-11-22 12:24:52

:)有一点理解,用的时候还是不知道怎么用的。

sam 发表于 2014-11-1 00:04:37

这样行不行呢?

void loop()
{
if(Serial.available()>0)
{
   serial.print();
   digital.write(Int_0 ,low);
   digital.write(Int_0 ,high);    //在串口操作中触发、并产生外部中断。
   }   


主要意图就是先使能外部中断0之后,在主程序中通过串口接收过程、用软件操作Int_0 管脚,达到外部中断触发条件后,用外部中断闪烁LED来显示串口动作。近似产生串口中断。

求评论!!!!!!!!!!!

song_kai_ming 发表于 2015-11-18 09:21:24

楼主问题解决了吗,求分享
页: [1]
查看完整版本: 串口中断函数问题