السلام عليكم
ارفق لك الملف الخاص بالمرسل بعد مراجعة التعليمات الخاصة بالكيباد وتصحيح بعض الاخطاء واتمام ما كان ناقصا:
تجد في الملف :
بناء المشروع على MPLAB 8.1x
ملف الاسمبلي
ملف هيكس
ملف بروتوس ..
ملف تجربة ادخال رقم من كيباد وإظهاره على المنفذ أ:
http://filaty.com/f/903/92139/em_01.rar.html
ملف الاسمبلي:
كود:
;*****************************************************************************
LIST p=16f84; Définition de processeur
#include <p16f84.inc>; Définitions de constantes
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;*********************************************************************
ORG 0X00
GOTO START
ORG 0X04
GOTO START
;MAIN CODE
START
BSF STATUS,RP0 ;BANK 1
MOVLW B'00001111'
MOVWF TRISB ;RB0,RB1,RB2,RB3 IS INPUT =====RB4,RB5,RB6,RB7 IS OUTPUT
CLRF TRISA ;ALL PORT A IS OUTPUT
BCF STATUS,RP0 ;BANK 0
CLRF PORTA
CLRF PORTB
LOOP
BSF PORTB,4
BCF PORTB,5
BCF PORTB,6
BTFSC PORTB,0
GOTO ONE ;1
BTFSC PORTB,1
GOTO FOUR ;4
BTFSC PORTB,2
GOTO SEVEN ;7
BTFSC PORTB,3
GOTO AA ;10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCF PORTB,4
BSF PORTB,5
BCF PORTB,6
BTFSC PORTB,0
GOTO TWO ;2
BTFSC PORTB,1
GOTO FIVE ;5
BTFSC PORTB,2
GOTO EIGHT ;8
BTFSC PORTB,3
GOTO ZERO ;0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCF PORTB,4
BCF PORTB,5
BSF PORTB,6
BTFSC PORTB,0
GOTO THREE ;3
BTFSC PORTB,1
GOTO SIX ;6
BTFSC PORTB,2
GOTO NINE ;9
BTFSC PORTB,3
GOTO BB ;11
GOTO LOOP
ZERO
MOVLW 0
MOVWF PORTA
GOTO LOOP
ONE
MOVLW .1
MOVWF PORTA
GOTO LOOP
TWO
MOVLW .2
MOVWF PORTA
GOTO LOOP
THREE
MOVLW .3
MOVWF PORTA
GOTO LOOP
FOUR
MOVLW .4
MOVWF PORTA
GOTO LOOP
FIVE
MOVLW .5
MOVWF PORTA
GOTO LOOP
SIX
MOVLW .6
MOVWF PORTA
GOTO LOOP
SEVEN
MOVLW .7
MOVWF PORTA
GOTO LOOP
EIGHT
MOVLW .8
MOVWF PORTA
GOTO LOOP
NINE
MOVLW .9
MOVWF PORTA
GOTO LOOP
AA
MOVLW .10
MOVWF PORTA
GOTO LOOP
BB
MOVLW .11
MOVWF PORTA
GOTO LOOP
END
الخطوة التالية : في الملف السابق (الحالة العادية) كنت تأمر البيك بأن يضع الرقم المضغوط على مفتاحه على المنفذ أ PORTA مباشرة ..
المطلوب الان ان تأمر البيك بأن يضع الرقم (المضغوط عليه في الكيباد) في مسجل (او متغير ) اولا قبل وضعه في PORTA
قارن بين ملف اسمبلي السابق والمعدل لملاحظة الفرق:
ملف الاسمبلي المعدل:
كود:
;*****************************************************************************
LIST p=16f84; Définition de processeur
#include <p16f84.inc>; Définitions de constantes
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;*****************************************************************************
; VARIABLES
CBLOCK 0x0C
VE_01 : 1
ENDC
;*********************************************************************
ORG 0X00
GOTO START
ORG 0X04
GOTO START
;MAIN CODE
START
BSF STATUS,RP0 ;BANK 1
MOVLW B'00001111'
MOVWF TRISB ;RB0,RB1,RB2,RB3 IS INPUT =====RB4,RB5,RB6,RB7 IS OUTPUT
CLRF TRISA ;ALL PORT A IS OUTPUT
BCF STATUS,RP0 ;BANK 0
CLRF PORTA
CLRF PORTB
LOOP
MOVF VE_01,w
MOVWF PORTA
BSF PORTB,4
BCF PORTB,5
BCF PORTB,6
BTFSC PORTB,0
GOTO ONE ;1
BTFSC PORTB,1
GOTO FOUR ;4
BTFSC PORTB,2
GOTO SEVEN ;7
BTFSC PORTB,3
GOTO AA ;10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCF PORTB,4
BSF PORTB,5
BCF PORTB,6
BTFSC PORTB,0
GOTO TWO ;2
BTFSC PORTB,1
GOTO FIVE ;5
BTFSC PORTB,2
GOTO EIGHT ;8
BTFSC PORTB,3
GOTO ZERO ;0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCF PORTB,4
BCF PORTB,5
BSF PORTB,6
BTFSC PORTB,0
GOTO THREE ;3
BTFSC PORTB,1
GOTO SIX ;6
BTFSC PORTB,2
GOTO NINE ;9
BTFSC PORTB,3
GOTO BB ;11
GOTO LOOP
;;;;;;;;;;;;;;;أجزاء برنامج استدعاء كل رقم ;;;;;;;;;;;;;
ZERO
MOVLW 0
MOVWF VE_01
GOTO LOOP
ONE
MOVLW .1
MOVWF VE_01
GOTO LOOP
TWO
MOVLW .2
MOVWF VE_01
GOTO LOOP
THREE
MOVLW .3
MOVWF VE_01
GOTO LOOP
FOUR
MOVLW .4
MOVWF VE_01
GOTO LOOP
FIVE
MOVLW .5
MOVWF VE_01
GOTO LOOP
SIX
MOVLW .6
MOVWF VE_01
GOTO LOOP
SEVEN
MOVLW .7
MOVWF VE_01
GOTO LOOP
EIGHT
MOVLW .8
MOVWF VE_01
GOTO LOOP
NINE
MOVLW .9
MOVWF VE_01
GOTO LOOP
AA
MOVLW .10
MOVWF VE_01
GOTO LOOP
BB
MOVLW .11
MOVWF VE_01
GOTO LOOP
END