Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.02.2005, 11:23
|
|
Частый гость
Регистрация: 18.01.2005
Сообщений: 33
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
микроконтроллер и com-порт
Люди. Кто знает как передать или получить информацию с микроконтроллеров Pic или Atmel.
Помогите в данном вопрое.
|
|
|
|
07.02.2005, 16:34
|
|
Прописка
Регистрация: 29.01.2005
Адрес: Киев
Сообщений: 227
Сказал спасибо: 50
Сказали Спасибо 32 раз(а) в 24 сообщении(ях)
|
У меня тоже встанет буквально в скором времени такая задача, поэтому я пока не пробовал, но подзапасся теорией. Во-первых, в некоторых контроллерах уже есть внутренняя реализация RS-232 например в ПИКах это из 16-й серии 63-я, 65-я, 73-я и 74-я модели и может ещё какие-то другие, не помню точно. Если не годятся по причине относительной дороговизны или по каким-то другим, эмулируем програмно. У тебя есть описание протокола RS-232? Можно почитать и подумать. Теоретически скорость возможна вплоть до 9600 на 4-х мегагерцовой версии или 19200 на 10-ти МГцовой. Идея такая(для приема). Дождались старт-бита, а далее контролируем состояние ноги контроллера во время, соответствующее средине бита, который передается. Записываем его в CARRY и двигаем дальше в переменную приёма, и так 8 раз. Что пока не обдумывал – согласование уровней ТТЛ и RS, для приема, думаю подойдет резистор )). Ну, и если что, то всегда имеется микросхемка MAX 232 в которую с любой стороны входит ТТЛ или RS, а выходит соответственно RS или ТТЛ. Удачи!
|
|
|
|
07.02.2005, 21:49
|
|
Прописка
Регистрация: 27.08.2004
Сообщений: 107
Сказал спасибо: 0
Сказали Спасибо 21 раз(а) в 20 сообщении(ях)
|
все намного проще с Пиками. В 16 серии есть такое понятие как SCI - последовательный интерфейс. Там на програмном уровне не надо реализовывать протокол. Все уже готовое - конфигурировать только контроллер и вперед. Он сам прерывание запустит, как байт будет считан. Буфер там на два байта, вроде.
|
|
|
|
08.02.2005, 10:58
|
|
Гость
|
Я имел ввиду именно для тех микроконтроллеров у которых нет встроенных интерфейсов RS-232, с зтим то все просто.
|
|
|
|
08.02.2005, 13:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
лююююдиииии!!!! Ну пользуйтесь поисковыми системами!!!
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
08.02.2005, 13:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,531
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
http://piclist.com/techref/piclist/cheapic/alphabet.htm
Код:
|
Program #7 - Send & Receive Serially at 1200 baud
;-----------------------------------------------------------------------;
; ALPHABET.ASM Send and Receive serially at 1200 baud to PC ;
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; the next 5 lines are directions to the assembler ;
;-----------------------------------------------------------------------;
LIST P=16F84 ; tells which processor is used
INCLUDE "p16f84.inc" ; defines various registers etc. Look it over.
ERRORLEVEL -224 ; supress annoying message because of tris
__CONFIG _PWRTE_ON &_LP_OSC &_WDT_OFF ; configuration switches
CBLOCK H'0C'
txreg ; holds byte to be transmitted
rxreg ; holds byte received
char ; holds character to be transmitted
bitcount ; holds count of bits when transmitting
timecnt ; holds counter for timer
ENDC
ORG 0 ; start a program memory location zero
goto main ; skip over subroutines
;-----------------------------------------------------------------------;
; initialization - set up ports and timer options ;
;-----------------------------------------------------------------------;
init:
movlw B'00000001' ; RA0 to input
tris PORTA ; contents of W copied to PORT A ...
movlw 0
tris PORTB ; and PORT B
movlw B'00000001' ; pull-ups active
; prescalar assigned to TMR0 and set 1:4
option ; rolls over each second
return
;-----------------------------------------------------------------------;
; time delay routines ;
;-----------------------------------------------------------------------;
eighth:
movlw 1 ; wait 1/8 th second
goto $ +2 ; jump over
onesecond:
movlw D'8' ; wait one second
movwf timecnt
clrf TMR0
bcf INTCON, T0IF ; clear the interrupt flag
btfss INTCON, T0IF ; wait on T0IF to be set
goto $ -1 ; loop till it is
decfsz timecnt, f ; finished timing?
goto $ -3 ; not yet
return ; yes
;-----------------------------------------------------------------------;
; the main program ;
;-----------------------------------------------------------------------;
main: ; this is the main program
call init ; set up ports
call onesecond ; let things settle for 1 second
loop:
call rx ; get a character from keyboard
movwf char ; save so we can increment it
incf char, f ; send back the next 3 characters
movf char, W
call tx
incf char, f
movf char, W
call tx
incf char, f
movf char, W
call tx
goto loop ; do it forever
;-----------------------------------------------------------------------;
; transmit byte in W at 1200 baud out RB7 ;
;-----------------------------------------------------------------------;
; normal rs232 is -V for a high, +V for a low
; this would translate to 0V for high +5 for low
tx:
movwf txreg ; set up transmit register
comf txreg, f ; flip all bits
movlw D'8' ; eight bits to transmit
movwf bitcount
bsf PORTB, 7 ; start bit (+5V is 'low')
nop ; a total of 7 instruction cycles
nop ; (one is the rrf at txloop)
nop
nop
nop
txloop:
rrf txreg, f ; lsb out of txreg into carry
rrf PORTB, f ; bit 7 of port B high or low with carry
nop ; make total loop delay 7 instruction counts
nop ; 7 * 122 usec = 854, (should be 833)
decfsz bitcount, f ; 4 instruction cycles to here
goto txloop ; total 4 + 3 = 7 instructions cycles in loop
bcf PORTB, 7 ; 0 Volts is the 'high' state this is
nop ; stop bit
nop ; delay 7 instruction cycles
nop
nop
return
;-----------------------------------------------------------------------;
; receive byte at 1200 baud in RA0, put in W ;
;-----------------------------------------------------------------------;
rx: movlw 8 ; eight bits to input
movwf bitcount
waitstart:
btfss PORTA, 0 ; wait for input to go high, (start bit)
goto waitstart
nop ; wait 1/2 start bit time 3 including branch
nop ; next four instruction are to make
nop ; 1 bit time delay before first reading of
nop ; input port
nop
receive:
nop ; make total loop delay 7 instruction counts
nop ; 7 * 122 usec = 854, (should be 833)
rrf PORTA, f ; PORT A bit 0 into carry
rrf rxreg, f ; rotate carry into receive register
decfsz bitcount, f ;
goto receive ; total 4 + 3 = 7 instructions cycles in loop
comf rxreg, W ; return compliment of value collected
nop ; wait at least one stop bit
nop
nop
nop
return
end |
вот еще http://piclist.com/techref/microchip/irtoserial.htm
http://piclist.com/techref/microchip/16f84-rs232-an.htm
http://piclist.com/techref/microchip/rs232.htm
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:59.
|
|