Перейти к содержанию

Uart Atmega8


Гость asd

Рекомендуемые сообщения

Здравствуйте, осваиваю uart имеется камень Atmega8, написал код, простой до безобразия, загоняю в PROTEUS, принятое число вывожу в порт B, но получаю бред, первые PINB0-3 меняются, а PINB4-7 всегда число 3 висит, что делать помогите.

Числа кидаю через терминал в PROTEUS, или через виртуальный com порт + прога на C# результат тот же.

.include "m8def.inc"

;.DSEG
.def wreg =R19
.def wreg2 =R18
  .equ  XTAL = 8000000 
  .equ  baudrate = 9600 
  .equ  bauddivider = XTAL/(16*baudrate)-1

.CSEG
  .ORG $0
   rjmp RESET
  .ORG $00B
   RJMP RX_OK    ; (USART,RXC) USART, Rx Complete

  .ORG INT_VECTORS_SIZE  

RESET:
cli

  ldi  R16,high(RAMEND) 
  out  SPH,R16   
  ldi  R16,low(RAMEND)  
  out  SPL,R16	
  ldi  R16,0xFF			  
  out  DDRB,R16

 LDI  R16, low(bauddivider)
  OUT  UBRRL,R16
  LDI  R16, high(bauddivider)
  OUT  UBRRH,R16
  LDI  R16,0
  OUT  UCSRA, R16

  LDI  R16, (1<<RXEN)|(1<<RXCIE)|(0<<UDRIE)
  OUT  UCSRB, R16

  LDI  R16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1
  OUT  UCSRC, R16
  sei

main:
rjmp main

RX_OK:
cli
  SBIS UCSRA,RXC			
rjmp RX_OK
   in   R20,UDR  
   out  PORTB, R20			
RET

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Запрещать прерывания, при входе в обработчик, не нужно (они и так запрещены аппаратно). А вот возвращаться из обработчика нужно через reti (вместо Вашего RET).

Ожидать флага RXC, тоже нет необходимости, так как вызов прерывания осуществляется когда байт уже принят полностью и данный флаг поднят. Получаются еще две бесполезные строчки кода в начале обработчика.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Приму к сведению, спасибо.

Но проблему это не решает(

Да и еще если, если использовать RETI в обработчике, вместо RET то

при любых поданных значениях получается PINB0-7 = 01010000

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Скобку закройте, в значении R16 для UCSRC.

Все работает.

.include "m8def.inc"
;.DSEG
.def wreg =R19
.def wreg2 =R18
.equ XTAL = 8000000
.equ baudrate = 9600
.equ bauddivider = XTAL/(16*baudrate)-1
.CSEG
.ORG $0
 rjmp RESET
	 .ORG $00B
	 RJMP RX_OK ; (USART,RXC) USART, Rx Complete

.ORG INT_VECTORS_SIZE
RESET:
cli
ldi R16,high(RAMEND)
out SPH,R16
ldi R16,low(RAMEND)
out SPL,R16
ldi R16,0xFF						
out DDRB,R16
	 LDI R16, low(bauddivider)
OUT UBRRL,R16
LDI R16, high(bauddivider)
OUT UBRRH,R16
LDI R16,0
OUT UCSRA, R16
LDI R16, (1<<RXEN)|(1<<RXCIE)|(0<<UDRIE)
OUT UCSRB, R16
LDI R16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
OUT UCSRC, R16
sei
main:
rjmp main
RX_OK:
 in R20,UDR
 out PORTB, R20				
RETI

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

код рабочий) просто когда вставлял коменты удалял они абракодаброй написаны были и скобку затер походу, код так то работает но криво, вот прошу помочь, хотя бы скажите куда копать

Ссылка на комментарий
Поделиться на другие сайты

Код работает четко. Копайте в сторону настроек терминала в ПРОТЕУСЕ. Ваш RET не восстанавливал разрешение прерываний, при выходе из обработчика.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Что кидаете в RS232? "Та же фигня" не описание проблемы. Давайте описание подробнее. Какая программа терминала, что отправляете и что принимается. Лучше со скрином экрана программы-терминала.

Ссылка на комментарий
Поделиться на другие сайты

выше есть скрин симуляции в протеусе, сообщения кидаю через программу terminal или через терминал в протеусе, что бы я не кидал в порте всегда одно и тоже.

Ссылка на комментарий
Поделиться на другие сайты

Вы кидаете в UART (судя по всему) двоичные данные в кодировке ASCII. В таком случае ваши числа имеют значения 7 (0x37) 5 (0x35).

вот пара примеров:

75 - 11101100

84 - 00011100

1 - 10001100

В примере показанном выше, ваша программа принимает только первые символы чисел 7, 8, 1.

В кодировке ASCII это буду значения 7 - 00110111 (0x37), 8 - 00111000 (0x38), 1 - 00110001 (0x31).

Все, как Вы указали, перепутав только расположение бит (указали зеркально lsb - msb, а надо наоборот msb - lsb).

Ссылка на комментарий
Поделиться на другие сайты

Да скорее всего так оно и есть, но это не решает проблемы с "зависшим" портом B, если я меняю RET на RETI в обработчике RX_OK, то что бы я не посылал всегда получаю одно и тоже значение 0101 0000, как быть с этим?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...