الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الية عمل المقاييس

مغلق
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة اللـــــــــــــــــه وبركاته

تحياتي الى جميع الاعضاء والمشرفين (عبد القـــــــــادر طفي) لست عضو

جديد معظم الاعضاء يعرفوني من موقع ترونيكس

الى الخوة مبرمجي المايكروكونترولر:

مشروعي العملي الاول بعد دراسة المايكرو (PIC) هو عداد تردد من اربع خانات على وحة اظهار LCD

عندي مشكلة وحيدة هي عندما اخذ القيمة من الTMR0 تكون القيمة ثنائية

واريد ان احوله الى BCD حتى استطيع التعامل مع الاظهار

(طبعا هذه الطريقة موجودة في جميع انواع المقاييس لكني لم افهمها)

لااريد ان يكتب احد لي الكود لكن اريد ان افهم قانون او قاعدة التحويل من ثم

اكتب الكود بنفسي

والسلام عليكم

الى الاخ الطيب عبدالقادر طفي اريد ان اخذ عنوان هاتفك الجوال او الارضي

راسلني على البريد الالكتروني :MHDY@MAILNOW.ORG

#2

الاخ مهدي اهلا بك في هذا المنتدى.

من حيث المبدأ 2 بايت ثنائي او سداسي عشر يعني يتسع لرقم FFFF وهو بالعشري 65535 هل تريد ارسالها بايت تلو الاخرى مثل 5 3 5 5 6 او كل خانتين معا 35 55 06 ؟ طبعا هذا يعتمد على تقبل الشاشة للاوامر او طريقة الاظهار لديها. الطريقة لدى هي عمل سب لجمع الاعداد عشريا حيث ان كل خانة من الخانات الثنائية لديها قيمة فمثلا الخانة الاولى 1 و الثانية 2 و ثم 4 ثم 8 ثم 16 ثم 32 الخ. بعد جمع الاعداد يتكون لديك اما في الذاكرة او في المسجلات الرقم بشكل عشري.

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#3

مرحبا بك مهدي عبد المنعم. :D

الأمر في غاية البساطة.. سأحاول ان أعطيك الخواريزمية باستعمال لغة الباسكال لأنها أقرب للتوضيح و هي تكتب كالخواريزمية..

كل عدد عشري يكتب على هذا النحو

value := d0 + d1 * 10^1 + d2 * 10^2 + d3 * 10^3 + .....

باعتبار ان هذا العدد Value ستخزنه في 2 بايت فإن أكبر رقم صحيح طبيعي موجب (دون إشارة) هو كما قال الأخعماد الخليل 65535 يعني يلزمك 5 خانات لتسجيل كل Digit.

لو أردنا استخلاص الأرقام العشرية Digits, يجب أن نقسم( قسمة صحيحة أي اوقليدية) العدد value على 10 أس 4 الخارج هو digit الخانة 5, باقي القسمة سنحتفظ به.

خذ الباقي تم قسمه على 10 أس 3, ستحصل على Digit الخانة 4’ احتفظ بباقي هذه القسمة..

أعد هذه العملية إلى أن تصل إلى الخانة الأولى التي هي خانة الوحدات.

هذه هي الخواريزمية :

procedure ValueToBCD(Value: integer);
var
 i: integer;
 TempVar: integer;
 digit: array[0..5] of Integer;
begin
//value := d0 + d1 * 10^1 + d2 * 10^2 + d3 * 10^3 + .....
TempVar:= value;
for i:= 5 downto 0 do
 begin
   //for extract the digit of the power 10^i ..
   // value = d5 * 10000 + q; => d5 = value div 10^5;
   digit:= TempVar div intpower(10,i);
   // initialize the Tempvar with the new number the "q"
   TempVar:= TempVar mod intpower(10,i);
 end;
end;

هذه العملية تساعدنا على استخلاص كل ديجيت على حدة و تسجيسله في خانة.

الآن كيف تقوم بتجميع هذه الخانات لتعيد كتابة هذا الرقم لكن بطريقة العد ست-عشري؟

يعني كيف تحول عدد مثلا 0ff$ إلى 0255$ ؟

سنأخد كل ديجيت و نضربها على التوالي في مضاعفات 16 أي بالعد الست-عشري في 10$ ثم في 100$ ثم في 1000$ و هكذا...

تم تعديل هذه المشاركة بواسطة ikossan في 16 مارس 2005 في 23:35

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#4

السلام عليكم ورحمة الله وبركاته ...

أهلا بك أخ مهدي

تقول في سؤلك أنك تستخدم شاشة عرض بأربع خانات ( من نوع LCD أي تأخذ ASCII code للحرف الذي ستطبعه) لذلك تحتاج لاظهار الأرقام بالصوره الهيكس وليست بالصوره العشريه الا اذا كنت تضمن أن اكبر رقم ستقوم بكتابته لن يتعدى 9999

لنأخذ أنك ستستخدم نظام الهيكس في العرض

اليك خواريزم بسي يمكن تنفيزه من خلال الميكروكنترولر PIC بكل سهوله , عليك فقط تحويله الى سب روتين.

ستحتاج الى أربع خانات لتخزن فيه الرقم الذي سوف تقوم بتحويله

بداية البرنامج :

1 - انسخ البايت الأدنى من محتوى المؤقت في سجل W

2 - صفر البتات الأربع الأخيره من السجل ( بعمل AND مع الرقم 0fh)

3 - اجمع على السجل W الرقم 32 لتحويل الأرقام (0:9) الى ascii code الخاص بها

4 - خزن الناتج في الخانه الاولى

5 - اطرح من السجل W الرقم 42 لتختبر اذا كان الرقم أكبر من 9

6 - اذا كانت نتيجة عملية الطرح رقم سالب يكون الرقم 9 أو اقل ولن تحتاج ال اي تغيير وتنتقل للمرحله رقم 11

7 - اذا لم تكن النتيجه سالبه اذا الرقم أكبر من 9 أي في المجموعه (A:F) ستحتاج لتعديل في الرقم الناتج.

8 - انقل محتوى الخانه الاولى الى السجل W

9 - اجمع على السجل W الرقم 32

10 - خزن الناتج في الخانه الاولى.

11 - نفس الخطوه رقم 1

12 - قم بتبديل الربع بتات الاولى مع الربع بتات الأخيره للسجل W باستخدام دالة السواب

13 - نفذ من أول الخطوه 2 الى الخطوه رقم 10 مع تغيير الخانه للخانه الثانيه.

14 - كرر نفس الخطوات من الخطوه 1 الى الخطوه 13 ولكن مع البايت الأعلى من محتوي المؤقت ,

وضع الناتج في الخانه الثالثه والرابعه.

بعد انتهاء السب روتين تكون قد حصلت ليس على ال BCD فقط وانما على ال ASCII الذي تحتاجه ال LCD

ملحوظه لن تحتاج الى تكرار الكود نفسه مع اختلاف الخانه ( العنوان الذي تخزن فيه), تستطيع عمل لوب وتغير العنوان فقط

وذلك باستخدام FSR , INDF

وبالتوفيق

#5

مشــــــــــــــــــــــــــكورين اخواتي جميعا وتسلم دياتكم

ولكن اخي ASM4ALL لم افهم لماذا اضفت 32

وطرحت 42

اذا كان بالامكان مثال كود مرفق

شكرا للجميع

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#6

اضاف ذلك لان الاعداد رقميا تختلف عن كود الاسكي -كود الاظهار- فمثلا الصفر قيمته صفر لكن لاظهار الصفر فانك ترسل الحرف 48 عشري او 30 سداسي عشر و مثال آخر 9 ترسله بشكل 57 عشري وطبعا هذا الرقم نحصل عليه من جدول الاسكي ASCII TABLE باختصار ستجد ان بالنسبة للارقام من 0 الى 9 فانك تضيف رقم ثابت لتحصل على اسكي الرقم و بالنسبة للطرح فالاخ احمد يريد التاكد من ان الرقم ليس اكبر من 9.

الاخ احمد انا شاك بالارقام ارجو التاكيد لاني يبدو اني بدات انسى لعدم الممارسة.

من 0-9 تجمع 48 عشري او 30 سداسي عشر للحصول على مكافئ الاسكي

ascii127.GIF

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#7

آسف حصلت شوية لخبطه في الرقام ,والحمد لله أخونا الكبير عماد لحقها :)

زي ما قال الأخ عماد حنضيف 30H الى الرقم = 48

وتختبر لو زاد عن 9 = 39H علشان كده حنطرح 39H = 57

,ولو عدى 9 يبقى نضيف كمان 11H = 17

علشان يكون المحصله 41H = 65 وهو أسكي للحرف A

#8

مكتبة من الأكواد snipet مفيدة لبرمجة Pic:

هذا كود على الجاهز B) :

;******************************************************************
;
; Test program for 32-bit unsigned binary to BCD and BCD to ASCII.
;
;******************************************************************
        title   "32-bit binary to ascii"
        list p=pic16f84,r=dec,n=80,x=off,st=off
        include ‹p16f84.inc›
        errorlevel -302        ; no bank warnings
	errorlevel -305	; no default dest warnings

#define	number	123456789

load32	macro	arg1,arg2
	movlw	arg1 ›› 24
	movwf	arg2
	movlw	arg1 ›› 16
	movwf	arg2+1
	movlw	arg1 ›› 8
	movwf	arg2+2
	movlw	arg1
	movwf	arg2+3
	endm

	CBLOCK	0x0c
	bin:4	; 32-bit binary number (unsigned)
	bcd:10	; 10 BC digits or 10 ascii chars
	pti,pto	; pointers
	ii
	temp
	cnt
	ENDC

	load32	123987,bin; load test value ‹number›
	call	b2bcd	; convert to 32-bit binary to 10 bcd
	call	bcd2a	; convert 10 bcd to 10 ascii
	goto	$

;******************************************************************
; Convert the 10 binary coded digits (5 bytes) starting at 
; ‹bcd› into an ascii string also starting at ‹bcd›. Original
; bcd digits are lost.

bcd2a	movlw	bcd+9
	movwf	pto	; destination pointer
	movlw	bcd+4
	movwf	pti	; source pointer
	movlw	5	; 5 bytes to process
	movwf	cnt

bcd2a1	movf	pti,w	; get current input pointer
	movwf	fsr
	decf	pti,f	; prepare for next
	movf	indf,w	; get 2 bcds
	movwf	temp	; save for later
	movf	pto,w	; get current output pointer
	movwf	fsr
	decf	pto,f	; prepare for next
	decf	pto,f
	movf	temp,w	; get digits back
	andlw	0x0f	; process lsd
	addlw	"0"
	movwf	indf	; to output
	decf	fsr,f
	swapf	temp,w	; process msd
	andlw	0x0f
	addlw	"0"
	movwf	indf	; to output
	decfsz	cnt	; all digits?
	goto	bcd2a1
	return  ; yes


;******************************************************************
; Convert 32-bit binary number at ‹bin› into a bcd number
; at ‹bcd›. Uses Mike Keitz's procedure for handling bcd 
; adjust; Modified Microchip AN526 for 32-bits.

b2bcd	movlw	32	; 32-bits
	movwf	ii	; make cycle counter
	clrf	bcd	; clear result area
	clrf	bcd+1
	clrf	bcd+2
	clrf	bcd+3
	clrf	bcd+4

b2bcd2	movlw	bcd	; make pointer
	movwf	fsr
	movlw	5
	movwf	cnt

; Mike's routine:

b2bcd3	movlw	0x33  
	addwf	indf,f	; add to both nybbles
	btfsc	indf,3	; test if low result › 7
	andlw	0xf0	; low result ؕ so take the 3 out
	btfsc	indf,7	; test if high result › 7
	andlw	0x0f	; high result › 7 so ok
	subwf	indf,f	; any results ‹= 7, subtract back
	incf	fsr,f	; point to next
	decfsz	cnt
	goto	b2bcd3

	rlf	bin+3,f	; get another bit
	rlf	bin+2,f
	rlf	bin+1,f
	rlf	bin+0,f
	rlf	bcd+4,f	; put it into bcd
	rlf	bcd+3,f
	rlf	bcd+2,f
	rlf	bcd+1,f
	rlf	bcd+0,f
	decfsz	ii,f	; all done?
	goto	b2bcd2	; no, loop
	return  ; yes

	end

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#9

مشكورين اخواني على مساهماتكم الرائعة

فعلا عم تعبكم معاي ولكن انا عم طبق البرنامج ما عم يصح معي

اذا بالامكان صار لازم اطلعكم على مشروعي

انا اخذ التردد من دينمو السيارة وادخله المعالج عن طريق القطب

RA4/TOkI الى الTMR0 ثم اخذ القيمة من الTMR0 كل 1/50 من الثانية

حتى يكون التحديث سريع ثم اريد ان انقل القيمةالى الشاشة

وهي من نوع HD44780 طبعا على اربع خانات او خانتين اذا بالامكان الكود

مع قليل من الشرح وان يكون الكود في غاية البساطة

كتبت الكود بنفسي ولكن عندي الحلقة الناقصة هي التحويل مثلا

ياخذ المعالج القيمة OX32 وتعني 50 عشري وانا اريد ان اظهرها

50 على الشاشةاو 0050 وليس 32

ملاحظة :"الكود لمعالجات ال pic"

واكون لكم من الشاكرين

#10

افعل ما ستفعله لو اردت تحويلها يدويا مثال 50 هي 00110010b او 32H

نلاحظ من الرقم البايناري ان 50 تتكون من 2 + 16 + 32

انك ستفعل نفس الشيئ في المعالج.

لتحويل بايت واحد فقط - من سداسي عشر الى عشري - قم بحجز 6 بايت في الذاكرة لتنفيذ العملية و ستكون نظريا كالتالي

_ _ _

_ _ _ +

_________

_ _ _

الناتج

في هذا الشكل يبدو اننا بحاجة الى 9 بايت لاتمام العملية و لكن بالامكان تخزين الناتج في الثلاث خانات الاوائل لتخفيض استهلاك الذاكرة. بعد اتمام الجمع سيكون لديك رقم عشري. مثال 50 ستظهر 050H. الان قم باضافة معادل الاسكي الى كل رقم لاظهاره على الشاشة. هل تريد ان ترى ما فعلت مع معالج 80251 لتحويل 2 بايت من سداسي عشر الى عشري؟ طويلة.

HEX2DECIMAL:
; CONVERTS 2 BYTE UNSIGNED HEXADECIMAL INTO DECIMAL VALUES
; INPUT IS HEXHIGH AND HEXLOW. OUTPUT IS DECIMALA
	PUSH	WR0
	CALL	DECIMALA_CLR
	CALL	DECIMALB_CLR
	MOV	R0,HEXHIGH
	MOV	R1,HEXLOW
	SLL	WR0
	JNC	HEX2DECIMALBITE
	CALL	ACCUMULATE_32768
	HEX2DECIMALBITE:
	SLL	WR0
	JNC	HEX2DECIMALBITD
	CALL	ACCUMULATE_16384
	HEX2DECIMALBITD:
	SLL	WR0
	JNC	HEX2DECIMALBITC
	CALL	ACCUMULATE_8192
	HEX2DECIMALBITC:
	SLL	WR0
	JNC	HEX2DECIMALBITB
	CALL	ACCUMULATE_4096
	HEX2DECIMALBITB:
	SLL	WR0
	JNC	HEX2DECIMALBITA
	CALL	ACCUMULATE_2048
	HEX2DECIMALBITA:
	SLL	WR0
	JNC	HEX2DECIMALBIT9
	CALL	ACCUMULATE_1024
	HEX2DECIMALBIT9:
	SLL	WR0
	JNC	HEX2DECIMALBIT8
	CALL	ACCUMULATE_512
	HEX2DECIMALBIT8:
	SLL	WR0
	JNC	HEX2DECIMALBIT7
	CALL	ACCUMULATE_256
	HEX2DECIMALBIT7:
	SLL	WR0
	JNC	HEX2DECIMALBIT6
	CALL	ACCUMULATE_128
	HEX2DECIMALBIT6:
	SLL	WR0
	JNC	HEX2DECIMALBIT5
	CALL	ACCUMULATE_64
	HEX2DECIMALBIT5:
	SLL	WR0
	JNC	HEX2DECIMALBIT4
	CALL	ACCUMULATE_32
	HEX2DECIMALBIT4:
	SLL	WR0
	JNC	HEX2DECIMALBIT3
	CALL	ACCUMULATE_16
	HEX2DECIMALBIT3:
	SLL	WR0
	JNC	HEX2DECIMALBIT2
	CALL	ACCUMULATE_8
	HEX2DECIMALBIT2:
	SLL	WR0
	JNC	HEX2DECIMALBIT1
	CALL	ACCUMULATE_4
	HEX2DECIMALBIT1:
	SLL	WR0
	JNC	HEX2DECIMALBIT0
	CALL	ACCUMULATE_2
	HEX2DECIMALBIT0:
	SLL	WR0
	JNC	END_HEX2DECIMAL
	CALL	ACCUMULATE_1
	END_HEX2DECIMAL:
	POP	WR0
	RET
ACCUMULATE_32768:
	PUSH	R0
	MOV	R0,#3
	MOV	DECIMALB+7,R0
	MOV	R0,#2
	MOV	DECIMALB+8,R0
	MOV	R0,#7
	MOV	DECIMALB+9,R0
	MOV	R0,#6
	MOV	DECIMALB+10,R0
	MOV	R0,#8
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_16384:
	PUSH	R0
	MOV	R0,#1
	MOV	DECIMALB+7,R0
	MOV	R0,#6
	MOV	DECIMALB+8,R0
	MOV	R0,#3
	MOV	DECIMALB+9,R0
	MOV	R0,#8
	MOV	DECIMALB+10,R0
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_8192:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#8
	MOV	DECIMALB+8,R0
	MOV	R0,#1
	MOV	DECIMALB+9,R0
	MOV	R0,#9
	MOV	DECIMALB+10,R0
	MOV	R0,#2
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_4096:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#4
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#9
	MOV	DECIMALB+10,R0
	MOV	R0,#6
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_2048:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#2
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#4
	MOV	DECIMALB+10,R0
	MOV	R0,#8
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_1024:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#1
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#2
	MOV	DECIMALB+10,R0
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_512:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#5
	MOV	DECIMALB+9,R0
	MOV	R0,#1
	MOV	DECIMALB+10,R0
	MOV	R0,#2
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_256:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#2
	MOV	DECIMALB+9,R0
	MOV	R0,#5
	MOV	DECIMALB+10,R0
	MOV	R0,#6
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_128:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#1
	MOV	DECIMALB+9,R0
	MOV	R0,#2
	MOV	DECIMALB+10,R0
	MOV	R0,#8
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_64:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#6
	MOV	DECIMALB+10,R0
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_32:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#3
	MOV	DECIMALB+10,R0
	MOV	R0,#2
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_16:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#1
	MOV	DECIMALB+10,R0
	MOV	R0,#6
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_8:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#8
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_4:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#4
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_2:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#2
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET
ACCUMULATE_1:
	PUSH	R0
	MOV	R0,#0
	MOV	DECIMALB+7,R0
	MOV	R0,#0
	MOV	DECIMALB+8,R0
	MOV	R0,#0
	MOV	DECIMALB+9,R0
	MOV	R0,#0
	MOV	DECIMALB+10,R0
	MOV	R0,#1
	MOV	DECIMALB+11,R0
	POP	R0
	CALL	DECIMAL_ADD	
	RET

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#11

شكرا جزيلا اخ عماد على رودك السريعة وانا اسف على التاخير

ولكن اخ عماد ان لااعرف الا برمجة الشرائح من PIC

ولكم جزيل الشكر على هذا المنتدى

#12
مهدي عبد المنعم كتب:
لااريد ان يكتب احد لي الكود لكن اريد ان افهم قانون او قاعدة التحويل من ثم

اكتب الكود بنفسي

طيب انا كتبت جدول بسيط لابد من ان تحوله الى برنامج. الفكرة بسيطة وقد خطرت لي لتبسيط الموضوع. فقط عليك جمع رقم الى الرقم الذي تريد تحويله لتحصل على المكافئ و لا تنسى اضافة معادل الاسكي بالطريقة التى تناسبك. وهذا هو الجدول. كما ترى 32H نجمع لها 1EH فتعطينا 50H. فقط تاكد من الجدول لاني لم اختبر كل القيم ولكني اعتقد انه صحيح.

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

FROM 01-09 ADD 000
FROM 0A-13 ADD 006
FROM 14-1D ADD 00C
FROM 1E-27 ADD 012
FROM 28-31 ADD 018
FROM 32-3B ADD 01E
FROM 3C-45 ADD 024
FROM 46-4F ADD 02A
FROM 50-59 ADD 030
FROM 5A-63 ADD 036
FROM 64-6D ADD 09C
FROM 6E-77 ADD 0A2
FROM 78-81 ADD 0A8
FROM 82-8B ADD 0AE
FROM 8C-95 ADD 0B4
FROM 96-9F ADD 0BA
FROM A0-A9 ADD 0C0
FROM AA-B3 ADD 0C6
FROM B4-BD ADD 0CC
FROM BE-C7 ADD 0D2
FROM C8-D1 ADD 138
FROM D2-DB ADD 13E
FROM DC-E5 ADD 144
FROM E6-EF ADD 14A
FROM F0-F9 ADD 150
FROM FA-FF ADD 156

39_22.gif

تزود من التقوى فإنك لا تدري *** إذا جن ليل هل تعيش إلى الفجر

فكم من فتى أمسى وأصبح ضاحكاً *** وقد نسجت أكفانه وهو لا يدري

لقراءة القرآن الكريم و سماعه و تفسيره ........

ماذا يعني انني مسلم سني؟

قصة غريبة

ConflictResolution.gif

#13

طيب هذا الكود ياخذ القيمة من البايت bin ويحوله من 8 بت باينري الى ثلاث خانات BCD هم humdrds tens onces حسب مافهمت هذا الكود مقتبس من برنامج عداد قيمة مسجل الTMR0

هل بالامكان توضيح هذا الكود بشكل مفصل

;-------------------------------------------------------------------------;

; Change binary nbr in bin to BCD ;

;-------------------------------------------------------------------------;

binary_to_bcd ; by Scott Dattalo

clrf hundreds

swapf bin, W

addwf bin, W

andlw B'00001111'

skpndc

addlw 0x16

skpndc

addlw 0x06

addlw 0x06

skpdc

addlw -0x06

btfsc bin,4

addlw 0x16 - 1 + 0x6

skpdc

addlw -0x06

btfsc bin,5

addlw 0x30

btfsc bin, 6

addlw 0x60

btfsc bin,7

addlw 0x20

addlw 0x60

rlf hundreds, f

btfss hundreds, 0

addlw -0x60

movwf tens_and_ones

btfsc bin,7

incf hundreds, f

return

بهذه الحالة اذا فهمت الية التحويل اصبحمن لممكن كتابة برنامج عداد

بالمناسبة اخ عماد هل انت من سوريا

واليكم البرنامج كامل

TMR0.zip

هذا الموضوع مغلق.

مواضيع مشابهة