قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

hissokaaaa
:: مهندس ::
تاريخ التسجيل: Jan 2009
المشاركات: 15
نشاط [ hissokaaaa ]
قوة السمعة:0
قديم 26-09-2009, 12:06 PM المشاركة 1   
افتراضي سؤال للاستاذ ahmad_s_f Twitter FaceBook Google+



اريد ان اقوم ببرنامج على MikroC

في الحقيقة هي لعبة معPIC هو سيختار عدد من 1 الى F بطريقة عشوائية وانا احاول معرفة العدد

سوف استعمل switches2 و PIC 16F84A

: يعمل هكذا 

من
اذا ضغطت على switch1 سوف انتقل الى 0 اذا ضغطت مرة اخرى1 وهكذا الى F
اذا ضغطت علىSwitch2 أكون أكدت الاختيار و سيقوم بالمقارنة مع العدد الذي سبق و اختاره هو .
اذا كان العدد الذي اخترته صحيح سيرسل صوت اما اذا كان خاطئ فسيقول هل العدد اصغر أم اكبرمن العدد اختاره هو
ولي الحق في 3 محاولات فقط
المشكل الذي واجهته هو كيف اجعل pic يختار عدد عشوائي و كيف سأقارنه مع العدد الذي اخترته
علما واني استعملتChar x تزيد كلما ضغطت على Switch1
الرجاء المساعدة و شكرا

اعلانات

الصورة الرمزية SAMI-ALG
SAMI-ALG
:: مهندس جيد ::
تاريخ التسجيل: Jul 2009
الدولة: الجزائر
المشاركات: 199
نشاط [ SAMI-ALG ]
قوة السمعة:0
قديم 08-10-2009, 02:39 PM المشاركة 2   
افتراضي


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

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

الكود كالتالي
كود:
;****************************** Define  **********************************;
PC         equ           0x02
TMR0       equ           0x01
status     equ           0x03
porta      equ           0x05
portb      equ           0x06
intcon     equ           0x0B
trisa      equ           0x85
trisb      equ           0x86
adcon1     equ           0x9F
optionreg  equ           0x81

;****************************** Variables  *******************************;
trial      equ           0x20
up         equ           0x21
target     equ           0x22
dota       equ           0x25
dotb       equ           0x26
dotc       equ           0x27
dotd       equ           0x28
wtemp      equ           0x29
statustemp equ           0x2A


    org 0x00
    goto start
    
;***************************** interrupt  ********************************;
    org 0x04

    movwf wtemp                    ;     temporary save registers
    movf status,0                  ;
    movwf statustemp               ;

    call timer                     ;     fight bouncing switch    
    incf trial                     ;     trial++
    movlw 0x10                     ;     
    subwf trial,0                  ;
    btfsc status,2                 ;     limit upper bound to 'F'
    clrf trial                     ;
    
    movf statustemp,0              ; 
    movwf status                   ;
    movf wtemp,0                   ;    reload registers
    bcf intcon,1                   ;
    retfie


start
;****************************** Setup  ***********************************;
    bsf status,5                   ;    goto bank 1
    movlw b'000001'                ;
    movwf trisa                    ;    Pin A 0 is an input
    movlw b'00000001'              ;
    movwf trisb                    ;    Pin B 0 input and B1 -- B7 outputs
    movlw b'110'                   ;
    movwf adcon1                   ;    Port A is Digital
    bcf optionreg,5                ;    TMR0 enabled
    bcf status,5                   ;    back to bank 0
    movlw b'00010000'              ;   
    movwf intcon                   ;    B0 interrupt enabled
    
   

;**************************** main program *******************************;
main                                 
    clrf trial                     ;
    movlw 0x04                     ;    reset game 
    movwf up                       ;

    call rand                     ;generate random number,saved in 'target'
next
    decfsz up                      ;    allow 3 trials 
    goto game                      ;    select and display trial
    call loose                     ;    if trials out, make loose animation
    goto main                      ;    and reset the game
    

;******************** loose
loose
    movf target,0                  ;
    call convert                   ;
    movwf portb                    ;    display 'target'
    movwf wtemp                    ;
    comf wtemp,1                   ;    prepare for xor
    movlw 0x0F                     ;
    movwf dota                     ;
loop10
    call timer                     ;    wait
    movf wtemp,0                   ;    prepare for xor
    xorwf portb,1                  ;    change display stat
    decfsz dota                    ;    allow 14 loops
    goto loop10
    return

  
;***************************   random  ***********************************;
rand
    movf TMR0,0                    ;    read random number from TMR0
    andlw b'00001111'              ;    delete the 4 MSB
    movwf target                   ;    store in 'target'
    return
 
    
;****************************   GAME    **********************************;
game
    bsf intcon,7                   ;    allow interrupt
    movf trial,0                   ;    load W with trial
    call convert                   ;    convert trial to numbers
    movwf portb                    ;    display trial
    btfsc porta,0                  ;    test validation  button
    goto game                      ;    reloop if released
    bcf intcon,7                   ;    ban interrupt if trial valided
    movf target,0                  ;  load W with 'target'
    subwf trial,0                  ;  do 'trial' - 'target'
    btfsc status,2                 ;  if the result is zero
    goto win                       ;  then call win
    movwf wtemp
    btfsc wtemp,7                  ;  else if the result is negative
    goto more                      ;  then call more
    goto less                      ;  else call less                      

;************************  win
win              
    movlw 0x22                       ;
    movwf dota                       ; 
    movlw b'11111110'                ;
    bsf status,0                     ;
    movwf wtemp                      ; 
loop2
    call timer                       ;  wait
    rlf wtemp,1
    movf wtemp,0
    movwf portb                      ;  only the following pin is on
    decfsz dota                      ;  allow 18 loops
    goto loop2
    goto main                        ;  after 18 loops, reset game
   

;************************ less
less
    movlw b'11111100'                ;
    movwf portb                      ;  the middle bar is on
    movlw 0x07                       ;
    movwf dota                       ;
   
loop4
    call timer                       ;  wait
    movlw b'01000000'                ;  prepare to xor the lower bar
    xorwf portb,1                    ;  change the lower bar stat
    decfsz dota                      ;  allow 6 loops
    goto loop4                       ;  make animation
    goto next                        ;  another trial


;************************ more
more
    movlw b'11111100'                ;  
    movwf portb                      ;  the middle bar is on
    movlw 0x07                       ;
    movwf dota                       ;    
loop5
    call timer                       ;   wait
    movlw b'00001000'                ;   prepare to xor the upper bar
    xorwf portb,1                    ;   change the upper bar stat
    decfsz dota                      ;   allow 6 loops
    goto loop5
    goto next                        ;   another trial


;**************************** convert  ********************************;
convert
    addwf PC
    retlw b'00000010'              ; 0
    retlw b'11001110'              ; 1
    retlw b'00100100'              ; 2
    retlw b'10000100'              ; 3
    retlw b'11001000'              ; 4
    retlw b'10010000'              ; 5
    retlw b'00010000'              ; 6
    retlw b'11000110'              ; 7
    retlw b'00000000'              ; 8
    retlw b'10000000'              ; 9
    retlw b'01000000'              ; A
    retlw b'00011000'              ; b
    retlw b'00111100'              ; c
    retlw b'00001100'              ; d
    retlw b'00110000'              ; E
    retlw b'01110000'              ; F


;*****************************  timer   *******************************; 
timer 
    clrf dotb                        ;
    clrf dotc                        ;
    movlw D'10'                      ;
    movwf dotd                       ;
loop3                                ;
    decfsz dotb                      ;  this timer is for animation delay
    goto loop3                       ;
    decfsz dotc                      ;
    goto loop3                       ;
    decfsz dotd                      ;
    goto loop3                       ;
    return


    
    END
وهذه الدارة المستخدمة



ودمت في رعاية الله وحفظه

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

hissokaaaa
:: مهندس ::
تاريخ التسجيل: Jan 2009
المشاركات: 15
نشاط [ hissokaaaa ]
قوة السمعة:0
قديم 09-10-2009, 05:21 PM المشاركة 3   
افتراضي


thanks but i want to use mikro c

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 11:42 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025