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

Связь PIC16F84 по RS232

Здравствуйте уважаемые знатоки. Написал программу для передачи байта от контроллера к компьютеру по RS232. Отладил программу. Попытался сэмулировать на PROTEUS. РАБОТАЕТ, но вместо передаваемого байта принимается какая-то билиберда. Может мне кто-нибудь объяснит, в чем моя ошибка. Вот текст прошивки:

 

LIST p=16F84 ;

#include "P16F84.INC" ; Include header file

tmpdl equ 21h

count equ 22h

char equ 23h

 

; prerivaniya

org 0

goto start

 

start

BSF STATUS, RP0

movlw b'11111111'

movwf TRISA

clrw

movwf TRISB

BCF STATUS, RP0

movwf PORTB

 

start2

clrw

movwf PORTB

movlw d'11'

movwf char

wait

btfsc PORTA, 4

goto wait

call send_RS232

goto start2

 

;------------------------------------

send_RS232

movlw d'8'

movwf count

bcf PORTB, 0

call delay_95mks

call delay_8mks

m1 rrf char

btfss STATUS,0

bcf PORTB,0

btfsc STATUS,0

bsf PORTB,0

call delay_95mks

decfsz count

goto m1

bsf PORTB,0 ;chetnost

call delay_95mks

call delay_8mks

bsf PORTB,0 ; stop-bit

call delay_95mks

call delay_8mks

rrf char

return

;------------------------------

delay_95mks

movlw d'22'

movwf tmpdl

nop

decfsz tmpdl, f

goto $-2

nop

nop

return

;----------------------------

delay_8mks

nop

nop

nop

nop

return

 

 

 

END

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


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

Здравствуйте уважаемые знатоки. Написал программу для передачи байта от контроллера к компьютеру по RS232. Отладил программу. Попытался сэмулировать на PROTEUS. РАБОТАЕТ, но вместо передаваемого байта принимается какая-то билиберда. Может мне кто-нибудь объяснит, в чем моя ошибка. Вот текст прошивки:

Ну программный UART лучше делать не так, как у Вас, а по таймерному прерыванию. Примеры где-то есть в инете.

НО! ИМХО когда полно МК с аппаратным последовательным портом, заморачиваться с его программной реализацией просто не нужно. Возьмите другую модель МК.

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


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

Спасибо попробую по таймерному прерыванию. Микроконтроллер со встроенным UART я возьму, но потом, когда отлажу программу на PIC16F84. А описанную выше программу я отладил. Оказалось, что нужно посылать символы с кодом > 20h т.к. таблица ASCII начинается с этого значения, а не с нуля.

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


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

Спасибо попробую по таймерному прерыванию. Микроконтроллер со встроенным UART я возьму, но потом, когда отлажу программу на PIC16F84. А описанную выше программу я отладил. Оказалось, что нужно посылать символы с кодом > 20h т.к. таблица ASCII начинается с этого значения, а не с нуля.

Таблица ASCII начинается с нуля. Просто в первых числах идут нечитаемые символы, например "звонок" - код 07. Вы наверно принимаете данные в текстовом режиме (например через hyperterminal). А нужно использовать программы, которые позволяют отображать принятый байт в шестнадцатиричном виде.

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


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

×
×
  • Создать...