Современная электроника №1/2022
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 55 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 1 2022 лизации микроконтроллера на языке С с применением стандартных функций CodeVisionAVR. Текст программы: #asm .equ __i2c_port=0x1b // для связи через шину I2C используем .equ __scl_bit=0 // 0 бит и .equ __sda_bit=1 // 1 бит порта PA микроконтроллера AT90S8515 #endasm #asm .equ __lcd_port=0x15 // для под- ключения LCD-дисплея используем порт РС #endasm #include <lm75.h> // подключение заголовочных файлов #include <stdio.h> // в которых содержатся #include <90s8515.h> // прототи- пы функций #include <delay.h> #include <lcd.h> char lcd_buffer[33]; // объяв- ление массива данных для вывода на экран дисплея void main(void) // основная функ- ция программы { int i[3]={0,1,7}; // массив, в котором хранятся адреса датчиков char sign; int temp, j; lcd_init(16); // инициализация дисплея i2c_init(); // инициализация шины I2C // инициализация датчиков LM75AD с адресом 0, 1 и 7 // OS выход активный – высокий уровень // нижний предел температуры 0 датчика 20°C // верхний предел температуры 0 датчика 25°C lm75_init(0,20,25,1); // нижний предел температуры 1 и 7 датчиков –20°C // верхний предел температуры 1 и 7 датчиков 22°C lm75_init(1,-20,22,1); lm75_init(7,-20,22,1); // бесконечный цикл передачи тем- пературы while (1) { for (j=0;j<3;j++) { // определяем температуру очеред- ного датчика LM75AD temp=lm75_temperature_10(i[j]); sign='+'; if (temp<0) { sign='-'; temp=-temp; } // запись полученного значения // и дополнительного текста в мас- сив lcd_buffer sprintf(lcd_buffer,"t=%c%i.%u C", sign,temp/10,temp%10); lcd_clear(); // очистка дисплея lcd_puts(lcd_buffer); // вывод данных из массива lcd_buffer на экран дисплея delay_ms(2000); // задержка 2000 мс } } } . Введём текст программы в окне кода CodeVisionAVR и запустим компиля- цию (рис. 12). После чего перейдём в Proteus и в окне свойств микросхемы AT90S8515 укажем путь к файлу про- шивки на диске компьютера. Запу- стим моделирование собранной схе- мы, результат которого представлен на рис. 13, и проанализируем её работу. После запуска программа инициали- зации определяет биты порта микро- контроллера для связи через шину I 2 C. Для этого в программу включен ассем- блерный код: #asm .equ __i2c_port=0x1b .equ __scl_bit=0 .equ __sda_bit=1 #endasm, в котором директива ассемблера .equ присваивает идентификатору __i2c_ port значение, соответствующее адре- су регистра PORTA порта РА микрокон- троллера. Этот адрес прописан в строке sfrb PORTA=0x1b ; находящегося в поддиректории \INC файла 90s8515.h. Идентификаторам __scl_bit и __sda_bit директивы .equ присваивают значения номеров соответствующих битов, кото- рые будут использованы для передачи данных через линии SCL, SDA шины I 2 C. Директива #asm оповещает компилятор о начале ассемблерного кода, а дирек- тива #endasm – о его завершении. В следующем блоке кода объявлен порт микроконтроллера для подклю- чения LCD-дисплея: Рис. 11. Закладка Code Generation окна настройки параметров проекта CodeVisionAVR Рис. 12. Программа передачи по I 2 C измеренной датчиками LM75AD температуры в окне кода CodeVisionAVR и результат её компиляции
RkJQdWJsaXNoZXIy MTQ4NjUy