include fuses HS, NOWDT use delay(clock=20M) unsigned int8 count=0; INT_EXT void ngat_ngoai() {count++; if(count==4) count=1; } void main() { enable_interrupts(GLOBAL); ext_int_edge(H_TO_L); enable_interrupts(INT_EXT); set_tris_d(0x00); output_d(0xff); while(1) { switch(count) { case 1: {
Trang 1KHOA ĐIỆN – ĐIỆN TỬ
Báo cáo
TÌM HIỂU NGẮT VÀ HIỂN THỊ LED
Người hướng dẫn: ……… Người thực hiện: ………
Lớp: Vi xử lý 04 MSSV: ……… Khóa: ………… Nhóm đề tài:3
THÀNH PHỐ HỒ CHÍ MINH, NĂM 2016
Trang 2MỤC LỤC
MỤC LỤC 1
CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI 2
1.1 Giới thiệu đề tài 2
CHƯƠNG 2: CÁC LINH KIỆN CƠ BẢN ĐƯỢC SỬ DUNG TRONG MẠCH 3 2.1 Các linh kiện liên quan 3
2 2 SƠ ĐỒ KHỐI: 4
CHƯƠNG 3: THIẾT KẾ MẠCH 7
3.1 Sơ đồ tổng quát 7
7
3.2 Nguyên lí hoạt động 7
3.3 Sơ đồ mô phỏng 8
3.4 Chương trình 9
CHƯƠNG 4: KẾT QUẢ MÔ PHỎNG 11
Trang 3CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI
1.1 Giới thiệu đề tài
Mục đích đề tài
Hiểu được về chương trình ngắt trong PIC16f877a,viết được chương trình sử dụng ngắt ngoài để điều khiển led
Ưu điểm:
Mạch đơn giản,chương trình dễ hiểu
Khuyết điểm:
Chương trình còn dài dòng,xây dựng thuật toán chưa tối ưu
Trang 4CHƯƠNG 2: CÁC LINH KIỆN CƠ BẢN ĐƯỢC SỬ DUNG TRONG
MẠCH
2.1 Các linh kiện liên quan
H nh 2-1: nút nhấn
H nh 2-2: tụ điện
H nh 2-3: led
Trang 5H nh 2-4: PIC16F877A
2 2 SƠ ĐỒ KHỐI:
H nh 1 sơ đồ chân PIC 16F877A
Chân OSC/CLK1 (13): Là ngõ vào kết nối với dao động thạch anh hoặc ngõ vào nhận xung clock bên ngoài
OSC1:Ngõ vào dao động thạch anh hoặc ngõ vào nguồn xung bên ngoài Ngõ vào
có mạch Schimitt Trgger nếu sử dụng dao động RC
CLK1: Ngõ vào xung bên ngoài
Chân OSC2/CLK0(14):ngõ vào dao động thạch anh hoặc ngõ vào cấp xung clock
OSC2: Ngõ ra dao động thạch ah Kết nối đến thạch anh hoặc bộ cộng hưởng
CLKO: ở chế độ RC, ngõ ra của OSC2, bằng 1/4 tần số của OSC1 và chính là tốc độ chu kì lệnh
Chân MCLR/Vpp (1) có 2 chức năng:
Trang 6a) MCLR: là ngõ vào reset tích cực mức thấp
b) Vpp: Khi lập trình cho PIC thì đóng vai trò là ngõ vào nhận điện áp lập trình
Chân RA0/AN0(2) có 2 chức năng:
RA0: xuất/nhập số
AN0: Ngõ vào tương tự của kênh thứ 0
Chân RA1/AN1(3) có 2 chức năng:
a) RA1: xuất/nhập số
b) AN1: Ngõ vào tương tự của kênh thứ 1
Chân RA2/AN2/VREF-/CVREF(4) có
a) RA2: xuất/nhập số
b) AN2: Ngõ vào tương tự của kênh thứ 2
c) VREF: ngõ vào điện áp chuẩn (thấp) của bộ A/D
d) CVREF: điện áp tham chiếu VREF ngõ ra so sánh
Chân RA3/AN3/VREF+(5)
a) RA3: xuất/nhập số
b) AN3: Ngõ vào tương tự của kênh thứ 3
c) VREF+: Ngõ vào điện áp chuẩn ( cao ) của bộ A/D
Chân RA4/TOCKI/C1UTO (6)
a) RA4: xuất/nhập số
b) TOCKI: Ngõ vào xung clock bên ngoài cho Timer 0
c) C1OUT: Ngõ vào bộ so sánh 1
Chân RA5/AN4/SS/C2OUT(7):
a) RA5: Xuất/nhập số
b) AN4: ngõ vào tương tự kênh thứ 4
c) SS: Ngõ vào chọn lựa SPI phụ
d) C2OUT: ngõ ra bộ so sánh 2
Chân RB0/INT (33):
a) RB0: Xuất/nhập số
b) INT: ngõ vào nhận tín hiệu ngoài
Chân RB1(34): Xuất nhập số
Chân RB2(35): xuất/nhập số
Chân RB3/PGC:
a) RB3: xuất/nhập số
b) PGC: Chân cho phép lập trình điện áp thấp ICSP
Chân RB4(37) và RB5(38): xuất/ nhập số
Chân RB6/PGC: (39):
a) RB6: xuất/ nhập số
b) PGC: mạch gỡ rối và xung clock lập trình ICSP
Chân RB7/PGD(40):
a) RB7: xuất/ nhập số
b) PGD: mạch gỡ rối và xung clock lập trình ICSP
Chân RC0/TICCO/TICKKI(15):
a) RC0: xuất/ nhập số
b) T1OCO: Ngõ vào bộ dao động Timer1
c) TICKI: ngõ vào xung clock bên ngoài Timer1
Chân RC1/T1OSI/CCP2(16):
Trang 7a) RC1: Xuất/nhập số
b) T1OSI: Ngõ vào bộ dao động Timer1,
c) CCP2: ngõ vào Capture2, ngõ ra compare2, ngõ ra PWM2
Chân RC2/CPP1(17):
a) RC2: xuất/nhập số
b) CCP1: : ngõ vào Capture1, ngõ ra compare1, ngõ ra PWM1
Chân RC3/SCK/SCL(18):
a) RC3:Xuât/nhập số
b) SCK: ngõ vào xung clock nối tiếp đồng bộ/ ngõ ra của chế độ SPI c) SCL:NGõ vào xung clock nối tiếp đồng bộ/ ngõ ra của chế độ I2C
Chân RC4/SDI/SDA(23):
a) RC4: xuất/nhập số
b) SDI: dữ liệu vào SPI
c) SDA: xuất nhập dữ liệu I2C
Chân RC5/SDO(24):
a) RC5: xuất/nhập số
b) SDO: dữ liệu ra SPI
Chân RC6/TX/CK(25):
a) RC6: Xuất/nhập số
b) TX:Truyền bất đồng bộ USART
c) CK: Xung đồng bộ USART
Chân RC7/RX/DT(26)
a) RC7: nhập/xuất số
b) RX Nhận bất đồng USART
c) DT: Dữ liệu đồng bộ USART
Chân RD0/PSP0(19):
a) RD0: Xuất/nhập số
b) PSP0 dữ liệu port song song
Chân RD1/PSP1(20):
a) RD1: Xuất/nhập số
b) PSP1 dữ liệu port song song
Các chân RD2/PSP2(21), RD3/PSP3(22), RD4/PSP4(27), RD5/PSP5(28) RD6/PSP6(29) , RD7/PSP7(30) tương tự chân 19 và 20
Chân RE0/ RD/AN5(8):
a) RE0: xuất/ nhập số
b) RD: điều khiển port song song
c) AN5: ngõ vào tương tự kênh 5
Chân RE1/WR/AN6(9)
a) RE1: Nhập/xuất số
b) WR: điều khiển ghi port song song
c) AN6: tương tự kênh 6
Chân ER2/CS/AN7(10):
a) RE2:Xuất/nhập số
b) CS: Chip chọn lựa điều khiển port song song
c) AN7: ngõ vào tương tự kênh thứ 7
Chân VDD(11,32) và VSS(12,31): là các chân nguồn PIC
Trang 8CHƯƠNG 3: THIẾT KẾ MẠCH 3.1 Sơ đồ tổng quát
3.2 Nguyên lí hoạt động
Khi cấp nguồn tất cả các led sẽ dc cài đặt ở bit 1 (led sáng),khi ấn vào button 1 lần led sẽ tắt dần từ trái sang phải với thời gian delay mỗi led là 20ms,khi ấn button lần
2 led sẽ sáng dần từ phải sang trái với thời gian delay mỗi led là 30ms, khi ấn button lần 3 tất cả các led sẽ tắt, khi ấn button lần 4 trạng thái của led sẽ trở về trạng thái lúc ấn button lần đầu tiên
NGUỒN
KHỐI PIC16F877A
KHỐI HIỂN THỊ
CÒI
Trang 93.3 Sơ đồ mô phỏng
H nh 3-1: Sơ đồ nguyên lí
Trang 103.4 Chương tr nh
#include <16F877A.h>
#fuses HS, NOWDT
#use delay(clock=20M)
unsigned int8 count=0;
#INT_EXT
void ngat_ngoai()
{count++;
if(count==4) count=1;
}
void main()
{
enable_interrupts(GLOBAL);
ext_int_edge(H_TO_L);
enable_interrupts(INT_EXT);
set_tris_d(0x00);
output_d(0xff);
while(1)
{
switch(count)
{
case 1: {
output_d(0b11111111);
delay_ms(20);
output_d(0b11111110);
delay_ms(20);
output_d(0b11111100);
delay_ms(20);
output_d(0b11111000);
delay_ms(20);
output_d(0b11110000);
delay_ms(20);
Trang 11output_d(0b11100000);
delay_ms(20);
output_d(0b11000000);
delay_ms(20);
output_d(0b10000000);
delay_ms(20);
output_d(0b00000000);
delay_ms(20);
}; break;
case 2: {
output_d(0b11111111);
delay_ms(30);
output_d(0b01111111);
delay_ms(30);
output_d(0b00111111);
delay_ms(30);
output_d(0b00011111);
delay_ms(30);
output_d(0b00001111);
delay_ms(30);
output_d(0b00000111);
delay_ms(30);
output_d(0b00000011);
delay_ms(30);
output_d(0b00000001);
delay_ms(30);
output_d(0b00000000);
delay_ms(30);
}; break;
case 3: output_d(0); break;
default: break;
}}
}
Trang 12CHƯƠNG 4: KẾT QUẢ MÔ PHỎNG
4.1 Kết quả mô phỏng
H nh 4-1: led tắt dần từ trái sang phải
H nh 4-2: led tắt dần từ phải sang trái