Eğer bir mikrodenetleyiciye tam anlamıyla hakim olmak istiyorsanız assembly diliyle programlama mantığını bilmeniz gerekmektedir. Assembly dili makine diline en yakın dildir. Bu karşın yazması vakit alır ve yazdığınız kodu aynı aileden olan başka bir mikrodenetleyiciye taşırken bile kodunuzu yeniden gözden geçirmeniz gerekebimektedir.

PIC harvard mimarisine sahip bir RISC işlemcidir. En az komut sayısı bir çok işlemi rahatlıkla yapabiirsiniz. Bir önemli olan husus ise hangi registerın hangi görevi yaptığını bilmektedir.

MPLABX 5.35 de MSASM yi kullanan en son versiyondur. Bu versiyon ve öncesinde IDE ile birlikte  MPASM assembly derleyicisi gelmektedir. Sonraki MPLABX versiyonlarında assembly derleyicisi içinde gelmemektedir. XC8 2.20 veya üzeri bir sürüm kurulması gerekmektedir ve bu derleyici ile yeni bir assembly derleyicisi olan XC8 PIC Assembler (pic-as) gelmektedir.

Hangi derleyicisi kulanırsanız kullanın PIC için aynı assembly komut setini kullanırız. Fakat derleyici direktifleri dediğimiz tanımlamalar farklılık göstermektedir. Bu sitede verdiğim örneklerde XC8 PIC assembler üzerine örnekler olacaktır. MPASM hakkında zaten internette tonlarca örnek bulunmaktadır. Eğer eski bir bilgisayar kullanıyorsanız MPLAB windows bilgisayarınıza yükleyip kullanabilirsiniz. MPLABX linux, mac ve windows bilgisayarları destekleyen multiplatform geliştirme araçıdır. MPLAB, MPLABX ve XC8 derleyicilerin tüm arşivlerine erişmek için https://www.microchip.com/en-us/tools-resources/archives/mplab-ecosystem adresini kullanabilirsiniz.

Yeni XC8 PIC assembler ile eski MPASM arasındaki farklar şu şekildedir.

  • MPASM de kaynak kodları .asm uzantısı kullanırken XC8 PIC assembler .s uzantısını kullanır.
  • Her PIC modeli için özel include dosyasını çağırmak yerine <xc.inc> dosyasını çağırmak yeterlidir.
  • Konfigurasyon bitlerinin tanımlanmasında da farklılık vardır. Örnek:

MPASM:
         CONFIG _WDT_OFF & _CP_OFF & _MCLRE_OFF ; şeklinde kullanım varken

PIC Assembler:
         config WDTE = OFF
         config CP = OFF
         config MCLRE = OFF

şeklinde satır satır tanımlamak gerekmektedir.

  •  MPASM de etiketler sonunda isteğe bağlı olarak iki nokta : konulurken XC8 PIC assemblerda etiketler için zorunlu olarak iki nokta : kullanılması gerekmektedir. Etiket isimleri büyük küçük harf duyarlıdır.
  • Desimal, hekzadesimal, binary tanımlamalarıda farklılık vardır. Varsayılan olarak MPASM hekzadesimal kabul ederken XC8 PIC assembler desimal sayı kabul etmektedir.

MPASM:
         b'10110011' ; binary sayı
         o'72' ;oktal sayı
         d'34' ;desimal sayı
         4F ;heksadesimal sayı
         ‘b’ ;ASCII değer

XC8 PIC Assembler:
         movlw 10110011B ;binary sayı
         movlw 72q ;oktal sayı
         movlw 34 ;desimal sayı
         movlw 34d
         movlw 34D
         movlw 04Fh ;hekzadesimal sayı
         movlw 0x4F
         movlw ‘b’ ;ASCII değer
         movlw A'b'

  • MPASM mutlak mod (absolute mode) adreslemeyi tercih ederken XC8 PIC assemblerda relocatable mode desteklemektedir. Genellikle PIC mikrodenetleyicide reset adresi 0x00, interrupt adresi ise 0x04 dür. MPASM de ORG direktifi kullanılmaktadır. XC8 PIC Assemblerda ORG direktifi PSECT direktifiyle değiştirilmiştir.
  • Program sonunda END direktifi kullanılması zorunludur.

Kaynaklar:

1. https://www.circuitbread.com/tutorials/mpasm-to-mplab-xc8-pic-assembler

2. MPLAB® XC8 PIC Assembler User's Guide for Embedded Engineers https://onlinedocs.microchip.com/pr/GUID-205B1F42-0E06-45E1-8D34-E3D05C15710F-en-US-3/index.html?GUID-EEEE96C2-0542-4999-8F01-61B6FE10FE17

PDF dosyası https://ww1.microchip.com/downloads/en/DeviceDoc/XC8-PIC-Assembler-UG-for-EE-50002994A.pdf

3.MPASM™ to MPLAB® XC8 PIC® Assembler MigrationGuide https://ww1.microchip.com/downloads/en/DeviceDoc/MPASM%20to%20MPLAB%20XC8%20PIC%20Assembler%20Migration%20Guide%2050002973A.pdf

4.MPLAB® XC8 PIC® Assembler User's Guide  https://onlinedocs.microchip.com/pr/GUID-4DC87671-9D8E-428A-ADFE-98D694F9F089-en-US-2/index.html

PDF dosyası https://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB%20XC8%20PIC%20Assembler%20User%27s%20Guide%2050002974A.pdf

5.MPLAB-X IDE and XC8-AS assembler transition guide with example code https://www.youtube.com/watch?v=VEvMtWZt9QE

6. Assembly örnekleri https://github.com/ArmstrongSubero/PIC16-Projects