Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 28 мар 2024, 18:15

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: динамическая индикация
СообщениеДобавлено: 27 янв 2013, 01:04 
Не в сети

Зарегистрирован: 27 янв 2013, 00:59
Сообщения: 1
Вопрос такой к форумчанам:
на tiny2313 хочу выводить числа последовательно о 0 до 255, просто ради эксперимента:
вот текст программы на ассемблере:
.include "tn2313def.inc"


.def Temp1=R16
.def Temp2=R17
.def Temp3=R18
.def Temp4=R19
.def Temp=R20
.def fbin=R21
.def tBCDL=R21
.def tBCDM=R22
.def tBCDH=R23

.dseg

Digit: .byte 3

.cseg
.org 0

rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp TIM_CAPT1 ; Timer1 Capture Handler
rjmp TIM_COMP1 ; Timer1 Compare Handler
rjmp TIM_OVF1 ; Timer1 Overflow Handler
rjmp TIM_OVF0 ; Timer0 Overflow Handler
rjmp UART_RXC ; UART RX Complete Handler
rjmp UART_DRE ; UDR Empty Handler
rjmp UART_TXC ; UART TX Complete Handler
rjmp ANA_COMP ; Analog Comparator Handler



EXT_INT0 : ret
EXT_INT1 : ret
TIM_CAPT1 : ret
TIM_OVF0 : ret
TIM_OVF1 : rjmp main
UART_RXC : ret
UART_DRE : ret
UART_TXC : ret
ANA_COMP : ret
TIM_COMP1 : ret



reset: ldi Temp1,RamEnd ;èíèöèàëèçàöèÿ ñòåêà
out SPL,Temp1

;cli

ldi Temp,0b11111111 ;íàñòðîéêà ïîðòîâ
out ddrb,Temp

ldi Temp,0b00001111
out ddrd,Temp

;íàñòðîéêà òàéìåðà1
ldi temp, 0
out TCCR1A, temp
ldi temp, 0b00000100
out TCCR1B, temp ; âêë ïðåääåë /256
ldi temp, 0b10000000
out TIMSK, temp
sei
;ldi Temp,3
;sts Digit ,Temp ;çàãðóçêà íà÷àëüíûõ ñíà÷åíèé
;ldi Temp,7
;sts Digit+1,Temp
;ldi Temp,9
;sts Digit+2,Temp
clr fbin

;*********************************************************
;MAIN
main:
clr temp
out TCNT1H, temp
out TCNT1L, temp
inc fbin
rcall bin3bcd8

;*********************************************************

IndicCycle: rcall Display ;öèêë èíäèêàöèè
rjmp IndicCycle

;*********************************************************
Display:
;ïîñëåäîâàòåëüíûé âûâîä íà èíäèêàöèþ ñîäåðæèìîãî
;ïåðåìåííîé Digit

lds Temp1,Digit ;çàãðóæàåì 0-þ ÿ÷åéêó
ldi Temp,0b00001110 ;àêòèâèðóåì 0-é ðàçðÿä
;èíäèêàöèè
out PortD,Temp
rcall Decoder ;âûçûâàåì 7-ñåãì. äåêîäåð
out PortB,Temp1 ;âûâîäèì çíà÷åíèå â ïîðò
rcall Delay1 ;æäåì

lds Temp1,Digit+1 ;è .ò.ä
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
rcall Delay1

lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
rcall Delay1

;lds Temp1,Digit+3
;ldi Temp,0b00000111
;out PortD,Temp
;rcall Decoder
;out PortB,Temp1
;rcall Delay1

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 0b00111111,0b00000110 ;0,1
.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9

;*********************************************************
; ïîäïðîãðàììà ïåðåâîäà â äâîè÷íî äåñÿòè÷íûé êîä
bin3bcd8:
clr tBCDH ;clear result MSD
bBCD8_1:
subi fbin,10 ;input = input - 10
brcs bBCD8_2 ;abort if carry set
inc tBCDM ;inc MSD

rjmp bBCD8_1 ;loop again
bBCD8_2:subi fbin,-10 ;compensate extra subtraction

bBCD8_3:
subi tBCDM,10 ;input = input - 10
brcs bBCD8_4 ;abort if carry set
inc tBCDH ;inc MSD

rjmp bBCD8_3 ;loop again
bBCD8_4:subi tBCDM,-10 ;compensate extra subtraction

mov Temp,tBCDL
sts Digit ,Temp ;çàãðóçêà íà÷àëüíûõ ñíà÷åíèé
mov Temp,tBCDM
sts Digit+1,Temp
mov Temp,tBCDH
sts Digit+2,Temp

ret
;*********************************************************
Delay1:
;öèêë çàäåðæêè

push Temp1
push Temp2


ldi Temp1,0
ldi Temp2,25

d11: dec Temp1
brne d11
dec Temp2
brne d11

pop Temp2
pop Temp1

ret
соответственно увеличение числа происходит по переполнению таймера1, но вот загвоздка на индикаторах я вижу только 1,2 и все потом все останавливается?
кто поможет?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB