Код: Выделить всё
#define getbit(reg, bit) ((reg&(1<<bit))!=0)У "!=" приоритет выше, чем у "&". Я немного лохонулся в спешке

Код: Выделить всё
#define getbit(reg, bit) ((reg&(1<<bit))!=0)
Аlex писал(а):А так ?Код: Выделить всё
#define getbit(reg, bit) ((reg&(1<<bit))!=0)
У "!=" приоритет выше, чем у "&". Я немного лохонулся в спешке
@nod писал(а):делаю разводку печатки и для удобо... вобщем хочу поменять ноги проца в порту выхода сегментов, чтоб на печатке не пересекались
Код: Выделить всё
//Date : 30.12.2013
//Chip type : ATtiny13
//Clock frequency : 1,000000 MHz
#include <tiny13.h>
unsigned char a1=0b01100101;
unsigned char a2=0b10001110;
bit exchange;
void main(void)
{
// a1.3=a2.6
exchange= a2 & 0x40; // выделяем шестой бит в а2
a1&= 0xF7; // сбрасываем третий бит в а1
a1|= exchange << 3; // на место третьего бита в а1 ставим выделенный
}
Это почему ? Число же не 9340. Строка будет "934", нули добавляйте сами, в зависимости от кол-ва символов.radio-kot писал(а):она выдает в массив числа 9 3 4 0
radio-kot писал(а):как в itoa() результат выровнять вправо или подскажите другую функцию?
т.е. от числа 934 она выдает в массив числа 9 3 4 0, а хотелось бы более адекватного преобразования типа: 0 9 3 4
хотелось бы более адекватного преобразования типа: 0 9 3 4
Код: Выделить всё
/* Speed optimized version */
char asc[6];
void uitoa1(unsigned int binval)
{
unsigned int temp,val;
char binc,atemp;
val=binval;
atemp='0'; temp=10000; while(val >= temp) {atemp++; val-=temp;}; *(asc+0)=atemp;
atemp='0'; temp=1000; while(val >= temp) {atemp++; val-=temp;}; *(asc+1)=atemp;
atemp='0'; temp=100; while(val >= temp) {atemp++; val-=temp;}; *(asc+2)=atemp;
atemp='0'; binc=(char)val; while(binc >= 10) {atemp++; binc-=10;}; *(asc+3)=atemp;
binc+='0'; *(asc+4)=binc;
*(asc+5)=0;
} Код: Выделить всё
/* Size optimized version */
char asc[6];
void uitoa2(unsigned int binval)
{
int step[]={10000,1000,100,10,1};
unsigned int temp,val;
char i,atemp;
val=binval;
for (i=0; i<5; i++)
{
temp=step[i];
atemp='0';
while(val >= temp)
{
atemp++;
val-=temp;
}
asc[i]=atemp;
}
*(asc+5)=0;
} 
Код: Выделить всё
for(i=3; i<= 0, data!=0; i--)
{
str[i]=data%10;
data /=10;
}Код: Выделить всё
void VideoDrawVar (int VideoCacheVar, unsigned int VideoDrawMode){
unsigned int VideoCacheVarLong;
if(VideoCacheVar<1000) { VideoCacheVarLong=3; }
if(VideoCacheVar<100) { VideoCacheVarLong=2; }
if(VideoCacheVar<10) { VideoCacheVarLong=1; }
itoa(VideoCacheVar,VideoVarCache);
if (VideoDrawMode==0) {
for (i=0; i<VideoCacheVarLong; i++){
VideoDrawCharNor(VideoVarCache[i]);
} }else{
for (i=0; i<VideoCacheVarLong; i++){
VideoDrawCharInv(VideoVarCache[i]);
} } }Код: Выделить всё
sprintf(VideoVarCache, "%d", BOSS);
VideoDrawStringF(VideoVarCache,0);Код: Выделить всё
sprintf(VideoVarCache, "%d", BOSS);
for (i=0; i<20; i++) {
VideoDrawCharNor(VideoVarCache[i]); }0867532 писал(а):.
AndTer писал(а):Может где перестарался с запретом прерываний и срабатывает сторожевой таймер? Может его иногда пинать собственноручно?
Код: Выделить всё
while (PORTВ.5==0)Код: Выделить всё
#include <tiny13.h>
#include <delay.h>
void main(void)
{
PORTB=0b110000;
DDRB=0b001111;
while (1)
{
while (PORTB.5==0)
{
PORTB=0b000101;
delay_ms(100);
PORTB=0b001010;
delay_ms(100);
};
};
}Apparatchik писал(а):пишите 8 знаков после 0b, будет меньше путанины.
SabitofF писал(а):то есть не правильно настроены порты? Можете разъяснить как их правильно настраивать? И как подключить подтягивающий резистор к кнопке?
Заранее благодарен!
SabitofF писал(а):но у attiny13 всего 6 портов, почему писать 8 символов?