1 | ;-------------------------------------------------------------------------
|
2 | ; Titel : myAVR Beispiel "UART senden" für den ATmega8
|
3 | ;-------------------------------------------------------------------------
|
4 | ; Funktion : sendet den String "Test" mit 9600 Baud per serieller
|
5 | ; : Schnittstelle
|
6 | ; Schaltung : Nullmodemkabel an PC & AVR-Board
|
7 | ;-------------------------------------------------------------------------
|
8 | ; Prozessor : ATmega8
|
9 | ; Takt : 3,6864 MHz
|
10 | ; Sprache : Assembler
|
11 | ; Datum : 09.11.2007
|
12 | ; Version : 1.0
|
13 | ; Autor : Renaldo Badke
|
14 | ; Programmer :
|
15 | ; Port :
|
16 | ;-------------------------------------------------------------------------
|
17 | .equ F_CPU = 3686400
|
18 | .include "m8def.inc"
|
19 | ;----------------------------------------------------------------------
|
20 | ;Reset and Interruptvectoren ;VNr. Beschreibung
|
21 | begin:
|
22 | rjmp main ; 1 POWER ON RESET
|
23 | reti ; 2 Int0-Interrupt
|
24 | reti ; 3 Int1-Interrupt
|
25 | reti ; 4 TC2 Compare Match
|
26 | reti ; 5 TC2 Overflow
|
27 | reti ; 6 TC1 Capture
|
28 | reti ; 7 TC1 Compare Match A
|
29 | reti ; 8 TC1 Compare Match B
|
30 | reti ; 9 TC1 Overflow
|
31 | reti ;10 TC0 Overflow
|
32 | reti ;11 SPI, STC Serial Transfer Complete
|
33 | reti ;12 UART Rx Complete
|
34 | reti ;13 UART Data Register Empty
|
35 | reti ;14 UART Tx Complete
|
36 | reti ;15 ADC Conversion Complete
|
37 | reti ;16 EEPROM Ready
|
38 | reti ;17 Analog Comperator
|
39 | reti ;18 TWI (I²C) Serial Interface
|
40 | reti ;19 Strore Program Memory Ready
|
41 | ;------------------------------------------------------------------------
|
42 | ;Start, Power ON, Reset
|
43 | main:
|
44 | ldi r16,high(RAMEND)
|
45 | out SPH,r16
|
46 | ldi r16,low(RAMEND) ;Stack Initialisierung
|
47 | out SPL,r16 ;Init Stackpointer
|
48 |
|
49 | sbi UCSRB,3 ;USR=UCSRB=0x0A TXEN=Bit3 TX aktivieren
|
50 | ldi r16,3686400/(9600*16)-1 ;Baudrate 9600 einstellen
|
51 | out UBRRL,r16
|
52 |
|
53 | ldi r16,0b01000000 ;Messbereich 0-5V, Kanal 0
|
54 | out ADMUX,r16
|
55 | ldi r16,0b10000111 ;ADC an, CLK=8MHz/128
|
56 | out ADCSRA,r16
|
57 | ;------------------------------------------------------------------------
|
58 | mainloop:
|
59 | sbi ADCSR,ADSC
|
60 |
|
61 | subloop:
|
62 | sbis ADCSR,ADIF ;Warten bis Wandlung beendet ist
|
63 | rjmp subloop
|
64 | in r17,ADCL ;Die unteren 8 Bit in r17 merken
|
65 | in r18,ADCH
|
66 | rcall warte3 ;EDIT-----------------------auf warte 2 setzen für größere werte
|
67 | rjmp mainloop
|
68 |
|
69 | ;------------------------------------------------------------------------
|
70 | warte2: sbis UCSRA,UDRE ;Warten bis Senderegister frei ist
|
71 | rjmp warte2
|
72 | out UDR,r18 ;dann die oberen 2 Bit senden
|
73 | warte3: sbis UCSRA,UDRE ;Warten bis Senderegister frei ist
|
74 | rjmp warte3
|
75 | out UDR,r17 ;dann die unteren 8 Bit senden
|
76 | rjmp mainloop ;dann die unteren 8 Bit senden
|
77 |
|
78 | ;-----------------------------------------------------------------------
|