[code];AVCC propojit s VCC
;portb = data dispalye
;portd = ovládání dispu
;vstup akcelerometr ADC0(PC0)
;vstup vypínač diplaye pc5 připojit na gnd
.include "m8def.inc"
.def ceka=r22
.def cekb=r23
.def inkrement=r24
.def w=r16
.def min=r20
.def max=r21
.def tmp=r17
.equ DD=portb ;D0-7 na display
.equ vyp=portc,5
.equ RS=portd,0
.equ RW=portd,1
.equ EN=portd,2
rjmp main
main: LDI W,$FF ;jedničky do W
out DDRB,w ;učinit portb výstupním (dispdata)
out DDRD,w ;učinit portD výstupním (ovládání dispu)
LDI W,$00
out DDRC,w Port C vstupní
LDI w,$80
out min,w ;nastavit počíteční honodty min
out max,w ;nastavit počíteční honodty max
LDI W,LOW(ramend) ;natáhnout konec ram
out SPL,W ;vložit adresu do stackpointeru
LDI W,HIGH(ramend)
out SPH,W
LDI inkrement,$01
;–init ADC
ldi w,$20
out ADCMUX,w ;reference připojena na AVCC 01 vysledek zarovnán do leva 1 vybrat kanál převodníku ADC0 0000 čili 01100000
ldi w,0b01100000 ;11100100 povolit|začít|freerunning mode|?|zakázat přerušení|dělička 16 62,5kHz čili e4
out ADCSRA,w
mereni: SBIS vyp ;přeskočí řádek není li sepnutý vypínač
rjmp display ;sepnutý vypínač - zobrazíme
SBIS ADCSRA,4 ;přeskočí další řádek jeli změřeno
rjmp mereni ;neni zmereno - cyklíme dál.
in w,ADCH ;načíst honotu napětí
mov tmp,w
sub w,max ;napětí - max
brpl Uprmax ;kladný výsledek - upravit max
mov w,tmp
sub w,min ;napětí - min
brmi Uprmin ;výsledek je záporný - uprav min
rjmp mereni ;návrat zpátky
Uprmax: mov max,tmp
rjmp mereni ;návrat zpátky
Uprmin: mov min,tmp
rjmp mereni ;návrat zpátky
;–Zobrazení-------------
display: SBI EN ;Nastav enable bit na jedna
CBI RW
CBI RS
LDI w,0b00111000
;počkat >40ms
RCALL cekej ;No tak počkáme 1/4s
OUT DD,w
CBI EN ;první init
SBI EN
;-----------------------------
LDI w,0b00001110
;počkat >4,1ms
RCALL cekej ;No tak počkáme 1/4s
OUT DD,w
CBI EN ;zapnutí nastavení kurzoru
SBI EN
LDI w,0b00000110
OUT DD,w
CBI EN ;init zápisu
;-----------------------------
SBI EN
;počkat >100us
RCALL cekej ;No tak počkáme 1/4s
SBI RS
;Tady budem psat znaky
;-----------------------------
LDI inkrement $02 ;urychlíme kapátko čekání
mov tmp,max
LDI ceka,$07
vypis1: SBRC tmp,7 ;pokud není nula >
LDI w,0b00110001 ;vypsat jedničku
SBRS tmp,7 ;pokud není jedna >
LDI w,0b00110000 ;vypsat nulu
LSL tmp
out DD,w
CBI EN ;zapsáno
DEC ceka
RCALL cekej ;počkat
BRPL vypis1
mov tmp,min
LDI ceka,$07
vypis2: SBRC tmp,7 ;pokud není nula >
LDI w,0b00110001 ;vypsat jedničku
SBRS tmp,7 ;pokud není jedna >
LDI w,0b00110000 ;vypsat nulu
LSL tmp
out DD,w
CBI EN ;zapsáno
DEC ceka
RCALL cekej ;počkat
BRPL vypis2
LDI inkrement $01
brzda: sbis vyp ;přeskočí řádek není li sepnutý vypínač vyp=1
rjmp brzda ;zacyklit dokavaď není vypínač rozepnut
rjmp mereni ;začít měřit
;======== čekací smyčka cca čtvrt sekundy při 1MHZ a inkrementu 1========
cekej: CLR ceka
CLR cekb ;nastavit na nulu
wait: add cekb,inkrement ;přičteme 1
nop
nop
nop
brcc wait ;skočí je li carry v nule
add ceka,inkrement ;jedničku k béčku
brcc wait
ret ;návrat z podprogramu
;======== [/code]
No jestli toť toto pojede tak se asi ožeru…
už zbývá jenom poladit pojmenování pinů portu a zitra koupit konektor na display…
.equ vyp=portc,5
.equ RS=portd,0
.equ RW=portd,1
.equ EN=portd,2