السلام عليكم وعيد سعيد للجميع:
من جهتي هيأت برنامجا صغيرا بالاسمبلي يجعل البيك 16F628A يكتب الرقم
5282
بهذه الدارة البسيطة حيث يتضح ان الغرض هو استخدام تقنية multiplexing للعارضات السباعية مما يجعلنا نقتصد في عدد بينات البيك:
تمت العملية بنجاح على مبلاب 8.10 ..
طلبت ببراءة من بروتوس 7.1 ان يحاكي عمل الدارة ..المفروض وكما شرح اخي محمد ان تظهر الارقام دفعة واحدة، نتيجة سرعة المسح (10ميللي ثانية تقريبا) رغم ان البيك يظهرها في الواقع، متتابعة من اليسار الى اليمين.
لكن بروتوس بدا مشاكسا وبدأ يظهر الارقام بشكل غير مفهوم :
وهاهو البرنامج :
كود:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PIC16F628A : 5282
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIST p=16f628a; Définition de processeur
#include <p16f628a.inc>; Définitions de constantes
__CONFIG 0x3F32
BANK0 macro
bcf STATUS,RP1
bcf STATUS,RP0
endm
BANK1 macro
bcf STATUS,RP1
bsf STATUS,RP0
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;VARIABLES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CBLOCK 0x20
cmpt1 : 1
cmpt2 : 1
cmpt3 : 1
ENDC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; RESET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Initialisation
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
init
BANK0
MOVLW b'00000000'
MOVWF PORTA
MOVLW b'00000000'
MOVWF PORTB
MOVLW b'00000111'
MOVWF CMCON
movlw b'0'
BANK1
movwf TRISB
movlw B'0'
movwf TRISA
MOVLW b'00000000'
MOVWF VRCON
BANK0
goto start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Temporisation
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tempo
movlw .5
movwf cmpt3
b3
movlw .15
movwf cmpt2
b2
movlw .3
movwf cmpt1
b1
decfsz cmpt1,f
goto b1
decfsz cmpt2,f
goto b2
decfsz cmpt3,f
goto b3
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Programme principal
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start
movlw b'00001'
movwf PORTA
movlw .5
movwf PORTB
call tempo
movlw b'00010'
movwf PORTA
movlw .2
movwf PORTB
call tempo
movlw b'00100'
movwf PORTA
movlw .8
movwf PORTB
call tempo
movlw b'01000'
movwf PORTA
movlw .2
movwf PORTB
call tempo
goto start
END
والهيكس ايضا:
كود:
:020000040000FA
:10000000012803138312003085000030860007307A
:100010009F000030031383168600003085000030F7
:100020009F000313831221280530A2000F30A10086
:100030000330A000A00B1A28A10B1828A20B162829
:10004000080001308500053086001420023085004C
:100050000230860014200430850008308600142009
:0C006000083085000230860014202128A2
:02400E00323F3F
:00000001FF
وحتى أتأكد من ان البرنامج سليم ، عمدت الى تغيير توقيت المسح tempo فجعلته 500ms بدل 10ms.
وهكذا اصبحت الارقام تظهربشكل جيد لكن واحدة تلو الاخرى من اليسار الى اليمين (اي من 5 الى 2) نتيجة فارق نصف ثانية تقريبا :
الجزء tempo الذي تم تغييره في البرنامج الاول (السريع):
كود:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Temporisation
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tempo
movlw .123
movwf cmpt3
b3
movlw .131
movwf cmpt2
b2
movlw .9
movwf cmpt1
b1
decfsz cmpt1,f
goto b1
decfsz cmpt2,f
goto b2
decfsz cmpt3,f
goto b3
return
فأصبح الهيكس كالتالي:
كود:
:020000040000FA
:10000000012803138312003085000030860007307A
:100010009F000030031383168600003085000030F7
:100020009F000313831221287B30A2008330A1009C
:100030000930A000A00B1A28A10B1828A20B162823
:10004000080001308500053086001420023085004C
:100050000230860014200430850008308600142009
:0C006000083085000230860014202128A2
:02400E00323F3F
:00000001FF
وكل عام وانتم بخير