Гость Чума

At89s8252

5 сообщений в этой теме

Гость Чума   
Гость Чума

Столкнулся с вселенской проблемой :) необходимо заставить общаться конроллер и комп по RS232. Общаются.... но процессор уходит на прерывание только один раз. Текст программы ниже. Прерывания обязательны.

Причем даже в симуляторе не удается заставить его прерываться 2 раза....

кто знает помогите !!! :)

ORG 00

JMP N1

org 023h

SJMP UART

UART: JB TI, UART1 ;PRERYVANIE OT PEREDATCHIKA

CPL P3.7

CLR RI

MOV A, SBUF

SETB F0

RET

UART1: CLR TI ;OBRABOTKA PRERYVANIJA PEREDATCHIKA

RET

org 040h

N1: MOV TMOD, #00100001b ;RAZRESHENIE RABOTY TR0 I TR1

MOV IE, #090h

MOV SCON, #01011100b ;S.PORT - 8 BIT ["0" start] [8 data bit] ["10" stop]

MOV 087h, #80h ;(SMOD=1) UART speed * 2

CLR F0

MOV TH1, #0E8h ;set speed UART

MOV TL1, #0E8h

SETB TR1

M1: NOP

NOP

JNB F0, M1

MOV SBUF, A

CLR F0

AJMP M1

END

Поделиться сообщением


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

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
plexor!    4

...

UART: JB TI, UART1 ;PRERYVANIE OT PEREDATCHIKA

CPL P3.7

CLR RI

MOV A, SBUF

SETB F0

RET

UART1: CLR TI ;OBRABOTKA PRERYVANIJA PEREDATCHIKA

RET

...

На вскидку (давно не работал с 51 серией) команды RET необходимо заменить на RETI.

т.е. программа входит в прерывание и аппаратно сбрасывает бит разрешения прерываний (всех! - это я загнул. в данном случае только для UART. перепутал с AVR :)). Надо: либо программно его установить, либо выйти инструкцией RETI, которая, выходит из подпрограммы и устанавливает "бит разрешения прерываний", а RET простой выход из подпрограммы.

Удачи!

Изменено пользователем plexor!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость darkspider   
Гость darkspider

согласен, нет команды выхода из прерывания

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
serg    2

В конце любой подпрограммы прерывания доложна быть команда RETI!!!, она сбрасывает бит прерывания в регистре прерываний. А так будет вечно крутится в подпрограмме прерывания.

Поделиться сообщением


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

Спасибо всем! Я уж сам разобрался :) Что называется лохонулся :) Столько лет проработал с этой серией и забыть такое! Старею должно быть :)))

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Относительно чего, какой шины делались измерения? Вот это вообще не понял:  
    • Колл-бак функция HAL_ADC_ConvCpltCallback() вызывается при окончании каждого преобразования, для всех каналов одна и та же. А функция HAL_ADC_GetValue(hadc1) просто перекладывает готовый результат преобразования в массив adcResult[], она не вызывает новое преобразование. Поэтому, чтобы отличить результат какого канала лежит в АЦП, нужно завести переменную-индекс, которая будет увеличиваться на 1 при каждом вызове HAL_ADC_ConvCpltCallback(). И этот индекс будет индексом массива результатов. После преобразования всех каналов этот индекс надо сбросить в 0, чтобы в следующий раз начать с начала массива. Признак последнего канала - флаг окончания сканирования каналов ADC_FLAG_EOS. uint8_t index = 0; void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc1)   { if (__HAL_ADC_GET_FLAG(hadc1, ADC_FLAG_EOC))    {   adcResult[index] = HAL_ADC_GetValue(hadc1);    index++;   } if (__HAL_ADC_GET_FLAG(hadc1, ADC_FLAG_EOS))     {   index=0; } }  
    • У меня в детстве, в начале 90-х, был двухкассетный Samsung, наподобие того, что на картинке (чуть-чуть другого дизайна). Тоже белый и чисто корейский - отцу знакомые из Финки подогнали... Тогда это был "попсатас" жуткий - после "Весны"... С перезаписью, с автостопом, с приемником и встроенным микрофоном! Аппаратец, кстати, до сих пор живет на даче - кассет уже не играет, а радио - только так...
    •   В Охотском море тоже
    • Это кто же такие? У тебя с предом проблема? Ну так закажи форумчанам в соответствующем разделе,без штанов не останешься. Вотъ это надо читать с здоровым скептицизмом и пониманием кто хаит и почему. От звука мощника Орбиты конечно курить и бухать не бросишь (но всяко лучше 119-й,тут Владимир прав),но он вполне приемлим
    • ну правильно. Вы же никак не делите результаты преобразования. Во все элементы массива заносится всегда одно и то же HAL_ADC_GetValue(hadc1); три раза подряд. Регистр данных то один