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="">16f84> .
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.
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
#include <16f84 .h="">16f84> #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.
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.
// dữ liệu portb được gửi đến máy tính
#include <16f84a .h="">16f84a> #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)
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 #includecycl_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 #includeVariab đượ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.
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