Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
2,52 MB
Nội dung
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM KHOA CÔNG NGHỆ ĐIỆN TỬ TIỂU LUẬN KẾT THÚC HỌC PHẦN HỌC KỲ 2, 20 20-2021 K Ỹ THUẬT VI X Ử LÝ Hồ Thanh Huy Họ tên sinh viên: Mã số sinh viên: Tên lớp học phần: Mã lớp học phần: Email liên hệ: Số điện thoại: Giảng viên giảng dạy: 19439361 DHDTMT15A 420300086903 thanhhuy2012201@gmail.com 0372014201 Lê Lý Quyên Quyên Tp HCM, tháng năm 2021 MỤC LỤC NỘI DUNG Câu 1: Nguyên lý hoạt động bước lập trình modul TIMER1 PIC16F887 a Nguyên lý hoạt động b Các bước lập trình modul TIMER1 PIC16F887 Câu 2: Lập trình PIC16F887, sử dụng ngắt PORTB điều khiển led bảy đoạn theo yêu cầu sau: a Trình bày lý thuyết tính tốn công thức liên quan đến làm: b Lưu đồ giải thuật c Viết code ngôn ngữ c, mô phần mềm protues: Câu 3: Lập trình PIC16F887, sử dụng modul TIMER1 để tạo delay, kết hiển thị led đơn theo yêu cầu sau: 10 a Trình bày lý thuyết tính tốn cơng thức liên quan đến làm: 10 b Lưu đồ giải thuật 10 c Viết code ngôn ngữ c, mô phần mềm proteus: 12 Câu 4: Lập trình PIC16F887, sử dụng modul CCP chế PWM, tạo xung chân RC2, kết hiển thị theo yêu cầu sau: 15 a Trình bày lý thuyết tính tốn cơng thức liên quan đến làm: 15 c Lưu đồ giải thuật 16 c Viết code ngôn ngữ c, mô phần mềm proteus: 19 Câu 5: Lập trình PIC16F887, sử dụng modul ADC 23 a Trình bày lý thuyết tính tốn cơng thức liên quan đến làm: 23 b Lưu đồ giải thuật 24 c Viết code ngôn ngữ c, mô phần mềm proteus: 25 NỘI DUNG Câu 1: Nguyên lý hoạt động bước lập trình modul TIMER1 PIC16F887 a Nguyên lý hoạt động Bộ dao động Timer 1: • Được kết nối thơng qua chân RC0 RC1 • Mạch điện bổ sung (xem hình) thiết kế chủ yếu cho hoạt động tần số thấp • Khơng phụ thuộc vào xung clock bên nên có th ể ho ạt động c ả chế độ "ngủ" • Sau đượ c kích hoạt người sử dụng phải chờ khoảng vài ms để dao động hoạt động ổn định • Khơng thể tắt Prescaler mà thay đổi giá trị tỉ lệ • Prescaler bị xóa cách ghi d ữ liệu vào ghi TMR1H TMR1L • Sự kiện ngắt Timer tràn "đánh thức" vi điều khiển kh ỏi chế độ "ngủ" trường hợp sử dụng nguồn xung clock bên ngồi khơng sử dụng tính đồ ng b Các bước lập trình modul TIMER1 PIC16F887 Để định thời gian (Timer): • BƯỚC 1: Ghi vào ghi TMR1 (bao g ồm TMR1H:TMR1L) giá trị tương ứng cho thời gian cần định thời - tDELAY = ( 65536 − TMR1) - tDELAY: Thời gian cần định thời (s) - fOSC: Tần số dao động (MHz) - Pre: Giá trị hệ số Prescaler (Pre = 1, 2, 4, 8) - [TMR1]: Giá trị cần ghi vào ghi - TMR1H = Byte cao [TMR1] - TMR1L= Byte thấp [TMR1] *Lưu ý: fOSC Pr e Cơng thức tính tDELAY áp dụng cho trường hợp sử dụng nguồn xung clock bên Trong trường hợp sử dụng nguồn xung clock bên lấy từ dao động Timer (T1OSI T1OSO) cơng thức tính tDELAY sau : tDELAY = (65536 −TMR1 ) Pr e f OSC (T1) • BƯỚC 2: Xóa cờ báo tràn (cờ ngắt) TMR1IF • BƯỚC 3: Chọn chế độ hoạt động Timer - Chế độ định thời gian (Timer) - Kích hoạt vơ hiệu hóa ngắt (tùy chọn) - Chọn giá trị tỉ lệ Prescaler • BƯỚC 4: Cho phép Timer bắt đầu hoạt động • BƯỚC 5: Xác định th ời điểm Timer bị tràn (đủ thời gian cần định thời Timer) cách - Kiểm tra cờ TMR1IF (nếu dùng thăm dò) - Xử lý ISR Timer (nếu dùng ngắt) Để đếm kiện (Counter): • BƯỚC 1: Xóa giá trị ghi TMR1 (hoặc đặt giá trị ban đầu đếm) • BƯỚC 2: Xóa cờ báo tràn (cờ ngắt) TMR1IF • BƯỚC 3: Chọn chế độ hoạt động Counter - Chế độ đếm kiện (Counter) - Kích hoạt vơ hiệu hóa ngắt (tùy chọn) - Chọn giá trị tỉ lệ Prescaler - Chọn tính đồng khơng đồng xung • BƯỚC 4: Cho phép Counter bắt đầu • BƯỚC 5: Đọc xử lý số xung đếm ghi TMR1 (TMR1H:TMR1L); Dựa vào cờ báo tràn TMR1IF để xử lý trường hợp số xung đếm vượt 65535 Câu 2: Lập trình PIC16F887, sử dụng ngắt PORTB điều khiển led bảy đoạn theo yêu cầu sau: Yêu cầu: - Nhấn SW0: led đếm lên từ 00 đến 24 lần thời gian tồn trạng thái 300ms - Nhấn SW1: led đếm xuống từ 60 đến 00 lặp lại hai lần thời gian tồn trạng thái 300ms - Nhấn SW2: led hiển thị số FP chớp tắt ba lần với f = Hz a Trình bày lý thuyết tính tốn cơng thức liên quan đến làm: • Ngắt PORTB (sử dụng RB0 : RB7) GIE=1 : cho phép ngắt toàn cục RBIF=0 : xoá cờ ngắt PORTB RBIE=1 : cho phép ngắt PORT B IOCBX=1 (X=0 :7) : cho phép ngắt chân RBX PORTB • Cách biến đổi tách chữ số thuộc hàng chục hàng, đơn vị : Hàng chục = Y/10 Hàng đơn vị = Y%10 b Lưu đồ giải thuật dem24() dem() Sai For(i=0;i0;i ) Đúng Hàng chục: i-1/10 Hàng đơn vị:i-1%10 PORTC=a[CH] PORTD=a[DV] Delay 300ms (mảng giá trị tạo sẵn) end FPchoptat() Fpchoptat() Sai While(n ) Đúng Hiện thị FP 300ms Tắt FP 300ms end Begin Start PORTB_ISR PORTB_ISR Cấu hình tất Analog Input → Digital I/O Đọc giá trị PORT B (trạng thái SW) Cấu hình PORT nối led PORTD; PORTC: Output Xoá cờ ngắt PORT B Chống dội Cấu hình PORT nút nhấn RB0;RB1;RB2 Input SW0 chân RB0 nhả? Kích hoạt tính Pullup cho RB0;RB1;RB2 Sai Đúng Next_1 SW1 chân RB1 nhả? Xoá cờ cho phép ngắt PORT B Sai Led đoạn đếm lên từ 00-24 lần dem24() Led đoạn đếm xuống từ 60-00 lần dem60(2) Đúng Next_2 Bật chức ngắt cho RB0;RB1;RB2 SW2 chân RB2 nhả? Đúng Next_3 Cho phép module ngắt hoạt động End Điều khiển tắt led đoạn PORTC;PORTD Đọc giá trị PORT B (trạng thái SW) 5 Sai Led đoạn thị FP chóp tắt lần FPchoptat(3) c Viết code ngôn ngữ c, mô phần mềm protues: • Code chương trình : #include void interrupt isr(void) #include { #include PORTB; #define _XTAL_FREQ 4000000 RBIF=0; const unsigned char delay_ms(5); a[10]={0xC0,0xF9,0xA4,0xB0,0x99, if(!RB0) 0x92,0x82,0xF8,0x80,0x90}; { void dem24() dem24(); { delay_ms(300); unsigned char i,CH,DV; PORTD=PORTC=0xFF; for (i=0;i0;i ) void main(void) { { ANSEL=ANSELH=0; CH=(i-1)/10; DV=(i-1)%10; TRISC=0x00; PORTC=a[CH]; TRISD=0x00; PORTD=a[DV]; TRISB0=1; delay_ms(300); TRISB1=1; } TRISB2=1; delay_ms(300 ); nRBPU=0; } WPUB=0x07; } RBIF=0; void FPchoptat(unsigned n) RBIE=1; { IOCB0=1; while(n ) IOCB1=1; { IOCB2=1; PORTC=0x8E; GIE=1; PORTD=0x8C; PORTC=0xFF; delay_ms(500); PORTD=0xFF; PORTC=0xFF; PORTB; PORTD=0xFF; while(1); } delay_ms(500); } } • Kết mô phần mềm protues : Nhấn SW0: led đếm lên từ 00 đến 24 lần thời gian tồn trạng thái 300ms Nhấn SW1: led đếm xuống từ 60 đến 00, lặp lại hai lần thời gian tồn trạng thái 300ms Nhấn SW1: led 1,3,5,7 sáng 2s tắt, (led thứ i nối với chân RDi) Nhấn SW2: led chớp tắt lần với f = Hz Câu 4: Lập trình PIC16F887, sử dụng modul CCP chế PWM, tạo xung chân RC2, kết hiển thị theo yêu cầu sau: Yêu cầu: - Nhấn SW0: LCD hiển thị: line 0: họ tên sinh viên (chữ có dấu) line 1: lớp - MSSV - Nhấn SW1: Xuất xung PWM có f = 10KHz, D = 40% LCD hiển thị: line 0: Thi kết thúc môn line 1: Good luck! a Trình bày lý thuyết tính tốn cơng thức liên quan đến làm: • Modul CPP chế PWM Tạo sóng vng có chu kỳ nhiệm vụ thay đổi tần số xác định Cung cấp tính nâng cao cho nhiều kết nối yêu cầu khác TMR2ON=1/0 :cho phép/cấm Timer Các bit chọn tỉ lệ cho Prescaler T2CKPS1=0/1, T2CKPS0=0/1 Các bit chọn tỉ lệ cho postscaler TOUTPS3=1/0; TOUTPS2=1/0; TOUTPS1=1/0; • Tính tốn giá trị ghi 15 TOUTPS0=1/0 TPWM = f PWM = = 100 s 10000 TPWM = ( PR2 + ) Pr e f osc Thay TPWM, fOSC , pre vào ta tính PR2 = 99 Với CCP1: D=40% Tính : PW = D.TPWM 40.100 = = 40 s 100 100 Từ công thức: PW = ( CCPRx L : CCPxCON : ) Pr e fosc Đặt E =(CCPR1L:CCP1CON ) suy E=40x4=160 CCPR1L = E/4 = 40 ; CCP1CON = E%4 = suy giá trị từ bảng bên ( CCPxCON ) DCxB1 DCxB0 0 1 1 5:4 E=%4 Ta có: DC1B1=0 DC1B0=0 c Lưu đồ giải thuật 16 Begin Main Cấu hình tất Analog Input → Digital I/O Cấu hình PORT nút nhấn RB0;RB1 Input Kích hoạt tính Pull-up cho RB0;RB1 Loop Sai Sai SW0 nhả? SW0 nhả? Đúng Cấm xuất xung; Khởi động LCD 16x2 Lấy kí tự từ mảng tạo kí tự có dấu line[1 4], mảng dat[i]={kí tự có dấu} Hiển thị cột0;hàng0 kí tự Hồ Thanh Huy Hiển thị cột0;hàng1 kí tự DHVT15A-19439361 Đúng SW1 nhả? Sai Sai SW1 nhả? Xuất xung D= 40%; xung40() Khởi động LCD 16x2 lcd init Lấy kí tự từ mảng tạo kí tự có d ấu line[1 4], mảng dat[i]={kí tự có dấu} Hiển thị cột0;hàng0 kí tự Thi kết thúc mơn Hiển thị cột0;hàng1 kí tự Good luck! 17 xung(40) xung(40) Cấm xuất xung PWM CCP1(RC2):input Xố Timer 2; TMR2=0 Đặt chu kì xung PWM (PR2)f=10KHz (T=100us) Đặt chu kì xung PWM (PR2)f=10KHz (T=100us) Đặt độ rộng xung PWM (CCPRxL:CCPxCON) Cấu hình modul CCP chế độ PWM Cho phép xuất xung PWM CCP1(RC2): Output Đặt chế độ Timer2 Mode :timer Prescaler: 1:1 Postscaler: 1:1 Timer => ON 18 c Viết code ngôn ngữ c, mô phần mềm proteus: • Code chương trình: #include for(a=0;a