Bonsoir tout le monde ,
En faite j'ai fait le programme d'un moteur commandé par pic16f877 + afficheur lcd qui affiche l'état de deux capteurs de fin de position.
Le problème c'est que j'ai réalisé chaque code (celui de l'lcd et du moteur) chacun à part donc là en gros j'ai 2 portions de codes l'une réalisée par langage c sur le compilateur mikro c et l'autre en assembleur sur Mplab que je voudrai assembler en un seul code.
voilà les 2 portions je voudrais bien une solution qui m'évite de recommencer à nouveau l'un des deux codes , (meme quand je compile le code de l'lcd avec mikro c j'ai un fichier .asm qui contient des instructions que mplab peut pas compiler).
****************************** *********************
Le code de l'lcd :
// Lcd pinout settings
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D4 at RC2_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D7 at RC5_bit;
// Pin direction
sbit LCD_RS_Direction at TRISC0_bit;
sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC4_bit;
sbit LCD_D7_Direction at TRISC5_bit;
void main()
{
int i;
portb=0b00000000;
trisb=0b00001100;
Lcd_Init();
Lcd_out(1,1,"B");
delay_ms(20);
Lcd_out(1,2,"o");
Lcd_cmd(_LCD_CURSOR_OFF);
Lcd_out(1,3,"n");
delay_ms(20);
Lcd_out(1,4,"j");
delay_ms(20);
Lcd_out(1,5,"o");
delay_ms(20);
Lcd_out(1,6,"u");
delay_ms(20);
Lcd_out(1,7,"r");
delay_ms(20);
for(i=0; i<7; i++) { // Move text to the right 7 times
Lcd_Cmd(_LCD_SHIFT_Right);
}
while (1)
{
if (PORTB.RB2 == 0)
{
Lcd_Out_Cp("Montee impossible");
delay_ms(200);
Lcd_cmd(_LCD_CLEAR);
}
if (PORTB.RB3 == 0)
{Lcd_Out_Cp("Descente impossible");}
delay_ms(200);
Lcd_cmd(_LCD_CLEAR);
}
}
****************************** ***********************
le code du moteur :
LIST p=16F877 ; PIC16F877 is the target processor
#include "P16F877.INC" ; Include header file
CBLOCK 0x10 ; Temporary storage
pos
dc1
dc2
ENDC
LIST p=16F877 ; PIC16F844 is the target processor
#include "P16F877.INC" ; Include header file
CBLOCK 0x10 ; Temporary storage
ENDC
ORG 0
entrypoint goto start
ORG 4
intvector goto intvector
start clrw ; Zero.
movwf PORTD ; Ensure PORTD is zero before we enable it.
bsf STATUS,RP0 ; Select Bank 1
movlw 0xF0 ; Set port B bits 0-3 as outputs
movwf TRISD ; Set TRISD register.
bcf STATUS,RP0 ; Select Bank 0
movlw 3 ; Initialize the motor position
movwf pos
movwf PORTD
call delay
clrf PORTD ; Motor drive off
;Main loop
loop btfss PORTB,0 ; Test clockwise button
call stepcw
btfss PORTB,1 ; Test anti-clockwise button
call stepccw
goto loop
;Rotate one step clockwise
stepcw bcf STATUS,C ; Clear the carry flag
btfsc pos,3 ; Set carry if this bit set
bsf STATUS,C
rlf pos,W ; Pick up and rotate the motor's current position
andlw 0x0F ; Mask to lower nibble
movwf pos
movwf PORTD ; Drive the outputs
call delay ; Wait
clrf PORTD ; Clear the output
return
;Rotate one step counter clockwise
stepccw bcf STATUS,C ; Clear the carry flag
btfsc pos,0
bsf pos,4
rrf pos,W ; Pick up and rotate the motor's current position
andlw 0x0F ; Mask to lower nibble
movwf pos
movwf PORTD ; Drive the outputs
call delay ; Wait
clrf PORTD ; Clear the output
return
; This routine implements the delay between steps,
; and thus controls the motor speed.
delay movlw 18 ; Outer loop iteration count
movwf dc1
dl1 clrf dc2 ; Initialize inner loop
dl2 nop
nop
decfsz dc2,F
goto dl2
decfsz dc1,F
goto dl1
return
END
Merci d'avance
-----