Jump to content

Вопросы от начинающих по МК


Recommended Posts

2 часа назад, _abk_ сказал:

Или умножить на 49 и сдвинуть 7 раз.

или умножить на 98 и откинуть младший байт - тогда без всяких сдвигов обойдемся.

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

5 часов назад, LiVit сказал:

Кто-нибудь из тех, кто профессионально пишет для микроконтроллеров, использует float?

Наверняка. Ведь есть контроллеры с аппаратной реализацией операций с плавающей точкой.

Link to comment
Share on other sites

Транзисторы OptiMOS с ориентацией кристалла истоком вниз могут стать новым стандартом в изготовлении MOSFET

Традиционно производители дискретных силовых полупроводниковых приборов добиваются улучшения ключевых характеристик за счет усовершенствования кристалла. Однако специалисты компании Infineon добились впечатляющих результатов, сориентировав кристалл в корпусе истоком вниз. Такая ориентация кристалла применена, например, в серии MOSFET OptiMOS.

Подробнее

Новейшая архитектура Σ-Δ-АЦП предотвращает нарушение потока данных во время синхронизации распределенных систем

Критически важные распределенные системы требуют синхронного преобразования во всех подсистемах и непрерывного потока данных. Распределенные системы сбора данных могут быть синхронизированы как на основе АЦП последовательного приближения, так и на основе сигма-дельта (∑-Δ)-АЦП. Новый подход, основанный на преобразователе частоты дискретизации (SRC), содержащемся в микросхемах линейки AD7770 производства Analog Devices, позволяет достигать синхронизации в системах на основе сигма-дельта-АЦП без прерывания потока данных.

Подробнее

Как улучшить параметры преобразователей с помощью карбид-кремниевых модулей WolfPACK

Необходим быстродействующий преобразователь питания средней мощности с высоким КПД? Он должен быть компактным и недорогим? Решение – карбид-кремниевые модули средней мощности WolfPACK производства Wolfspeed. В статье рассмотрены основные особенности модулей WolfPACK и показано, что переход на эту универсальную и масштабируемую платформу позволяет не только быстро разработать новые устройства, но и без значительных затрат времени и средств модернизировать уже существующие схемы на традиционной элементной базе.

Подробнее

LI/PR2 – надежные и недорогие ИП от MORNSUN на DIN-рейку

Компания Mornsun выпустила три серии источников питания с креплением на DIN-рейку в форм-факторе Home Automation на популярные значения выходной мощности 30, 60 и 100 Вт (серии LI30-20/PR2, LI60-20/PR2, LI100-20/PR2). Эти источники питания относятся ко второму поколению продукции (R2) и характеризуются высокой надежностью и хорошей стоимостью.

Подробнее

полный пипец ...

патологическая неспособность действовать самостоятельно.

Мудрость приходит вместе с импотенцией...

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

Link to comment
Share on other sites

1. :
char days[][12] = {
    "Понедельник", "Вторник", "Среда", "Четверг",
    "Пятница", "Суббота", "Воскресенье"
};

2. :
Lcd_prints(7,0, FONT_1X,(unsigned char *)PSTR(days[2][12])); 
-----------------------------
Первое съело, второе не хочет.

Link to comment
Share on other sites

5 minutes ago, Юрий_Нд said:

там всё для stm32

Для STM32 там только аппаратно-зависимая часть. А остальное - общее. Слова выводятся посимвольно. Вот такая простая функция рисует строки:

	U8 *pcd8544_print(U8 *koi8){
	while(*koi8){
	U8 chr = *koi8;
	if(pcd8544_putch(chr) == chr) return koi8;
	++koi8;
	}
	return NULL;
	}

(правда, писал я это давненько, сейчас бы сделал более рационально все).

Если эта функция вернет не-NULL, значит, целиком строка на экран не влезла - нужно чуть подождать, чтобы пользователь первую строчку прочел, и сделать pcd8544_roll_screen().

А если есть проблемы собственно с С, советую Кернигана и Ритчи почитать, а после них можно еще о современном C11 (правда, порекомендовать ничего не могу на этот счет: вся литература, что я встречал по современному С, - лютое дерьмо; вот по старому С99 можно Богатырева почитать - рекомендую).

Link to comment
Share on other sites

От корки до корки, раз такая беда с языком! И упражнениями закрепить.

Указатели - это же так просто! И указатель - основной элемент языка. Нужно понимать, что такое указатель, массив, ссылка на переменную… Чем массив указателей отличается от двойного массива типа "char".

Edited by Eddy_Em
Link to comment
Share on other sites

Вы уж меня извините, но вместо Вашей простенькой функции с Керниган и Ритчи впридачу, я всё-таки предпочту переключатель switch.
Может быть этот оператор не шибко красиво смотреться будет, зато это понятно, прозрачно "и сейчас". И может быть, самое главное, кланяться никому не придётся.
В любом случае, большое спасибо за диалог, заходите почаще, 
С уважением ___________ Юрий.
п.с. "Полторы тыщи" страниц? Это что, через полгода мне программу свою написать из-за одной строчки?
Извиняйте.

Edited by Юрий_Нд
Link to comment
Share on other sites

А чего делать-то нужно? Просто писать дни недели? Ну так это легко (пусть N - номер дня недели, 0 - воскресенье; и тип строковых переменных можно спокойно на char поменять с  uint8_t):

const char *days = {"воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"};
	... // здесь что-то с N делают и проверяют, чтобы не вышло за пределы 0..6
	char *nxt = pcd8544_print(days[N]);
	if(nxt){
	  pcd8544_roll_screen();
	  pcd8544_print(nxt);
	}

И с Lcd_prints:

	Lcd_prints(7,0, FONT_1X, (unsigned char *)days[N]); 
	

// там тоже стоит uint8_t на обычный знаковый char поменять, чтобы не приводить типы вечно туда-сюда.

P.S. Да, полторы тысячи страниц. Или даже больше.

Либо человек учится, либо остается некомпетентным бездарем и городит непонятную фигню!

Вам же не западло было пару тысяч страниц литературы прочесть, прежде чем начать эффективно компьютер использовать? Вот и программирование - штука нелегкая. Я в свое время минимум тысяч 25 страниц разной литературы прочел, чтобы просто понять, что да как. А потом регулярно бестселлеры перечитываю: по линуксовым IPC; кнутовский "все про ТеХ"; Львовского о латехе; тех же Кернигана и Ритчи нет-нет, да почитаю; Хоровица и Хилла ну и т.д., и т.п.

И даташиты/мануалы постоянно читать приходится. И статьи о всяких разных алгоритмах и не только. И это при том, что я - не программист и не электронщик!

Link to comment
Share on other sites

В данном конкретном случае, всего лишь три слова:
Первый, второй, третий, в зависимости от переменной инт ноэл, принимающей значение 1, 2, 3.

------------------------------------------------------------------------------------------------------------------------------

Ну хорошо, допустим мне всё понятно в Вашем последнем сообщении.
Что ещё нужно подключать, какие библиотеки? Типа заголовочные и исходные файлы?

Edited by Юрий_Нд
Link to comment
Share on other sites

@Eddy_Em  Наверно, правильнее объявить не одинокий указатель, а массив указателей.

char *days[] = {"воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"};

 

Link to comment
Share on other sites

const char *number = {"первый", "второй", "третий"};

... // здесь что-то с N делают и проверяют, чтобы не вышло за пределы 0..2

char *nxt = pcd8544_print(days[2]);

if(nxt){   pcd8544_roll_screen();   pcd8544_print(nxt); }

--------------------------------------------------------

третий

----

верно?

 

19 минут назад, Yurkin2015 сказал:

массив указателей.

... а дальше?

Edited by Юрий_Нд
Link to comment
Share on other sites

51 минуту назад, Eddy_Em сказал:

Указатели...

Ну указатели "это ещё куда ни шло", по крайней мере не "Полторы тыщи" страниц.  За день-два можно и осилить.  С остальными иероглифами  мне вроде бы всё понятно. 
Да в принципе и с указателями, "не такой уж и тёмный этот лес". 
Я конечно не знаю что такое указатели,  но по-моему работать с ними уже умею?
-----------------------
Или Вы уже отдыхаете?
Ну тогда спокойной ночи.
Ещё раз большое спасибо Вам, за сегодняшний диалог,
С Уважением _____________ Юрий.

Link to comment
Share on other sites

Извиняюсь, а вот мне всё-таки не спится, потому что сейчас посмотрел на это всё и указатели...
 И понял, что нифига не понимаю.
Ну вот скажу я своему дисплею вывести мне слово "третий".
А он мне в ответ:"... ты чо, дурак что ли? А где номер строчки, позиции, размер шрифта? Где я это всё "лепить" буду? "Промежду" строчками что-ли"
И что мне ответить ему?
Типа ни фига не знаю, надо у Eddy_Em спросить?
Ну вот считайте, что уже спрашиваю...

Нет мужики, я пока за переключатель Switch.

Edited by Юрий_Нд
Link to comment
Share on other sites

50 minutes ago, Юрий_Нд said:

... а дальше?

а дальше просто передаёте в печать нужный указатель на строку, которую надо напечатать.

pcd8544_print(days[N]);

 

@Юрий_Нд Обычно у дисплеев есть команды, которые помещают курсор в нужное место. Сначала посылается команда установки курсора, а затем посылается текст для печати.

Link to comment
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

  • Сообщения

    • Поверьте, найти 6Н6П с идеально совпадающими половинками ничем не проще. Как то, проверял 6Н23П. Из 47 штук нашлась едва пара, с идентичными половинками. Что до подбора, достаточно собрать тестовый каскад, повторив режимы и нагрузки, при которых лампа работает в схеме. После чего, измерить Ку каскада, для разных ламп. Ставить, естественно, пару с наиболее совпадающими Ку. Измерение займёт минут 5, на лампу. Это более правильный путь, чем измерять S и Ri. Скажем, половинки с Ri 3.86 /  3.06 кОм и S 10.26 / 12.2, в реальном каскаде дадут очень близкое усиление, несмотря на разность параметров. Так что, стоит подбирать пары именно в тех режимах, в которых они будут работать в схеме.
    • Ага , можно . Только при его настройке будет меняться ток в плечах фазоинвертора , со всеми вытекающими.  В идеале ток анодов фазика должен быть равным и амплитуды на выходе фазика должны быть одинаковые по размаху, вот им вы этого и будете добиваться , и при хорошо подобранных выходных лампах , одинаковом их токе при одинаковом их смещении и правильно намотаном твз на анодах выходных ламп будет одинаковый размах. Естественно все это нужно проверять без ооос. Если же лампы например не подобраны , то при  одинаковом их токе , за счет подстройки смещения , размах будет разный и будет обеспечен высокий уровень четных гармоник . Короче , в рр все должно быть зеркально симметрично идеально. Зря люди утверждают что рр проще чем se в настройке.  Проще только получить красивые кни на одном уровне сигнала , и стоит этот уровень сместить вверх или вниз , то вся красота уползет.  Еще раз , в рр все должно быть идеально симметрично,  или это уже увесилитель для пьяной гулянки
    • С ЭДП тема хорошая, запаха нет, да, нужен объем и не слабый В части яхтеного лака, покрывал дерево, гляну может еще не высохли остатки, можно и им залить.  
    • Пришли полимерные конденсаторы 25х470 - попробую заменить в фильтре 25х1000,  проверить как пойдет Пока на тестах - выпрямитель в БП мостовой со средней точкой, дроссели 2х33 мкГн конденсаторы 2 по 25х1000, вторая ступень дроссели 2х1 мкГн конденсаторы 2 по  25х2200 переделывать без средней точки - конденсаторы тогда нужны на 50 В, хотя дросселей тогда 2 вместо 4 БП 330 Вт - 30 В 10 А греется только диодный мост 4 диода 20200 тут я перестраховался 20100 можно было поставить, но запаса по  обратному напряжению нет удачи
    • Мусора не должно быть. Посмотрите осциллографом если уровни меняются то анализатор должен так же принимать.
    • Чего-то не догоняю... база ВТ14 куда подключена? Хрень там написана. Объяснил? Перепелкин тоже не сразу всё знал и умел, понимать надо.
    • Прошу прощения, в спешке попутал полярность питания. Заработало. Осциллограф показал два сигнала под 90 градусов. Вопрос остался как подавить "мусор" на логическом анализаторе. Ведь оптический диск может быть поврежден а осциллографом этого не поймать. Установить подтягивающие резисторы к "0" на вход? У меня по умолчанию состояние входов "HI" то есть высокий логический уровень. Надо ставить какой то инвертор логических уровней?
  • Similar Content

    • By Super Akk
      Здравствуйте, я работаю в Proteus и у меня возникла ошибка Simulation is not running in real time due to excessive CPU load
      Подскажите пожалуйста как её исправить
      Код прошивки:
      #include <lm3s300.h> // Graphic Display functions #include <glcd.h> // Font used for displaying text // on the graphic display #include <font5x7.h> // Declare your global variables here void main(void) { unsigned char odin[] = { 0x08, 0x00, 0x08, 0x00, #ifndef _GLCD_DATA_BYTEY_ 0x00, 0x10, 0x18, 0x14, 0x10, 0x10, 0x7C, 0x00, #else 0x00, 0x00, 0x48, 0x44, 0x7E, 0x40, 0x40, 0x00, #endif }; // Declare your local variables here // Variable used to store graphic display // controller initialization data GLCDINIT_t glcd_init_data; // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); // Port D initialization // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0A output: Disconnected // OC0B output: Disconnected TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2A output: Disconnected // OC2B output: Disconnected ASSR=(0<<EXCLK) | (0<<AS2); TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20); TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (0<<CS20); TCNT2=0x00; OCR2A=0x00; OCR2B=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // Timer/Counter 2 Interrupt(s) initialization TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (0<<TOIE2); // External Interrupt(s) initialization // INT0: Off // INT1: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-14: Off // Interrupt on any change on pins PCINT16-23: Off EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00); EIMSK=(0<<INT1) | (0<<INT0); PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0); // USART initialization // USART disabled UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR1=(0<<AIN0D) | (0<<AIN1D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); // SPI initialization // SPI disabled SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); // TWI initialization // TWI disabled TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE); // Graphic Display Controller initialization // The KS0108 connections are specified in the // Project|Configure|C Compiler|Libraries|Graphic Display menu: // DB0 - PORTB Bit 0 // DB1 - PORTB Bit 1 // DB2 - PORTB Bit 2 // DB3 - PORTB Bit 3 // DB4 - PORTB Bit 4 // DB5 - PORTB Bit 5 // DB6 - PORTB Bit 6 // DB7 - PORTB Bit 7 // E - PORTC Bit 0 // RD /WR - PORTC Bit 1 // RS - PORTC Bit 2 // /RST - PORTC Bit 3 // /CS1 - PORTC Bit 4 // /CS2 - PORTC Bit 5 // Specify the current font for displaying text glcd_init_data.font=font5x7; // No function is used for reading // image data from external memory glcd_init_data.readxmem=NULL; // No function is used for writing // image data to external memory glcd_init_data.writexmem=NULL; glcd_init(&glcd_init_data); glcd_putimage(0,0, odin, GLCD_PUTCOPY); while (1) { // Place your code here } } Схема прикреплена ниже в архиве

      Схема.rar
    • By Н_Д_А
      Всем привет).
      Может, кому-то эта статья  сэкономит много времени и нервов. 
      Недавно  по работе встретился с интересной задачкой.
      Нужно было передать на железку по порту RS485 информацию для проверки работоспособности последней.
      Так как не всегда имеется в ремонте вся система, то для начала нужно было посмотреть, на заведомо исправной системе, что же там между ними (железками) передаётся.
      Логический анализатор показал что девайсы общаются по не совсем стандартному, а по  9ти битному протоколу (USART 9n1).
      А это усложняло задачу, так-так известные мне терминальные программы его не поддерживают.  И без бубна не обойтись))).
      Начались поиски решения.
      Через некоторое время стало понятно, что AVR позволяет это делать и даже в даташите подробно это описывает.
      Дело за малым. Реализация задуманного))). 
      Все регистры выставлены по документу………..Для Atmega8a.
      void USART_Init( unsigned int speed) //Инициализация модуля USART { UBRRH = (unsigned char)(speed>>8); UBRRL = (unsigned char)speed; UCSRB=(1<<RXEN)|( 1<<TXEN); //Включаем прием и передачу по USART UCSRB |= (1<<RXCIE); //Разрешаем прерывание при передаче UCSRA |= (1<<U2X); //удвоение скорости UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0); UCSRB |= (1<<UCSZ2); // Включаем 9bit режим // Обращаемся именно к регистру UCSRC (URSEL=1) // ассинхронный режим (UMSEL=0), без контроля четности (UPM1=0 и UPM0=0) // 1 стоп-бит (USBS=0), 8-бит посылка (UCSZ1=1 и UCSZ0=1) // если (UCSZ1=1 и UCSZ0=1 и UCSZ2=1) 9bit mode. // UCSRC |= (1<<UPM1);//четность } По даташиту передача 9го бита происходит установкой или сбросом TXB8. 
      То есть, установили бит, передаётся 1 в старшем 9ом разряде, сбросили – 0. 
      void USART_Transmit( unsigned int data ) // функция передачи 9ти бит из даташита. { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1<<UDRE)) ) ; /* Copy ninth bit to TXB8 */ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) //не понял, что они хотели этим сделать. UCSRB |= (1<<TXB8); /* Put data into buffer, sends the data */ UDR = data; } И вот незадача, числа размером до 1 байт передаются без проблем, а числа больше 0xFF (255) нет).
      А устройство передаёт числа до 510.
      Предлагаю решение.  Может и не самое лучшее, но вполне работоспособное.
      int main(void) { USART_Init (103);//9600 //------------------------------------------------------------------------------------ while(1) { for (i=0; i<22; i++) { code_simbol = simbol[i]; //символ из массива //-------------------------------------отправка в UART-------------------------------- if (code_simbol > 255) { pr=1; // флаг передачи символа больше 0xff (255 десятичное) } else { pr=0; // флаг передачи символа меньше 0xff } USART_Transmit(code_simbol,pr);//собственно сама функция отаравки } } } А теперь и сама функция передачи .
      void USART_Transmit( unsigned char data, uint8_t prisnak ) //Функция отправки по USART { while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема if (prisnak==1) { UCSRB |= (1<<TXB8); //устанавливаем для передачи еденицы в старшем разряде } else { UCSRB &= ~(1<<TXB8); //сбрасываем старший разряд } /* Put data into buffer, sends the data */ UDR = data; //Начало передачи данных asm volatile ("nop"); Соответственно если число для предачи мньше 256 мы передаём его при нулевом 9ом бите.
      Ну а если больше то 9й бит выставляем в единицу.
      А вот и результат.

       
    • By eyuw
      Б/у контролеры холодильной установки: 1) Eliwell 974LX  на atmega16A-PU , 3 реле - характеристики на фото.Цена 15 бел.руб. 2) Eliwell IDPlus974  на atmega32A-PU, 3 реле - характеристики на фото.Цена 18 бел.руб. Корпуса без передней панели закрывающей цифровой индикатор, без датчиков температуры! г.Толочин, Витебская обл. Отправка по Беларуси наложенным платежом. Покупатель также оплачивает почтовые расходы. 


    • By АртемК
      Уже весь интернет прошерстить, помогите найти, или где он приставует, чтоб его достать нужен очень срочно, или может у кого то есть куплю!

    • By Эдик Ибрагимов
      Использовать микроконтроллер семейства 8951
       
×
×
  • Create New...