summaryrefslogtreecommitdiff
path: root/Binaeruhr.asm
blob: 8d1addd97675eeba9c1b41de2f8b7e20d0b71329 (plain)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 * Fernbedienung.asm
 *
 *  Created: 08.10.2015 14:35:11
 *   Author: Erich
 */ 

.INCLUDE "tn2313def.inc"

.EQU Spalte, 31
.EQU TicsH, 30
.EQU TicsL, 29
.EQU nTicsL, 28
.EQU Stunde, 0
.EQU Minute, 1
.EQU Sekunde, 2

 	rjmp	RESET
	reti
	reti
	reti
	rjmp TIMER1COMPA        ; Timer1 Compare Match A
	reti
	reti
	reti
	reti
  reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti

 RESET:
	ldi r16,lo8(RAMEND)				; Stackpointer initialisieren
	out SPL,r16

	ldi r16,0x80
	out CLKPR,r16
	ldi r16,0x00
	out CLKPR,r16					; System-Vorteiler auf 1

	ldi r16,0x00
	out WDTCSR,r16				; Watchdog aus

  ldi r17,0xd0
  ldi r16,0x55
  out OCR1AH,r17
  out OCR1AL,r16        ; TimerB bis 0xd055 laufen lassen (= 300 Hz)
  ldi r16,0x09
  out TCCR1B,r16        ; no prescaler
  ldi r16,0x40
  out TIMSK,r16         ; Counter1 Output Compare A Match Interrupt Enable

	ldi r16,0x55
	out PORTB,r16					; Muster auf PORTB (Zeilen)
	ldi r16,0x0c
	out PORTD,r16					; 2x n.d., 2x Pull-up (Taster), Muster auf Spalten
	ldi r16,0xff
	out DDRB,r16					; Ausgänge: PORTB (Zeilen)
	ldi r16,0x70
	out DDRD,r16					; Ausgänge: PORTD4..6 (Spalten)

  ldi Spalte,1
  ldi r16,0x12
  mov Stunde,r16
  ldi r16,0x34
  mov Minute,r16
  ldi r16,0x56
  mov Sekunde,r16

  ldi nTicsL,100

  sei

main_loop:
  cp nTicsL,TicsL
  brcc main_loop
  mov r16,nTicsL
  subi r16,0x80
  mov r17,TicsL
  subi r17,0x80
  cp r16,r17
  brcc main_loop

neue_Sekunde:

  ldi r16,100
  add nTicsL,r16

  sbis PIND,2
  rjmp neue_Stunde
  sbis PIND,3
  rjmp neue_Minute

  inc Sekunde
  mov r16,Sekunde
  cpi r16,60
  brcs main_loop

neue_Minute:

  clr Sekunde
  inc Minute
  mov r16,Minute
  cpi r16,60
  brcs main_loop

neue_Stunde:

  clr Sekunde
  clr Minute
  inc Stunde
  mov r16,Stunde
  cpi r16,24
  brcs main_loop

  clr Stunde
  
  rjmp main_loop

TIMER1COMPA:
	push r16
	in r16,SREG
	push r16
	push r17
  ldi r17,0x07
  out PORTD,r17

  inc Spalte
  cpi Spalte,2
  brne nicht_Stunde_Anzeigen
  ldi r17,0x60
  mov r16,Stunde
  rjmp anzeigen
nicht_Stunde_Anzeigen:
  cpi Spalte,3
  brne nicht_Minute_Anzeigen
  ldi r17,0x50
  mov r16,Minute
  rjmp anzeigen
nicht_Minute_Anzeigen:
  ldi r17,0x30
  mov r16,Sekunde
  subi Spalte,3
  inc TicsL
  brne anzeigen
  inc TicsH
anzeigen:
  com r16
  ori r17,0x0c
  out PORTB,r16
  out PORTD,r17
	pop r17
	pop r16
	out SREG,r16
	pop r16
  reti