Форум РадиоКот https://radiokot.ru/forum/ |
|
Переделка кода для Atmega 8515+ "LCD16s2d+avr (8bit)" https://radiokot.ru/forum/viewtopic.php?f=20&t=55165 |
Страница 1 из 1 |
Автор: | arm-17 [ Вс сен 25, 2011 15:02:01 ] |
Заголовок сообщения: | Переделка кода для Atmega 8515+ "LCD16s2d+avr (8bit)" |
Всем привет попробовал переделать код по статье "LCD16s2d+avr (4bit)" для Atmega 8515.Не работает не судите строго я только учусь ![]() ПОМОГИТЕ ПОЖАЛУЙСТА!!! Вот код: ;******************************************************************* ;******************************************************************** ; ---------- ;| Набор процедур для управления | ;| LCD16S2D ---------- ; ----------| By Pa5ha | ; ---------- .include file "C:\AVR\AvrAssembler2\Appnotes\m8515def.inc" .def Temp = R16 .def Temp1=R17 .def Temp2=R18 .def Temp3=R19 .def Temp4=R20 ;.equ RS = 5 ;.equ RW = 6 ;.equ E = 7 .equ SPEED = 14 ; 14 äëÿ XTAL=16MHz, 10 äëÿ XTAL=8MHz, ; 6 äëÿ XTAL=4MHz, 5 äëÿ XTAL<4MHz .cseg .org 0 ;********************************************************* rjmp Reset ;âåêòîðà ïðåðûâàíèé rjmp INT_0 rjmp INT_1 rjmp Timer1_capt1 rjmp Timer1_compA rjmp Timer1_compB rjmp Timer1_OVF1 rjmp Timer0_OVF0 rjmp SPI_STC rjmp USART_RX rjmp USART_UDRE rjmp USART_TX rjmp ANA_COMP rjmp INT_2 rjmp TIMER0_COMP rjmp EE_RDY rjmp SPM_RDY ;Reset: ;RESET INT_0: ;1 INT0 INT_1: ;2 INT1 Timer1_capt1:;3 Çàõâàò Ò/Ñ T1 ;Timer1_compA:;4 Ñîâïàäåíèå "A" Ò/Ñ T1 Timer1_compB:;5 Ñîâïàäåíèå "B" Ò/Ñ T1 Timer1_OVF1:;6 Ïåðåïîëíåíèå Ò/Ñ T1 Timer0_OVF0: ;7 Ïåðåïîëíåíèå Ò/Ñ T0 SPI_STC: ;8 Ïåðåäà÷à ïî SPI çàâåðøåíà USART_RX: ;9 USART, ïðè¸ì çàâåðø¸í USART_UDRE: ;10 Ðåãèñòð äàííûõ USART ïóñò USART_TX: ;11 USART, ïåðåäà÷àçàâåðøåíà ANA_COMP: ;12 Àíàëîãîâûé êîìïàðàòîð INT_2: ;13 INT2 TIMER0_COMP: ;14 Ñîâïàäåíèå Ò/Ñ T0 EE_RDY: ;15 EEPROM, ãîòîâî SPM_RDY: ;16 Ãîòîâíîñòü SPM reti ;**************************************************** ; ИНИЦИАЛИЗАЦИЯ ;**************************************************** Reset: ldi Temp,0b11111111 ; íàñòðîéêà ïîðòîâ ;ser temp out DDRA, temp out DDRD, temp ldi Temp,0 out PortD,Temp InitAvr: ;Initialize stack pointer ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ;********************* ;Ðàáîòà ñ LCD rcall Delay40mks ; Ïàóçà ïåðåä âêëþ÷åíèåì rcall Init_LCD16s2d ; Èíèöèàëèçàöèÿ äèñïëåÿ rcall Write_CGRAM ; Ñîçäàíèå ñîáñòâåííîãî ñèìâîëà ldi Temp,0b10000000 rcall WriteCmd ; Óñòàíîâêà êóðñîðà ldi ZL,Low(Text01*2) ldi ZH,High(Text01*2) rcall WriteLn ; Âûâîä ñòðîêè ldi Temp,0b11000001 rcall WriteCmd ; Óñòàíîâêà êóðñîðà ldi ZL,Low(Text02*2) ldi ZH,High(Text02*2) rcall WriteLn ; Âûâîä ñòðîêè ;********************* ldi Temp,0b01000000 ;ðàçðåøèòü ïðåðûâàíèÿ êîìïàðàòîðà out TIMSK,Temp ldi Temp,0b00000011 ;òàêòîâûé ñèãíàë = CK/64 out TCCR1B,Temp ldi Temp,0x4C ;èíèöèàëèçàöèÿ êîìïàðàòîðà out OCR1AH,Temp ldi Temp,0x4B out OCR1AL,Temp ldi Temp1,0b00000001 ;Èíèöèàëèçàöèÿ èíäèêàòîðà ldi Temp,0 ;îáíóëåíèå òàéìåðà out TCNT1H,Temp out TCNT1L,Temp sei ;ðàçðåøèòü ïðåðûâàíèÿ ;**************************************************** ; ОСНОВНОЙ ЦИКЛ ;**************************************************** Inf: rjmp Inf ;áåñêîíå÷íûé öèêë ;**************************************************** ; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА ;**************************************************** Timer1_compA: ldi Temp,0 ;îáíóëåíèå òàéìåðà out TCNT1H,Temp out TCNT1L,Temp Shift: cpi Temp1,0b10000000 ;ñðàâíèòü ñ êðàéíèì çíà÷. breq Init ;åñëè ðàâíî - çàãðóçêà íà÷. çíà÷. lsl Temp1 ;èíà÷å - ñäâèã âëåâî rjmp Output ;ïåðåéòè íà âûâîä â ïîðò Init: ldi Temp1,0b00000001 ;çàãðóçèòü íà÷. çíà÷åíèå Output: out PortA,Temp1 ;âûâîä â ïîðò reti ;âûõîä èç îáðàáî÷èêà ;**************************************************** ; Пауза ;**************************************************** Delay40mks: push Temp ldi Temp,0 Loop: dec Temp brne Loop pop Temp ret ;**************************************************** ; Пауза ;**************************************************** Delay1500mks: push Temp push Temp1 ldi Temp,0 ldi Temp1,20 Loop3: dec Temp brne Loop3 dec Temp1 brne Loop3 pop Temp1 pop Temp ret ;**************************************************** ; Инициализация LCD ;**************************************************** ;êîìàíäû sbi, cbi - óñòàíîâêà/ñáðîñ áèòà ;a0 pd6 ;r/w pd5 ;e pd4 ;db4 pd0 ;db5 pd1 ;db6 pd2 ;db7 pd3 INIT_LCD16S2D: ldi R16,0 out PortD,R16 rcall Delay40mks ldi Temp1,16 ldi ZL,Low(LCD_INIT_DATA*2) ldi ZH,High(LCD_INIT_DATA*2) Init_next0: lpm out PortD,r0;Temp adiw ZL,1 ; AddImmedaiate to Word. Èíêðåìåíòèòñÿ ñëîâî. nop ;?? ????? 40íñ nop sbi PortD,4 nop ;?? ????? 230íñ nop nop nop nop nop cbi PortD,4 rcall Delay40mks dec Temp1 brne Init_next0 rcall Delay1500mks ; ldi Temp,0 ; out PortD,Temp ret LCD_INIT_DATA: ; are3210 are3210 ;8bit .db 0b00000011,0b00000011 ; 30h ????????? ??????????? .db 0b00000011,0b00000010 ; 20h ????????? ??????????? ;4bit .db 0b00000010,0b00001000 ; 28h ????????? ??????????? .db 0b00000000,0b00001000 ; 0Ch ?????????? ??????? .db 0b00000000,0b00000110 ; 06h ????????? ??????????? ? ?????????? ?????? .db 0b00000000,0b00001111 ; 0Fh ???????? ????????? ? ???????? ?????? .db 0b00001000,0b00000000 ; ?????? ????? .db 0b00000000,0b00000001 ; 01h ???????, ?????? ????? ;**************************************************** ; Установка адреса для последующих операции и ; выбор оласти DDRAM. ; Входные данные: R16(Temp) - адрес DDRAM + 0x80. ; Изменяется регистр R16(Temp). ;**************************************************** WriteCmd: push Temp ;Swap Temp lsr Temp lsr Temp lsr Temp lsr Temp andi Temp,0b00001111 out PortD,Temp nop ;íå ìåíåå 40íñ nop sbi PortD,4 nop ;íå ìåíåå 230íñ nop nop nop nop nop cbi PortD,4 nop ;íå ìåíåå 270íñ nop nop nop nop nop nop pop Temp andi Temp,0b00001111 out PortD,Temp nop ;?? ????? 40?? nop sbi PortD,4 nop ;?? ????? 230?? nop nop nop nop nop cbi PortD,4 rcall Delay40mks ret ;**************************************************** ; Вывод текстовой строки на дисплей. ; Входные данные: регистр Z - адрес строки в ; программной памяти. '$' - конец строки. ; Изменяется регистр R16(Temp), Z. ;**************************************************** WriteLn: lpm mov Temp,r0 cpi Temp,'$' breq WriteLnEnd adiw ZL,1 push Temp Swap Temp andi Temp,0b00001111 ori Temp,0b01000000 out PortD,Temp nop ;?? ????? 40íñ nop sbi PortD,4 nop ;?? ????? 230íñ nop nop nop nop nop cbi PortD,4 nop ;?? ????? 270íñ nop nop nop nop nop nop pop Temp andi Temp,0b00001111 ori Temp,0b01000000 out PortD,Temp nop ;?? ????? 40íñ nop sbi PortD,4 nop ;?? ????? 230íñ nop nop nop nop nop cbi PortD,4 rcall Delay40mks rjmp WriteLn WriteLnEnd: ret ;**************************************************** ; Всякие тексты, чтоб выводить ;**************************************************** Text01: .db 'I',0,0x4b,0x50,0xA5,0x43,0x54,0xB0,0xAC,0x41,0x20,0x26 Text02: .db "radiokot.ru " ;**************************************************** ; Запись своих символов в CGRAM ;**************************************************** Write_CGRAM: ldi Temp,0b01000000 ; Âûáîð îáëàñòè ïàìÿòè CGRAM rcall WriteCmd ; ldi R16,0 ; out PortD,R16 ; rcall Delay40mks ; ldi Temp1,8 ldi ZL,Low(Symbol_data*2) ldi ZH,High(Symbol_data*2) ;Init_next0: ; brne Init_next0 rcall WriteLn ; rcall Delay1500mks ; ldi Temp,0 ; out PortD,Temp ret Symbol_data: ; are3210 are3210 .db 0b00000000,0b00000000 .db 0b00001010,0b00011111 .db 0b00001110,0b00000100 .db 0b00000000,0b00000000 ;.db '$' ;.EXIT ;Ïîäêëþ÷åíèå èíäèêàòîðà ê ïîðòó D ïî âàðèàíòó 4-õ áèòíîãî èíòåðôåéñà: ;a0 (4) (11) pd6 ;r/w (5) (9) pd5 ;e (6) (8) pd4 ;db4 (11) (2) pd0 ;db5 (12) (3) pd1 ;db6 (13) (6) pd2 ;db7 (14) (7) pd3 |
Автор: | arm-17 [ Пн сен 26, 2011 14:25:31 ] |
Заголовок сообщения: | Re: Переделка кода для Atmega 8515+ "LCD16s2d+avr (8bit)" |
Что ни кто не юзает Megu 8515?????Может у кого есть другая прога для LCD скиньте плиззззззззз |
Автор: | pyzhman [ Пн сен 26, 2011 17:15:21 ] |
Заголовок сообщения: | Re: Переделка кода для Atmega 8515+ "LCD16s2d+avr (8bit)" |
Вы бы ссылку хоть на статью дали. |
Автор: | arm-17 [ Пн сен 26, 2011 18:58:14 ] |
Заголовок сообщения: | Re: Переделка кода для Atmega 8515+ "LCD16s2d+avr (8bit)" |
ВОТ ЭТО В ПОИСКОВИКЕ НАБЕРИТЕ: "LCD16s2d+avr (4bit)" |
Автор: | arm-17 [ Пн сен 26, 2011 19:19:40 ] |
Заголовок сообщения: | Re: Переделка кода для Atmega 8515+ "LCD16s2d+avr (8bit)" |
ВОТ тут уже что то мигает ![]() ![]() Помогите приспособить к Mega8515 Везде всегда про tinny пишут,а про megu ничего ![]() ;******************************************************************* ;******************************************************************** ; ---------- ;| Íàáîð ïðîöåäóð äëÿ óïðàâëåíèÿ | ;| LCD16S2D ---------- ; ----------| By Pa5ha | ; ---------- .include file "C:\AVR\AvrAssembler2\Appnotes\m8515def.inc" ;4MHz .def tmp =r16 .def tmp1 =r17 .def lcddata =r21 .def data =r22 .def temp = r23 .equ e=1 .equ rs=2 ;PA0..PA3 - D0..D3 ;PD1 - e ;PD2 - rs .equ SPEED = 14 ; 14 äëÿ XTAL=16MHz, 10 äëÿ XTAL=8MHz, ; 6 äëÿ XTAL=4MHz, 5 äëÿ XTAL<4MHz .cseg .org 0 ldi Temp,0b11111111 ;ser temp out DDRA, temp out DDRD, temp ldi Temp,0 out PortD,Temp InitAvr: ;Initialize stack pointer ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ; rcall Delay40mks lcdinit: push tmp1 push lcddata ldi tmp1, 0 ldi r30,low(InitData*2) ldi r31, high(InitData*2) init: lpm lcddata, Z+ ldi tmp1, '$'';ЧТО ЭТО '$'? cpse lcddata, tmp1 rcall WrCMD cpi lcddata, 0b00010000 breq d1500 rcall delay40mks naz: ldi tmp1, '$';ЧТО ЭТО '$'? cpse tmp1, lcddata rjmp init pop lcddata pop tmp1 ret d1500: rcall delay1500mks rcall delay40mks rjmp naz InitData: .db 0b11000000, 0b00100000 .db 0b11000000, 0b00000000 .db 0b11000000, 0b00000000 .db 0b00010000, 0b00000000, '$';ЧТО ЭТО '$'? WrCMD: push lcddata swap lcddata sbi portD, e nop nop nop nop nop nop nop out portA, lcddata nop nop nop nop nop nop nop nop nop nop cbi PortD, e pop lcddata ret write: push lcddata swap lcddata sbi portD, e sbi portD, rs nop nop nop nop nop nop nop nop nop nop out portA, lcddata nop nop nop nop nop nop nop nop nop nop cbi PortD, e cbi portD, rs pop lcddata ret WriteLn: push lcddata push tmp1 Ln: rcall delay40mks rcall delay40mks lpm lcddata, Z+ ldi tmp1, '$' cpse lcddata, tmp1 rjmp wr re: cpse lcddata, tmp1 rjmp Ln pop tmp1 pop lcddata ret wr: rcall write swap lcddata rcall write rjmp re longDelay: ldi tmp, 255 d11: ldi tmp1, 0xff dec tmp cpi tmp, 0 brne d12 ret d12: dec tmp1 cpi tmp1, 0 breq d11 brne d12 ret Delay40mks: push Tmp ldi Tmp,0 Loop: dec Tmp brne Loop pop Tmp ret Delay1500mks: push Tmp push Tmp1 ldi Tmp,0 ldi Tmp1,20 Loop3: dec Tmp brne Loop3 dec Tmp1 brne Loop3 pop Tmp1 pop Tmp ret ;==Èíèöèàëèçàöèÿ LCD============== ;rcall lcdinit ;==Ïîñûëêà êîìàíä================= ldi lcddata, 0b00110100 rcall wrcmd ldi lcddata, 0b00001100 rcall wrcmd ldi lcddata, 0b00000001 rcall wrcmd ldi lcddata, 0b00000110 rcall wrcmd rcall delay1500mks ;========Âûâîä òåêñòà============= ldi ZL, low(TEXT*2) ldi ZH, high(TEXT*2) rcall writeln rcall delay40mks TEXT: .db "RADIOKOT$" |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |