;****************************************************************************** ;** ** ;** MAKROS.ASM - beinhaltet Befehls als auch Speichermakros zum Logging ** ;** ** ;** (c) 2005 Christoph Wagner - IR Fernbedienungsstation ** ;** ** ;** Timing und Code für AT90S2313 bei 8 MHz ** ;** ** ;****************************************************************************** ;****************************************************************************** ;** ** ;** MAKROS TSOP RECEIVING ** ;** ** ;****************************************************************************** ;**************************************************************** Schreibe "1"-Paket Makro ;****************************************************************************** ;** ** ;** MAKROS DIODE RECEIVING ** ;** ** ;****************************************************************************** ;**************************************************************** Schreibe "1"-Paket Makro ;**************************************************************** Schreibe "0"-Paket ;**************************************************************** I/O Erledigen .MACRO COMMUNICATION ; 18 Takte mov oldpd,pd in pd,PIND sbrs pd,_EN rjmp COMM_WAIT1 ; ( 5 ) ; 4 sbrc oldpd,_EN rjmp COMM_SETLOW ; Reagiere auf steigende Flanke von ENABLE ; Wenn ENABLE konstant High, ziehe ENABLE auf LOW ; Andernfalls Warte wegen dem Timing ; 6 cbi PORTD,_VALID ; Valid = low cp READ_LOW,WRITE_LOW breq COMM_NO_DATA ; Ist Puffer leer (Schreib u. Leseposition gleich) ? ; 10 ld temp1,Y+ ; Nein, Puffer hat Daten : lese Byte cpi READ_LOW,RAM_END brlo COMM_READ_RAM_OK subi READ_LOW,RAM_SIZE ; Überlaufkontrolle COMM_READ_RAM_OK: ; 15 out PORTB,temp1 ; Datenbyte ausgeben rjmp COMM_END ; ( 18 ) COMM_NO_DATA: ; 11 sbi PORTD,_VALID ; Ja, Puffer ist leer : Valid = high rjmp COMM_READ_RAM_OK COMM_SETLOW: ; 7 sbi DDRD,_EN nop nop nop nop cbi DDRD,_EN ; 15 ; Ziehe ENABLE Leitung für 750ns auf LOW nop rjmp COMM_END ; 18 COMM_WAIT1: ; 5 ldi loop,4 COMM_WAIT1_LOOP: subi loop,1 brne COMM_WAIT1_LOOP ; 17 (Warte 4*3 = 12 Takte) nop COMM_END: ; 18 .ENDMACRO ;****************************************************************************** ;** ** ;** MAKRO CODE bzw. MAKRO FUNCTIONS ** ;** ** ;******************************************************************************