Cleanup, reorganization
This commit is contained in:
@@ -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
|
||||
+66
@@ -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
|
||||
+63
@@ -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
|
||||
Reference in New Issue
Block a user