روبوت بالميكروكنتروللرpic16f84


(system) #1

السلام عليكم ورحمة الله وبركاته
تحياتي لكم جميعا
لو سمحتم انا مطلوب مني مشروع حاجة شبه روبوت صغير بتلات عجلات وان اعمله بـ pic16f84 وانا درست ميكرو بروسيسور8085وz80 ولم ادرس الميكروكنتروللر وعندي بعض المشاكل اولا انا عندي الكود بتاع المشروع ده بالاسيمبلي وانا هحوله للميكرو سي لكن انا مش فاهمة كود الاسيمبلي نفسه فاحضرته بين ايديكم الان طلبا من من يقدر ان يساعدني ان يضع لي comment او شرح مبسط لكل سطر من الكود في اقرب وقت ممكن لاحتياجي لاني لسه هحله للميكرو سي وجزاكم الله خيرا

اولا:
Cerberes is a small three wheel robot that avoids obstacles which it senses with its active infrared sensors.
Each rear wheel has its own motor, the single front wheel is not powered. The robot steers “like a tank” by rotating the rear wheels in opposite direction.
[FONT=Times New Roman]The sensors are built with infrared LEDs which are running at 36kHz and two 36 kHz remote control receiver modules.
When the 36 kHz infrared light from the LEDs is reflected by an object, one of the receiver modules will be triggered, and the PIC16F84 µController will steer the ROBOT away from the objects by reversing one of the motors.

ثانيا:الكود:[/font]

;CERBERES : MINI ROBOT WITH IR EYES ;
;USES PIC16F84 µCONTROLLER ;
;WRITTEN IN MICROCHIP ASSEMBLY USE MPASM ASSEMBLER FROM MPLAB ;
;MPLAB CAN BE DOWNLOADED FROM WWW.MICROCHIP.COM ;

;SET UP THE CONTANTS & VARIABLES*

LIST P=16C84
ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES

STATUS EQU H’03’ ;STATUS REGISTER
TRISB EQU H’86’ ;TRISB REGISTER FOR SETUP OF PORTB
PORTB EQU H’06’ ;PORTB REGISTER TO DRIVE PORT B
COUNT1 EQU H’0C’ ;COUNT VARIABLE 1 IS IN GENERAL PURPOSE REG 08H
COUNT2 EQU H’0D’ ;COUNT VARIABLE 2 IS IN GENERAL PURPOSE REG 09H

;SET UP PORT B IN & OUTPUT*
BSF STATUS,5 ;SWITCH TO BANK0 TO SET UP PORT B
MOVLW B’11110000’ ;RB7,6,5,4 IS INPUT
MOVWF TRISB ;RB3,2,1,0 IS OUTPUT
BCF STATUS,5 ;SWITCH BACK TO BANK0 TO USE PORT B

;MAIN PROGRAM*
START MOVLW B’00000101’ ;MAKE RB0&2 HIGH: MOVE FORWARD
MOVWF PORTB ;
MOVLW H’FE’ ;RESET COUNT1 TO 254
MOVWF COUNT1 ;
MOVLW H’FE’ ;RESET COUNT2 TO 254
MOVWF COUNT2 ;
BTFSS PORTB,5 ;CHECK RB5 (INPUT); IF IT IS LOW
CALL BACKL ;THEN EXECUTE BACKLEFT ROUTINE
BTFSS PORTB,6 ;CHECK RB6 (INPUT); IF IT IS LOW
CALL BACKR ;EXECUTE BACKRIGHT ROUTINE
GOTO START ;RETURN TO LABEL START

;BACKLEFT ROUTINE*
BACKL MOVLW B’00001010’ ;MAKE RB1&3 HIGH: MOVE BACKWARD
MOVWF PORTB ;
CALL DELAY ;
MOVLW B’00001001’ ;MAKE RB2&3 HIGH: ROTATE LEFT
MOVWF PORTB ;
CALL DELAY ;
RETURN
;BACKRIGHT ROUTINE*
BACKR MOVLW B’00001010’ ;MAKE RB1&3 HIGH: MOVE BACKWARD
MOVWF PORTB ;
CALL DELAY ;
MOVLW B’00000110’ ;MAKE RB2&3 HIGH: ROTATE RIGHT
MOVWF PORTB ;
CALL DELAY ;
RETURN

DELAY MOVLW H’EE’ ;RESET ALL COUNTER VARIABLES
MOVWF COUNT1
MOVLW H’99’
MOVWF COUNT2

LOOP1 CLRWDT ;RESET THE WATCHDOG TIMER
DECFSZ COUNT1,1 ;this is a delay loop
GOTO LOOP1 ;tuned to make Cerberes
DECFSZ COUNT2,1 ;turn about 90 degrees
GOTO LOOP1
RETURN

END;

ارجو شاكرة بالاسراع في الرد لكل من يستطيع المساعده
ودمتم طيبين


(system) #2

use C programming language , ur code will be 5 lines or less


(system) #3

مرحباً
لفهم الكود يجب أو أن تكون على إطلاع بكيفية عمل الميكروكنتروللر
16f84
قمت برفق مجموعة من الملفات اتمنى أن تساعدك
بنسبة إلى البرمجةc أسهل بكثير من اسمبلي .
نصيحة أخرى حول أن تقوم بالبرمجة وحدك .


(system) #4

إذا أردت المزيد من المعلومات أنا حاضر