Nenech se zaskočit názvem. Rutina, podprogram, funkce - je úplně jedno, jak to nazveš. Klidně to můžeš napsat v Bascomu nebo v C. Pokud umíš přečíst hodnotu pinu a zapsat byte na port, pak je úplně jedno, v čem to napíšeš.
V ASM to může vypadat třeba takhle :
[code]#define LCD_PIN pinb ; Datová sběrnice LCD je připojená na pinech portu B
#define LCD_PORT portb ; Datová sběrnice LCD je připojená na pinech portu B
#define LCD_DDR ddrb ; Datová sběrnice LCD je připojená na pinech portu B
#define RW portc, 4 ; Signál RW je na C4
#define RS portc, 3 ; Signál RW je na C3
#define EN portc, 2 ; Signál RW je na C2
#define BF LCD_PIN, 7 ; Signál BF je na datovém pinu 7
;
;
;
Hlavni_smycka:
;
; Obsluha menu a ostatních událostí
;
;
; Pokud je příznak odeslání do LCD neaktivní, zkontrolovat buffer.
; Pokud jsou v bufferu data, načíst data a aktivovat příznak pro odeslání do LCD
;
; Pokud je příznak odeslání do LCD neaktivní, skočit na Hlavni_smycka
;
rcall Zapis_na_LCD
rjmp Hlavni_smycka
;
;
;
Zapis_na_LCD:
sbi RW ; Signál RW na read
cbi RS ; Signál RS na Command register
ldi Temp, 0xFF
out LCD_DDR, Temp
out LCD_PORT, Temp ; LCD port jako vstup s aktivními pull-up rezistory
sbi EN ; Signál EN do log. 1
sbic BF ; Pokud je BF v log. 0, pak následující instrukci přeskočit
rjmp Zapis_na_LCD_Skip ; Signál BF je v log. 1 - skočíme na konec
cbi EN ; Signál EN do log. 0
; Podle potřeby skočit na Command nebo Data
Zapis_na_LCD_Command:
cbi RS ; Signál RS na Command register
rjmp Zapis_na_LCD_Proved
Zapis_na_LCD_Command:
sbi RS ; Signál RS na Data register
Zapis_na_LCD_Proved:
cbi RW ; Signál RW na write
ldi Temp, 0x00
out LCD_DDR, Temp ; LCD port jako výstup
out LCD_PORT, regData
sbi EN
; Data byla odeslána do LCD => deaktivovat příznak pro odeslání do LCD
Zapis_na_LCD_Skip:
cbi EN ; Signál EN do log. 0
ret
[/code]
Myslím si, že tohle není problém napsat ani v Bascomu nebo C.
BTW: Nic ve zlém, ale píšeš, že máš program dost časově rizikový a programuješ
to v Bascomu nebo C ? To mi připadá, že jde tak nějak proti sobě …
V C píšu občas taky - psaní je přecijenom rychlejší. Obzvlášť když pracuješ s větším
množstvím dat, polema apod., ale pokud potřebuju opravdu rychlý a malý kód,
tak je v první řadě ASM.