СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №9/2013
ИНЖЕНЕРНЫЕ РЕШЕНИЯ 53 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 9 2013 Нажав кнопку OK, получаем готовый текст подпрограммы для матрицы сое- динений, т.е. инициализации портов ввода/вывода: void Port_IO_Init() { P0MDIN = 0xF3; P0MDOUT = 0xD0; P1MDOUT = 0x01; P0SKIP = 0x0F; P1SKIP = 0x02; XBR0 = 0x0A; XBR1 = 0x50; } Кроме этого, сгенерируется текст подпрограммы инициализации всех устройств МК, объединяющей под- программы, которые уже были полу- чены ранее: void Init_Device(void) { PCA_Init(); SPI_Init(); Port_IO_Init(); Oscillator_Init(); } Далее выбираем File , и в открыв- шемся меню выбираем Save Source As … В открывшемся окне назначаем назва- ние файла, например DDS.c . Это будет «болванка» нашей программы, содер- жащая инициализацию всех устройств МК. К ней требуется добавить только вывод кодов в синтезатор частоты. Приступаем к «ручному» программи- рованию (в файле DDS.c ). Во-первых, заводим переменную в виде следую- щей структуры, а точнее – совмещения: union { unsigned short US; // U.UB[ 0]- Ст.б. unsigned char UB[1]; // U.UB[ 1]- Мл.б. }U; // U.US – 2-байтное ushort число. Несмотря на кажущуюся простоту, вышеприведённый текст, на взгляд автора, нуждается в пояснении. Дело в том, что интерфейс SPI является 8-раз- рядным (или однобайтовым, т.е. выво- димые числа типа unsigned char), а чис- ла, которые требуется ввести в DDS, – двухбайтовые (типа unsigned short). Для вывода двухбайтового числа по одно- байтовому интерфейсу его необходи- мо разбить на младший и старший бай- ты и по очереди их вывести. Процедура отнимает некоторое время и дополни- тельную память МК, отводимую под- программе разбивки. Если в такой подпрограмме присутствуют опера- ции умножения и деления, то может потребоваться обращение к библи- отечным функциям, а это ещё более усложнит процедуру разбивки. Кроме того, в памяти МК должны храниться как само 2-байтовое число, так и два 1-байтовых числа, т.е. использовать- ся, как минимум, 4 байта. Всего этого можно избежать, если применить совмещение, в котором использован массив из двух однобай- товых элементов U.UB[ 0] и U.UB[ 1]. Этот массив совмещён (т.е. перераспределя- ет одно и то же место в памяти) с двух- байтовым числом U.US . Если, например, задать какие-либо значения указанным элементам массива, то совмещённое с массивом число U.US автоматически получит такое значение, что U.UB[ 0] будет старшим байтом этого числа, а U.UB [1] – младшим. Справедливо Реклама © СТА-ПРЕСС
RkJQdWJsaXNoZXIy MTQ4NjUy