Cecko pro PICe
Pavel Prochazka.zde.cz
hacesoft@mujmail.cz
Středa Říjen 26 07:49:46 CEST 2005
Skusim. Taky jsem to skousel pres ty posuny ale vysledny kod je silene
dlouhy....
Pavel Prochazka.zde.cz
Lukas Grepl napsal(a):
>>void zapis_w(void){
>>//zkopirovat 4 az 7 bity z registru DATA na porty B.
>>//RB1 ...DB4 ... bit4 registru data
>>//RB2 ...DB5 ... bit5 registru data
>>//RB4 ...DB6 ... bit6 registru data
>>//RB5 ...DB7 ... bit7 registru data
>>#asm
>> bcf _PORTB,1
>> bcf _PORTB,2
>> bcf _PORTB,4
>> bcf _PORTB,5
>> btfss _data,4 -- nemelo tu byt btfsc?
>> bsf _PORTB,1
>> btfss _data,5
>> bsf _PORTB,2
>> btfss _data,6
>> bsf _PORTB,4
>> btfss _data,7
>> bsf _PORTB,5
>>#endasm
>>return;
>>}
>>
>>
>
>Co treba neco jako:
>
>void zapis(char data)
>{
> RB1 = RB2 = RB4 = RB5 = 0;
> if (data & (1 << 4))
> RB1 = 1;
> if (data & (1 << 5))
> RB2 = 1;
> if (data & (1 << 6))
> RB4 = 1;
> if (data & (1 << 7))
> RB5 = 1;
>}
>
>nebo
>
>void zapis(char data)
>{
> RB1 = data & 16 ? 1 : 0;
> RB2 = data & 32 ? 1 : 0;
> RB4 = data & 64 ? 1 : 0;
> RB5 = data & 128 ? 1 : 0;
>}
>
>nebo
>
>void zapis(char data)
>{
> RB1 = data >> 4; // cisteji RB1 = (data >> 4) & 1;
> RB2 = data >> 5;
> RB4 = data >> 6;
> RB5 = data >> 7;
>}
>
>nebo
>
>void zapis(char data)
>{
> union { char byte; struct { unsigned
>b0:1,b1:1,b2:1,b3:1,b4:1,b5:1,b6:1,b7:1; } bits; } u;
>
> u.byte = data;
> RB1 = u.bits.b4;
> RB2 = u.bits.b5;
> RB4 = u.bits.b6;
> RB5 = u.bits.b7;
>}
>
>a jiste by se nasly dalsi zpusoby. (nerucim za stoprocentni spravnost,
>nic z toho jsem ted nezkousel..)
>
>Mimochodem doporucuji si udelat hlavickovy soubor, ktery bude obsahovat
>neco na zpusob:
>
>#define LCD_D7 RB5
>#define LCD_D6 RB4
>#define LCD_D5 RB2
>#define LCD_D4 RB1
>atd..
>
>a pak muzete (uz univerzalne pro jakekoliv zapojeni) napsat neco jako
>(dalsi variace, takhle to mam v nejakem lcd.c):
>
>void zapis(char data)
>{
> LCD_D7 = (data & 0x80) != 0;
> LCD_D6 = (data & 0x40) != 0;
> LCD_D5 = (data & 0x20) != 0;
> LCD_D4 = (data & 0x10) != 0;
>
> delayus(LCD_IODLY);
> LCD_E = 1;
> delayus(LCD_IODLY);
> LCD_E = 0;
> delayus(LCD_IODLY);
>}
>
> > swapf data,f
> > rlf data,w
> > movwf temp
> > andlw 0x18
> > addwf temp,w
> > xorwf portb,w
> > andlw 0x36
> > xorwf portb,f
> >
> > A ted si to jenom prepisete do cecka... :-)
>
>void zapis(char data)
>{
> data = (data >> 4) || (data << 4);
> data >>= 1;
> data += data & 0x18;
> PORTB ^= (PORTB ^ data) & 0x36;
>}
>
>Snad jsem se moc nesekl ;-). Ale moc se mi ten kod nelibi - neni
>nepouzitelny pro jine zapojeni vyvodu ;-).
>
>Lukas Grepl
>_______________________________________________
>HW-list mailing list - sponsored by www.HW.cz
>Hw-list@list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
>
>
>
>
Další informace o konferenci Hw-list