Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 23.08.2018, 08:26   #101
reg33
Member
 
Регистрация: 11.11.2012
Возраст: 36
Сообщений: 69
Вес репутации: 85/0
reg33 will become famous soon enough
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от Greg Посмотреть сообщение
надо (не постесняться) и привести весть текст своей программы. а (исходное) сообщение размазать по нужным местам в качестве комментариев.
тогда можно пытаться рассчитывать на какой-то адекватный ответ.
собственно исходник

#include <htc.h>
#include <stdio.h>
#include "usart.h"
#include "i2c.h"
#include "rtc.h"
#include <string.h>


#define _XTAL_FREQ 4000000

#define STATE TRISC5
#define PIN RC5


__CONFIG(WDTDIS & UNPROTECT & LVPDIS & HS);




char temperature;
unsigned char temp_drob;
unsigned signloc;
unsigned char b;
unsigned char temp1;
unsigned char temp2;
unsigned char temp_drob = 0;
unsigned char sign;
unsigned char hours;
unsigned char minutes;
unsigned int RTC;
unsigned char ALG;
unsigned char ButtonPress; // переменная для кнопки MODE
unsigned char ButtonPress_1; // переменная для кнопки SET
unsigned char ButtPress;//переменная дребезг инкремент
unsigned char higt; // переменная инткремента
unsigned char MASK=0b00000111;// перенная маски для выделение пинов PORTE
unsigned char PRESS; //переменная для загрузки состояния порта
unsigned char SWI; // переменная для переключения в switch
unsigned char INCR; // тест
unsigned char temperature_des; // переменная для хранения десятков
unsigned char temperature_ed; // переменная для хранения едениц
unsigned char pause_opros; //переменная для отработки паузы при работе датчика
unsigned char PW=0; // переменная для ШИМ
unsigned char begunock; // переменная для бегунка
// unsigned char anode2;



char maymass[10][2]; // массив для ШИМ

// массив для лампы
// 0 1 2 3 4 5 6 7 8 9 R o b C v / 17(A) 18(Б) 19(В) 20(Г) 21(Д) 22(Е) 23(Ж) 24(З)
//25(З) 26(И) 27(К) 28(Л) 29(М) 30(Н) 31(О) 32(П) 33(Р) 34(Т) 35(У) 36(Ф) 37(Х) 38(Ц)
// 39(Ч) 40(Ш) 41(Щ) 42(Ы) 43(ь) 44(Э) 45(Ю) 46(Я)
char Sibol_PORTD[47]= {0xC0,0x97,0b11000110,0b11010011,0b11111010,0b1101 0011,0b11010001,
0b10010111,0b11010000,0b11010010,0xFF,0b01111100,0 b11010001,0b11010001,0b11010101,0b11101101,
0b11101111,0b11101010,0b01010101,0b01010101,0b1111 1101,0b11000010,0b11010101,0b00101111,
0b01010111,0b11101000,0b01111101,0b11101010,0b1111 1000,0b11111000,0b11010000,0b11111000,
0b11111100,0b11010101,0b10111111,0b11101111,0b1011 1110,0b01101111,0b11010000,0b11111010,
0b10010000,0b10010000,0b10110000,0b10110101,0b1101 0010,0b10011000,0b11101010};

char Sibol_PORTB[47] = {0x17,0xDE,0b10001111,0b10000111,0b01101011,0b0000 1011,
0b00001011,0b10010111,0b00001011,0b00001011,0xFF,0 b00001011,0b11101011,0b01101011,
0b00011111,0b11111111,0b11110111,0b11100111,0b0001 1011,0b00010011,0b00011111,0b10111110,
0b00011011,0b11111000,0b10010011,0b01110111,0b0111 0011,0b11110111,0b01110101,0b01101011,
0b00011111,0b00011111,0b00001011,0b00011111,0b1001 1110,0b11110110,0b00001010,0b11110110,
0b01111111,0b11101110,0b01111110,0b01111110,0b0111 1011,0b01111011,0b10001111,0b00111010,0b00001011};


char begunok_PORTB [4]= {0b11111110,0b11110111,0b11101011,0b11111101}; // массив для бегунка порта B

char begunok_PORTD [4]= {0b10111111,0b11101111,0xff,0b01111111}; // массив для бегунка порта D

void print_uart(const char *msg, int val) { // загружаем константу для текста и перемнную для чиселки
GIE = 0;
printf("\r%s %d", msg, val);
__delay_ms (50);
//GIE = 1;
}

char *byte2strAsBin(int val, char *str) //функция перевода в двоичный код функция вернет указатель /// char *str это указатель по сути на нулевую ячейку массива
{
int i;
for (i = 0; i < 8; i++) {
str[7-i] = (val & (1<<i)) ? '1' : '0'; // закидываем в массив результаты сравнения
}
str[8] = 0; // зависывем в последнюю ячейку 0 чтоб printf нашла конец массива (строки)
return str; // по сути указатель и начало массива одно и тоже поэтому пишем

}

void printByteAsBinary_uart(int val) // функция вывода строки с включением и выключением прерывания
{
static char str[9]; // добавляем массив

GIE = 0;

byte2strAsBin( val, str); // функция перевода из десятичного в двоиный

printf("\rBits: %s", str); // выводим в бинарном виде

__delay_ms(50);

// GIE = 1;
}

char mask_start[6]= // засветка цифры с низу вверх [0]
{ 0b00101111,/* засвечиваем А4,А6,А7*/
0b00000111,/* засвечиваем А3,А4,А5,А6,А7*/
0b00000000, /* засвечиваем ALL*/

0b01101011,/*засвечиваем В2,В4,В7*/
0b00001011,/* засвечиваем В2,В4,В5,В6,В7*/
0b00000000,/* засвечиваем ALL*/
};
char mask_stop[6]= // гашение цифры сверху вниз [1]
{ 0b01100000, /* гасим В5,В6,*/
0b11110100, /* гасим В2,B3,В4,В5,В6,В7*/
0b11111111, /* гасим ALL*/

0b00000111, /* гасим A0,А1,А2*/
0b00101111, /* гасим A0, А1,А2,А3,А5*/
0b11111111, /* гасим ALL*/
};

char anode_mask [5]= {2,4,8,16,32}; // массив для анодов индикатора

void segment (unsigned char seg, unsigned anode) // штатная засветка
{
PORTA=0b00000000;
unsigned char t;
switch(anode)
{
case 0 :{t=2;}break;
case 1 :{t=4;}break;
case 2 :{t=8;}break;
case 3 :{t=16;}break;
case 4 :{t=32;}break;
}
PORTB=Sibol_PORTB[seg];
PORTD=Sibol_PORTD[seg];
PORTA=t;
}

void stop( int seg, int anode, int DEC) // функция гашения цыфры
{
PORTA=0x00; // гасим порт a

if ( DEC<=2)
{

PORTB=Sibol_PORTB[seg]| mask_stop[DEC]; // первый шаг гасим верх
// print_uart("I detected Sibol PORTB", Sibol_PORTB[seg]);
// print_uart("I detected DEC_1", DEC);
// printByteAsBinary_uart( Sibol_PORTB[seg]);
// printByteAsBinary_uart( mask_stop[DEC]);
// printByteAsBinary_uart( PORTB);


PORTD=Sibol_PORTD[seg]; // низ цифры горит всегда
PORTA=anode_mask[anode];


}
else
if (DEC<=5)
{
PORTD=Sibol_PORTD[seg]| mask_stop[DEC]; // первый шаг гасим низ
// print_uart("I detected DEC_1", DEC);
// printf("\rPORT MASK DEC LO\n"); // просто выводим строку
// printByteAsBinary_uart( Sibol_PORTD[seg]);
// printByteAsBinary_uart( mask_stop[DEC]);
// printByteAsBinary_uart( PORTD);

PORTB=0xFF;// верх цифры не горит
PORTA=anode_mask[anode];
}
__delay_ms (2);
}

void start( int seg, int anode, int INC) // функция засветки цыфры
{
PORTA=0x00; // гасим порт a

if ( INC<=2)
{

PORTD=Sibol_PORTD[seg]| mask_start[INC]; // первый шаг зажигаем низ
// print_uart("I detected INC_1", INC);
// printf("\rPORT MASK INC LO\n"); // просто выводим строку
// printByteAsBinary_uart( Sibol_PORTD[seg]);
// printByteAsBinary_uart( mask_start[INC]);
// printByteAsBinary_uart( PORTD);
PORTB=0xFF; // верх цифры не горит
PORTA=anode_mask[anode];

}
else
if (INC<=5)
{
PORTB=Sibol_PORTB[seg]| mask_start[INC]; // первый шаг зажигаем верх
// print_uart("I detected INC_1", INC);
// printf("\rPORT MASK INC HI\n"); // просто выводим строку
// printByteAsBinary_uart( Sibol_PORTB[seg]);
// printByteAsBinary_uart( mask_start[INC]);
// printByteAsBinary_uart( PORTD);
PORTD=Sibol_PORTD[seg]; // низ цифры горит
PORTA=anode_mask[anode];
}
__delay_ms (2);
}

void PWM_modulator (unsigned char PWM_M) // управление яркостью CCP1
{unsigned char i ;
i= PWM_M%10;
CCPR1L = maymass[i][0];
CCP1CON = maymass[i][1];
}





unsigned char INIT(void)//static bit INIT (void) //static bit INIT (void) //функция инициализации темп датчик
{//unsigned char b;//static bit b;
GIE=0;// запрещаем прерывания
RC5=0; // обнуляем приемный порт
STATE=1;
STATE=0; // проваливаем линию
__delay_us (500);
STATE=1; //переключаемся на вход
__delay_us (65);
b=PIN; //смотрм чего там на линии
__delay_us (450); //выжидаем интервал
GIE=1; // разрешаем прерывания
return b; // возврашаю ноль или один
}

void TX (unsigned char cmd)//передача данных темп датчик
{ GIE=0;// запрещаем прерывания
unsigned char temp = 0;
unsigned char i=0;
temp=cmd;
for (i=0;i<8;i++) //цыкл на передачу байти
{ if (temp&0x01)
{STATE=0;
__delay_us(5); //передаем 1
STATE=1;
__delay_us(70);
} else
{STATE=0;
__delay_us (70); //передаем 0
STATE=1;
__delay_us(5);
}
temp>>=1;
}
GIE=1; // разрешаем прерывания
}

unsigned char RX ()// фунуция приема темп датчик
{ GIE=0;// запрещаем прерывания
unsigned char d=0;
unsigned char i=0;
for (i=0;i<8;i++)
{STATE=0;
__delay_us(6);
STATE=1;
d>>=1;
if(PIN==1)
d|=0x080;
__delay_us (70);
}
GIE=1; // разрешаем прерывания
return d;
}

configpic()
{ ADCON0=0b11000001;// модуль АЦП включен
ADCON1=0b10001110; //
OPTION_REG=0b11000001; //коэфф деления 1:4 таймер срабатывает через 1024мс (PS0-PS2)/ PS7-поддягивающие рез.включены /PS6-прерывание по переднему фронту
INTCON=0b10100000; // GIE=1 >> PS7-прерывания разрешены
//
// T0IF=1 >> PS5-прерывания от таймера TMR 0
// RBIE=1 >> PS3-перрывания от портов RB4, RB5, RB6 и RB7
TRISA=0b00000001;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000111; // порт работает на выход есои
}


void interrupt isr(void)// прерывание по нажатию кнопки примерно 1024 мкС
{
if(T0IF){ // Обрабатываем прерывания по таймеру понял что прерывания по таймеру
T0IF=0; // сбрасываю флаг прерывания
RTC++;
PRESS=~PORTE;//инверсия порта
PRESS=PRESS&MASK; // чего там на порту?

if (PRESS) //кнопка нажата
{
ButtonPress++; //инкремент антидребезга
SWI=PRESS; //запоминаем предпоследнне состояние перед отжатием кнопки для переключения в switch
} else
if (ButtonPress >= 30&&(!PRESS)) // прошло 30 мс? кнопка отпускается? фиксируем нажатие
{
ButtonPress = 0;

switch(SWI)
{
case 0x01: { ALG++;
if (ALG==3)// если кнопка нажата 3 раза то обнуляемся
{ALG=0;}};break;//переключаем режимы часы/напруга/термометр
case 0x02: {ALG=4; higt++;};break;
case 0x04: {INCR+=1;};break; // тест увиличиваем на 1
case 0x08: {PWM_modulator (PW++);} break; // управляем ШИМ

}
} // конец обработки прерываний по прерыванию таймеру



if ((RTC%1000)==0){
++begunock; // инкремент бегунка каждую секунду
RC0=RC0^1;
RC1=!RC0;
if (begunock==4) // крутим бегунок каждую секунду
begunock=0;
}
}
}



void posl(unsigned char R)// функция последовательного сдвига байта и затем вывод на посл регистр
{

unsigned char mask = 1;
unsigned char b,res;

//RC2=0;
for( b=1;b<=7;b++)
{
res=R&mask; // сравниваю биты с маской RC0 = (R & mask)?1:0;// сравниваю биты переменной
if(res!=0) // если результат не ноль то выводим в RC0 1 если ноль то ноль
{RB1=1;
RB0=1;
RB0=0;
}
else
{RB1=0;
RB0=1;
RB0=0;
}

mask<<=1;
} // функция сдвига
RD4=0;
RD5=0;// гасим индикатор сотен s1
RD6=0; // гасим индикатор десятков s2
RD7=0; // гасим индикатор едениц s3
RB2=1;// выводим на паралельный порт записанное последовательно число
__delay_ms (2);
RB2=0;// числа загружены защелка опять закрыта
}

void seg (int a, int b)
{
int t,F;
//RA1=0;// гасим индикатор сотен s1
//RA2=0; // гасим индикатор десятков s2
//RA5=0; // гасим индикатор едениц s3
t=0;
F=0;

switch(b)
{
case 1 :{t=16;}break;
case 2 :{t=32;}break;
case 3 :{t=64;}break;
case 4 :{t=128;}break;

}

switch(a%10)

{ case 0 : {F=0b0000001;posl (F); PORTD=t;}break;
case 1 : {F=0b1001111;posl (F); PORTD=t;}break;
case 2 : {F=0b0010010;posl (F); PORTD=t;}break;
case 3 : {F=0b0000110;posl (F); PORTD=t;}break;
case 4 : {F=0b1001100;posl (F); PORTD=t;}break;
case 5 : {F=0b0100100;posl (F); PORTD=t;}break;
case 6 : {F=0b0100000;posl (F); PORTD=t;}break;
case 7 : {F=0b0001111;posl (F); PORTD=t;}break;
case 8 : {F=0b0000000;posl (F); PORTD=t;}break;
case 9 : {F=0b0000100;posl (F); PORTD=t;}break;

}

}
void seg_point (int a, int b) // ??????? ???????? ??????????? ? ??????
{
int t;
t=0;
PORTD=0b00000000;


switch(b)
{
case 1 :{t=16;}break;
case 2 :{t=32;}break;
case 3 :{t=64;}break;
case 4 :{t=128;}break;

}

switch(a%10)

{ case 0 : {PORTB= 0b01000000; PORTD=t;}break;
case 1 : {PORTB= 0b01111001; PORTD=t;}break;
case 2 : {PORTB= 0b00100100; PORTD=t;}break;
case 3 : {PORTB= 0b00110000; PORTD=t;}break;
case 4 : {PORTB= 0b00011001; PORTD=t;}break;
case 5 : {PORTB= 0b00010010; PORTD=t;}break;
case 6 : {PORTB= 0b00000010; PORTD=t;}break;
case 7 : {PORTB= 0b01111000; PORTD=t;}break;
case 8 : {PORTB= 0b00000000; PORTD=t;}break;
case 9 : {PORTB= 0b00010000; PORTD=t;}break;

}

}

void get_temp()
{ static bit init;
unsigned char temp1;
unsigned char temp2;


init=INIT();
if(!init)
{TX(0xCC);
TX(0x44);
//for (pause_opros=0;pause_opros<=73; pause_opros++) //делаем паузу в пока опрашивается датчик и выводим инфу цыфры в это время 750??
// {
// segment(temperature_des,2); // ???????? ???????
// __delay_ms(5);
// segment(temperature_ed,3); // ???????? ? ??????
// __delay_ms (5);
// segment(temp_drob,4);// ???????? ?????
// __delay_ms(5);

// }

}
init=INIT();
if(!init)
{TX(0xCC);
TX(0xBE);
temp1=RX(); // L0 байт получаю
temp2=RX(); //HI байт получаю
}
pause_opros=0; //обнуляем перемееную задержки
temp_drob=temp1 &0b00001111; //записываем дробную часть в переменную
//temp_drob=((temp_drob*6)+2)/10; //переводим в нужное дробное число
temp1>>=4;
signloc=temp2&0x80; //определяем знак температуры
temp2<<=4;
temp2&=0b01110000;
temp2|=temp1; //перемещае все в одну переменную
if(signloc)
{ if(temp_drob>0)

{temperature=(127-temp2);
temp_drob=((temp_drob*6)+4)/10;
temp_drob=10-temp_drob;
//temp_drob=(10-temp_drob)|0x80;
}
else
{temperature=128-temp2;
//temp_drob|=0x80;
}
}
else
{temperature=temp2;
temp_drob= ((temp_drob*6)+2)/10;
}
}

void display (unsigned char* var_segm, unsigned char* DEC, unsigned char* INC, unsigned char anode, unsigned char* p_segm) {
if (*DEC!=6){
stop ( *p_segm, anode, *DEC ); // гашение сегмента
(*DEC)++; // инкремент гашения сегмента
}
else
if (*INC!=6) {//сегмент погас
start ( *var_segm, anode, *INC ); // зажигаем сегмент
(*INC)++;

}
if (*DEC==6 & *INC==6){ // стоп / старт прошли?
*p_segm=*var_segm; // перезаписываем значение переменной
*DEC=0; // обнуляем
*INC=0; // обнуляем
}
}
void begunok (unsigned char anode ){
PORTA=0x00; // гасим индикаторы
PORTB=begunok_PORTB[begunock]; // загружаем позицию бегунка
PORTD=begunok_PORTD[begunock]; // загружаем позицию бегунка
PORTA=anode_mask[anode];
}

void main()
{

maymass[0][0] = 0b00001100;
maymass[0][1] = 0b00011100; // 10%

maymass[1][0] = 0b00011000;
maymass[1][1] = 0b00111100; //20%

maymass[2][0] = 0b00100101;
maymass[2][1] = 0b00011100; //30%

maymass[3][0] = 0b00110001;
maymass[3][1] = 0b00111100; //40%

maymass[4][0] = 0b00111110;
maymass[4][1] = 0b00011100; //50%

maymass[5][0] = 0b01001010;
maymass[5][1] = 0b00111100; //60%

maymass[6][0] = 0b01010111;
maymass[6][1] = 0b00011100; //70%

maymass[7][0] = 0b01100011;
maymass[7][1] = 0b00111100; //80%

maymass[8][0] = 0b01110000;
maymass[8][1] = 0b00011100; //90%

maymass[9][0] = 0b01111100;
maymass[9][1] = 0b00111100; //100%




unsigned char temp;

//TRISB = 0x00;
configpic();
I2CInit();
init_comms();//инициализация UART
ALG=0;
TMR0=0;
higt=0;

pause_opros=0;


// запускаем ШИМ
PR2 = 0b01111100 ; //
T2CON = 0b00000101 ; // start timer 2 1:4
CCPR1L = 0b00111110 ; // ШИМ %50
CCP1CON = 0b00011100 ; //ШИМ %50


int i,X;
long int s; //переменная для ADC довольно большая потому как при коэфф больше 10 простых не зватает
unsigned char s1,s2,s3,X1,X2,X3,l,v;
unsigned char newhours_des; // пременная десятков часов
unsigned char newhours_ed; // переменная едениц часов
unsigned char newminutes_des; // переменная десятков минут
unsigned char newminutes_ed; // переменная едениц минут
unsigned char hours_des=7; // переменная temp десятков часов
unsigned char hours_ed=7; // переменная temp едениц часов
unsigned char minutes_des=7; // переменная temp десятков минут
unsigned char minutes_ed=7; // переменная temp едениц минут
unsigned char DEC_1, DEC_2, DEC_3, DEC_4, DEC_5, INC_1, INC_2, INC_3, INC_4, INC_5;
unsigned char anode0, anode1, anode2,anode3, anode4; // переменные для засветки анодов
anode0=0;
anode1=1;
anode2=2;
anode3=3;
anode4=4;
DEC_1=0; DEC_2=0; INC_1=0; INC_2=0; INC_3=0; INC_4=0; INC_5=0;
DEC_3=0; DEC_4=0;
begunock=0;

unsigned char d_change [10]; // обьявляем массив для хранения переменных start / stop
memset( d_change, 0, sizeof(unsigned char) * 10); // обнуляем массив

while (1)
{

if (ALG==0)

{ hours = ReadHour();
minutes=ReadMin();
newhours_ed=hours/10;
newhours_des=hours%10;
newminutes_des=minutes/10;
newminutes_ed=minutes%10;

for (i = 0; i < 100; i++){

if (newhours_ed != hours_ed) { // засветка десятков часов
// if (d_change[0]!=6) // скорее всего она не нужна
display (&newhours_ed, &d_change[0], &d_change[5], anode0, &hours_ed ); // делаем засвветку

}
else segment (hours_ed, anode0);
__delay_ms (5);

if (newhours_des != hours_des) { // засветка десятков часов

display (&newhours_des, &d_change[1], &d_change[6], anode1, &hours_des ); // делаем засвветку

}
else segment (hours_des, anode1);
__delay_ms (5);

begunok (anode2); // место под сегмент бегунок
__delay_ms (5);

if (minutes_des != newminutes_des) { // засветка десятков часов

display (&newminutes_des, &d_change[3], &d_change[8], anode3, &minutes_des ); // делаем засвветку

}
else segment (minutes_des, anode3);
__delay_ms (5);


if (minutes_ed != newminutes_ed) { // засветка десятков часов
// if (d_change[1]!=6) // скорее всего она не нужна
display (&newminutes_ed, &d_change[4], &d_change[9], anode4, &minutes_ed ); // делаем засвветку

}

else segment (minutes_ed, anode4);
__delay_ms (5);



// print_uart("I detected", 9999);
}
}
if (ALG==1){
get_temp(); // загружаем температуру
GIE=1;
temperature_des=temperature/10;
temperature_ed=temperature%10;

for(i=0;i<100;i++){
segment (temperature_des, anode2);
__delay_ms(5);
segment (temperature_ed, anode3);
__delay_ms(5);
segment (temp_drob, anode4);
__delay_ms(5);
}

}
if (ALG==2){
segment (2, anode0);
segment (2, anode1);
segment (2, anode2);
segment (2, anode3);
segment (2, anode4);
}

}

}



при попытке активировать датчик меняется значение TRIS C а при попытке изменить состояние пина RC5 ничего не меняется присутствует высокий уровень при
RC5=0; // обнуляем приемный пин

unsigned char INIT(void)//static bit INIT (void) //static bit INIT (void) //функция инициализации темп датчик
{//unsigned char b;//static bit b;
GIE=0;// запрещаем прерывания
RC5=0; // обнуляем приемный пин
STATE=1;
STATE=0; // проваливаем линию
__delay_us (500);
STATE=1; //переключаемся на вход
__delay_us (65);
b=PIN; //смотрм чего там на линии
__delay_us (450); //выжидаем интервал
GIE=1; // разрешаем прерывания
return b; // возврашаю ноль или один
}

Симулирую в протеусе еще прилагаю скин с состояниями регистров.
Миниатюры
pic16f877a_2.png  
reg33 вне форума   Ответить с цитированием
Старый 23.08.2018, 08:50   #102
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,797
Вес репутации: 5397/164
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от reg33 Посмотреть сообщение
собственно исходник
configpic();
I2CInit();
init_comms();//инициализация UART
увы, это не вся программа, самого интересного-то нет...

аппаратный иис модуль в былые годы имел ограничение на параллельную работу с тризами порта. собственно об этом и было в исходном сообщении.
чтобы упростить алгоритмы можно посоветовать сделать i2c софтовым. там работы на пару часов. Это займет существенно меньше времени хотя бы на объяснения что там не работает.
Greg вне форума   Ответить с цитированием
Старый 23.08.2018, 10:43   #103
reg33
Member
 
Регистрация: 11.11.2012
Возраст: 36
Сообщений: 69
Вес репутации: 85/0
reg33 will become famous soon enough
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от Greg Посмотреть сообщение
увы, это не вся программа, самого интересного-то нет...

аппаратный иис модуль в былые годы имел ограничение на параллельную работу с тризами порта. собственно об этом и было в исходном сообщении.
чтобы упростить алгоритмы можно посоветовать сделать i2c софтовым. там работы на пару часов. Это займет существенно меньше времени хотя бы на объяснения что там не работает.

configpic()
{ ADCON0=0b11000001;// модуль АЦП включен
ADCON1=0b10001110; //
OPTION_REG=0b11000001; //коэфф деления 1:4 таймер срабатывает через 1024мс (PS0-PS2)/ PS7-поддягивающие рез.включены /PS6-прерывание по переднему фронту
INTCON=0b10100000; // GIE=1 >> PS7-прерывания разрешены
//
// T0IF=1 >> PS5-прерывания от таймера TMR 0
// RBIE=1 >> PS3-перрывания от портов RB4, RB5, RB6 и RB7
TRISA=0b00000001;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000111; // порт работает на выход есои
}


void I2CInit(void){
TRISC3 = 1; /* SDA and SCL as input pin */
TRISC4 = 1; /* these pins can be configured either i/p or o/p */
SSPSTAT |= 0x80; /* Slew rate disabled */
SSPCON = 0x28; /* SSPEN = 1, I2C Master mode, clock = FOSC/(4 * (SSPADD + 1)) */
SSPADD = 0x28; /* 100Khz @ 4Mhz Fosc */
}

ну и uart.

#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
#define HIGH_SPEED 1

#if NINE == 1
#define NINE_BITS 0x40
#else
#define NINE_BITS 0
#endif

#if HIGH_SPEED == 1
#define SPEED 0x4
#else
#define SPEED 0
#endif


#define RX_PIN TRISC7
#define TX_PIN TRISC6


/* Serial initialization */
#define init_comms()\
RX_PIN = 1; \
TX_PIN = 1; \
SPBRG = DIVIDER; \
RCSTA = (NINE_BITS|0x90); \
TXSTA = (SPEED|NINE_BITS|0x20)

void putch(unsigned char);
unsigned char getch(void);
unsigned char getche(void);

#endif

честно говоря это стандартные бибилотеки ......I2C и uart.
reg33 вне форума   Ответить с цитированием
Старый 28.08.2018, 11:02   #104
siargy
Senior Member
 
Аватар для siargy
 
Регистрация: 03.07.2007
Адрес: Минск
Возраст: 39
Сообщений: 872
Вес репутации: 1338/64
siargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

предлагаю начать с начала, и в пустой программе, в бесконечном цикле подергать ножкой.
__________________
Построил тепличку, посеял литопсы, вырастил кактусы

Последний раз редактировалось siargy; 28.08.2018 в 11:08.
siargy вне форума   Ответить с цитированием
Старый 28.08.2018, 12:17   #105
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,797
Вес репутации: 5397/164
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от reg33 Посмотреть сообщение
честно говоря это стандартные бибилотеки ......I2C и uart.
в языке Си нет "стандартных" библиотек I2C и uart. Бывают какие-то примеры от производителя.
Greg вне форума   Ответить с цитированием
Старый 11.09.2018, 17:35   #106
reg33
Member
 
Регистрация: 11.11.2012
Возраст: 36
Сообщений: 69
Вес репутации: 85/0
reg33 will become famous soon enough
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от Greg Посмотреть сообщение
в языке Си нет "стандартных" библиотек I2C и uart. Бывают какие-то примеры от производителя.
Добрый день!
С горем пополам UART заработал. Ну стал философский вопрос как реализуется код чтоб к примеру контроллер выполнял задачу динамической индикации индикации и одновременно реагировал (слушал) на команды из вне по UART ? ???

За ранее благодарен !
reg33 вне форума   Ответить с цитированием
Старый 11.09.2018, 18:08   #107
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,959
Вес репутации: 3578/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

reg33
можно задачи в суперлупе, с обслуживанием uart в прерывании.
как пример.
besogon вне форума   Ответить с цитированием
Старый 24.09.2018, 18:03   #108
_WIL_
Senior Member
 
Регистрация: 26.11.2009
Адрес: Беларусь
Сообщений: 709
Вес репутации: 1181/52
_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

Дабы не изобретать велосипед решил погуглить готовый код для управления ADF4351 и много где MOD вычисляется так.

long M_Mod = PFDFreq * (100000 / ChanStep) / 100000;

Все скопипастили индусский код, или в этом есть какой то непонятный мне смысл?
_WIL_ вне форума   Ответить с цитированием
Старый 24.09.2018, 18:49   #109
paul
Senior Member
 
Регистрация: 23.08.2007
Адрес: Lipetsk
Возраст: 43
Сообщений: 218
Вес репутации: 425/48
paul is just really nicepaul is just really nicepaul is just really nicepaul is just really nicepaul is just really nice
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от _WIL_ Посмотреть сообщение
Дабы не изобретать велосипед решил погуглить готовый код для управления ADF4351 и много где MOD вычисляется так.

long M_Mod = PFDFreq * (100000 / ChanStep) / 100000;

Все скопипастили индусский код, или в этом есть какой то непонятный мне смысл?
Можно предположить, что точность при делении пытаются повысить.
paul вне форума   Ответить с цитированием
Старый 30.10.2018, 20:37   #110
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 45
Сообщений: 1,539
Вес репутации: 2283/77
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Ко мне тут приятель обратился, он на АВРаз что-то варганит.
Пожаловался на проблему,нужно всего-то наложить маску на переменную и проверить два младших бита:

uint16_t Var;


if ( Var & 0x3) - не работает
if ( Var & 0x0003) - не работает
if ( Var & (~0xFFFC)) - работает.


и тут я задумался, ведь в первом и втором выражениях, вменяемый компилятор обязан сначала привести все к самому длиннному оператору, в данном случае 16-битному, а потом уже делать "И".
Более того - он все эти три варианта скомпилирует в одно и то-же.


Есть какой-то подвох, или это у него просто комплилятор такой говеный, не соответствующий стандартам?


Проверил на Кейле - там все ОК.
DimaS вне форума   Ответить с цитированием
Старый 30.10.2018, 22:15   #111
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,466
Вес репутации: 2482/76
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от DimaS Посмотреть сообщение
Ко мне тут приятель обратился, он на АВРаз что-то варганит.
Пожаловался на проблему,нужно всего-то наложить маску на переменную и проверить два младших бита:

uint16_t Var;


if ( Var & 0x3) - не работает
if ( Var & 0x0003) - не работает
if ( Var & (~0xFFFC)) - работает.


и тут я задумался, ведь в первом и втором выражениях, вменяемый компилятор обязан сначала привести все к самому длиннному оператору, в данном случае 16-битному, а потом уже делать "И".
Более того - он все эти три варианта скомпилирует в одно и то-же.


Есть какой-то подвох, или это у него просто комплилятор такой говеный, не соответствующий стандартам?


Проверил на Кейле - там все ОК.
Если мне память не изменяет, операнды внутри if приводятся к int. А компилятор у него действительно говённый
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 31.10.2018, 10:41   #112
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 48
Сообщений: 158
Вес репутации: 1161/28
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от DimaS Посмотреть сообщение
и тут я задумался, ведь в первом и втором выражениях, вменяемый компилятор обязан сначала привести все к самому длиннному оператору, в данном случае 16-битному
Числовые константы по умолчанию имеют тип signed int - т.е. первых два варианта идентичны. Нехай попробует 0x3u, 3u. Третий-же вариант - по-хорошему компилятор должен свести к той-же 3-ке - но если билд не оптимизированный - может и буквально инверсию во время выполнения применить. А компилятор нигде ассемблерный листинг не оставляет, чтобы инструкции для каждого случая сравнить?
siarzhuk вне форума   Ответить с цитированием
Старый 31.10.2018, 17:06   #113
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 45
Сообщений: 1,539
Вес репутации: 2283/77
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
А компилятор нигде ассемблерный листинг не оставляет, чтобы инструкции для каждого случая сравнить?

Не знаю, спрошу.
Он жаловался на то, что в случае 0х3 комилятор воспринимал это как байт а не 16-битное слово.
DimaS вне форума   Ответить с цитированием
Старый 31.10.2018, 19:47   #114
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 45
Сообщений: 1,539
Вес репутации: 2283/77
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Еще одна загадка:
Есть переменная:
Код:
 union {
     unsigned __int8  bt[8];
     unsigned __int64 llwrd;
 } inword[2];
inword[0] - входное 64 битное число
inword[1] - выходное 64 битное число


нужно первое переписать во второе, поменяв порядок байтов по определенному паттерну, и в каждом выходном байте заменить FF на 00 а 00 на FF.


Вот так не работает, на выходе спонтанные глюки:
Код:
for(i = 0; i < 8; i++)  {
    inword[1].bt[i] = inword[0].bt[SwapPattern[i]];  // swap bytes

    if(inword[1].bt[i] == 0x00)  inword[1].bt[i] = 0xff;     // swap 00<>FF
    else if(inword[1].bt[i] == 0xff)    inword[1].bt[i] = 0x00; 
}

А вот так - работает!
Код:
for(i = 0; i < 8; i++)  {
    inword[1].bt[i] = inword[0].bt[SwapPattern[i]];  // swap bytes
}

for(i = 0; i < 8; i++)  {
    if(inword[1].bt[i] == 0x00)  inword[1].bt[i] = 0xff;     // swap 00<>FF
    else if(inword[1].bt[i] == 0xff)    inword[1].bt[i] = 0x00; 
}
DimaS вне форума   Ответить с цитированием
Старый 31.10.2018, 20:28   #115
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 795
Вес репутации: 1418/54
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

а так?
Код:
for(i = 0; i < 8; i++)  {
 inword[1].bt[i] =  (inword[0].bt[SwapPattern[i]]==0)||(inword[0].bt[SwapPattern[i]]==1) 
                  ? inword[0].bt[SwapPattern[i]]^0xFF : inword[0].bt[SwapPattern[i]] ;
}
DmitrijVDN вне форума   Ответить с цитированием
Старый 31.10.2018, 22:58   #116
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 45
Сообщений: 1,539
Вес репутации: 2283/77
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Так не пробовал. Но что не правильного в написанном выше?
DimaS вне форума   Ответить с цитированием
Старый 01.11.2018, 23:06   #117
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 795
Вес репутации: 1418/54
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

стек рушится или нет?
DmitrijVDN вне форума   Ответить с цитированием
Старый 02.11.2018, 12:19   #118
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,959
Вес репутации: 3578/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

DmitrijVDN
без disasm всё это малопродуктивно.

можно всегда глянуть, что сгенерировало и глянуть.

так-то сложно будет разобраться, что в конце-концов там происходит.

DimaS
по моему опыту Ваш добрый друг лютует. сложно делает там где не надо.

есть простая логика, да - как обработать один байт.
можно сделать для байта
Код:
__attribute__((const, leaf))
u8 xxx_byte_proc(const u8 input)
{
...
}
а потом
Код:
...
for(uf sel = 0; sel < 8; ++sel){
	outword.bt[sel] = xxx_byte_proc(inword.bt[sel]);
...
}
я уже не говорю про то, что оказывается inword[1] - это уже у него outword. так вообще нельзя делать - это уже обман читающих код.

если делать нормально то и будет нормально.
besogon вне форума   Ответить с цитированием
Старый 02.11.2018, 15:18   #119
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 45
Сообщений: 1,539
Вес репутации: 2283/77
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Что "ненормального" в коде из сообщения #114?
Ну кроме названия inword, тут я согласен.


Да, это кстати не МК а РС, на билдере.
DimaS вне форума   Ответить с цитированием
Старый 02.11.2018, 15:28   #120
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,959
Вес репутации: 3578/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

DimaS
в том, что там где была возможность сделать просто - сделано сложно.

сделано сложно, плохо понятно и возникли проблемы - этот код начали показывать, так как проблемный код.

но код написан так, как будто его один раз написали и все. и никто не будет смотреть.
но мы-то с Вами вернулись и его обсуждаем.

понятное дело, что это моя точка зрения и может не совпадать с Вашей.
у меня есть определенный опыт работы в команде и у меня сложились определенные мысли относительно того, что такое хорошо и что такое плохо.

может быть у Вас другой опыт.
besogon вне форума   Ответить с цитированием
Старый 02.11.2018, 15:39   #121
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 795
Вес репутации: 1418/54
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

может то что цикл считает от 0 до 8 , а последний элемент массива 7 или нет?
DmitrijVDN вне форума   Ответить с цитированием
Старый 02.11.2018, 15:55   #122
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,959
Вес репутации: 3578/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

DmitrijVDN
вроде нет.
цикл перебирает от 0 до 7. как 8 - выходит.
besogon вне форума   Ответить с цитированием
Старый 02.11.2018, 16:50   #123
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 795
Вес репутации: 1418/54
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

да, глупость сморозил.
DmitrijVDN вне форума   Ответить с цитированием
Старый 02.11.2018, 17:00   #124
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 45
Сообщений: 1,539
Вес репутации: 2283/77
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от besogon Посмотреть сообщение
DimaS
в том, что там где была возможность сделать просто - сделано сложно.

сделано сложно, плохо понятно и возникли проблемы - этот код начали показывать, так как проблемный код.

но код написан так, как будто его один раз написали и все. и никто не будет смотреть.
но мы-то с Вами вернулись и его обсуждаем.

понятное дело, что это моя точка зрения и может не совпадать с Вашей.
у меня есть определенный опыт работы в команде и у меня сложились определенные мысли относительно того, что такое хорошо и что такое плохо.

может быть у Вас другой опыт.

В данном случае неважно "что такое хорошо и что такое плохо", тем более что я уже согласился, что назвать и входное и выходное число "inword" не очень корректно, но почему тот код не работает?
Оттого что одинбудет inword а другой outword - он ведь работать не начнет?
DimaS вне форума   Ответить с цитированием
Старый 02.11.2018, 22:52   #125
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,959
Вес репутации: 3578/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

DimaS
у Вашего друга есть возможность использовать gcc для работы с avr?
besogon вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Электропривод NSS Источники питания и силовая электроника 32 29.01.2012 14:17
MAX232 и USART, отсутствует сигнал на выходе. EviL_LaugH Общетехнические вопросы 15 31.01.2011 00:40
Проблема с прерыванием PIC 16F877A . chiraevevgenii Вопросы начинающих 8 13.01.2011 20:13
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00


Часовой пояс GMT +3, время: 06:32.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot