م string.h في لAVR

G

Guest

Guest
مرحبا جميعا ، ولدي مشكلة صغيرة مع بعض هنا رمز لاستخدام جيم AVR

# تشمل <string.h>
تشار mychar [30] ؛
strcpy (mychar ، 'LOOONG الطابع') ؛

وقال بعض الأخطاء مثل الطابع المستمر طويل جدا.أنا باستخدام Codevision ، الرجاء مساعدتي لانه عندما أستعمل Keill (8051) على الرغم من أنها تعمل بشكل جيد ولست بحاجة الى تغيير ". الرجاء مساعدتي ، لأن هذه هي المرة الأولى التي تستخدم AVR ATMEGA8535 المشروع.

وعندما يستخدم

# تشمل <string.h>
تشار mychar [30] ؛
strcpy (mychar ، 'مكتوم') ؛

تقول لي انها works.Please كيف نفعل ذلك لأكثر من ولايتين الحروففعلا بفضل

مع أطيب التحيات

 
جرب هذا...

const تشار مرحبا [] = "مرحبا العالم" ؛

بدلا من النسخ إلى سلسلة واسعة ، وذلك مباشرة!

 
إلا أنها لا تعمل...

أريد فقط أن سلسلة كما تمر معلمة لكن يبدو انها لا تعمل على النحو المتوقع على الرغم من أنني أستطيع فعل ذلك في keil.
هذا هو التقصير رمز :

رقاقة من نوع : ATmega8535
نوع البرنامج : تطبيق
الساعة تردد : 11،059200 ميغاهرتز
نموذج الذاكرة : الصغيرة
SRAM حجم الخارجية : 0
ستاك حجم البيانات : 128
*********************************************/

# تشمل <mega8535.h>
# تشمل <string.h>

/ / I2C الحافلات وظائف
# asm
. equ __i2c_port = 0x15
. equ __sda_bit = 0
. equ __scl_bit = 1
# endasm
# تشمل <i2c.h>
# تشمل <string.h>

/ / الاعلان عن المتغيرات العالمية هنا
# تحديد PORTA.1 جمهورية صربسكا
# تحديد RW PORTA.3
# تحديد én PORTA.5
# تحديد البيانات PORTB
# تحديد PINB.7 مشغول

ارسال باطلة (باطل) ؛
wait_LCD باطلة (باطل) ؛
clear_LCD باطلة (باطل) ؛
LCD_init باطلة (باطل) ؛
print_LCD باطلة (باطل) ؛الفراغ ارسال ()
(
én = 1 ؛
én = 0 ؛
)clear_LCD باطل ()
(
الجمهورية الصربية = 0 ؛
بيانات = 0x01 ؛
ارسال () ؛
wait_LCD () ؛
)wait_LCD باطل ()
(
يفعل
(
én = 0 ؛
الجمهورية الصربية = 0 ؛
RW = 1 ؛
DDRB.7 = 0 ؛
én = 1 ؛
في حين) (مشغول) ؛
én = 0 ؛
RW = 0 ؛
DDRB.7 = 1 ؛

)LCD_init باطل ()
(
الجمهورية الصربية = 0 ؛
بيانات = 0x38 ؛
ارسال () ؛
wait_LCD () ؛
الجمهورية الصربية = 0 ؛
بيانات 0x0E = ؛
ارسال () ؛
wait_LCD () ؛
الجمهورية الصربية = 0 ؛
بيانات = 0x06 ؛
ارسال () ؛
wait_LCD () ؛
)

print_LCD باطل ()
(
الجمهورية الصربية = 1 ؛
بيانات = 'لي' ؛
ارسال () ؛
wait_LCD () ؛
)

باطلة الرئيسي (الفراغ)
(

/ / نعلن هنا المتغيرات المحلية

/ / للمدخلات والمخرجات موانئ الاستهلال
/ / ألف ميناء الاستهلال
/ / Func0 أصل Func1 = = = Func2 فمن أصل Func3 أصل Func4 = = = Func5 فمن أصل Func6 = = فمن أصل Func7
/ / State0 = 0 State1 = 0 State2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0
بورتا = 0x00 ؛
DDRA = 0xFF ؛

/ / ميناء باء الاستهلال
/ / Func0 أصل Func1 = = = Func2 فمن أصل Func3 أصل Func4 = = = Func5 فمن أصل Func6 = = فمن أصل Func7
/ / State0 = 0 State1 = 0 State2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0
PORTB = 0x00 ؛
DDRB = 0xFF ؛

/ / ميناء جيم الاستهلال
/ / Func0 وفي Func1 = = = وفي Func2 وفي Func3 = = وفي Func4 وفي Func5 وفي Func6 = = = وفي Func7 في
/ / State0 = State1 تي تي State2 = = = State3 تي تي State4 تي State5 = = = State6 تي تي تي State7 =
PORTC = 0x00 ؛
DDRC = 0x00 ؛

/ / ميناء مد الاستهلال
/ / Func0 وفي Func1 = = = وفي Func2 وفي Func3 = = وفي Func4 وفي Func5 وفي Func6 = = = وفي Func7 في
/ / State0 = State1 تي تي State2 = = = State3 تي تي State4 تي State5 = = = State6 تي تي تي State7 =
PORTD = 0x00 ؛
DDRD = 0x00 ؛

/ / الموقت / 0 مكافحة الاستهلال
/ / ساعة المصدر : نظام ساعة
/ / ساعة قيمة : منعت الموقت 0
/ / الأسلوب : قمة عادية = FFh
/ / OC0 الانتاج : منقطع
TCCR0 = 0x00 ؛
TCNT0 = 0x00 ؛
OCR0 = 0x00 ؛

/ / الموقت / 1 لمكافحة الاستهلال
/ / ساعة المصدر : نظام ساعة
/ / ساعة قيمة : 1 منعت الموقت
/ / الأسلوب : قمة عادية = FFFFh
/ / OC1A الانتاج : Discon.
/ / OC1B الانتاج : Discon.
/ / الضوضاء الملغي : فاقيإ
/ / وتقع على التقاط الإدخال من الحافة
TCCR1A = 0x00 ؛
TCCR1B = 0x00 ؛
TCNT1H = 0x00 ؛
TCNT1L = 0x00 ؛
OCR1AH = 0x00 ؛
OCR1AL = 0x00 ؛
OCR1BH = 0x00 ؛
OCR1BL = 0x00 ؛

/ / الموقت / 2 مكافحة الاستهلال
/ / ساعة المصدر : نظام ساعة
/ / ساعة قيمة : منعت الموقت 2
/ / الأسلوب : قمة عادية = FFh
/ / OC2 الانتاج : منقطع
ASSR = 0x00 ؛
TCCR2 = 0x00 ؛
TCNT2 = 0x00 ؛
OCR2 = 0x00 ؛

/ / قاطع الخارجية (ق) الاستهلال
/ / INT0 : فاقيإ
/ / INT1 : فاقيإ
/ / INT2 : فاقيإ
MCUCR = 0x00 ؛
MCUCSR = 0x00 ؛

/ / الموقت ل / مكافحة (ق) قاطع (ق) الاستهلال
TIMSK = 0x00 ؛

/ / النظير مقارنة الاستهلال
/ / النظير مقارنة : فاقيإ
/ / النظير مقارنة الإدخال الموقت من قبل اسر / مكافحة 1 : فاقيإ
/ / النظير مقارنة المخرجات : فاقيإ
ACSR = 0x80 ؛
SFIOR = 0x00 ؛

/ / I2C الحافلات الاستهلال
i2c_init () ؛
LCD_init () ؛
clear_LCD () ؛

في حين أن (1)
(
/ / هنا ضع الشفرة
print_LCD () ؛
) ؛
)

وتعمل هذه الشفرة...
وعندما أريد تغيير print_LCD () على النحو التالي :

الفراغ print_LCD (تشار mychar []) ؛
الفراغ print_LCD (تشار mychar [])
(
غير موقعة int ط ؛
الجمهورية الصربية = 1 ؛
لط = 0 ؛ ط <= strlen (mychar) -1 ؛ ط )
(
بيانات mychar = [ط] ؛
ارسال () ؛
wait_LCD () ؛
)
)

والتغيير الرئيسي لبرنامج قليلا :

تشار mychar [20] ؛
strcpy (mychar ، 'مرحبا العالم') ؛
في حين أن (1)
(
print_LCD (mychar) ؛
)مما يعطيني خطأ ما ذكر أعلاه.شكرا لردكم والرجاء...ما زلت في حاجة إلى مساعدتكم.

مع أطيب التحيات

 
strcpy (mychar ، 'LOOONG الطابع') ؛
هذا خطأ ، لأن strcpy تتوقع سلسلة.استخدام "LOOONG الطابع" بدلا من ذلك.
ومن الخطأ أيضا لأن 'LOOONG الطابع' غير شرعية طول الطابع المستمر.

strcpy (mychar ، 'مرحبا العالم') ؛
نفس المشكلة.استخدام "مرحبا العالم" وبدلا من ذلك.

strcpy (mychar ، 'مكتوم') ؛
نفس المشكلة.استخدام "القانون الأساسي" بدلا من ذلك.
'مكتوم هو الطابع القانوني المستمر ، لذا لا تنبعث منها مجمع رسالة خطأ ، ولكن كنت لا تزال تمر خاطىء strcpy.

شفرة المصدر الخاص بك طويلة ومن الصعب قراءتها.الرجاء تعديل رسالتك وتضاف]

..... [/code]
tags around it so we can see your indenting.

مدونة]... [/ شفرة]
علامات حولها حتى يمكننا أن نرى الطعج الخاصة بك.

 
الرمز :# تشمل <mega8535.h>

# تشمل <string.h>/ / I2C الحافلات وظائف

# asm

. equ __i2c_port = 0x15

. equ __sda_bit = 0

. equ __scl_bit = 1

# endasm

# تشمل <i2c.h>

# تشمل <string.h>/ / الاعلان عن المتغيرات العالمية هنا

# تحديد PORTA.1 جمهورية صربسكا

# تحديد RW PORTA.3

# تحديد én PORTA.5

# تحديد البيانات PORTB

# تحديد PINB.7 مشغولارسال باطلة (باطل) ؛

wait_LCD باطلة (باطل) ؛

clear_LCD باطلة (باطل) ؛

LCD_init باطلة (باطل) ؛

الفراغ print_LCD (تشار mychar []) ؛الفراغ ارسال ()

(

én = 1 ؛

én = 0 ؛

)clear_LCD باطل ()

(

الجمهورية الصربية = 0 ؛

بيانات = 0x01 ؛

ارسال () ؛

wait_LCD () ؛

)wait_LCD باطل ()

(

يفعل

(

én = 0 ؛

الجمهورية الصربية = 0 ؛

RW = 1 ؛

DDRB.7 = 0 ؛

én = 1 ؛

في حين) (مشغول) ؛

én = 0 ؛

RW = 0 ؛

DDRB.7 = 1 ؛)LCD_init باطل ()

(

الجمهورية الصربية = 0 ؛

بيانات = 0x38 ؛

ارسال () ؛

wait_LCD () ؛

الجمهورية الصربية = 0 ؛

بيانات 0x0E = ؛

ارسال () ؛

wait_LCD () ؛

الجمهورية الصربية = 0 ؛

بيانات = 0x06 ؛

ارسال () ؛

wait_LCD () ؛

)الفراغ print_LCD (تشار mychar [])

(

غير موقعة int ط ؛

الجمهورية الصربية = 1 ؛

لط = 0 ؛ ط <= strlen (mychar) -1 ؛ ط )

(

بيانات mychar = [ط] ؛

ارسال () ؛

wait_LCD () ؛

)

)باطلة الرئيسي (الفراغ)

(

/ / شار mychar [20] ؛

/ / نعلن هنا المتغيرات المحلية/ / للمدخلات والمخرجات موانئ الاستهلال

/ / ألف ميناء الاستهلال

/ / Func0 أصل Func1 = = = Func2 فمن أصل Func3 أصل Func4 = = = Func5 فمن أصل Func6 = = فمن أصل Func7

/ / State0 = 0 State1 = 0 State2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0

بورتا = 0x00 ؛

DDRA = 0xFF ؛/ / ميناء باء الاستهلال

/ / Func0 أصل Func1 = = = Func2 فمن أصل Func3 أصل Func4 = = = Func5 فمن أصل Func6 = = فمن أصل Func7

/ / State0 = 0 State1 = 0 State2 = 0 State3 = 0 State4 = 0 State5 = 0 State6 = 0 State7 = 0

PORTB = 0x00 ؛

DDRB = 0xFF ؛/ / ميناء جيم الاستهلال

/ / Func0 وفي Func1 = = = وفي Func2 وفي Func3 = = وفي Func4 وفي Func5 وفي Func6 = = = وفي Func7 في

/ / State0 = State1 تي تي State2 = = = State3 تي تي State4 تي State5 = = = State6 تي تي تي State7 =

PORTC = 0x00 ؛

DDRC = 0x00 ؛/ / ميناء مد الاستهلال

/ / Func0 وفي Func1 = = = وفي Func2 وفي Func3 = = وفي Func4 وفي Func5 وفي Func6 = = = وفي Func7 في

/ / State0 = State1 تي تي State2 = = = State3 تي تي State4 تي State5 = = = State6 تي تي تي State7 =

PORTD = 0x00 ؛

DDRD = 0x00 ؛/ / الموقت / 0 مكافحة الاستهلال

/ / ساعة المصدر : نظام ساعة

/ / ساعة قيمة : منعت الموقت 0

/ / الأسلوب : قمة عادية = FFh

/ / OC0 الانتاج : منقطع

TCCR0 = 0x00 ؛

TCNT0 = 0x00 ؛

OCR0 = 0x00 ؛/ / الموقت / 1 لمكافحة الاستهلال

/ / ساعة المصدر : نظام ساعة

/ / ساعة قيمة : 1 منعت الموقت

/ / الأسلوب : قمة عادية = FFFFh

/ / OC1A الانتاج : Discon.

/ / OC1B الانتاج : Discon.

/ / الضوضاء الملغي : فاقيإ

/ / وتقع على التقاط الإدخال من الحافة

TCCR1A = 0x00 ؛

TCCR1B = 0x00 ؛

TCNT1H = 0x00 ؛

TCNT1L = 0x00 ؛

OCR1AH = 0x00 ؛

OCR1AL = 0x00 ؛

OCR1BH = 0x00 ؛

OCR1BL = 0x00 ؛/ / الموقت / 2 مكافحة الاستهلال

/ / ساعة المصدر : نظام ساعة

/ / ساعة قيمة : منعت الموقت 2

/ / الأسلوب : قمة عادية = FFh

/ / OC2 الانتاج : منقطع

ASSR = 0x00 ؛

TCCR2 = 0x00 ؛

TCNT2 = 0x00 ؛

OCR2 = 0x00 ؛/ / قاطع الخارجية (ق) الاستهلال

/ / INT0 : فاقيإ

/ / INT1 : فاقيإ

/ / INT2 : فاقيإ

MCUCR = 0x00 ؛

MCUCSR = 0x00 ؛/ / الموقت ل / مكافحة (ق) قاطع (ق) الاستهلال

TIMSK = 0x00 ؛/ / النظير مقارنة الاستهلال

/ / النظير مقارنة : فاقيإ

/ / النظير مقارنة الإدخال الموقت من قبل اسر / مكافحة 1 : فاقيإ

/ / النظير مقارنة المخرجات : فاقيإ

ACSR = 0x80 ؛

SFIOR = 0x00 ؛/ / I2C الحافلات الاستهلال

i2c_init () ؛

LCD_init () ؛

clear_LCD () ؛في حين أن (1)

(

تشار mychar [100] ؛

/ / هنا ضع الشفرة

strcpy (mychar "مرحبا العالم") ؛

print_LCD (mychar) ؛

) ؛

)
 
وهذا أسهل بكثير للقراءة.

انا لا انظر الجاني على الفور ولكن لست على دراية ولا سيما مجمع الخاص بك.

أرى mychar تستخدم عدة أماكن.الخط الذي يشكو من فعل ذلك؟

كنت mychar [] في موضعين.يمكنك محاولة منها لتغيير mychar * لمعرفة ما اذا كان في كامل ويصبح أكثر سعادة.

هل شملت string.h مرتين.وينبغي أن لا يضر ، ولكن من يدري.

 
إلا أنها لا تعمل إلا أنني أقول الحقيقة بفضل مساعدتكم.هل لي أن أعرف أي نوع من مجمع هل تستخدم؟
شكرا جزيلا لمساعدتك مرة أخرىمع أطيب التحيات

 
هل تستخدم codevision؟
إذا كان استخدام LCD وظيفة codevision فمن الأفضل.
الاستخدام
تشار mychar [] = "مرحبا العالم" ؛

 
شكرا لمعلوماتك.وأنا أعلم أنها لن تعمل إذا كنت تستخدم وظيفة LCD.ولكن يبدوا أن LCD في 4 بت واسطة وأنا الآن في محاولة لاستخدام أسلوب 8 بت.على أي حال أن هذا هو أول تجربة avr ما أريد فهم الإعلام والتوعية على نحو أفضل.
الشكر لجميع من مساعدتك.
اذا كان شخص ما يعرف بلدي يرجى تصحيح خطأ شخصي.

مع أطيب التحيات

 
مرحبا ،
haved لي نفس المشكلة ،
هل يعمل برنامجك؟
إذا كانت الإجابة بنعم ، الرجاء إرسال ملف المصدر.
تمنيات.

 

Welcome to EDABoard.com

Sponsor

Back
Top