Advice how to get help to convert it to all to ASM?

H

homemade24

Guest
J'ai trouvé un code sur internet qui est supposé faire une grande partie de aa projet passe-temps peu, je travaille sur.

problème:
il est écrit dans une combinaison de "C", mais surtout de l'ASM.et pour un 16F876A PIC

des conseils:
Quelle est la meilleure façon d'obtenir de l'aide pour le convertir dans tous les ASM.avec un pic 16f676.
si je peux convertir et il ne travail que je peux l'ajouter à un code que j'ai déjà écrit (à l'ASM.) pour le projet final.
Je suis assez nouveau à la programmation et à moi-même avons enseigner comme je vais.
Il s'agit donc d'apprendre autant que la réalisation du projet.

merci

 
Citation:

Quelle est la meilleure façon d'obtenir de l'aide pour le convertir dans tous les ASM.
 
Merci Millwood je suis d'accord avec ce que vous disiez.
J'ai trouvé pour "moi" la meilleure façon d'apprendre est de prendre un petit quelque chose qui fonctionne
et développez-le.chaque fois que j'ajoute une petite partie (pas de bébé si vous voulez) j'apprends "peu plus. En ce moment je n'ai pas la confiance de réinventer la roue mais j'ai le désir de le changer pour s'adapter à mes propres besoins. A le stade de ma vie, j'ai aussi trouvé qu'il valait mieux apprendre on_a_as_need_bases
il n'y a vraiment (je l'espère) à seulement 2 domaines que j'ai besoin d'aide sur la conversion de la forme "C"
à l'ASM.Si quelqu'un pouvait expliquer en termes simples ce que cela fait très et ce dont j'ai besoin pour changer, je serais très reconnaissant
le 1er.Je pense a faire avec des nombres entiersCode:

n_bits int;

n_bytes int;

int compteur;

recv_reg int;

send_reg int;

nEmpty int;

status_byte int;

send_command int;

general_flags int;

nB8Count int;

int NB8;

nA8Count int;

int NA8;

status_response int;

nCmdCount int;

special_word int;

photo_flag int;

 
Ce code ne fait pas quelque chose de très utile.Les réserves d'espace mémoire la première section pour une charge de variables, la deuxième section met valeurs initiales dans les emplacements mémoire.Peut-être que vous pourriez mettre l'ensemble du programme?

Keith

 
que ce que je pensais Keith1200rs
ce que je dois savoir, c'est comment le faire en asm étaient à compiler,
voici le code complet

Code:

************************************************** ****************

/ /

/ / Contrôleur LANC

/ /

//************************************************ **********************

/ /

/ / Camera Control un Sony DSC-V1 encore avec un PIC 16F876A

/ /

/ / Code d'origine: Alberto Caballero Tante

/ /

//************************************************ **********************

/ /

/ / Ceci est une version bêta d'un contrôleur de Sony LANC.
sortie LANC

/ / Est le bit 3 du PIC Port Connectez C. La caméra utilisant un pullup

/ / Résistance.

/ /

/ /

//************************************************ **********************

/ /

/ / 21/10/2005: version bêta

/ /

//************************************************ **********************

/ /

/ / S'il vous plaît tout commets: translib (at) hotmail.com (sous réserve de "contrôleur LANC").

/ /

//************************************************ **********************# Include "F: \ Alberto \ Aplicaciones \ CCS Compiler \ projets PIC \ test_lanc serie01.h \"n_bits int;

n_bytes int;

int compteur;

recv_reg int;

send_reg int;

nEmpty int;

status_byte int;

send_command int;

general_flags int;

nB8Count int;

int NB8;

nA8Count int;

int NA8;

status_response int;

nCmdCount int;

special_word int;photo_flag int;
# Define PORTA 0x05

# Define PORTB 0x06

# Define PORTC 0x07

# Define TRISA 0x85

# Define TRISB 0x86

# Define TRISC 0x87

# Define 0x01 même

# Define 0x00 no_same

# Define 0x03 lanc

# Define 0x03 ETAT

# Define 0x05 RP0

# Define 0x06 RP1

# Define 0x07 MSB

# Define 0x00 lsb

# Define 0x02 PC

# Define 0x02 Z_BIT# Define 0x00 command_tx# Define TrisLanc 0x01

# Define Tris 0x11# Define 0x1d EMPTY_COUNT

# Define 0x00 BitStatus0

# Define BitStatus1 0x02

# Define 0x03 BitStatus2

# Define 0x04 BitStatus3

# Define BitStatus4 0x05

# Define Bit0ECommand 0x01# Define 0x00 Bit0

# Define Bit1 0x01

# Define 0x02 Bit2/ / Commandes

# Define 0x0E COMMAND_0E

# Define 0x1E PRE_CMD_1E

# Define 0x5e power_off

# Define PHOTO 0x5A

# Define mot1 0x43

# Define 0x53 mot2

# Define SEND_CMD 0x01# Define OUTPUT_PINS 0x00

# Define INPUT_PINS 0xFFvoid main ()

(

/ / Initialisation

/ /

n_bits = 0;

compteur = 0;

recv_reg = 1;

send_reg = 0;

nEmpty = 0;

status_byte = 1;

general_flags = 0;

NB8 = 4;

nB8Count = 0;

NA8 = 3;

nA8Count = 0;

status_response = 1;

special_word = 0x0F;

nCmdCount = 10;

send_command = 0;photo_flag = 0;ASM #Bcf STATUS, RP0

Bcf STATUS, RP1n_bytes clrf

sync_up: compteur clrf

sync_loop: btfss PORTC, lanc

sync_up goto

nd

incfsz contre, même

sync_loop goto

synchronisé: n_bytes clrfwait_strt: btfsc PORTC, lanc

wait_strt gotostart_bit: movlw 15

movwf contre

L1: compteur decfsz, même

Aller à la L1btfsc PORTC, lanc

Error GoTomovlw 8

n_bits movwfwait_bits: movlw 15

movwf contre

L2: compteur decfsz, même

Aller à la L2send_bits: general_flags btfss, command_tx

Aller wait_half

send_reg btfss, lsb

Aller send_0send_1: BCF PORTC, lanc

ÉTAT BSF, RP0

OUTPUT_PINS movlw

movwf TRISC

/ Bcf STATUS /, RP0

nd

nd

bit_sent gotosend_0: bsf PORTC, lanc

ÉTAT BSF, RP0

INPUT_PINS movlw

movwf TRISC

Bcf STATUS, RP0

nd

ndbit_sent: send_reg RRF, même

movlw 10

Aller jump_halfwait_half: movlw 15

jump_half:

movwf contre

L3: compteur decfsz, même

Aller à l3read_bits:

recv_reg RRF, même

recv_reg BCF, msb

btfss PORTC, lanc

recv_reg BSF, msb

nd

ndn_bits decfsz, même

wait_bits gotowait_stop: movlw 14

movwf contre

L4: compteur decfsz, même

Aller à l4send_stop: general_flags btfss, command_tx

wait_half_stop goto

BSF PORTC, lanc

ÉTAT BSF, RP0

INPUT_PINS movlw

movwf TRISC

Bcf STATUS, RP0

general_flags BCF, command_tx

movlw 11

jump_half_stop gotowait_half_stop:

movlw 14jump_half_stop:

movwf contre

L5: decfsz contre, même

Aller à l5read_stop: btfss PORTC, lanc

Error GoTocount:

n_bytes INCF, même

n_bytes DECF, w

andlw 07

PC addwf, même

Aller check_0

Aller check_1

Aller check_2

Aller check_3

Aller check_4

Aller check_5

Aller check_6

Aller check_7//////////////////////////////////////////

/ / Octet 0

//////////////////////////////////////////

check_0:

btfss send_command, 0

wait_strt gotosend_command:

movlw PHOTO

movwf send_reg

movlw SEND_CMD

general_flags movwf

wait_strt goto//////////////////////////////////////////

/ / Octet 1

//////////////////////////////////////////

check_1:

btfss status_byte, BitStatus2

wait_strt gotosend_43: / / valeurs Envoyer spéciale

special_word movf, no_same

movwf send_reg

movlw SEND_CMD

general_flags movwfwait_strt goto//////////////////////////////////////////

/ / Octet 2

//////////////////////////////////////////

check_2:

status_byte btfsc, BitStatus0

Aller status_0

status_byte btfsc, BitStatus1

Aller status_1

status_byte btfsc, BitStatus3

Aller status_2wait_strt gotostatus_0:

movlw 0

recv_reg addwf, no_same

ÉTAT btfsc, Z_BIT

nEmpty INCF, même

wait_strt gotostatus_1:

0x47 movlw

recv_reg subwf, no_same

ÉTAT btfsc, Z_BIT

nB8Count INCF

wait_strt gotostatus_2:

0x57 movlw

recv_reg subwf, no_same

ÉTAT btfsc, Z_BIT

nA8Count INCF

wait_strt goto//////////////////////////////////////////

/ / Octet 3

//////////////////////////////////////////

check_3:

wait_strt gotocheck_4:

wait_strt gotocheck_5:

wait_strt gotocheck_6:

wait_strt gotocheck_7:

status_byte btfss, Bit0ECommand

Aller begin_spare/ / Envoyer 0x0E commande

movlw COMMAND_0E

movwf send_reg

movlw SEND_CMD

general_flags movwf/ / Est temps de vérifier l'état

begin_spare:

status_byte btfsc, BitStatus0

Aller spare_status_0status_byte btfsc, BitStatus1

Aller spare_status_1status_byte btfsc, BitStatus2

Aller spare_status_2status_byte btfsc, BitStatus3

Aller spare_status_3Aller end_sparespare_status_0:

EMPTY_COUNT movlw

nEmpty subwf, no_same

ÉTAT btfss, Z_BIT

Aller end_spare/ / Changer le statut

0x06 movlw

status_byte movwf/ / Envoyer 0x0E commande dans l'image suivante

movlw COMMAND_0E

movwf send_reg

movlw SEND_CMD

general_flags movwfAller end_sparespare_status_1:

movf NB8, no_same

nB8Count subwf, no_same

ÉTAT btfss, Z_BIT

Aller end_spare/ / Changer le statut

0x0A movlw

status_byte movwf

movlw 3

movwf NB8nB8Count clrf/ / Goto end_sparespare_status_2: / / AC Envoyer, AC

status_response btfsc, Bit0

Aller send_BC

status_response btfsc, Bit1

Aller send_AC1

status_response btfsc, Bit2

Aller send_AC2

Error GoTosend_BC:

/ / Changer l'état

0x02 movlw

status_response movwf/ / Se préparer à envoyer

movlw mot1

movwf special_word

Aller end_sparesend_AC1:

/ / Changer l'état

0x04 movlw

status_response movwf/ / Se préparer à envoyer

Mot2 movlw

movwf special_word

Aller end_sparesend_AC2:

/ / Changer l'état

0x01 movlw

status_response movwf

0x12 movlw

status_byte movwf/ / Se préparer à envoyer

Mot2 movlw

movwf special_word

Aller end_sparespare_status_3: / / A8 Read

movf NA8, no_same

nA8Count subwf, no_same

ÉTAT btfss, Z_BIT

Aller end_spare/ / Changer le statut

0x06 movlw

status_byte movwf

movlw 3

movwf NA8nA8Count clrf0xff movlw

photo_flag movwf;end_spare:

photo_flag btfss, 0x00

sync_up goto/ / 0 movlw

/ Photo_flag movwf /;status_byte BCF, Bit0ECommand

/ Status_byte BSF /, BitStatus4

0xFF movlw

movwf send_commandpre_cmd:

/ / Octet Envoyer 0x1E pré-commande

movlw PRE_CMD_1E

movwf send_reg

movlw SEND_CMD

general_flags movwfcheck_count:

nCmdCount decfsz, même

sync_up gotoend_cmd:

/ / Pas plus de commande.
restauration de l'état

movlw 10

nCmdCount movwf

/ Status_byte bcf /, BitStatus4

movlw 0

movwf send_command

status_byte BSF, Bit0ECommand

movlw COMMAND_0E

movwf send_reg

movlw SEND_CMD

general_flags movwfmovlw 0

photo_flag movwfsync_up gotoLuz:endasm #

output_b (0xff);

ASM #goto fin

erreur:endasm #

while (1)

(

output_b (0xff);

delay_ms (500);

output_b (0x00);

delay_ms (500);

)

ASM #error2:

endasm #

while (1)

(

output_b (0xff);

delay_ms (250);

output_b (0x00);

delay_ms (250);

)

ASM #fin:

endasm #

 
Je pense que tout ce que vous devez faire est de réserver une octets pour chaque variable tels que:Code:0x20 cblock (ou n'importe quelle adresse de mémoire vive commence à en ce PIC)

n_bits

n_bytes

compteur

recv_reg

send_reg

etc

 
Citation:

Si quelqu'un pourrait expliquer en termes très simples ce que cela ne
 
remercier encore une fois Keith
C'est ce que certains de ce que je voulais comme je l'ai été la migration vers le 16f676

?marques et s'engage sur quelque chose que je ne vous le (vraiment, je suis sûr sûr de rien ces jours-ci)

Code:# Include "p16F676.inc"__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _MCLRE_OFF & _CPD_OFFerrorlevel -302

0x20 cblock
n_bits;

n_bytes;

contre;

recv_reg;

send_reg;

nEmpty;

status_byte;

send_command;

general_flags;

nB8Count;

NB8;

nA8Count;

NA8;

status_response;

nCmdCount;

special_word;

photo_flag;

D1

d2

D3ENDC# Define LED PORTA

# Define LANC PORTC

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

# Define 0x01 même;

# Define 0x00 no_same;

; # Define 0x03 STATUS;

; # Define 0x05 RP0; ne compile pas avec ces???

; # Define 0x06 RP1;

# Define 0x07 MSB;

# Define 0x00 lsb;

# Define 0x02 PC; ne sais pas si ceux-ci ont d'être ici???

# Define 0x02 Z_BIT;

# Define 0x00 command_tx;

# Define TrisLanc 0x01;

# Define Tris 0x11 ;??????????????

# Define 0x1d EMPTY_COUNT;

# Define 0x00 BitStatus0;

# Define BitStatus1 0x02;

# Define 0x03 BitStatus2;

# Define 0x04 BitStatus3;

# Define BitStatus4 0x05;

# Define Bit0ECommand 0x01;

# Define 0x00 bit 0;

# Define Bit1 0x01;

# Define 0x02 Bit2;

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

/ / Commandes

# Define 0x0E COMMAND_0E

# Define 0x1E PRE_CMD_1E

# Define 0x5e power_off

# Define PHOTO 0x5A

# Define mot1 0x43

# Define 0x53 mot2

# Define SEND_CMD 0x01# Define OUTPUT_PINS 0x00

# Define INPUT_PINS 0xFE, feuilles PORTC.0 SORTIE DE LEDCOMPARATEUR TURN OFF ;////////////////////////////// //////////////// //////////////////////////

Bcf STATUS, RP0; BANC 0

Bcf STATUS, RP1; 0 page vous inscrire

0x07 movlw; SET UP POUR METTRE W COMPARATEUR OFF

movwf CMCON

;//////////////////////////// SET UP I / O //////////////// ////////////////////////////////////

ÉTAT BSF, RP0; BANK 1

movlw b'00000000; CONFIG I / O

movwf TRISA;

movlw b'00000000; CONFIG I / O LANC INPUT POWER @ !!!!!!!!!!!!!!!!!!!

movwf TRISC; aux résultats de TOUS

;///////////////////////////// SET UP A / D /////////////// //////////////////////////////////

MOVLW B'00000000 '; A / D OFF

ANSEL movwf, est dans BANK 1SET ;////////////////////////////////////// ou des morceaux CLEAR @ START UP / / / / ///////////////////;???????????????????????????????????????????????

;???????????????????????????????????????????????;

; Void main ()??
Est-ce nécessaire??

; (

/ / Initialisation

/ /

CLRF PORTA

CLRF PORTC

n_bits clrf; = 0;

contre clrf; = 0;

send_reg clrf; = 0;

nEmpty clrf; = 0;

general_flags clrf; = 0;

nB8Count clrf; = 0;

nA8Count clrf; = 0;

send_command clrf; = 0;

photo_flag clrf; = 0;

;????????????????????????????????????????

recv_reg BSF, 0, 1 =;

status_byte BSF, 0, 1 =;

status_response BSF, 0, 1 =;

;???????????????????????????????????????;??????????
Je peut même être attentif sur ce ???????

;?????? Special_word ;??????; = 0x0F

0x0F movlw

movwf special_word;???????? NCmdCount ;???????; = 10movlw 10

nCmdCount movwf;????????????; NA8 = 3 ;??????????????????

movlw 3

movwf NA8

;?????????????; NB8 = 4 ;??????????????

movlw 4

movwf NB8;????????????????????????????????????????????????? ?

;????????????????????????????????????????????????? ?
 
Soit dit en passant, pourquoi ne pas simplement utiliser le logiciel comme il est d'abord?J'ai l'air de penser qu'il existe une version gratuite du compilateur C de Microchip.Ensuite, au moins vous saurez s'il vaut la peine qu'il hacking autour.

La void main () et des accolades () sont à voir avec C ne peut donc être supprimée.

# Define 0x02 PC dépend de PC est utilisé comme ça (je suppose que c'est le compteur de programme).

Je ne suis pas sûr de STATUS/RP0/RP1 - Peut-être qu'ils sont déjà définis dans votre fichier d'inclusion?

Une fois que vous atteignez les états ASM # vous n'avez pas besoin de changer quoi que ce soit jusqu'à endasm #.

Vous avez vraiment besoin de la serie01.h fichier utilisé dans le programme - Pensez-vous avoir?

Keith.

 
L'expansion de ce que Keith a dit, vous pouvez déclarer 'int' espaces de rangement dans un cblock en ajoutant: 2 'au nom de la variable.Le côlon et le nombre de réserve que le nombre d'octets de la variable et s'assure que la variable suivante dans la liste de déplacés le long conséquence.
Ainsi, votre cblock pourrait être réécrite comme suit:
Code:0x20 cblock

n_bits: 2

n_bytes: 2

contre: 2

recv_reg: 2

send_reg: 2

.

.

ENDC

 
Brian,

Merci pour les conseils.Il est utile de savoir comment allouer 2 octets.Mon assembleur PIC est un peu rouillé.J'ai réussi à l'éviter pendant quelques années, en faisant C et en utilisant d'autres processeurs faire à la place.

Keith

 
Merci à vous deux pour avoir eu l'amabilité de m'aider.

Citation:

Vous avez vraiment besoin de la serie01.h fichier utilisé dans le programme - Pensez-vous avoir?
 
Citation:

; # Define 0x05 RP0; ne compile pas avec ces???

; # Define 0x06 RP1;

# Define 0x02 PC; ne sais pas si ceux-ci ont d'être ici???
 
Il pourrait être utile essayer de le compiler sans le fichier d'inclusion, car les erreurs peuvent vous dire ce qui vous manque.Le retard () de routine peut être une chose si elle s'inscrit dans le cadre du compilateur C.

Keith

 
Désolé avait de la famille de ville en ville viennent y reviendrons à ce sujet demain
lecture sur tout ce qui est affiché
merci et s'il vous plaît restez avec moi sur ce

 
Merci encore
ok j'ai eu quelques heures pour travailler sur cet après-midi
J'ai essayé de tout vérifier posté ici, ainsi que procéder à ces changements
Je ne sais pas encore si j'ai cette partie droite
Code:

;????????????????????????????????????????????????? ????????????????

;;;;;;;;" C special_word ";;;;;;;;;;;;; = 0x0F;

0x0F movlw; d15

movwf special_word

;;;;;;;;" C nCmdCount ";;;;;;;;;;;;;; = 10;

movlw 10

nCmdCount movwf; ne sais pas si ces 4 sont à droite

;;;;;;;;;;" C ";;;;;;;;;;; NA8 = 3;

movlw 3

movwf NA8

;;;;;;;;;;" C ";;;;;;;;;;;;;;;; NB8 = 4;

movlw 4

movwf NB8

;????????????????????????????????????????????????? ?????????????????????

;????????????????????????????????????????????????? ?????????????????????
 
Is your clock speed the same as the original code? The place where it gets stuck seems to be after a "start bit" loop which is executed 15 times to get a certain length pulse.

Keith.
 

Welcome to EDABoard.com

Sponsor

Back
Top