BẢNG MẠCH IN KIỂM SOÁT LPT VỚI PIC16F877 C ++
Chuẩn bị bởi: Soner IL và Ramazan ERYILDIZ
Đầu vào: PIC là toán tử đầu vào-đầu ra cho bộ điều khiển giao tiếp PERIPHERAL. Nó ban đầu được phát triển vào năm 1994 vì nhu cầu cho một giải pháp rất nhanh và rẻ để giảm và kiểm soát tải trên đầu vào và đầu ra của bộ vi xử lý 16 bit và 32 bit.
Trong dự án của chúng tôi, chúng tôi đang tạo mạch in bằng 16f877. Công việc của thời gian có thể được kiểm tra trong hai giai đoạn. Đầu tiên, các tọa độ của các điểm bị xuyên thủng được lấy từ máy tính và trong phần thứ hai, động cơ bước được sử dụng để đục lỗ bo mạch in.
Tôi đang sử dụng một chương trình C ++ để chuyển đổi dữ liệu từ máy tính sang bit-by-bit
Tổ chức bộ nhớ PIC: Gia đình PIC 16C7X có bộ đếm chương trình 13 bit có thể giải quyết không gian bộ nhớ chương trình 8K * 14. Số lượng bộ nhớ chương trình được sử dụng bởi mỗi phần tử được liệt kê dưới đây: Truy cập một địa chỉ trên đầu địa chỉ được sử dụng trong các phần tử này với bộ nhớ chương trình nhỏ hơn 8K gây ra xung đột. Các vector thiết lập lại là 0000h và vector cắt là trên 0004h.
Bảng3.2 Phạm vi địa chỉ bộ nhớ chương trình

Tổ chức bộ nhớ dữ liệu : Bộ nhớ dữ liệu được chia thành các thanh ghi đa năng và các thanh ghi chức năng đặc biệt (các thanh ghi). Các bit RP1 và RP0 là các bit chọn ngân hàng.
RP1: RP0 (Tiểu bang <6: 5="">) 6:>
00 => Bank0
01 => Bank1
10 => Bank2
11 => Bank3
00 => Bank0
01 => Bank1
10 => Bank2
11 => Bank3
Mỗi ngân hàng mở rộng đến 7Fh (128 byte). Một ngân hàng thuộc mỗi ngân hàng được dành riêng cho các máy ghi chức năng đặc biệt. Các thanh ghi chức năng đặc biệt có các thanh ghi chung được sử dụng làm RAM tĩnh. Tất cả các ngân hàng đã sử dụng đều chứa các thanh ghi chức năng đặc biệt. Một số thanh ghi chức năng đặc biệt "sử dụng cao" được nhân đôi từ ngân hàng này sang ngân hàng khác để giảm mã (giảm) và truy cập nhanh hơn.
Đăng ký mục đích chung được sử dụng trong dự án
Sổ đăng ký trạng thái: Thanh ghi STATUS chứa trạng thái số học ALU, trạng thái RESET và bit chọn cụm của bộ nhớ dữ liệu. Như với bất kỳ bản ghi nào, bản ghi STATUS có thể là đích cho bất kỳ lệnh nào. Nếu lệnh ảnh hưởng đến thanh ghi STATUS, Z, DC hoặc bit C là đích thì các ghi đè ba bit này sẽ bị vô hiệu hóa. Các bit này đã được thiết lập hoặc xóa một cách thích hợp theo trạng thái logic của thiết bị. Ngoài ra, các bit TO và PD không phải là các bit có thể ghi được. Do đó, kết quả của các lệnh STATUS mục tiêu được lưu trữ có thể khác với thiết kế.
Ví dụ, lệnh CLRF STATUS sẽ xóa ba bit trên cùng và thiết lập bit Z. Đây sẽ là 000u trong bản ghi STATUS. (U = không đổi). Để thay đổi bản ghi STATUS, chỉ sử dụng BCF, BSF, SWAPF và MOVWF. Bởi vì các lệnh này không ảnh hưởng đến bất kỳ bit trạng thái nào.
CHÚ THÍCH 1: Các bit IRP và RP1 (STATUS <7: 6="" a.="" b="" c="" ch="" d="" font="" i="" kh="" l="" n="" nbsp="" ng="" nh="" p="" ph="" s="" t="" tr="" v="" x="" y="">Không nên sử dụng các bit này làm các bit R / W có mục đích chung vì nó có thể ảnh hưởng đến khả năng tương thích cao với các sản phẩm trong tương lai. 7:>Note2: Trong các chiết xuất , các bit C và DC hoạt động như các bit được mượn và được mượn số. Các lệnh SUBLW và SUBWF có thể được kiểm tra cho ví dụ này.
Hình 3.2: Thanh ghi trạng thái (O3h, Địa chỉ 83h)

LƯU Ý:
R = Có thể đọc Bit
W = Bit có thể ghi
= bit không được triển khai, đọc là "0"
N = giá trị khi đặt lại POR.
R = Có thể đọc Bit
W = Bit có thể ghi
= bit không được triển khai, đọc là "0"
N = giá trị khi đặt lại POR.
Bit 7: IRP: bit lựa chọn bản ghi (được sử dụng để định địa chỉ gián tiếp).
Bit 6-5: RP1: RPO: Đăng ký các bit lựa chọn thiết lập (được sử dụng để định địa chỉ trực tiếp)
Bit 4: TO = Khoảng thời gian Bit
1 = Sau khi bùng nổ nguồn điện, CLRWDT hoặc lệnh SLEEP
0 = khoảng thời gian WDT kết thúc.
1 = Sau khi bùng nổ nguồn điện, CLRWDT hoặc lệnh SLEEP
0 = khoảng thời gian WDT kết thúc.
Bit 3: PD: Power Down Bit
1 = Sau khi bật nguồn hoặc với lệnh CLRWDT
0 = Thi hành lệnh SLEEP
1 = Sau khi bật nguồn hoặc với lệnh CLRWDT
0 = Thi hành lệnh SLEEP
Bit 2: Z: Zero Bit
1 = Kết quả của phép tính số học hoặc logic là 0.
0 = Sự kết thúc của phép toán số học hoặc logic không phải là số không.
1 = Kết quả của phép tính số học hoặc logic là 0.
0 = Sự kết thúc của phép toán số học hoặc logic không phải là số không.
Bit 1: DC: Số bit truyền / mượn số (hướng dẫn ADDWF và AALW)
1 = Thực hiện kết quả thu được theo thứ tự 4.lớn.
0 = Không có kết quả thực hiện trong thứ tự thấp thứ 4.
1 = Thực hiện kết quả thu được theo thứ tự 4.lớn.
0 = Không có kết quả thực hiện trong thứ tự thấp thứ 4.
Bit 0: C: bit thực thi / mượn (hướng dẫn ADDWF và ADDLW)
1 = Thực thi từ bit quan trọng nhất của kết quả làm tròn
0 = Không thực hiện từ bit quan trọng nhất của kết quả thu được.
1 = Thực thi từ bit quan trọng nhất của kết quả làm tròn
0 = Không thực hiện từ bit quan trọng nhất của kết quả thu được.
Ghi chú: Phép toán trừ được thực hiện bằng cách thêm các số nguyên nhị phân của dữ liệu thứ hai. (RRF, RLF), bit này được nạp với bit thứ tự thấp hoặc cao trong thanh ghi nguồn.
Option_reg kỷ lục (không bắt buộc ghi): Option_reg đăng ký, TMR0 / WDT prescene là bên ngoài ngắt INT, TMR0 và PORTB từ các bit kiểm soát khác nhau mà được cấu hình để được vẽ nghèo, đăng ký là có thể ghi và đọc được. 81h.
Hình 3.3: Ghi tùy chọn (Địa chỉ 81h, 181h)

Bit7 ::
PORTB pull-up (kéo lên), bit kích hoạt.
1: PORTB là một thụ động kéo lên.
0: Hấp thụ PORTB được kích hoạt với giá trị khóa cổng.
1: PORTB là một thụ động kéo lên.
0: Hấp thụ PORTB được kích hoạt với giá trị khóa cổng.
Bit6: INTEDG: bit lựa chọn cạnh cắt cuối.
1 = Pin RB0 / INT được gửi đến cạnh tăng.
0 = RB0 / INT được gửi đến cạnh dưới của pin.
1 = Pin RB0 / INT được gửi đến cạnh tăng.
0 = RB0 / INT được gửi đến cạnh dưới của pin.
Bit5: TOSC: TMR0 Nguồn đồng hồ chọn bit.
1 = Pin RA4 / TOCKI thay đổi.
0 = Chu trình lệnh nội bộ CLOCK (CLKOUT) được chọn.
1 = Pin RA4 / TOCKI thay đổi.
0 = Chu trình lệnh nội bộ CLOCK (CLKOUT) được chọn.
Bit4: T0SE: TMR0 bit lựa chọn bắt đầu cạnh.
1 = Di chuyển chốt RA4 / T0CKI từ cao xuống thấp
0 = RA4 / T0CKI đạt mức cao ở mức thấp.
1 = Di chuyển chốt RA4 / T0CKI từ cao xuống thấp
0 = RA4 / T0CKI đạt mức cao ở mức thấp.
Bit3: PSA: Kết thúc nhiệm vụ phân vùng (prescale).
1 = WDT như prescale.
0 = Đặt T.mer0 làm prescale.
1 = WDT như prescale.
0 = Đặt T.mer0 làm prescale.
Bt2-0: PS2: PS0: Bit để chọn tỷ lệ của bộ đếm trước.
1 = WDT như prescale.
0 = Đặt T.mer0 làm prescale.
1 = WDT như prescale.
0 = Đặt T.mer0 làm prescale.
Bt2-0: PS2: PS0: Bit để chọn tỷ lệ của bộ đếm trước.
Đăng ký Intcon: Thanh ghi INTCON là một thanh ghi có thể đọc và ghi được có chứa các bit kích hoạt khác nhau cho tất cả các cờ ngắt. 0Bh và 8Bh.
Hình 3.4: Ghi INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh)

Bit 7: GIE: Bit kích hoạt ngắt chung.
1 = Tất cả các ngắt đang hoạt động.
0 = Tất cả các vết cắt đều không hoạt động.
1 = Tất cả các ngắt đang hoạt động.
0 = Tất cả các vết cắt đều không hoạt động.
Bit 6: PEIE: Ngắt bit kích hoạt ngắt.
1 = Bật tất cả các ngắt giao diện.
0 = Vô hiệu hóa tất cả các ngắt giao diện.
1 = Bật tất cả các ngắt giao diện.
0 = Vô hiệu hóa tất cả các ngắt giao diện.
Bit5: T0IE: bit ngắt ngắt tràn TMR0
1 = Bật TMR0 ngắt.
0 = Vô hiệu hóa ngắt TMR0.
1 = Bật TMR0 ngắt.
0 = Vô hiệu hóa ngắt TMR0.
Bit4: INTE: RB0 / INT Ngắt bit ngắt bên ngoài.
1 = Kích hoạt ngắt ngoài của chân RB0 / INT.
0 = RB0 / INT chốt bên ngoài để trạng thái thụ động.
1 = Kích hoạt ngắt ngoài của chân RB0 / INT.
0 = RB0 / INT chốt bên ngoài để trạng thái thụ động.
Bit3: RBIE: bit cho phép thay đổi cổng RB
1 = Cho phép thay đổi cổng RB.
0 = Vô hiệu hóa thay đổi cổng RB.
1 = Cho phép thay đổi cổng RB.
0 = Vô hiệu hóa thay đổi cổng RB.
Bit2: T0IF: TMR0 tràn cờ ngắt bit.
1 = Ghi đè đăng ký TMR0 (phải được xóa trong phần mềm).
0 = Không tràn trong TMR0 register0.
1 = Ghi đè đăng ký TMR0 (phải được xóa trong phần mềm).
0 = Không tràn trong TMR0 register0.
Bit1: INTF: bit cờ ngắt ngoài RB0 / INT.
1 = Ngắt bên ngoài tại chân RB0 / INT (phải được xóa trong phần mềm).
0 = Không có ngắt ngoài xảy ra tại chân RB0 / INT.
1 = Ngắt bên ngoài tại chân RB0 / INT (phải được xóa trong phần mềm).
0 = Không có ngắt ngoài xảy ra tại chân RB0 / INT.
Bit0: RBIF: bit cờ ngắt thay đổi cổng RB.
1 = RB7: Ít nhất một trong các chân RB4 thay đổi trạng thái.
0 = RB7: Không có trạng thái thay đổi chân RB4 nào.
1 = RB7: Ít nhất một trong các chân RB4 thay đổi trạng thái.
0 = RB7: Không có trạng thái thay đổi chân RB4 nào.
Đăng ký INDF và FSR: Sổ đăng ký INDF không phải là đăng ký vật lý. Địa chỉ của thanh ghi INDF sẽ là địa chỉ gián tiếp. Có thể giải quyết gián tiếp bằng cách sử dụng thanh ghi INDF. Bất kỳ lệnh nào sử dụng thanh ghi INDF thực sự truy cập vào thanh ghi được chỉ ra bởi FSR (FileSelect Register). Khi bản thân đăng ký INDF được đọc, giá trị của 00h sẽ được đọc gián tiếp (FSR = 0). Khi được ghi vào thanh ghi INDF, nó dẫn gián tiếp đến một kết quả ít giao dịch hơn. (Mặc dù các bit trạng thái vẫn bị ảnh hưởng).
Ngắt: Ngắt là một tính năng rất hữu ích cho bộ vi xử lý vì chúng cho phép các sự kiện bên ngoài làm gián đoạn luồng phần mềm bình thường. Điều này dẫn đến việc thực thi mã cho một mục đích cụ thể. Ví dụ, trong phần mềm truyền thông, một ngắt từ chốt đầu vào làm cho phần mềm giải mã mã vào.
INT Interrupt: Các giới hạn của Interrupts bên ngoài trong RBO / INT đã được kích hoạt. Nếu những giới hạn này nếu bảng INTEDG bit (tùy chọn Reg <6>) tăng hoặc giảm, nếu INTENDG xóa thời gian pin RBO / INT qua đó giới hạn hiện tại xảy ra, các bit INTF (Intco các <1>) được cài đặt. 1>6>Ngắt này có thể được tắt bằng cách xóa điều khiển CCE INTEON.
Tín hiệu INTF bit phải được xóa khỏi phần mềm bởi Chương trình dịch vụ ngắt trước khi gián đoạn này được kích hoạt. Trình xử lý ngắt INT có thể được loại bỏ khỏi SLEEP lúc đầu nếu nó được thiết lập để đi tới SLEEP. Trạng thái bit GIE quyết định bộ xử lý có rời khỏi SLEEP hay không và tách thành vector cắt tiếp theo.
Mã ASEMBLER
DANH SÁCH p = 16f877 BAO GỒM "P16F877.INC" Công cụ CNC #DEFINE DATA PORTC #DEFINE KES PORTB, 0 #DEFINE X0SW PORTB, 1 #DEFINE Y0SW PORTB, 2 #DEFINE Z0SW PORTB, 3 #DEFINE ZSSW PORTB, 4 #DEFINE ZASW PORTB, 5 # DEFINE LCDEN PORTB, 6 #DEFINE CẮT PORTB, 7 #DEFINE XMOTY PORTD, 0 #DEFINE YMOTY PORTD, 2 #DEFINE XMOTCP PORTD, 1 #DEFINE YMOTCP PORTD, 3 #DEFINE ZMOTY PORTD, 4 #DEFINE ZMOTEN PORTD, 5 #DEFINE DELMOT PORTD, 6 #DEFINE LCDRS PORTD, 7 #DEFINE LCD PORTA #DEFINE LRI PORTA, 4 #DEFINE WORK PORTA, 5 #DEFINE BASBUT PORTE, 0 #DEFINE BASLED PORTE,1 #DEFINE MESGUL PORTE,2 #DEFINE INTFLUG INTCON,1 COPY EQU 0X7F XOLD EQU 0X7E YOLD EQU 0X7D XNEW EQU 0X7C YNEW EQU 0X7B INDF EQU 0X00 OPTI EQU 0X81 INDEX1 EQU 0X7A INDEX2 EQU 0X79 TMRIN1 EQU 0X78 TMRIN2 EQU 0X77 org 0x0003 goto BASLA org 0x0004 goto KESME BASLA BSF STATUS,7 ;DOLAYLI ADRESLEMEDE 2VE4. BANK CLRF PORTA CLRF PORTB CLRF PORTC CLRF PORTD CLRF PORTE BSF STATUS,RP0 CLRF TRISA ; LCD için boş bırakıldı MOVLW 0X3F ;BUTONLAR LAMBA VE KESMEDE KULL. MOVWF TRISB ;(KESME İZİN UCU) MOVLW 0XFF ;BİLGİSAYARDAN GELEN DATA PİNLERİ MOVWF TRISC ;BU PORTA BAĞLANACAK CLRF TRISD ;MOTOR SÜRME MOVLW 0X01 MOVWF TRISE MOVLW b’00001111’ MOVWF OPTI BCF STATUS,RP0 CLRF COPY CLRF XOLD CLRF YOLD CLRF XNEW CLRF YNEW MOVLW 0X8F MOVWF FSR MOVLW b’10010000’ MOVWF INTCON BSF KESEN ;PC KESMESİNE İZİN VER ....????? DON BTFSS BASLED GOTO DON BCF INTCON,7 ;KESME İPTAL.....????? CALL BTCONT BCF BASLED BSF WORK ;DELİNİYOR.......?????? CALL ZERO CALL ZAYAR CALL OKU1 CLRF XOLD CLRF YOLD CLRF XNEW CLRF YNEW BCF WORK MOVLW 0X8F MOVWF FSR BSF INTCON,GIE BSF KESEN GOTO DON KESME BCF KESEN BCF INTCON,INTF BSF MESGUL ;ÇIKARKEN SIFIR YAPILACAK BTFSC FSR,7 GOTO ART_KONT ;FSRYİ ARTIR VE KONTROL ET ARTDO CALL CHANG MOVF DATA,0 MOVWF INDF COMF INDF,0 BTFSC STATUS,Z GOTO CALIS BCF MESGUL BSF KESEN RETFIE ART_KONT INCF FSR,1 MOVF FSR,0 SUBLW 0XF0 BTFSS STATUS,Z GOTO ARTDO CALIS BSF BASLED BCF MESGUL RETFIE CHANG BTFSS FSR,7 GOTO SIFIR BCF FSR,7 RETURN SIFIR BSF FSR,7 RETURN ZAYAR BCF ZMOTY BCF ZMOTEN BTFSC Z0SW RETURN BSF ZMOTEN NOP NOP NOP GOTO ZAYAR OKU1 MOVLW 0X0F MOVWF FSR OKU BCF FSR,7 MOVF FSR,W SUBLW 0X6F BTFSC STATUS,Z RETURN INCF FSR,F MOVF INDF,W MOVWF XNEW BSF FSR,7 MOVF INDF,W MOVWF YNEW COMF XNEW,W BTFSC STATUS,Z RETURN GIT BCF XMOTY MOVF XOLD,W SUBWF XNEW BTFSC STATUS,C BSF XMOTY CALL XFIND BCF YMOTY MOVF YOLD,W SUBWF YNEW BTFSC STATUS,C BSF YMOTY CALL YFIND DEL BSF DELMOT BSF ZMOTY BSF ZMOTEN BTFSS ZSSW GOTO DEL BCF ZMOTEN BAK BTFSS ZASW GOTO BAK CALL B1S CALL ZAYAR GOTO OKU XFIND MOVF XOLD,W SUBWF XNEW BTFSC STATUS,Z RETURN MOVLW 0X3D ;HER 0,05 İNCH İÇİNMOTOR ADIM SAY. MOVWF INDEX1 AAAA BSF XMOTCP CALL B3MS BCF XMOTCP CALL B3MS DECFSZ INDEX1,F GOTO AAAA INCF XOLD,1 BTFSC XMOTY GOTO XFIND DECF XOLD,F DECF XOLD,F GOTO XFIND YFIND MOVF YOLD,W SUBWF YNEW BTFSC STATUS,Z RETURN MOVLW 0X3D ;MOTOR ADIM SAYISI MOVWF INDEX1 BBBB BSF YMOTCP CALL B3MS BCF YMOTCP CALL B3MS DECFSZ INDEX1,F GOTO BBBB INCF YOLD,1 BTFSC YMOTY GOTO YFIND DECF YOLD,F DECF YOLD,F GOTO YFIND ZERO MOVLW 0XF0 MOVWF INDEX1 BSF XMOTY BSF YMOTY XXXX BSF XMOTCP BSF YMOTCP CALL B3MS BCF XMOTCP BCF YMOTCP CALL B3MS DECFSZ INDEX1,F GOTO XXXX BCF XMOTY BCF YMOTY CALL B1S XXX1 CALL B30MS BSF XMOTCP BSF YMOTCP CALL B30MS BTFSS X0SW BCF XMOTCP BTFSS Y0SW BCF YMOTCP BTFSS X0SW GOTO XXX1 BTFSS Y0SW GOTO XXX1 RETURN B196MS MOVLW 0XFF MOVWF TMRIN1 SS MOVLW 0XFF MOVWF TMRIN2 CCCC DECFSZ TMRIN2,1 GOTO CCCC DECFSZ TMRIN1,1 GOTO SS RETURN B1S MOVLW 0X05 MOVWF TMRIN1 GỌI B196MS DECFSZ TMRIN1,1 GOTO B1S RETURN B30MS MOVLW 0X0A MOVWF TMRIN1 GỌI B3MS DECFSZ INDEX1,1 GOTO B30MS RETURN B3MS MOVLW 0X06 MOVF TMRIN1 XXX3 MOVLW 0XB4 MOVWF TMRIN2 XXX2 DECFSZ TMRIN2, F GOTO XXX2 DECFSZ TMRIN1, F GOTO XXX3 RETURN BTCONT BTFSS BASBUT GOTO BTCONT RETURN END
Chương trình C ++
#include#include #include #include #include char kor [2] [952]; void find (void); void set (void); void chủ đề (void); void new (void); main () { clrscr (); find (); kur (); topic (); clrscr (); printf ("\ n \ n \ n \ n \ nNhấn phím cho mạch ..."); getche (); } void find (void) { int x, y, a = 0; int r, g, b; char str1 [60], str2 [60]; FILE * bmp, * ref, * h1, * h2; if (! bmp = fopen ("c: \\ soner \\ son.bmp", "r"))) { printf ("\ n \ nBạn không thể tìm thấy tệp hoặc tệp bị hỏng \ a \ n \ nNhấn nút cho dấu hiệu"); fcloseall (); new (); } if (! (ref = fopen ("c: \\ soner \\ son.b", "r"))) { printf ("\ n \ nBạn không thể tìm thấy tệp hoặc tệp bị hỏng \ a \ n \ nNhấn nút cho dấu hiệu"); getche (); fcloseall (); thoát (0); if (! h1 = fopen ("c: \\ soner \ ramazan.db", "w"))) { printf ( "\ n \ nDisc không viết OR vào đường dẫn cụ thể không được tìm thấy \ a \ n \ ncikis của một nút trên lối ra."); getche (); fcloseall (); thoát (0); if (! h2 = fopen ("c: \\ soner \\ soner.db", "w"))) { printf ( "\ n \ ?? zere HOẶC nDisc không viết đường dẫn cụ thể không được tìm thấy \ a \ n \ ncikis của một nút trên lối ra."); getche (); fcloseall (); thoát (0); fgets (str1,53, bmp); fgets (str2,53, ref); if (strcmp (str1, str2)) { fcloseAll (); new ();} fclose (ref); fseek (bmp, 54, SEEK_SET); cho (x = 599; x & gt; = 0; x -) { cho (y = 0; y & lt; 900; y ++) { r = fgetc (bmp); if (r == 110 && g == 120 && b == 130) { cor [1] [a] = x / 5; cor [0] [a] = y / 5; a ++; if (a> 950) {printf ("nhấn một nút cho quá nhiều tọa độ \ n \ n"); getche (); thoát (0); fprintf (h1, "% d \ t% d \ n", x / 5, y / 5); fprintf (h2, "% c% c", x / 5, y / 5); }} if (a <1 font="" h="" m="" n="" ng="" printf="" t="" th="" to="" y=""> Nhấn một nút cho hai. "); Getche (); thoát (0); printf ("Tìm thấy tọa độ% d. \ n \ n \ nNhấn nút để tạo \ n \ n \ t \ t \ tCircle for ESC ...", a); if (getche () == 27) {fcloseall (); thoát (0); fcloseall (); } void set (void) { char cev; unsigned int delay = 0; clrscr (); / * Chỉ: gotoxy (1,1); printf ("Nhập số bản sao: \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b \ b"); scanf ("% d", & copy); if (copy <1 copy=""> 255) {printf ("\ n \ ị giá trị phải nằm trong khoảng từ 1 đến 255."); 1>goto tek;} * / tín dụng: printf ("Kết nối \ n \ n \ n \ t \ tĐây là kết nối của tôi ..."); while ((inportb (0x379))! = 0 && (inportb (0x379))! = 128) {trì hoãn (1000); trì hoãn ++; if (delay> 9) { printf ("\ n \ n \ n \ n \ t \ tKết nối không thành công gấp 10 lần dùng thử \ n \ nHãy thử / hủy"); cevtek: cev = getch (); if (cev == 'i' || cev == 'I') { printf ("Nhấn nút cho \ n \ n \ n \ n \ n \ n \ n \ n \ n"); getche (); thoát (0); nếu không (cev == 'y' || cev == 'Y') { clrscr (); Độ trễ = 0; goto kiểm tra; khác goto cevtek;}} clrscr (); printf ("\ n \ nblinked"); chậm trễ (3000); } void topic (void) {clrscr (); int a = 0; trong khi (cor [0] [a]! = 255) { kết thúc: while ((inportb (0x379)) = 128) { if ((inportB (0x379))! = 0) { printf ("Đã ngắt kết nối khỏi phần cứng .... \ nVui lòng kết nối vật lý và nhấn một phím. \ n \ n \ n \ n \ n \ nNhập ESC"); nếu (getche () == 27) thoát (0); } } chậm trễ (1); outPortB (0x37a, 12); chậm trễ (1); outPortB (0x378, lõi [0] [a]); chậm trễ (1); outPortB (0x37a, 8); chậm trễ (1); trong khi ((inportb (0x379)) = 128); outPortB (0x37a, 12); chậm trễ (1); outportb (0x378, lõi [1] [a]); chậm trễ (1); outPortB (0x37a, 8); chậm trễ (1); outPortB (0x37a, 4); chậm trễ (1); a ++; } chậm trễ (1); trong khi ((inportb (0x379)) = 128); chậm trễ (1); outPortB (0x37a, 12); chậm trễ (1); outPortB (0x378,255); chậm trễ (1); outPortB (0x37a, 8); chậm trễ (10); } void new (void) { clrscr (); FILE * bm, * db; printf ("\ n \ nTôi không thể đọc định dạng tệp hiện tại .... (600 X 900) \ n \ n \ n \ n \ nhấn phím bất kỳ để tạo tệp BMP mới \ n \ n \ n \ ESC cho đầu ra ... \ n \ n \ nBảo vệ của bạn sẽ bị mất nếu bạn tạo một BMP mới. "); if (getche ()! = 27) { if (! bm = fopen ("c: \\ soner \\ son.bmp", "w"))) { printf ("\ n \ nDisk không ghi trên đĩa. \ a \ n \ nNhấn khóa cho kép"); getche (); fclose (bm); thoát (0); if (! db = fopen ("c: \\ soner \\ ram.db", "r"))) { printf ("\ n \ nBạn không thể tìm thấy tệp hoặc tệp bị hỏng \ a \ n \ nNhấn khóa cho cả hai"); getche (); fcloseall (); thoát (0); fputc ('B', bm); while (! (feof (db))) fputc ((fgetc (db)), bm); fcloseAll (); printf ("tệp được tạo thành công");} printf ("\ n \ n \ n \ nNhấn phím để đóng chương trình."); getche (); thoát (0); } 1>
Tệp tải xuống danh sách LINK (ở định dạng TXT) link-4117.zip mật khẩu-pass: 320volt.com
Post a Comment