KV99 0 22 августа, 2007 Опубликовано 22 августа, 2007 · Жалоба Здравствуйте уважаемые знатоки. Написал программу для передачи байта от контроллера к компьютеру по 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба Здравствуйте уважаемые знатоки. Написал программу для передачи байта от контроллера к компьютеру по RS232. Отладил программу. Попытался сэмулировать на PROTEUS. РАБОТАЕТ, но вместо передаваемого байта принимается какая-то билиберда. Может мне кто-нибудь объяснит, в чем моя ошибка. Вот текст прошивки: Ну программный UART лучше делать не так, как у Вас, а по таймерному прерыванию. Примеры где-то есть в инете. НО! ИМХО когда полно МК с аппаратным последовательным портом, заморачиваться с его программной реализацией просто не нужно. Возьмите другую модель МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KV99 0 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба Спасибо попробую по таймерному прерыванию. Микроконтроллер со встроенным UART я возьму, но потом, когда отлажу программу на PIC16F84. А описанную выше программу я отладил. Оказалось, что нужно посылать символы с кодом > 20h т.к. таблица ASCII начинается с этого значения, а не с нуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 24 августа, 2007 Опубликовано 24 августа, 2007 · Жалоба Спасибо попробую по таймерному прерыванию. Микроконтроллер со встроенным UART я возьму, но потом, когда отлажу программу на PIC16F84. А описанную выше программу я отладил. Оказалось, что нужно посылать символы с кодом > 20h т.к. таблица ASCII начинается с этого значения, а не с нуля. Таблица ASCII начинается с нуля. Просто в первых числах идут нечитаемые символы, например "звонок" - код 07. Вы наверно принимаете данные в текстовом режиме (например через hyperterminal). А нужно использовать программы, которые позволяют отображать принятый байт в шестнадцатиричном виде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться