hallo;
ich habe folgendes kleine PIC-ASS-Programm:
PROCESSOR 16F15313
#include <pic16f15313.inc>
PSECT psect1
org 0x00
goto main
PSECT psect2
main:
movlw 0b11111011
movwf TRISA
movlw 0b00000100
movwf PORTA
end
Das Programm soll eine LED, die am PIN 5 eines PIC16F15313 angeschlossen
ist, zum Leuchten bringen.
Warum tut sie das nicht ? Hat das Programm einen Fehler oder ist das
Programm so richtig und ich muss den Fehler woanders suchen ?
mittlerweile sieht das Programm so aus aber es funktioniert immer noch nicht:
PROCESSOR 16F15313
#include <pic16f15313.inc>
// PIC16F15313 Configuration Bit Settings
// CONFIG1
config FEXTOSC = OFF
config RSTOSC = EXT1X
config CLKOUTEN = OFF
config CSWEN = ON
config FCMEN = ON
// CONFIG2
config MCLRE = OFF
config PWRTE = OFF
config LPBOREN = OFF
config BOREN = ON
config BORV = LO
config ZCD = OFF
config PPS1WAY = ON
config STVREN = ON
// CONFIG3
config WDTCPS = WDTCPS_31
config WDTE = OFF
config WDTCWS = WDTCWS_7
config WDTCCS = SC
// CONFIG4
config BBSIZE = BB512
config BBEN = OFF
config SAFEN = OFF
config WRTAPP = OFF
config WRTB = OFF
config WRTC = OFF
config WRTSAF = OFF
config LVP = OFF
// CONFIG5
config CP = OFF
#include <xc.h>
PSECT psect1
org 0x00
goto main
PSECT psect2
main:
banksel PORTA
clrf PORTA
banksel LATA
clrf LATA
banksel ANSELA
clrf ANSELA
banksel TRISA
movlw 0b11111011
movwf TRISA
banksel PORTA
movlw 0b00000100
movwf PORTA
loop:
goto loop
end
Wenn du deine PICs - so wie bisher - mit 10 MHz betreibst, wird es auch nicht möglich, da irgendwas zu beobachten, zumal auch keine Zeitschleife eingebaut ist.
Die Initialisierung der Ports gehört nicht in das Hauptprogramm, das muss außerhalb, also vorher stattfinden.
Außerdem läuft laut Programm einmal durch und hängt in der Endlos-Schleife am Ende fest. Wie willst du da irgendwas beobachten?
Hast du schon mal in mein heute eingestelltes Beispiel für ein Blink-Programm geschaut? Falls nicht, tue es.
Grüße, picass
was ist bei Dir Pin 5?, den Ausgang setzt man mit LATA, PORTA ist Eingang
Zitat von: picass in 17.11.2022, 16:17:46 CETWenn du deine PICs - so wie bisher - mit 10 MHz betreibst, wird es auch nicht möglich, da irgendwas zu beobachten, zumal auch keine Zeitschleife eingebaut ist.
Er hat am Ende des Programms eine Endlosschleife, dadurch wird nur einmal der Port gesetzt. (wenn richtig programmiert)
die Zeilen 61 bis 63 habe ich jettzt ersetzt durch
banksel LATA
movlw 0b00000100
movwf LATA
aber es geht immer noch nicht.
Ich will beobachten, dass die LED leuchtet.
das Beispiel-blink-Programm habe ich mir angeschaut, aber das ist mit MPASM erstellt und nicht mit pic-ass. Als ich versuchte, MPASM zu installieren, komme ich auf Hinweise, das sei mit der MPLAB IDE schon integriert, aber ich kann es auf der Übersichtsseite, wo man den Compiler auswählt, nicht sehen.
Wie zum Henker kommst du auf die Idee mit dem ORG ?
(das ist eigentlich schon Jahrzehnte obsolet)
Nimm doch einfach die Beispiele im User_Guide_for
_Emb... (Kapitel 4 oder 7)
welcher Assembler ist denn jetzt der neuere ? MPASM pder pic-ass ?
Kann es sein dass die meisten hier im Forum noch den MPASM haben und ich, da ich die Version 6 von der MPLAB IDE habe, den pic-ass und es zwischen den beiden Unterschiede gibt, wie ein Programm aufzubauen ist ?
Ja, ich benutze noch den Vorgänger des jetzt aktuellen Assemblers. Aber bleibe ruhig beim Neuen, es gibt schon Unterschiede.
Aber so wie ich dein Programm lese, läuft das einmal schnellstens durch mit Ein-u. Ausschalten eines Ports, wobei man bei der irren Geschwindigkeit natürlich nie was beobachten kann, und am Ende läuft es in eine Endlosschleife, in der nichts passiert.
Du hattest doch schonmal einen Programmentwurf mit einer Zeitschleife als Pause. Nur so kannst du beim Blinken zuschauen.
Grüße, lippe1audi
wie hast du denn den Ausgang beschaltet? Ich habe im Datenblatt gesehen, das der Port auch ein Open-Drain Control Register hat.
Ist der Quarz auch richtig programmiert? was heißen diese Zeilen?
config FEXTOSC = OFF
config RSTOSC = EXT1X
Zitat von: misax in 17.11.2022, 18:05:56 CETKann es sein dass die meisten hier im Forum noch den MPASM haben und ich, da ich die Version 6 von der MPLAB IDE habe, den pic-ass und es zwischen den beiden Unterschiede gibt, wie ein Programm aufzubauen ist ?
Ich glaub die Antwort hier https://www.mikrocontroller.net/topic/546142#7255941
trifft es ganz gut ;-)
Zitat...
Das (der pic-as) ist nun kein "Einfach-Absolut-Assembler" wie MPASM.
Man muss das Handbuch lesen wenn man ihn benutzen will.
...
Mit dem ersten Versuch nur den Code des Beispiels
7. Interrupts and Bits Example For Mid-range Devices zu kopieren, bin ich gleich mal gescheitert.
Das Programm landete irgendwo im Speicher und der IR hat null funktioniert.
(Kann man im Debug-Modus ja sehen, wenn man das Program-Memory anzeigen lässt)
Man muss dann schon wissen, wie das mit den Programsections funktioniert.
Das erfährt man aber in
7.4 Building the ExampleDie vier Seiten bis dahin kann man schon mal lesen, aber ist jetzt nicht unbedingt was für blutige Anfänger ;)
Räusper.... gestern ist mir eine Begriffsverwirrung unterlaufen: das Prog "hallo world" lässt ja nur eine LED aufleuchten. Selbst hatte ich das Folgeprog, also das Blinken einer LED im Sinne, daher traf eine Kommentierung leider daneben. :(
-------------------------------------------------------------------------------
; *******************************************************************
; Lesson 1 - "Hello World"
;
; The LEDs are connected to input-outpins (I/O) RC0 through RC3. First, the I/O pin
; must be configured for an output. In this case, when one of these pins is driven high
; (RC0 = 1 ), the LED will turn on. These two logic levels are derived from the power-
; pins of the PIC MCU. Since the PIC devices power pin (VDD) is connected to 5V
;and the source (VSS) to ground (0V), a 1 is equivalent to 5V, and a 0 is 0V.
;
; This turns on DS1 LED on the Low Pin Count Demo Board.
;
; PIC: 18F14K22
; Compiler: MPASM v5.43
; IDE: MPLABX v1.10
;
; Board: PICkit 3 Low Pin Count Demo Board
; Date: 6.1.2012
;
; *******************************************************************
; * See Low Pin Count Demo Board User's Guide for Lesson Information*
; *******************************************************************
#include <p18F14K22.inc>
;Config settings
CONFIG IESO = OFF, PLLEN = OFF, FOSC = IRC, FCMEN = OFF, PCLKEN = OFF
CONFIG BOREN = SBORDIS, BORV = 19, PWRTEN = OFF, WDTEN = OFF
CONFIG MCLRE = OFF, HFOFST = OFF, DEBUG = OFF, STVREN = ON
CONFIG XINST = OFF, BBSIZ = OFF, LVP = OFF
CONFIG CP0 = OFF, CP1 = OFF
CONFIG CPD = OFF, CPB = OFF
CONFIG WRT0 = OFF, WRT1 = OFF
CONFIG WRTB = OFF, WRTC = OFF, WRTD = OFF
CONFIG EBTR0 = OFF, EBTR1 = OFF
CONFIG EBTRB = OFF
errorlevel -302 ;supress the 'not in bank0' warning
ORG 0
Start:
bcf TRISC,0 ;make IO Pin C0 an output
clrf LATC ;init the LATCH by turning off everything
bsf LATC,0 ;turn on LED C0 (DS1)
goto $ ;sit here forever!
End
----------------------------------------------------------------------------------------------------------------
Habe mir mal erlaubt, die erste der genannten 13 Lektionen im Microchip Original einzustellen. Dafür braucht man natürlich eine MPLAB X IDE bis Vers. 5.35. Aber wie erfrischend kurz dies Programm ausfällt, kann man ja im Vergleich sehen. Dagegen ist das PIC As-Prog eines für Stotterer und mehr als doppelt solang.
Die ORG-Anweisung..... wie ich dazu komme, die immer noch....? Ist u.a. eine Frage, auf welchem Wege man in das Selbst-Erlernen von Assembler einstieg. Bei mir lief das immer über funktionierende Beispiele. So war das ganz früher mit der Z80-CPU, beim PIC gelang das mithilfe der 13 Lektionen von Microchip. Und da mir für meine Steuerprogramme der PIC18F14K22 immer noch mehr als genügt – davon habe ich ca. 20 Stück noch im Vorratsfach - , werde ich auch beim MPASM bleiben. Das Stotterer-Prog dient ausreichend als abschreckendes Beispiel für ,,Angesagtes."
Mir reicht es, wenn ein Programm funktioniert und wenn da Jahrzehnte Altes dazu beiträgt, kann ich auf neue Stotterübungen und Komplizierungen bestens verzichten.
Grüße, picass