ايران ويج

نسخه‌ی کامل: تایمر کانتر
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
من برنامه مدار زیر رو با تایمر کانتر0 نوشتم و قاعدتا باید تا 255 بشمره ولی وقتی بستمش تا 400، 500 هم می شمره
کسی می دونه مشکلش چیه؟
از 255 بیشتر نمیشه
چون LCD رو پاک نمیکنی فکر میکنی این اتفاق می افته.

مثلا آخرین عدد چاپ شده روی LCD باشد
counter=255
بار بعد باید عدد 0 رو چاپ کنه وقتی lcd_gotoxy(0,0); مینویسی برمیگرده به خط قبل صفحه رو پاک نمیکنه حالا این رو مینویسه
counter=0
اما چون مقدار قبلی باقی بود چیزی که به نمایش در میاد میشه این
counter=255
+
counter=0
=
counter=055

حال فکر کن عدد شمارنده شده 9
اما این رو نمایش میده
counter=955

کد زیر تصحیح شده.


کد:
#include <mega16.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>

char X[16];
void main(void)
{
DDRB.0=0;
DDRD=0xFF;
TCCR0=0x06;
TCNT0=0x00;
lcd_init(16);
lcd_clear();

while (1)
      {
       if((TIFR & 1)==1)
       {
       TIFR=1;
       }
    
sprintf(X,"counter=%d",TCNT0);

lcd_clear();
lcd_puts(X);
delay_ms(10);
}      
}
(۲۱-اسفند-۱۳۹۰, ۲۱:۰۴:۱۷)Pardazesh-Gar نوشته است: [ -> ]از 255 بیشتر نمیشه
چون LCD رو پاک نمیکنی فکر میکنی این اتفاق می افته.

مثلا آخرین عدد چاپ شده روی LCD باشد
counter=255
بار بعد باید عدد 0 رو چاپ کنه وقتی lcd_gotoxy(0,0); مینویسی برمیگرده به خط قبل صفحه رو پاک نمیکنه حالا این رو مینویسه
counter=0
اما چون مقدار قبلی باقی بود چیزی که به نمایش در میاد میشه این
counter=255
+
counter=0
=
counter=055

حال فکر کن عدد شمارنده شده 9
اما این رو نمایش میده
counter=955

کد زیر تصحیح شده.


کد:
#include <mega16.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>

char X[16];
void main(void)
{
DDRB.0=0;
DDRD=0xFF;
TCCR0=0x06;
TCNT0=0x00;
lcd_init(16);
lcd_clear();

while (1)
{
if((TIFR & 1)==1)
{
TIFR=1;
}

sprintf(X,"counter=%d",TCNT0);

lcd_clear();
lcd_puts(X);
delay_ms(10);
}
}
ممنون
خیلی لطف کردی

(۲۱-اسفند-۱۳۹۰, ۲۱:۰۴:۱۷)Pardazesh-Gar نوشته است: [ -> ]از 255 بیشتر نمیشه
چون LCD رو پاک نمیکنی فکر میکنی این اتفاق می افته.

مثلا آخرین عدد چاپ شده روی LCD باشد
counter=255
بار بعد باید عدد 0 رو چاپ کنه وقتی lcd_gotoxy(0,0); مینویسی برمیگرده به خط قبل صفحه رو پاک نمیکنه حالا این رو مینویسه
counter=0
اما چون مقدار قبلی باقی بود چیزی که به نمایش در میاد میشه این
counter=255
+
counter=0
=
counter=055

حال فکر کن عدد شمارنده شده 9
اما این رو نمایش میده
counter=955

کد زیر تصحیح شده.


کد:
#include <mega16.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>

char X[16];
void main(void)
{
DDRB.0=0;
DDRD=0xFF;
TCCR0=0x06;
TCNT0=0x00;
lcd_init(16);
lcd_clear();

while (1)
{
if((TIFR & 1)==1)
{
TIFR=1;
}

sprintf(X,"counter=%d",TCNT0);

lcd_clear();
lcd_puts(X);
delay_ms(10);
}
}
ممنون
خیلی لطف کردی