Реализовать МПС на базе МК фирмы Atmel серии AVR, которая принимает с
компьютера по UART 16 случайных чисел (байт). Произвести обработку принятых чисел
на Микро Контроллере согласно заданию. Исходник компилировал в CodevisionAWR. Язык программирования С.
Есть фрагмент исходника , код работает, должен выводить массив 16 чисел который ввожу я, а он выводит совсем не то число..
Я приложил скрин1, слева в Virtual terminal массив чисел которые ввожу , передаю по COM порту, а справа на LCD должно быть максимальное число 208. А появляется число 56... То есть терминал информацию получает , а LCD почему то нет.Подскажите где я допустил ошибку.Ниже приложил скриншоты и исходник.Исходник из методички , по идее должен работать
Hel[P!!! Спасибо !
// инициализация внешних библиотек
#include <mega8535.h>
#include "lcd.h"
#include "delay.h"
#include "stdlib.h"
//Инициализация порта А для передачи данных в ЖКИ.
//Для просмотра номера порта, нужно обратиться к заголовочному //файлу mega8535.h, с
целью определения номера порта.
//PortA = 0x1b;
#asm
.equ __lcd_port=0x1b; //PORTA
#endasm
//объявление служебных переменных
//однобайтный буфер
volatile unsigned char usartRxBuf = 0;
//Определение констант для конфигурации UART
#define RXCIE 7
#define RXEN 4
#define TXEN 3
#define URSEL 7
#define UCSZ1 2
#define UCSZ0 1
unsigned char MAXnum,buff = 0;
unsigned char i,j,n = 0;
unsigned char mas1 [16];
char* str1;
//Процедуры для управления передачей через UART
//инициализация usart`a
void USART_Init(void)
{
UBRRH = 0;
//скорость обмена 9600 бод
UBRRL = 51;
//разр. прерыв при приеме, разр приема, разр передачи.
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
//размер слова 8 разрядов
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); }
#define UDRE 5
//отправка символа по usart`у
void USART_SendChar(unsigned char sym)
{
while(!(UCSRA & (1<<UDRE)));
UDR = sym;
}
//чтение буфера
unsigned char USART_GetChar(void)
{
unsigned char tmp;
unsigned char saveState = SREG;
#asm("cli");
tmp = usartRxBuf;
usartRxBuf = 0;
SREG = saveState;
return tmp;
}
//прерывание при приеме символа по usart в буфер
interrupt [USART_RXC] void usart_rxc_my(void)
{
usartRxBuf = UDR;
buff = usartRxBuf;
if(buff)
{
if(i<16)
{
mas1 = buff;
i++;
}
}
}
void main( void )
{
lcd_init(20); //инициализация ЖКИ
USART_Init(); //инициализация UART
lcd_clear(); //очистка ЖКИ
lcd_gotoxy(0,0); //переместить курсор на ЖКИ в позицию 0,0
#asm("sei"); //разрешение прерываний
while(1) //бесконечный цикл
{
if(i == 15)
{
//обработка массива
for(i=0;i<16;i++)
{
if (mas1%2 == 0)
{
if (MAXnum<=mas1)
{
MAXnum = mas1;
}
}
}
//вывод массива на ЖКИ
for(i=0;i<16;i++)
{
itoa(mas1,str1);
lcd_puts(str1);
j++;
if(j%4!=0)
{
lcd_gotoxy(j*5,n);
}
else
{
j = 0;
n++;
lcd_gotoxy(j*5,n);
}
}
delay_ms(10000);
//вывод результата на ЖКИ
lcd_clear();
lcd_gotoxy(0,0);
itoa(MAXnum,str1);
lcd_puts(str1);
}
}}
- Вложения
-
- скрин 1.png
- (85.74 КБ) 262 скачивания



