Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
2,82 MB
Nội dung
HỌC VIỆN HÀNG KHÔNG VIỆT NAM KHOA ĐIỆN – ĐIỆN TỬ KỸ THUẬT VI XỬ LÝ – VI ĐIỀU KHIỂN TIỂU LUẬN CUỐI KỲ Giáo viên hướng dẫn: Th.s Võ Bá Việt Nghĩa Sinh viên thực : Phan Hồng Doanh -1953020071 Nguyễn Thị Phương Thảo - 1953020027 THÀNH PHỐ HỒ CHÍ MINH, NĂM 2021 Mục lục Phần lí thuyết········································································ 1.1 câu 1- dùng timer điều khiển led ··············································1 Phần mô phỏng······································································ 1.1 câu - dùng timer tạo ngắt với chu kỳ 1.2s································2 1.2 câu - dùng rs232 bật tắt led đơn············································· 1.3 câu - điều khiển tốc độ động cơ············································· Phần lập trình······································································· 1.1 lưu đồ giải thuật··································································9 1.1.1 câu 1- dùng timer điều khiển led··········································· 1.1.2 câu 2- dùng rs232 điều khiển led···········································9 1.1.3 câu 3- điều khiển động cơ················································· 10 1.2 giải thích code·································································· 11 1.1.1 câu 1- dùng timer điều khiển led········································· 11 1.1.2 câu 2- dùng rs232 điều khiển led········································· 12 1.1.3 câu 3- điều khiển động cơ················································· 14 Phần kết luận······································································ 17 Mục lục hình ảnh hình 1.0 - sơ đồ mơ 1················································· hình 1.1 - kết mơ phỏng····················································· hình 1.2 - chu kỳ đầu tiên·························································3 hình 1.3 - chu kỳ tiếp theo························································3 hình 1.4 - sơ đồ mơ 2················································· hình 1.5 - nút RB0 nhấn····················································4 hình 1.6 - nút RB1 nhấn····················································5 hình 1.7 - nút RB2 nhấn ···················································5 hình 1.8 - nút RB3 nhấn····················································5 hình 1.9 - sơ đồ mơ 3················································· hình 2.0 - nhấn nút quay phải···················································· hình 2.1 - nhấn nút quay trái····················································· hình 2.2 - nhấn nút stop··························································· hình 2.3 - điều khiển tốc độ động biến trở··························· PHẦN LÝ THUYẾT 1.1 Câu 1- dùng timer điều khiển led Tính tốn timer 1: u cầu dùng timer1 tạo Ngắt với chu kì 1.2 s FTimer1 = 1/1.2 = 5/6 hz FTimer1 = 20.000.000 /4 = 5.000.000hz ==> 100ms: 500.000 lệnh Chọn chia trước : 500.000 / 1=500.000 500.000 / 2=250.000 500.000 / =125.000 500.000 / = 62.500 ==> chọn chia trước prescaler = Giá trị đặt trước cho ghi TMR1: value = 65536-62500 = 3036 Số lần ngắt: count = 20.000.000 4.8.(65536−3036) = 12 PHẦN MÔ PHỎNG 1.1 Câu - dùng timer1 tạo ngắt với chu kỳ 1.2s Hình 1.0 - sơ đồ mơ + linh kiện cần cho mô - pic16f877A tần số 20Mhz - thạch anh tần số 20Mhz ( crystal) - điện trở 1k 220ohm ( resistor) - đèn led màu đỏ (led red) - tụ 22pF Sắp xếp linh kiện hình 1.0 Lấy probes voltage gắn vào đầu B0 để đo chu kì sáng tắt led từ biết kết tính tốn hay chưa + kết mơ Hình 1.1- kết mơ Hình 1.2- chu kỳ Hình 1.3- chu kỳ RB0 bắt đầu sáng sau 1.2s tắt , tới thời điểm 1.2*8 =9.6( có led sáng lần lượt) RB0 tiếp tục sáng 1.2 Câu - dùng rs232 bật tắt led đơn Hình 1.3- sơ đồ mô + linh kiện cần cho mô - pic16f877A tần số 20Mh - nút nhấn (button) - điện trở 10k 220ohm( resistor) - đèn led màu đỏ( led red) Sắp xếp linh kiện cài đặt hình 1.3 + kết mơ Hình 1.4- nút RB0 nhấn Hình 1.5 - nút RB1 nhấn Hình 1.6 - nút RB2 nhấn Hình 1.7 - nút RB3 nhấn 1.3 Câu điều khiển tốc độ động Hình 1.8 - sơ đồ mô + linh kiện cần cho mô - pic16f877A tần số 20MHz - nút nhấn (button) - biến trở 10k (pot-hg) - hình lcd LM016L - động dc ( motor) - L298 - tụ 100nF ( capacitor) - diode 1N4007 - cục pin 12v ( battery) Sắp xếp cài đặt linh kiện hình 1.8 + kết mơ Hình 1.9 - nhấn nút quay phải Hình 2.0 - nhấn nút quay trái Hình 2.1 - nhấn nút stop Hình 2.2 - dùng biến trở điều chỉnh tốc độ động PHẦN LẬP TRÌNH 1.1 Lưu đồ thuật toán 1.1.1 Câu 1- dùng timer điều khiển led 1.1.2 Câu 2- dùng rs232 điều khiển led Câu 3- điều khiển động 10 1.2 Giải thích code 1.1.1 câu 1- dùng timer điều khiển led #include unsigned int16 count=12; unsigned int16 i=0; int8 seg[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};// giá trị mảng sáng từ port b0 đến b7 int k=0; #INT_TIMER1// thị ngắt timer 1_interrupt // hàm ngắt timer1 void timer1_interrupt(){ i++; if(i>=count){ i> count xảy lần ngắt i=0;// gán i =0 k++;// cộng k lên đơn vị if(k>7){//nếu lớn phần tử mảng gán =0 k=0; } output_b(seg[k]); // output vị trí k mảng } set_timer1(3036);// cài đặt giá trị đặt trước cho ghi timer1 clear_interrupt(INT_TIMER1);// xóa cờ ngắt timer } void main() { clear_interrupt(INT_TIMER1);// xóa cờ ngắt timer enable_interrupts(INT_TIMER1);// cho phép ngắt timer 11 enable_interrupts(GLOBAL);// cho phép ngắt toàn cục setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);// cài đặt chia trc cho timer set_timer1(3036);//cài đặt giá trị đặt trước cho ghi timer1 Output_b(0x01);// ban đầu port b0 sáng while(TRUE) { } } 1.1.2.Câu 2- dùng rs232 điều khiển led + code truyền #include #use rs232(uart1,baud=9600)// khai báo sử dụng rs232 ccs char c; void main() { while(true){ if(input(pin_B0)==0){ // nút B0 nhấn gán c kí tự while(input(pin_B0)==0); c='0'; putc(c);// xuất kí tự } if(input(pin_B1)==0){// nút B1 nhấn gán c kí tự while(input(pin_B1)==0); c='1'; putc(c);// xuất kí tự } if(input(pin_B2)==0){// nút B2 nhấn gán c kí tự 12 while(input(pin_B2)==0); c='2'; putc(c);// xuất kí tự } if(input(pin_B3)==0){// nút B3 nhấn gán c kí tự while(input(pin_B3)==0); c='3'; putc(c);// xuất kí tự } } } + code nhận #include #use rs232(uart1,baud=9600)// khai báo sử dụng rs232 ccs char c; void main() { while(TRUE) { if(kbhit()==1){// kiểm tra có nhận kí tự chưa c=getc();// đọc kí tự nhận từ chân RC7 lưu vào biến c } if(c=='0'){// kí tự nhận sáng port B0 output_b(0x01); } if(c=='1'){// kí tự nhận sáng port B1 output_b(0x02); } 13 if(c=='2'){// kí tự nhận sáng port B2 output_b(0x04); } if(c=='3'){// kí tự nhận sáng port B3 output_b(0x08); } } } 1.1.3.câu 3- điều khiển động #include #define LCD_ENABLE_PIN PIN_D2 #define LCD_RS_PIN #define LCD_RW_PIN PIN_D0 PIN_D1 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include// khai báo cho hình lcd int8 k=0; #INT_RB// thị ngắt rb // hàm ngắt rb interrupt void rb_interrupt(){ clear_interrupt(INT_RB);// xóa cờ ngắt port if(input(pin_B5)==0){//stop k=1;// nút B5 nhấn gán k=1 } if(input(pin_B6)==0){//quay trai k=2;// nút B6 nhấn gán k=2 14 } IF(input(PIN_B7)==0){//quay thuan k=3;// nút B7 nhấn gán k=3 } } void lcd_imp(int16 value){// hàm hiển thị lcd int8 thousand,hundred,tens,units; thousand=value/1000;// số hàng nghìn hundred=(value%1000)/100;// số hàng trăm tens=((value%1000)%100)/10;// số hàng chục units=(value%1000)%10;// số hàng đơn vị lcd_gotoxy(1,1);// vị trí in số hàng nghìn lcd_putc(thousand+48);// in số hàng nghìn lcd_gotoxy(2,1);// vị trí in số hàng trăm lcd_putc(hundred+48);// in số hàng trăm lcd_gotoxy(3,1);// vị trí in số hàng chục lcd_putc(tens+48);// in số hàng chục lcd_gotoxy(4,1);// vị trí in số hàng đơn vị lcd_putc(units+48);// in số hàng đơn vị } void main() { int16 value=0; lcd_init();// khởi tạo hình lcd lcd_putc('\f');// xóa hình trắng clear_interrupt(INT_RB);// xóa cờ ngắt port b enable_interrupts(INT_RB);// cho phép ngắt port b enable_interrupts(GLOBAL);// cho phép ngắt tồn cục 15 setup_adc_ports(ALL_ANALOG);// cấu hình chân analog setup_adc(ADC_CLOCK_INTERNAL);// cấu hình adc set_adc_channel(1);//chọn kênh để đọc giá trị adc setup_timer_2(T2_DIV_BY_16,0XFF,1);//cấu hình timer để tạo period setup_ccp1(CCP_PWM);//cấu hình ccp1 hoạt động chế độ pwm while(TRUE) { switch(k){ case 1:// biến k =1 dừng động output_bit(PIN_B0,0); output_bit(PIN_B1,0); break; case 2:// k = động quay trái output_bit(PIN_B0,0); output_bit(PIN_B1,1); break; case 3:// k =3 động qua phải output_bit(PIN_B0,1); output_bit(PIN_B1,0); break; } value=read_adc();// lưu giá trị adc đọc vào biến value set_pwm1_duty(value);// đặt tốc độ động value lcd_imp(value);// hiển thị giá trị value lên lcd } } 16 PHẦN KẾT LUẬN Qua phần tiểu luận giúp em hiểu biết cách hoạt động timer,ngắt ,ngắt port,chức ADC, sử dụng pwm để điều khiển động cách sử dụng RS232, hiểu biết cách tổng quát cách lập trình pic16f877A để điều khiển thiết bị 17 ... code·································································· 11 1. 1 .1 câu 1- dùng timer điều khiển led? ?········································ 11 1. 1.2 câu 2- dùng rs232 điều khiển led? ?········································ 12 1. 1.3 câu 3- điều khiển. .. 2 .1 - nhấn nút stop Hình 2.2 - dùng biến trở điều chỉnh tốc độ động PHẦN LẬP TRÌNH 1. 1 Lưu đồ thuật tốn 1. 1 .1 Câu 1- dùng timer điều khiển led 1. 1.2 Câu 2- dùng rs232 điều khiển led Câu 3- điều. .. PHẦN LÝ THUYẾT 1. 1 Câu 1- dùng timer điều khiển led Tính tốn timer 1: u cầu dùng timer1 tạo Ngắt với chu kì 1. 2 s FTimer1 = 1/ 1.2 = 5/6 hz FTimer1 = 20.000.000 /4 = 5.000.000hz ==> 10 0ms: 500.000