Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1420
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Je sais
Je me suis endormi hier soir en réfléchissant comment gérer ces pentes et me suis réveillé en y pensant encore. Entre je ne me rappelle plus
En fait ce n'est pas vraiment comment programmer une pente qui sera le plus laborieux à faire, c'est de refondre le programme complet presque abouti. On a vu qu'il fallait gérer les deux axes (presque) simultanément, mais plutot que de faire une routine qui reconnaitrait une pente avant de la traiter il faut appliquer cette règle à tous les tracés qu'ils soient horizontaux ou verticaux, par exemple un trait horizontal serait un tracé avec un incrément vertical de zéro et un vertical serait un tracé avec un incrément horizontal de zéro.
Çà implique de mettre à la poubelle les différentes routines de tracé X et Y que j'ai déjà laborieusement faites pour en mettre une seule qui gérera tout.
Je me suis endormi hier soir en réfléchissant comment gérer ces pentes et me suis réveillé en y pensant encore. Entre je ne me rappelle plus
En fait ce n'est pas vraiment comment programmer une pente qui sera le plus laborieux à faire, c'est de refondre le programme complet presque abouti. On a vu qu'il fallait gérer les deux axes (presque) simultanément, mais plutot que de faire une routine qui reconnaitrait une pente avant de la traiter il faut appliquer cette règle à tous les tracés qu'ils soient horizontaux ou verticaux, par exemple un trait horizontal serait un tracé avec un incrément vertical de zéro et un vertical serait un tracé avec un incrément horizontal de zéro.
Çà implique de mettre à la poubelle les différentes routines de tracé X et Y que j'ai déjà laborieusement faites pour en mettre une seule qui gérera tout.
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1420
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonsoir à tous,
Je suis en train de travailler sur une routine de division 16bits mais un truc me chagrine, exemple: je fais la soustraction négative 0x2-0xFE et le registre status reste à zéro, le bit N n'est pas positionné. Normalement à la suite de cette soustraction je dois me brancher avec BN donc çà me pose problème.
Je suis en train de travailler sur une routine de division 16bits mais un truc me chagrine, exemple: je fais la soustraction négative 0x2-0xFE et le registre status reste à zéro, le bit N n'est pas positionné. Normalement à la suite de cette soustraction je dois me brancher avec BN donc çà me pose problème.
Code : Tout sélectionner
;----------------------------------------------------------------------------------------------
; 4L1C3 - F6FC0
; 04 novembre 2018
; réception trains et stockage valeur en mem ok
; axes X, Y et Z fonctionnels en virtuel
; faire un reset du code, une déco/reco de teraterm avant de lancer chaque processus.
;----------------------------------------------------------------------------------------------
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
list p=18f4525 ; processeur utilisé
#include <p18f4525.inc> ; Définitions des constantes
;---------------------------------------------------------------------------------------------
CONFIG OSC = XT ; Oscillateur ext 4MHz
;CONFIG OSC = HSPLL ; Oscillateur interne 32Mhz
CONFIG IESO = OFF ; Oscillateur secondaire refusé (ON/OFF)
CONFIG PWRT = ON ; Délai au démarrage (ON/OFF)
CONFIG BOREN = OFF ; Reset si chute de tension (ON/OFF)
CONFIG BORV = 0 ; Tension de reset en 1/10ème Volts
CONFIG WDT = OFF ; Mise hors service du watchdog (ON/OFF)
CONFIG PBADEN = OFF ; PORTB<4:0> les broches sont configurées comme E/S numériques lors de la réinitialisation
CONFIG LPT1OSC = OFF ; Timer1 configuré pour un fonctionnement plus puissant
CONFIG MCLRE = ON ; Mclr
CONFIG STVREN = ON ; Reset sur débordement de pile (ON/OFF)
CONFIG LVP = OFF ; Programmation basse tension autorisée (ON/OFF)
CONFIG XINST = OFF ; L'extension du jeu d'instructions et le mode d'adressage indexé sont désactivés(mode hérité)
CONFIG DEBUG = ON ; Debugger hors service
CONFIG CP0 = OFF ; Code protection sur block 0 (ON/OFF)
CONFIG CP1 = OFF ; Code protection sur block 1 (ON/OFF)
CONFIG CP2 = OFF ; Code protection sur block 2 (ON/OFF)
CONFIG CPB = OFF ; Code protection sur bootblock (ON/OFF)
CONFIG CPD = OFF ; Code protection sur eeprom (ON/OFF)
CONFIG WRT0 = OFF ; Protection écriture block 0 (ON/OFF)
CONFIG WRT1 = OFF ; Protection écriture block 1 (ON/OFF)
CONFIG WRT2 = OFF ; Protection écriture block 2 (ON/OFF)
CONFIG WRTB = OFF ; Protection écriture bootblock (ON/OFF)
CONFIG WRTC = OFF ; Protection écriture configurations (ON/OFF)
CONFIG WRTD = OFF ; Protection écriture zone eeprom (ON/OFF)
CONFIG EBTR0 = OFF ; Protection lecture de table block 0 (ON/OFF)
CONFIG EBTR1 = OFF ; Protection lecture de table block 1 (ON/OFF)
CONFIG EBTR2 = OFF ; Protection lecture de table block 2 (ON/OFF)
CONFIG EBTRB = OFF ; Protection lecture de table bootblock (ON/OFF)
;------------------------------ déclaration des variables -------------------------------------
CBLOCK H'08'
ptr_train_RCIF ; compteur nb octets reçus dans un train
dividende16:2 ; utilisé par division 16bits
diviseur16:2 ; utilisé par division 16bits
reste16:2 ; utilisé par division 16bits
quotient16:2 ; utilisé par division 16bits
Reg_1
Reg_2
Reg_3
W_TEMP
STATUS_TEMP
BSR_TEMP
ENDC
CBLOCK H'100'
ENDC
;--------------------------------- adresse de depart après reset -----------------------------
ORG H'0'
bra init
;--------------------------------------- interruptions ---------------------------------------
ORG H'08'
interrupt btfss PIR1,RCIF ; registre plein ? si oui on saute à réception
bra int1 ; sinon on sort de l'interrupt
reception
nop
movff RCREG,POSTINC0 ; lecture de RCREG et mise en mem
incf ptr_train_RCIF ; on a reçu qq chose donc on incrémente le compteur de trains
btfss RCSTA,OERR ; test d'une erreur d'overrun
goto int1
; traitement de l'erreur d'overrun
bcf RCSTA,CREN ; on efface le bit OERR
bsf RCSTA,CREN ; on relance la réception
int1 ; traitement des autres interruptions
retfie
;----------------------------------- Initialisations -------------------------------------------------
init
;ovlw b'01000000' ; oscillateur interne 8Mhzx4=32Mhz
;ovlw OSCTUNE
movlw b'11000000' ; INTCON (activation des int GIE/GIEH=1, PEIE/GIEL=1)
movwf INTCON
movlw b'10000000' ; RCON (priorités int activées IPEN=1,)
movwf RCON
movlw b'00100000' ; IPR1 (Rx en haute priorité RCIP=1)
movwf IPR1
movlw b'00100000' ; PIE1 (int RX activée RCIE=1)
movwf PIE1
movlw b'00100100' ; TXSTA (Emission USART activée TXEN=1, et mode asynchrone haute vitesse BRGH=1)
movwf TXSTA
movlw b'10010000' ; RCSTA (Utilisation du port série activée SPEN=1, Réception USART activée CREN=1)
movwf RCSTA
movlw d'25' ; 9600bauds avec sync=O, brgh=1, brg16=0, xtal=4Mhz
movwf SPBRG
bcf BAUDCON,BRG16 ; réglé à 8bits
movlw B'00000111'
movwf TRISB
movlw B'11001100'
movwf TRISC
movlw B'10000011'
movwf TRISD
movlw B'10000011'
movwf TRISE
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
; ----------------- initialisation du PORT A
clrf PORTA
clrf LATA
movlw 0xf
movwf ADCON1
movwf 0x07
movwf CMCON
movlw 0xff
movwf TRISA
;------------------------------------------------------------------------
main
nop
movlw 0xFE
movwf reste16
movlw 0x2
movwf diviseur16
movff reste16,WREG
subwf diviseur16,w
nop
bra main
END
Soft de commande CNC en asm
Soft de commande CNC en asm
- F6FCO
Expert- Messages : 1420
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Hello tous,
J'ai terminé ma routine de division sur 16bits sur PIC 18F, si çà vous dit de tester. Maintenant je vais pouvoir m'attaquer au pilotage des pentes.
J'ai terminé ma routine de division sur 16bits sur PIC 18F, si çà vous dit de tester. Maintenant je vais pouvoir m'attaquer au pilotage des pentes.
Code : Tout sélectionner
;----------------------------------------------------------------------------------------------
; Division 16bits - F6FCO
; 12 décembre 2018
;
;----------------------------------------------------------------------------------------------
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
list p=18f4525 ; processeur utilisé
#include <p18f4525.inc> ; Définitions des constantes
;---------------------------------------------------------------------------------------------
CONFIG OSC = XT ; Oscillateur ext 4MHz
;CONFIG OSC = HSPLL ; Oscillateur interne 32Mhz
CONFIG IESO = OFF ; Oscillateur secondaire refusé (ON/OFF)
CONFIG PWRT = ON ; Délai au démarrage (ON/OFF)
CONFIG BOREN = OFF ; Reset si chute de tension (ON/OFF)
CONFIG BORV = 0 ; Tension de reset en 1/10ème Volts
CONFIG WDT = OFF ; Mise hors service du watchdog (ON/OFF)
CONFIG PBADEN = OFF ; PORTB<4:0> les broches sont configurées comme E/S numériques lors de la réinitialisation
CONFIG LPT1OSC = OFF ; Timer1 configuré pour un fonctionnement plus puissant
CONFIG MCLRE = ON ; Mclr
CONFIG STVREN = ON ; Reset sur débordement de pile (ON/OFF)
CONFIG LVP = OFF ; Programmation basse tension autorisée (ON/OFF)
CONFIG XINST = OFF ; L'extension du jeu d'instructions et le mode d'adressage indexé sont désactivés(mode hérité)
CONFIG DEBUG = ON ; Debugger hors service
CONFIG CP0 = OFF ; Code protection sur block 0 (ON/OFF)
CONFIG CP1 = OFF ; Code protection sur block 1 (ON/OFF)
CONFIG CP2 = OFF ; Code protection sur block 2 (ON/OFF)
CONFIG CPB = OFF ; Code protection sur bootblock (ON/OFF)
CONFIG CPD = OFF ; Code protection sur eeprom (ON/OFF)
CONFIG WRT0 = OFF ; Protection écriture block 0 (ON/OFF)
CONFIG WRT1 = OFF ; Protection écriture block 1 (ON/OFF)
CONFIG WRT2 = OFF ; Protection écriture block 2 (ON/OFF)
CONFIG WRTB = OFF ; Protection écriture bootblock (ON/OFF)
CONFIG WRTC = OFF ; Protection écriture configurations (ON/OFF)
CONFIG WRTD = OFF ; Protection écriture zone eeprom (ON/OFF)
CONFIG EBTR0 = OFF ; Protection lecture de table block 0 (ON/OFF)
CONFIG EBTR1 = OFF ; Protection lecture de table block 1 (ON/OFF)
CONFIG EBTR2 = OFF ; Protection lecture de table block 2 (ON/OFF)
CONFIG EBTRB = OFF ; Protection lecture de table bootblock (ON/OFF)
;------------------------------ déclaration des variables -------------------------------------
CBLOCK H'08'
ptr_train_RCIF ; compteur nb octets reçus dans un train
valeur1:2
valeur2:2
dividende16:2 ; utilisé par division 16bits
diviseur16:2 ; utilisé par division 16bits
reste16:2 ; utilisé par division 16bits
quotient16:2 ; utilisé par division 16bits
W_TEMP
STATUS_TEMP
BSR_TEMP
ENDC
CBLOCK H'100'
ENDC
;--------------------------------- adresse de depart après reset -----------------------------
ORG H'0'
bra init
;--------------------------------------- interruptions ---------------------------------------
ORG H'08'
interrupt btfss PIR1,RCIF ; registre plein ? si oui on saute à réception
bra int1 ; sinon on sort de l'interrupt
reception
nop
movff RCREG,POSTINC0 ; lecture de RCREG et mise en mem
incf ptr_train_RCIF ; on a reçu qq chose donc on incrémente le compteur de trains
btfss RCSTA,OERR ; test d'une erreur d'overrun
goto int1
; traitement de l'erreur d'overrun
bcf RCSTA,CREN ; on efface le bit OERR
bsf RCSTA,CREN ; on relance la réception
int1 ; traitement des autres interruptions
retfie
;----------------------------------- Initialisations -------------------------------------------------
init
;ovlw b'01000000' ; oscillateur interne 8Mhzx4=32Mhz
;ovlw OSCTUNE
movlw b'11000000' ; INTCON (activation des int GIE/GIEH=1, PEIE/GIEL=1)
movwf INTCON
movlw b'10000000' ; RCON (priorités int activées IPEN=1,)
movwf RCON
movlw b'00100000' ; IPR1 (Rx en haute priorité RCIP=1)
movwf IPR1
movlw b'00100000' ; PIE1 (int RX activée RCIE=1)
movwf PIE1
movlw b'00100100' ; TXSTA (Emission USART activée TXEN=1, et mode asynchrone haute vitesse BRGH=1)
movwf TXSTA
movlw b'10010000' ; RCSTA (Utilisation du port série activée SPEN=1, Réception USART activée CREN=1)
movwf RCSTA
movlw d'25' ; 9600bauds avec sync=O, brgh=1, brg16=0, xtal=4Mhz
movwf SPBRG
bcf BAUDCON,BRG16 ; réglé à 8bits
movlw B'00000111'
movwf TRISB
movlw B'11001100'
movwf TRISC
movlw B'10000011'
movwf TRISD
movlw B'10000011'
movwf TRISE
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
; ----------------- initialisation du PORT A
clrf PORTA
clrf LATA
movlw 0xf
movwf ADCON1
movwf 0x07
movwf CMCON
movlw 0xff
movwf TRISA
;############################################################################################################################
main
nop
movlw 0xff
movwf dividende16 ; poids fort dividende
movlw 0xff
movwf dividende16+1 ; poids faible dividende
movlw 0x03
movwf diviseur16 ; poids fort diviseur
movlw 0xd5
movwf diviseur16+1 ; poids faible dividende
call division16
nop
bra main
; ----------------------------------------------------- division 16bits -------------------------------------------------------
;********************************************************************
; Division sur 16bits *
; Il faut préalablement déclarer les variables sur 16 bits *
; dividende16, diviseur16, quotient16 et reste16 *
; *
; Placer le poids fort de la valeur à diviser dans dividende16, le *
; le poids faible dans dividende16+1 *
; Placer le poids fort du diviseur dans diviseur16, le poids faible *
; dans diviseur16+1 *
; Le résultat sera dans quotient16 et quotient16+1 *
; Le reste sera dans reste16 et reste16+1 *
; *
; Cette division utilise la routine soustraction16 *
; il faut donc aussi avoir déclaré les variables sur *
; 16 bits valeur1 et valeur2 *
;********************************************************************
division16 ; quotient=0
clrf quotient16
clrf quotient16+1
; reste=dividende
movff dividende16,reste16
movff dividende16+1,reste16+1
div16_1
movf reste16,w
subwf diviseur16,w
; test si poids fort reste>diviseur ?
btfss STATUS,C
bra div16_3
; test si poids fort reste=diviseur ? sinon on sort
div16_4 bz div16_2
findiv16 return
div16_2 ; test si poids faible reste>diviseur
movff reste16+1,WREG
subwf diviseur16+1,w
btfss STATUS,C
bra div16_3
bz div16_3
bra findiv16
div16_3 ; reste=dividende-diviseur
movff reste16,valeur1
movff reste16+1,valeur1+1
movff diviseur16,valeur2
movff diviseur16+1,valeur2+1
call soustraction16 ; résultat dans valeur2, valeur2+1
movff valeur2,reste16
movff valeur2+1,reste16+1
; quotient +1
movff quotient16,valeur1
movff quotient16+1,valeur1+1
clrf valeur2
movlw 1
movwf valeur2+1
; on additionne valeur1 et valeur2 sur 16bits
movf valeur1+1,W
addwf valeur2+1,f
; on additionne le carry dans le poids fort
movf STATUS,W
andlw 0x1
addwf valeur2,f
movf valeur1,W
addwf valeur2,f
; on charge valeur2 dans quotient
movff valeur2,quotient16
movff valeur2+1,quotient16+1
bra div16_1
;********************************************************************
; Soustraction sur 16bits *
; Il faut préalablement déclarer des variables sur 16 bits *
; valeur1:2 et valeur2:2 *
; *
; Placer le poids fort de la première valeur dans valeur1 *
; et le poids faible dans valeur1+1 *
; Placer le poids fort de la valeur à soustraire dans valeur2 *
; et le poids faible dans valeur2+1 *
; Appeler la procédure soustraction16 et le résultat de *
; valeur1-valeur2 sur 16bits sera dans les 2 octets de valeur2 *
;********************************************************************
soustraction16
; ------------------------------------- on traite valeur2
movf valeur2,w ; inversion du poids fort
xorlw 0xff
movwf valeur2
movf valeur2+1,w ; complément à 2 du poids faible
xorlw 0xff
addlw 0x01
movwf valeur2+1
movf STATUS,w ; on isole le carry
andlw 0x01
addwf valeur2,f ; et on l'ajoute au poids fort
;----------------------------------- on additionne les deux poids faibles
movf valeur1+1,w
addwf valeur2+1,f
movf STATUS,w ; on isole le carry
andlw 0x01
addwf valeur2,f ; et on l'ajoute au poids fort
;--------------------------------- on additionne maintenant les deux poids forts
movf valeur1,w
addwf valeur2,f
; s'il y a carry il sera perdu car on reste en 16bits
return
END
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Soft de commande CNC en asm
Salut F6FCO,
Une petite remarque sur ta soustraction 16 bits, tu auras un problème, je crois, dans l'exemple x-(0x8000), c'est un classique de l'arith. signée, il y a un nombre négatif de plus que de nombres positifs.
Je te suggère de tester le carry juste après addwf valeur2, f et s'il est armé, rentrer, charge à l'utilisateur de le tester au retour et de prendre les décisions qui conviennent à son programme, bon courage d'ailleurs
Une petite remarque sur ta soustraction 16 bits, tu auras un problème, je crois, dans l'exemple x-(0x8000), c'est un classique de l'arith. signée, il y a un nombre négatif de plus que de nombres positifs.
Je te suggère de tester le carry juste après addwf valeur2, f et s'il est armé, rentrer, charge à l'utilisateur de le tester au retour et de prendre les décisions qui conviennent à son programme, bon courage d'ailleurs
Soft de commande CNC en asm
Soft de commande CNC en asm
Bonjour F6FCO, en fait, j'ai été un peu rapide hier soir, c'était l'heure de l'apéro
Il y a un peu de vrai quand même, si dans mon exemple (on est en signé) tu donnes à x n'importe quelle valeur posive, il y a problème exemple x = 0
0x0000 - 0x8000 (0-(-32768) donne
0x0000+0x8000 (0+(-32768)) soit 0x8000 (-32768)
En fait, je crois qu'il faut, comme pour l'addition en signé distinguer deux cas, les deux opérandes ont le même signe ou pas. dans le premier cas, pas de problème on ajoute comme des insignnés sans soucis, dans le deuxième, il faut tester le signe du résultat, s'il diffère de celui des opérandes c'est raté, on est trop gourmand, le résultat ne tient pas sur 16 bits, sinon c'est bon. Pour l'addition, c'est le cntraire, c'est bon quand les deux opérandes sont de signe différent.
Je reste persuadé qu'il faut prévenir l'appelant du problème, au moins pour s'en débarrasser élégamment
Si mes souvenirs sont bons, on démontre sans pb. que 1=2 https://www.youtube.com/watch?v=YBXL7mIWK_8, Si un gentil automate avait rétracté la bille de son stylo quand il a simplifié par (a-b) parce que c'est interdit dans le cas a= b, le démonatrateur n'aurait pas pu achever
Pour notre problème, je me demande s'il n'est pas plus simple de travailler en 24 bits, après extension du bit de signe de chaque opérande sur l'octet ajouté en fort poids, ajouter ou soustraire comme des insignés et comparer le bits 15 et 16 du résultat. s'ils sont égaux c'est OK, sinon non.
Remarque que sur des signés on a des pb. analogues de dépassement de capacité ou d'impossibilté (non sens) si b>a, a-b n'est pas représentable par exemple. Il n'y a pas d'entier NATUREL qui ajouté à b donne a
Il y a un peu de vrai quand même, si dans mon exemple (on est en signé) tu donnes à x n'importe quelle valeur posive, il y a problème exemple x = 0
0x0000 - 0x8000 (0-(-32768) donne
0x0000+0x8000 (0+(-32768)) soit 0x8000 (-32768)
En fait, je crois qu'il faut, comme pour l'addition en signé distinguer deux cas, les deux opérandes ont le même signe ou pas. dans le premier cas, pas de problème on ajoute comme des insignnés sans soucis, dans le deuxième, il faut tester le signe du résultat, s'il diffère de celui des opérandes c'est raté, on est trop gourmand, le résultat ne tient pas sur 16 bits, sinon c'est bon. Pour l'addition, c'est le cntraire, c'est bon quand les deux opérandes sont de signe différent.
Je reste persuadé qu'il faut prévenir l'appelant du problème, au moins pour s'en débarrasser élégamment
Si mes souvenirs sont bons, on démontre sans pb. que 1=2 https://www.youtube.com/watch?v=YBXL7mIWK_8, Si un gentil automate avait rétracté la bille de son stylo quand il a simplifié par (a-b) parce que c'est interdit dans le cas a= b, le démonatrateur n'aurait pas pu achever
Pour notre problème, je me demande s'il n'est pas plus simple de travailler en 24 bits, après extension du bit de signe de chaque opérande sur l'octet ajouté en fort poids, ajouter ou soustraire comme des insignés et comparer le bits 15 et 16 du résultat. s'ils sont égaux c'est OK, sinon non.
Remarque que sur des signés on a des pb. analogues de dépassement de capacité ou d'impossibilté (non sens) si b>a, a-b n'est pas représentable par exemple. Il n'y a pas d'entier NATUREL qui ajouté à b donne a
Soft de commande CNC en asm
Soft de commande CNC en asm
- Claudius
Passionné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour,
@ Algo. et implémentation d'une division; toujours s'inspirer de ce qui existe...
cf. PIC Microcontoller Basic Math Division Methods avec notamment
Divide 24 bit int by 16 bit int to 24 bit int très efficace en terme de nombre de cycles µC ;-)
Sinon, il existe un générateur de code pour toutes les opérations (+, -, /, %, etc.) très flexible @ nombre de bits à prendre en compte : Multibyte Arithmetic Assembly Library for PIC Microcontrollers
@ Algo. et implémentation d'une division; toujours s'inspirer de ce qui existe...
cf. PIC Microcontoller Basic Math Division Methods avec notamment
Divide 24 bit int by 16 bit int to 24 bit int très efficace en terme de nombre de cycles µC ;-)
Sinon, il existe un générateur de code pour toutes les opérations (+, -, /, %, etc.) très flexible @ nombre de bits à prendre en compte : Multibyte Arithmetic Assembly Library for PIC Microcontrollers
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Soft de commande CNC en asm
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 137 invités