Professional Documents
Culture Documents
Prelab LAB2 1
Prelab LAB2 1
MỤC TIÊU:
THAM KHẢO:
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
.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
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
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
out DDRB,r16
ldi r16, (1 << COM0B1)|(1 << COM0A1) | (1 << WGM00)|(1 << WGM01)
ldi r16, 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
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
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
https://doe.dee.hcmut.edu.vn/
BÁO CÁO
Nhóm:
Nhóm môn học: Môn thí nghiệm:
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:
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/