PDA

View Full Version : چرا AVRدر این برنامه نمیتواند EPROMاش رابخواند؟



samand
پنج شنبه 02 فروردین 1386, 00:17 صبح
به نظر شما چرا در برنامه آزمایشی زیر میکروی 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


ازپاسخ راهگشای شما متشکر خواهم شد.

ehsan_electronic
سه شنبه 07 فروردین 1386, 08:02 صبح
سلام ، من برنامه شما را مطالعه کردم. شما هیچ تنظیمی برای جدولتون انجام ندادید. صحبتمو با یک مثال توضیح میدم :
فرض کنید عدد داخل r16 قراره عدد شاخص شما باشه ، یعنی اگه داخلش عدد 5 بود یعنی شما میخواین اطلاعات موجود در خانه پنجم آرایه یا همون data6 جدول را استخراج کنید. برای هر بار خارج کردن اطلاعات جدول مراحل زیر را باید انجام بدید:
ldi zl,low(table*2)
ldi zh,high(table*2)
add zl,r16
clr r16
adc zh,r16
lpm
حالا محتویات z پس از اجرای این دستور همونیه که میخوای
در ضمن تو این روش برنامه نویسی باید اعداد table را توی یک سطر بنویسی
چون توی avr اگر بصورتی که بالا هست بنویسی اطلاعات یکی در میان در rom نوشته میشه

samand
جمعه 10 فروردین 1386, 11:28 صبح
دوست عزیز از توجه وصرف وقت شما متشکرم.ولی آنچه شما راهنمایی کردید در مورد استخراج اطلاعات از جدولهای ذخیره شده در sram است نه eeprom و در ضمن این برنامه قسمتی از بخش مربوط به دیزپلهای یک برنامه بزرگتر است که از سایت atmel دانلود شده است ودستورات نوشته شده در آن کاملآ با مطالب موجود در تئوریها منطبق است ولی جالب آن است که اگر آن را در avr studio 4 یا روی میکرو پیاده کنیم بجای اطلات جدول فقط مقدار xFF را بدست میدهد .اگر فرصت دارید آن را روی استودیو4 تست کنید تا با نتایج جالب اش آشنا بشوید از همین جهت بود که مسئله در اینجا مطرح کردم.