1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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 10 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 145,28 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP... Câu 2: Cho sơ đồ mạch viết và giải thích ý nghĩa câu lệnh sử dụng trong chương trìnha.. Thực hiện bằng hai cách dùng ngắt ngoài và không ngắt ngoài cho nút

Trang 1

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ỳ 2 đợ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 …

Trang 2

Câu 1: 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 bấm: bấm 1 lần đèn D1 sáng, bấm 2 lần đèn D2 sáng,… bấm 8 lần đèn D9 sáng, bấm 9 lần quay lại chu trình trên

BÀI LÀM:

Cách 1: Ngắt ngoài

#include <16F877A.h>

#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]);

}

}

Trang 3

Cách 2: Không ngắt ngoài

#include <16F877A.h>

#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);

}

}

}

}

Trang 4

Câu 2: Cho sơ đồ mạch viết và giải thích ý nghĩa câu lệnh sử dụng trong chương trình

a Thực hiện đếm 0 - 59 và hiển thị trên led 7 dùng ngắt Timer (Thạch anh 4Mhz)

b Thực hiện bằng hai cách dùng ngắt ngoài và không ngắt ngoài cho nút nhấn Mỗi lần nhấn nút số đếm tăng lên cho đến khi lớn hơn 59 thì quay lại về 0

BÀI LÀM:

Cách 1: Ngắt ngoài

#include <16F877A.h>

#fuses HS

#use delay(clock = 4000000)

unsigned int8 maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; signed int16 tt;

int1 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);

Trang 5

}

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 ngoài

#include <16F877A.h>

#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 tt;

int1 quet;

#int_timer1

void ngat_timer()

{

set_timer1(60536);

quet=~quet;

if(quet==0)

Trang 6

{

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(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);

}

}

}

}

Trang 7

Câu 3: Cho sơ đồ mạch, viết chương trình và giải thích ý nghĩa các câu lệnh, theo yêu cầu sau:

a PIC (U1) sử dụng ADC kênh 0 và hiển thị giá trị lên LCD1

b Truyền giá trị ADC của kênh 0 từ PIC (U1) đến PIC (U2) bằng giao tiếp UART và hiển thị trên LCD2

BÀI LÀM:

a.

#include <16F877A.h>

#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 <lcd.c>

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);

Trang 8

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 <16F877A.h>

#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

Trang 9

#define LCD_DATA4 PIN_d0

#define LCD_DATA5 PIN_d1

#define LCD_DATA6 PIN_d2

#define LCD_DATA7 PIN_d3

#include <lcd.c>

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<10) ng=data;

else if(data<20) tr=data-10;

else if(data<30) ch=data-20;

else if(data<40) dv=data-30;

chay++;

if(chay>3)

{

chay=0;

da=ng*1000 + tr*100 + ch*10 + dv;

}

Trang 10

}

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 ");

}

}

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w