Đề tài MẠCH đèn GIAO THÔNG THỜI GIAN THỰC

76 498 2
Đề tài MẠCH đèn GIAO THÔNG THỜI GIAN THỰC

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHƯƠNG II: LÝ THUYẾT CƠ SỞ I.PIC 16F877A 1.1 KIẾN TRÚC PIC Cấu trúc phần cứng vi điều khiển thiết kế theo hai dạng kiến trúc: kiến trúc Von Neuman kiến trúc Havard Tổ chức phần cứng PIC thiết kế theo kiến trúc Havard Điểm khác biệt kiến trúc Havard kiến trúc Von-Neuman cấu trúc nhớ liệu nhớ chương trình Đối với kiến trúc Von-Neuman, nhớ liệu nhớ chương trình nằm chung nhớ, ta tổ chức, cân đối cách linh hoạt nhớ chương trình nhớ liệu Tuy nhiên điều có ý nghĩa tốc độ xử lí CPU phải cao, với cấu trúc đó, thời điểm CPU tương tác với nhớ liệu nhớ chương trình Như nói kiến trúc Von-Neuman không thích hợp với cấu trúc vi điều khiển Đối với kiến trúc Havard, nhớ liệu nhớ chương trình tách thành hai nhớ riêng biệt Do thời điểm CPU tương tác với hai nhớ, tốc độ xử lí vi điều khiển cải thiện đáng kể Một điểm cần ý tập lệnh kiến trúc Havard tối ưu tùy theo yêu cầu kiến trúc vi điều khiển mà không phụ thuộc vào cấu trúc liệu Ví dụ, vi điều khiển dòng 16F, độ dài lệnh 14 bit (trong liệu tổ chức thành byte), kiến trúc Von-Neuman, độ dài lệnh bội số byte (do liệu tổ chức thành byte) Đặc điểm minh họa cụ thể hình 1.1 1.2 RISC CISC Như trình bày trên, kiến trúc Havard khái niệm so với kiến trúc Von-Neuman Khái niệm hình thành nhằm cải tiến tốc độ thực thi vi điều khiển Qua việc tách rời nhớ chương trình nhớ liệu, bus chương trình bus liệu, CPU lúc truy xuất nhớ chương trình nhớ liệu, giúp tăng tốc độ xử lí vi điều khiển lên gấp đôi Đồng thời cấu trúc lệnh không phụ thuộc vào cấu trúc liệu mà linh động điều chỉnh tùy theo khả tốc độ vi điều khiển Và để tiếp tục cải tiến tốc độ thực thi lệnh, tập lệnh họ vi điều khiển PIC thiết kế cho chiều dài mã lệnh cố định (ví dụ họ 16Fxxxx chiều dài mã lệnh 14 bit) cho phép thực thi lệnh chu kì xung clock ( ngoại trừ số trường hợp đặc biệt lệnh nhảy, lệnh gọi chương trình … cần hai chu kì xung đồng hồ) Điều có nghĩa tập lệnh vi điều khiển thuộc cấu trúc Havard lệnh hơn, ngắn hơn,đơn giản để đáp ứng yêu cầu mã hóa lệnh số lượng bit định Vi điều khiển tổ chức theo kiến trúc Havard gọi vi điều khiển RISC (Reduced Instruction Set Computer) hay vi điều khiển có tập lệnh rút gọn Vi điều khiển thiết kế theo kiến trúc Von-Neuman gọi vi điều khiển CISC (Complex Instruction Set Computer) hay vi điều khiển có tập lệnh phức tạp mã lệnh số cố định mà bội số bit (1 byte) 1.3 PIPELINING Đây chế xử lí lệnh vi điều khiển PIC Một chu kì lệnh vi điều khiển bao gồm xung clock Ví dụ ta sử dụng oscillator có tần số MHZ, xung lệnh có tần số MHz (chu kì lệnh us) Giả sử ta có đoạn chương trình sau: MOVLW 55h MOVWF PORTB CALL SUB_1 BSF PORTA,BIT3 instruction @ address SUB_1 Ở ta bàn đến qui trình vi điều khiển xử lí đoạn chương trình thông qua chu kì lệnh Quá trình thực thi sau: Hình 1.2: Cơ chế pipelining(hinh) TCY0: đọc lệnh TCY1: thực thi lệnh 1, đọc lệnh TCY2: thực thi lệnh 2, đọc lệnh TCY3: thực thi lệnh 3, đọc lệnh TCY4: lệnh lệnh thực thi theo qui trình thực thi chương trình (lệnh thực thi phải lệnh label SUB_1) nên chu thi lệnh dùng để đọc lệnh label SUB_1 Như xem lênh cần chu kì xung clock để thực thi TCY5: thực thi lệnh SUB_1 đọc lệnh SUB_1 Quá trình thực tương tự cho lệnh chương trình Thông thường, để thực thi lệnh, ta cần chu kì lệnh để gọi lệnh đó, chu kì xung clock để giải mã thực thi lệnh Với chế pipelining trình bày trên, lệnh xem thực thi chu kì lệnh Đối với lệnh mà trình thực thi làm thay đổi giá trị ghi PC (Program Counter) cần hai chu kì lệnh để thực thi phải thực việc gọi lệnh địa ghi PC tới Sau xác định vị trí lệnh ghi PC, lệnh cần chu kì lệnh để thực thi xong 1.4 CÁC DÒNG PIC VÀ CÁCH LỰA CHỌN VI ĐIỀU KHIỂN PIC Các kí hiệu vi điều khiển PIC: PIC12xxxx: độ dài lệnh 12 bit PIC16xxxx: độ dài lệnh 14 bit PIC18xxxx: độ dài lệnh 16 bit C: PIC có nhớ EPROM (chỉ có 16C84 EEPROM) F: PIC có nhớ flash LF: PIC có nhớ flash hoạt động điện áp thấp LV: tương tự LF, kí hiệu cũ Bên cạnh số vi điệu khiển có kí hiệu xxFxxx EEPROM, có thêm chữ A cuối flash (ví dụ PIC16F877 EEPROM, PIC16F877A flash) Ngoài có thêm dòng vi điều khiển PIC dsPIC Ở Việt Nam phổ biến họ vi điều khiển PIC hãng Microchip sản xuất Cách lựa chọn vi điều khiển PIC phù hợp: Trước hết cần ý đến số chân vi điều khiển cần thiết cho ứng dụng Có nhiều vi điều khiển PIC với số lượng chân khác nhau, chí có vi điều khiển có chân, có vi điều khiển 28, 40, 44, … chân Cần chọn vi điều khiển PIC có nhớ flash để nạp xóa chương trình nhiều lần Tiếp theo cần ý đến khối chức tích hợp sẵn vi điều khiển, chuẩn giao tiếp bên Sau cần ý đến nhớ chương trình mà vi điều khiển cho phép Ngoài thông tin cách lựa chọn vi điều khiển PIC tìm thấy sách “Select PIC guide” nhà sản xuất Microchip cung cấp 1.5 NGÔN NGỮ LẬP TRÌNH CHO PIC Ngôn ngữ lập trình cho PIC đa dạng Ngôn ngữ lập trình cấp thấp có MPLAB (được cung cấp miễn phí nhà sản xuất Microchip), ngôn ngữ lập trình cấp cao bao gồm C, Basic, Pascal, … Ngoài có số ngôn ngữ lập trình phát triển dành riêng cho PIC PICBasic, MikroBasic,… 1.6 MẠCH NẠP PIC Đây dòng sản phẩm đa dạng dành cho vi điều khiển PIC Có thể sử dụng mạch nạp cung cấp nhà sản xuất hãng Microchip như: PICSTART plus, MPLAB ICD 2, MPLAB PM 3, PRO MATE II Có thể dùng sản phẩm để nạp cho vi điều khiển khác thông qua chương trình MPLAB Dòng sản phẩm thống có ưu nạp cho tất vi điều khiển PIC, nhiên giá thành cao thường gặp nhiều khó khăn trình mua sản phẩm Ngoài tính cho phép nhiều chế độ nạp khác nhau, có nhiều mạch nạp thiết kế dành cho vi điều khiển PIC Có thể sơ lược số mạch nạp cho PIC sau: JDM programmer: mạch nạp dùng chương trình nạp Icprog cho phép nạp vi điều khiển PIC có hỗ trợ tính nạp chương trình điện áp thấp ICSP (In Circuit Serial Programming) Hầu hết mạch nạp hỗ trợ tính nạp chương trình WARP-13A MCP-USB: hai mạch nạp giống với mạch nạp PICSTART PLUS nhà sản xuất Microchip cung cấp, tương thích với trình biên dịch MPLAB, nghĩa ta trực tiếp dùng chương trình MPLAB để nạp cho vi điều khiển PIC mà không cần sử dụng chương trình nạp khác, chẳng hạn ICprog P16PRO40: mạch nạp Nigel thiết kế tiếng Ông thiết kế chương trình nạp, nhiên ta sử dụng chương trình nạp Icprog Mạch nạp Universal Williem: mạch nạp chuyên dụng dành cho PIC P16PRO40 Các mạch nạp kể có ưu điểm lớn đơn giản, rẻ tiền, hoàn toàn tự lắp ráp cách dễ dàng, thông tin sơ đồ mạch nạp, cách thiết kế, thi công, kiểm tra chương trình nạp dễ dàng tìm download miễn phí thông qua mạng Internet Tuy nhiên mạch nạp có nhược điểm hạn chế số vi điều khiển hỗ trợ, bên cạnh mạch nạp cần sử dụng với chương trình nạp thích hợp 1.7 SƠ ĐỒ CHÂN VI ĐIỀU KHIỂN PIC16F877A Sơ đồ chân vi điền khiển PIC16f877A 1.8 MỘT VÀI THÔNG SỐ VỀ VI ĐIỀU KHIỂN PIC16F877A Đây vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bit Mỗi lệnh thực thi chu kì xung clock Tốc độ hoạt động tối đa cho phép 20 MHz với chu kì lệnh 200ns Bộ nhớ chương trình 8Kx14 bit, nhớ liệu 368x8 byte RAM nhớ liệu EEPROM với dung lượng 256x8 byte Số PORT I/O với 33 pin I/O          Các đặc tính ngoại vi bao gồm khối chức sau: Timer0: đếm bit với chia tần số bit Timer1: đếm 16 bit với chia tần số, thực chức đếm dựa vào xung clock ngoại vi vi điều khiển hoạt động chế độ sleep Timer2: đếm bit với chia tần số, postcaler Hai Capture/so sánh/điều chế độ rông xung Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI I2C Chuẩn giao tiếp nối tiếp USART với bit địa Cổng giao tiếp song song PSP (Parallel Slave Port) với chân điều khiển RD, WR, CS bên Các đặc tính Analog: kênh chuyển đổi ADC 10 bit Hai so sánh Bên cạnh vài đặc tính khác vi điều khiển như: Bộ nhớ flash với khả ghi xóa 100.000 lần Bộ nhớ EEPROM với khả ghi xóa 1.000.000 lần Dữ liệu nhớ EEPROM lưu trữ 40 năm Khả tự nạp chương trình với điều khiển phần mềm Nạp chương trình mạch điện ICSP (In Circuit Serial Programming) thông qua chân Watchdog Timer với dao động  Chức bảo mật mã chương trình  Chế độ Sleep  Có thể hoạt động với nhiều dạng Oscillator khác        1.9 SƠ ĐỒ KHỐI VI ĐIỀU KHIỂN PIC16F877A Sơ đồ khối vi điều khiển PIC16F877A 1.10 TỔ CHỨC BỘ NHỚ Cấu trúc nhớ vi điều khiển PIC16F877A bao gồm nhớ chương trình (Program memory) nhớ liệu (Data Memory) 1.11.1 BỘ NHỚ CHƯƠNG TRÌNH Bộ nhớ chương trình vi điều khiển PIC16F877A nhớ flash, dung lượng nhớ 8K word (1 word = 14 bit) phân thành nhiều trang (từ page0 đến page 3) Như nhớ chương trình có khả chứa 8*1024 = 8192 lệnh (vì lệnh sau mã hóa có dung lượng word (14 bit) Để mã hóa địa 8K word nhớ chương trình, đếm chương trình có dung lượng 13 bit (PC) Khi vi điều khiển reset, đếm chương trình đến địa 0000h (Reset vector) Khi có ngắt xảy ra, đếm chương trình đến địa 0004h (Interrupt vector) Bộ nhớ chương trình không bao gồm: Bộ nhớ stack không địa hóa đếm chương trình Bộ nhớ stack đề cập cụ thể phần sau 1.11.2 BỘ NHỚ DỮ LIỆU Bộ nhớ liệu PIC nhớ EEPROM chia làm nhiều bank Đối với PIC16F877A nhớ liệu chia làm bank Mỗi bank có dung lượng 128 byte, bao gồm ghi có chức đặc biệt SFG (Special Function Register) nằm vùng địa thấp ghi mục đích chung GPR (General Purpose Register) nằm vùng địa lại bank Các ghi SFR thường xuyên sử dụng (ví dụ ghi STATUS) đặt tất cà bank nhớ liệu giúp thuận tiện trình truy xuất làm giảm bớt lệnh chương trình Sơ đồ cụ thể nhớ liệu PIC16F877A sau: 1.12 CÁC CỔNG XUẤT NHẬP CỦA PIC16F877A Cổng xuất nhập (I/O port) phương tiện mà vi điều khiển dùng để tương tác với giới bên Sự tương tác đa dạng thông qua trình tương tác đó, chức vi điều khiển thể cách rõ ràng Một cổng xuất nhập vi điều khiển bao gồm nhiều chân (I/O pin), tùy theo cách bố trí chức vi điều khiển mà số lượng cổng xuất nhập số lượng chân cổng khác Bên cạnh đó, vi điều khiển tích hợp sẵn bên đặc tính giao tiếp ngoại vi nên bên cạnh chức cổng xuất nhập thông thường, số chân xuất nhập có thêm chức khác để thể tác động đặc tính ngoại vi nêu giới bên Chức chân xuất nhập cổng hoàn toàn xác lập điều khiển thông qua ghi SFR liên quan đến chân xuất nhập Vi điều khiển PIC16F877A có cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD PORTE Cấu trúc chức cổng xuất nhập đề cập cụ thể phần sau 1.13.1 PORTA PORTA (RPA) bao gồm I/O pin Đây chân “hai chiều” (bidirectional pin), nghĩa xuất nhập Chức I/O điều khiển ghi TRISA (địa 85h) Muốn xác lập chức chân PORTA input, ta “set” bit điều khiển tương ứng với chân ghi TRISA ngược lại, muốn xác lập chức chân PORTA output, ta “clear” bit điều khiển tương ứng với chân ghi TRISA Thao tác hoàn toàn tương tự PORT ghi điều khiển tương ứng TRIS (đối với PORTA TRISA, PORTB TRISB, PORTC TRISC, PORTD TRISD vàđối với PORTE TRISE) Bên cạnh PORTA ngõ ADC, so sánh, ngõ vào analog ngõ vào xung clock Timer0 ngõ vào giao tiếp MSSP (Master Synchronous Serial Port) Đặc tính trình bày cụ thể phần sau Cấu trúc bên chức cụ thể chân PORTA trình bày cụ thể Phụ lục Các ghi SFR liên quan đến PORTA bao gồm: PORTA (địa 05h) : chứa giá trị pin PORTA TRISA (địa 85h) : điều khiển xuất nhập CMCON (địa 9Ch) : ghi điều khiển so sánh CVRCON (địa 9Dh) : ghi điều khiển so sánh điện áp ADCON1 (địa 9Fh) : ghi điều khiển ADC 10 II KHỐI ĐÈN TÍN HIỆU: Khối hiển thị thời gian VLED=2V, ILED=70mA ⇒ VRC=VCC-VCE-VLED=5-0-2=3V IRC=ILED=70mA ⇒ RC = V RC = = 42Ω , chọn RC=47 Ω I RC 70 Ta có: kIC= β IB ⇒ IB = kI C , chọn k=5, β =80 β ⇒ IB = 5.70 = 4.375mA 80 Ta có: VRB=VCC-VBE-VLED=5-0.7-2=2.3V ⇒ RB = V RB 2.3 = = 525Ω ⇒chọn RB=560 Ω IB 4.375 VBE=0.7V, VCE=0.2V ≈ 0V VLED=2V, ILED=20mA Ta có: Ib=20mA, VRb=VCC-VLED=5-2=3V 62 ⇒ Rb = 3V = 150 Ω 20mA -SƠ ĐỒ MẠCH IN: 63 CHƯƠNG V: LƯU ĐỒ GIẢI THUẬT I SƠ ĐỒ KHỐI N G Ắ T R NHẤNB MODE? B S A Đ H THỊ ĐÈN_K HIỂN THỊ THỜI GIAN NHẤN TĂNG? Đ S CHỌN TUYẾN 1(X1,D2) NHẤN GIẢM? Đ S CHỌN TUYẾN 2(D1,X2) S NHẤN END? Đ Đ K Ế T T H 64 C A S B NHẤN SET TIME? Đ D1,D2 SÁNG S NHẤN MODE? Đ TĂNG MODE ĐỂ CHỌN ĐÈN MODE0=D1,D2;MODE1=X1;MODE2=V1;MODE3=X2; MODE4=V2;MODE5=MODE0 S NHẤN TĂNG? Đ TĂNG THỚI GIAN CHO ĐÈN DƯỢC CHỌN S NHẤN GIẢM? Đ GIẢM THỚI GIAN CHO ĐÈN DƯỢC CHỌN NHẤN END? S 65 K Ế T T H NGẮT Ú TIMER1 C Đ TĂNG BDN S BDN=100? Đ GIẢM 1s S GIÂY=0? Đ THAY ĐỔI TRẠNG THÁI ĐÈN GÁN LẠI GIÁ TRỊ GIÂY KẾT THÚC 66 CHƯƠNG TRÌNH CHƯƠNG TRÌNH CHÍNH // CHUONG TRINH DIEU KHIEN DEN GIAO THONG CHAY CHE DO // CHE DO CHAY BANG TAY // CHE DO CHAY TU DONG, CO DIEU CHINH THOI GIAN // #INCLUDE #include #FUSES NOWDT,PUT,HS,NOPROTECT,NOLVP #USE DELAY (CLOCK =20000000) INT8 GIAY1,TT1,GIAY2,TT2,CHUC1,DVI1,CHUC2, DVI2,D01,XANH1,VANG1,D02,XANH2,VANG2,BDN,MODE; CONST UNSIGNED CHAR MA[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92, 0x82,0xF8,0x80,0x90}; // //chuong trinh HIEN THI GIAY TREN LED DOAN VOID HIENTHI1() // HIEN THI THOI GIAN CHO TUYEN { CHUC1 =GIAY1 /10; DVI1 =GIAY1 %10; OUTPUT_D(MA[CHUC1]); OUTPUT_C(0XfD); DELAY_MS(1); OUTPUT_C(0Xff); OUTPUT_D(MA[DVI1]); OUTPUT_C(0XfE); DELAY_MS(1); OUTPUT_C(0Xff); } VOID HIENTHI2() //HIEN THI THOI GIAN CHO TUYEN { CHUC2 =GIAY2 /10; 67 DVI2 =GIAY2 %10; OUTPUT_D(MA[CHUC2]); OUTPUT_C(0Xf7); DELAY_MS(1); OUTPUT_C(0Xff); OUTPUT_D(MA[DVI2]); OUTPUT_C(0XfB); DELAY_MS(1); OUTPUT_C(0Xff); } VOID HIENTHI3() //HIEN THI THOI GIAN CAI DAT { CHUC2 =GIAY1 /10; DVI2 =GIAY1 %10; OUTPUT_D(MA[CHUC2]); OUTPUT_C(0XDf); DELAY_MS(1); OUTPUT_C(0Xff); OUTPUT_D(MA[DVI2]); OUTPUT_C(0XEF); DELAY_MS(1); OUTPUT_C(0Xff); } VOID HIENTHI4() //HIEN THI THOI GIAN CAI DAT { CHUC2 =GIAY2 /10; DVI2 =GIAY2 %10; OUTPUT_D(MA[CHUC2]); OUTPUT_C(0XDf); DELAY_MS(1); OUTPUT_C(0Xff); OUTPUT_D(MA[DVI2]); OUTPUT_C(0XEF); DELAY_MS(1); OUTPUT_C(0Xff); } VOID GIAIMA_HIENTHI_LED7DOAN() 68 { HIENTHI1(); HIENTHI2(); } // //chuong trinh hien thi den giao thong VOID HIENTHI_DEN() { IF((TT1==0)&(TT2==1)) { OUTPUT_A(0XEE); //D1 X2 } IF((TT1==0)&(TT2==2)) { OUTPUT_A(0XDE); //D1 V2 } IF((TT1==1)&(TT2==0)) { OUTPUT_A(0XF5); //X1 D2 } IF((TT1==2)&(TT2==0)) { OUTPUT_A(0XF3); //V1 D2 } } // -#PRIORITY RB, TIMER1 //chuong trinh xay ngat timer1 #INT_TIMER1 VOID NGAT_TIMER1() { SET_TIMER1(15536); NGAT(tngat):0.2us*50000=10000us=10ms BDN++; IF(BDN==100) // t dinh thoi: t=tngat*BDN=10ms*100=1s { GIAY1 ; GIAY2 ; BDN=0; } 69 IF(GIAY1==0) { TT1++; SWITCH (TT1) { CASE 1: GIAY1=XANH1; BREAK; CASE 2: GIAY1=VANG1; BREAK; CASE 3: GIAY1=D01; TT1=0; BREAK; } } IF(GIAY2==0) { TT2++; SWITCH (TT2) { CASE 1: GIAY2=XANH2; BREAK; CASE 2: GIAY2=VANG2; BREAK; CASE 3: GIAY2=D02; TT2=0; BREAK; } } } // -//chuong trinh xay ngat RB #INT_RB VOID NGAT_PORTB() { //XU LI CHO DO DIEU KHIEN DEN BANG TAY IF(RB4==0) //kiem tra co nhan che bang tay? { WHILE(TRUE) { HIENTHI_DEN(); IF ( RB1==0) {TT1=1; TT2=0;} IF ( RB2==0 ) {TT1=0; TT2=1;} IF (RB3==0) {TT1=1;TT2=0; GIAY1=XANH1; GIAY2=D02;BREAK;} } } 70 //XU LI DIEU CHINH THOI GIAN IF(RB5==0) //kiem tra co nhan nut set_time? { OUTPUT_A(0XEE); // D01, D02 WHILE (TRUE) { IF(RB4==0) { WHILE (RB4==0){DELAY_MS(10);} MODE++; } IF(MODE==1) {GIAY1=XANH1; RE0=1; IF(MODE==2) {GIAY1=VANG1; RE0=0; IF(MODE==3) {GIAY2=XANH2; RE1=0; HIENTHI4();} IF(MODE==4) {GIAY2=VANG2; RB6=0; IF(MODE==5) {MODE=1; RB7=0;} RE1=0; HIENTHI3();} RE1=1; HIENTHI3();} RB6=1; RB7=0; RB7=1; HIENTHI4();} IF((RB1==0)&(MODE==1)) { WHILE (RB1==0){DELAY_MS(10);} XANH1++; IF(XANH1==100){XANH1=0;} GIAY1=XANH1; HIENTHI1(); } IF((RB1==0)&(MODE==2)) { WHILE (RB1==0){DELAY_MS(10);} VANG1++; IF(VANG1==100){VANG1=0;} GIAY1=VANG1; HIENTHI1(); } IF((RB1==0)&(MODE==3)) { WHILE (RB1==0){DELAY_MS(10);} XANH2++; IF(XANH2==100){XANH2=0;} GIAY2=XANH2; HIENTHI2(); } IF((RB1==0)&(MODE==4)) 71 { WHILE (RB1==0){DELAY_MS(10);} VANG2++; IF(VANG2==100){VANG2=0;} GIAY2=VANG2; HIENTHI2(); } IF((RB2==0)&(MODE==1)) { WHILE (RB2==0){DELAY_MS(10);} XANH1 ; IF(XANH1==0){XANH1=99;} GIAY1=XANH1; HIENTHI1(); } IF((RB2==0)&(MODE==2)) { WHILE (RB2==0){DELAY_MS(10);} VANG1 ; IF(VANG1==0){VANG1=99;} GIAY1=VANG1; HIENTHI1(); } IF((RB2==0)&(MODE==3)) { WHILE (RB2==0){DELAY_MS(10);} XANH2 ;IF(XANH2==0){XANH2=99;} GIAY2=XANH2; HIENTHI2();} IF((RB2==0)&(MODE==4)) { WHILE (RB2==0){DELAY_MS(10);} VANG2 ; IF(VANG2==0){VANG2=99;} GIAY2=VANG2; HIENTHI2(); } IF(RB3==0) { D01=XANH2+VANG2; D02=XANH1+VANG1; GIAY1=XANH1; GIAY2=D02; TT1=1; TT2=0; RB7=0; RB6=0; RE0=0; RE1=0; BREAK; 72 } } } } // //chuong trinh khoi tao port xuat nhap VOID KHOI_TAO_PORT() { SET_TRIS_A(0X00); SET_TRIS_C(0X00); SET_TRIS_D(0X00); SET_TRIS_B(0X3F); SET_TRIS_E(0X00); PORT_B_PULLUPS(0XFF); } // //chuong trinh khoi tao timer_ ngat VOID KHOI_TAO_NGAT() { ENABLE_INTERRUPTS(INT_RB); ENABLE_INTERRUPTS(INT_TIMER1); ENABLE_INTERRUPTS(GLOBAL); SETUP_TIMER_1( T1_INTERNAL | T1_DIV_BY_1); SET_TIMER1(15536); BDN=0; } // //chuong trinh khoi tao thoi gian va trang thai ban dau VOID KHOI_TAO_TRANG_THAI_BAN_DAU() { XANH1=30; VANG1=5; XANH2=20; VANG2=5; D01=XANH2+VANG2; D02=XANH1+VANG1; GIAY1=XANH1; TT1=1; 73 GIAY2=D02; TT2=0; RE0=0; RE1=0; RB7=0; RB6=0; } // //chuong trinh chinh void main ( ) { KHOI_TAO_PORT(); KHOI_TAO_NGAT(); KHOI_TAO_TRANG_THAI_BAN_DAU(); WHILE(1) { GIAIMA_HIENTHI_LED7DOAN(); HIENTHI_DEN(); } } 74 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN I KẾT LUẬN: Hệ thống đèn giao thông ngày trở nên quan trọng sống đại ngày Xã hội ngày phát triển, hệ thống giao thông đường phát triển không ngừng Do đó, hệ thống đèn giao thông ngày cần thiết không dừng lại ngã ngã mà xuất vòng xoay có nhiều giao lộ giao nhau, giao lộ có đường xe lửa chạy qua, hay nhận biết xe ưu tiên… Được hướng dẫn thầy Nguyễn Trọng Khanh kết hợp với kiến thức học trường, chúng em hoàn thành đồ án thời gian quy định đáp ứng yêu cầu đề Do kiến thức thời gian hạn chế nên nên đồ án luận văn nhiều thiếu sót, mong thầy cô bạn chia sẻ góp ý thêm để đề tài hoàn chỉnh II HƯỚNG PHÁT TRIỂN: Như nói trên, hệ thống đèn giao thông ngày phát triển Sau này, đủ kiến thức chúng em phát triển hệ thống đèn giao thông giao lộ có nhiều đường giao ngã 5, 6, vòng xoay, giao lộ có đường xe lửa chạy qua Đặc biệt hệ thống đèn giao thông nhận biết xe ưu tiên, giúp cho xe ưu tiên làm nhiệm vụ kịp thời 75 TÀI LIỆU THAM KHẢO GIÁO TRÌNH VI ĐIỀU KHIỂN – NGUYỄN TRỌNG KHANH- Tài liệu lưu hành nội KỸ THUẬT TRUYỀN SỐ LIỆU – NGUYỄN HỒNG SƠN –NHÀ XUẤT BẢN LAO ĐỘNG – XÃ HỘI LẬP TRÌNH VÀ GHÉP NỐI MÁY TÍNH TRONG WINDOWS – NGÔ DIÊN TẬP – NHÀ XUẤT BẢN KHOA HỌC VÀ KỸ THUẬT TÀI LIỆU THỰC HÀNH VI ĐIỀU KHIỂN – NGUYỄN ĐÌNH PHÚ – TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TÀI LIỆU LẬP TRÌNH HỆ THỐNG – PHẠM PHÙNG KIM KHÁNH INTERNET: + WWW.ANT7.COM + BIENDT.BIZ + WWW.DIENTUVIETNAM.NET + WWW.HOCDELAM.ORG + WWW.PICVIETNAM.COM + WWW.SCRIBD.COM + WWW.SVPTIT.ORG 76 ... toái vi điều khiển thường xuyên reset sau thời gian định, đói cần tính toán thời gian thích hợp để xóa WDT (dùng lệnh CLRWDT) Và để việc ấn định thời gian reset linh động, WDT hỗ trợ chia tần... lệnh thực thi theo qui trình thực thi chương trình (lệnh thực thi phải lệnh label SUB_1) nên chu thi lệnh dùng để đọc lệnh label SUB_1 Như xem lênh cần chu kì xung clock để thực thi TCY5: thực. .. thực tương tự cho lệnh chương trình Thông thường, để thực thi lệnh, ta cần chu kì lệnh để gọi lệnh đó, chu kì xung clock để giải mã thực thi lệnh Với chế pipelining trình bày trên, lệnh xem thực

Ngày đăng: 06/09/2017, 23:49

Từ khóa liên quan

Mục lục

  • I.1 Các mệnh đề lựa chọn (hay điều kiện)

    • I.1.1 Dạng dùng từ khóa if:

    • I.1.2 Dạng dùng từ khóa switch

    • I.2 Các mệnh đề tái lặp (hay vòng lặp)

      • I.2.1 Vòng lặp do

      • I.2.2 Vòng lặp while

      • I.2.3 Vòng lặp for

      • I.3 Các mệnh đề nhảy (hay bước nhảy)

        • I.3.1 goto

        • I.3.2 Continue

        • I.3.3 break

        • I.4 Các phép toán

        • I.5 Khai báo dữ liệu

          • I.5.1 Các kiểu dữ liệu cơ bản

            • I.5.2 Các hằng số xác định các giá trị biên

            • I.5.3 Các giá trị biên điển hình

            • I.6 Các mảng

              • I.6.1Khai báo mảng tĩnh

              • I.6.2 Truy cập các phần tử

              • I.6.3 Các mảng động

              • I.6.4Các mảng đa chiều

              • I.6.5 Dãy kí tự

Tài liệu cùng người dùng

Tài liệu liên quan