Microcontroller How To
how to für sdcc und pic18f452 funzt in dieser Form (ziemlich sicher oder wahrscheinlich) nicht mit pic16xxx modellen
kommt ganz ohne windows aus. (bis auf den Schritt den Bootloader das allererste Mal auf den PIC zu schreiben)
detailed how to: http://www.freenet.org.nz/sdcc/
auf die schnelle:
OHNE sdcc und libraries neu zu kompilieren.
funzt unter ubuntu, debian.
sdcc unterstützt pic18 erst ab der debian-testing SDCC version.
sry stable-folks (gell legba ;) )
apt-get install sdcc gpasm gputils
Tinyul kompilieren
dann alles hier in ein Verzeichnis:
mini.c
#include"pic18fregs.h" #define LED_PIN PORTAbits.RA4 void delay_ms(long ms) { long i; while (ms--) for (i=0; i < 330; i++) ; } void main(void) { TRISA = 0; LED_PIN = 0; LED_PIN = 0; delay_ms(250); LED_PIN = 1; delay_ms(250); }
crt018.asm
processor 18F452 radix DEC include "p18f452.inc" config CODE DATA 3F32H IDLOCS CODE DATA 1234H ;; imports EXTERN _main ; defines of interrupt registers ; vars for saving/restoring registers ;STATUS EQU 0x03 ;PCLATH EQU 0x0A ;RP0 EQU 5 ;RP1 EQU 6 ;BANK0 UDATA ;int_save RES 2 ; GLOBAL int_save ;svrWREG RES 1 ; GLOBAL svrWREG ; this makes sure that we have a jump to int handler ; EXTERN inthandler ;INTVEC code ; goto inthandler _reset code pagesel _main goto _main ; this makes sure we jump to main startup code pagesel _main goto _main END
dann einmalig:
gpasm -c crt018.asm
18f452.lkr
LIBPATH . CODEPAGE NAME=vectors START=0x0 END=0x29 PROTECTED CODEPAGE NAME=page START=0x2A END=0x7FFF CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED ACCESSBANK NAME=accessram START=0x0 END=0x7F DATABANK NAME=gpr0 START=0x80 END=0xFF DATABANK NAME=gpr1 START=0x100 END=0x1FF DATABANK NAME=gpr2 START=0x200 END=0x2FF DATABANK NAME=gpr3 START=0x300 END=0x3FF DATABANK NAME=gpr4 START=0x400 END=0x4FF DATABANK NAME=gpr5 START=0x500 END=0x5FF ACCESSBANK NAME=accesssfr START=0xF80 END=0xFFF PROTECTED SECTION NAME=_reset ROM=vectors SECTION NAME=CONFIG ROM=config SECTION NAME=code ROM=page
Makefile
mini.hex: mini.o crt018.o gplink \ -c \ -s 18f452.lkr \ -o $@ \ -m \ $^ \ -I /usr/share/sdcc/lib/pic16 \ pic18f452.lib mini.o: mini.asm gpasm -c $< mini.asm: mini.c sdcc -S -mpic16 -p18f452 $<
tadaaaaa! jetzt einfach "make" eingeben oder "make mini.hex"
mit Tinyul aufn PIC loaden:
tinyul -s 115200 mini.hex
baudrate je nach bootloader (16f877:115200, 18f452:19200) wählen.
(und reset drücken)
fertig. jetzt sollte das rote led(oder grüne) LED blinken. Ob das wirklich 250 MilliSekunden, vor jedem Leuchten des LEDs, sind bleibt mal dahingestellt.
sdcc & pic16f877
mit pic16f877 via serial2USB adapter
sdcc installen, pytbl (python tinybootloader)
4wiki.c: #define __16f877 #include"pic/pic16f877a.h" #define ra4_led 0x04; void delay_ms(long n){ unsigned int c; while(n--) { for (c=0;c<330;c++) { ; } } } void main(void) { TRISA = 0; while(1) { PORTA=0xff; delay_ms(250); PORTA=0x00; delay_ms(250); } }
sdcc -mpic14 -pp164877 4wiki.c (ubuntu) sudo ln -s /dev/ttyUSB0 /dev/ttyS66 python pytbl.py -p 66 -f 4wiki.hex
led should blink now.