PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC16F877A Bootloader (ja ich auch)



theborg
16.08.2007, 18:25
Leider ist mein Stamm forum Offline deswegen versuche ich des hier mal :P

Also ich hab auf dem 16F877A den Bootloader von http://www.microchipc.com/PIC16bootload/ geschrieben, der PIC läuft mit 8Mhz also das 16Mhz file genommen wie in der README beschreiben demnach solle die baut rate 19200bps betragen, wenn ich jetzt die Firmware per Bootloader tauschen möchte klappt dieses nicht der PIC läuft aber.

Über minicom bekomme ich nur Buchstabensalat.

theborg
01.09.2007, 16:43
Hi nochmal nen Update der Bootmanager läuft der fahler war in der sw zum übertragen des hex files.

jetzt habe ich aber leider ein anderes Problem die ersten 3 Adressen werde ja durch den Bootmanager benutzt wie muss ich mein Programm jetzt anlegen damit es gestartet wird ?



;list p=16f876a
include "p16f876a.inc"

__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_OFF & _CP_OFF

org 0x00004 ; Schreibe Programanfang hinter dem Bootloader
goto main ; Springe zur Inialisirung
org 0x00008 ; Erste Rotine (main) auf Adresse 0x00004

cblock 0x20 ; Variabeln ab 0x21 setzen
RS232Send ; Variabel RS232send für USART Senden
endc ; Variabeln setzen beenden

include "Define.inc" ; Pin Definitionen
include "PortREG.inc" ; Ports einstellen (PortREG)
include "RS232.inc" ; RS232 Rotine (RS232out)

main
call PortREG
call Define
bsf PLED
bsf ELED
loop
goto loop
end

kalledom
01.09.2007, 20:59
Hallo theborg,
mit Bootloadern habe ich nichts zu tun, aber eines ist unverändert, ob mit oder ohne Bootloader:
Adresse 0x0004 wird bei jedem Interrupt angesprungen; das ist im PIC16F877 hardwaremäßig so vorgegeben.
Da solltest Du keinen Sprung nach Main haben, sondern einen Sprung zu Deiner Interrupt-Service-Routine, oder ein RETI.
Wie der Bootloader die Adressen 0x0000 bis 0x0003 belegt oder benötigt kann ich Dir nicht sagen. Das wirst Du aber gewiss noch herausfinden.

Mobius
02.09.2007, 19:09
Also, der Bootloader arbeitet so, dass er die Vektoren "Reset" und "Interrupt" durch je ein Sprungbefehl (bzw. beim Reset durch die Abfrage, ob der Loader oder das Hautprogramm gestartet werden soll) ersetzt. Wohin genau, das kann ich dir ohne SRC nicht sagen (bzw. Doku gucken).

Alles was du dann machen musst ist statt "org 0x00004" und "org 0x00000" die betreffenden Adressen einzusetzten und dafür zu sorgen, dass kein Sourcecode auf die von dem Bootloader verwendeten Programmspeicher abgelegt wird.

Ansonsten würde ich dir Raten, die cblock VOR den Programmcode zu legen, erleichtert das Lesen und niemand kommst auf die Idee, dass es sich dabei um definitionen für den Programmspeicher handelt. Das gleiche gilt für die includes, die meist ganz am Anfang des Programmes stehen, gleich nach der definition des Prozessors.
Am Einfachsten ist, wenn du die vorgefertigten Templates verwendest, da ist auch ein schönes Layout vorgegeben, das das Lesen ("Microchip\MPASM Suite\Template\Code").

lg
Mobius

theborg
02.09.2007, 20:25
Hi danke für die tips das mit den includes geht leider nicht anders da gputils die dahin setzt wo sie eingebunden werden wenn die ganz oben stehen stehen sie vor den org befehlen