You are on page 1of 11

LAB 2-1

DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG

MỤC TIÊU:

 Hiểu các mode hoạt động của timer


 Hiểu cách sử dụng timer để tao delay và tạo xung

THAM KHẢO:

 Tài liệu hướng dẫn thí nghiệm, chương 4, 5


 Atmel-2505-Setup-and-Use-of-AVR-Timers_ApplicationNote_AVR130.pdf

BÀI 1

a) Viết chương trình con delay 1 ms sử dụng timer 0. Sử dụng chương trình con này để tạo
xung 500 Hz trên chân PA0.

DELAY:
LDI R17,0x83 ; -125
OUT TCNT0,R17LDI R17,0X03 ;Timer0 chạy, chọn hệ số chia N=64
OUT TCCR0B,R17
WAIT:
IN R17,TIFR0 ;đọc thanh ghi cờ Timer0;Timer bắt đầu đếm từ lệnh này
SBRS R17,TOV0 ;chờ cờ TOV0=1 báo Timer0 tràn
RJMP WAIT ;cờ TOV0=0 tiếp tục chờ
OUT TIFR0,R17 ;nạp lại bit TOV0=1 để xóa cờ TOV0
LDI R17,0X00 ;dừng Timer0
OUT TCCR0B,R17
RET

b) Mô phỏng, chỉnh sửa chương trình để tạo ra xung chính xác.

.EQU P_OUT=0
.ORG 0
RJMP MAIN
.ORG 0X40
MAIN:
LDI R16,HIGH(RAMEND); đưa stack lên đỉnh SRAM
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
LDI R16,(1<<P_OUT); đặt PB1 output
OUT DDRB,R16

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
LDI R17,0X00; Timer0 mode NOR
OUT TCCR0A,R17
LDI R17,0X00
OUT TCCR0B,R17
START:
RCALL DELAY;delay tạo độ rộng xung
IN R17,PORTB;đọc port B
EOR R17,R16;đảo bit PB1
OUT PORTB,R17
RJMP START;lặp vòng lại;
DELAY:
LDI R17,$83; -125
OUT TCNT0,R17
LDI R17,0X03;Timer0 chạy, chọn hệ số chia N=64
OUT TCCR0B,R17
WAIT:
IN R17,TIFR0;đọc thanh ghi cờ Timer0;Timer bắt đầu đếm từ lệnh này
SBRS R17,TOV0;chờ cờ TOV0=1 báo Timer0 tràn
RJMP WAIT;cờ TOV0=0 tiếp tục chờ
OUT TIFR0,R17;nạp lại bit TOV0=1 để xóa cờ TOV0
LDI R17,0X00;dừng Timer0
OUT TCCR0B,R17
RET

c) Kết nối chân PA0 vào oscilloscope để kiểm tra

BÀI 2

a) Viết chương trình tạo 1 xung vuông 64 us sử dụng timer 0 ở chế độ Normal mode. Ngõ ra
sử dụng chân OC0.

.EQU P_OUT=3
.ORG 0
RJMP MAIN
.ORG 0X40MAIN:
LDI R16,HIGH(RAMEND); đưa stack lên đỉnh SRAM
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
LDI R16,(1<<P_OUT); đặt PB1 output
OUT DDRB,R16
LDI R17,0X00; Timer0 mode NOR
OUT TCCR0A,R17
LDI R17,0X00
OUT TCCR0B,R17
START:
RCALL DELAY;delay tạo độ rộng xung
IN R17,PORTB;đọc port B

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
EOR R17,R16;đảo bit PB1
OUT PORTB,R17
RJMP START;lặp vòng lại;-------------------------------------------------
DELAY:
LDI R17,$DF; -32
OUT TCNT0,R17
LDI R17,0X02;Timer0 chạy, chọn hệ số chia N=8
OUT TCCR0B,R17
WAIT:
IN R17,TIFR0;đọc thanh ghi cờ Timer0;Timer bắt đầu đếm từ lệnh này
SBRS R17,TOV0;chờ cờ TOV0=1 báo Timer0 tràn
RJMP WAIT;cờ TOV0=0 tiếp tục chờ
OUT TIFR0,R17;nạp lại bit TOV0=1 để xóa cờ TOV0
LDI R17,0X00;dừng Timer0
OUT TCCR0B,R17
RET

b) Viết chương trình thực hiện tạo xung vuông có chu kỳ 64 us sử dụng timer 1 ở chế độ
CTC mode. Ngõ ra sử dụng chân OC0.

.ORG 0
SBI DDRB,3;PB3: OUTPUT
LDI R17,31;đếm 32 xung
OUT OCR0A,R17
LDI R17,0X52;Timer0 mode CTC
OUT TCCR0A,R17; đảo bit các ngõ OC0A,B;sau khi TT so sánh bằng xảy ra
LDI R17,0X2;chọn hệ số chia N=8
OUT TCCR0B,R17
HERE:
RJMP HERE

c) Kết nối chân OC0 ra oscilloscope và quan sát

BÀI 3

a) Cho chương trình sau tạo 2 xung PWM trên OC0A và OC0B

.org 00

call initTimer0

start:

rjmp start

initTimer0:

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG

// Set OC0A (PB3) and OC0B (PB4) pins as outputs

ldi r16, (1 << PB3) | (1 << PB4);

out DDRB,r16

ldi r16, (1 << COM0B1)|(1 << COM0A1) | (1 << WGM00)|(1 << WGM01)

out TCCR0A,r16 // setup TCCR0A

ldi r16, (1 << CS01)

out TCCR0B,r16 // setup TCCR0B

ldi r16, 100

out OCR0A,r16 //OCRA = 100

ldi r16, 75

out OCR0B,r16 //OCRB = 75

ret

b) Kết nối chân OC0A và chân OC0B ra 2 kênh đo của oscilloscope, đo và ghi nhận, giải
thích dạng sóng thu được

BÀI 4

a) Sửa chương trình trên ứng với các trường hợp khác nhau của TCCR0A và TCCR0B

TCCR0A TCCR0B

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

1 COM0A COM0A COM0B COM0B WGM0 WGM0 FOC0 FOC0 WGM0 CS0 CS0 CS0
1 0 1 0 1 0 A B 2 2 1 0

2 1 0 1 0 1 1 0 0 1 0

3 1 0 1 0 1 1 1 0 1 0

4 1 0 1 0 0 1 0 0 1 0

https://doe.dee.hcmut.edu.vn/
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
b) Kết nối chân OC0A và chân OC0B ra 2 kênh đo của oscilloscope, đo và ghi nhận, giải
thích dạng sóng thu được

BÀI 5

a) Viết chương trình tạo ra 1 xung tần số 1Khz, duty cycle 25% trên chân OC0B

b) Kết nối vào Oscilloscope và đo dạng sóng ngõ ra

c) Kết nối OC0B vào kênh R của 1 LED RGB. Viết chương trình để tăng duty cycle trên
OC0B từ 0% lên 100% rồi lại giảm xuống 0, sau 10 ms duty cycle tăng/giảm 1%.

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

BÀI 1
1. Trả lời các câu hỏi
a. Khoảng thời gian trễ lớn nhất có thể tạo ra bởi timer 0 với tần số 8Mhz là bao
nhiêu? Trình bày cách tính toán
𝑇𝐷𝐿 = 𝑛 ∗ 𝑁 ∗ 𝑇𝑜𝑠𝑐 với n max khi cài đặt n=0
=> 𝑛𝑚𝑎𝑥=256 (8bit)
N là hệ số chia => 𝑁𝑚𝑎𝑥 = 1024
f=8MHz, T=1/f
=> 𝑇𝑜𝑠𝑐 = 0,125 ∗ 10−6 (𝑠)
=> 𝑇𝐷𝐿 𝑚𝑎𝑥 = 𝑛𝑚𝑎𝑥 ∗ 𝑁𝑚𝑎𝑥 ∗ 𝑇𝑜𝑠𝑐 = 0,032768 (𝑠)
b. Khoảng thời gian trễ lớn nhất có thể tạo ra bởi timer 1 với tần số 8Mhz là bao
nhiêu? Trình bày cách tính toán

𝑇𝐷𝐿 = 𝑛 ∗ 𝑁 ∗ 𝑇𝑜𝑠𝑐 với n max khi cài đặt n=0

=> 𝑛𝑚𝑎𝑥 = 65536 (16bit)

N là hệ số chia => 𝑁𝑚𝑎𝑥 = 1024


f=8MHz, T=1/f

=> 𝑇𝑜𝑠𝑐 = 0,125 ∗ 10−6 (𝑠)

=> 𝑇𝐷𝐿 𝑚𝑎𝑥 = 𝑛𝑚𝑎𝑥 ∗ 𝑁𝑚𝑎𝑥 ∗ 𝑇𝑜𝑠𝑐 = 8,388608 (𝑠)


c. Trình bày cách tính prescaler và các giá trị nạp vào các thanh ghi của timer0
trong bài thí nghiệm
Chọn hệ số chia N=4 -> n=31 với sai số = 0,25 MC
d. Mã nguồn chương trình với chú thích

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

.ORG 0
LDI R16,HIGH (RAMEND ); cài dat Stack
OUT SPH,R16
LDI R16,LOW (RAMEND)
OUT SPL,R16
LDI R16,1 ; PA0 out
OUT DDRA,R16
CLR R16
OUT TCCR0A,R16 ; mode NOR
OUT TCCR0B,R16 ; dung TIMER0
START:
RCALL DELAY_1ms
IN R17,PORTA ; dao bit0
LDI R16,1
EOR R17,R16
OUT PORTA,R17
RJMP START
DELAY_1ms: LDI R17,-31 ; cài dat n=-31
OUT TCNT0,R17

BÀI 2
1. Trả lời các câu hỏi
a. Ở mode Normal, khi nào bit TOVx được set lên 1?
Khi TCNTx đếm lên TOP ($FF) thì ở xung tiếp theo khi TCNTx quay về 0 thì
cờ TOVx set lên 1.
b. Ở mode CTC, khi nào bit OCFx được set lên 1?
Khi TCNTx đếm đến giá trị OCRx thì cờ OCFx sẽ được set lên 1
c. Giá trị các thanh ghi cấu hình cho timer 0 cho 2 trường hợp

d. Mã nguồn chương trình cho hai trường hợp


Trường hợp 1:
.ORG 0
LDI R16,HIGH (RAMEND ) ; cài dat Stack
OUT SPH,R16
LDI R16,LOW (RAMEND)
OUT SPL,R16
SBI DDRB,3 ;
LDI R16, (1<<COM0A0)

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

OUT TCCR0A,R16 ; COM0A0=1; COM0A1=0 ; chọn mode NOR


CLR R16
OUT TCCR0B,R16 ; dừng TIMER0
LDI R17,62 ; cài đặt n= 63 -1 (sai số)
OUT OCR0A,R17
START:
CLR R17
OUT TCNT0,R17
LDI R17,2 ; N=8, TIMER0 bắt đầu đếm
OUT TCCR0B,R17
WAIT: SBIS TIFR0,OCF0A
RJMP WAIT
IN R17,TIFR0
OUT TIFR0,R17 ; xóa cờ OCF0A
CLR R16
OUT TCCR0B,R16 ; dừng TIMER0
RJMP START

Trường hợp 2:
.ORG 0
LDI R16,HIGH (RAMEND ) ; cài ??t Stack
OUT SPH,R16
LDI R16,LOW (RAMEND)
OUT SPL,R16
SBI DDRD,5
LDI R16, (1<<COM1A0)
STS TCCR1A,R16 ; COM1A0=1; COM1A1=0 ; chọn mode CTC4
LDI R16, (1<<WGM12)
STS TCCR1B,R16 ; dừng TIMER1
START:
LDI R17,HIGH(63) ; cài đặt n= 63
STS OCR1AH,R17
LDI R17,LOW(63) ; cài đặt n= 63
STS OCR1AL,R17
LDI R17,(1<<WGM12)|(1<<CS11) ; N=8, TIMER1 bắt đầu đếm
STS TCCR1B,R17
END: RJMP END

BÀI 3
1. Trả lời các câu hỏi

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

a. Dạng sóng trên oscilloscope (chụp và chèn vào)

b. Giải thích lý do có dạng sóng (tần số, chu kỳ làm việc, phase) như kết quả
Do timer0 làm việc ở chế độ FPWM 3, OCR0A được đặt tại 100 và OCR0B
đặt tại 75, nên:
Dạng sóng ở chân OC0A có:
f = 3.91 kHz
tH=100 us, tL= 155 us
D= 39%.
Dạng sóng ở chân OC0B có:
f = 3.91 kHz
tH=75 us, tL= 180 us

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

D= 29%.

BÀI 4
1. Trả lời các câu hỏi
a. Các mode làm việc của timer 0 ứng với các giá trị trên bảng
Giá trị 1: Mode FPWM 3
Giá trị 2: Mode FPWM 7
Giá trị 3: Mode PCPWM
2. Chụp ảnh các dạng sóng ứng với các mode làm việc và giải thích.

BÀI 5
1. Trả lời các câu hỏi
a. Timer 0 làm việc ở mode nào?
Timer0 làm việc ở mode FPWM 7
b. Giá trị đưa vào các thanh ghi của timer 0 là bao nhiêu? Giải thích
- Tích cực cao: nạp R18 giá trị 0 và -1 sau mỗi chu kì
- Tích cực thấp: nạp R19 giá trị -100 và +1 sau mỗi chu kì
2. Trình bày mã nguồn với chú thích.
.ORG 0
LDI R16,HIGH (RAMEND ) ; cài đặt Stack
OUT SPH,R16
LDI R16,LOW (RAMEND)
OUT SPL,R16
RCALL INIT_TIMER2
CLR R18 ; chứa duty cycle
LDI R19,1 ; độ thay đổi duty cycle
RCALL INIT_TIMER0
START:
OUT OCR0B,R18
RCALL DELAY_10MS
ADD R18,R19
RCALL UPDATE ;xét duty cycle tăng/giảm
RJMP START
INIT_TIMER0:

https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:

SBI DDRB,4
LDI R16, (1<<COM0B1)|(0<<COM0B0)|(1<<WGM01)|(1<<WGM00)
OUT TCCR0A,R16 ; COM0B0=0; COM0B1=1 ; chọn mode FAST PWM 7
LDI R16, (1<<WGM02)
OUT TCCR0B,R16 ; dừng TIMER0
LDI R17,124
OUT OCR0A,R17
LDI R17,0
OUT OCR0B,R17
LDI R17,(1<<CS01)|(1<<CS00)|(1<<WGM02) ; N=64, TIMER0 bắt đầu
đếm
OUT TCCR0B,R17
RET
INIT_TIMER2:
CLR R16
STS TCCR2A,R16 ; mode NOR
STS TCCR2B,R16 ; dung TIMER2
RET
UPDATE:
CPI R18,124
BREQ CHANGE
CPI R18,0
BREQ CHANGE
RJMP SKIP
CHANGE:
NEG R19
SKIP:
RET
DELAY_10MS:
LDI R17,-78 ; cài dat n=78 (10000US)
STS TCNT2,R17
LDI R17,7 ; he so chia N=1024, TIMER2 bat dau hoat dong
STS TCCR2B,R17
WAIT:
IN R17, TIFR2 ; kiem tra co TOV0
SBRS R17,TOV2
RJMP WAIT ; co TOV2=0
OUT TIFR2,R17 ; co TOV2=1 và xóa co TOV0
CLR R17
STS TCCR2B,R17 ; dung TIMER2
RET

https://doe.dee.hcmut.edu.vn/

You might also like