SỬ DỤNG VỚI BỘ VI ĐIỀU KHIỂN PIC CỔNG NỐI TIẾP RS232

SỬ DỤNG VỚI BỘ VI ĐIỀU KHIỂN PIC CỔNG NỐI TIẾP RS232


Sử dụng thực tế với vi điều khiển PIC cổng nối tiếp
Được chuẩn bị bởi Ali KILIÇ, Galip KILIÇ
Như bạn đã nhớ, chúng tôi đã lập trình PIC bằng ngôn ngữ assambly trong bài viết trước. Trong bài viết này tôi sẽ lập trình PIC với ngôn ngữ C dễ hiểu và dễ sửa đổi. Đối với những người không biết C, họ có thể sửa đổi chương trình cho mục đích riêng của họ bằng cách thực hiện các thay đổi mà chúng tôi sẽ nói về khi họ đến.
Là một phần mềm máy tính, Visual Basic hoặc bất kỳ ngôn ngữ lập trình nào khác có thể viết các chương trình riêng của họ. Nếu bạn không quen với lập trình máy tính, bạn có thể sử dụng Hyperterminal (Start> Programs> Accessories> Communications> Hyperterminal) . Nếu bạn không thể tiếp cận Hyperterminal trên đường dẫn mà tôi đã chỉ định, bạn cần phải cài đặt Hyperterminal từ Add / Remove Programs.
Trình biên dịch C tôi sử dụng có thể được tải xuống dưới dạng CCS PIC C. Nếu bạn cho chúng tôi biết về các vấn đề của bạn với trình biên dịch này, chúng tôi sẽ cố gắng trợ giúp.
Mã C cho PIC được sử dụng khi giao tiếp với cổng nối tiếp được đưa ra dưới đây. Mặc dù chương trình được viết cho 16F84 ;
Bạn có thể sử dụng bất kỳ vi điều khiển PIC nào bạn muốn bằng cách thay đổi #include <16f84 .h=""> .
chậm trễ #use (clock = 4000000) phù hợp với tỷ lệ dao động tinh thể bạn sử dụng, #use RS232 (baud = 9600, Xmit = PIN_A1, RCV = PIN_A2) sẽ chỉ ra chân sẽ sử dụng giao tiếp nối tiếp với dòng.
Tốc độ truyền thông của Hyperterminal nên được đặt thành 9600 baud. Đối với PIC với một USART bên trong, sẽ hiệu quả hơn khi sử dụng chân RX và TX (ví dụ , chân RC7 RX và RC6 TX nên được sử dụng cho PIC 16F877 ).
#byte port_b = 6 dòng cho biết vị trí của Đăng ký của PORTB. Đối với PORTA, dòng này phải được thay đổi thành # byte port_a = 5 . Bạn có thể thay đổi port_A hoặc port_B như bạn muốn, với những tên này thay đổi trong chương trình. set_tris_b (0x00); dòng chỉ ra rằng PORTB sẽ thoát.
Để nhập một cổng, dòng này set_tris_b (0xFF); .
Đường Trong khi (TRUE) được sử dụng để tạo vòng lặp vô hạn.
Trong chương trình, một biến được định nghĩa trong tên dữ liệu, và khóa được đọc từ Hyperterminal được gán cho biến này. Biến rỗng sau đó được gửi đến PORTB. không sử dụng biến dữ liệu port_b = getch (); điều tương tự cũng được thực hiện với dòng. delay_ms (1000); Dòng này được sử dụng để cung cấp độ trễ 1000 mili giây hoặc 1 giây. 
Do đó, phím bấm được hiển thị trên các đèn LED trong PORTB trong ít nhất 1 giây.
Bạn có thể sử dụng bảng bên dưới để tìm ra các tổ hợp phím của ASCII.
Sử dụng tích hợp MAX232 giữa chân của vi điều khiển PIC thay vì nhập trực tiếp cổng nối tiếp Rx và đầu vào Tx là cần thiết để truyền dữ liệu không có lỗi.
MAX232 tích hợp tín hiệu cổng nối tiếp -12, +12 V tới TTL (+5, 0 V) ​​hoặc mức TTL tới -12 V, tín hiệu +12 V. PA1 và PA2 là chân PORTA 1 và 2 của PIC16F84.

Kết nối PIC với MAX232 với đường nối PC
Gửi thông tin từ máy tính đến PIC qua cổng nối tiếp

Mạch cần thiết để gửi thông tin từ máy tính đến Cổng nối tiếp đến PIC
#include <16f84 .h="">

#fuses XT, NOWDT, NOPROTECT

#use delay (clock = 4000000)

#use rs232 (baud = 9600, xmit = PIN_A1, rcv = PIN_A2)  

#byte port_b = 6 // vị trí của portb n trong ram

main () {

   int dữ liệu;

   set_tris_b (0x00); // portb output
printf ( "calisiyor ... \ n \ r");

   trong khi (TRUE)
   {
	
     data = getch ();
     port_b = data; // hiển thị số cổng trong người gửi
     delay_ms (1000);

   } // nhiều lần 
}

GỬI THÔNG TIN TỪ PIC ĐẾN MÁY TÍNH QUA CỔNG NỐI TIẾP

Bây giờ PIC da và sẽ gửi thông tin đến các cổng nối tiếp máy tính. sơ đồ mạch và mã C cần thiết cho việc này được đưa ra dưới đây. Với công tắc bát phân setpoint được nhập vào. giá trị không chính xác của điện trở pullup là nhàn rỗi để tránh đọc chân của PIC. 8 là một gói phần mềm bao gồm Tám kháng RESPACE. 
giá trị ASCII của các thông tin gửi sẽ được nhìn thấy HyperTerminal. Tận dụng lợi thế của bảng ASCII vào cuối mùa hè khi cần thiết.

Mạch yêu cầu gửi thông tin từ PIC đến Cổng nối tiếp PC
// dữ liệu portb được gửi đến máy tính
#include <16f84a .h="">

#fuses XT, NOWDT, NOPROTECT

#use delay (clock = 4000000)

#use rs232 (baud = 9600, xmit = PIN_A1, rcv = PIN_A2)

#byte port_b = 6 // vị trí của portb n trong ram

main () {

   int dữ liệu;

   set_tris_b (0x00); // portb output

   printf ( "calisiyor ... \ n \ r");

   trong khi (TRUE)
   {

     data = port_b; // dữ liệu được gửi tới máy tính trên cổng
     printf ("% d", dữ liệu);
     delay_ms (1000);

   } // nhiều lần 
}
Bảng ASCII

SỬ DỤNG THỰC TẾ CỔNG NỐI TIẾP VỚI PIC16F84

Chuẩn bị bởi: Kiếm kiếm
Trong bài viết này, tôi sẽ nhấn mạnh việc sử dụng thực tế của cổng nối tiếp. Chúng tôi sẽ cần một máy tính cho điều này, một tích hợp PIC 16F84, một kết nối DB9, một số đèn LED và điện trở. Chúng tôi cũng cần một mã nhỏ để gửi thông tin đến cổng.
Đằng sau PC của bạn là các cổng khác nhau cho phép máy tính giao tiếp với thế giới. Ví dụ, một LTP đằng sau máy tính của tôi (cổng máy in), hai RS232 DB9 (9-pin) cổng nối tiếp (còn gọi là các cổng giao tiếp), hai cổng USB (Universal Serial Bus) cho tốc độ cao truyền nối tiếp và PS / 2 cổng kết nối, mause và keyboard. Các cổng này là tiêu chuẩn cho nhiều máy tính mới.
Dưới đây là đầu nối DB9 cho RS232. RXD (Nhận dữ liệu) và TXD (Truyền dữ liệu) và, tất nhiên, GND (Mặt đất), tức là chân thứ hai, thứ ba và thứ năm. Các chân này có thể được dịch sang tiếng Thổ Nhĩ Kỳ như máy thu, bộ phát và mặt đất tương ứng. Các chân khác được sử dụng cho modem hoặc các ứng dụng tương tự. Trong ứng dụng của chúng tôi, chúng tôi sẽ kết nối một đầu nối DB9 với chân thứ hai, thứ ba và thứ năm của cáp. Các đầu khác có thể bị ngắt kết nối.
1. CD (Carrier Detect) 
2 RXD (Nhận dữ liệu) 
3 TXD (Transmit Data) 
4 DTR (dữ liệu thiết bị đầu cuối đã sẵn sàng) 
5 GND (Ground) 
6 DSR (Data Set Ready) 
7 RTS (Request Để Gửi ) 
8. CTS (Xóa để gửi) 
9. Chỉ báo vòng (RI)
Thông tin chúng tôi sẽ trao đổi là tích hợp 16F84 được sản xuất bởi công ty vi mạch tích hợp (www.microchip.com). PIC (Bộ điều khiển giao diện lập trình) là một vi điều khiển có thể được lập trình nhiều lần. Như đã biết, vi điều khiển được tích hợp với CPU (vui), RAM (bộ nhớ truy cập ngẫu nhiên) và các đơn vị đầu vào / đầu ra. Ý tôi là, đó là một loại máy tính. PIC16F84 (xem phụ lục để biết chi tiết) PIC là sự tích hợp thích hợp nhất để bắt đầu học. Để lập trình tích hợp này, bạn cần phải sử dụng ngôn ngữ assambly của riêng bạn. Biên dịch mã có thể được biên dịch với trình biên dịch MPASM, mà bạn có thể tải về miễn phí từ internet. Bạn có thể sử dụng NOTPED để viết mã, cũng như trình soạn thảo MPLAB với trình mô phỏng. Số lệnh cơ bản là 34. Nếu ngôn ngữ lắp ráp Eger là khó khăn cho bạn, đó là công việc tương tự như Pascal, Bạn cũng có thể làm điều đó bằng các ngôn ngữ nâng cao như C, BASIC. Các ngôn ngữ này được biên dịch đặc biệt cho PIC. Các phiên bản demo của các trình biên dịch này có thể được tìm thấy trên internet.
Thông tin chung về tích hợp PIC16F84 được đưa ra dưới đây. Bạn cũng có thể tìm thấy thông tin chi tiết về các chân bên dưới.
Như có thể được hiểu từ bảng trên, âm trầm được áp dụng cho điện áp + 5V và chân thứ năm được nối với mặt đất. 16F84 có thể được sử dụng như 5 đơn vị, 8 đơn vị là đầu vào hoặc đầu ra B. Vì vậy, chúng tôi có 13 mục hoặc thoát trong tổng số. -MCLR đầu vào được sử dụng để thiết lập lại PIC. Xung đồng hồ cần thiết cho PIC được cung cấp bởi các bộ dao động kết nối với chân thứ 15 và thứ 16. Mặc dù có nhiều loại dao động khác nhau, các bộ dao động loại tinh thể (XT) đều đáng tin cậy về thời gian và thực tế để sử dụng. Dao động XT tôi sử dụng trong ứng dụng này là bộ dao động 4 MHz.
Sau khi chuyển đổi mã bằng văn bản thành mã thập lục phân với MPASM, tôi sau đó chương trình PIC với lập trình PIC (tôi sử dụng PIC Prog.). Lập trình PIC mạch khác nhau
Vì bài viết này giao tiếp với cổng nối tiếp mục đích chính, tôi đã cung cấp thông tin chung về PIC. Để biết thêm thông tin, bạn có thể gửi email cho tôi.
Bây giờ hãy xem xét các mạch của chúng tôi với 16F84. Mạch đầu tiên sẽ hiển thị thông tin từ máy tính trên 8 đèn LED được kết nối với cổng B. Trong mạch thứ hai, một máy tính thông tin 8 bit được nhập vào cổng B sẽ được nhập vào. Trong thông tin sau đây, thông tin 8 bit được truyền đến PIC, và sau đó thông tin 8 bit được truy xuất đến máy tính thông qua PIC.
Tôi đã thực hiện giao diện với PIC giao tiếp với máy tính với Visual Basic. Giao diện của giao diện được hiển thị bên dưới (Hình 3). Nút kiểm tra sẽ được sử dụng để gửi số được ghi vào cửa sổ văn bản hoặc ký tự cho PIC. Nút TestAlal sẽ in 8 bit thông tin từ PIC trong cửa sổ văn bản. Nút thoát sẽ cho phép chúng tôi thoát khỏi chương trình.
Bộ điều khiển Mscomm, không xuất hiện trong giao diện và cho phép chúng ta xử lý cổng comm, được hiển thị trong vùng làm việc. Để tải bộ điều khiển này, chọn dự án> componenets> microsoft comm control. Sau khi quá trình này được thực hiện, quan điểm của khu vực làm việc như hình dưới đây. (Hình 4)
Các mã liên quan đến chương trình như sau (Hình 5). Đối với nút trình kiểm tra:
Private Sub ver_Click ()

    MSComm1.Settings = "9600, N, 8,1"
    'rs232 cài đặt liên quan
    MSComm1.PortOpen = True
    'cổng đang được mở
    MSComm1.Output = Text1.Text
    Giá trị được viết cho 'cửa sổ văn bản' đang được gửi tới ảnh
    MSComm1.PortOpen = False
    'cổng đang đóng
    
Kết thúc phụ
Như bạn có thể hiểu từ các bình luận, các thiết lập liên quan đến cổng comm được thực hiện trước tiên. Thông tin này được đặt ở 9600 baud (bit per second), bit chẵn lẻ (không chẵn lẻ) cho thấy các dữ liệu được gửi hay nhận từ 8-bit và một bit stop. MSComm1.PortOpen = True tuyên bố rằng mở cảng MSComm1.Output thông tin cảng gửi (Sent text1 thông tin được ghi vào số hoặc ký tự) và MSComm1.PortOpen = False cho biết rằng các cổng được đóng lại.
Nút là mã cho thử nghiệm.
Private Sub al_Click ()

    MSComm1.Settings = "9600, N, 8,1"
    'rs232 cài đặt liên quan
    MSComm1.PortOpen = True
    'cổng đang được mở
    value = Asc (MSComm1.Input)
    '8 bit đọc từ pic là nhịp độ
    Text1.Text = value
    'thông tin đọc xuất hiện trong cửa sổ văn bản
    MSComm1.PortOpen = False
    'cổng đang đóng
    
Kết thúc phụ
Trong mã nguồn ở trên có các mã tương tự với các mã được sử dụng trong nút trình kiểm tra. MSComm1.Input đã được sử dụng để nhận thông tin từ bên ngoài. Hàm asc được sử dụng để lấy giá trị ascii của ký tự đã nhận. Bạn có thể tìm thấy biểu đồ giả đằng sau bất kỳ cuốn sách lập trình nào. có thể phù hợp hơn để xác định giá trị mờ biến giá trị là số nguyên. Tắt cổng với MSComm1.PortOpen = False là quan trọng về mặt không cho lỗi "cổng đã mở" của chương trình.
Nút thoát cho phép bạn thoát khỏi chương trình.
Chúng ta sẽ sử dụng nó ngay bây giờ. Hình 6 cho thấy mạch được cài đặt. PIC được sử dụng trong mạch phải được lập trình để nhận thông tin trong tương lai từ cổng nối tiếp thông qua mạch lập trình và phần mềm lập trình
Mã asm tương ứng được đưa ra dưới đây. Bạn có thể lưu mã này vào một NOTPED với phần mở rộng asm và sau đó chuyển đổi nó thành mã mở rộng hex với trình biên dịch MPASM.
Mã asm để gửi thông tin cho PIC như sau:
	danh sách p = 16f84; ********************************************* *****************
; *
; * ----------------------------------	
; * PORTA: 
; * 0 
; * 1 
; * 2 
; * 3 đầu vào nối tiếp txd pin3 của rs232 
; * 4 
; * PORTB:
; * 0 LED	   
* 1 LED
* 2 đèn LED
* 3 đèn LED 
; * 4 đèn LED
* 5 đèn LED
* 6 đèn LED
* 7 đèn LED
; *

; Bao gồm ngày cho 16F84

	#include 	


cycl_1 Equ 0x20; quầy
cycl_2 Equx021; quầy
rs232in Equ 0x22; temp biến để truyền giá trị của nó tới portb
Byte Equ 0x23, biến được sử dụng để định vị 8 bit
Temp Equation 0x24, biến tạm thời cho thời gian tạm dừng
trong phương trình 3, RA3 là đầu vào

; ************************************************* *************

; Cổng B được đặt làm đầu ra
porta và portb được làm rõ

init
	bsf STATUS, RP0; đi đến bank1
	movlw B'00000000 '; portb đầu ra
	movwf TRISB
	bcf STATUS, RP0; đi đến bank0
	clrf PORTA; rõ ràng cổng
	clrf PORTB; rõ ràng portB

chương trình chính bắt đầu ở đây

vòng
	gọi ser_RX; chi nhánh ser_RX
	movfw rs232in		
	movWF PORTB; Hiển thị nội dung w cho portB
	goto Loop

; ************************************************* *********
, nhận một Byte để 'byte', 'rs232in' và w tương ứng

ser_rx
clrf Byte; byte rõ ràng
	movlw 8
	movwf cycl_1; 8 lần cho 8 bit
	btfss PORTA, trong; đợi cho đến khi Startbit
	goto ser_RX; nếu không có startbit goto ser_RX
	gọi Tạm dừng; tạm dừng cho 1/2 bit (48 usec)
	btfss PORTA, trong; kiểm tra porta một lần nữa
	goto ser_RX
RX_2	
gọi Chờ; chờ 1 bit (94 usec)
	btfsc PORTA, trong;
	bcf STATUS, C; cao -> 0
	btfss PORTA, trong;
	bsf STATUS, C; thấp -> 1
				;
	rrf Byte, f; chuyển cờ tiến hành sang Byte reg.
	decfsz cycl_1, f; 8 bit
	goto RX_2; 
	
	gọi Chờ; chờ 1 bit (94 usec)
	btfsc PORTA, trong; Stop-Bit 1
	goto ser_RX; nếu không có StopBit 1
	gọi Chờ	
	btfsc PORTA, trong; Stop-Bit 2
	goto ser_RX; nếu không có StopBit 2

	movf Byte, w
	movwf rs232in; Byte đi qua rs232in
	trả lại

; ************************************************* *********
một chút thời gian chờ đợi
;
; nhận 4 MHz 10 MHz
; 2400 Bps = 69d 173đ
; 4800 Bps = 34d 86 ngày
; 9600 Bps = 15 ngày 43 giây

Chờ movlw D'15 '; Nhận 9600/4 MHz
	movwf cycl_2; 

Wait1	
	nope
	nope
	nope
						; 
	decfsz cycl_2, 1	
	goto Wait1
	
	trả lại

; ************************************************* *********
1/2 bit thời gian chờ đợi
; 4 MHz 10 MHz
; 2400 Bps = 416T = 63 đô la 157 ngày
; 4800 Bps = 31 ngày 78 giây
; 9600 Bps = 15 ngày 39 ngày
;	
Tạm dừng movlw D'15 '; 9600/4 MHz
	movwf Temp;	
Pause2	
	decfsz Nhiệt độ, f; Tạm dừng cho 1/2 bit	
	goto Pause2;	
	trở lại;

; ************************************************* *********

	chấm dứt
Trong chương trình lập trình PIC, chúng tôi đã chuẩn bị với Visual Basic, nếu chúng ta viết một số trong cửa sổ văn bản và nhấp vào nút testver, số lượng được viết trong 8 LED sẽ được nhìn thấy.
Mạch trong Hình 7 có thể được sử dụng để nhận thông tin từ PIC.
Khi một logic 0 hoặc logic 1 được gán cho 1 điện trở kiloohm và một nút test0 được nhấn trong chương trình Visual Basic của chúng tôi, một số 8 bit thông tin được áp dụng cho các điện trở xuất hiện trong cửa sổ văn bản. Mã hex mà bạn cần tải trên PIC thu được bằng cách biên dịch mã asm được đưa ra dưới đây.
Mã asm để sử dụng để nhận thông tin từ PIC như sau:
	danh sách p = 16f84
; ************************************************* *************
; *
; *   
; * ----------------------------------	
; * PORTA: 0 
; * 1 
; * 2 ​​đầu vào nối tiếp	
; * 3 
; * 4 
; * PORTB: 0 điện trở	   
; * 1 điện trở
; * 2 ​​điện trở
; * 3 điện trở 
; * 4 điện trở
; * 5 điện trở
; * 6 điện trở
; * 7 điện trở
; *
; ************************************************* *************

; Bao gồm dữ liệu cho bộ xử lý 16F84

	#include 

Variab được định nghĩa

Temp Equ 0x20
cycl_1 Equ 0x21; phản đối
cycl_2 Equ 0x22; phản đối
Byte equ 0x23
ra EQU 2; RS-232 là đầu ra từ RA2

; ************************************************* *************
; 
; Pin RA2 là pin đầu ra

init
	bsf STATUS, RP0; goto bank1
	movlw B'00111011 '; Đầu ra RA2
	movwf TRISA; 
	bcf STATUS, RP0; trở về bank0
	clrf PORTA; 

; asm này trước hết gửi "a" đến máy tính tôi đã thay đổi nó để gửi dữ liệu 
; áp dụng cho portb (alisur)
vòng
	movf PORTB, w; chuyển portb sang w reg. 
	gọi Send_RS; Dữ liệu được gửi qua RS-232
	goto Loop

; ************************************************* **************
gửi Byte, trong Đăng ký W 
Send_RS; cho một Byte serielly	
	movwf Byte; Byte in w
	movlw 8; nó sẽ gửi 8 bit
	movwf cycl_1
	bcf PORTA, ra
	gọi Wait_s; 1 Stopbit (1)
	bsf PORTA, ra
	gọi Wait_s; 1 Startbit (0)

Send_1
rrf Byte, f; bit sẽ được gửi qua thruogh mang cờ
	btfsc STATUS, C
	bcf PORTA, ra ngoài; Thấp khi Bit = 1
	btfss STATUS, C
	bsf PORTA, ra ngoài; Cao khi Bit = 0
	gọi Wait_s; Thời gian chờ 1 bit
	decfsz cycl_1, f; là nó 8 bit?
	goto Send_1; Không.
	bcf PORTA, ra ngoài; Byte kết thúc, 2 Stopbit (1) gửi
	gọi Wait_s;
	gọi Wait_s; (Mod.1)
	trả lại

; ************************************************* *********
; thời gian chờ đợi một chút
;
; gửi 4 MHz 10 MHz
; 2400 Bps = 69d 173đ
; 9600 Bps = 15 ngày 43 giây

Wait_s	
movlw D '15'; 9600/4 MHz gửi
	movwf cycl_2; 
Wait1	
	nope
	nope
	nope
	decfsz cycl_2, 1	
	goto Wait1
	trả lại

	chấm dứt

BUS DỮ LIỆU VỚI ỨNG DỤNG PIC16F877

Được chuẩn bị bởi: Galip KILIÇ
Giao tiếp giữa máy tính hoặc máy chủ (có thể là thẻ có vi điều khiển máy chủ) và các máy vệ tinh khác có thể được thực hiện theo nhiều cách khác nhau. Những máy này có thể là các máy sản xuất hàng loạt trong nhà máy hoặc thiết bị gia dụng như tivi, bộ âm nhạc, máy điều hòa, lò nướng, đèn, nồi hơi đốt trong nhà. Với một thẻ điều khiển có chứa vi điều khiển PIC16F877, thông tin có thể được thu thập từ các máy vệ tinh hoặc có thể được gửi đến chúng bằng cách gửi lệnh. Các giao thức khác nhau có thể được sử dụng để giao tiếp giữa máy chủ hoặc máy tính (PC) và các máy vệ tinh.
RS232 là thích hợp nhất của các giao thức này. Để biết thêm thông tin về việc sử dụng thực tế của các cổng nối tiếp RS232 với vi điều khiển PIC (ETMD Tin tức 15 tháng 2 năm 2004 vấn đề), sử dụng cổng song song, Serial Port sử dụng thực tế với vi điều khiển PIC (http://www.etmd.org.tr/yazilar.asp) . Kết nối giữa các máy vệ tinh và máy chính hoặc máy tính được thực hiện bằng cách sử dụng cái gọi là bus dữ liệu (Hình 1). Kết nối giữa các thẻ PIC và máy tính được hiển thị trong Hình 2. 
Mục đích của bài viết này là để giao tiếp hai máy tính và rất nhiều bộ vi xử lý cho nhau thông qua một BUS và để giao tiếp với máy tính hoặc máy chủ thông qua cổng nối tiếp như được hiển thị ở trên.
Giao tiếp với PIC qua cổng nối tiếp là một trong những vấn đề quan trọng đối với những người đam mê đối phó với những vấn đề này. Tôi quyết định xuất bản thực hành nhỏ này sau khi các thí nghiệm để cho một cái nhìn thoáng qua về chủ đề này và để giúp những người đang làm việc như những người nghiệp dư. Mạch đã được thử và kiểm tra hoạt động của nó.
Trong ứng dụng này, chúng tôi sẽ cho phép nhiều PIC ở một bên để giao tiếp với máy tính thông qua hai dây. Để giao tiếp với giao thức RS232, số lượng PIC được kết nối liên tục giới hạn độ dài của dây dẫn kết nối đến 12 mét. Nếu khoảng cách này được mong muốn dài hơn, hệ thống Bus dữ liệu tốt hơn có thể được cài đặt giữa các PIC với giao thức RS485 (khoảng 800-1000 mét).
Các mã assambly sau đây là các mã của PIC đầu tiên của hệ thống Bus dữ liệu.
Tóm lại, hệ điều hành như sau: Khi các mã được nạp vào PIC16F877 và mạch được cài đặt đúng, khi phím "1" được nhấn trên bàn phím máy tính, vi điều khiển PIC
DT "<** Nhấn phím 1 trên mặt nước và bàn phím **>

Thông tin trên dòng sẽ được gửi đến tài sản thế chấp. Thiết bị đầu cuối Hyper sẽ hiển thị văn bản sau.
	<** Trên mặt nước và trên bàn phím, nhấn phím 1 **>

PIC hiểu giá trị của "1" với dòng sau, so sánh giá trị được gửi với dòng này, hiểu rằng nó sẽ gửi giá trị sau khi nó gửi nó, và gửi giá trị trong dòng DT đến cực cuối. 

SUBLW D'49 ', cái được gửi từ bàn phím là 49 so với pariah.

Hệ thống BUS 2. bộ xử lý được lập trình bằng cách thực hiện các thay đổi sau trong các mã sau.

SUBLW D'49 ' 

50 được viết dưới dạng giá trị ascii của "2" thay vì 49 

SUBLW phải được thay thế bằng D'50 '. 

DT "<** Nhấn phím 1 trên mặt nước và bàn phím **>

Nếu dòng được gửi bởi PIC thứ 2 thay vì dòng 

DT "<** Nhấn 2 phím trên mặt nước và bàn phím **>

Nó sẽ được thay đổi như sau.

PIC16f877 trong hệ thống BUS khác có thể được kết nối với hệ thống BUS của bộ xử lý nhiều lần theo yêu cầu bằng cách thực hiện các thay đổi tương ứng.

Giả sử bạn đã kết nối 3 16F877:

Khi bạn nhấn phím "1" trên bàn phím, 
DT "<** Trên mặt nước và bàn phím 1 nhấn nút **>" thông tin
Khi bạn nhấn phím "2" trên bàn phím, 
DT "<** Nhấn 2 phím trên mặt nước và bàn phím **>" thông tin
Nếu bạn nhấn phím "3" trên bàn phím, 
DT "<** Nhấn 3 phím trên mặt nước và bàn phím **>" thông tin
Nó sẽ được gửi đi.

Lưu ý: 
1 giá trị ascii 49
2 giá trị ascii 50
3 giá trị ascii 51
tôi progam
Windows Hyper Terminal 19200 bps, N, gửi thông tin với 8,1 trong lần gửi tay này là NO	
; Tên chương trình: Giao tiếp với nhiều PIC qua cổng nối tiếp.

DANH SÁCH P = 16F877, C = 140
	ERRORLEVEL 1, - (305)
	#INCLUDE "P16F877.INC"
	__CONFIG _PWRTE_ON & _XT_OSC & _LVP_OFF ​​& _WDT_OFF

TEMP EQU 7FH
SAYAC1 EQU 8FH


	ORG 0; dòng bắt đầu chương trình
	GOTO MSTART

MSTART

	BCF STATUS, RP1
	BCF STATUS, RP0, BANK0 muộn.

	MOVLW 0X00
	MOVWF PORTA
	MOVWF PORTB
	MOVWF PORTC
	MOVWF PORTD
	MOVWF PORTE
	
	BCF STATUS, RP1
	BSF STATUS, RP0, BANK1 vượt qua băng ghế dự bị.
	
	CLRF TRISA
	CLRF TRISD
	CLRF TRISE
	MOVLW 0XFF
	MOVWF TRISB
	MOVLW 0XFF
	MOVWF TRISC		
	

; Giá trị Baud với BRGH = 0
; ((20000000/9600) / 64) -1 = 32


; movlw d'6 '; 9600 baud @ 4 Mhz Fosc brgh = 0
; movlw d'25 '; 9600 baud @ 4 Mhz Fosc brgh = 1
; movlw d'207 '; 1200 baud @ 4 Mhz Fosc brgh = 1
; movlw d'2272 '; 110 baud @ 4 Mhz Fosc brgh = 1
; movlw d'103 '; 2400 baud @ 4 Mhz Fosc brgh = 1
; movlw d'52 '; 4800 baud @ 4 Mhz Fosc brgh = 1
; movlw d'12 '; 19200 baud @ 4 Mhz Fosc brgh = 1

                    		
	MOVLW D'12 '; 19200 BAUD AT 4 MHZ FOSC
	MOVWF SPBRG
	MOVLW B'00100100 '		
MOVWF TXSTA, Cho phép truyền không đồng bộ, Brgh = 1 Tốc độ cao
	BCF STATUS, RP1
	BCF STATUS, RP0; BANK0
	MOVLW B'10010000 '
	MOVWF RCSTA; BẬT ASYNC 
	CLRF TEMP

GIẢI QUYẾT

     	DECPSZ TEMP
     	GOTO SETTLE

MAI

	CLRF TEMP
	GỌI RXLOOP
	SUBLW D'49 ', cái được gửi từ bàn phím là 49 so với pariah.
	BTFSC STATUS, Z
	GỌI PRN
	GOTO CHÍNH

PRN	

	MOVF TEMP, W
	GỌI GỌI
	GỌI TXLOOP
	INCF TEMP, F
	SUBLW D'62 '; '>' SYMB TUYỆT VỜI
	BTFSS STATUS, Z
	PROT GOTO
	GỌI TAB
	MOVF PORTB, w
	GỌI TXLOOP
	GỌI NHẬP
	GỌI LF
	RETURN

ENTER

	MOVLW D'13 '; mã trả lại
	GỌI TXLOOP
	RETURN


TAB

	MOVLW D'9 '; mã cho tab
	GỌI TXLOOP
	RETURN

LF

	MOVLW D'10 '; mã cho linefeed
	GỌI TXLOOP
	RETURN

TXLOOP	

	NOPA
	BTFSS PIR1, TXIF; Kiểm tra xem khoản đóng góp đã sẵn sàng hay chưa.
	GOTO TXLOOP
	MOVWF TXREG; dữ liệu đầu vào được chuyển đến thanh ghi W.
	RETURN

RXLOOP

	NOPA
	BTFSS PIR1, RCIF
	GOTO RXLOOP
	MOVF RCREG, W
	RETURN

BẢNG

	ADDWF PCL, F
	
		DT "<** Nhấn phím 1 trên bàn phím: để liên lạc **>

	RETURN

	END
Mạch ứng dụng
Tất cả các bài viết sử dụng cổng nối tiếp: Cổng nối tiếp RS232 PIC với Bộ vi điều khiển
Tệp tải xuống danh sách LINK (ở định dạng TXT) liên kết -1868.zip mật khẩu-pass: 320volt.com

Post a Comment

[disqus] [facebook] [blogger]

MKRdezign

Biểu mẫu liên hệ

Name

Email *

Message *

Powered by Blogger.
Javascript DisablePlease Enable Javascript To See All Widget
Hỗ trợ trực tuyến