
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo, ich habe eine Frage zur ASM-Programmierung (mit der ich bislang noch keine echte Erfahrung habe). Meine Aufgabe: Eine CCII-Unit steuert über den I2C-Bus mit Hilfe einer CI-Unit-M mehrere Standard-RC-Servos. Das ist sowohl für die Bussteuerung, als auch für die Servosteuerung zeitkritisch und nur mit ASM auf der CI-Unit lösbar. Die Teillösungen I2C-Bussteuerung und Servosteuerung auf der CI-Unit haben freundlicherweise schon andere (A. Helbig/B. Kainka) bereits für mich gelöst ;). Die beiden ASM-Routinen funktionieren für sich problemlos. Nun bleibt für mich nur das Problem, die beiden ASM-Routinen (s.u.) in ein Programm zusammenzufassen, die Einsprungadressen zu kennen und das Ganze zu kompilieren. Ich hoffe, ihr könnt mir einen Tipp dazu geben. Vermutlich ist es wieder ganz einfach...wenn man weiß wie es geht. Anbei noch die beiden ASM-Listings. Gruß und Dank im voraus Theo P.S. Der sehr interessante Vorschlag von sl - 1.03.2005 22:05 kommt für (noch) nicht in Frage, da ich die CCII-Unit nicht so gern mit dem SWCom umrüsten möchte (oder die HWCom-Programmierschnittstelle umschalten o.ä.). *** Servoansteuerung für bis zu 8 Servos (by B. Kainka) *** portb .equ 1 ;Daten Port B pbdir .equ 5 ;Datenrichtung Port B .org $101 sei loop lda $0A1 ;Bytevariable 1 sta portb ;Port setzen ldx #230 loop1 nop ;Loop1: 1 ms dex bne loop1 ldx $0A2 ;Impulslänge in X laden inx loop2 nop dex ;X -1 bne loop2 ;Loop2: 0...1ms lda #00 sta portb ;Port = 0 cli rts .end *** I2C-Koppler (by A. Helbig) *** i2c_start equ $083C i2c_write equ $0846 i2c_read equ $086F i2c_readlast equ $08BB i2c_stop equ $08E5 ; 92 = Wert ; 94 = Addresse org $101 get bsr swr4f bsr chkrxd asla asla asla asla sta $93 bsr rdpulse bsr chkrxd and #$0F ora $93 sta $91 bsr rdpulse lda $91 sta $92 clr $91 bra coneeprom start92 bsr rdlast ldx $92 bra i2cstrt chkrxd bsr strt92r rxdloop bsr read91 brclr 6,$91,rxdloop rts strt92r ldx $92 startr incx bra i2cstrt rdpulse bsr start92 ldx #$5F jsr i2c_write wr4f ldx #$4F wrlast jsr i2c_write jsr i2c_stop rts read91 jsr i2c_read sta $91 rts chkrdy ldx $94 bsr startr rdyloop bsr read91 brset 6,$91,rdyloop rdlast jsr i2c_readlast rts swr4f bsr start92 bra wr4f put bsr rdlast ldx $94 bsr swr6f bsr chkrdy lda $92 asra asra asra asra bsr wrpulse bsr chkrdy lda $92 bsr wrpulse ;bra coneeprom coneeprom ;EEProm anmelden ldx #$0A0 bsr i2cstrt ldx $066 jsr i2c_write ldx $067 jsr i2c_write ldx #$0A1 i2cstrt jsr i2c_start rts reset bsr start92 ldx#$CF jsr i2c_write bsr wr4f bra coneeprom swr6f bsr i2cstrt ldx #$6F bra wrlast rdstat bsr strt92r bsr read91 bsr rdlast clra rts wrpulse and #$0F ora #$60 sta $93 ldx $94 bsr i2cstrt ldx $93 jsr i2c_write lda $93 ora #$10 tax jsr i2c_write ldx $93 bra wrlast rxd bsr swr4f bsr rdstat brclr 6,$91,stnrdy strdy lda #$FF stnrdy sta $92 sta $91 bra coneeprom ready bsr rdlast ldx $92 bsr swr6f bsr rdstat brset 6,$92,stnrdy bra strdy |
| Antwort schreiben |