PDA

View Full Version : help



zugvogel1
- 8th February 2005, 10:21
Hallo

Dank erst mal an alle die zeit für mein Problem haben.
Ich möchte mein ASM-Files in Picbasic um schreiben und komme nun leider nicht weiter.
Das files geht in dieser weise erst mal aber ich möchte gern alle asm anweisungen noch weg haben.
Es wäre toll wenn noch jemand eine Idee hat.
Nehmt einfach meine Datei in euer Programm und dann seht ihr wie ich das gemeint habe.

Dank an alle die mir helfen wollen.

Hello

Need once your help one please.
Who can follow me at would cut off ASM.......ENDASM help there I not point as I can write the one pic Basic.
To Thanks onto all of them in advance.

Therefore everything what would like between ASM....and....Endasm I also still pic Basic have

S88.bas

;B_CLK var PORTB.0 ; B_CLK to PORTB.0
;B_OUT var PORTB.1 ; B_OUT to PORTB.1
;B_LED var PORTB.2 ; B_IN to PORTB.6
;B_IN var PORTB.6 ; B_IN to PORTB.6
;B_PS var PORTB.7 ; B_PS to PORTB.7

;R_DATEN var BYTE


asm
R_DATEN equ 20h ; fuer Speichern der Daten und Schieben
R_OLD equ 25h ; Register for old values
R_FLAG equ 26h ; Register for flags
F_PS_RDY equ d'1' ; Ready-Flag


A_X1 equ d'1' ; Port A7, X1
A_X2 equ d'0' ; Port A6, X2
A_X3 equ d'7' ; Port A5, X3
A_X4 equ d'6' ; Port A4, X4
A_X5 equ d'5' ; Port A3, X5
A_X6 equ d'4' ; Port A2, X6
A_X7 equ d'3' ; Port A1, X7
A_X8 equ d'2' ; Port A0, X8

B_CLK equ d'0' ; Port B, Clock
B_OUT equ d'1' ; Port B, Data-OUT
B_IN equ d'6' ; Port B, Data-IN
B_PS equ d'7' ; Port B, PS-Eingang

endasm

INTCON.0 =1 ;wenn RB0-Int(CLK) =1 dann
goto start ;gehe zu Start
INTCON.0 =0 ;wenn RB0-Int(CLK) =0 dann clear IR-Flag
;--------------------------------------------------------------------------------
asm
btfss R_DATEN,0 ; sofort Ausgabe des
bsf PORTB,B_OUT ; .. Bits #0 von
btfsc R_DATEN,0 ; .. R-Daten an
bcf PORTB,B_OUT ; .. DATA_OUT

endasm
;--------------------------------------------------------------------------------
If B_CLK <>1 then
B_LED =0
else
toggle B_LED
endif
If B_PS =0 then gosub lesen
;--------------------------------------------------------------------------------

asm
btfss PORTB,B_IN ; Bit am Eingang
bsf STATUS,C ; .. DATA-IN zum
btfsc PORTB,B_IN ; .. Nachschieben in
bcf STATUS,C ; .. Schieberegister in C
rrf R_DATEN,F ; Daten nachschieben (invertiert)

; ab hier sind die Daten in R_DATEN aktualisiert und fertig für
; die nächste pos. Flanke von CLK (#0 kann dann sofort an DATA_OUT
; weitergegeben werden).
endasm
;--------------------------------------------------------------------------------
start:

TRISB = %111110001 ' Set PORTB to output 0=Out 1=In
TRISA = %11111111 ' Set PORTA to input
CMCON = 7 ' PORTA to digital
OPTION_REG = $87 ' Konfiguration TIMER / WDT / Pull-Ups Disable PORTB pull-ups und PS2-PS0 Prescaler Rate Select bits
INTCON = $F0 ' Konfiguration INTERRUPT Disable PORTB pull-ups und PS2-PS0 Prescaler Rate Select bits

asm
loop
clrwdt ; Watchdog-Timer loeschen
btfsc PORTB,B_PS ; if PS = LOW
goto loop2
btfsc R_FLAG,F_PS_RDY ; and PS_RDY not set
goto loop
movf R_OLD,W ; .. the reload old values
movwf R_DATEN ;
bsf R_FLAG,F_PS_RDY ; .. set FLAG PS_RDY
goto loop

loop2
bcf R_FLAG,F_PS_RDY ; if PS = LOW reset PS_RDY
goto loop
endasm

lesen:

asm
read_input
clrf R_DATEN
btfss PORTA,A_X8
bsf R_DATEN,0
btfss PORTA,A_X7
bsf R_DATEN,1
btfss PORTA,A_X6
bsf R_DATEN,2
btfss PORTA,A_X5
bsf R_DATEN,3
btfss PORTA,A_X4
bsf R_DATEN,4
btfss PORTA,A_X3
bsf R_DATEN,5
btfss PORTA,A_X2
bsf R_DATEN,6
btfss PORTA,A_X1
bsf R_DATEN,7

movf R_DATEN,W
movwf R_OLD

endasm
return

end

zugvogel1
- 9th February 2005, 20:42
Hallo

hier die überarbeitung

meine Probleme sind die vielen @..... noch vieleicht hat noch einer eine idee wo ich noch etwas umschreiben kann.
Vielen dank an alle im voraus.



; **************************************************
;Files Assignment
; **************************************************

symbol A_X1 = PORTA.1 ; A_X1 to PORTA.1
symbol A_X2 = PORTA.0 ; A_X1 to PORTA.0
symbol A_X3 = PORTA.7 ; A_X1 to PORTA.7
symbol A_X4 = PORTA.6 ; A_X1 to PORTA.6
symbol A_X5 = PORTA.5 ; A_X1 to PORTA.5
symbol A_X6 = PORTA.4 ; A_X1 to PORTA.4
symbol A_X7 = PORTA.3 ; A_X1 to PORTA.3
symbol A_X8 = PORTA.2 ; A_X1 to PORTA.2

bit0 var R_DATEN.0 ;ist bit0 von R_DATEN
bit1 var R_DATEN.1 ;ist bit1 von R_DATEN
bit2 var R_DATEN.2 ;ist bit2 von R_DATEN
bit3 var R_DATEN.3 ;ist bit3 von R_DATEN
bit4 var R_DATEN.4 ;ist bit4 von R_DATEN
bit5 var R_DATEN.5 ;ist bit5 von R_DATEN
bit6 var R_DATEN.6 ;ist bit6 von R_DATEN
bit7 var R_DATEN.7 ;ist bit7 von R_DATEN

symbol B_CLK = PORTB.0 ; B_CLK to PORTB.0
symbol B_OUT = PORTB.1 ; B_OUT to PORTB.1
symbol B_LED = PORTB.2 ; B_LED to PORTB.2
symbol B_IN = PORTB.6 ; B_IN to PORTB.6
symbol B_PS = PORTB.7 ; B_PS to PORTB.7
symbol F_PS_RDY = PORTB.1 ; F_PS_RDY to PORTB.1

R_DATEN var BYTE
R_OLD var BYTE
R_Flag var BYTE

; **************************************************

ASM

R_DATEN equ 20h ; fuer Speichern der Daten und Schieben
R_CNT1 equ 22h ; counter 1
R_CNT2 equ 23h ; counter 2
R_FLASH equ 24h ; for flashing LED
R_OLD equ 25h ; Register for old values
R_FLAG equ 26h ; Register for flags

F_PS_RDY equ d'1' ; Ready-Flag

W_TEMP equ h'40' ; saving W-Register
STATUS_TEMP equ h'41' ; saving Status-Register

B_PS equ d'7' ; Port B, PS-Eingang
B_OUT equ d'1' ;Output ; Port B, Data-OUT
B_IN equ d'6' ; Port B, Data-IN
A_LED equ d'2' ;Output ; Port A, LED-Ansteuerung
B_CLK equ d'0' ; Port B, Clock

endasm
; **************************************************


goto start

; **************************************************

; Interupt Service Routine ISR
; **************************************************

@ org 0004h ; Interupt Vector

; ----- Saving STATUS and W ----------------------
@ movwf W_TEMP ; W-Register Retten
@ swapf STATUS,W ; Status-Reg. -> w
@ movwf STATUS_TEMP ; Status-Reg. Retten

; ----- IR IB0-Change (negative Edge) ------------
@ btfss INTCON,INTF
goto ir_2
@ bcf INTCON,INTF ; clear IR-Flag

@ btfss R_DATEN,0 ; sofort Ausgabe des
@ bsf PORTB,B_OUT ; .. Bits #0 von
@ btfsc R_DATEN,0 ; .. R-Daten an
@ bcf PORTB,B_OUT ; .. DATA_OUT (invertiert)

If B_CLK <>1 then
B_LED =0
else
toggle B_LED
endif

If B_PS =0 then gosub lesen

@ btfss PORTB,B_IN ; Bit am Eingang
@ bsf STATUS,C ; .. DATA-IN zum
@ btfsc PORTB,B_IN ; .. Nachschieben in
@ bcf STATUS,C ; .. Schieberegister in C
@ rrf R_DATEN,F ; Daten nachschieben (invertiert)

; ab hier sind die Daten in R_DATEN aktualisiert und fertig für
; die nächste pos. Flanke von CLK (#0 kann dann sofort an DATA_OUT
; weitergegeben werden).

; ----- IR by Timer 0 (idle-state) ------------
ir_2:
@ btfss INTCON,T0IF
goto posret
@ bcf INTCON,T0IF ; clear IR-Flag

@ comf PORTA,W
@ movwf PORTA

; ----- Restore STATUS and W ---------------------
posret:
@ bcf INTCON,INTF ; clear IR-Flag
@ swapf STATUS_TEMP,W ; in w-Register
@ movwf STATUS ; w -> Status
@ SWAPF W_TEMP,F ; W_TEMP -> W, ohne..
@ SWAPF W_TEMP,W ; .. Z-Flag zu aendern

@ retfie

; **************************************************

; Programm
; **************************************************

@ org 0060h ; Position des Programms

start:
; **************************************************

; Konfiguration PORTS
; **************************************************

; bsf STATUS,RP0 ; -> BANK 1
; movlw B'11111111'

TRISB = %11000001
TRISA = %11111111
CMCON =%00000111
OPTION_REG =%10000111
T2CON =%01111101
INTCON =%11110000
PIE1 =%00000000

; **************************************************

; Main Loop
; **************************************************


loop:
CLEARWDT ; Watchdog-Timer loeschen
if B_PS =1 then goto loop2 ; if PS = 1
@ btfsc R_FLAG,F_PS_RDY ; and PS_RDY not set
goto loop
@ movf R_OLD,W ; .. the reload old values
@ movwf R_DATEN ;
@ bsf R_FLAG,F_PS_RDY ; .. set FLAG PS_RDY
goto loop
loop2:
@ bcf R_FLAG,F_PS_RDY ; if PS = LOW reset PS_RDY
goto loop


;*********************************
; Routine:lesen
;*********************************

lesen:
@ clrf R_DATEN
IF A_X8 =1 then
Bit0 =0
Else
;Bit0 =1
@ bsf R_DATEN,0
endif
IF A_X7 =1 then
Bit1 =0
Else
;Bit1 =1
@ bsf R_DATEN,1
endif
IF A_X6 =1 then
Bit2 =0
Else
;Bit2 =1
@ bsf R_DATEN,2
endif
IF A_X5 =1 then
Bit3 =0
Else
;Bit3 =1
@ bsf R_DATEN,3
endif
IF A_X4 =1 then
Bit4 =0
Else
;Bit4 =1
@ bsf R_DATEN,4
endif
IF A_X3 =1 then
Bit5 =0
Else
;Bit5 =1
@ bsf R_DATEN,5
endif
IF A_X2 =1 then
Bit6 =0
Else
;Bit6 =1
@ bsf R_DATEN,6
endif
IF A_X1 =1 then
Bit7 =0
Else
;Bit7 =1
@ bsf R_DATEN,7
endif

@ movf R_DATEN,W
@ movwf R_OLD

return

END