Professional Documents
Culture Documents
KHOA Điện-Điện Tử
---------------o0o---------------
KỸ THUẬT VI XỬ LÝ
GIẢNG VIÊN HƯỚNG DẪN : TS. NGUYỄN TRUNG THỊ HOA TRANG
SINH VIÊN THỰC HIỆN : ĐÀO THỊ LAN HƯƠNG(Nhóm trưởng)
NGUYỄN ANH SƠN
ĐÀO THỊ My
LÊ THỊ TỐ UYÊN
NGUYỄN CÔNG BÁCH
HỒ SỸ KIÊN
NHÓM : 01
ĐỀ SỐ : 01
+ Sử dụng phần mềm Tritzing vẽ mô phỏng mạch lắp trên board mạch.
III - Linh kiện sử sụng:
1. PIC16F877A
2. LED đơn
3. Board test mạch
4. 2 nút nhấn: nút nhấn dùng để reset mạch và nút nhấn tạo 4 hiệu ứng
5. Thạch anh 8MHz
6. Transistor NPN(C
7. Điện trở vòng màu
8. Tụ điện
9. Bộ nạp PIC Kit2
10.Dây nối
VI - Cơ sở lý thuyết:
1. Tìm hiểu về PIC16F877A.
- PIC16F877A là loại vi điều 8 bit tầm trung của hãng Microchip.
- PIC16F877A là một Vi điều khiển PIC 40 chân và được sử dụng hầu hết
trong các dự án và ứng dụng nhúng.
- Nó có năm cổng bắt đầu từ cổng A đến cổng E.
- PIC16F877A hỗ trợ cả ngắt chân phần cứng và ngắt bộ định thời.
- PIC16F877A có kiến trúc Havard, sử dụng tập lệnh kiểu RISC với chỉ 35
lệnh cơ bản.
- Tốc độ hoạt động tối đa cho phép là20MHz, tương ứng với mỗi chu kỳ lệnh
là 200ns.
- Bộ nhớ dữ liệu: Là bộ nhớ EEPROM chia thành 4 bank. Mỗi bank có dung
lượng 128 byte gồm các thanh ghi có chức năng đặc biệt SFR( nằm ở vùng
địa chỉ thấp) và các thanh ghi mục đích chung GPR (nằm ở vùng địa chỉ còn
lại trong bank).
- Các thanh ghi PORTA, PORTB , PORTC, PORTD, PORTE đều chứa ở
bank 0.
- Các ngắt cơ bản của PIC16F877A:
External: Ngắt ngoài.
Timer0;
Timer1;
Timer2;
RB Port Change: Thay đổi cổng RB.
Parallel Slave Port Read/Write: Cổng Slave song song Đọc/Ghi.
Công cụ chuyển đổi A/D;
USART nhận;
UART truyền;
Synchronous Serial Port: Cổng tiếp nối đồng bộ.
CCP1 (Capture,So sánh, PWM);
CCP2 (Capture,So sánh, PWM);
TMR2 to PR2 Match: Kết hợp TMR2 đến PR2;
Comparator: Bộ so sánh;
Thao tác ghi EEPROM;
Bus Collision: Va chạm bus.
- Các thanh ghi chính được sử dụng cho ngắt bao gồm:
Thanh ghi INTCON
Thanh ghi OPTION_REG, T1CON, T2CON
Thanh ghi PIE1
Thanh ghi PIR1
Thanh ghi PIE2
Thanh ghi PIR2
I/O port
LED
LED
R
I/O port
Hình b. Chế độ nuốt dòng
- Bread board (hay còn gọi là test board) là công cụ được sử dụng rất nhiều để
thiết kế và thử nghiệm mạch mà không cần hàn các linh kiện để tạo mạch.
- Nó giúp gắn các linh kiện cũng như tái sử dụng rất dễ, có thể thay đổi thiết
kế mạch một cách dễ dàng.
- Cấu tạo của Breadboard:
+ Khu vực trung tâm chính của Breadboard là một khối gồm 2 cột.
+ Mỗi cột được tạo thành từ nhiều hàng .
+ Mỗi hàng được nối điện theo từng hàng.
+Dọc hai bên là hai bus dọc để cấp điện vào cột bên trong.
- Cách sử dụng Breadboard:
Trong hình trên vi xử lý 16F877A được đặt trên các hàng từ 42 đến 61 của
cột B và F.
Nếu nối điện tại bất kỳ điểm nào ở vị trí A42, C42, D42, E42 cũng đều tương
tự như nối với chân chip ở B42 ( vì hàng A42-E42 được nối điện với nhau).
Có một khoảng cách giữa hàng E và F nên hai chân của chip trong hàng 5
không được nối với nhau.
Tương tự nếu nối điện tại bất kỳ điểm nào ở vị trí G42, H42, I42, J42 cũng
đều tương tự như nối với chân chip ở F42 ( vì hàng F42-J42 được nối điện
với nhau).
- Tóm tắt lại đường dẫn điện:
V – Mô Phỏng:
1. Mô phỏng mạch trên phần mềm Proteous:
- Sử dụng transistor NPN
- Khối dao động sử dụng tinh thể thạch anh tần số 8MHz
- Sử dụng BJT NPN: Ghép nhiều LED song song tạo hình lần lượt các ký tự:
“T”, “Đ”, “H”, “3”, “-“, “K”, “6”, “2”, để các LED phát sáng cần đưa ra giá
trị logic 1.
- Sử dụng Pull up resistor để reset lại mạch.
- Nút nhấn nối vào chân RB0/INT của PIC16F877A để thay đổi các hiệu ứng.
Hình ảnh:
Ghi nhớ:
-Tần số mạch dao động: Fosc
-Tần số lệnh: Fosc/4
-Onetick = Prescaler/(Fosc/4) =(Prescaler*4)/Fosc
-Độ trễ: Delay = Timer Count*tick
-Số đếm thời gian( Timer Count): Count=Delay/tick
-Giá trị đặt cho thanh ghi: RegValue=TimerMax- Count
Tương đương: RegValue=TimerMax-((Delay*Fosc)/(Prescaler*4))
Ví dụ:
Với FOSC=8MHz, độ trễ 1ms
3. Sơ đồ thuật toán:
- delayTimer_ms (unsigned int t)
__interrupt() ISR (void)
Sangduoi()
Sangdan()
Sangdon()
Sangdonhaiben()
Main()
- Biến count được sử dụng để đếm số lần nút RB0 được bấm qua đó sẽ giúp
điều khiển hiệu ứng của các led trên PORTD.
Khai báo hàm delayTimer_ms(unsigned int t)
- Hàm delayTimer_ms được sử dụng để tạo độ trễ t ms giây với tham số t
được truyền vào.
- Hàm while(t--): với mỗi giá trị của t ta sẽ cài đặt là hàm while(t--) chạy mất
1 ms bằng cách cài đặt giá trị ban đầu cho timer0 và sử dụng hàm while(!
TMROIF)( Hàm này sẽ chạy cho đến khi cờ báo timer0 tràn =1)
- Để nạp ban đầu cho Tỉmer0 chúng ta sử dụng công thức:
Chọn prescaler = 8(khai báo OPTION_REG = 0x02 đề cài đặt prescaler = 8)
−3 6
Delay∗Fosc 10 ∗8∗10
R egValue = 256 - = 256- =6
4∗Prescaler 4∗8
- Timer0 được nạp ban đầu = 6 và sẽ đếm đến 256.
- Khi nút bấm trên chân RB0 được bấm, chương trình sẽ tạm dừng để chạy
hàm ngắt trước. Khi hàm ngắt được kích hoạt thì biến đếm count sẽ tăng
thêm 1 đơn vị và cờ báo ngắt ngoài INTF trên chân RB0/INT được tắt.
- Để sử dụng ngắt trên chân RB0 thì trong hàm main chúng ta khai báo thanh
ghi INTCON với bit 7 (GIE: bit cho phép ngắt toàn cục), bit 6 ( PEIE: bit
kích hoạt ngắt ngoại vi ) và bit 4 (INTE: bit cho phép ngắt ngoại vi ở chân
RB0) ở mức 1.
Hàm tạo hiệu ứng led sangduoi()
-Dùng để tạo hiệu ứng các led sáng đuổi nhau.
Hàm tạo hiệu ứng led sangdan()
- Dùng để tạo hiệu ứng các led sáng dần.
- Cài đặt prescaler = 8 và cho phép bit 7,6,4 trên thanh ghi INTCON ở mức 1.
-Hàm while (1): Dùng để lặp vô hạn
- Với giá trị ban đầu của biến count = 0 thì không có hàm if nào thỏa mãn điều
kiện
- Khi nút bấm trên RB0 được bấm 1 lần thì hàm ngắt sẽ chạy và biến count sẽ
tang lên 1, khi đó count % 4 ==1(count chia lấy dư 4 bằng 1) và hàm
sangduoi() sẽ được gọi và chạy.
- Tương tự với khi nút bấm được bấm 2, 3 ,4 lần thì lần lượt hàm sangdan(),
sangdon() và sangdonhaiben() sẽ được gọi và chạy.
- Khi nút bấm được bấm n lần thì câu lệnh if nào thỏa mãn (n%4 ==x) thì sẽ
chạy hiệu ứng led trong hàm đó.
5. Mô phỏng mạch trên phần mềm Fritzing:
- Transistor:
Chân B: nối với một chân của điện trở vòng màu
Chân C: nối với cực âm của LED
Chân E: nối với Ground(âm nguồn)
- LED:
Cực âm( chân ngắn) nối với chân B của Transistor
Cực dương(chân dài) nối với dương nguồn.
- Điện trở vòng màu:
Một chân nối với chân B của Transistor
Một chân nối với
- Cực âm của LED nối với chân C của Transistor
- 1 chân điện trở vòng màu nối với cực B của Transistor
- Còn lại chân E của Transistor nối với Ground(âm nguồn).
6. VI – Tiến hành lắp mạch thực tế trên board mạch và chạy thử.
Hình ảnh:
Video:
VII – Câu hỏi trắc nghiệm QUIZIZZ:
Câu hỏi 1: Sử dụng Timer0 tạo độ trễ 1ms với FOSC=4MHz, RegValue=131
thì Prescaler bằng bao nhiêu?
A.2 B.8
C.32 D.64
Câu hỏi 2: Sử dụng Timer2 tạo độ trễ 500us với FOSC=4MHz, tỉ lệ chia phù
hợp là 16 đúng hay sai?
A. ĐÚNG B. SAI
Câu 4: Hình trên cho biết chức năng reset kiểu nào?
A. Reset khi bật nguồn
B. Reset bằng chân
MCLR
C. Reset bằng chương
trình
D. Reset bằng
Watchdog timer
Câu 5: Sử dụng Timer1 tạo độ trễ 100ms với FOSC=20MHz thì giá trị bộ đếm thời
gian là?
A. 3036 B. 34286
C. 4991 D. 131
A. Chương trình trên tương đương B. Chương trình trên tương đương
với OPTION_REG=0X06; và hệ với OPTION_REG=0X05; và hệ
số chia là 00110=1:32 số chia là 00110=1:32
C. Chương trình trên tương đương D. Chương trình trên tương đương
với: OPTION_REG=0X06; và hệ với OPTION_REG=0X05; và hệ
số chia là 00110=1:128 số chia là 00110=1:128
Câu 7: Để các LED phát sáng cần đưa ra giá trị logic?
A. Mức logic 0
B. Mức logic 1
Câu 8: Sử dụng Timer2 tạo độ trễ 500us với FOSC=4MHz, tỉ lệ chia phù hợp là?
A. 1 B. 2
C. 4 D. 8
Câu 9: Chương trình trên để tạo hiệu ứng sangdonhaiben đúng hay sai?
A. Đúng
B. Sai
Câu 10: Mạch Reset như hình trên là kiểu Reset bằng chân MCLR đúng hay
sai?
A. Đúng
B. Sai
D. Hiệu ứng
sangduoihaiben
Câu 12: Cho chương trình tạo độ trễ 1s dùng timer2 với FOSC=4MHz, tỉ lệ
chia là 4. Chương trình trên đúng hay sai?
A. Đúng
B. Sai
D. Hiệu ứng
sangduoihaiben
Câu 15: Để LED phát sáng cần đưa ra giá trị logic?
A. Mức logic 0
B. Mức logic 1
A. Đúng
B. Sai