goed, ik denk ik waag het hier eens:
(atmega32 chip op een stk500 plankje)
goed, het probleem is nu dat ik niets kan ontvangen op het plankje. Dwz, ik ontvang iets door bijv '10011001' te sturen via een terminal programma, en de lampjes gaan in een rare volgorde branden. Ongeacht wat ik stuur. Laat ik vervolgens de input van UDR ook weer terugsturen naar de pc dan komt er dus keurig binnen wat er ook naar de lampjes gaat: steed hetzelfde dus.
Ik heb google al afgezocht, maar kom er dus niet uit....
de bedoeling is dat het lampje aangaat als er iets gestuurd wordt vanaf de pc.
Wat doe ik nou fout ?
(atmega32 chip op een stk500 plankje)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
| .include "m32def.inc"
.def State = R16 ; Definieer de variabele State.
.def NewInput = R17 ; Definieer de variabele NewInput
.def Test = R21
.def Delay = r22
.def Delay2 = r23
.def Delay3 = r24
.def counter = r18
.org 0x0000 ; Reset interrupt
.equ clock = 8000000
.equ baudrate = 4800
.equ baudkonstant = (clock/(16*baudrate))-1
rjmp usart_init
.org 0x01A ; USART RX Complete interrupt
ontvanger:
; Wait for data to be received
sbis UCSRA, RXC
rjmp ontvanger
; Get and return received data from buffer
;ldi r19, UDR
out PORTB, r19 ; beuk r19 in UDR (ofwel knal dat over de seria
out UDR, r19
loop:
rjmp loop
/* ********************************
Initialisatie van het programma
*********************************/
usart_init:
; Set baud rate r17:r16 = baudrate
push r16
push r17
ldi r17, HIGH(baudkonstant)
ldi r16, low(baudkonstant)
out UBRRH, r17
out UBRRL, r16
; Enable Receiver and Transmitter + Receiver interrupt
ldi r16, (1<<RXCIE)|(1<<RXEN)|(1<<TXEN)
out UCSRB,r16
; Set frame format: 8data, 2stop bit
ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)
out UCSRC, r16
pop r17
pop r16
sei
led_init:
ser R19
out DDRB, R19 ; Port B is een output port (via LEDs)
clr R19
out DDRA, R19 ; Port A is een input port (via switches)
/* ********************************
Hoofdprogramma
*********************************/
lus:
in R19, PINA ; Lees welke knoppen worden ingedrukt en kopieer dit in R16.
out PORTB, R19 ; Schrijf de inhoud van R19 naar de
LEDs.
cpi R19, 0xFF ; Is er niets ingedrukt is?
breq lus
rjmp usart_transmit
led_aan:
out PORTB, R19 ; Schrijf de inhoud van R19 naar de
LEDs.
inc counter
rjmp usart_transmit
usart_transmit:
sbis UCSRA,UDRE ; wacht tot er iets wordt ontvangen
rjmp USART_Transmit ; blijf wachten
out UDR,r19 ; beuk r19 in UDR (ofwel knal dat over de serial port)
DLY:
ldi r25, 0x00
dec Delay
brne DLY
ldi Delay,0xDD
dec Delay2
brne DLY
ldi Delay2,0xBC
rjmp lus |
goed, het probleem is nu dat ik niets kan ontvangen op het plankje. Dwz, ik ontvang iets door bijv '10011001' te sturen via een terminal programma, en de lampjes gaan in een rare volgorde branden. Ongeacht wat ik stuur. Laat ik vervolgens de input van UDR ook weer terugsturen naar de pc dan komt er dus keurig binnen wat er ook naar de lampjes gaat: steed hetzelfde dus.
Ik heb google al afgezocht, maar kom er dus niet uit....
de bedoeling is dat het lampje aangaat als er iets gestuurd wordt vanaf de pc.
Wat doe ik nou fout ?
| Hardcore - Terror |