Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Добавлено: Вт май 07, 2013 09:19:41
lucker21
*поправка задачи требуеться чтобы цифры бежали с 1 по f .подскажите как влючить в программу эти 2 таймера. попробовал но чёт не работает (
Спойлер
.include "tn2313def.inc"
.def Temp1=R16
.def Temp2=R17
.def Temp3=R18
.def Temp4=R19
.def Temp=R20
.dseg
timer1: .byte 1 ; 1 ячейку под переменную timer1
timer2: .byte 1
Digit: .byte 4
.cseg
.org 0
rjmp init
.org OVF0addr
rjmp T0_OVF
init:
ldi R16,low(RamEnd)
out spl,R16
; настройка портов
ldi R16,0b11111111
out ddrb,R16
ldi R16,0b00001111
out ddrd,R16
; настройка таймера счетчика T0
cli
ldi temp, (1<<cs00)|(1<<cs02)
out TCCR0B, temp3
ldi temp, 24
out TCNT0, temp3
ldi temp, 1<<TOIE0
out TIMSK, temp3
sei
main:
RJMP main
T0_OVF:
in temp3, SREG
push temp3
lds temp3, timer1
dec temp3
ldi temp3,248
brne t1
t1:
sts timer1, temp3
lds temp3, timer2
dec temp3
ldi temp3,128
brne t2
t2:
sts timer2, temp3
pop temp3
out SREG, temp3
reti
ldi Temp,1
sts Digit ,Temp ;загрузка начальных значений
ldi Temp,2
sts Digit+1,Temp
ldi Temp,3
sts Digit+2,Temp
ldi Temp,4
sts Digit+3,Temp
ldi Temp,5
sts Digit+4 ,Temp ;загрузка начальных значений
ldi Temp,6
sts Digit+5,Temp
ldi Temp,7
sts Digit+6,Temp
ldi Temp,8
sts Digit+7,Temp
ldi Temp,9
sts Digit+8,Temp ;загрузка начальных значений
ldi Temp,0
sts Digit+9,Temp
ldi Temp,10
sts Digit+10,Temp
ldi Temp,11
sts Digit+11,Temp
ldi Temp,12
sts Digit+12,Temp ;загрузка начальных значений
ldi Temp,13
sts Digit+13,Temp
ldi Temp,14
sts Digit+14,Temp
ldi Temp,15
sts Digit+15,Temp
Display:
;последовательный вывод на индикацию содержимого
;переменной Digit
;111111111111111111111111111111111111111111111111111111111111111111111111111111111
lds Temp1,Digit ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем
lds Temp1,Digit+1 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;2222222222222222222222222222222222222222222222222222222222222222222222222222222
lds Temp1,Digit+1 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем
ldi Temp3,TCNT0
sts timer2,Temp3
;333333333333333333333333333333333333333333333333333333333333333333333333333333
lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;44444444444444444444444444444444444444444444444444444444444444444444444444444444444
lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем
lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;5555555555555555555555555555555555555555555555555555555555555555555555555555555555555
lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем
lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;66666666666666666666666666666666666666666666666666666666666666666666666666666666666666
lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем
ldi Temp3,TCNT0
sts timer2,Temp3
;777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем
lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем
lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем
lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;1010101010101010101101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000
lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+14
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
;1313111111111113333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+14
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
lds Temp1,Digit+15
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
ret
Decoder:
;преобразование двоичного числа
;в код 7-сегментного индикатора
ldi ZL,Low(DcMatrix*2) ;инициализация массива
ldi ZH,High(DcMatrix*2)
ldi Temp2,0 ;прибавление переменной
add ZL,Temp1 ;к 0-му адресу массива
adc ZH,Temp2
lpm ;загрузка значения
mov Temp1,r0
ret
DcMatrix:
;массив - таблица истинности декодера
; hgfedcba hgfedcba
.db 0b11000000,0b11111001 ;0,1
.db 0b10100100,0b10110000 ;2,3
.db 0b10011001,0b10010010 ;4,5
.db 0b10000010,0b11111000 ;6,7
.db 0b10000000,0b10010000 ;8,9
.db 0b10001000,0b10000011
.db 0b11000110,0b10100001
.db 0b10000110,0b10001110