Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 70 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
70
Dung lượng
2,66 MB
Nội dung
Giáo trình thí nghiệm vi điều khiển ứng dụng BÀI : XUẤT NHẬP I/O PORT: I.MỤC ĐÍCH THÍ NGHIỆM : Kiến thức sinh viên cần đạt sau thực tập: Liệt kê ghi liên quan đến việc xử lý tính hiệu số chân vi điều khiển Khởi tạo chân vi điều khiển ngõ , vào số Giải thích cơng dụng hàm _delay(n) , cách dùng hàm delay để chống dội cho nút nhấn Lập trình điều khiển led theo yêu cầu Giải thích ưu khuyết điểm ngắt II.DỤNG CỤ THÍ NGHIỆM : Kít thí nghiệm + cáp USB Máy tính Nguồn 12V/1A III.CƠ SỞ LÝ THUYẾT : 1.Thanh ghi qui định tín hiệu xử lý chân vi điều khiển tín hiệu số hay tín hiệu tương tự: Những chân có kí hiệu ANX chân vừa xử lý tín hiệu số vừa xử lý tín hiệu tương tự Do làm việc với chân ta cần ý đến hai ghi : Giáo trình thí nghiệm vi điều khiển ứng dụng Hai ghi có tổng cộng 14bit từ ANS0 đến ANS13 , quy định tín hiệu làm việc chân từ AN0 đến AN13 tín hiệu số hay tín hiệu analog ANSX=0 : Cho phép chân ANX xử lý tín hiệu số ANSX=1 : Cho phép chân ANX xử lý tín hiệu tương tự Trong : X= – 13 2.Chức ghi TRIS : Trong chân xử lý tín hiệu số , hoạt động chân ngõ (làm cho led chớp tắt, kích transistor , điều khiển hoạt động IC ) , ngõ vào (đọc trạng thái nút nhấn , đọc encoder , đọc tín hiệu từ cảm biến số ) Như , để khởi tạo cho chân ngõ hay ngõ vào tín hiệu số , cần ý đến ghi TRISX (X=A,B,C,D,E): TRISXY=0:Quy định bit thứ Y PORTX ngõ (0 = Output) TRISXY=1:Quy định bit thứ Y PORTX ngõ vào (1=Input) (Trong :X=A,B,C,D,E ; Y=0-7) Chú ý : PORTE có bit thấp : TRISE0, TRISE1, TRISE2 ,TRISE3 Chức ghi PORT : Trong trường hợp xử lý tín hiệu số ngõ , ngõ mức cao (điện áp chân VH) , hay ngõ mức thấp (điện áp VL) bit RXY ghi PORTX quy định RXY=0 : Quy định chân thứ Y PORTX mức thấp(VL) RXY=1: Quy định chân thứ Y PORTX mức cao(VH) (Trong : X=A,B,C,D,E ; Y=0-7) Giáo trình thí nghiệm vi điều khiển ứng dụng Tóm lại ta có bảng tóm tắt sau : ANSX TRISXY 0 0 1 x RXY 1 x Kết Ngõ mức thấp(0V) Ngõ mức cao(+5V) Tổng trở cao (R=∞) Ngõ vào , tác động mức thấp Xử lý tín hiệu tương tự 4.Những ghi đặc biệt có riêng PORTB: 4.1.Thanh ghi hỗ trợ điện trở treo bên trong: Để tránh trạng thái thả (tín hiệu điện áp chân khơng rõ ràng) khởi tạo PORTB ngõ vào số , PIC16f887 tích hợp thêm vào cho PORTB điện trở kéo lên (pull-up), để sử dụng điện trở ta ý đến ghi : WPUBy=0: Không cho phép điện trở kéo lên chân thứ y PORTB WPUBy=1: Cho phép điện trở kéo lên chân thứ y PORTB Khi sử dụng điện trở kéo lên ngồi việc sử dụng ghi WPUB cịn phải khởi tạo bit: RBPU Điện trở kéo lên nên khởi tạo PORTB ngõ vào số , PORT khác khơng có hỗ trợ điện trở treo , có nhu cầu sử dụng ta mắc thêm điện trở bên ngồi 4.2.Ngắt ngồi chân RB0: Để xử lý tín hiệu tác động tức thời , chân RB0 có hỗ trợ xử lý ngắt (interrupt ) kí hiệu chân INT, khởi tạo ngắt chân RB0 ta cần ý đến bit sau : INTE(Interrupt enable ) : bit cho phép ngắt PORTB Giáo trình thí nghiệm vi điều khiển ứng dụng INTF(Interrupt flag): cờ ngắt , bit tự động có kiện ngắt (cạnh lên hay cạnh xuống) xảy chân RB0, ta phải xóa bít lập trình GIE(Global interrupt ) : bit cho phép ngắt toàn cục INTEDG (interrupt edge select bit ) : Bit chọn cạnh tác động để sinh kiện ngắt PORTB INTEDG=1: Xảy ngắt có tín hiệu cạnh lên PORTB INTEDG=0: Xảy ngắt có tín hiệu cạnh xuống PORTB Các bước khởi tạo ngắt INT: Bước : Khởi tạo chân RB0 ngõ vào số , điện trở treo Bước : Khởi tạo ngắt INT INTE=1; //Cho phép ngắt hoạt động INTF=0; //Xóa cờ ngắt ngắt lần xảy INTEDG= ; //Chọn cạnh tác động ngắt GIE=1; //Cho phép ngắt toàn cục 4.3.Ngắt on-change PORTB: Ngồi ngắt INT có chân RB0 , PORTB (từ RB0 đến RB7) cịn hỗ trợ ngắt on-change , ngắt on-change xảy tín hiệu logic chân PORTB thay đổi trạng thái logic Sơ đồ ngắt on-change: Giáo trình thí nghiệm vi điều khiển ứng dụng Các ghi bit điều khiển ngắt on-change : IOCBX=0 : Không cho phép ngắt on-change chân thứ X PORTB IOCBX=1 : Cho phép ngắt on-change chân thứ X PORTB Các bit khởi tạo khác : RBIF : Cờ ngắt on-change PORTB, cần phải xóa bít lập trình RBIE : Bit cho phép ngắt on-change PORTB GIE : Bit cho phép ngắt toàn cục Các bước khởi tạo ngắt on-change : Bước : Khởi tạo PORTB ngõ vào số , có điện trở treo Bước : Khởi tạo ngắt on-change PORTB IOCB=0xFF; //khởi tạo tồn PORTB ngắt on-change(có thể khởi tạo hay PORTB) RBIE=1; //Cho phép ngắt xảy RBIF=0; //Xóa cờ ngắt GIE=1; //Cho phép ngắt toàn cục Chú ý : Đối với ngắt on-change , việc xóa cờ ngắt (RBIF=0) khơng đủ lần ngắt thực , mà phải thêm điều kiện đọc viết vào ghi PORTB Ví dụ : unsigned char bien ; bien = PORTB ; //đọc ghi PORTB PORTB =5 ; //viết vào ghi PORTB 4.4.Bảng so sánh ngắt INT ngắt on-change : Ngắt chân INT(RB0) Chí có chân RB0 Để xảy ngắt tín hiệu logic cạnh lên cạnh xuống Các bit khởi tạo : INTE , INTF , INTEDG , GIE Để cho lần ngắt thực cần phải xóa cờ ngắt INTF Ngắt on-change Xảy PORTB Chỉ cần tín hiệu logic thay đổi xảy ngắt, không phân biệt cạnh lên hay cạnh xuống Các bit khởi tạo : IOCBx , RBIE , RBIF , GIE Để cho lần ngắt thực cần phải xóa cờ ngắt INTF đọc ( ghi) vào ghi PORTB Giáo trình thí nghiệm vi điều khiển ứng dụng IV.BÀI TẬP THỰC HÀNH : Bài 1: Viết chương trình điều khiển led theo yêu cầu sau : Nhấn (không giữ) nút nhấn nối với chân RB0 : led RE1 led RE2 chớp tắt xen kẽ thời gian T=0.2(s) Nhấn (không giữ) nút nhấn nối với chân RB1 : led RE1 led RE2 chớp tắt thời gian T=0.5(s) Nhấn (không giữ) nút nhấn nối với chân RB2 : led RE1 sáng led RE2 tắt thời gian T=0.1(s) , led RE1 tat LED2 sáng T=0.7(s) Sử dụng định thời hàm _delay(n) ; thạch anh Fosc = Mhz Sơ đồ phần cứng : *Bước 1: Tạo project với tên 01_01_MSSV *Bước 2: Nhập chương trình sau vào máy tính hồn thành dấu …… #include CONFIG(INTIO&WDTDIS&PWRTEN&MCLREN&UNPROTECT&DUNPROTECT&BO RDIS&IESODIS&LVPDIS&FCMDIS); void delay(unsigned char counter); //Khai báo chương trình hàm delay void RB_0( );void RB_1( );void RB_2( ); char so_lan_nhan; void main( ) //Chương trình { //Disable analog chân RE1,RE2,RB0,RB1,RB2 ANS6=ANS7=ANS12=ANS10=ANS8= …….; //Khởi tạo chân RE1,RE2 ngõ , ban đầu led tắt TRISE1=TRISE2= …….; RE1=RE2= …… ; //Khởi tạo chân RB0,RB1,RB2 ngõ vào, tác động mức thấp TRISB0=TRISB1=TRISB2= …….; RB0=RB1=RB2= …….; //Khởi tạo điện trở kéo lên chân RB0,RB1,RB2 WPUB0=WPUB1=WPUB2= …….; RBPU= …… ; Giáo trình thí nghiệm vi điều khiển ứng dụng //( -1 ) while(1) { //Xác định trạng thái nút nhấn if(!RB0)so_lan_nhan=0; else if(!RB1)so_lan_nhan=1; else if(!RB2)so_lan_nhan=2; //Hiển thị led if (so_lan_nhan==0) else if(so_lan_nhan==1) else if(so_lan_nhan==2) //( -) //( -) //( -) RB_0( );//Chạy chương trình RB_0 RB_1( ); //Chạy chương trình RB_1 RB_2( ); //Chạy chương trình RB_2 } } //( -5 -) void delay(unsigned char counter) //Chương trình làm tăng thời gian delay { unsigned char value=0; while(counter>value) { value++; _delay(100000); //trễ 1ms với Fosc = 4MHz } } void RB_0( ) { RE1^=1;RE2= …….RE1; // led RE1 led RE2 chớp tắt xen kẽ delay(2); //delay 0.2s } void RB_1( ) { RE1^=1;RE2 …….RE1; // led RE1 led RE2 chớp tắt delay(5); //delay 0.5s } void RB_2( ) { RE1= …….;RE2= …….; // led RE1 sáng led RE2 tắt delay(1); //delay 0.1s RE1= …….;RE2= …….; // led RE1 tat LED2 sáng delay(7); //delay 0.7s } *Bước 3: Biên dịch chương trình, nạp xuống kít thí nghiệm , tiến hành nhấn nút nhấn quan sát led *Bước 4: Thay đổi chương trình sau: Thêm vào dịng : ( -1 ) đoạn code sau: Giáo trình thí nghiệm vi điều khiển ứng dụng IOCB0=IOCB1=IOCB2=1; //Cho phép ngắt onchange chân B0,B1,B2 RBIE=1; //Cho phép ngắt onchange toàn PORTB RBIF=0; //Reset cờ ngắt PEIE=1; //Cho phép ngắt ngoại vi GIE=1; //Cho phép ngắt tồn cục Xóa dòng 2,3,4 Thêm vào dòng: ( -5 -) đoạn code sau: void interrupt isr( ) //Chương trình xử lý tất ngắt { if(RBIE&&RBIF) //Chương trình cho ngắt on-change { if(!RB0) so_lan_nhan=0; //nhấn RB0 else if(!RB1) so_lan_nhan=1; //nhấn RB1 else if(!RB2) so_lan_nhan=2; //nhấn RB2 RBIF=0; //Reset cờ ngắt } } *Bước 5: Biên dịch chương trình, nạp xuống kít thí nghiệm , tiến hành nhấn nút nhấn quan sát led *Bước 6: Nhận xét khác tốc độ đáp ứng nhấn nút nhấn trước sau sửa code, giải thích, rút kết luận: - Giáo trình thí nghiệm vi điều khiển ứng dụng Bài : Viết chương trình điều khiển led theo yêu cầu sau : Nhấn (không giữ) nút nhấn nối với chân RB0 lần (2n+1) : led dịch từ trái qua phải Nhấn (không giữ) nút nhấn nối với chân RB0 lần (2n) : led dịch từ phải qua trái n = 0,1,3,4,5…k Sử dụng định thời hàm _delay(n) ; thạch anh Fosc = Mhz Sơ đồ phần cứng : *Bước 1: Tạo project với tên 01_02_MSSV *Bước : Nhập chương trình sau vào máy tính hoàn thành vào dấu …… #include CONFIG(INTIO&WDTDIS&PWRTEN&MCLREN&UNPROTECT&DUNPROTECT&BO RDIS&IESODIS&LVPDIS&FCMDIS); char count=0; void display(char number); void main( ) { char i=0; //Disable analog chân RE1,RE2,RB0,RB3,RB4,RB5 ANS6=ANS7=ANS9=ANS11=ANS12=ANS13=…….; //Khởi tạo RE1 , RE2 ngõ , trạng thái ban đầu led tắt TRISE1=TRISE2=…….; RE1=RE2=…….; //Khởi tạo RB0 ngõ vào , tác động mức thấp TRISB0=…….; RB0=…….; //Cho phép điện trở kéo lên chân RB0; IOCB0=…….; RBPU=…….; //Khởi tạo ngắt chân RB0 INTEDG= ; //cạnh lên INTE =…….; INTF =…….; GIE =…….; Giáo trình thí nghiệm vi điều khiển ứng dụng while(1) { while(count==1) //Chương trình dịch từ trái qua phải { i++; if(i>=9) i=1; display(i); _delay(100000); } while(count==2) //Chương trình dịch từ phải qua trái { i ; if(iCOM *Bước : Sử dụng chương trình Terminal (chương trình dùng test cổng COM) truyền nhận kí tự xuống kit thí nghiệm , đồng thời quan sát led kit thí nghiệm *Bước : Chứng minh thơng số dịng (1) , (2), (3) Bài : Làm lại với tốc độ baund 14400 (Tạo project với tên 05_02_ MSSV) V.BÀI TẬP TỰ GIẢI : Bài : Viết chương trình truyền nhận UART vi điều khiển với máy tính , hiển thị kết lên lcd theo sơ đồ phần cứng sau (Tạo project với tên 05_02_ MSSV): Yêu cầu : Truyền chuỗi số (tối đa chữ số xxxxx) từ máy tính xuống vi điều khiển , vi điều khiển hiển thị số vừa nhận từ máy tính lên lcd , đồng thời gởi lại máy tính số vừa nhận cộng thêm 10.Thạch anh 4Mhz , baund 9600 , truyền nhận 8-bit , phần cứng kết nối lcd theo thư viện lcd.h 62 Giáo trình thí nghiệm vi điều khiển ứng dụng Bài : Viết chương trình truyền nhận vi điều khiển máy tinh với yêu cầu sau : Máy tính truyền xuống vi điều khiển kí tự „S‟ , động start Máy tính truyền xuống vi điều khiển kí tự „P‟ , động stop Máy tính truyền xuống vi điều khiển kí tự „B-xxx‟ , động quay thuận ,với xxx độ rộng xung PWM bit Máy tính truyền xuống vi điều khiển kí tự „F-xxx‟ , động quay nghịch , với xxx độ rộng xung PWM bit 63 Giáo trình thí nghiệm vi điều khiển ứng dụng Bài : Viết chương trình truyền nhận máy tính vi điều khiển với yêu cầu sau : máy tính hiển thị vận tốc động Terminal , baund 9600, Fosc = 4Mhz 64 Giáo trình thí nghiệm vi điều khiển ứng dụng TÀI LIỆU THAM KHẢO : [1] PIC16F882/883/884/886/887 Data Sheet [2]Dogan lbrahim , Advanced PIC Microcontroller Projects in C [3] http://www.picvietnam.com/forum/ [4] http://www.microchip.com/ 65 Giáo trình thí nghiệm vi điều khiển ứng dụng Phụ Lục I.Cửa sổ chương trình : Thanh Menu Thanh Cơng Cụ Của sổ viết chương trình I.Khởi tạo project : 1.Tạo folder (A) chứa tất file chương trình 2.Khởi động MPLAB : Chọn Project , Project Wizard 66 Giáo trình thí nghiệm vi điều khiển ứng dụng 3.Chọn Next : 4.Chọn dòng PIC muốn lập trình , Next : 5.Lựa chọn cơng cụ lập trình (ở chọn H-TECH) , Next: Chú ý : Chỉ có dịng H-TECH sau cài đặt thành công Hi-tech C 67 Giáo trình thí nghiệm vi điều khiển ứng dụng 6.Browse tới folder (A) , đặt tên cho làm (main), Next : 7.Nhấn Next , chọn Finish: 10 68 Giáo trình thí nghiệm vi điều khiển ứng dụng 8.Chọn NewFile cơng cụ , viết đoạn chương trình #include MPLAB IDE Editor , chọn Save : 11 13 12 9.Đặt tên main.c (Chú ý : phải có “.c” Save in thư mục A) ,chọn save : 14 15 16 69 Giáo trình thí nghiệm vi điều khiển ứng dụng 10.Right click vào Source file cửa sổ main.mcw chọn Add files , Browse tới main.c chọn open : 17 18 11.Hoàn tất tạo project , tiếp tục viết chương trình 70 ... 2.ADC vi điều khiển PIC16F887: 2.1Các chân vi điều khiển có khả xử lý tín hiệu analog : Các chân làm vi? ??c với tín hiệu analog 14 Giáo trình thí nghiệm vi điều khiển ứng dụng Sơ đồ khối ADC vi điều. .. phần cứng LCD kết nối với PORTD Vi Điều khiển theo sơ đồ chân thư vi? ??n lcd.h , điện áp tham chiếu bên , sử dụng ADC bit 24 Giáo trình thí nghiệm vi điều khiển ứng dụng Bài 4 :Vi? ??t chương trình. .. chương trình , nạp xuống kít thí nghiệm , sử dụng oscillocope đo ngõ xung hoàn thành vào bảng sau : PWM 90% PWM 10% CCPR1L CCPR2L 48 Giáo trình thí nghiệm vi điều khiển ứng dụng Bài : Vi? ??t chương trình