www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HILFE!!! beim Assemblieren Anfänger


Autor: Martin Rischmann (martin-r)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi an Alle Mikrocontroller Fans Ich bin Leider ein Anfänger
Und brauche dringend eure HILFE!!!
Ich such ein Programm wo ich diese Datei Assemblieren Kann.
Danke MFG Martin

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
garnicht, ein Bit (auxiliary carry):
MODE_PWM_UP: PUSH AC

kann man nicht pushen

ansonsten siehe Metalink 8051 Assembler


Peter

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Martin,
hallo Peter,

da ist ein Tip- oder Kopierfehler:

MODE_PWM_UP: PUSH AC
  MOVE  A,PWM
  CJNE  A,#60H,PW1
  SJMP  PW2
  PW1:INC  PWM
  MOV  A,PWM
  ADD  A,#00
  DA  A
  MOV  PWM,A
  PW2:MOV  R4,A
  LCALL  SCAN_WAIT
  LCALL  WRITE_EEPROM
  POP  ACC

oben steht "AC" und unten "ACC"

Gruss Otto

Autor: Martin Rischmann (martin-r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Otto Kannst du mir vielleicht die datei reparieren?
Und Assemblieren !? Danke MFG Martin

Autor: Fauler Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und mir ein Bier holen, öffnen und vo den Fernseher bringen. Wenn du 
gerade da bist, den Sender bitte wechseln!

Haben wir hier wunschkonzert, HÄ???

Autor: Ironist (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich krieg auch immer das Kotzen, wenn der Vollidiot von dem man 
abschreiben will, wieder zu blöd war ne ordentliche Arbeit abzuliefern. 
Aber selber denken? Ohne mich.

Autor: norad (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Maritn

Habe deine Fehler im Quelltext korrigiert!
Prüfe bitte nach ob das so stimmt.
Im Anhang das entsprechende Hexfile.
;
;*******************************************************
;  DC Motor Cotrol : MCS-51
;  WWW.Guidecircuit.com
;  MCU : AT89C1051
;*******************************************************

$INCLUDE 89C1051.mc


  COM1      BIT P3.7
  COM2      BIT P1.0
  SDA      BIT P3.4
  SCL      BIT P3.3
  LED_PWM      BIT P3.5
  SW_PWM_DOWN BIT P3.1
  SW_PWM_UP   BIT P3.0
  SW_LR      BIT P3.4
  PWM      EQU 09
  I2C_DATA    EQU 10
  BUF_SEG1    EQU 11
  BUF_SEG2    EQU 12
  DELAY_SEG   EQU 13
  SS200US      EQU 14
  OUTPUT_PWM  EQU 15
  EEPROM_CODE1 EQU 10100000B
;*******************************************************
;  MAIN PROGRAM
;*******************************************************

ORG 0000h
  MOV  SP,#07H
  MOV  P1,#11111111B
  MOV  P3,#11111111B
  LCALL  DELAY_100MS
  LCALL  READ_EEPROM

START:  MOV  R4,PWM
Z1:  LCALL  CONVERT
  LCALL  DISPLAY
  LCALL  PWM_MODE
Z2:  JB  PWM_DOWN,Z3
  LCALL  MODE_PWM_DOWN
Z3:  JB  PWM_UP,Z1
  LCALL  MODE_PWM_UP
Z4:  JB  SW_LR,Z1
  SJMP START

;********************************************************
;  PWM MODE
;********************************************************

MODE_PWM_UP:
    PUSH ACC
  MOV A,PWM
  CJNE  A,#60H,PW1
  SJMP  PW2
PW1:
    INC  PWM
  MOV  A,PWM
  ADD  A,#00
  DA  A
  MOV  PWM,A
PW2:
    MOV  R4,A
  LCALL  SCAN_WAIT
  LCALL  WRITE_EEPROM
  POP  ACC
  RET

MODE_PWM_DOWN:
    PUSH   ACC
  MOV  A,PWM
  CJNE  A,#00H,PW3
  SJMP  PW6
PW3:
    DEC  PWM
  MOV  A,PWM
  ANL  A,#0FH
  CJNE  A,#0FH,PW4
PW4:
    MOV  A,PWM
  JC  PW5
  ADD  A,#10H
  SUBB  A,#10H
PW5:
    MOV  PWM,A
PW6:
    MOV  R4,A
  LCALL  SCAN-WAIT
  LCALL  WRITE_EEPROM
  POP  ACC
  RET

MODE_LR:
    CLR  LED_PWM
  LCALL  DELAY_1S
  CPL  P3.2
  LCALL  DELAY_1S
  RET

SCAN_WAIT:        ; Fehler es wurde SCAN_WAOT geschrieben
    MOV  R3,#90
  LCALL  CONVERT
QW:
    LCALL   DISPLAY    ;DIAPLAY
  LCALL  PWM_MODE
  DJNZ  R3,QW
  RET

TABLE_SEGMENT:
    DB  01111111B ;0
  DB  00001101B ;1
  DB  10110111B ;2
  DB  10011111B ;3
  DB  11001101B ;4
  DB  11011011B ;5
  DB  11111011B ;6
  DB  00001111B ;7
  DB  11111111B ;8
  DB  11011111B ;9

CONVERT:
    PUSH  ACC
  MOV  A,R4
  SWAP  A
  ANL  A,#0FH
  MOV  DPTR,#TABLE_SEGMENT
  MOVC  A,@A+DPTR
  MOV  BUF_SEG2,A
  MOV  A,R4
  ANL  A,#0FH
  MOV  DPTR,#TABLE_SEGMENT
  MOVC  A,@A+DPTR
  MOV  BUF_SEG2,A
  POP  ACC
  RET

DISPLAY:
    MOV  P1,BUF_SEG1
  CLR  COM1
  LCALL  DELAY_SEGMENT
  SETB  COM1
  MOV  P1,BUF_SEG2
  CLR  COM2
  LCALL  DELAY_SEGMENT
  SETB  COM2
  RET

DELAY_SEGMENT:     ;Fehler DELAY_SEGENT
    MOV  DELAY_SEG,#00H
  DJNZ  DELAY_SEG,$
  RET

WRITE_EEPROM:
    LCALL I2C_START
  MOV  I2C_DATA,#EEPROM_CODE1
  LCALL  I2C_WR
  MOV  I2C_DATA,#00H
  LCALL  I2C_WR
  MOV  I2C_DATA,PWM
  LCALL  I2C_WR
  LCALL  I2C_STOP
  RET

READ_EEPROM:
    LCALL  I2C_START
  MOV  I2C_DATA,#EEPROM_CODE1
  LCALL  I2C_WR
  MOV  I2C_DATA,#00H
  LCALL  I2C_WR
  LCALL  EEPROM_RD1
  MOV  PWM,I2C_DATA
  RET

I2C_WR:
    PUSH  ACC
  MOV  A,I2C_DATA
  MOV  R5,#08
I2C_WR_1:
    RLC  A
  MOV  SDA,C
  LCALL  I2C_DELAY
  DJNZ  R5,I2C_WR_1
  SETB  SDA
  LCALL  I2C_DELAY
  SETB  SCL
  LCALL  I2C_DELAY
  JB  SDA,I2C_WR_2
I2C_WR_2:
    CLR  SCL
  POP  ACC
  RET

I2C_RD:
    PUSH  ACC
  CLR  A
  MOV  R5,#08
I2C_RD_1:
    ACALL  I2C_DELAY
  SETB  SCL
  ACALL  I2C_DELAY
  MOV  C,SDA
  RLC  A
  CLR  SCL
  DJNZ  R5,I2C_RD_1
  MOV  I2C_DATA,A
  POP  ACC
  RET

EEPROM_RD1:
    LCALL  I2C_START
  MOV  I2C_DATA,#EEPROM_CODE1+1
  LCALL  I2C_WR
  LCALL  I2C_RD
  LCALL  I2C_STOP
  RET

I2C_NACK:
    SETB  SDA
  LCALL  I2C_CLK
  RET

I2C_START:
    SETB    SDA
  SETB    SDA
  LCALL  I2C_DELAY
  CLR  SDA
  LCALL  I2C_DELAY
  CLR  SCL
  RET

I2C_STOP:
    CLR  SDA
  LCALL  I2C_DELAY
  SETB  SCL
  LCALL  I2C_DELAY
  SETB  SDA
  RET

I2C_CLK:
    LCALL  I2C_DELAY
  SETB  SCL
  LCALL  I2C_DELAY
  CLR  SCL
  RET

I2C_DELAY:
    MOV  R6,#03
I2C_DELAY_1:
    NOP
  NOP
  DJNZ  R6,I2C_DELAY_1
  RET

;**********************************************
;  Delay
;**********************************************

DELAY_10MS:
    MOV  R7,#10
DELAY_10MS_1:
    MOV R6,#0E6H
DELAY_10MS_2:
    NOP
  NOP
  DJNZ  R6,DELAY_10MS_2
  DJNZ  R7,DELAY_10MS_1
  RET

DELAY_100MS:
    MOV  R7,#100
DELAY_100MS_1:
    MOV R6,#0E6H
DELAY_100MS_2:
    NOP
  NOP
  DJNZ  R6,DELAY_10MS_2
  DJNZ  R7,DELAY_10MS_1
  RET

DELAY_1S:
    MOV  R5,#100
DELAY_1S_1:
    ACALL  DELAY_10MS
  DJNZ  R5,DELAY_1S_1
  RET

PWM_MODE:
    PUSH  ACC
  PUSH  00H
  MOV  TMOD,#10H
  MOV  TL0,#0B0H      ; Fehler TL0 null wurde mit O geschrieben
  MOV  TH0,#0B0H
  SETB  LED_PWM
  MOV  SS200US,#00
  MOV  OUTPUT_PWM,#00 ;Fehler OUTPUT_PWM nicht deklariert
  SETB  TR0        ;Fehler TR0 wurde mit O geschrieben
  CLR  A
DEL0:
    CJNE A,PWM,DEL1
  CLR  LED_PWM
DEL1:
    JNB  TCON.0,DEL1
  INC  SS200US
  MOV  R0,SS200US
  CJNE R0,#05h,DEL1   ;GMDEL1 ????
  MOV  SS200US,#00
  INC  OUTPUT_PWM
  MOV  A,OUTPUT_PWM
  ADD  A,#00
  DA  A
  MOV  OUTPUT_PWM,A
  CJNE  A,#70H,DEL0
  CLR  TR0             ;Fehler TR0 wurde mit O geschrieben
  POP  00H
  POP  ACC
  RET

Autor: Martin Rischmann (martin-r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi norad Vielen dank kann ich auch die hex file feur AT89c2051 Benutzen.
Ich ich muss erst mal die plattine Ätzen damit ich die software testen 
kann
Hasst du mir deine email falz die software nicht geht.
MFG Martin

Autor: norad (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Martin

Hab Prog mal durch den Debugger laufen lassen und weitere Fehler 
aufgespürt.

Im DELAY_SEGMENT gibt es folgende Anweisung

DJNZ  DELAY_SEG,$    ; Was ist das? Endlos oder wartet auf ereignis???
Ab hier läuft mein Debugger in einer Endlos - Schleife

------------------------------------------------------------------------ 
-
;
;*******************************************************
;  DC Motor Cotrol : MCS-51
;  WWW.Guidecircuit.com
;  MCU : AT89C1051
;*******************************************************

$INCLUDE 89C1051.mc


  COM1      BIT P3.7
  COM2      BIT P1.0
  SDA          BIT P3.4
  SCL          BIT P3.3
  LED_PWM      BIT P3.5
  SW_PWM_DOWN BIT P3.1
  SW_PWM_UP   BIT P3.0
  SW_LR      BIT P3.4
  PWM      EQU 09
  I2C_DATA    EQU 10
  BUF_SEG1    EQU 11
  BUF_SEG2    EQU 12
  DELAY_SEG   EQU 13
  SS200US      EQU 14
  OUTPUT_PWM  EQU 15            ; Ursprünglich OUTPUT
  EEPROM_CODE1 EQU 10100000B    ; Ursprünglich EEPROM_CODE
;*******************************************************
;  MAIN PROGRAM
;*******************************************************

ORG 0000h
  MOV  SP,#040H
  MOV  P1,#11111111B
  MOV  P3,#11111111B
  LCALL  DELAY_100MS
  LCALL  READ_EEPROM

START:  MOV  R4,PWM
Z1:  LCALL  CONVERT
  LCALL  DISPLAY
  LCALL  PWM_MODE
Z2:  JB  PWM_DOWN,Z3
  LCALL  MODE_PWM_DOWN
Z3:  JB  PWM_UP,Z1
  LCALL  MODE_PWM_UP
Z4:  JB  SW_LR,Z1
  SJMP START      ; START hat gefehlt weiss aber nicht ob so richtig ist

;********************************************************
;  PWM MODE
;********************************************************

MODE_PWM_UP:
    PUSH ACC
  MOV A,PWM
  CJNE  A,#60H,PW1
  SJMP  PW2
PW1:
    INC  PWM
  MOV  A,PWM
  ADD  A,#00
  DA  A
  MOV  PWM,A
PW2:
    MOV  R4,A
  LCALL  SCAN_WAIT
  LCALL  WRITE_EEPROM
  POP  ACC
  RET

MODE_PWM_DOWN:
    PUSH   ACC
  MOV  A,PWM
  CJNE  A,#00H,PW3
  SJMP  PW6
PW3:
    DEC  PWM
  MOV  A,PWM
  ANL  A,#0FH
  CJNE  A,#0FH,PW4
PW4:
    MOV  A,PWM
  JC  PW5
  ADD  A,#10H
  SUBB  A,#10H
PW5:
    MOV  PWM,A
PW6:
    MOV  R4,A
  LCALL  SCAN-WAIT
  LCALL  WRITE_EEPROM
  POP  ACC
  RET

MODE_LR:
    CLR  LED_PWM
  LCALL  DELAY_1S
  CPL  P3.2
  LCALL  DELAY_1S
  RET

SCAN_WAIT:        ; Fehler es wurde SCAN_WAOT geschrieben
    MOV  R3,#90
  LCALL  CONVERT
QW:
    LCALL   DISPLAY    ;DIAPLAY
  LCALL  PWM_MODE
  DJNZ  R3,QW
  RET

TABLE_SEGMENT:
    DB  01111111B ;0
  DB  00001101B ;1
  DB  10110111B ;2
  DB  10011111B ;3
  DB  11001101B ;4
  DB  11011011B ;5
  DB  11111011B ;6
  DB  00001111B ;7
  DB  11111111B ;8
  DB  11011111B ;9

CONVERT:
    PUSH  ACC
  MOV  A,R4
  SWAP  A
  ANL  A,#0FH
  MOV  DPTR,#TABLE_SEGMENT
  MOVC  A,@A+DPTR
  MOV  BUF_SEG2,A
  MOV  A,R4
  ANL  A,#0FH
  MOV  DPTR,#TABLE_SEGMENT
  MOVC  A,@A+DPTR
  MOV  BUF_SEG2,A
  POP  ACC
  RET

DISPLAY:
    MOV  P1,BUF_SEG1
  CLR  COM1
  LCALL  DELAY_SEGMENT
  SETB  COM1
  MOV  P1,BUF_SEG2
  CLR  COM2
  LCALL  DELAY_SEGMENT
  SETB  COM2
  RET

DELAY_SEGMENT:     ;Fehler DELAY_SEGENT
    MOV  DELAY_SEG,#00H
  DJNZ  DELAY_SEG,$    ; Was ist das? Endlos oder wartet auf ereignis???
  RET

WRITE_EEPROM:
    LCALL I2C_START
  MOV  I2C_DATA,#EEPROM_CODE1
  LCALL  I2C_WR
  MOV  I2C_DATA,#00H
  LCALL  I2C_WR
  MOV  I2C_DATA,PWM
  LCALL  I2C_WR
  LCALL  I2C_STOP
  RET

READ_EEPROM:
    LCALL  I2C_START
  MOV  I2C_DATA,#EEPROM_CODE1
  LCALL  I2C_WR
  MOV  I2C_DATA,#00H
  LCALL  I2C_WR
  LCALL  EEPROM_RD1
  MOV  PWM,I2C_DATA
  RET

I2C_WR:
    PUSH  ACC
  MOV  A,I2C_DATA
  MOV  R5,#08
I2C_WR_1:
    RLC  A
  MOV  SDA,C
  LCALL  I2C_DELAY
  DJNZ  R5,I2C_WR_1
  SETB  SDA
  LCALL  I2C_DELAY
  SETB  SCL
  LCALL  I2C_DELAY
  JB  SDA,I2C_WR_2
I2C_WR_2:
    CLR  SCL
  POP  ACC
  RET

I2C_RD:
    PUSH  ACC
  CLR  A
  MOV  R5,#08
I2C_RD_1:
    ACALL  I2C_DELAY
  SETB  SCL
  ACALL  I2C_DELAY
  MOV  C,SDA
  RLC  A
  CLR  SCL
  DJNZ  R5,I2C_RD_1
  MOV  I2C_DATA,A
  POP  ACC
  RET

EEPROM_RD1:
    LCALL  I2C_START
  MOV  I2C_DATA,#EEPROM_CODE1+1
  LCALL  I2C_WR
  LCALL  I2C_RD
  LCALL  I2C_STOP
  RET

I2C_NACK:
    SETB  SDA
  LCALL  I2C_CLK
  RET

I2C_START:
    SETB    SDA
  SETB    SCL         ;SCL statt SDA
  LCALL  I2C_DELAY
  CLR  SDA
  LCALL  I2C_DELAY
  CLR  SCL
  RET

I2C_STOP:
    CLR  SDA
  LCALL  I2C_DELAY
  SETB  SCL
  LCALL  I2C_DELAY
  SETB  SDA
  RET

I2C_CLK:
    LCALL  I2C_DELAY
  SETB  SCL
  LCALL  I2C_DELAY
  CLR  SCL
  RET

I2C_DELAY:
    MOV  R6,#03
I2C_DELAY_1:
    NOP
  NOP
  DJNZ  R6,I2C_DELAY_1
  RET

;**********************************************
;  Delay
;**********************************************

DELAY_10MS:
    MOV  R7,#10
DELAY_10MS_1:
    MOV R6,#0E6H
DELAY_10MS_2:
    NOP
  NOP
  DJNZ  R6,DELAY_10MS_2
  DJNZ  R7,DELAY_10MS_1
  RET

DELAY_100MS:
    MOV  R7,#100
DELAY_100MS_1:
    MOV R6,#0E6H
DELAY_100MS_2:
    NOP
  NOP
  DJNZ  R6,DELAY_100MS_2     ;Fehler! Ursprünglich DELAY_10MS_2  ???
  DJNZ  R7,DELAY_100MS_1     ;Fehler! Ursprünglich DELAY_10MS_1  ???
  RET

DELAY_1S:
    MOV  R5,#100
DELAY_1S_1:
    ACALL  DELAY_10MS
  DJNZ  R5,DELAY_1S_1
  RET

PWM_MODE:
    PUSH  ACC
  PUSH  00H
  MOV  TMOD,#10H
  MOV  TL0,#0B0H      ; Fehler TL0 null wurde mit O geschrieben
  MOV  TH0,#0B0H
  SETB  LED_PWM
  MOV  SS200US,#00
  MOV  OUTPUT_PWM,#00 ;Fehler OUTPUT_PWM nicht deklariert
  SETB  TR0        ;Fehler TR0 wurde mit O geschrieben
  CLR  A
DEL0:
    CJNE A,PWM,DEL1
  CLR  LED_PWM
DEL1:
    JNB  TCON.0,DEL1
  INC  SS200US
  MOV  R0,SS200US
  CJNE R0,#05h,DEL1   ;GMDEL1 ????
  MOV  SS200US,#00
  INC  OUTPUT_PWM
  MOV  A,OUTPUT_PWM
  ADD  A,#00
  DA  A
  MOV  OUTPUT_PWM,A
  CJNE  A,#70H,DEL0
  CLR  TR0             ;Fehler TR0 wurde mit O geschrieben
  POP  00H
  POP  ACC
  RET
;  End

Autor: norad (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Martin!

>kann ich auch die hex file für AT89c2051 Benutzen?

NEIN! Aber im Anhang ist das Hexfile für den AT89c2051.

Leider unterstüzt Flip die µC nicht damit Du es übertragen kannst.

Aber ich denke Du wirst schon eine Tool dafür haben.


Gruß norad

Autor: Martin Rischmann (martin-r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI norad Was meinst du mit Flip Aber ich kann schon der 89c2051 normal 
programmieren mit der der hex von dir.
Gruss martin

Autor: norad (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Martin

Flip ist von Atmel siehe Anhang!

Hast Du den Quellcode kontrolliert ob es so stimmt??

Autor: 42 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hast Du den Quellcode kontrolliert ob es so stimmt??

was erwartest Du?? den versteht er doch sowiso nicht. muss er auch 
nicht. er hat doch die gabe, andere leute für sich arbeiten zu lassen. 
siehe auch den 30euro-thread. Beitrag "Hallo wer möchte sich 30 Euro verdienen!?"

mfg

Autor: Martin Rischmann (martin-r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf Solche Kommentare kann ich gerne Scheißen!!!!!!!!!
Gruss Martin

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anfänger: Jemand der lernen will, wie etwas funktioniert und deshalb die 
Hilfe anderer braucht.

Ausbeuter: Jemand, der andere sucht, die ihm kostenlos die Arbeit 
machen, um selber von dem Ergebnis zu profitieren.

Wo würdest du dich einordnen?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin Rischmann wrote:
> Auf Solche Kommentare kann ich gerne Scheißen!!!!!!!!!
> Gruss Martin

Du hast 'ne nette Ausdrucksweise. Darauf wartet die Welt.

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.