Hi Scotch,
hier der komplette Code.
Da ich mich nicht mit Assebler beschäftige kann ich Dir bei der Lösung aber nicht weiter helfen! Ich hoffe, der Autor des Progs. hat nichts dagegen, dass ich den Code hier reinstelle ??
Code:
;******************************************************************************
; Verwendete Hardware:
; AVR Testboard Board mit 90S2313 Prozessor
;
; Erstellt: Dezember 2001, Klaus Leidinger
;
; Programm zum Testen der AVR Board Hardware.
; Lauflicht an beiden Ports. Achtung: PortD.7 gibt es nicht ;-)
;
; Das Timing erfolgt über Interrupts.
;
;******************************************************************************
.include "2313def.inc" ;Festlegen des verwendeten Chips
.def Anzeige=r19
.def temp1=r18
.def result=r16
.def temp=r17
;Werte für 0,5 sec Timer bei 4MHZ Quarz
;.equ T1Lval=0xee
;.equ T1Hval=0x85
;Werte für 0,5 sec Timer bei 8MHZ Quarz
.equ T1Lval=0xdc
.equ T1Hval=0x0b
; Start des Programmcodes
.cseg
.org $0000
rjmp reset ;Reset extern oder Watchdog
.org $0001
reti ;rjmp INT0_int ;Externer Interrupt INT0
.org $0002
reti ;rjmp INT1_int ;Externer Interrupt INT1
.org $0003
reti ;rjmp Timer1_capt ;Timer 1 capture Mode
.org $0004
reti ;rjmp Timer1_comp ;Timer 1 compare Mode
.org $0005
rjmp Timer1_over ;Timer 1 overflow
.org $0006
reti ;rjmp Timer0_over ;Timer 0 overflow
.org $0007
reti ;rjmp UART_rxc ;Serial RX complete Handler
.org $0008
reti ;rjmp UART_dre ;Serial UDR empty Handler
.org $0009
reti ;rjmp UART_txc ;Serial TX complete Handler
.org $000A
reti ;rjmp ANA_comp ;Analog comperator
.db "Testprogramm für Microcontroller Board AVR 90S2313 Version 1.0"
;Beginn des Programmcodes
reset: ldi r16,low(RAMEND)
out SPL,r16
ldi r16,0x00
out TCCR1A,r16 ;Timer 1 disconnect OC1 + PWM
ldi r16,0x03
out TCCR1B,r16 ;Timer 1 prescaling 1/64
ldi r16,T1Lval
out TCNT1L,r16 ;Timer low value
ldi r16,T1Hval
out TCNT1H,r16 ;Timer high value
ldi r16,0x80
out TIMSK,r16 ;Timer1 overflow enabled
sei ;Enable global Interrupts
ldi result,$ff ;Port B -> output
out DDRB,result
out DDRD,result ;Port D -> output
Startprog:
sei ;Enable global Interrupts
;Auswahl ob High oder Low geschoben wird
ldi Anzeige,$0 ;LED on (Low)
sec ;set Carry (H wird durch die Ports geschoben)
; ldi Anzeige,$ff ;LED off (High)
; clc ;clear Carry (L wird durch die Ports geschoben)
loop: out PORTB,Anzeige
out PORTD,Anzeige
rjmp loop ;Timing durch Interrupts
;Beginn der Unterprogramme und Interruptroutinen
Timer1_over: ;Interrupt 500ms
rol Anzeige ;Zählerstand
ldi r16,T1Lval ;Timer reload
out TCNT1L,r16 ;Timer low value
ldi r16,T1Hval
out TCNT1H,r16 ;Timer high value
reti
.EXIT ;letzte Zeile des Programmes
Lesezeichen