Главная страница
Образовательный портал Как узнать результаты егэ Стихи про летний лагерь 3агадки для детей
qrcode

Методичка_ТулГУ_1986ВЕ91Т. Основы программирования 32-разрядных микроконтроллеров 1986ВЕ91Т компании Миландр


НазваниеОсновы программирования 32-разрядных микроконтроллеров 1986ВЕ91Т компании Миландр
АнкорМетодичка ТулГУ 1986ВЕ91Т.pdf
Дата23.05.2017
Размер2.03 Mb.
Формат файлаpdf
Имя файлаMetodichka_TulGU_1986VE91T.pdf
оригинальный pdf просмотр
ТипЛабораторная работа
#21020
страница5 из 5
КаталогОбразовательный портал Как узнать результаты егэ Стихи про летний лагерь 3агадки для детей
Образовательный портал Как узнать результаты егэ Стихи про летний лагерь 3агадки для детей
1   2   3   4   5

//Задается частота передачи данных
uint16_t
UART_WordLength;
//Задается число передаваемых
бит данных
uint16_t
UART_StopBits;
//Задается число стоповых битов
uint16_t
UART_Parity;
//Задается контрольна четность или на нечетность
uint16_t
UART_FIFOMode;
//Задается режим работы
FiFO
буфера (включен или выключен)
uint16_t
UART_HardwareFlowControl;
//Разрешение аппаратного контроля за линиями интерфейса
RS232C
}UART_InitTypeDef;
В программе, приведенной в приложении, частота передачи 115200, длина 8 бит,
1 стоп бит, без контроля четности, выключенный Fifo буфер, аппаратный контроль линий интерфейса.
Прием данных по интерфейсу и передача данных осуществляются с использованием системы прерываний. Процедура обработки прерываний void UART2_IRQHandler(void)
Эта процедура вызывается при приеме данных по интерфейсу RS232C, а также по окончании передачи данных по интерфейсу. Перед вызовом процедуры необходимо разрешить процедуру обработки прерываний.
UART_ITConfig (MDR_UART2, UART_IT_RX, ENABLE);
Данная процедура разрешает вызов процедуры обработки прерывания UART2 по приему одного байта данных.
43


Задание:
Задание 1
Измените частоту передаваемых данных по UART,
Задание 2
Напишите программу, которая в зависимости от принятого байта данных зажигает один из светодиодов, например, если это цифра, то загорается 1 светодиод, если русская маленькая буква, то второй светодиод, русская большая буква – третий светодиод, английская маленькая – четвертый, английская большая – пятый.
Приложение:
Текст программы
Файл main.c .
#include
#include
#include
PORT_InitTypeDef PortInit;
// определение переменной для инициализации портов ввода вывода
UART_InitTypeDef UART_InitStructure;
// определение переменной для инициализации UART
uint32_t uart2_IT_TX_flag = RESET;
// Флаг устанавливается после передачи одного байта
uint32_t uart2_IT_RX_flag = RESET;
// Флаг устанавливается после приема одного байта
void UART2_IRQHandler(void)
{ if (UART_GetITStatusMasked(MDR_UART2, UART_IT_RX) == SET)
//проверка установки флага прерывания по окончании приема данных
{
UART_ClearITPendingBit(MDR_UART2, UART_IT_RX);//
очистка
флага
прерывания
uart2_IT_RX_flag = SET;
//установка флага передача данных завершена
} if (UART_GetITStatusMasked(MDR_UART2, UART_IT_TX) == SET)
//проверка установки флага прерывания по окончании передачи данных
{
UART_ClearITPendingBit(MDR_UART2, UART_IT_TX); //
очистка
флага
прерывания
uart2_IT_TX_flag = SET;
//установка флага передача данных завершена
}
} int main (void) { static uint8_t ReciveByte=0x00; //
данные
для
приема
// Включение HSE осциллятора (внешнего кварцевого резонатора) для обеспечения стабильной
// частоты
UART
RST_CLK_HSEconfig(RST_CLK_HSE_ON); if (RST_CLK_HSEstatus() == SUCCESS){
/
/ Если HSE осциллятор включился и прошел текст
// Выбор HSE осциллятора в качестве источника тактовых импульсов для CPU_PLL
// и установка умножителя тактовой частоты CPU_PLL равного 7
RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, 7);
//
Включение
схемы
PLL
RST_CLK_CPU_PLLcmd(ENABLE); if (RST_CLK_HSEstatus() == SUCCESS){ //
Если
включение
CPU_PLL
прошло
успешно
RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV2); //
Установка
CPU_C3_prescaler = 2
RST_CLK_CPU_PLLuse(ENABLE);
// Установка CPU_C2_SEL от CPU_PLL выхода вместо CPU_C1 такта
/* Выбор CPU_C3 такта на мультиплексоре тактовых импульсов микропроцессора (CPU
clock MUX) */
RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
} else while(1);//
блок
CPU_PLL
не
включился
} else while(1);
// кварцевый резонатор HSE не включился
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTF, ENABLE);
//Разрешение тактирования порта F
// заполнение полей переменной
PortInit для обеспечения работы UART
PortInit.PORT_PULL_UP = PORT_PULL_UP_OFF;
44

PortInit.PORT_PULL_DOWN = PORT_PULL_DOWN_OFF;
PortInit.PORT_PD_SHM = PORT_PD_SHM_OFF;
PortInit.PORT_PD = PORT_PD_DRIVER;
PortInit.PORT_GFEN = PORT_GFEN_OFF;
PortInit.PORT_FUNC = PORT_FUNC_OVERRID;
PortInit.PORT_SPEED = PORT_SPEED_MAXFAST;
PortInit.PORT_MODE = PORT_MODE_DIGITAL;
// Конфигурация 1 ножки порта PORTF как выхода (UART2_TX)
PortInit.PORT_OE = PORT_OE_OUT;
PortInit.PORT_Pin = PORT_Pin_1;
PORT_Init(MDR_PORTF, &PortInit);
// Конфигурация 0 ножки порта PORTF как входа (UART2_RX)
PortInit.PORT_OE = PORT_OE_IN;
PortInit.PORT_Pin = PORT_Pin_0;
PORT_Init(MDR_PORTF, &PortInit);
//
Разрешение
тактирования
UART2
RST_CLK_PCLKcmd(RST_CLK_PCLK_UART2, ENABLE);
// Инициализация делителя тактовой частоты для UART2
UART_BRGInit(MDR_UART2, UART_HCLKdiv1);
// Разрешение прерывания для UART2
NVIC_EnableIRQ(UART2_IRQn);
//
Заполнение полей для переменной UART_InitStructure
UART_InitStructure.UART_BaudRate = 115200;
//тактовая частота передачи данных
UART_InitStructure.UART_WordLength = UART_WordLength8b; //
длина
символов
8
бит
UART_InitStructure.UART_StopBits = UART_StopBits1; //1
стоп
бит
UART_InitStructure.UART_Parity = UART_Parity_No; //
нет
контроля
четности
UART_InitStructure.UART_FIFOMode = UART_FIFO_OFF; //
выключение
FIFO
буфера
/* Аппаратный контроль за передачей и приемом */
UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_RXE | \
UART_HardwareFlowControl_TXE;
UART_Init (MDR_UART2, &UART_InitStructure); //
Инициализация
UART2
UART_ITConfig (MDR_UART2, UART_IT_RX, ENABLE);//
Разрешение
прерывания
по
приему
UART_ITConfig (MDR_UART2, UART_IT_TX, ENABLE);
//Разрешение прерывания по окончани передачи
UART_Cmd(MDR_UART2, ENABLE);
//Разрешение работы UART2
while (1) { while (uart2_IT_RX_flag != SET);
//ждем пока не не установиться флаг по приему байта
uart2_IT_RX_flag = RESET;
//
очищаем
флаг
приема
ReciveByte = UART_ReceiveData (MDR_UART2); //
считываем
принятый
байт
UART_SendData (MDR_UART2, ReciveByte);
//
отправляем
принятый
байт
обратно
while (uart2_IT_TX_flag != SET);
//
ждем
пока
байт
уйдет
uart2_IT_TX_flag = RESET;
//
очищаем
флаг
передачи
}
}
45

Лабораторная работа №8. Изучение модуля CAN
Цель работы:
Научиться использовать CAN интерфейс передачи данных в микроконтроллере
1986ВЕ91Т.
Приборы и материалы:
1.
Отладочная плата MDR1986VE91T Rev 4 2.
Программатор J-Link ARM
3.
Блок питания 5В, 1.4А
4.
ПК с установленной средой программирования Keil uVision
5.
Кабель для подключения по интерфейсу CAN
6.
Программа BUSMASTER 2.4.0 7.
Преобразователь USB_CAN типа VS_COM [3]
Порядок работы:
1.
Собрать лабораторную установку согласно рис. 8.1, подключить программатор и преобразователь USB_CAN к компьютеру.
Рисунок 8.1 Лабораторная установка: 1- Преобразователь CAN-USB типа VS-COM; 2-
Программатор TP-link (J-link); 3-Штеккер блока питания 5В; 4-Отладочная плата; 5- Кабель для подключения по интерфейсу CAN.
2. Запустить приложение BUSMASTER, Выполнить настройку приложения
CAN>Driver Selection>VS_com CAN-API.
3.
В появившемся окне Рис. 8.2 выполнить поиск VSCAN Search for Devices on COM-
Ports
46

Рисунок 8.2. Настройки программы BUSMASTER
4. Выполнить настройки устройства BAUDRATE=500 кбит/c, BTR0=0x01,
BTR1=0x
14. Согласно описанию SJA1000 [4], данные настройки обеспечивают длительность
Sync Segment - 1TQ, Propagation Segment 0TQ, Phase Segment 1 – 5TQ, Phase Segment 2 –
2TQ.
TQ=1/(8*500) c.
5. Выполнить CAN>Transmit>Configure для задания передаваемых из компьютера сообщений. Окно представлено на рис. 9.3. В поле Trigger Cyclic on Event задайте Time
Delay =500 мс. И нажмите ADD.
6.
В правой части окна рис 9.3 добавьте два сообщения с идентификаторами 0x1, 0x2 и произвольными данными. Тип сообщения Std (Стандартное). Передаваемые сообщения отображаются в TX Message List.
7. Теперь подготовим микроконтроллер для приема передачи данных. Данный проект удобно делать на базе проекта составленного в лабораторной работе № 4. Изучение работы таймера.
Скопируйте проект в отдельную папку. Откройте его. Выполните Proect>manage>Run
time....
В появившемся окне добавьте Drivers>CAN.
8.
Полный код программы с комментариями представлен в приложении.
Откомпилируйте и загрузите этот код в микроконтроллер.
9. Выполнить в программе BUSMASTER CAN>Transmit >Enable для включения передачи данных по интерфейсу CAN. Все 5 светодиодов стенда должны мигать с частотой порядка 1 Гц. Это говорит о передаче и приеме пакетов.
47

Рисунок 8.3. Настройки передаваемых сообщений программы BUSMASTER
10. Процесс передачи данных можно контролировать на контактах разъема представленных в таблице 8.1:
Таблица 8.1
Номер контакта разъема
Имя контакта разъема
Функциональное назначение
Номер порта микроконтрол- лера
Номер ножки микроконтрол- лера
X32.2 - 9
PD9
CAN_TX,
Port
С, 8 83
X32.2 - 10
PD15
CAN_RX
Port
С, 9 82
Осциллограмма представлена на рис 8.4
Рисунок 8.4 Осциллограмма передачи по CAN интерфейсу (X32.2 - 9).
В программе BUSMASTER окно сообщений должно показывать три сообщения, одно на прием и два на передачу
48

Рисунок 8.5 Окно сообщений.
11. Выполнить индивидуальное задание.
Сведения для выполнения
Все узлы шины CAN должны работать на одной скорости. Протокол CAN использует кодирование без возврата в ноль (NRZ). Также при передаче не передаются тактовые сигналы. Таким образом, приемники должны засинхронизоваться с тактовым сигналом передатчика.
Поскольку все узлы имеют свои индивидуальные тактовые генераторы, все приемники имеют специальный блок синхронизации DPLL. Максимальная скорость передачи CAN 1
Мбит/сек. Время битового интервала Nominal Bit Time определяется как:
TBIT = 1/Скорость передачи.
Блок DPLL разбивает битовый интервал на интервалы Time Quanta (TQ). Битовый интервал состоит из 4 частей:
Synchronization Segment (Sync_Seg), Propagation Time Segment (PSEG), Phase Buffer Segment 1
(SEG1), Phase Buffer Segment 2 (SEG2) рис. 9.6. По определению Nominal Bit Time программируется длительностью от 8 до 25 TQ. В этом случае
Nominal Bit Time = TQ * (Sync_Seg + PSEG + SEG1 + SEG2)
Время TQ фиксировано и определяется периодом генератора и программируемым предделителем BRP со значением от 1 до 65536:
TQ (μs) = ((BRP+1))/CLK (MHz) или TQ (μs) = ((BRP+1)) * Tclk (μs)
Рисунок 8.6. Передача одного бита информации по CAN
Synchronization Segment
Эта часть битового интервала, в которой должно происходить переключение сигнала. Длительность этого интервала 1 TQ. Если переключение происходит в этой области, то приемник засинхронизирован с передатчиком.
49

Propagation Time Segment
Эта часть предназначена, чтобы компенсировать физические задержки времени распространения сигнала в шине и внутренние задержки в узлах.
Длительность этого интервала может быть запрограммирована от 1 до 8 TQ.
Phase Buffer Segments 1 и 2 Эти интервалы предназначены для более точной установки точки семплирования, которая располагается между ними. Длительности этих интервалов могут быть запрограммированы между 1 и 8 TQ.
Более подробно о CAN см. техническое описание микроконтроллера [1]
Порядок работы контроллера CAN (см. приложение).
1. Инициализация выводов микроконтроллера PortС8 PortС9;
2. Разрешить тактирования CAN контроллера;
3.
Инициализация делителя тактовой частоты CAN;
4. Инициализация CAN c помощью структуры sCAN;
5. Инициализация прерываний CAN;
6. Отправка и прием сообщений;
Задания:
Задание 1. Изменить частоту передачи, или временные характеристики битового интервала по CAN интерфейсу на заданную преподавателем
Задание 2. Изменить тип передаваемых сообщений по заданию преподавателя
Задание 3. Обеспечить передачу сообщений из микроконтроллера по прерываниям (по окончанию передачи данных).
Приложение:
#include
#include
#include
#include
//Определения для светодиодов
#define LED1 PORT_Pin_10
#define LED2 PORT_Pin_11
#define LED3 PORT_Pin_12
#define LED4 PORT_Pin_13
#define LED5 PORT_Pin_14
#define MDR_PORTLED
MDR_PORTD
//Определение номеров приемного и передающего буфера и др. переменных
__IO uint32_t rx_buf = 0;
__IO uint32_t tx_buf = 1; uint32_t j = 0;
PORT_InitTypeDef PORT_InitStructure;
PORT_InitTypeDef PORTDInit;
// Инициализация светодиодов
void PortsInit(){
PORT_StructInit(&PORTDInit); //Load defaults
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTD, ENABLE);
PORTDInit.PORT_Pin = PORT_Pin_10 | PORT_Pin_11 | PORT_Pin_12 | PORT_Pin_13 | PORT_Pin_14;
PORTDInit.PORT_OE = PORT_OE_OUT;
PORTDInit.PORT_MODE = PORT_MODE_DIGITAL;
PORTDInit.PORT_SPEED = PORT_SPEED_SLOW;
PORT_Init(MDR_PORTD, &PORTDInit);
}
// Изменение состояния светодиода
void TogglePIN(MDR_PORT_TypeDef* PORTx, uint32_t PORT_Pin)
{ if (PORT_ReadInputDataBit(PORTx, PORT_Pin))
{PORT_ResetBits(PORTx, PORT_Pin);} else
{PORT_SetBits(PORTx, PORT_Pin);}
}
TIMER_CntInitTypeDef TIM1Init;
50

// Инициализация таймера
void TimerInit(){
RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER1, ENABLE);
TIMER_BRGInit(MDR_TIMER1, TIMER_HCLKdiv1);
TIMER_CntStructInit(&TIM1Init);
//Load defaults
TIM1Init.TIMER_Prescaler = 8000;
TIM1Init.TIMER_Period = 1000;
TIMER_CntInit(MDR_TIMER1, &TIM1Init);
NVIC_EnableIRQ(Timer1_IRQn);
NVIC_SetPriority(Timer1_IRQn, 0);
TIMER_ITConfig(MDR_TIMER1, TIMER_STATUS_CNT_ZERO, ENABLE);
TIMER_Cmd(MDR_TIMER1, ENABLE);
}
// Моргагание 1 светодиодом 1 раз в секунду
void ToggleLed(uint32_t LED_Num)
{ if (PORT_ReadInputDataBit(MDR_PORTLED, LED_Num))
{PORT_ResetBits(MDR_PORTLED, LED_Num);} else
{PORT_SetBits(MDR_PORTLED, LED_Num);}
}
// Включение светодиода
void LEDOn(uint32_t LED_Num){PORT_SetBits(MDR_PORTLED, LED_Num);}
// Выключение светодиода
void LEDOff(uint32_t LED_Num){PORT_ResetBits(MDR_PORTLED, LED_Num);}
// Задержка
volatile void Delay_Tick(volatile uint32_t Tick){while (Tick--);} int main() {
CAN_InitTypeDef sCAN;
// переменная для инициализации
CAN
CAN_TxMsgTypeDef TxMsg;
// переменная для передаваемого сообщения
PortsInit();
//Инициализация портов ввода вывода
TimerInit();
//Инициализация таймера
/* Включение
HSE
осциллятора (внешнего кварцевого резонатора)*/
RST_CLK_HSEconfig(RST_CLK_HSE_ON); if (RST_CLK_HSEstatus() == SUCCESS){
/* Если HSE осциллятор включился и прошел текст*/
// Выбор
HSE
осциллятора в качестве источника тактовых импульсов для
CPU_PLL
// и установка умножителя тактовой частоты
CPU_PLL
равного 7
// Частота внешнего кварца равна 8 МГц Максимальная частота процессора 80 МГц ,
// RST_CLK_CPU_PLLconfig
( Источник тактирования
PLL
, Коэффициент умножения =
N+1);
// Коэффициент умножения=0 соответствует умножение на 1 и
т.д.
.
RST_CLK_CPU_PLLconfig ( RST_CLK_CPU_PLLsrcHSEdiv1, 0 );
/* Включение схемы PLL*/
RST_CLK_CPU_PLLcmd(ENABLE); if (RST_CLK_CPU_PLLstatus() == SUCCESS) {
//Если включение CPU_PLL прошло успешно
/* Установка CPU_C3_prescaler
= 1 */
RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
/* Установка
CPU_C2_SEL
от
CPU_PLL
выхода вместо
CPU_C
1 такта*/
RST_CLK_CPU_PLLuse(ENABLE);
/* Выбор
CPU_C
3 такта на мультиплексоре тактовых импульсов микропроцессора (
CPU clock MUX) */
RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
} else
/* блок
CPU_PLL
не включился*/
{while(1);}
} else
/* кварцевый резонатор
HSE
не включился */
{while(1);}
// В результате этих действий микропроцессор работает на частоте 8МГц
//разрешение тактирования блока
RST_CLK
RST_CLK_PCLKcmd(RST_CLK_PCLK_RST_CLK ,ENABLE);
//разрешение тактирования порта
PORTC
RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);
PORT_DeInit(MDR_PORTC);
//Инициализация ножек
CAN
1 порта
PORT_InitStructure.PORT_Pin = PORT_Pin_8 ;
PORT_InitStructure.PORT_OE = PORT_OE_OUT;
PORT_InitStructure.PORT_FUNC = PORT_FUNC_MAIN;
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST;
PORT_Init(MDR_PORTC, &PORT_InitStructure);
PORT_InitStructure.PORT_Pin = PORT_Pin_9;
51

PORT_InitStructure.PORT_OE = PORT_OE_IN;
PORT_InitStructure.PORT_FUNC = PORT_FUNC_MAIN;
PORT_InitStructure.PORT_MODE = PORT_MODE_DIGITAL;
PORT_InitStructure.PORT_SPEED = PORT_SPEED_FAST;
PORT_Init(MDR_PORTC, &PORT_InitStructure);
// Инициализация тактирования CAN1
RST_CLK_PCLKcmd(RST_CLK_PCLK_CAN1,ENABLE);
// Инициализация делителя тактовой частоты
CAN1
CAN_BRGInit(MDR_CAN1,CAN_HCLKdiv1);
// Инициализация
CAN
1 (обнуление)
CAN_DeInit(MDR_CAN1);
// Заполнение полей структуры
CAN_StructInit (&sCAN); sCAN.CAN_ROP = DISABLE;
//прием собственных пакетов запрещен
sCAN.CAN_SAP = DISABLE;
//подтверждение приема собственных пакетов запрещено
sCAN.CAN_STM = DISABLE;
//режим самотестирования запрещен
SELF TEST MODE sCAN.CAN_ROM = DISABLE;
//режим только чтение запрещен ENABLE READONLY MODE
sCAN.CAN_PSEG = CAN_PSEG_Mul_2TQ;
//Длительность PSEG
sCAN.CAN_SEG1 = CAN_SEG1_Mul_3TQ;
//Длительность SEG1
sCAN.CAN_SEG2 = CAN_SEG2_Mul_2TQ;
//Длительность SEG2
sCAN.CAN_SJW = CAN_SJW_Mul_4TQ;
//Длительность сегмента подстройки частоты передачи
sCAN.CAN_SB = CAN_SB_1_SAMPLE;
//Одна выборка на бит
sCAN.CAN_BRP = 1;
//предделитель частоты процессора для
CAN
Частота
CAN = PCLK/(BRP + 1)
// Инициализация CAN1
CAN_Init (MDR_CAN1,&sCAN);
// Разрешение работы CAN1
CAN_Cmd(MDR_CAN1, ENABLE);
/* Разрешение прерывания CAN1*/
NVIC_EnableIRQ(CAN1_IRQn);
/* Разрешение
CAN1 GLB_INT
(глобальных прерываний
CAN), RX_INT
(прерываний по приему
CAN)*/
CAN_ITConfig( MDR_CAN1, CAN_IT_GLBINTEN | CAN_IT_RXINTEN, ENABLE);
/*
Разрешение
прерывания при приеме данных в буфер*/
CAN_RxITConfig( MDR_CAN1 ,(1<// Инициализация приемного буфера
CAN_Receive(MDR_CAN1, rx_buf, ENABLE); while(1){
//Подготовка сообщения для передачи
TxMsg.IDE = CAN_ID_EXT;
TxMsg.DLC = 0x08;
TxMsg.PRIOR_0 = DISABLE;
TxMsg.ID = 0x10;
TxMsg.Data[1] = j;
TxMsg.Data[0] = 0x12; j++;
//Инициализация передачи данных
CAN_Transmit(MDR_CAN1, tx_buf, &TxMsg);
// Задержка
Delay_Tick(1000000);
// Моргание светодиодом
ToggleLed(LED3);
}
} void CAN1_IRQHandler(void){
CAN_RxMsgTypeDef RxMessage;
// Получить сообщение
CAN_GetRawReceivedData(MDR_CAN1, rx_buf, &RxMessage);
// Если это сообщение с идентификатором 1 то моргать
LED2 if((CAN_EXTID_TO_STDID(RxMessage.Rx_Header.ID)==0x1))
{ToggleLed(LED2); };
// Если это сообщение с идентификатором 2 то моргать
LED4 if((CAN_EXTID_TO_STDID(RxMessage.Rx_Header.ID)==0x2))
{ToggleLed(LED4); };
// Очистка бита приема передачи сообщения
CAN_ITClearRxTxPendingBit(MDR_CAN1, rx_buf, CAN_STATUS_RX_READY);
ToggleLed(LED5);
}
// Прерывание от таймера (моргагание 1 светодиодом 1 раз в секунду)
void Timer1_IRQHandler() { if(TIMER_GetITStatus(MDR_TIMER1, TIMER_STATUS_CNT_ZERO)){
TogglePIN(MDR_PORTD, PORT_Pin_10);
TIMER_ClearITPendingBit(MDR_TIMER1, TIMER_STATUS_CNT_ZERO);
}
}
52

Литература
1. ТСКЯ.431296.001РЭ ТСКЯ.431296.001РЭ Микросхемы интегральные 1986ВЕ91Т,
1986ВЕ92У, 1986ВЕ93У, 1986ВЕ94Т Руководство по эксплуатации
2. Спецификация микроконтроллеров серии 1986ВЕ9х, К1986ВЕ9х, К1986ВЕ92QI,
К1986ВЕ92QC, К1986ВЕ91Н4 3. VS_COM User manual Edition: November 2012 www.visionsystems.de
4. SJA1000 Stand-alone CAN controller, DATA SHEET https://www.semiconductors.philips.com
5.
Сайт для скачивания программы Putty https://www.chiark.greenend.org.uk/sgtatham/putty/download.html
53
1   2   3   4   5

перейти в каталог файлов

Образовательный портал Как узнать результаты егэ Стихи про летний лагерь 3агадки для детей

Образовательный портал Как узнать результаты егэ Стихи про летний лагерь 3агадки для детей