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


von Martin R. (martin-r)


Angehängte Dateien:

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

von Peter D. (peda)


Lesenswert?

garnicht, ein Bit (auxiliary carry):
1
MODE_PWM_UP: PUSH AC

kann man nicht pushen

ansonsten siehe Metalink 8051 Assembler


Peter

von Otto (Gast)


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

von Martin R. (martin-r)


Lesenswert?

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

von Fauler Rahul (Gast)


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

von Ironist (Gast)


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.

von norad (Gast)


Angehängte Dateien:

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

von Martin R. (martin-r)


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

von norad (Gast)


Angehängte Dateien:

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

von norad (Gast)


Angehängte Dateien:

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

von Martin R. (martin-r)


Lesenswert?

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

von norad (Gast)


Angehängte Dateien:

Lesenswert?

@Martin

Flip ist von Atmel siehe Anhang!

Hast Du den Quellcode kontrolliert ob es so stimmt??

von 42 (Gast)


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

von Martin R. (martin-r)


Lesenswert?

Auf Solche Kommentare kann ich gerne Scheißen!!!!!!!!!
Gruss Martin

von Winfried (Gast)


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?

von Hannes L. (hannes)


Lesenswert?

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

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

...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.