Начинаю изучать программирование микроконтроллеров. Помогите написать программу на С для микроконтроллера Silabs с8051f320, которая будет отправлять по UART 8 байт случайных данных и обратно принимать их в ПК. Через прерывания. 1 стоп-бит, бит паритета - четный.
#include "C8051F320.h"
#include <stdio.h>
#define BAUDRATE 9600 // Baud rate of UART
#define SYSTEMCLOCK 12000000 // SYSCLK frequency in Hz
#define UART_BUFFERSIZE 64
unsigned char UART_Buffer[UART_BUFFERSIZE];
unsigned char UART_Buffer_Size = 0;
unsigned char UART_Input_First = 0;
unsigned char UART_Output_First = 0;
unsigned char TX_Ready =1;
static char Byte;
sbit LED1 = P2^2; // LED1
sbit LED2 = P2^3; //LED2
void main (void)
{
unsigned char inputcharacter;
PCA0MD &= ~0x40; // WDTE = 0
EA = 1;
while(1)
{
if(TX_Ready == 1 && UART_Buffer_Size != 0 && Byte == 13)
// If the complete word has been entered via the hyperterminal followed by
// carriage return
{
TX_Ready = 0; // Set the flag to zero
TI0 = 1; // Set transmit flag to 1
printf ("\nEnter character: ");
inputcharacter = getchar ();
printf ("\nCharacter entered : %c",inputcharacter);
printf ("\n Value in Hex: %bx",inputcharacter);
}
}
}
void Timer_Init()
{
TCON = 0x40; //enable timer 1
TMOD = 0x20; //timer 1 in 8-bit autoreload
CKCON = 0x08;
TH1 = 0xF9; //249
}
void UART_Init()
{
SCON0 = 0x90;
}
void Port_IO_Init()
{
P0MDOUT = 0x10;
P2MDOUT = 0x0C;
XBR0 = 0x01;
XBR1 = 0x40;
}
void Oscillator_Init()
{
OSCICN = 0x83;
}
void Interrupts_Init()
{
IE = 0x90;
}
void UART0_Interrupt (void) interrupt 4
{
if (RI0 == 1)
{
if( UART_Buffer_Size == 0) { // If new word is entered
UART_Input_First = 0; }
RI0 = 0; // Clear interrupt flag
Byte = SBUF0; // Read a character from UART
LED1 = 1;
LED2 = 1;
if (UART_Buffer_Size < UART_BUFFERSIZE)
{
UART_Buffer[UART_Input_First] = Byte; // Store in array
UART_Buffer_Size++; // Update array's size
UART_Input_First++; // Update counter
}
}
if (TI0 == 1) // Check if transmit flag is set
{
TI0 = 0; // Clear interrupt flag
if (UART_Buffer_Size != 1) // If buffer not empty
{
// If a new word is being output
if ( UART_Buffer_Size == UART_Input_First ) {
UART_Output_First = 0; }
// Store a character in the variable byte
Byte = UART_Buffer[UART_Output_First];
if ((Byte >= 0x61) && (Byte <= 0x7A)) { // If upper case letter
Byte -= 32; }
SBUF0 = Byte; // Transmit to Hyperterminal
UART_Output_First++; // Update counter
UART_Buffer_Size--; // Decrease array size
}
else
{
UART_Buffer_Size = 0; // Set the array size to 0
TX_Ready = 1; // Indicate transmission complete
}
}
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Timer_Init();
UART_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
Прием и передача данных по UART
Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
- Реклама
Вернуться в «Разные вопросы по МК»
Перейти
- Наш сайт
- ↳ Сувенирная лавка Кота
- ↳ О нашем сайте...
- ↳ Опросы, конкурсы...
- ↳ Статьи
- Устройства
- ↳ Аналоговая техника
- ↳ Усилители низкой частоты
- ↳ Радиотехника: приемники, передатчики, антенны
- ↳ АвтоМотоВело
- ↳ Цифровая техника
- ↳ Микроконтроллеры и ПЛИС
- ↳ Интеграция с ПК
- ↳ Умные мысли
- Силовая электроника
- ↳ Сварочное оборудование
- ↳ Питание
- ↳ Управление двигателями
- ↳ Индукционные нагреватели
- ↳ Прочая силовая электроника
- Микроконтроллеры и ПЛИС
- ↳ AVR
- ↳ ARM
- ↳ PIC
- ↳ ПЛИС
- ↳ Периферия
- ↳ Разные вопросы по МК
- ↳ Arduino
- Обучалка
- ↳ Теория
- ↳ Практика
- Технология
- ↳ Изготовление PCB
- ↳ Корпуса
- ↳ Измерения
- Ремонт
- ↳ Не слышно, не видно
- ↳ Не стирает, не готовит
- ↳ Ничего не работает
- ↳ Дохлые потаскунчики
- Посиделки у Кота
- ↳ Травим анекдоты
- ↳ Котоссылки
- ↳ Ищу...
- ↳ МЯЯЯУ!
- ↳ Чистилище
- Базар
- ↳ Куплю
- ↳ Продам
- ↳ Отдам-Обменяю
- ↳ Есть работа
- ↳ Ищу работу
- ↳ Базарные разговорчики