Cleanup, reorganization

This commit is contained in:
2014-12-23 01:12:21 +01:00
parent e78d91a900
commit dbdcefea38
223 changed files with 1260 additions and 660 deletions
@@ -0,0 +1,89 @@
.device attiny13
.def cnt=r22
.def i=r18
.def j=r19
.def pom=r16
.def dat=r20
.equ clks=200 ;100 kloknuti (36kHz) na 1 bit (200 preklopeni)
.equ clksh=100
.org 0x0000 ;RESET
rjmp RESET ;skok na start po resetu
.org 0x0010
RESET:
ldi r16,low(RAMEND) ;nastavi stack pointer
out SPL,r16
cli ;zakazeme preruseni
ldi r16,0b00011110 ;smer portu
out DDRB,r16
clr pom
clr i
clr j
clr cnt
sei ;povolime preruseni
NIC: clr i
clr dat
W0: in pom,PINB ;1 [10+56 =66 cyklu *clksh celkani]
sbrc pom,0 ;2 /
rjmp NIC ;(1)
rcall sclk ;3
inc i ;1
cpi i,clksh ;1
brne W0 ;2 10 kloku + 56 kloku z sclk = 66 kloku
;bylo 100 kloku 0
ldi j,8 ;1 -> bude se cist osm bitu
BREAD: dec j ;1
breq ENDB ;1
clr i ;1
W1: nop ;1 -> cekaci smycka 1klok
nop ;1
nop ;1
rcall sclk ;3
inc i ;1
cpi i,clks ;1
brne W1 ;2
in pom,PINB ;1 zanedbatelne zpozdeni - netreba zohlednovat
sbrs pom,0 ;2 (1) precte se PINB0 a invertovany se zapise do bufferu
sbr dat,0 ;(+1)
lsl dat ;1
rjmp BREAD ;2
ENDB:
;skoncil byte, ted bude stopbit - netreba cist
cpi dat,0b00111100
breq toogle
clr dat
clr cnt
clr i
clr j
rjmp NIC
toogle: sbi PORTB,1
;sbi pinb,1
rjmp NIC
sclk: ;presne nastavena doba jednoho kloku - 200 kloku == 1bit
ldi r16,6 ;1
cB:
nop ; [48
nop ; -
nop ; -
nop ; -
nop ; -
dec r16 ; -
brne cB ; -
nop ; ]
nop ;3
nop ;
nop ;
ret ;4 celkem: 56
@@ -0,0 +1,66 @@
;tohle ceka az bude na PB0 dlouho jednicka a pak invertuje PB1 a ceka na nulu na PB0
.device attiny13
.def cnt=r19
.org 0x0000 ;RESET
rjmp RESET ;skok na start po resetu
.org 0x0010
RESET:
ldi r16,low(RAMEND) ;nastavi stack pointer
out SPL,r16
cli ;zakazat vsechna preruseni
ldi r16,0b00011110 ;smer portu
out DDRB,r16
ldi r16,0
out PORTB,r16
clr r16
clr r17
clr r18
clr cnt
sei ;Global Interrupt Enable
LOOP: ;cekam na 0
in r16,PINB
sbrs r16,0
rjmp pinset
rjmp LOOP
pinset: ;cekej, az bude hodne cyklu po sobe 0 na PB0
clr cnt
pinset2:
clr r20
pinset2b:
clr r21
pinset2c:
in r16,PINB
sbrc r16,0
rjmp loop
inc r21
cpi r21,2
brne pinset2c
inc r20
cpi r20,255
brne pinset2b
inc cnt
cpi cnt,255
brne pinset2
sbi PINB,1 ;invertuj to co je na PB1
odrus0: ;cekam na 1
in r16,PINB
sbrc r16,0
rjmp w2
rjmp odrus0
w2: ;cekani pro odruseni zakmitu
inc cnt
cpi cnt,255
brne w2
rjmp LOOP ;skok na loop
@@ -0,0 +1,63 @@
;tohle ceka az bude na PB0 dlouho jednicka a pak invertuje PB1 a ceka na nulu na PB0
.device attiny13
.def cnt=r19
.org 0x0000 ;RESET
rjmp RESET ;skok na start po resetu
.org 0x0010
RESET:
ldi r16,low(RAMEND) ;nastavi stack pointer
out SPL,r16
cli ;zakazat vsechna preruseni
ldi r16,0b00011110 ;smer portu
out DDRB,r16
ldi r16,0
out PORTB,r16
clr r16
clr r17
clr r18
clr cnt
sei ;Global Interrupt Enable
LOOP: ;cekam na nulu
in r16,PINB
sbrs r16,0
rjmp pinset
rjmp LOOP
pinset: ;cekej, az bude hodne cyklu po sobe 0 na PB0
clr cnt
pinset2:
clr r20
pinset2b:
inc r20
in r16,PINB
sbrc r16,0
rjmp loop
cpi r20,255
brne pinset2b
inc cnt
cpi cnt,255
brne pinset2
sbi PORTB,1 ;zapni pb1
odrus0: ;cekam na 1
in r16,PINB
sbrc r16,0
rjmp w2
rjmp odrus0
w2: ;cekani pro odruseni zakmitu
inc cnt
cpi cnt,255
brne w2
cbi PORTB,1
rjmp LOOP ;skok na loop
@@ -0,0 +1,252 @@
.device attiny13
.def a=r16
.def b=r17
.def i=r18
.def j=r19
.def k=r20
.def secs=r21
.DEF mins=r22
;běží na 4.8MHz
.MACRO cvrk1
sbi portb,3
.ENDMACRO
.MACRO cvrk0
cbi portb,3
.ENDMACRO
.MACRO osc1
in a, TIMSK0
ORI a, 0b00000100
out timsk0,a
.ENDMACRO
.MACRO osc0
clr a
out timsk0,a
.ENDMACRO
.org 0x0000 ;RESET
rjmp RESET ;skok na start po resetu
.org 0x0006 ;TC0 overflow
RJMP TIMER
.org 0x0010
RESET:
ldi a,low(RAMEND) ;nastavi stack pointer
out SPL,a
cli ;zakazat vsechna preruseni
ldi a,0b00001000 ;smer portu
out DDRB,a
ldi a,0 ;vymazat port
out PORTB,a
clr a
clr b
clr i
clr j
clr k
clr secs
clr mins
ldi r16,0b00000011 ;TC0 prescaler na 64
out TCCR0B,r16 ;4800000/64=75000Hz
ldi r16,0b00000010 ;TC0 je v rezimu CTC
out TCCR0A,r16
ldi r16,75 ;Compare Match 0 A je 75
out OCR0A,r16 ;75000/75=1000Hz interrupt
osc0 ;zakazeme interrupt
in a,MCUCR ;zapne se vnitrni pullup
ori a,0b01000000
out MCUCR,a
sei ;Global Interrupt Enable
in a,PINB
andi a,0b00000111
;volba programu podle nastaveni prepinacu
cpi a,0
breq prog0
cpi a,1
breq prog1
cpi a,2
breq prog2
cpi a,3
breq prog3
cpi a,4
breq prog4
cpi a,5
breq prog5
cpi a,6
breq prog6
rjmp prog7
prog0: ;5 min, (3 cvrky / 1 min pauza) x5, sleep
ldi mins,5 ;pauza úvod
rcall minuty
ldi k,5 ;počet opakování
pd00:
rcall scvrk
rcall scvrk
rcall scvrk
ldi mins,1 ;minuty pauza
rcall minuty
dec k
brne pd00
rjmp usni
prog1: ;2 min, (2 cvrk / 2 min pauza) x5, sleep
ldi mins,2 ;pauza úvod
rcall minuty
ldi k,6 ;počet opakování
pd01:
rcall scvrk
rcall scvrk
ldi mins,2 ;minuty pauza
rcall minuty
dec k
brne pd01
rjmp usni
prog2: ;40 min, (2 cvrky / 20 sec pauza) x13, sleep
ldi mins,40 ;pauza úvod
rcall minuty
ldi k,13 ;počet opakování
pd02:
rcall scvrk
rcall scvrk
ldi secs,20 ;sekundy pauza
rcall sekundy
dec k
brne pd02
rjmp usni
prog3: ;5 min, (2 cvrk / 5 min pauza) x8, sleep
ldi mins,5 ;pauza úvod
rcall minuty
ldi k,9 ;počet opakování
pd03:
rcall scvrk
rcall scvrk
rcall scvrk
rcall scvrk
ldi mins,5 ;minuty pauza
rcall minuty
dec k
brne pd03
rjmp usni
prog4: ;10 min, (4 cvrk / 10 min pauza) x5, sleep
ldi mins,10 ;pauza úvod
rcall minuty
ldi k,5 ;počet opakování
pd04:
rcall scvrk
rcall scvrk
rcall scvrk
rcall scvrk
ldi mins,10 ;minuty pauza
rcall minuty
dec k
brne pd04
rjmp usni
prog5: ;20 min, (4 cvrk / 10 min pauza) x1, sleep
ldi mins,20 ;pauza úvod
rcall minuty
rcall scvrk
rcall scvrk
rcall scvrk
rcall scvrk
rjmp usni
prog6: ;0, (2 cvrk / 10s) x inf
rcall scvrk
rcall scvrk
ldi secs,10 ;minuty pauza
rcall sekundy
rjmp prog6
prog7: ;trvale
cvrk1
infloop:
rjmp infloop
usni:
in a,MCUCR
ori a,0b00110000
andi a,0b01110111
out MCUCR,a
sleep
rjmp usni ;kdyby se probudil tak zase usne
TIMER: ;pracuje se s prerusenim 1000x za sekundu
inc i
cpi i,100
brne endcas
clr i
inc j
endcas:
reti
scvrk:
clr i
clr j
cvrk1
osc1
del01: cpi j,20 ;konstanta pro dobu jednoho cvrku v desetinach sekundy
brne del01
osc0
cvrk0
ret
sekundy:
clr i
clr j
osc1
del02: cpi j,10 ;konstanta pro dobu 1 sekundy
brne del02
dec secs
breq endsecs
clr i
clr j
rjmp del02
endsecs:
osc0
ret
minuty:
ldi secs,60 ;minuta ma 60 sekund -> secs=60
rcall sekundy ;a vykoname cekani secs sekund
dec mins
breq endmins
rjmp minuty
endmins:
ret
@@ -0,0 +1,124 @@
.device attiny13
.def cnt=r19
.equ clks=200 ;100 kloknuti (36kHz) na 1 bit (200 preklopeni)
.org 0x0000 ;RESET
rjmp RESET ;skok na start po resetu
.org 0x0010
RESET:
ldi r16,low(RAMEND) ;nastavi stack pointer
out SPL,r16
cli ;zakazat vsechna preruseni
ldi r16,0b00011110 ;smer portu
out DDRB,r16
ldi r16,0 ;vypnout PullUp
out PORTB,r16
clr r16
clr r17
clr r18
clr cnt
sei ;Global Interrupt Enable
LOOP:
in r16,PINB
sbrc r16,0
rjmp pinset
rjmp LOOP
pinset: ;cekej, az bude 200 cyklu po sobe 1 na PB0
clr cnt
pinset2:
in r16,PINB
sbrs r16,0
rjmp loop
inc cnt
cpi cnt,200
brne pinset2
rcall blik
rcall nblik
rcall nblik
rcall blik
rcall blik
rcall blik
rcall blik
rcall nblik
rcall nblik
rcall blik
rcall nblik
rcall nblik
rcall nblik
rcall nblik
rcall nblik
rcall nblik
rcall nblik
rcall nblik
rcall nblik
pinset0: ;cekej, az bude 200 cyklu po sobe 0 na PB0
;clr cnt
pinset3:
;in r16,PINB
;sbrc r16,0
;rjmp pinset0
;inc cnt
;cpi cnt,200
;brne pinset3
rjmp LOOP ;skok na loop
blik:
ldi r17,clks
A:
ldi r16,7 ;1
B:
nop ;1
nop ;1
nop ;1
nop ;1
nop ;1
dec r16 ;1
brne B ;2 (1 +
nop ;1)
sbi PINB,1 ;2 -> toogle portb1
nop ;1
nop ;1
dec r17 ;1
breq endblik ;1 (2 -> preruseno, nedulezite)
rjmp A ;2
endblik:
cbi PORTB,1 ;2
ret ;4
nblik:
ldi r17,clks
nA:
ldi r16,7 ;1
nB:
nop ;1
nop ;1
nop ;1
nop ;1
nop ;1
dec r16 ;1
brne nB ;2 (1 +
nop ;1)
nop ;1
nop ;1
nop ;1
nop ;1
dec r17 ;1
breq endnblik ;1 (2 -> preruseno, nedulezite)
rjmp nA ;2
endnblik:
cbi PORTB,1 ;2
ret ;4
@@ -0,0 +1,70 @@
.device attiny13
.def cnt=r19
.org 0x0000 ;RESET
rjmp RESET ;skok na start po resetu
.org 0x0010
RESET:
ldi r16,low(RAMEND) ;nastavi stack pointer
out SPL,r16
cli ;zakazat vsechna preruseni
ldi r16,0b00011110 ;smer portu
out DDRB,r16
ldi r16,0 ;vypnout PullUp
out PORTB,r16
clr r16
clr r17
clr r18
clr cnt
sei ;Global Interrupt Enable
LOOP:
in r16,PINB
sbrc r16,0
rjmp pinset
rjmp LOOP
pinset: ;cekej, az bude 100 cyklu po sobe 1 na PB0
clr cnt
pinset2:
in r16,PINB
sbrs r16,0
rjmp loop
inc cnt
cpi cnt,200
brne pinset2
rcall blik
w2: ;cekani pro odruseni zakmitu - 40 cyklu
inc cnt
cpi cnt,200
brne w2
rjmp LOOP ;skok na loop
blik:
A:
ldi r16,7 ;1
B:
nop ;1
nop ;1
nop ;1
nop ;1
nop ;1
dec r16 ;1
brne B ;2 (1 +
nop ;1)
sbi PINB,1 ;2 -> toogle portb1
nop ;1
nop ;1
in r17,pinb ;1
sbrc r17,0 ;1 (2 -> preruseno, nedulezite)
rjmp A ;2
cbi PORTB,1 ;2
ret ;4