f870a3e4f1878dba6e1630cf0a2bf5ded8bb53e2
[my-code/atmel.git] / beginners / test_ports_uart.asm
1 ;
2 ; test all ports and uart
3 ;
4
5 .include "../include/m32def.inc"
6
7 INIT:
8
9         ; all ports outputs
10         ldi r16,0xff
11         out DDRA,r16
12         out DDRB,r16
13         out DDRC,r16
14         out DDRD,r16
15
16         ; uart baudrate (8mhz -> 38.4k) + enable
17         ldi r16,0
18         out UBRRH,r16
19         ldi r16,12
20         out UBRRL,r16
21         sbi UCSRB,TXEN
22
23         ; led counter
24         ldi r17,0
25         ; loop counter
26         ldi r18,0
27
28 MAINLOOP:
29
30         ; reset loop counter
31         ldi r18,0
32
33         ; the delay loop
34         LOOP:
35         
36                 ; the dely loop in the delay loop
37                 ldi r22,0
38                 INNERLOOP:
39
40                         inc r22
41                         cpi r22,0xff
42                         brne INNERLOOP
43         
44                 ; increase loop counter
45                 inc r18
46
47                 ; check loop counter
48                 cpi r18,0xff
49
50                 ; continue if loop counter = 0xff
51                 ; else do loop again
52                 brne LOOP
53                 
54         ; shift the led counter
55         lsl r17
56         
57         ; set first bit if led counter is equal zero
58         cpi r17,0
59         brne LEDOUT
60         ldi r17,1
61
62         ; drive the leds
63         LEDOUT:
64         ldi r21,0xff
65         sub r21,r17
66         out PORTA,r21
67         out PORTB,r21
68         out PORTC,r21
69         out PORTD,r21
70
71         ; get the number we want to transmit
72         mov r19,r17
73         ldi r20,0x30 ; ascii 0
74         GETNUMBER:
75
76                 lsr r19
77                 inc r20
78                 cpi r19,0
79                 brne GETNUMBER
80
81         ; uart transmit
82         UARTOUT:
83
84                 ; try again if uart not ready
85                 sbis UCSRA,UDRE
86                 rjmp UARTOUT
87
88         ; transmit the number
89         out UDR,r20
90                 
91         ; loop forever
92         rjmp LOOP
93
94 ; eof