Professional Documents
Culture Documents
BÀI CHUẨN BỊ
Họ và tên: Đỗ Phùng Tuấn Đạt
MSSV: 2033132
MỤC TIÊU:
THAM KHẢO:
➢ 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 1 Khz trên chân PA0.
.ORG 0
SBI DDRA,0
OUT TCCR0A,R16
LDI R16,0X00
START:
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
LDI R18,1
IN R19,PORTA
EOR R19,R18
OUT PORTA,R19
RCALL DELAY_1MS
RJMP START
////
DELAY_1MS:
LDI R17,-125
OUT TCNT0,R17
LDI R17,0X03
WAIT:SBIS TIFR0,TOV0
RJMP WAIT
LDI R17,0X00
RET
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
b) Mô phỏng, chỉnh sửa chương trình để tạo ra xung chính xác.
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.
.ORG 0
OUT TCCR0A,R16
LDI R16,0X00
LDI R18,8
LOOP:IN R17,PORTB
EOR R17,R18
OUT PORTB,R17
RCALL DELAY_64US
DELAY_64US:
LDI R17,-2
OUT TCNT0,R17
LDI R17,0X04
WAIT:SBIS TIFR0,TOV0
RJMP WAIT
LDI R17,0X00
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
OUT TCCR0B,R17; DUNG TIMER
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
.ORG 0
SBI DDRB,3; OC0 = PB3 XUAT
LDI R17,0X00
STS TCCR1A,R17; TIMER 1 MODE CTC4
LDI R17,0X00
STS TCCR1B,R17; TIMER 1 DUNG
MAIN: LDI R17,8
IN R18,PORTB
EOR R18,R17
OUT PORTB,R18
RCALL DELAY_32US
RJMP MAIN DELAY_32US:
LDI R17,HIGH(31)
STS OCR1AH,R17
LDI R16,LOW(31)
STS OCR1AL,R16
LDI R21,0X0A//CTC4 HE SO CHIA 8 0000 1010 STS TCCR1B,R21// TIMER 1 CHAY
LOOP:
SBIS TIFR1,OCF1A
RJMP LOOP
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
SBI TIFR1, OCF1A; XOA CO
RET
c) Kết nối chân OC0 ra oscilloscope và quan sát\
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
BÀI 3
a) Cho chương trình sau tạo 2 xung PWM trên OC0A và OC0B
call initTimer0; gọi hàm để khởi tạo timer/counter0 và cấu hình chân đầu ra
OC0A và 0C0B start:
initTimer0:
out DDRB,r16
ldi r16, (1 << COM0B1)|(1 << COM0A1) | (1 << WGM00)|(1 << WGM01)
// lấy giá trị 0110 0000 vào TCCR0A để thiết lập chế độ Fast PWM và không đảo cho
các chân đầu ra OC0A và OC0B
ldi r16, 100; lấy giá trị 100 và lưu vào OCR0A để cấu hình TOP cho timer0,
duty cycle 100/255= 39%
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
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
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 COM0A1 COM0A0 COM0B1 COM0B0 WGM01 WGM00 FOC0A FOC0B WGM02 CS02 CS01 CS00
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
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
Timer0, mode hoạt động FPWM (TCCR0A = 1010 0011; TCCR0B = 0000 0010)
Timer0, mode hoạt động FPWM (TCCR0A = 1010 0011; TCCR0B = 0000 1010)
Timer0, mode hoạt động PWM hiệu chỉnh pha (TCCR0A = 1010 0001; TCCR0B = 0000
0010)
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 f=1Khz ➔ T=
1 ms
.ORG 0
SBI PORTB,4
RCALL DELAY_HIGH
CBI PORTB,4
RCALL DELAY_LOW
RJMP MAIN
DELAY_HIGH:
LDI R16,0X02
OUT TCCR0A,R16
LDI R16,0X02;
SBIS TIFR0,OCF0A
RJMP WAIT
SBI TIFR0,OCF0A
LDI R16,0X00
OUT TCCR0B,R16
RET
DELAY_LOW:
LDI R16,0X02
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
OUT TCCR0A,R16 LDI R16,0X03
OUT TCCR0B,R16
LDI R16,94
OUT OCR0A,R16
WAIT1:SBIS TIFR0,OCF0A
RJMP WAIT1
SBI TIFR0,OCF0A
LDI R16,0X00
OUT TCCR0B,R16
RET
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%.
Mã nguồn câu 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%.
DEC10:
DEC R18
CPI R18,0
BRLT INC10
INC R24
CPI R24,4
BRNE TT2
CLR R24
DEC R18
CPI R18,0
BRLT INC10
TT2:
RCALL INITTIMER0
RCALL DELAY_10MS
RJMP DEC10
LDI R22,10 // 1MC
LAB 2-1
DÙNG TIMER ĐỂ TẠO DELAY VÀ TẠO XUNG
L2: LDI R23,200 // 1MC
L1 : NOP // 1MC
DEC R23 // 1MC
BRNE L1 // 2/1 MC
INITTIMER0: // INPUT R18
// SET OC0B (PB4) PINS AS OUTPUTS
LDI R16, (1 << PB4);
OUT DDRB,R16
LDI R16, (1 << COM0B1)|(1 << COM0A1) | (1 << WGM00)|(1 << WGM01)
; SETUP CHO NGÕ RA LÀ OC0B VÀ CHỌN MODE FPWM
OUT TCCR0A,R16 // SETUP TCCR0A
LDI R16, (1 << CS00)|(1 << CS01)|(1 << WGM02)
;CHỌN CLK/64
OUT TCCR0B,R16 // SETUP TCCR0B
LDI R16,124
OUT OCR0A,R16 //OCRA = 124=125-1
OUT OCR0B,R18 //INPUT R18
RET