#include "msp430.h" ; #define controlled include file NAME main ; module name PUBLIC main ; make the main label vissible ; outside this module ORG 0FFFEh DC16 init ; set reset vector to 'init' label ORG 0FFF2h DC16 timer RSEG CSTACK ; pre-declaration of segment RSEG CODE ; place program in 'CODE' segment init: MOV #SFE(CSTACK), SP ; set up stack main: NOP ; main program MOV #WDTPW+WDTHOLD, &WDTCTL ; Stop watchdog timer ; port 1.0, 1.1 = ausgang MOV.B #BIT0 + BIT1, &P1DIR ; port 1 select für timer-output-module MOV.B #BIT1, &P1SEL ; port 2.0 = 1 MOV.B #BIT0, &P1OUT ; timer A an ; ACLK = 32,768kHz ; MAX = 0 .. 65535 = 65536 = 2sek MOV.W #TASSEL0 + MC0, &TACTL ; timer A compare 0 benutzen ;MOV.W #CCIE, &TACCTL0 ; für interrupt-betrieb MOV.W #OUTMOD2, &TACCTL0 ; für output-module-betrieb MOV.W #32768-1, &TACCR0 ; compare register setzen (1sek) EINT ; interrupts aktivieren test: BIS.B #BIT0, &P1OUT ; software-led-blinken CALL #warten BIC.B #BIT0, &P1OUT CALL #warten JMP test warten: MOV.W #65535, R4 ; 0FFFFh = 65535 MOV.W #5, R5 loop: DEC R4 ; R4=0 -> Z=1 JNZ loop ; wenn Z != 1, springe DEC R5 JNZ loop RET timer: PUSH R4 PUSH R5 INC R4 XOR.B #BIT0, &P1OUT POP R5 ; reihenfolge beachten POP R4 RETI END