ايران ويج

نسخه‌ی کامل: مشکل در INT 0
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام بر دوستان
میخواستم دستوری با CodeVision بنویسم که هر موقع کلید را بزنم یک INT 0 از نوع لبه پایین رونده رخ بدهد و در INT 0 یک متغیر را زیاد کنم و روی LCD نمایش بدم
کدش نوشتم ولی نمیدونم چرا قبل از این که کلید بزنم خودش متغیر زیاد میکنه
و کلید عمل نمیکنه
کدش میزارم :
کد php:
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <alcd.h>

unsigned char i d[20];

interrupt [EXT_INT0void ext_int0_isr(void)
{
i++;

}

void main(void)
{

lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
      {
      
sprintf(d,"value=%3.3d",i);
      
lcd_gotoxy(0,0);
      
lcd_puts(d);

      }

اینم مدارش [attachment=12692]
سلام.
وقفه خارجی صفر رو تعریف نکردی.
sprintf رو هم اشتباه نوشتی
اینم بنرامه اصلاح شده :
کد:
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <alcd.h>

unsigned char i , d[20];

interrupt [EXT_INT0] void ext_int0_isr(void)
{
    i++;
}

void main(void)
{
GICR|=0x40;
MCUCR=0x02;
MCUCSR=0x00;
GIFR=0x40;
#asm("sei")
while (1)
{
    sprintf(d,"value=%d",i);
    lcd_gotoxy(0,0);
    lcd_puts(d);
}
بازم همون مشکل داره
قبل از این که کلید بزنم خودش متغیر زیاد میکنه
و کلید عمل نمیکنه
(۱۴-آبان-۱۳۹۳, ۱۵:۱۹:۳۹)hosseinip نوشته است: [ -> ]بازم همون مشکل داره
قبل از این که کلید بزنم خودش متغیر زیاد میکنه
و کلید عمل نمیکنه
مقاومت پول آپ یا پول داون نزاشتی حتما
(۱۴-آبان-۱۳۹۳, ۱۵:۲۲:۵۲)a.mehran نوشته است: [ -> ]
(۱۴-آبان-۱۳۹۳, ۱۵:۱۹:۳۹)hosseinip نوشته است: [ -> ]بازم همون مشکل داره
قبل از این که کلید بزنم خودش متغیر زیاد میکنه
و کلید عمل نمیکنه
مقاومت پول آپ یا پول داون نزاشتی حتما
اگه تو برنامه تعریفی کردی پایه = 0 بشه یعنی کلید فشرده شده ،یه مقاومت 10 کیلو به میکرو و +5 ولت بزن
یا
اگه تو برنامه تعریفی کردی پایه = 1 بشه یعنی کلید فشرده شده ،یه مقاومت 10 کیلو به میکرو و -5(gnd) ولت بزن
مقاومت pull up گذاشتم
بازم همون مشکل داره
قبل از این که کلید بزنم خودش متغیر زیاد میکنه
و کلید عمل نمیکنه
اینم مدارش :
[attachment=12699]
interrupt [EXT_INT0] void ext_int0_isr(void)
من سی بلد نیستم ولی احتمالا int0 یا portd.2 باید کلید باشه
----------
یا اینکه اون مثبت 5 ولت نباشه
پورت PORTB.2/INT0 ورودی INT (ورودی تحریک وقفه) است و من در اینجا کلید وصل کردم به ابن پین
وقتی پایه ای را روی مد INT تنظیم میکنیم دیگر نمی توانیم از pull up و pull down برنامه استفاده کنیم بنابرین باید خودمون اون به مدار اضافه کنیم
هر موقع کلید را بزنم یک INT 0 از نوع لبه پایین رونده رخ بدهد و در INT 0 یک متغیر را زیاد کنم و روی LCD نمایش بدم
کدش نوشتم ولی نمیدونم چرا قبل از این که کلید بزنم خودش متغیر زیاد میکنه
و کلید عمل نمیکنه
من وقتی کد رو نوشتم یاد مرفت عکسه مدارو ببینم ، مدارت اشتباس.
کلید رو اشتباه وصل کردی .
اونو به int2 وصل کردی که باید به int0 وصل کنی
درود بر شما
اونو int0 وصل کردم مشکلم حل شد
متشکرمHappyHappyHappy
اینم مدارش :
[attachment=12700]
صفحه‌ها: 1 2