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
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