Deklaracja bitow w CodeVisionAVR
Masz problem? Zapytaj na forum elektroda.pl
From: "Ed" <edxx_at_nospam_poczta.onet.pl>
Subject: Deklaracja bitow w CodeVisionAVR
Date: Tue, 14 Oct 2003 00:45:11 +0200
Witam!
W jaki sposób zadeklarować w CV_AVR zmienna q_byte tak żeby w programie
można było wykonywać operacje na całym bajcie jak i na poszczególnych
bitach.
W Keilu wygladało to tak:
UCHAR bdata qbyte0=0;
sbit q0 = qbyte0^0;
sbit q1 = qbyte0^1;
sbit q2 = qbyte0^2;
sbit q3 = qbyte0^3;
sbit q4 = qbyte0^4;
sbit q5 = qbyte0^5;
sbit q6 = qbyte0^6;
sbit q7 = qbyte0^7;
W CV_AVR na razie wykonuje od groma operacji (1<< bit_no), sprawdzanie czy
ustawic 1 czy wyzerowac to nastepne kilobajty programu.
Sprawdziłem demo ICC_AVR ale tam w ogóle nie wystepuje zmienna bitowa.
Czy w IAR_AVR można deklarowac funkcje ze zmiennymi bitowymi jako argument
funkcji?
Pozdrawiam
Ed
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.nask.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: "radek" <swiniaczek_at_nospam_buziaczek.pl>
Subject: Re: Deklaracja bitow w CodeVisionAVR
Date: Fri, 17 Oct 2003 21:42:29 +0200
Code Vision ma fajny help i tam jest wszystko opisane.
można tak:
bit flaszka1=1;
Inaczej się chyba nie da. Pola bitowe nie są obsługiwane. Można bity
zmieniać za pomocą operacji logicznych.
radek
Użytkownik "Ed" <edxx_at_nospam_poczta.onet.pl> napisał w wiadomości
news:bmfa3b$sk9$1_at_nospam_news.onet.pl...
Witam!
W jaki sposób zadeklarować w CV_AVR zmienna q_byte tak żeby w programie
można było wykonywać operacje na całym bajcie jak i na poszczególnych
bitach.
W Keilu wygladało to tak:
UCHAR bdata qbyte0=0;
sbit q0 = qbyte0^0;
sbit q1 = qbyte0^1;
sbit q2 = qbyte0^2;
sbit q3 = qbyte0^3;
sbit q4 = qbyte0^4;
sbit q5 = qbyte0^5;
sbit q6 = qbyte0^6;
sbit q7 = qbyte0^7;
W CV_AVR na razie wykonuje od groma operacji (1<< bit_no), sprawdzanie czy
ustawic 1 czy wyzerowac to nastepne kilobajty programu.
Sprawdziłem demo ICC_AVR ale tam w ogóle nie wystepuje zmienna bitowa.
Czy w IAR_AVR można deklarowac funkcje ze zmiennymi bitowymi jako argument
funkcji?
Pozdrawiam
Ed
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!newsfeed.gazeta.pl!news.nask.pl!news-stoc.telia.net!217.209.241.210.MISMATCH!news-stod.telia.net!telia.net!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!hs001.slackware.pl!new
From: Jan Dubiec <jdx_at_nospam_slackware.pl>
Subject: Re: Deklaracja bitow w CodeVisionAVR
Date: 18 Oct 2003 04:38:35 +0200
On Tue, 14 Oct 2003 00:45:11 +0200, "Ed" <edxx_at_nospam_poczta.onet.pl> wrote:
Witam!
W jaki sposób zadeklarować w CV_AVR zmienna q_byte tak żeby w programie
można było wykonywać operacje na całym bajcie jak i na poszczególnych
bitach.
Deklaracja którą masz poniżej powinna działać pod każdym komplikatorem C.
Musisz sobie tylko wybrać odpowiednią kolejność bitów w bajcie.
Regards,
/J.D.
#include <stdio.h>
union moja_swietna_unia {
unsigned char BYTE;
struct {
#if defined MSB_FIRST
unsigned char B7:1;
unsigned char B6:1;
unsigned char B5:1;
unsigned char B4:1;
unsigned char B3:1;
unsigned char B2:1;
unsigned char B1:1;
unsigned char B0:1;
#elif defined LSB_FIRST
unsigned char B0:1;
unsigned char B1:1;
unsigned char B2:1;
unsigned char B3:1;
unsigned char B4:1;
unsigned char B5:1;
unsigned char B6:1;
unsigned char B7:1;
#else
#error "Musisz zdefiniować kolejność bitów w bajcie."
#endif
} BIT;
};
int main(int argc, char **argv)
{
union moja_swietna_unia moja_swietna_zmienna;
moja_swietna_zmienna.BYTE = 0x99;
printf("%#x\n", moja_swietna_zmienna.BYTE); /* 0x99 */
moja_swietna_zmienna.BIT.B7 ^= 1; /* przełącz bit 7 */
moja_swietna_zmienna.BIT.B6 = 1; /* ustaw bit 6 */
moja_swietna_zmienna.BIT.B3 = 0; /* wyzeruj bit 3 */
printf("%#x\n", moja_swietna_zmienna.BYTE); /* 0x51 */
return 0;
}
--
Jan Dubiec, jdx_at_nospam_slackware.pl, mobile: +48 602 101787
Głęboka wiara wymaga płytkiego rozumu i nikłej wiedzy.
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai