极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13739|回复: 8

串口中断!!!转载

[复制链接]
发表于 2014-9-23 18:46:08 | 显示全部楼层 |阅读模式

int pin = 13;
int state = LOW;


void setup(){
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, RISING);
Serial.begin(9600);
}
  
void loop(){
  digitalWrite(pin, state);
}


void blink()
{
  state = !state;
  Serial.println("button clicked");
}


转载http://my.oschina.net/tangkikodo/blog/142995
回复

使用道具 举报

发表于 2014-9-23 21:17:31 | 显示全部楼层
什么意思哦?串口中断???
回复 支持 反对

使用道具 举报

发表于 2014-9-24 00:25:47 | 显示全部楼层
本帖最后由 Super169 于 2014-9-24 00:27 编辑

從程式看, 是想當 Int.0 相關的 pin 出現 RISING 時, 就把 state 相反了, 同時顯示字句.  
之後 loop 會改變 pin 13, 即燈會由開變關, 關變開.

不過, 在 interrupt 中執行 Serial.print, 好像不太好, interrupt 程序應該是盡量簡單為主.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-27 09:19:41 | 显示全部楼层
ninjiafan 发表于 2014-9-23 21:17
什么意思哦?串口中断???

对,,这样能不能模拟串口中断
回复 支持 反对

使用道具 举报

发表于 2014-10-31 23:55:35 | 显示全部楼层
似水流年 发表于 2014-9-27 09:19
对,,这样能不能模拟串口中断

我认为你的思路反了。
试试这样:

//....
int Int_0 = 2;    //Most Arduino boards have two external interrupts: numbers 0 (on digital pin 2)
                       // and 1 (on digital pin 3).
void setup()
{
   //...
   attachInterrupt(0,blink,rising);
}
void loop()
{
  if(Serial.available()>0)
  {
     serial.print();
     digital.write(Int_0 ,low);
     digital.write(Int_0 ,high);    //在串口操作中触发、并产生外部中断。
   }   


此法的意图就是在使能外部中断0之后,在主程序中通过串口接收、用软件操作Int_0 管脚,达到外部中断条件后,用外部中断闪烁LED来显示串口动作。近似产生串口中断。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-10 00:14:42 | 显示全部楼层
sam 发表于 2014-10-31 23:55
我认为你的思路反了。
试试这样:

这样主程序一直在被占用,干不了别的,不能叫中断,叫轮询
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-10 00:15:53 | 显示全部楼层
sam 发表于 2014-10-31 23:55
我认为你的思路反了。
试试这样:

目的不是检测中断,而是利用外部中断实现串口中断

回复 支持 反对

使用道具 举报

发表于 2014-11-27 22:40:21 | 显示全部楼层
那好吧,你好像自己找到答案了
回复 支持 反对

使用道具 举报

发表于 2015-8-15 00:19:25 | 显示全部楼层
这还是外部中断 不是串口中断
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 13:03 , Processed in 0.037252 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表