ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
7 июля
214631 Топик полностью
mazur (07.10.2010 14:47, просмотров: 161) ответил Vladimir Ljaschko на Ну, формально решетка - признак сишного препроцессора. Вижу, вижу, в умелых руках пятница - это маленькая суббота ассемблер - это маленький ЯВУ :)
Такую реализацию я нигде не видел. Идею взял из примера управления шаговым двигателем. Плюсы, абсолютно не парюсь. Самый большой плюс плату теперь как угодно/удобно можно разводить. Только в определениях поставил нужные биты. Плюс совет Mbedder-а. .EQU _OE = PB0 ; PB2 .EQU Latch = PB1 ; PB3 .EQU Send_Led_Ind_SPI_State = 0 .EQU Send_Led_Char_SPI_State = 1 .EQU Send_Bytes_SPI_Complete_State = 2 .EQU A = 1 << 5 .EQU B = 1 << 6 ; A .EQU C = 1 << 2 ; F B .EQU D = 1 << 1 ; G .EQU E = 1 << 0 ; E C .EQU F = 1 << 4 ; D .EQU G = 1 << 3 .EQU H = 1 << 7 .EQU Zero = A+B+C+D+E+F .EQU One = B+C .EQU Two = A+B+D+E+G .EQU Three = A+B+C+D+G .EQU Four = B+C+F+G .EQU Five = A+C+D+F+G .EQU Six = A+C+D+E+F+G .EQU Seven = A+B+C .EQU Eight = A+B+C+D+E+F+G .EQU Nine = A+B+C+D+F+G Handler_7_Segm_Led_Ind: sbi PORTB,_OE LDIWZ Table_Handler_7_Segm_Led_Ind shiftlw Z lds r16,Next_Addr_Leds_Ind ldi r17,2 mul r16,r17 addw Z,r0,r1 lpm r16,Z+ sts Led_Ind_BUF,r16 lpm r16,Z andi r16,0x0F sts Next_Addr_Leds_Ind,r16 LDIWX DISPLAY_BUF lpm r16,Z swap r16 andi r16,0x0F addw X,r16,RClr ld r16,X LDIWZ Table_7_Segm_Led_Char shiftlw Z addw Z,r16,RClr lpm r16,Z sts Led_Char_Buf,r16 Set_Timer_Queue T_Handler_7_Segm_Led_Ind,1 Set_Task_Queue T_Send_Data_SPI_To_Shift_Reg Handler_7_Segm_Leds_Ind_End: ret Send_Data_SPI_To_Shift_Reg: lds r16,Send_Data_SPI_To_Shift_Reg_State CASE_EQUAL Send_Led_Ind_SPI_State,Send_Led_Ind_SPI CASE_EQUAL Send_Led_Char_SPI_State,Send_Led_Char_SPI CASE_EQUAL Send_Bytes_SPI_Complete_State,Send_Bytes_SPI_Complete Send_Data_SPI_To_Shift_Reg_End: ret Send_Led_Ind_SPI: ldi r16,Send_Led_Char_SPI_State sts Send_Data_SPI_To_Shift_Reg_State,r16 in r16,SPCR sbr r16,1<<SPIE out SPCR,r16 lds r16,Led_Ind_BUF out SPDR,r16 ret Send_Led_Char_SPI: ldi r16,Send_Bytes_SPI_Complete_State sts Send_Data_SPI_To_Shift_Reg_State,r16 lds r16,Led_Char_Buf out SPDR,r16 ret Send_Bytes_SPI_Complete: in r16,SPCR cbr r16,1<<SPIE out SPCR,r16 cbi PORTB,LATCH nop nop nop sbi PORTB,LATCH ldi r16,Send_Led_Ind_SPI_State sts Send_Data_SPI_To_Shift_Reg_State,r16 cbi PORTB,_OE ret Table_Handler_7_Segm_Led_Ind: .DB 0b00000001, 0x01 .DB 0b00000010, 0x12 .DB 0b00000100, 0x23 .DB 0b00001000, 0x34 .DB 0b00010000, 0x45 .DB 0b00100000, 0x50 Table_7_Segm_Led_Char: .DB Zero, One .DB Two, Three .DB Four, Five .DB Six, Seven .DB Eight, Nine К чему все это написано? Я вас не спрашивал как мне это написать. Кроме примера Mbedder-а. Другие вещи тоже по своему пишу. А не слепо-тупо копирую. Я задаю вопросы только там где не знаю или не могу на данный момент понять. Свой пример не жалко. Вы тоже мне неплохо помогли.