قبل ساعات قمت بتحميل MICROC PRO من موقع مايكرواليكترونيكا ونصبتة في الحاسبة
ثم عملت مشروع جديد على PIC16F84A مع كرستالة 4MHZ
ثم لصقت فية الكود الذي وضعتة في احد مشاركاتك السابقة ولم يكن يعمل
قمت بتحويلة الى هيكس وبرمجتة الى البل الي عندي وجربت البرنامج وطبعا لم يعمل
وبعد الفحص (تعرف انا ثقافتي مو لغة سي ) وجدت انا هذا البرنامج لم يكتب بواسطة MICROC وانما بلغة سي اخرى وسبب عدم عمله هو لن تعاريف الريجسترات PORTA PORTB يختلف تمثيلها بلغة MICROC
فقمت بتغيير اسماء البورتات وايضا طريقة ربط المطور واشارات الادخال لتكون نفس الدائرة التي جربنا عليها البرنامج الذي وضعتة انا بلغة الاسمبلي
كود:
void main ()
{
unsigned char step_seq;
unsigned char direction;
unsigned char i;
TRISB=0b00000000;// all PORTB will be output and b4 b5 b6 b7 will drive the motor
TRISA=0b11111111; // PORTA will be the input signal A0=step A1=direction
PORTB=0b00010000; // intial state
step_seq = 0;
pulse_detect :
do {} while (PORTA.RA0== 0); /* loop while Step signal is LO i.e. A0=0*/
/* Step signal has gone to 1 */
direction = PORTA.RA1; /* get Direction signal input*/
if (PORTA.RA0 == 0) goto pulse_detect; /* too narrow must be noise reject*/
i = PORTA.RA1; /* read A3 again and temporarily store Direction in i*/
if (direction != i) goto pulse_detect ; /* compare two samples of Direction reject if not the same */
do { } while (PORTA.RA0 == 1); /* waite for negative edge of Step signal*/
if (PORTA.RA0 ==1) goto pulse_detect ;
if (direction ==0)
{
step_seq++; if (step_seq == 4) step_seq = 0;
}
else
{
if (step_seq == 0) step_seq = 4; step_seq--;
}
switch (step_seq)
{
case 0: PORTB = 0b00010000;
break;
case 1: PORTB = 0b00100000;
break;
case 2: PORTB = 0b01000000;
break;
case 3: PORTB = 0b10000000;
break;
default : step_seq = 0;
}
goto pulse_detect;
}