Другое: Программы
Описание
Характеристики учебной работы
Список файлов
- labs
- 01-first_final.txt 1,02 Kb
- 02-lab2_zadanie.txt 176 b
- 02-second_final.asm 1,57 Kb
- 03-task.txt 1,02 Kb
- 03third_final.asm 3,68 Kb
- 1zad.doc 33,5 Kb
- всякие проги
- 01-first_final.txt 1,02 Kb
- 02-lab2_zadanie.txt 176 b
- 1
- 4.asm 486 b
- lr1v2.txt 1,25 Kb
- Денис 2.txt 404 b
- Денис.txt 437 b
- лр1.2.txt 600 b
- лр1.txt 808 b
- atmega.doc 147,5 Kb
- eeprnew.asm 668 b
- interr2.asm 1,37 Kb
- lab3
- adctest.asm.txt 3,54 Kb
- final3lab.asm 2,76 Kb
- third.asm 1,68 Kb
- third1.asm 1,7 Kb
- third_8535.asm 1,71 Kb
- laba1
- LYMAR
- LDO1.aps 12,24 Kb
- LDO1.asm 1,42 Kb
- avrBuild.bat 380 b
- ldo1.hex 280 b
- ldo1.map 9,99 Kb
- ldo1.obj 506 b
- Rezviakov
- 1st programm.doc 33,5 Kb
- 1st programm1.doc 33,5 Kb
- Rezviakov.aps 2,24 Kb
- Rezviakov.asm 4,2 Kb
- rezviakov.hex 272 b
- rezviakov.map 9,72 Kb
- rezviakov.obj 522 b
- Rezvyakov
- REZV.aps 3,02 Kb
- REZV.asm 691 b
- avrBuild.bat 416 b
- my1.aps 2,15 Kb
- my1.asm 1,13 Kb
- my1_asm.aps 1,9 Kb
- rezv.hex 272 b
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8515def.inc "
.deftemp = R17
.deftemp1 = R16
.defcounter = R18
.def temp2 = R19
.def fff = R21
.defreg1 = R20
clrtemp; очистить рег. 17 (temp)
clrtemp1
;clrtemp1
clrcounter
ldi temp1,$ff; присвоить temp1 значение 0
serfff; установить в fff $FF
outddrb, fff
outportb,fff
outpind,fff
ldicounter,$ff
beg:
intemp,pind; установить в temp значение portd
cpsetemp,temp1; сравнить temp с temp1 и пропустить следующую строчку, если равно
lslfff; сдвинуть содержимое fff на ед. влево
cpsetemp,temp1;
movcounter,fff; скопировать в counter значение из fff
cpsetemp,temp1;
;comcounter; инверция значения counter
cpsetemp,temp1;
outportb,counter; вывести в pinb значение counter
end:
; ПРОВЕРКА ИЗМЕНЕНИЯ СОСТОЯНИЯ PORTA D
intemp2, pind; установить в temp2 значение portd
cpsetemp2, temp
rjmpbeg
rjmp end
Противосон:По прерыванию от Т\С1 по одной загораются лампочки. Если нажать на 1-ю кнопку до момента загорания 6-й лампочки, то все они гаснут, если нет, то все начинают мигать.
Вот смотрите... Есть датчик расхода воздуха. Его описание здесь - http://components.argussoft.ru/honey/des cript/AWM90000.pdf
Вот если бы Вы смогли изучить его и суметь организовать считывание данных. Через встроенное АЦП?
Почитайте описание. Потом можно обсудить тему...
---------------------------------------- --------
Посмотрел. Слабенький сигнал. Сложно Вам будет с ним. Пожалуй, стоит изменить задание, но что бы труды по написанию проги по общению со встроенным АЦП не пропали даром, давайте поступим так - подключим датчик температуры TMP36. Описание прилагаю.
Причем есть некая идея. Подумайте, вдруг удастся ее реализовать:
-при нажатиии на одну кнопку светодиоды просто отображают абсолютное значение кода, которое получается на выходе АЦП.
- при нажатии на другую - берется только температурный диапазон 15-35 градусов. Т.е. если температура в районе 15 градусов, то светодиоды не горят, если 35 - то горят все. Т.О. получим более точное отображение основного температурного диапазона.
Все это конечно очень примерно.
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8515def.inc "
.deftemp = R17
.deftemp1 = R16
.defcounter = R18
.def temp2 = R19
.def fff = R21
.defreg1 = R20
clrtemp; очистить рег. 17 (temp)
clrtemp1
;clrtemp1
clrcounter
ldi temp1,$ff; присвоить temp1 значение 0
serfff; установить в fff $FF
outddrb, fff
outportb,fff
outpind,fff
ldicounter,$ff
beg:
intemp,pind; установить в temp значение portd
cpsetemp,temp1; сравнить temp с temp1 и пропустить следующую строчку, если равно
lslfff; сдвинуть содержимое fff на ед. влево
cpsetemp,temp1;
movcounter,fff; скопировать в counter значение из fff
cpsetemp,temp1;
;comcounter; инверция значения counter
cpsetemp,temp1;
outportb,counter; вывести в pinb значение counter
end:
; ПРОВЕРКА ИЗМЕНЕНИЯ СОСТОЯНИЯ PORTA D
intemp2, pind; установить в temp2 значение portd
cpsetemp2, temp
rjmpbeg
rjmp end
Противосон:По прерыванию от Т\С1 по одной загораются лампочки. Если нажать на 1-ю кнопку до момента загорания 6-й лампочки, то все они гаснут, если нет, то все начинают мигать.
.include "m8515def.inc"
.deftemp=R16
.defN1=R17
.defN2=R18
.def N =R19
.def K=R20
.defK1=R21
.defK2=R22
.defM1=R23
.defM2=R24
.deff=R25
;macros zaderjki na ybivanie t
;********************************
.macro Z
ldiN1,5
m:
movN2,@0
m1:
nop
nop
nop
nop
decN2
brnem1
decN1
brnem
.endmacro
;********************************
;macros zaderjki na vozrastanie t
;********************************
.macro Z2
ldiM1,5
m:
movM2,@0
m1:
nop
nop
nop
nop
decM2
brnem1
decM1
brnem
.endmacro
;********************************
;macros zaderjki const
;********************************
.macro Z1
ldiK1,5
n:
ldiK2,5
n1:
nop
nop
nop
nop
decK2
brnen1
decK1
brnen
.endmacro
;********************************
;osnovnaya programma
ldi K, 255
ldi N, 17
ldi f, 0
end:
m4:
m2:
ser temp
out ddrb, temp
ldi temp, $FF
out portb,temp
Z k
ldi temp, $0
out portb, temp
Z1
subi K, 15
dec N
brne m2
ldi N, 17
m3:
ser temp
out ddrb, temp
ldi temp, $FF
out portb,temp
Z2 f
ldi temp, $0
out portb, temp
Z1
ori f, 15
dec N
brne m3
brne m4
rjmp end
.include "m8515def.inc"
.deftemp=R16
.defN1=R17
.defN2=R18
.def N =R19
.macro Z
ldi N1,3
m:
;*********
ldi N2, 3
m1:
nop
nop
nop
nop
decN2
brnem1
;*********
brnem
.endmacro
end:
m2:
ser temp
out ddrb, temp
ldi temp, $FF
out portb,temp
ldi temp, $0
out portb, temp
ldi N,3
inc N1
dec N
Z k
brne m2
rjmp end
.include "m8515def.inc"
.deftemp=R16
.defN1=R17
.defN2=R18
.def N =R19
.def K=R20
end:
ldi K, 5
.macro Z
ldiN1,5
m:
;*********
movN2,@0
m1:
nop
nop
nop
nop
decN2
brnem1
;*********
decN1
brnem
.endmacro
ldi N,7
m2:
ser temp
out ddrb, temp
ldi temp, $FF
out portb,temp
Z k
ldi temp, $0
out portb, temp
add K, K
dec N
brne m2
rjmp end
.include "m8515def.inc"
.deftemp=R16
.defN1=R17
.defN2=R18
.def N =R19
.def K=R20
.defK1=R21
.defK2=R22
.macro Z
ldiN1,5
m:
;*********
movN2,@0
m1:
nop
nop
nop
nop
decN2
brnem1
;*********
decN1
brnem
.endmacro
.macro Z1
ldiK1,5
n:
ldiK2,5
n1:
nop
nop
nop
nop
decK2
brnen1
decK1
brnen
.endmacro
ldi K, 3
ldi N, 5
end:
m2:
ser temp
out ddrb, temp
ldi temp, $FF
out portb,temp
Z k
ldi temp, $0
out portb, temp
Z1
add K, K
dec N
brne m2
rjmp end
.include "m8515def.inc"
.deftemp=R16
.defN1=R17
.defN2=R18
.def N =R19
.def K=R20
.defK1=R21
.defK2=R22
;macros zaderjki na vozrastanie t
;********************************
.macro Z
ldiN1,5
m:
movN2,@0
m1:
nop
nop
nop
nop
decN2
brnem1
decN1
brnem
.endmacro
;********************************
;macros zaderjki const
;********************************
.macro Z1
ldiK1,5
n:
ldiK2,5
n1:
nop
nop
nop
nop
decK2
brnen1
decK1
brnen
.endmacro
;********************************
;osnovnaya programma
ldi K, 5
ldi N,255
end:
m2:
ser temp
out ddrb, temp
ldi temp, $FF
out portb,temp
Z k
ldi temp, $0
out portb, temp
Z1
add K, K
subi N, 15
brne m2
rjmp end
;upper part
.include"m32def.inc"
.deftemp = R16
.defdatal = R17
.defdatah = R18
.defcntrl = R19
.defcount = R20
.defnum = R21
.defsrgtemp = R22
.deftmpmux = R23
;.defn1 = R22
;.defn2 = R23
;.defn3 = R24
;.defn4 = R25
;.defn5 = R26
;.defn6 = R27
;.defn7 = R28
;.defn8 = R29
;interruptions' part
rjmpRESET
.org$020
jmpADC_CMP;adc conversion completed
;rjmpMAIN
;.org$F1
;after reset
RESET:clrdatah;after reset data
clrdatal; is cleared
ldicntrl, 0b11100000;control register
clrcount;after reset no conversation's happened yet
ldinum, $04;number of adc's scans
lditemp, low(RAMEND);stack
outSPL, temp;ini-
lditemp, high(RAMEND);tiali-
outSPH, temp;zation
;bulbs - port B
sertemp;set port B
outDDRB, temp;for outputting
;buttons - port D
clrtemp;set port D
outDDRD, temp;for receiving
;adc - port A
;"wholesale" set adc0, left adjust
outADMUX, cntrl;and internal voltage reference
lditemp, 0b10001000;"wholesale" set 2x gain, adc interrupt enable,
outADCSR, temp;adif=0,one conversion,no start conversion,enable adc
;clrtemp;"wholesale" set free
;outSFIOR, temp;running mode
;start it!
sei;enable global interruptions
intemp, ADCSR;start
oritemp, 0b01000000;conver-
outADCSR, temp;sion
;main part - cycle waiting for external interruptions
MAIN:
intmpmux, PIND;check buttons
;cpitemp, $FF;check if no button is pushed
;breqMAIN;if no buttons were pushed - go on scanning
sbrstmpmux, 0
ldicntrl, 0b11100000;E0
sbrstmpmux, 1
ldicntrl, 0b11100001;E1
sbrstmpmux, 2
ldicntrl, 0b11100010;E2
sbrstmpmux, 3
ldicntrl, 0b11100011;E3
sbrstmpmux, 4
ldicntrl, 0b11100100;E4
sbrstmpmux, 5
ldicntrl, 0b11100101;E5
sbrstmpmux, 6
ldicntrl, 0b11100110;E6
sbrstmpmux, 7
ldicntrl, 0b11100111;E7
;-----------
;rjmp ADC_CMP
;-----------
;program's end of cycle
rjmpMAIN
;external interruption
ADC_CMP:
insrgtemp, SREG
intemp, ADCH;
adcdatal, temp;data<-data+ADCH
brccC1;check carry flag, go to C1 if no carry
incdatah;if c=1 datah++
C1:inccount;count++ (number of interruptions++)
cpcount, num;check if it was asked enough times
breqOVDATA;branch if Z=1, i. e. count=num
outADMUX, cntrl;if necessary - change channel
intemp, ADCSR;start
oritemp, 0b01000000;conver-
outADCSR, temp;sion
outSREG, srgtemp
;-----------
;rjmp MAIN
;-----------
reti;return from interruption
OVDATA:
; data/4:
lsrdatal
lsrdatal
lsrdatah
brccC2
oridatal, 0b01000000
C2:lsrdatah
brccC3
oridatal, 0b10000000
;end dividing, now datal = (U1+U2+U3+U4)/4
C3:comdatal;result->
outPORTB, datal;->port B
clrcount;count=0
outADMUX, cntrl;if necessary - change channel
clrdatal
clrdatah
intemp, ADCSR;start
oritemp, 0b01000000;conver-
outADCSR, temp;sion
outSREG, srgtemp
;-----------
;rjmp MAIN
;-----------
reti;return from interruption
Начать зарабатывать