Quellcode richtig??

Software und Quellcodes für Microcontroller

Software und Quellcodes für Microcontroller

Moderator: Moderatorengruppe

Quellcode richtig??

Neuer Beitragvon ELW 2 am Donnerstag 31. Januar 2008, 16:44

Hallo alle zusammen!

Meine 4-Kanal IR Fernbedinung geht immer noch nicht, jetzt habe ich den Verdacht das der Quellcode falsch ist, bzw. falschprogrammiert ist. Ich habe keine Ahnung von Assembler.

Des wegen die Frage, sieht einer von euch einen Fehler?

Wäre schön wenn mir helfen könnte.

MFG
Andreas

Sender:

Code: Alles auswählen
;**********************************************
;                                             *
; sender.asm - 4-Kanal-Fernbedienung - Sender *
;                                             *
;**********************************************
;                                             *
; (c) 2003 by Kai Uwe Schmidt                 *
;                                             *
;**********************************************

                      list p=12F629
                      include <p12f629.inc>
                     
                     
d1                    EQU 0x20
d2                    EQU 0x21
d3                    EQU 0x22
w_temp                EQU 0x23
status_temp           EQU 0x24
                     
                     
                      org 0x00
                      clrf PCLATH
                      goto main
                     
                      org 0x04
                      movwf w_temp
                      swapf STATUS, w
                      bcf STATUS, RP0
                      movwf status_temp
                     
                      bsf STATUS, RP0         ; Bank 1
                      bcf INTCON, 7           ; Alle Interrupts aus
                      bcf STATUS, RP0         ; Bank 0
                     
                      btfss GPIO, 0
                      goto kanal1
                      btfss GPIO, 1
                      goto kanal2
                      btfss GPIO, 2
                      goto kanal3
                      btfss GPIO, 4
                      goto kanal4
                     
                      swapf status_temp, w
                      movwf STATUS
                      swapf w_temp, f
                      swapf w_temp, w
                     
                      goto main


Delay_1s              movlw   0x07
                      movwf   d1
                      movlw   0x2F
                      movwf   d2
                      movlw   0x03
                      movwf   d3
Delay_0               decfsz   d1, f
                      goto   $+2
                      decfsz   d2, f
                      goto   $+2
                      decfsz   d3, f
                      goto   Delay_0
                      goto   $+1
                      goto   $+1
                      goto   $+1
                      return
                     

send_ir               bsf GPIO, 5
                      goto $+1
                      goto $+1
                      goto $+1
                      goto $+1
                      goto $+1
                      goto $+1
                      bcf GPIO, 5
                      goto $+1
                      goto $+1
                      goto $+1
                      goto $+1
                      decfsz d1, f
                      goto send_ir            ; 40 KHz Burst
                     
                      call Delay_1s           ; 1 s Pause
                      return
                     

main                  bcf STATUS, RP0         ; Bank 0
                      clrf GPIO
                      movlw 0x07
                      movwf CMCON             ; GP0..GP2 digital input
                      bsf STATUS, RP0         ; Bank 1
                      movlw B'00010111'
                      movwf TRISIO            ; GP5 Ausgang, GP0..GP4 Eingang
                      bcf STATUS, RP0         ; Bank 0
                     
                      bsf GPIO, 5
                      bcf GPIO, 5
                     
                      bsf STATUS, RP0         ; Bank 1
                      bcf INTCON, 7
                      clrf INTCON
                      bsf INTCON, 3
                      movlw B'00010111'
                      movwf IOC
                      bsf INTCON, 7           ; GPIO Interrupt On Change
                      bcf STATUS, RP0         ; Bank 0
                     
loop                  sleep
                      nop
                      goto loop
                     
kanal1                movlw 0x56
                      movwf d1
                      call send_ir            ; 8 * 255
                      goto main
                     
kanal2                movlw 0x7F
                      movwf d1
                      call send_ir            ; 12 * 255
                      goto main
                     
kanal3                movlw 0xA8
                      movwf d1
                      call send_ir            ; 16 * 255
                      goto main
                     
kanal4                movlw 0xD1
                      movwf d1
                      call send_ir            ; 20 * 255
                      goto main
                     
                      goto main

                      end


und der

Empfänger:

Code: Alles auswählen
;**********************************************
;                                             *
; sender.asm - 4-Kanal-Fernbedienung - Sender *
;                                             *
;**********************************************
;                                             *
; (c) 2003 by Kai Uwe Schmidt                 *
;                                             *
;**********************************************

                      list p=12F629
                      include <p12f629.inc>
                     
                     
d1                    EQU 0x20
d2                    EQU 0x21
d3                    EQU 0x22
w_temp                EQU 0x23
status_temp           EQU 0x24
                     
                     
                      org 0x00
                      clrf PCLATH
                      goto main
                     
                      org 0x04
                      movwf w_temp
                      swapf STATUS, w
                      bcf STATUS, RP0
                      movwf status_temp
                     
                      bsf STATUS, RP0         ; Bank 1
                      bcf INTCON, 7           ; Alle Interrupts aus
                      bcf STATUS, RP0         ; Bank 0
                     
                      btfss GPIO, 0
                      goto kanal1
                      btfss GPIO, 1
                      goto kanal2
                      btfss GPIO, 2
                      goto kanal3
                      btfss GPIO, 4
                      goto kanal4
                     
                      swapf status_temp, w
                      movwf STATUS
                      swapf w_temp, f
                      swapf w_temp, w
                     
                      goto main


Delay_1s              movlw   0x07
                      movwf   d1
                      movlw   0x2F
                      movwf   d2
                      movlw   0x03
                      movwf   d3
Delay_0               decfsz   d1, f
                      goto   $+2
                      decfsz   d2, f
                      goto   $+2
                      decfsz   d3, f
                      goto   Delay_0
                      goto   $+1
                      goto   $+1
                      goto   $+1
                      return
                     

send_ir               bsf GPIO, 5
                      goto $+1
                      goto $+1
                      goto $+1
                      goto $+1
                      goto $+1
                      goto $+1
                      bcf GPIO, 5
                      goto $+1
                      goto $+1
                      goto $+1
                      goto $+1
                      decfsz d1, f
                      goto send_ir            ; 40 KHz Burst
                     
                      call Delay_1s           ; 1 s Pause
                      return
                     

main                  bcf STATUS, RP0         ; Bank 0
                      clrf GPIO
                      movlw 0x07
                      movwf CMCON             ; GP0..GP2 digital input
                      bsf STATUS, RP0         ; Bank 1
                      movlw B'00010111'
                      movwf TRISIO            ; GP5 Ausgang, GP0..GP4 Eingang
                      bcf STATUS, RP0         ; Bank 0
                     
                      bsf GPIO, 5
                      bcf GPIO, 5
                     
                      bsf STATUS, RP0         ; Bank 1
                      bcf INTCON, 7
                      clrf INTCON
                      bsf INTCON, 3
                      movlw B'00010111'
                      movwf IOC
                      bsf INTCON, 7           ; GPIO Interrupt On Change
                      bcf STATUS, RP0         ; Bank 0
                     
loop                  sleep
                      nop
                      goto loop
                     
kanal1                movlw 0x56
                      movwf d1
                      call send_ir            ; 8 * 255
                      goto main
                     
kanal2                movlw 0x7F
                      movwf d1
                      call send_ir            ; 12 * 255
                      goto main
                     
kanal3                movlw 0xA8
                      movwf d1
                      call send_ir            ; 16 * 255
                      goto main
                     
kanal4                movlw 0xD1
                      movwf d1
                      call send_ir            ; 20 * 255
                      goto main
                     
                      goto main

                      end


Die Datein kann ich kleider nicht anhängen, da Zitat: "Die Erweiterung asm ist hier verboten" angezeigt wird.

Hier ist der Link (Seite ganz unten!)
http://elektronik.kai-uwe-schmidt.de/in ... nbedienung
MFG
Andreas

Für Schäden und Folgeschäden an Geräten und/oder Personen übernehme ich keine Haftung.
Die Sicherheits- sowie die VDE Vorschriften sind zu beachten, im Zweifelsfalle grundsätzlich einen Fachmann fragen bzw. die Arbeiten von einer Fachfirma ausführen lassen.
Alle Antworten sind meine Meinung und daher unverbindlich!


Kritik nehme ich immer gerne entgegen, denn aus Fehlern lernt man!
Benutzeravatar
ELW 2
Threadstarter
31320
Platinum Mitglied
 
Beiträge: 1135
Registriert: Samstag 26. Mai 2007, 15:00
Wohnort: Hamm
Postleitzahl: 59063
Land: Germany / Deutschland

Neuer Beitragvon Martin67 am Montag 4. Februar 2008, 06:29

Hallo,

was mir auf die Schnelle auffällt, ist der Ausstieg aus Deiner Interruptroutine. Hier hast Du ein goto main. Damit wird das Programm nicht an der Stelle fort gesetzt, wo es unterbrochen wurde. Außerdem wird Dein 8facher Stack in kürzester Zeit überlaufen. Der Ausstieg muss mit einem retfie erfolgen. Beachte auch, Dein Zwischensprünge goto kanal2... Auch hier gehst Du zurück mit einem goto main und verlässt die Interruptroutine hart.

Gruß

Martin
Martin67
31410
Bronze Mitglied
 
Beiträge: 83
Registriert: Samstag 20. Januar 2007, 07:38


Zurück zu Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste