Ответ: ЭХ Молодьожь... ;))) Держи, вот выдрал&состряпал маленькую прогу - на скорости 9600 (кварц 3,579545МГц) вываливает 'Hello' и затем делает эхо... писано для 16F84, надеюсь под свои нужды подкорректируешь... учитывай полярность данных в соответствии со своей схемой...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено SOIC 11 марта 2003 г. 19:41
В ответ на: Помогите новичьку с USARTом отправлено PIC 11 марта 2003 г. 16:41

list p=16F84 ; list directive to define processor
#include ; processor specific variable definitions

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC

PIC84 equ H'000' ; PIC Reset Vector
INTVEC equ H'004' ; PIC16C71/84 Interrupt Vector


_M2_IO equ 7 ; PORTB.7

; -- M2BUS proc --
BitCounter equ 0x17
PauseReg equ 0x18
DataRegM2 equ 0x19
ParityAccM2 equ 0x1A
; -- M2BUS proc --

;---------------------------------------------------------------------
org PIC84
goto Init
Init:
call PauseM2Rate
tris PORTA ; Define PORT A I/O
addlw 0x7F
option

movlw 0xFF
tris PORTB ; Define PORT B I/O for input
movlw 0xFF
movwf PORTB

movlw 'H'
call M2_TX
movlw 'e'
call M2_TX
movlw 'l'
call M2_TX
movlw 'l'
call M2_TX
movlw 'o'
call M2_TX
movlw 0x00
call M2_TX

repeat:
call M2_RX
call M2_TX
goto repeat

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


M2_TX:
movwf DataRegM2
movlw 0x32
call PauseW
movlw 0x7F
tris PORTB ; Define PORT B I/O
clrf ParityAccM2
bcf PORTB,_M2_IO
movlw 0x08
movwf BitCounter

M2_TXloop:
call PauseM2Rate
movf DataRegM2,W
xorwf ParityAccM2,F
bcf PORTB,_M2_IO
btfsc DataRegM2,0
bsf PORTB,_M2_IO
rrf DataRegM2,F
decfsz BitCounter,F
goto M2_TXloop
call PauseM2Rate
bcf PORTB,_M2_IO
btfss ParityAccM2,0
bsf PORTB,_M2_IO
call PauseM2Rate
movlw 0xFF
tris PORTB ; Define PORT B I/O
movlw 0x4F
call PauseW
return


M2_RX:
btfsc PORTB,_M2_IO
goto M2_RX
movlw 0x2A ; 7+#29*3 [130T] ~
call PauseW
movlw 0x09
movwf BitCounter

M2_RXloop:
bcf STATUS,C
btfsc PORTB,_M2_IO
bsf STATUS,C
rrf DataRegM2,F
call PauseM2Rate
decfsz BitCounter,F
goto M2_RXloop
rlf DataRegM2,F
movlw 0x0D ;//0x28 ;0x28=124T
call PauseW
movf DataRegM2,W
return
;----------------------------------------------------------------------------
; w = [(ETU/4)-12]/3 = [(F/38400)-12]/3; F - PIC oscillator frequency
;
; w = [(F/(BaudRate*4))-12]/3;
;
PauseM2Rate: ; T = 86 cycles
movlw 0x1B ; w=[(ETU/4) - 12]/3

PauseW: ; T = [2]+5+(w-1)*3 cycles([] if call)
movwf PauseReg
PauseLoop:
decfsz PauseReg,F
goto PauseLoop
retlw 0x00
;----------------------------------------------------------------------------

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru