Принципы организации обмена данными по последовательному интерфейсу RS-232C между микроконтроллером AVR АТMEGA128 и персональным компьютером
Приобретение навыков самостоятельной работы по сопряжению макета на базе микроконтроллера AVR АТMEGA128 с компьютером. Принципы управления двунаправленным обменом данными. Программирование последовательного интерфейса в операционных системах Windows.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 16.06.2011 |
Размер файла | 365,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Отчет
по лабораторной работе
на тему:
"Принципы организации обмена данными по последовательному интерфейсу RS-232C между микроконтроллером AVR АТMEGA128 и персональным компьютером"
Цель работы: приобретение навыков самостоятельной работы по сопряжению макета на базе микроконтроллера AVR АТMEGA128 с ПК с помощью последовательного интерфейса RS-232C; анализ принципов программного управления двунаправленным обменом данными по последовательному интерфейсу RS-232C.
Задание
Вариант №4
Разработать программу передачи 8 чисел (от 0 до 7) из микроконтроллера AVR ATMEGA 128 в ПЭВМ по интерфейсу RS232C в соответствие с протоколом: модуль USART0, скорость обмена данными 14400 бит/с, режим обмена асинхронный, 6 битов данных без бита четности. При передаче зажигать светодиоды, соответствующие передаваемому числу.
Выполнение
Исходный модуль разработанной программы:
#include <delay.h>
#include <mega128.h>
init_ports()
{
DDRD = 0xFF; //0xff;
PORTD = 0xff; //0xff;
}
InitUsart( ) //инициализация модуля USART1
{
UCSR0A=0x00; //установка стандартного режима задания скорости передачи данных;
UCSR0B=0x18; // установка 3-го и 4-го битов регистра UCSR1B для
//инициализации USART1 в режиме приемника и передатчика;
UCSR0C=0x02; //установка формата кадра: 7 бит данных (см. табл. 1.1 );
UBRR0H=0x00; // установка значения делителя (35) соответствующего
UBRR0L=47; // скорости приема данных 19200 бит/с (см. табл. 1.3)
}
void UsartWrite(unsigned char c) // функция записи данных в СОМ-порт
{
UDR0 = c; //запись в регистр данных модуля USART1
while (!(UCSR0A & 0x40)){} //проверка (рассмотреть самостоятельно)
UCSR0A = 0x40;
}
unsigned char UsartRead() // функция чтения из СОМ-порта
{
unsigned char lastValue = 0;
while(!(UCSR0A & 0x80)) {};
lastValue = UDR0;
return lastValue;
}
void main() // основная часть программы;
{
unsigned char k =0;
InitUsart();
init_ports(); // инициализация модуля USART
while (1){
for (k = 0; k < 8; ++k) {
UsartWrite(k);
switch(k)
{
case 0:
PORTD = 0xFF;
PORTD.0=0;
break;
case 1:
PORTD = 0xFF;
PORTD.1=0;
break;
case 2:
PORTD = 0xFF;
PORTD.2=0;
break;
case 3:
PORTD = 0xFF;
PORTD.3=0;
break;
case 4:
PORTD = 0xFF;
PORTD.4=0;
break;
case 5:
PORTD = 0xFF;
PORTD.5=0;
break;
case 6:
PORTD = 0xFF;
PORTD.6=0;
break;
case 7:
PORTD = 0xFF;
PORTD.7=0;
break;
}
// выполнить передачу k в СОМ-порт;
delay_ms(500);
PORTD = 0xFF;
}
break;
}
}
Рис
Вывод: на данной лабораторной работе я приобрел практические навыки самостоятельной работы по сопряжению макета на базе микроконтроллера AVR АТMEGA128 с ПК с помощью последовательного интерфейса RS-232C. В состав микроконтроллера AVR АТMEGA128 входят модули USART0 и USART1. Каждый модуль USART состоит из трех частей: блока тактирования (включает в себя устройство синхронизации (при работе в синхронном режиме) и контроллер скорости передачи данных); блока передатчика (включает одноуровневый буфер, регистр сдвига, схему формирования четности (для синхронного режима) и схему управления); блока приемника (состоит из схемы восстановления тактового сигнала и данных, схемы контроля четности (для синхронного режима), буферного и сдвигового регистров, а так же схемы управления). Для настройки модуля USART0 использовались следующие программно-доступные регистры: UDR1 - регистр данных; UСSR1A, UСSR1B, UСSR1C - регистры управления/статуса; UBRR1H, UBRR1L - регистры управления скорости передачи данных
Цель работы: приобретение навыков самостоятельной работы по сопряжению макета МЛ-2, построенного на базе FPGA ACEX и микроконтроллера AVR ATMEGA 128, с ПЭВМ при помощи последовательного интерфейса RS-232C. Осуществить передачу данных в ПЭВМ.
Задание:
Вариант №6
Разработать программу передачи 200 чисел (от 0 до 199) от лабораторного макета в ПЭВМ по интерфейсу RS232C в соответствие с протоколом: скорость обмена данными 38400 бит/с, 8 битов данных, без бита четности, два стоповых бита. При передаче зажигать светодиоды, соответствующие передаваемому числу.
Выполнение:
Файл UARTTransmitter:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity UARTTransmitter is
generic
(
frequency : integer;
baud : integer
);
port
(
clk : in std_logic;
txd : out std_logic;
txd_data : in std_logic_vector(7 downto 0);
txd_start : in std_logic;
txd_busy : out std_logic
);
end entity UARTTransmitter;
architecture UARTTransmitterArch of UARTTransmitter is
-- defining types
type state_type is (idle, start, bit0, bit1, bit2, bit3, bit4, bit5, bit6, bit7, stop1, stop2);
-- defining signals
signal state : state_type := idle; -- transmitter's state
signal data : std_logic_vector(7 downto 0);
signal baud_tick : std_logic;
signal busy : std_logic := '0';
signal baud_divider : integer range 0 to (frequency/100 + baud/100 - 1) := 0;
begin
-- assignments
txd_busy <= busy; busy <= '0' when state = idle else '1';
-- processes
baud_gen : process(clk)
begin
if clk'event and clk = '1' then
if busy = '1' then
baud_divider <= baud_divider + (baud/100);
if baud_divider > (frequency/100) then
baud_tick <= '1';
baud_divider <= 0;
else
baud_tick <= '0';
end if;
end if;
end if;
end process baud_gen;
--
state_proc : process(clk)
begin
if clk'event and clk = '1' then
case state is
when idle =>
if txd_start = '1' then
state <= start;
end if;
when start =>
if baud_tick = '1' then
state <= bit0;
end if;
when bit0 =>
if baud_tick = '1' then
state <= bit1;
end if;
when bit1 =>
if baud_tick = '1' then
state <= bit2;
end if;
when bit2 =>
if baud_tick = '1' then
state <= bit3;
end if;
when bit3 =>
if baud_tick = '1' then
state <= bit4;
end if;
when bit4 =>
if baud_tick = '1' then
state <= bit5;
end if;
when bit5 =>
if baud_tick = '1' then
state <= bit6;
end if;
when bit6 =>
if baud_tick = '1' then
state <= bit7;
end if;
when bit7 =>
if baud_tick = '1' then
state <= stop1;
end if;
when stop1 =>
if baud_tick = '1' then
state <= stop2;
end if;
when stop2 =>
if baud_tick = '1' then
state <= idle;
end if;
end case;
end if;
end process state_proc;
--
data_load_proc : process(clk)
begin
if clk'event and clk = '1' then
if txd_start = '1' then
data <= txd_data;
end if;
end if;
end process data_load_proc;
--
txd_proc : process(clk)
begin
if clk'event and clk = '1' then
case state is
when idle => txd <= '1';
when start => txd <= '0';
when bit0 => txd <= data(0);
when bit1 => txd <= data(1);
when bit2 => txd <= data(2);
when bit3 => txd <= data(3);
when bit4 => txd <= data(4);
when bit5 => txd <= data(5);
when bit6 => txd <= data(6);
when bit7 => txd <= data(7);
when stop1 => txd <= '1';
when stop2 => txd <= '1';
end case;
end if;
end process txd_proc;
end UARTTransmitterArch;
Файл lab3:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
library altera;
use altera.maxplus2.all;
entity lab3 is
port(clk:in std_logic;
txd:out std_logic;
-- LED control signals (inverted!!!)
led:out std_logic_vector(0 to 7));
end lab3;
architecture lab3 of lab3 is
attribute altera_chip_pin_lc : string;
attribute altera_chip_pin_lc of clk : signal is "@183";
attribute altera_chip_pin_lc of txd : signal is "@131";
attribute altera_chip_pin_lc of led : signal is "86,87,88,89,90,92,93,94";
-- other
signal out_cnt:positive;
signal str_counter:natural;
-- COM-port control signals
signal txd_start:std_logic;
signal txd_busy:std_logic;
signal txd_data, counter:std_logic_vector(7 downto 0);
component UARTTransmitter
generic
(
frequency : integer;
baud : integer
);
port
(
clk : in std_logic;
txd : out std_logic;
txd_data : in std_logic_vector(7 downto 0);
txd_start : in std_logic;
txd_busy : out std_logic
);
end component;
begin
process(clk) is
begin
if rising_edge(clk) then
if txd_busy='0' then
txd_data<=conv_std_logic_vector(str_counter,8);
led <= not txd_data;
if (str_counter>=199) then str_counter <= 0;
else str_counter <= str_counter+1;
end if;
end if;
txd_start<='1';
end if;
end process;
TRANSMITTER : UARTTransmitter
generic map
(
frequency => 50000000,
baud => 38400
)
port map
(
clk => clk,
txd => txd,
txd_data => txd_data,
txd_start => txd_start,
txd_busy => txd_busy
);
Рис
Программа Terminal:
Вывод: на данной лабораторной работе я приобрел навыки самостоятельной работы по сопряжению макета МЛ-2, построенного на базе FPGA ACEX и микроконтроллера AVR ATMEGA 128, с ПЭВМ при помощи последовательного интерфейса RS-232C. Также было осуществлена передача данных в ПЭВМ, это 200 чисел (от 0 до 199). При передаче числа из макета в ПЭВМ зажигались светодиоды, соответствующие передаваемому числу.
Рис
Вывод: на данной лабораторной работе я изучил возможности программирования последовательного интерфейса в операционных системах Windows с использованием стандартных функций интерфейса WIN API. В ходе выполнения работы была написана и отлажена программа для приема данных от внешнего устройства с использованием стандартных функций интерфейса WIN API и проверена её работоспособность.
микроконтроллер программирование интерфейс данные
Размещено на Allbest.ru
Подобные документы
Операция обмена данными между прикладной программой и шиной USB путем передачи буферов памяти. Основные характеристики каналов. Аппаратная часть USB. Физическая топология шины. Конструкция кабелей и коннекторов. Способы питания устройств от сети.
контрольная работа [218,4 K], добавлен 27.01.2014Просмотр, запись и чтение данных буфера обмена. Динамический обмен данными (DDE), способы его организации. Атомы в Windows, их понятие и функции. Особенности задания параметра lParam сообщений DDE. Обмен и передача данных между клиентом и сервером.
лекция [303,7 K], добавлен 24.06.2009Описание входных и выходных документов и сообщений. Проектирование реляционной базы данных. Разработка механизмов управления данными в базе при помощи триггеров. Разграничение полномочий пользователя. Организация обмена данными между приложениями.
курсовая работа [1,6 M], добавлен 22.06.2011Мониторинг эффективности операционных систем. Обеспечение программам возможности осуществлять обмен данными с внешними устройствами. Методы управления памятью в операционных системах. Основные различия между статическим и динамическим связыванием.
практическая работа [3,0 M], добавлен 17.05.2022Анализ современного состояния систем автоматизации управления данными; учет инфраструктуры информационной системы и требования к ресурсам организации. Разработка системы управления данными на базе SharePoint-сайта, программная реализация и внедрение.
диссертация [4,1 M], добавлен 10.11.2011Назначение буфера обмена, управление его данными в среде Windows. Взаимодействие между владельцем и клиентом буфера. Данные и тип дескриптора, для каждого типа предопределенных форматов. Воспроизведение данных буфера обмена с задержкой, окна просмотра.
реферат [58,9 K], добавлен 04.10.2010Системный подход к программированию в операционных системах. Разработка программы, выполняющей запуск программ по расписанию. Понятие интерфейса и его назначение. Создание алгоритма и программы на его базе. Текст программы и руководство пользователя.
курсовая работа [581,0 K], добавлен 13.11.2009Методы и приемы работы в операционной системе Windows XP, часто используемой при работе с персональным компьютером. Средства по настройке и конфигурации операционной системы. Соответствие используемых аппаратных средств потребностям пользователя.
курсовая работа [4,7 M], добавлен 15.07.2009Основные устройства, входящие в состав компьютера. Краткий обзор операционных систем. Рабочий стол и его структура. Запуск стандартных программ. Создание и перемещение папок и файлов с помощью буфера обмена и мыши. Просмотр ресурсов локальной сети.
отчет по практике [3,0 M], добавлен 02.10.2012Характеристика буфера обмена как области памяти, резервируемой системой Windows для организации обмена данными между приложениями. Копирование и перемещение файлов как функции буфера обмена. Изучение абсолютной и относительной адресации ячеек MS Excel.
контрольная работа [13,9 K], добавлен 11.09.2011