http://www.forum.getchip.net/ |
|
динамическая индикация http://www.forum.getchip.net/viewtopic.php?f=10&t=325 |
Страница 1 из 1 |
Автор: | Юрьев [ 27 янв 2013, 01:04 ] |
Заголовок сообщения: | динамическая индикация |
Вопрос такой к форумчанам: на 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 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |