;**************************************************************** ;* * ;* Rank Strand D54 zu DMX512 Converter * ;* * ;* Uwe Bredemeier April 2003 * ;* Rev. 0x * ;* * ;**************************************************************** MAXCH EQU 48 ;MAX DMXKANAELE CL EQU P3.4 ;PORT CLOCK A/D CS EQU P3.3 ;PORT CHIP SELECT A/D DATA EQU P3.5 ;PORT DATA A/D TXDPORT EQU P3.1 ;PORT DMXTRANSMIT TREN EQU P1.5 ;PORT 75167 DIR WDPORT EQU P3.7 LED EQU P1.7 DSEG xxxybit segment bit at 24h READ_EN DS 1 xxxreg segment intern byte at 30h DATEN DS 49 STARTCODE DS 1 FRAMECOUNTER DS 1 SPMIN EQU $ -1 ;AB HIER STACK CSEG ;***************************************************************** ;* Interruptsprungleiste initialisieren * ;***************************************************************** ORG 00H LJMP INIT ;zum Programmanfang springen ORG 03H ;Ext. Int. 0 AJMP SYNC RETI ORG 0BH RETI ;Timer 0 Interrupt ORG 13H ;Ext. Int. 1 RETI ORG 1BH ;Timer 1 Interrupt RETI ORG 23H ;Interrupt serielle Schnittstelle RETI ORG 2BH ;Timer 2 Interrupt RETI ;**************************************************************** INIT: MOV SP,#SPMIN MOV R0,#SP ;SPEICHER LOESCHEN MOV A,#0 MEMLOOP: MOV @R0,A DJNZ R0,MEMLOOP SETB EX0 ;EXT INTR 0 ENABLE SETB IT0 ;FALLENDE FLANKE MOV STARTCODE,#0 MOV FRAMECOUNTER,#MAXCH SETB TREN SETB EAL ;GENERELLE INTERRUPTFREIGABE ;**************************************************************** MAINLOOP: CPL WDPORT SJMP MAINLOOP ;**************************************************************** ; INTERRUPT SYNC SIGNAL ; THERE IS NO TIME FOR PUSHING AND POPING.... SYNC: CLR CS MOV A,#7 MOV R4,#9 LOOP2: DEC A ; NULL ? JZ NULL JNB P3.2,LOOP2 JNB READ_EN,RETIJ ; DATA? CLR LED SETB CL ; CLR CL LOOP: SETB CL MOV C,DATA RLC A CLR CL DJNZ R4,LOOP SETB CS MOV @R0,A DEC R0 DJNZ FRAMECOUNTER,RETIJ CLR READ_EN ACALL SEND SETB LED RETIJ: RETI NULL: MOV FRAMECOUNTER,#MAXCH MOV R0,#DATEN+MAXCH SETB READ_EN RETI ;**************************************************************** SEND: CLR EAL MARK1: MOV R0,#46 ;88us LOW CLR TXDPORT LOOP1: NOP NOP DJNZ R0,LOOP1 SETB TXDPORT MOV A,STARTCODE NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP CLR TXDPORT NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP SETB TXDPORT NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV R1,#0 MOV R0,#DATEN+MAXCH SEND1: MOV A,@R0 CLR TXDPORT NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP RRC A MOV TXDPORT,C NOP NOP NOP NOP NOP NOP NOP SETB TXDPORT NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP DEC R0 MOV A,R0 XRL A,#DATEN JNZ SEND1 SETB EAL RET ;**************************************************************** END