PDA

View Full Version : giao tiếp máy tính với pic16f877 qua mạng rs485


rain.nguyen
02-06-2010, 11:55 PM
e đang mô phỏng 1 mạch giao tiếp máy tính với pic16f877 qua mạng rs485, file proteus gửi kèm theo bên dưới, e vẽ dựa theo 1 vài hướng dẫn của bro hoctro89.., code pic gửi kèm theo dưới đây, sửa lại dựa theo 1 TUT trên 4rum, chỉ thay đổi bit SYNC từ 0 thành 1, ko hiểu sao mãi mà ko chạy, bro nào làm về cái này rồi chỉ giáo cho e với
p/s : do dùng virtual serial giả lập com3 nối với com4, nên txd của com 4 là rxd và ngược lại
list p=16f877A
#include <p16f877A.inc>
__CONFIG 0x393A
errorlevel -302

w_temp EQU 0x71
status_temp EQU 0x72
pclath_temp EQU 0x73
ACC EQU 0x74


;************************************************* *********************
ORG 0x000 ; processor reset vector
goto main ; go to beginning of program

ORG 0x004 ; interrupt vector location
movwf w_temp ; save off current W register contents
movf STATUS,w ; move STATUS register into W register
movwf status_temp ; save off contents of STATUS register
movf PCLATH,W ; move PCLATH register into W register
movwf pclath_temp ; save off contents of PCLATH register

;================================================= ============================
BANKSEL RCREG
MOVF RCREG,W
MOVWF PORTD
MOVWF PORTB ; Chuyen du lieu nhan duoc ra PortB
BANKSEL TXREG
MOVF PORTB,W ;
MOVWF TXREG ; Chuyen du lieu nguoc lai PC
;================================================= =============================

movf pclath_temp,w ; retrieve copy of PCLATH register
movwf PCLATH ; restore pre-isr PCLATH register contents
movf status_temp,w ; retrieve copy of STATUS register
movwf STATUS ; restore pre-isr STATUS register contents
swapf w_temp,f
swapf w_temp,w ; restore pre-isr W register contents
retfie

main
BANKSEL ADCON1
MOVLW 0x06
MOVWF ADCON1
CALL Init_serialport
BANKSEL TRISB
CLRF TRISB ; Cho dang PORTB la dang out
CLRF TRISD
CLRF TRISE
BSF INTCON,GIE
BSF INTCON,PEIE
GOTO $

Init_serialport ; Module khoi tao cho Serial
BANKSEL TXSTA
BSF TRISC,7 ; Chon chan rb2 la dang in
BSF TRISC,6
MOVLW B'00110100' ; Chon che do 8 bit, Hightbaudrate
MOVWF TXSTA
MOVLW D'25' ; Chon che do 9.600
MOVWF SPBRG
BSF PIE1,RCIE ; Cho phep ngat ( receive )
BANKSEL RCSTA
MOVLW B'10010000' ;
MOVWF RCSTA
RETURN



END ; directive 'end of program'

stupid11
20-03-2011, 06:07 PM
e đang mô phỏng 1 mạch giao tiếp máy tính với pic16f877 qua mạng rs485, file proteus gửi kèm theo bên dưới, e vẽ dựa theo 1 vài hướng dẫn của bro hoctro89.., code pic gửi kèm theo dưới đây, sửa lại dựa theo 1 TUT trên 4rum, chỉ thay đổi bit SYNC từ 0 thành 1, ko hiểu sao mãi mà ko chạy, bro nào làm về cái này rồi chỉ giáo cho e với
p/s : do dùng virtual serial giả lập com3 nối với com4, nên txd của com 4 là rxd và ngược lại

Làm như bạn thì sao mà chạy được chứ...trên con MA485 có 2 chân điều khiển hướng...DE và RE bạn nối chung 2 chân này lại..
nếu muốn truyền thì : DE,RE=1;
nếu muốn nhận thì :DE,RE=0;

mà mình chưa thấy trở đầu cuối trên mạch của bạn..bạn tải datasheet về xem lại nhé.chúc bạn thành cộng