_main: BIT CLR MODE1 IRPTEN; // Global interrupt disable call _SPISchreibInit; BIT SET MODE1 IRPTEN; r0 = 120; // SpeicherAdresse 120 r1 = 0x4d; // zu speicherndes Byte 4d call _SPISchreibBefehl; call _SPIFertig; _main.end: jump (pc,0); _SPISchreibInit: BIT CLR IRPTL SPIHI; BIT SET IMASK P1I; r0 = 0; dm(SPICTL) = r0; dm(SPIFLG) = r0; dm(SPIDMAC) = r0; /* Set BAUD rate */ r0 = 0x064; dm(SPIBAUD) = r0; ustat2 = 0x0D02; dm(SPIFLG) = ustat2; ustat2 = SENDZ| MSBF| WL32| /* 32-bit words */ SPIMS| /* Master mode (internal SPICLK) */ SPIEN| /* Enable SPI port */ TIMOD1; /* Initialize SPI port to begin transmitting when DMA is enabled */ dm(SPICTL) = ustat2; bit set imask P1I; //enable IRQ interrupts _SPISchreibInit.end: rts; _SPISchreibBefehl: // in R0 steht die an die zu schriebende Adresse // in R1 steht das zu schreibende Byte R0 = LSHIFT R0 BY 8; R2 = SPISchreibzugriff; R3 = R2 or R0; R3 = R3 or R1; dm(SPIWert) = R3; call _SPIWertSenden; _SPISchreibBefehl.end: rts; _SPIWertSenden: R3 = dm(SPIWert); r2=dm(RXSPI); dm(TXSPI) = R3; ustat2 = dm(SPISTAT); BIT TST ustat2 TXS; IF TF jump(PC,-2); _SPIWertSenden.end: rts; _SPIFertig: BIT CLR IRPTL SPIHI; BIT CLR LIRPTL P18I; r0 = 0; dm(SPICTL) = r0; dm(SPIFLG) = r0; dm(SPIDMAC) = r0; _SPIFertig.end: rts;