Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 2852|回復: 4

以timer1 OCIE1A 中斷方式,在LCD.print 無法顯示

[複製鏈接]
發表於 2016-8-3 17:28:55 | 顯示全部樓層 |閱讀模式
各位大大,請問一下


我打了個簡單的代碼,
僅僅是要在LCD顯示一行字 hello, world 2,問題是~~ 都顯示不出來?!


因我有其他的需求,
所以,我是用中斷的方式,來叫LCD顯示,
OCIE1A 致能 ''比較中斷'',去執行上述功能,
但怎麼都無法顯示呢?


代碼很簡單,沒幾行,真的找不出來哪裡有錯,麻煩各位先進,指教一下.
  1. #include <LiquidCrystal_I2C.h>

  2. LiquidCrystal_I2C lcd(0x27, 16, 2);

  3. ISR (TIMER1_COMPA_vect) {
  4.   lcd.setCursor(0, 1);
  5.   lcd.print("hello world 2");
  6.   }

  7. void setup() {
  8.   lcd.init();
  9.   lcd.backlight();
  10.   lcd.print("hello world");

  11.   noInterrupts();
  12.   TCCR1A = 0x00;
  13.   TCCR1B = 0x00;
  14.   TCNT1 = 0;
  15.   OCR1A = 15625;  //compare register放入15625, 計等於1秒的時間
  16.   TCCR1B |= (1<<WGM12); //ctc mode
  17.   TCCR1B |= (1<<CS12) | (1<<CS10);  //prescaler=1024
  18.   TIMSK1 |= (1<<OCIE1A);
  19.   interrupts();
  20. }

  21. void loop() {
  22. }
複製代碼

發表於 2016-8-3 20:18:30 | 顯示全部樓層
我猜應該是 lcd 用到 i2c
而i2c用到 twi 中斷
然後你在timer1中斷裡等待
twi 中斷
所以就卡死在中斷中
 樓主| 發表於 2016-8-4 00:01:11 | 顯示全部樓層
回復 2# 超新手
哦~ 這樣哦~那我改一下lcd好了,不要用I2C的方式,
試試看,結果如何,
再上來跟大家update.
感謝這位大大
發表於 2016-8-4 05:17:38 | 顯示全部樓層
可以試試加上 interrupts,如下
ISR (TIMER1_COMPA_vect) {
interrupts();
  lcd.setCursor(0, 1);
  lcd.print("hello world 2");
  }
 樓主| 發表於 2016-8-4 15:04:07 | 顯示全部樓層
已試,ok了!
果然是這邊的問題,
再次感謝大大的協助,感謝您的熱心.
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-3-28 19:57 , Processed in 0.182636 second(s), 10 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表