PIC 16F serilerinde ASM <-> LST <-> HEX çevirisi ve içeriği?

Başlatan Seferi, 22 Kasım 2011, 14:19:46

Seferi

İyi günler. Assemly ile pıc programı yazıyorum. Mplab da derledikten sonra lst ve hex dosyaları oluşuyor. Bunlarda birinden diğeri nasıl oluşturuluyor? Mesela aşağıdaki örnek üzerinde açıklayabilir misiniz? Bu soruyu daha çok HEX dosyasının içeriğini öğrenmek, şuan için14bitlik mikroişlemcide bu HEX'lerin nasıl işlem gördüğünü öğrenmek ve gerektiğinde HEX'den LST'ye ordanda ASM'ye dönüşümünü yapabilmek için soruyorum, bu yönde de bilgiler verirseniz çok memnun olurum.

ASM DOSYASI

;==== PROG1.ASM ====18/10/2011===========================
	LIST P=16F628A
	INCLUDE	"P16F628A.INC"
	__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _CP_OFF
	
;-----------------------------------------------------------
	ORG	H'0000'
	CLRF	PORTB
	BANKSEL	TRISB
	CLRF	TRISB
	BANKSEL	PORTB
BASLA
	MOVLW	H'55'
	MOVWF	PORTB
DONGU
	GOTO	DONGU
	END
	;-----------------------------------------------------------


LST DOSYASI

LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

                      00001 ;==== PROG1.ASM ====18/10/2011===========================
                      00002         LIST P=16F628A
                      00003         INCLUDE "P16F628A.INC"
                      00001         LIST
                      00002 
                      00003 ;==========================================================================
                      00004 ;  MPASM PIC16F628A processor include
                      00005 ; 
                      00006 ;  (c) Copyright 1999-2011 Microchip Technology, All rights reserved
                      00007 ;==========================================================================
                      00008 
                      00369         LIST
2007   3F21           00004         __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF & _CP_OFF
                      00005         
                      00006 ;-----------------------------------------------------------
0000                  00007         ORG     H'0000'
0000   0186           00008         CLRF    PORTB
0001   1683 1303      00009         BANKSEL TRISB
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0003   0186           00010         CLRF    TRISB
0004   1283 1303      00011         BANKSEL PORTB
0006                  00012 BASLA
0006   3055           00013         MOVLW   H'55'
0007   0086           00014         MOVWF   PORTB
0008                  00015 DONGU
0008   2808           00016         GOTO    DONGU
                      00017         END


HEX DOSYASI

:020000040000FA
:10000000860183160313860183120313553086007D
:020010000828BE
:02400E00213F50
:00000001FF


Yardımlarınızı bekliyorum

Seferi

Arkadaşlar gerçekten bu konuda yardıma ihtiyacım var. Olaya bir el atıverin.

Erol YILMAZ

O zaman HEX file dan bahsedebiliriz biraz...

Intel HEX dosyasının yapısını incelemek lazım:

Alıntı YapIntel-Hex formatı, 16 bitlik adreslemeyi destekleyen ve kaydın başladığını gösteren bir karakter (:), gönderilecek byte count'u (veri sayısı) gösteren iki karakter, hangi adresten itibaren yükleme işlemi yapılacağını gösteren dört karakter ve kayıt tipini gösteren iki karakter ile iki karakter de sumcheck (kontrol karakterleri) için içeren bir format şeklidir.

Alıntı Yapİki kayıt tipi vardır:

   00: Gönderilecek bilgilerin veri kaydı olduğunu,
   01: Veri kaydının sona erdiğini gösterir.

   Sumcheck bilgisi ise byte count, adres ve veri bytelarının toplamının ikinin tümleyeninin alınmasıyla elde edilir.


http://www.google.com.tr/#q=intel+hex+format&hl=tr&prmd=imvns&source=lnt&tbs=lr:lang_1tr&lr=lang_tr&sa=X&ei=Uu7LTqPNKOiF4gSqnZ1Y&ved=0CAcQpwUoAQ&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=5bab29dba0a27b37&biw=1280&bih=711

Tagli

hex'ten tam olarak geri çeviremezsin. Kodlara ulaşırsın ulaşmasına ama değişken isimleri, açıklamalar ve boş satırlar gibi bir programın anlaşılmasında hayati öneme sahip bilgileri kaybedersin. Benim şahsi görüşüm, bu durumdaki bir programın işe yaramaz olduğudur.
Gökçe Tağlıoğlu

Mujdat117

mmilamur hocam zamanında bende hex dosyalarını  asm ye çevirmek için uğraşmıştım farkettim ki başkasının yazdığı asm kodunu ve algoritmasını çözmek sıfırdan yazmaktan çok daha zor oyuzden vazgeçtim. Faydası olucaksa aklımda kalan hususlarda size yardımncı olmaya çalışayım.
öncelikle disambley işini 2 bölümde inceleyebilriz birincisi komutları ve sayısal karşılıklarıın çözmek
2. ise  bukomutların mcu nun veri yapısına göre nasıl dizildiğini çözmek bu kısmı asm ile ilgili kitaplarda vede mcu nun datashettinden elde edebilirsin.
gelelim ilk kısma kodların sayısal karşılıklarına LST üs kısım yani org komutuna kadar olan kısımlar mplab için geçerli tanımlardır kullanılan mcu yu ve sigorta ayarlarını gösteren ksımdır bu bölüm şimdilik bizi ilgilendirmiyor. org bize programın başlangıç adresini gösterir.
PC     -  komut/parametre - satır numarası -komutuun asscı görünüşü
0000                  00007         ORG     H'0000'
0000   0186           00008         CLRF    PORTB
0001   1683 1303      00009         BANKSEL TRISB
Message[302]: Register in operand not in bank 0.  Ensure that bank bits are correct.
0003   0186           00010         CLRF    TRISB
0004   1283 1303      00011         BANKSEL PORTB
0006                  00012 BASLA
0006   3055           00013         MOVLW   H'55'
0007   0086           00014         MOVWF   PORTB
0008                  00015 DONGU
0008   2808           00016         GOTO    DONGU
                      00017         END

şeklinde gormatlandırılmıştır.
Pc=program counter yani mcunun satır indisidir.
komut/parametre =komut ve varsa aldığı paramaetrenini sayısal değerini gösteriri
örneğin
0006   3055           00013         MOVLW  H'55'

0006 =Pc nın 6. satırında oldugunu gösteriri
kırmızı ile gösterilen "movlw" komutununu sayısal karşılığıdır. sarıyla gösterilen ise aldığı parametredir yani "H55" sayısının kendisidir.
diğer bir örnekte
0000   0186           00008         CLRF    PORTB satırıdır.
burda en baştaki 0000 alanı kodun başladığı ve prot ayarlarının yapıldığı alanın adresidir.
"01" Clrf komutunun sayısal karşılığı "86" PORTB nin ram adresidir. mcu nun dataşetinden kontrol edebilirsin.

umarım yardımcı olabilmişimdir. şimdilik benden bukadar.

Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

Seferi

Yardımlarınız için hepinizden ALLAH Razı olsun. Verdiğiniz bilgiler benim için yeterlidir.