ايران ويج

نسخه‌ی کامل: چرا AVRدر این برنامه نمیتواند EPROMاش رابخواند؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
چرا AVRدر این برنامه نمیتواند EPROMاش رابخواند؟

--------------------------------------------------------------------------------

به نظر شما چرا در برنامه آزمایشی زیر میکروی ATMEGA16 نمیتواند محتویات جدول lookup ذخیره شده در EEPROM اش را فراخونی وبازیابی نماید.چنانچه برنامه را روی AVR studioاجرا وrunکنیم بجای آنکه مقدار خواسته شده در مراحل برنامه بدست بیاید مرتب عدد 0xff بدست داده میشود.
کد:
.include "m16def.inc"

rjmp RESET ;reset handle

;* Register variables

.def T1 = r1
.def T2 = r2
.def temp = r16

;* Code


;* Count display upwards repeatingly (0 -> 9 ->)

;* Register variables

.def bitCount = r17
.def data = r18
.def eset = r19

;* Code

RESET: ser eset
out DDRB, eset
out PORTB, eset ;all 7 segments ON (lamp test)

;for a second
clr eset
out PORTB, eset ;first all segments OFF
next_Count:
ldi bitCount, 0 ;reset up-counter
count_Up:
out EEARL, bitCount ;bitCount sets eeprom address
sbi EECR, 0 ;set eeprom read strobe
in data, EEDR ;get segments data from eeprom
out PORTB, data ;display the data for a sec

clr eset ;blank display
out PORTB, eset
inc bitCount
cpi bitCount, 10 ;if 10 then again, else continue
breq next_Count
rjmp count_Up ;keep counting up

;* Segments data table

.ESEG
table:
.db 0b00111111 ;data 0
.db 0b00000110 ;data 1
.db 0b01011011 ;data 2
.db 0b01001111 ;data 3
.db 0b01100110 ;data 4
.db 0b01101101 ;data 5
.db 0b01111100 ;data 6
.db 0b00000111 ;data 7
.db 0b01111111 ;data 8
.db 0b01100111 ;data 9

ازپاسخ راهگشای شما متشکر خواهم شد.
چرا کار رو اینقدر سخت کردی؟ چرا اسمبلی؟
تا اونجا که یادمه یه read enable داشت باید یک می کردی صبر می کردی تا صفر بشه بعد data رو بخونی برای write که مکافات بیشتری داشت
از توجه شما متشکرم. این برنامه آموزشی است ونکته ای که گفتید یک کردن بیت EERE از رجیستر eecr است که در برنامه انجام شده ولی جالب اینجاست که برخلاف کلیه آن چیزهایی که گفته میشود اصلآ محتویات آدرس داده شده را نمی خواند و فقط 0xffرا ارائه میکند.اگر امتحان کنید متوجه میشوید.
یک کردن درست ولی باید صبر کنی صفر بشه دقیقا توی دستور بعدی نمی تونی بخونی می خوای یه چند تا nop بعدش قرار بده
اگه با سیمولاتور چک می کنی ببین داده ها لود شده یا نه
اینکارو کردم ولی نتیجه فرقی نداشت.جالب اینجاست که این برنامه قسمتی از یک برنامه بزرگتره که مربوط به قسمت دیزپلیهای اونه که از سایت آتمل دانلود کردم که نه رو سیمیلاتور ونه رو خود میکرو جواب میده.نظرت چیه دوست عزیز
شما یه کار جالب بکن بیا همین رو با c بنویس (یا ساده ترشو) کد های اسمبلی تولید شده رو ببین (زیاد نیست قابل فهم هم هست البته فایل اسمبلی که خودش تولیید می کنه نه دیس اسمبل شدش) ببین چه جوری خونده راحت تره
موافقمAmaze
صفحه‌ها: 1 2