ايران ويج

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

2- وقتي در برنامه يک متغيير از نوع فلش يا پي رام تعريف ميکنيم مثل زير
کد:
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>

flash int b[7]={0xff,0x01,0x88,0x00,0x00,0x00,0x89}
eeprom char string[]="1236547899517532864987456321";
و در طول برنامه محتويات اين محل رو تغيير ميديم ايا با ريست کردن ميکرو دوباره محتويات پي رام يا فلش به همون چيزي که در ابتدا تعريف شده بود برميگرده؟ يا ثابت ميمونه.

3- وقتي ميکرو رو قفل خواندن نوشتن ميزاريم محتويات پيرام و فلش قابل خوندن هست ؟

4- من ميخوام واسه برنامم که با ميکرو در ارتباط هست و به ميکرو دستور ارسال ميکنه و ميکرو اجرا ميکنه يه قفل سخت افزاري ايجاد کنم و چه جايي بهتر از ميکرو. ميخوام چيزايي تو پي رام يا فلش بنويسم و هربار تغييراتي توش بدم بنظر شما از فلش استفاده کنم يا پي رام ؟
محتوی حافظه FLASH کلا خالی و پر می شه و چون برنامه هم تو فلاش ریخته می شه پس تو برنامه نمی شه متغییرهای که از حافظه فلاش استفاده می کنن رو تغییرش داد !!!!

EEPROM هم می شه متغییر ازش استفاده کرد و سرعت کمی داره ولی اطلاعاتش برعکس رم پاک نمی شه با قطع برق !!!!!

دیگه بقیه اش میل خودته !!!
براي خواندن و نوشت بايد از چه کدهايي استفاده کنم من کدهاي زير رو پيدا کردم و يه تابع کوتاه و ساده وجود نداره ؟
کد:
#include<mega16.h>
#define xtal 1000000
/* the I2C bus is connected to PORTB */
/* the SDA signal is bit 3 */
/* the SCL signal is bit 4 */

#asm
.equ __i2c_port=0x18
.equ __sda_bit=3
.equ __scl_bit=4
#endasm
/* now you can include the I2C Functions */
#include <i2c.h>
/* function declaration for delay_ms */
#include <delay.h>
#define EEPROM_BUS_ADDRESS 0xa0
/* read a byte from the EEPROM */
unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

/* write a byte to the EEPROM */
void eeprom_write(unsigned char address, unsigned char
data) {
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();
/* 10ms delay to complete the write operation */
delay_ms(10);
}
void main(void) {
unsigned char i;
DDRD=0xFF;
/* initialize the I2C bus */
i2c_init();
/* write the byte 55h at address 10h */
eeprom_write(0x10,0x55);
/* read the byte from address AAh */
i=eeprom_read(0x10);
PORTD=i;
while (1); /* loop forever */
}

اگه از آرايه استفاده کنم و با انديسش مقدار دهي و خواندن بکنم بازم دستورات و تعارف بالا لازم هست ؟

مثلا به جاي read.... از myarray(10) استفاده کنم
اگه ميکرو رو قفل کنم ميتونن محتويات پي رام رو بخونن؟؟
حاجی بسکام بفرست !
ما کدویژن رو تحریم کردیم !!!!!


اگه قفلش کنی !
نه نمی شه !!!
حالا چرا کد ويژن رو تحريم ميکنيد. من که خودم ويبي کارم با دستورات سي حال ميکنم.
قفل رو هم میتونی برای eeprom هم برای فلش برازی !
برای اطلاعات بیشتر آموزش فیوزبیت ها رو ببین !


نقل قول: ياشاسين آذربايجان
یاشاسین
در ضمن اقا من کللي گشتم نتونستم دستور rotate رو در کدويژن پيدا کنم تو سايتها هم خيلي گشتم و لي نوشته بودن که بزرگترين اشکال کدويژن اينه که دستور چرخش بيتي رو ساپورت نميکنه.
حالا من چطور اين عمليات چرخش بيتي رو انجام بدم ؟
تو يه سايت اين کد رو گذاشته بود . آيا اين کد درسته؟
کد:
static inline int rotate_number_left(int input)
{
   return (input << 1) | ((input & (1<<15)) ? 1 : 0);
}

اين چيه تو دستور نوشته
کد:
? 1 : 0
من کدویژن کار نمی کنم ولی فکر کنم این بودش :

کد php:
<< 
کد php:
>> 

خوب برین سراغ بسکام !

منبع از کتاب به نفر : http://forum.iranled.com/showthread.php?tid=10869




<دستور SHIFT var :


با این دستور میتوان تمام بیت ها را یک بیت به سمت راست یا چپ منتقل کرد ، این دستور به فرم کلی زیر است :

کد php:
SHIFT var , LEFT/RIGHT 

Var : نام متغیر یا عدد ثابتی است که میخواهیم ان را شیفت دهیم (منتقل کنیم)LEFT/RIGHTجهت شیفت را مشخص میکند ، که میتواند راست یا چپ باشد مانند:

کد php:
$regfile "m16def.dat"
$crystal 12000000
Config Porta 
Output
Porta 
= &B10000000
Do
Shift Porta Right
Wait 1
Loop
End
مثال 
:
$regfile "m16def.dat"
$crystal 12000000
Config Lcd 
16 2
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Dim A 
As Byte
5
Locate 1 
1
lcd a
Shift A 
Left
Locate 2 
1
Lcd A
End 

در مثال بالا مقدار اولیه 5 (0101 باینری) برای a در نظر گرفته شده است ، این مقدار بر روی سطر وستون اول lcd به نمایش در میاید ، سپس با دستور Shift A , Left تمام بیت های متغیر a به سمت چپ منتقل میشوند ، پس مقدار a برابر با 10 (1010 باینری )میشود .




<دستور ROTATE:


این دستور تقریبا مانند دستور shift میباشد و تمام بیت های یک متغیر را به سمت راست یا چپ جابجا میکند ، شما همنچنین با این دستور میتوانید پین های روشن یک پورت را جابجا کنید وبه فرم کلی زیر است:

کد php:
ROTATE var , LEFT/RIGHT 

Var : نام متغیر یا عدد ثابتی یا پورتی است که میخواهیم ان را شیفت دهیم (منتقل کنیم)
LEFT/RIGHT : جهت انتقال را مشخص میکند ، که میتواند را ست یا چپ باشد مانند:

کد php:
$regfile "m16def.dat"
$crystal 12000000
Config Porta 
Output
Config Portb 
Output
Dim B 
As Byte
Portb 
= &B00000001
1
Do
Rotate B Right
Rotate Portb 
Right
Wait 1
Porta 
B
Loop
End 
مهندس خوب دستی این کار رو انجام بده وقتی کدویژن دستوراتش رو نداره !!!! ( خداییش این کدویژن چی داره که همه رفتن سراغ کدوِیژن )


فرضا فکر کن می خوای چرخش به سمت راست انجام بدی !
خوب بیت صفر رو بخون و تو یه جا بریز !
شیفت به راست بده !
بیت هفتم رو برابر بیت صفر که ذخیره اش کردی کن !!!
(۱۵-آذر-۱۳۸۸, ۱۵:۵۳:۳۱)Abbaspour نوشته است: [ -> ]اين چيه تو دستور نوشته
کد:
? 1 : 0
این برای شرطه. عملگر : ؟ یه عملگر شرطیه. عبارت قبل ؟ شرطشه. اگه درست بود شرط، عبارت بین ؟ و : رو برمیگردونه وگرنه عبارت بعد : رو.
سلام!
اینجا فقط منم که حرص کدویژن می زنم! Biggrin

برای eeprom که کاری نداره! باید متغیر رو سراسری(بالای main) با کلمه کلیدی eeprom تعریف کنی. اون کدا چیه گذاشتی !!
کد:
eeprom int i = 0;

void main(void)
{
i = i + 2;
}

دستور rotate تو کدویژن نیست. بیخود نگرد! یه تابع براش بنویس. شاید تو ورژن جدیدش باشه! خوب شد گفتی برم یه سرچی بزنم ببینم این جدیده داره ...
البته ...
الان که یکم بیشتر حالیم میشه اینو بگم برای برتری کدویژن به بیسکام همین بس که تو کدویژن به تمام رجیسترهای میکرو (با تک تک بیت هاشون) دسترسی داریم و می تونیم همه چی رو تغییر بدیم! از تمام امکانات میکرو با نهایت انعطاف پذیری میشه استفاده. حتی میشه توش اسمبلی نوشت. خلاصه اینکه دل و روده میکرو میشه ریخت بیرون و ... کتاب ره افروز رو ببینین ...... فکر نمی کنم تو بیسکام مستقیم بشه به همه رجیسترها دسترسی داشت.میشه؟ بیسکام برای هرکدوم از امکانات میکرو یه سری دستورات تعریف کرده و برنامه نویسی به اون دستورات محدود شده.
بله علی آقا! Biggrin
البته من هیچی بارم نیستا!! ما هنوز شاگرد علی تریپیم !!
صفحه‌ها: 1 2