vs1011test.asm
1 | .include <m32def.inc>
| 2 | .equ dreq = pind7
| 3 | .equ reset = pd6
| 4 | .equ cs = pd5
| 5 | .equ dcs = pd4
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 | .equ F_CPU = 14745600 ; Systemtakt in Hz
| 16 | ; 04000000
| 17 | .equ BAUD = 9600 ; Baudrate
| 18 |
| 19 | ; Berechnungen
| 20 | .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden
| 21 | .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate
| 22 | .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; Fehler in Promille
| 23 |
| 24 | .if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) ; max. +/-10 Promille Fehler
| 25 | .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
| 26 | .endif
| 27 |
| 28 |
| 29 |
| 30 |
| 31 |
| 32 |
| 33 | .cseg
| 34 | ldi r16, low(RAMEND)
| 35 | ldi r17, high(RAMEND)
| 36 | out spl, r16
| 37 | out sph, r17
| 38 | ;:::::::::::::::::::::::::::::
| 39 | ldi r16, (1<<reset) | (1<<cs) | (1<<1) | (1<<dcs)
| 40 | out ddrd, r16
| 41 |
| 42 | ldi r16, (1<<7) | (1<<5) | (1<<4)
| 43 | out ddrb, r16
| 44 |
| 45 | ldi r16, (1<<MSTR) | (1<<SPE) | (1<<SPR0)
| 46 | out SPCR, r16
| 47 |
| 48 |
| 49 | ldi r16, HIGH(UBRR_VAL)
| 50 | out UBRRH, r16
| 51 | ldi r16, LOW(UBRR_VAL)
| 52 | out UBRRL, r16
| 53 |
| 54 | ldi r16, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
| 55 | out UCSRC, r16
| 56 |
| 57 | sbi UCSRB,TXEN
| 58 | sbi UCSRB,RXEN
| 59 | sbi portd, cs
| 60 | sbi portd, dcs
| 61 | sbi portd, reset
| 62 | rcall w
| 63 | nop
| 64 | nop
| 65 | nop
| 66 | nop
| 67 | nop
| 68 | cbi portd, reset
| 69 | nop
| 70 | nop
| 71 | nop
| 72 | nop
| 73 | nop
| 74 | nop
| 75 | sbi portd, reset
| 76 | request:
| 77 | sbis pind, dreq
| 78 | rjmp request
| 79 | ldi r16, 'L'
| 80 | rcall serout
| 81 | ldi r16, 'o'
| 82 | rcall serout
| 83 | ldi r16, 's'
| 84 | rcall serout
| 85 | ldi r16, 10
| 86 | rcall serout
| 87 | ldi r16, 13
| 88 | rcall serout
| 89 |
| 90 | receive_loop:
| 91 | sbis UCSRA, RXC ; warten bis ein Byte angekommen ist
| 92 | rjmp receive_loop
| 93 | in r16, UDR
| 94 | cbi portd, cs
| 95 | ldi r16, 2
| 96 | rcall send
| 97 | ldi r16, 0
| 98 | rcall send
| 99 | ldi r16, 0x08
| 100 | rcall send
| 101 | ldi r16, 0x20
| 102 | rcall send
| 103 | sbi portd, cs
| 104 | w1:sbis pind, dreq
| 105 | rjmp w1
| 106 | cbi portd, cs
| 107 | ldi r16, 2
| 108 | rcall send
| 109 | ldi r16, 0x03
| 110 | rcall send
| 111 | ldi r16, high(0x9800)
| 112 | rcall send
| 113 | ldi r16, low(0x9800)
| 114 | rcall send
| 115 |
| 116 |
| 117 | sbi portd, cs
| 118 | ldi r28, 100
| 119 | qqq:nop
| 120 | nop
| 121 | nop
| 122 | nop
| 123 | nop
| 124 | nop
| 125 | nop
| 126 | nop
| 127 | nop
| 128 | nop
| 129 | dec r28
| 130 | brne qqq
| 131 |
| 132 | /*cbi portd, cs
| 133 | ldi r16, 2
| 134 | rcall send
| 135 | ldi r16, 0xb
| 136 | rcall send
| 137 | ldi r16, 120
| 138 | rcall send
| 139 | ldi r16, 120
| 140 | rcall send
| 141 | sbi portd, cs*/
| 142 | rcall w
| 143 | cbi portd, dcs
| 144 | ldi r16, 0x53
| 145 | rcall send
| 146 | ldi r16, 0xEF
| 147 | rcall send
| 148 | ldi r16, 0x6E
| 149 | rcall send
| 150 |
| 151 | ldi r16, 0x7D
| 152 | rcall send
| 153 | ldi r16, 0x0
| 154 | rcall send
| 155 | ldi r16, 0x0
| 156 | rcall send
| 157 | ldi r16, 0x0
| 158 | rcall send
| 159 | ldi r16, 0x0
| 160 | rcall send
| 161 |
| 162 | sbi portd, dcs
| 163 |
| 164 |
| 165 | l: rjmp l
| 166 |
| 167 | w:
| 168 | ; =============================
| 169 | ; delay loop generator
| 170 | ; 13270800 cycles:
| 171 | ; -----------------------------
| 172 | ; delaying 13270797 cycles:
| 173 | ldi R17, $AB
| 174 | WGLOOP0: ldi R18, $74
| 175 | WGLOOP1: ldi R19, $DE
| 176 | WGLOOP2: dec R19
| 177 | brne WGLOOP2
| 178 | dec R18
| 179 | brne WGLOOP1
| 180 | dec R17
| 181 | brne WGLOOP0
| 182 | ; -----------------------------
| 183 | ; delaying 3 cycles:
| 184 | ldi R17, $01
| 185 | WGLOOP3: dec R17
| 186 | brne WGLOOP3
| 187 | ; =============================
| 188 | ret
| 189 |
| 190 |
| 191 |
| 192 |
| 193 | serout:
| 194 | sbis UCSRA,UDRE ; Warten bis UDR für das nächste
| 195 | ; Byte bereit ist
| 196 | rjmp serout
| 197 | out UDR, r16
| 198 | ret
| 199 | send:
| 200 | out spdr, r16
| 201 | ss:sbis spsr, spif
| 202 | rjmp ss
| 203 | in r16, spdr
| 204 | ret
|
|