You are on page 1of 9

Bộ định thời và bộ đếm

BÀI THỰC HÀNH 5:

BỘ ĐỊNH THỜI VÀ BỘ ĐẾM

 MỤC ĐÍCH
Qua bài thực hành này, sinh viên có khả năng:
- Vận dụng và lập trình cho các bộ định thời của PIC18F bằng cả Assembly và C18.
- Vận dụng và lập trình cho các bộ đếm của PIC18F bằng cả Assembly và C18.
- Biết cách điều chỉnh các bit cấu hình của VĐK phù hợp cho các ứng dụng.
- Nâng cao kỹ năng lập trình dùng phần mềm MPLAB IDE và MPLAB C18 để lập
trình các ứng dụng ngắt cho vi điều khiển PIC 18F4550.
 THIẾT BỊ VÀ PHẦN MỀM SỬ DỤNG
- Máy vi tính.
- Bộ thực hành BASIC-PIC18F TRAINER.
- Bộ “nạp/gỡ rối” PICKIT3.
- Phần mềm MPLAB IDE V8.92.
- Phần mềm MPLAB C18 V3.47.
- Phần mềm nạp chương trình PICKIT3.
5.1 KHẢO SÁT BỘ ĐỊNH THỜI
5.1.1 Thực hành 5-1: tạo sóng vuông bằng Timer0 dùng Assembly
 Yêu cầu
Cho chương trình sau được viết bằng Assembly sẽ tạo sóng vuông tại chân RB.5.
Sử dụng Timer0 ở chế độ 16-bit, Timer0 không sử dụng prescaler. Hệ thống dùng
XTAL = 20 MHz.
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
processor p18f4550
include <p18f4550.inc>
org 0x00
goto START
START bcf TRISB, 5
movlw 0x08
movwf T0CON
HERE movlw 0x76

Biên soạn: GV. Lê Quốc Đán 103


Bộ định thời và bộ đếm

movwf TMR0H ; TMR0H = 0x76.


movlw 0x34
movwf TMR0L ; TMR0L = 0x34.
bcf INTCON, TMR0IF ; Clear interrupt flag.
call DELAY
btg PORTB, 5 ; Toggle PB5.
bra HERE ; Load TH & TL again.

;===> delay using Timer0


DELAY bsf T0CON, TMR0ON ; Start TMR0.
AGAIN btfss INTCON, TMR0IF ; Monitor TMR0 flag until
bra AGAIN ; it rolls over.
bcf T0CON, TMR0ON ; Stop TMR0.
return
end
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Cho chạy kiểm tra chương trình trên hệ thống BASIC-PIC18F TRAINER và tiến
hành các bước sau:
(a) Nghe tín hiệu dao động từ loa buzzer trên module 13.
(b) Dùng máy hiện sóng đo tần số của sóng vuông được phát ra tại chân RB.5.
(c) Tính tần số dao động bằng phân tích chương trình Assembly trên.
 Module thực hành trên BASIC-PIC18F TRAINER
- Module 9: PIC 18F4550
- Module 13: SOUND
- Module 4: POWER SUPPLY
 Hướng dẫn
Trình tự thực hiện theo các bước sau:
 Thực hiện đấu nối phần cứng
Tắt nguồn dc (công tắc S3) trên Module 4.
Ghim dây nguồn vào jack J8.
Thực hiện nối dây giữa các module theo đúng chỉ dẫn của hình 5.1.

104 Biên soạn: GV. Lê Quốc Đán


Bộ định thời và bộ đếm

RB.5(JP17)-J37

5V

Hình 5.1: nối cáp giữa các module của thực hành 5-1

Hợp dịch chương trình bằng MPLAB IDE: chọn Build All
 Nạp chương trình vào 18F4550
Tắt nguồn dc bằng công tắc nguồn S3 trên Module 4.
Ghim PICKIT3 đúng chiều quy định (không đúng chiều sẽ làm chết
PIC18F4550 trên bộ thực hành) vào đầu cắm ICD là J15 hoặc J16 trên Module
9.
Chạy phần mềm PICKIT3.
Nhập file.hex đã hợp dịch.
Đặt các bit cấu hình.
CONFIG1 = 0x0C18; CONFIG2 = 0x1E1E
CONFIG3 = 0x8100; CONFIG4 = 0x0081
Xuất ra file_CF.hex để lưu cả các bit cấu hình vào file mã chương trình.
Chọn Program để tiến hành nạp chương trình (có chứa đựng các bit cấu hình)
vào bộ nhớ Flash của PIC 18F4550..
 Kiểm tra chương trình trên BASIC-PIC18F TRAINER
Rút kit nạp PICKIT3 ra khỏi hệ thống.
Bật công tắc nguồn S3 trên Module 4.
Quan sát hoạt động của hệ thống.

Biên soạn: GV. Lê Quốc Đán 105


Bộ định thời và bộ đếm

 Viết kết quả thực hiện vào báo cáo thực hành.
5.1.2 Thực hành 5-2: tạo sóng vuông có tần số 2 Hz bằng Timer0 dùng C18
 Yêu cầu
Viết chương trình bằng C18 để phát ra tần số 2 Hz ở chân RB.5. Sử dụng
Timer0, 8-bit để tạo delay.
 Module thực hành trên BASIC-PIC18F TRAINER
- Module 9: PIC 18F4550.
- Mofule 13: SOUND.
- Module 4: POWER SUPPLY.
 Hướng dẫn
Trình tự thực hiện theo các bước sau:
 Thực hiện đấu nối phần cứng
Tắt nguồn dc (công tắc S3) trên Module 4.
Ghim dây nguồn vào jack J8.
Thực hiện nối dây giữa các module theo đúng chỉ dẫn của hình 5.1.
 Chương trình mẫu
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
#include <p18f4550.h>
void T0M8Delay(void);
#define mybit PORTBbits.RB5
void main(void)
{
unsigned char x, y;
TRISBbits.TRISB5 = 0;
while(1)
{
mybit ^= 1; // Toggle PORTB.5.
for (x = 0; x < 250; x++) //
for (y = 0; y < 35; y++) // Get 35 (not 39).
T0M8Delay();
}
}

106 Biên soạn: GV. Lê Quốc Đán


Bộ định thời và bộ đếm

void T0M8Delay()
{
T0CON = 0x45; // Timer0, 8-b, 1:64 prescaler.
TMR0L = -1; //
T0CONbits.TMR0ON = 1; //
while (INTCONbits.TMR0IF == 0); //
T0CONbits.TMR0ON = 0; //
INTCONbits.TMR0IF = 0; //
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Biên dịch chương trình bằng MPLAB C18
 Nạp chương trình vào 18F4550
Tắt nguồn dc bằng công tắc nguồn S3 trên Module 4.
Ghim PICKIT3 đúng chiều quy định (không đúng chiều sẽ làm chết
PIC18F4550 trên bộ thực hành) vào đầu cắm ICD là J15 hoặc J16 trên Module
9.
Chạy phần mềm PICKIT3.
Nhập file.hex đã biên dịch.
Đặt các bit cấu hình.
CONFIG1 = 0x0C18; CONFIG2 = 0x1E1E
CONFIG3 = 0x8100; CONFIG4 = 0x0081
Xuất ra file_CF.hex để lưu cả các bit cấu hình vào file mã chương trình.
Chọn Program để tiến hành nạp chương trình (có chứa đựng các bit cấu hình)
vào bộ nhớ Flash của PIC 18F4550.
 Kiểm tra chương trình trên BASIC-PIC18F TRAINER
Rút kit nạp PICKIT3 ra khỏi hệ thống.
Bật công tắc nguồn S3 trên Module 4.
Quan sát trạng thái hoạt động của hệ thống.
 Luyện tập 5-1:
 Yêu cầu:
Thực hiện lại bài thực hành 5-1, nhưng TIMER0 sử dụng prescaler = 1:32.
 Viết kết quả thực hiện vào báo cáo thực hành.
 Luyện tập 5-2:
 Yêu cầu:

Biên soạn: GV. Lê Quốc Đán 107


Bộ định thời và bộ đếm

Thực hiện lại bài thực hành 5-2, nhưng TIMER0 hoạt động 16-bit.
 Viết kết quả thực hiện vào báo cáo thực hành.

5.2 KHẢO SÁT BỘ ĐẾM


5.2.1 Thực hành 5-3: đếm xung bằng Counter0 dùng Assembly
 Yêu cầu
Từ hình 5.6, viết chương trình Assembly để Conuter0 ở 8-bit đếm các xung và
hiển thị trạng thái đếm của thanh ghi TMR0L ra các LED trên PORTD.

Hình 5.2: yêu cầu của thực hành 5-3


 Module thực hành trên BASIC-PIC18F TRAINER
- Module 9: PIC 18F4550.
- Module 11: EXTERNAL INTERRUPT.
- Module 2: LEDS & SWITCHES.
- Module 4: POWER SUPPLY.
 Hướng dẫn
Trình tự thực hiện theo các bước sau:
 Thực hiện đấu nối phần cứng
Tắt nguồn dc (công tắc S3) trên Module 4.
Ghim dây nguồn vào jack J8.
Thực hiện nối dây giữa các module theo đúng chỉ dẫn của hình 5.3.
5V
5V
J26-J4

Vị trí
jumper
5V

Hình 5.3: nối cáp giữa các module của thực hành 5-3

108 Biên soạn: GV. Lê Quốc Đán


Bộ định thời và bộ đếm

 Chương trình mẫu


;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
processor p18f4550
include <p18f4550.inc>
org 0x00
goto START
START bsf TRISA, RA4 ; RA4 as an input for clock.
clrf TRISD ; PORTD as an output.
movlw 0x68 ; TMR0, 8-bit, ext clk, no prescale.
movwf T0CON ; load to T0CON.
HERE movlw 0x00
movwf TMR0L ; TMR0L = 0x00.
bcf INTCON, TMR0IF ; Cleat flag bit.
bsf T0CON, TMR0ON ; Start TMR0.
AGAIN movff TMR0L, PORTD ; Display the count on PORTD.
btfss INTCON, TMR0IF ; Monitor flag bit until
bra AGAIN ; it rolls over.
bcf T0CON, TMR0ON ; Stop TMR0.
goto HERE
end
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 Nạp chương trình vào 18F4550
Tắt nguồn dc bằng công tắc nguồn S3 trên Module 4.
Ghim PICKIT3 đúng chiều quy định (không đúng chiều sẽ làm chết
PIC18F4550 trên bộ thực hành) vào đầu cắm ICD là J15 hoặc J16 trên Module
9.
Chạy phần mềm PICKIT3.
Nhập file.hex đã hợp dịch.
Đặt các bit cấu hình.
CONFIG1 = 0x0C18; CONFIG2 = 0x1E1E
CONFIG3 = 0x8100; CONFIG4 = 0x0081
Xuất ra file.hex để lưu cả các bit cấu hình vào file mã chương trình.
Chọn Program để tiến hành nạp chương trình (có chứa đựng các bit cấu hình)
vào bộ nhớ Flash của PIC 18F4550.
 Kiểm tra chương trình trên BASIC-PIC18F TRAINER
Rút kit nạp PICKIT3 ra khỏi hệ thống.
Bật công tắc nguồn S3 trên Module 4.
Quan sát trạng thái hoạt động của các LED.

Biên soạn: GV. Lê Quốc Đán 109


Bộ định thời và bộ đếm

5.2.2 Thực hành 5-4:


 Yêu cầu
Giả sử có xung clock 1 Hz đưa vào chân T0CKI. Viết chương trình để bộ đếm
hoạt động 8-bit đếm lên và hiển thị giá trị đếm của TMR0L trên 8 LED ở PORTD.
Giá trị đếm bắt đầu là 0.
 Module thực hành trên BASIC-PIC18F TRAINER
- Module 11: PIC 18F4550.
- Module : NE555.
- Module : 8 LED.
- Module 4: POWER SUPPLY.
 Hướng dẫn
Trình tự thực hiện theo các bước sau:
 Thực hiện đấu nối phần cứng
Tắt nguồn dc (công tắc S3) trên Module 4.
Ghim dây nguồn vào jack J8.
Thực hiện nối dây giữa các module theo đúng chỉ dẫn của hình 5.3.
 Chương trình mẫu
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
#include <p18f4550.h>
void main(void)
{
TRISAbits.TRISA4 = 1;
TRISD = 0;
T0CON = 0x68; // Counter0, 8-b, no prescaler.
TMR0L = 0; // Begin at 0.
while(1)
{
do
{
T0CONbits.TMR0ON = 1;
PORTD = TMR0L; // Place value on PORTD.
}
while (INTCONbits.TMR0IF == 0);
T0CONbits.TMR0ON = 0;
INTCONbits.TMR0IF = 0;
}
}
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/

110 Biên soạn: GV. Lê Quốc Đán


Bộ định thời và bộ đếm

 Nạp chương trình vào 18F4550


Tắt nguồn dc bằng công tắc nguồn S3 trên Module 4.
Ghim PICKIT3 đúng chiều quy định (không đúng chiều sẽ làm chết
PIC18F4550 trên bộ thực hành) vào đầu cắm ICD là J15 hoặc J16 trên Module
9.
Chạy phần mềm PICKIT3.
Nhập file.hex đã biên dịch.
Đặt các bit cấu hình.
CONFIG1 = 0x0C18; CONFIG2 = 0x1E1E
CONFIG3 = 0x8100; CONFIG4 = 0x0081
Xuất ra file_CF.hex để lưu cả các bit cấu hình vào file mã chương trình.
Chọn Program để tiến hành nạp chương trình (có chứa đựng các bit cấu hình)
vào bộ nhớ Flash của PIC 18F4550.
 Kiểm tra chương trình trên BASIC-PIC18F TRAINER
Rút kit nạp PICKIT3 ra khỏi hệ thống.
Bật công tắc nguồn S3 trên Module 4.
Quan sát trạng thái hoạt động của hệ thống.
 Luyện tập 5-3:
 Yêu cầu:
Thực hiện lại bài thực hành 5-4, nhưng thực hiện đếm xuống.
 Viết kết quả thực hiện vào báo cáo thực hành.

Biên soạn: GV. Lê Quốc Đán 111

You might also like