TIỂU LUẬN thực hành vi điều khiển viết chương trình điều khiển các led bằng hai cách sử dụng ngắt ngoài và không ngắt ngoài theo qui luật sau mỗi lần bấm vào phím bấm nối với chân RB0, đèn sẽ sáng theo số lần

10 7 0
TIỂU LUẬN thực hành vi điều khiển viết chương trình điều khiển các led bằng hai cách sử dụng ngắt ngoài và không ngắt ngoài theo qui luật sau mỗi lần bấm vào phím bấm nối với chân RB0, đèn sẽ sáng theo số lần

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

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH BÀI TIỂU LUẬN Tên học phần: Thực hành Vi Điều Khiển Kỳ thi học kỳ đợt B năm học 2020 -2021 Giảng viên hướng dẫn: Phạm Quốc Thiện Sinh viên thực hiện: Nguyễn Vũ Hoàng Huy MSSV Nguyễn Văn Pháp MSSV Lê Minh Tiến MSSV Nguyễn Văn Phước MSSV Lớp: 19DOTD2 Ngành: Công nghệ kỹ thuật ô tô Khoa/Viện: Viện kỹ thuật Tp.HCM, ngày … tháng … năm … Câu 1: Viết chương trình điều khiển led hai cách sử dụng ngắt ngồi khơng ngắt ngồi theo qui luật sau: Mỗi lần bấm vào phím bấm nối với chân RB0, đèn sáng theo số lần bấm: bấm lần đèn D1 sáng, bấm lần đèn D2 sáng,… bấm lần đèn D9 sáng, bấm lần quay lại chu trình BÀI LÀM: Cách 1: Ngắt ngồi #include #fuses HS #use delay(clock = 20000000) unsigned int8 maled[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; signed int16 tt; #int_ext void ktr_nn() { tt++; if(tt>8) tt=0; } void main() { set_tris_b(0x01); set_tris_c(0x00); enable_interrupts(int_ext); enable_interrupts(global); ext_int_edge(INT_EXT_H2L); tt=0; while(true) { output_c(maled[tt]); } } Cách 2: Không ngắt #include #fuses HS #use delay(clock = 20000000) #define nn pin_b0 unsigned int8 maled[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; signed int16 tt; void main() { set_tris_b(0x01); set_tris_c(0x00); tt=0; while(true) { output_c(maled[tt]); if(input(nn)==0) { delay_ms(20); if(input(nn)==0) { tt++; if(tt>8) tt=0; output_c(maled[tt]); while(input(nn)==0); } } } } Câu 2: Cho sơ đồ mạch viết giải thích ý nghĩa câu lệnh sử dụng chương trình a Thực đếm - 59 hiển thị led dùng ngắt Timer (Thạch anh 4Mhz) b Thực hai cách dùng ngắt khơng ngắt ngồi cho nút nhấn Mỗi lần nhấn nút số đếm tăng lên lớn 59 quay lại BÀI LÀM: Cách 1: Ngắt #include #fuses HS #use delay(clock = 4000000) unsigned int8 maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; signed int16 int1 tt; quet; #int_ext void ktr_nn() { tt++; if(tt>59) tt=0; } #int_timer1 void ngat_timer() { set_timer1(60536); quet=~quet; if(quet==0) { output_c(0x00); output_d(maled[tt/10]); output_c(0x02); } else { output_c(0x00); output_d(maled[tt%10]); output_c(0x01); } void main() { set_tris_b(0x01); set_tris_c(0x00); set_tris_d(0x00); setup_timer_1(t1_internal|t1_div_by_1); set_timer1(60536); enable_interrupts(int_timer1); enable_interrupts(int_ext); enable_interrupts(global); ext_int_edge(INT_EXT_H2L); tt=0; while(true) { } } Cách 2: Khơng ngắt ngồi #include #fuses HS #use delay(clock = 4000000) #define nn pin_b0 unsigned int8 maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; signed int16 int1 tt; quet; #int_timer1 void ngat_timer() { set_timer1(60536); quet=~quet; if(quet==0) { output_c(0x00); output_d(maled[tt/10]); output_c(0x02); } else { output_c(0x00); output_d(maled[tt%10]); } } void main() { set_tris_b(0x01); set_tris_c(0x00); set_tris_d(0x00); setup_timer_1(t1_internal|t1_div_by_1); set_timer1(60536); enable_interrupts(int_timer1); enable_interrupts(global); tt=0; while(true) { if(input(nn)==0) { delay_ms(20); if(input(nn)==0) { tt++; if(tt>59) tt=0; while(input(nn)==0); } } } } output_c(0x01); Câu 3: Cho sơ đồ mạch, viết chương trình giải thích ý nghĩa câu lệnh, theo yêu cầu sau: a PIC (U1) sử dụng ADC kênh hiển thị giá trị lên LCD1 b Truyền giá trị ADC kênh từ PIC (U1) đến PIC (U2) giao tiếp UART hiển thị LCD2 BÀI LÀM: a #include #device adc=10 #fuses HS #use delay(clock = 20000000) //Su dung thach anh 20Mhz #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) #define LCD_ENABLE_PIN PIN_d6 #define LCD_RS_PIN PIN_d4 #define LCD_RW_PIN PIN_d5 #define LCD_DATA4 PIN_d0 #define LCD_DATA5 PIN_d1 #define LCD_DATA6 PIN_d2 #define LCD_DATA7 PIN_d3 #include signed int32 adc,da; void main() { set_tris_a(0x01); set_tris_d(0x00); set_tris_c(0x80); lcd_init(); setup_adc(adc_clock_div_2); setup_adc_ports(an0); set_adc_channel(0); while(true) { adc=read_adc(); da=adc*5000/1023; putc(da/1000); delay_ms(100); putc(da/100%10+10); delay_ms(100); putc(da/10%10+20); delay_ms(100); putc(da%10+30); delay_ms(100); lcd_gotoxy(1,1); lcd_putc(" DIEN AP "); lcd_gotoxy(1,2); lcd_putc(" "); lcd_putc(da/1000+0x30); lcd_putc(da/100%10+0x30); lcd_putc(da/10%10+0x30); lcd_putc(da%10+0x30); lcd_putc("mV "); } } b #include #device adc=10 #fuses HS #use delay(clock = 20000000) //Su dung thach anh 20Mhz #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) #define LCD_ENABLE_PIN PIN_d6 #define LCD_RS_PIN #define LCD_RW_PIN PIN_d4 PIN_d5 #define LCD_DATA4 PIN_d0 #define LCD_DATA5 PIN_d1 #define LCD_DATA6 PIN_d2 #define LCD_DATA7 PIN_d3 #include signed int32 ng,tr,ch,dv,da,chay; unsigned int8 data; void main() { set_tris_a(0x01); set_tris_d(0x00); set_tris_c(0x80); lcd_init(); chay=0; while(true) { if(kbhit()) / { data=getch(); if(data

Ngày đăng: 15/01/2022, 23:00

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan