You are on page 1of 52

LAB 4-1

LẬP TRÌNH SỬ DỤNG NGẮT

MỤC TIÊU:

➢ Hiểu và sử dụng được ngắt ngoài, ngắt timer, UART


➢ Quét LED 7 đoạn và LED ma trận sử dụng ngắt timer

THAM KHẢO:

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


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

BÀI 1

a) Lập trình tạo một xung tần số 1 Khz trên chân PC0 sử dụng ngắt timer 1 overflow. Khi
timer 1 tràn, trong chương trình phục vụ ngắt đảo chân PC0 và đặt lại giá trị cho thanh
ghi đếm

.INCLUDE <M324PADEF.INC>
.EQU CYCLE=4000;so luong xung toi khi bo dem tran
.ORG 0;VECTOR RESET
RJMP MAIN
.ORG 0X1E;VECTOR TIMER 1 TRAN
RJMP TIMER1_OVF

.ORG 0X40
MAIN:;
SBI DDRC,0;su dung pc0
CBI PORTC,0
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
CLR R16
STS TCCR1A,R16
LDI R16,HIGH(CYCLE);nap gia tri tran
STS TCNT1H,R16
LDI R16,LOW(CYCLE)
STS TCNT1L,R16
LDI R16,1;mode normal,clk/1
STS TCCR1B,R16
SEI;cho phep ngat toan cuc
LDI R16,(1<<TOIE1)

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

STS TIMSK1,R16;cho phep ngat tran timer1


HERE:
RJMP HERE

TIMER1_OVF:
LDI R16,HIGH(CYCLE);cai lai gia tri dem
STS TCNT1H,R16
LDI R16,LOW(CYCLE)
STS TCNT1L,R16
IN R16,PORTC;dao trang thai pc0
COM R16
ANDI R16,1
OUT PORTC,R16
RETI

b) Kết nối PC0 vào oscilloscope để đo dạng sóng


(Lưu ý: tần số xung clock cho CPU trên kit thí nghiệm là 8Mhz)

BÀI 2

a) Lặp lại bài 1 sử dụng timer 1 ở mode CTC, sử dụng ngắt COMPARE_MATCH, tạo ra 1
xung với tần số 100 Hz trên chân PC0.
b) Cấu hình timer để tạo ra ngắt COMPARE_MATCH sau mỗi 1ms, trong ngắt sử dụng 1
số đếm để đếm số lần xảy ra ngắt và điều khiển chân PC0 để tạo ra xung tần số 100 Hz.
HD: Mỗi lần xảy ra ngắt cộng số đếm lên 1, nếu số đếm bằng 5 thì đảo PC0 và reset số
đếm về 0.

.INCLUDE <M324PADEF.INC>
.EQU CYCLE=1250;so luong xung toi khi bo dem tran
.ORG 0X0;VECTOR RESET
RJMP MAIN
.ORG 0X1A;TIMER1 COMPARE MATCH A
RJMP TIMER1_COMPA
.ORG 0X40
MAIN:
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

SBI DDRC,0;su dung pc0


CBI PORTC,0
LDI R16,HIGH(CYCLE);nap gia tri so sanh
STS OCR1AH,R16
LDI R16,LOW(CYCLE)
STS OCR1AL,R16
CLR R16
STS TCCR1A,R16
LDI R16,(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10);mode ctc,clk/64
STS TCCR1B,R16
SEI;cho phep ngat toan cuc
LDI R16,(1<<OCIE1A)
STS TIMSK1,R16;cho phep ngat tran timer1
LDI R20,0;bien dem
HERE:
RJMP HERE

TIMER1_COMPA:
CPI R20,5;so sanh bien dem voi 5
BRNE EXIT;neu chua bang thoat
CLR R20
IN R16,PORTC;dao trang thai pc0
COM R16
ANDI R16,1
OUT PORTC,R16
EXIT:
INC R20
RETI

c) Biên dịch chương trình và quan sát oscilloscope để kiểm tra chương trình.

BÀI 3

a) Kết nối các tín hiệu cần thiết để điều khiển khối LED 7 đoạn.
b) Sử dụng ngắt COMPARE_MATCH của timer 1 như ở Bài 2 để xuất số 1-2-3-4 ra 4 LED
7 đoạn với tần số quét 50 Hz. Để đo tần số quét, đảo chân PC0 mỗi lần chuyển sang LED
kết tiếp và đo xung này trên oscilloscope.
(Tham khảo Chương 4, tài liệu hướng dẫn thí nghiệm)

.INCLUDE<M324PADEF.INC>
.org 0
.equ LED7SEGPORT=PORTC

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

.equ LED7SEGDR=DDRC//khai bao cong


.equ LED7LATCHPORT=PORTA
.equ LED7LATCHDR=DDRA
.EQU nLED0=0
.EQU nLED1=1
.EQU CYCLE=625;gia tri so sanh ngo A
.EQU LED7INDEX=0X200;dia chi luu gia tri hien ra led
.EQU NUMBER=0X1234;gia tri hien len led 7 doan dang hex

.ORG 0
RJMP MAIN
.ORG 0X1A
RJMP HIEN_RA

.ORG 0X40
MAIN:
LDI R16,0XFF;khai bao ngo ra
OUT LED7SEGDR,R16
LDI R16,0X11
OUT LED7LATCHDR,R16
RCALL LUU_GIA_TRI
RCALL TIMER_INIT
LDI R20,0;bien dem
HERE:
RJMP HERE

HIEN_LED_7_DOAN:
;R18 la gia tri hien len tren 7segment
;R19 la led minh muon xuat hien
CLR R16
OUT LED7SEGPORT,R16
LDI ZH,HIGH(DATA_SEG<<1);lay dia chi trong flash dang chua ma led 7 doan
LDI ZL,LOW(DATA_SEG<<1)
ADD ZL,R18;de lay ma led can hien len
ADC ZH,R16
LPM ;dua ma led vo r0
SBI LED7LATCHPORT,nLED0;cho ma led vo cac cong du lieu cua led
OUT LED7SEGPORT,R0
NOP
CBI LED7LATCHPORT,nLED0
CLR R16
OUT LED7SEGPORT,R16
LDI ZH,HIGH(LED_CONTROL<<1);ma dieu khien vi tri led sang
LDI ZL,LOW(LED_CONTROL<<1)
ADD ZL,R19; lay ma dieu khien led o vi tri can sang
ADC ZH,R16
LPM R1,Z;
SBI LED7LATCHPORT,nLED1
OUT LED7SEGPORT,R1
NOP

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

CBI LED7LATCHPORT,nLED1
CLR R16
OUT LED7SEGPORT,R16
RET

LUU_GIA_TRI:
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
LDI R16,LOW(NUMBER);0X200<-1,0X201<-2,0X202<-3,0X202<-4
MOV R17,R16
ANDI R16,0X0F
ANDI R17,0XF0
ST Y+,R16
ST Y+,R17
LDI R16,HIGH(NUMBER)
MOV R17,R16
ANDI R16,0X0F
ANDI R17,0XF0
ST Y+,R16
ST Y+,R17
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
RET

TIMER_INIT:;nap so luong xung can dem truoc khi


; su dung chuong trinh ctc cua timer1
LDI R16,HIGH(CYCLE);nap gia tri so sanh
STS OCR1AH,R16
LDI R16,LOW(CYCLE)
STS OCR1AL,R16
CLR R16
STS TCCR1A,R16
LDI R16,(1<<WGM12)|(1<<CS11)|(1<<CS10);mode ctc,clk/64
STS TCCR1B,R16
SEI;cho phep ngat toan cuc
LDI R16,(1<<OCIE1A)
STS TIMSK1,R16;cho phep ngat tran timer1
RET

HIEN_RA:;hien ky tu ra led 7 doan


MOV R19,R20;vi tri led dua tren bien dem
LD R18,Y+;gia tri can hien ra
RCALL HIEN_LED_7_DOAN
INC R20
CPI R20,4
BRNE THOAT
CLR R20
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

THOAT:
RETI

DATA_SEG:;ma led 7 doan


.DB 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0X8F,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E
LED_CONTROL:;ma dieu khien
.DB 0B00001110,0B00001101,0B00001011,0B00000111

BÀI 4

a) Kết nối thêm các tín hiệu cần thiết để điều khiển LCD ký tự
b) Kết nối tín hiệu UART ra khối RS232 và kết nối dây USB-Serial.
c) Viết chương trình nhận ký tự từ UART sử dụng ngắt, xuất ký tự đó ra LCD ở vị trí đầu
tiên bên trái, đồng thời đếm số ký tự nhận được và xuất ra 4 LED 7 đoạn. Khi nhận được
hơn 1000 ký tự thì reset về 0.
Hướng dẫn:
Sử dụng ngắt UART để nhận ký tự. Trong ngắt UART tăng biến đếm (16 bit), chuyển số
này thành số BCD và ghi vào 4 byte LED7segValue. Ví dụ số đếm đang là 500, ta ghi 0-
5-0-0 vào 4 byte này.
Phần quét LED giữ nguyên như ở bài 3.
Tham khảo chương 4, phần 4.4, tài liệu hướng dẫn thí nghiệm.

.INCLUDE<M324PADEF.INC>
.org 0
.equ LED7SEGPORT=PORTC
.equ LED7SEGDR=DDRC//khai bao cong
.equ LED7LATCHPORT=PORTB
.equ LED7LATCHDR=DDRB
.EQU nLED0=0
.EQU nLED1=1
.EQU CYCLE=625;gia tri so sanh ngo A
.EQU LED7INDEX=0X250;dia chi luu gia tri hien ra led
.EQU LCDPORT=PORTA;ngo ra lcd
.EQU LCDDR=DDRA;
.EQU RS=0
.EQU RW=1;chan dieu khien lcd
.EQU E=2

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

;---------
;r17 la lenh/data se duoc xuat ra lcd
;r18 la gia tri se hien len led
;r19 la vi tri led hien lien
;r20 la gia tri dem tuong ung vi tri va gia tri hien len led
;r21 la byte thap cua so lan nhan
;r22 la byte cao cua so lan nhan ky tu
;R23 LA nhu dia chi hien ky tu cua bcd
;r24 hang nghin
;r25 hang tram
;r26 hang chuc
;r27 hang don vi

.ORG 0
RJMP MAIN
.ORG 0X1A
RJMP SO_LUONG
.ORG 0X28
RJMP CHU_CAI
.ORG 0X40
MAIN:
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
LDI R16,0XFF;khai bao ngo ra
OUT LED7SEGDR,R16
LDI R16,3
OUT LED7LATCHDR,R16
LDI R16,0XFF
OUT LCDDR,R16
RCALL KHOI_DONG_LCD
RCALL TIMER_INIT
RCALL USART_INIT
SEI
LDI R20,0;R20 la bien dem vi tri led sang
LDI R21,0
LDI R22,0
LDI R23,0
LDI R24,0
LDI R25,0
LDI R26,0
LDI R27,0
HERE:
RJMP HERE

SO_LUONG:
MOV R19,R20;vi tri led dua tren bien dem
LD R18,Y+;gia tri can hien ra
RCALL HIEN_LED_7_DOAN

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

INC R20
CPI R20,4
BRNE THOAT
CLR R20
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
THOAT:
RETI

CHU_CAI:
LDS R17,UDR0
SBI LCDPORT,RS
RCALL NGO_RA_LCD
INC R23
CPI R23,0XF
BREQ XOA
QUAY_LAI:
INC R21
CLR R17
ADC R22,R17
CPI R22,HIGH(1000)
BRNE NOT_EQU
CPI R21,LOW(1000)
BRNE NOT_EQU
LDI R21,0
LDI R22,0
NOT_EQU:
RCALL LUU_GIA_TRI
RETI

XOA:
CBI LCDPORT,RS
LDI R17,01;xoa ky tu hien tren man hinh
RCALL NGO_RA_LCD
LDI R17,02;cho con tro va man hinh hien thi ve vi tri ban dau
RCALL NGO_RA_LCD
CLR R23
RJMP QUAY_LAI

TIMER_INIT:;nap so luong xung can dem truoc khi


; su dung chuong trinh ctc cua timer1
LDI R16,HIGH(CYCLE);nap gia tri so sanh
STS OCR1AH,R16
LDI R16,LOW(CYCLE)
STS OCR1AL,R16
CLR R16
STS TCCR1A,R16
LDI R16,(1<<WGM12)|(1<<CS11)|(1<<CS10);mode ctc,clk/64
STS TCCR1B,R16
LDI R16,(1<<OCIE1A)

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

STS TIMSK1,R16;cho phep ngat tran timer1


RET

USART_INIT:
CLR R16
STS UBRR0H,R16
LDI R16,51
STS UBRR0L,R16
LDI R16,(1<<RXEN0)|(1<<RXCIE0)
STS UCSR0B,R16
LDI R16,(1<<UCSZ01)|(1<<UCSZ00)
STS UCSR0C,R16
RET

OUT_LCD:;tuong tu prelab 1
OUT LCDPORT,R17
SBI LCDPORT,2
NOP
CBI LCDPORT,2
RET

NGO_RA_LCD:;tuong tu prelab 1
;du lieu tu r17 se duoc xuat ra man hinh
LDI R16,1
RCALL DELAY_US
IN R16,LCDPORT
ANDI R16,(1<<RS)
STS 0X200,R16
STS 0X201,R17
ANDI R17,0XF0
OR R17,R16
RCALL OUT_LCD
LDI R16,1
RCALL DELAY_US
LDS R16,0X200
LDS R17,0X201
SWAP R17
ANDI R17,0XF0
OR R17,R16
RCALL OUT_LCD
LDI R16,25
RCALL DELAY_US
RET

KHOI_DONG_LCD:;tuong tu prelab 1
LDI R16,250
RCALL DELAY_US
LDI R16,250
RCALL DELAY_US
CBI LCDPORT,RS

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

LDI R17,0X30
RCALL NGO_RA_LCD
LDI R17,0X30
RCALL NGO_RA_LCD
LDI R17,0X32
RCALL NGO_RA_LCD
LDI R17,0X28
RCALL NGO_RA_LCD
LDI R17,0X0E
RCALL NGO_RA_LCD
LDI R17,0X06
RCALL NGO_RA_LCD
LDI R17,0X01
RCALL NGO_RA_LCD
RET

HIEN_LED_7_DOAN:
;R18 la gia tri hien len tren 7segment
;R19 la led minh muon xuat hien
CLR R16
OUT LED7SEGPORT,R16
LDI ZH,HIGH(DATA_SEG<<1);lay dia chi trong flash dang chua ma led 7 doan
LDI ZL,LOW(DATA_SEG<<1)
ADD ZL,R18;de lay ma led can hien len
ADC ZH,R16
LPM ;dua ma led vo r0
SBI LED7LATCHPORT,nLED0;cho ma led vo cac cong du lieu cua led
OUT LED7SEGPORT,R0
NOP
CBI LED7LATCHPORT,nLED0
CLR R16
OUT LED7SEGPORT,R16
LDI ZH,HIGH(LED_CONTROL<<1);ma dieu khien vi tri led sang
LDI ZL,LOW(LED_CONTROL<<1)
ADD ZL,R19; lay ma dieu khien led o vi tri can sang
ADC ZH,R16
LPM
SBI LED7LATCHPORT,nLED1
OUT LED7SEGPORT,R0
NOP
CBI LED7LATCHPORT,nLED1
RET

LUU_GIA_TRI:
RCALL BCD
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
ST Y+,R27
ST Y+,R26
ST Y+,R25

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

ST Y+,R24
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
CLR R24
CLR R25
CLR R26
CLR R27
RET

BCD:
CPI R22,HIGH(1000)
BRLO HANG_TRAM
CPI R21,LOW(1000)
BRLO HANG_TRAM
SUBI R21,0XE8
SBCI R22,0X3
INC R24
RJMP BCD
HANG_TRAM:
CPI R22,HIGH(256)
BRSH XU_LY_HANG_TRAM
CPI R21,100
BRLO HANG_CHUC
XU_LY_HANG_TRAM:
SUBI R21,100
SBCI R22,0
INC R25
RJMP HANG_TRAM
HANG_CHUC:
CPI R21,10
BRLO HANG_DON_VI
SUBI R21,10
INC R26
RJMP HANG_CHUC
HANG_DON_VI:
MOV R27,R21
RET

DELAY_US:
;R16*100us
MOV R15,R16
LDI R16,200
L2:
MOV R14,R16
L1:
NOP
DEC R14
BRNE L1
DEC R15

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

BRNE L2
RET

DATA_SEG:;ma led 7 doan


.DB 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0X8F,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E
LED_CONTROL:;ma dieu khien
.DB 0B00001110,0B00001101,0B00001011,0B00000111

BÀI 5

a) Kết nối thêm các tín hiệu I2C vào module RTC. Đưa tín hiệu MFP của RTC vào 1 chân
ngắt ngoài. Thêm vào bài 4 các chức năng sau:
b) Khởi động RTC với thời gian hiện hành, xuất tín hiệu MFP tần số 1 Hz.
c) Sử dụng ngắt ngoài của AVR, cứ mỗi khi có ngắt thì đọc thời gian giờ:phút:giây từ RTC
và xuất ra dòng 2 của LCD
Lưu ý: Các chức năng ở bài 4 vẫn được giữ nguyên.

BÀI 6

a) Kết nối các tín hiệu cần thiết để điều khiển LED ma trận. (gỡ bỏ các dây nối đến LCD,
Led 7 đoạn, RTC, UART).
b) Sử dụng chương trình mẫu, chỉnh sửa nếu cần thiết để hiển thị chữ ‘A’ lên LED ma trận.
Quét LED ma trận sử dụng ngắt timer với tần số quét 25 Hz.
c) Chỉnh sửa chương trình để đạt tần số quét là 125Hz.
d) Viết chương trình để hiển thị Logo Trường ĐH Bách Khoa lên LED ma trận.

;ket noi cot va hang vao thanh ghi dich


.INCLUDE <M324PADEF.INC>
.ORG 0
.EQU MATRIXPORT=PORTB
.EQU MATRIXDR=DDRB
.EQU ROW=1
.EQU COLUMN=4
.EQU SHCP_ROW=0
.EQU STCP_ROW=2
.EQU SHCP_COLUMN=3

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

.EQU STCP_COLUMN=5
.EQU FREQUENCY=625

.ORG 0
RJMP MAIN
.ORG 0X1A
RJMP HIEN_RA

MAIN:
SER R16;ngo ra
OUT MATRIXDR,R16
SEI
RCALL TIMER_INIT
LDI R19,0
HERE:
RJMP HERE

HIEN_RA:
RCALL SANG_TUNG_COT
INC R19
CPI R19,8
BRNE THOAT
CLR R19
THOAT:
RETI

SHIFT_ROW:
;du lieu hang dua vao r17 duoc dua ra thanh ghi dich
LDI R16,8;so lan ghi dich
READ_ROW:
ROR R17;lay bit cao dua vao carry, dich qua trai
BRCC BIT_0_ROW;dien bit vao cong data
SBI MATRIXPORT,ROW
RJMP START_SHIFT_ROW
BIT_0_ROW:
CBI MATRIXPORT,ROW
START_SHIFT_ROW:
SBI MATRIXPORT,SHCP_ROW;ghi dich
NOP
CBI MATRIXPORT,SHCP_ROW
DEC R16
BRNE READ_ROW;neu chua het so lan ghi dich thi tiep tuc dua bit cao vao carry
SBI MATRIXPORT,STCP_ROW;luu ra thanh ghi ngo ra
NOP
CBI MATRIXPORT,STCP_ROW
RET

SHIFT_COLUMN:;tuong tu voi cot


;du lieu cot dua vao r18 duoc dua ra thanh ghi dich

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

LDI R16,8
READ_COLUMN:
ROR R18
BRCC BIT_0_COLUMN
SBI MATRIXPORT,COLUMN
RJMP START_SHIFT_COLUMN
BIT_0_COLUMN:
CBI MATRIXPORT,COLUMN
START_SHIFT_COLUMN:
SBI MATRIXPORT,SHCP_COLUMN
NOP
CBI MATRIXPORT,SHCP_COLUMN
DEC R16
BRNE READ_COLUMN
SBI MATRIXPORT,STCP_COLUMN
NOP
CBI MATRIXPORT,STCP_COLUMN
RET

SANG_TUNG_COT:
;R19 la vi tri cot sang
CLR R16
LDI ZH,HIGH(CHU_CAI<<1);lay dia chi dang luu du lieu dong
LDI ZL,LOW (CHU_CAI<<1)
ADD ZL,R19
ADC ZH,R16;ma can sang tuong voi vi tri cot
LPM R17,Z
RCALL SHIFT_ROW
LDI ZH,HIGH(LED_CONTROL<<1)
LDI ZL,LOW (LED_CONTROL<<1)
ADD ZL,R19
ADC ZH,R16;vi tri cot can sang
LPM R18,Z
RCALL SHIFT_COLUMN

TIMER_INIT:;khoi dong timer 1


LDI R16,HIGH(FREQUENCY)
STS OCR1AH,R16
LDI R16,LOW(FREQUENCY)
STS OCR1AL,R16
CLR R16
STS TCCR1A,R16
LDI R16,(1<<WGM12)|(1<<CS11)|(1<<CS10)
STS TCCR1B,R16
LDI R16,(1<<OCIE1A)
STS TIMSK1,R16
RET

CHU_CAI:

https://doe.dee.hcmut.edu.vn/
LAB 4-1
LẬP TRÌNH SỬ DỤNG NGẮT

.DB 0b11111100, 0b00010010, 0b00010001, 0b00010001, 0b00010010, 0b11111100,0b00000000,


0b00000000
LED_CONTROL:
.DB 1,2,4,8,16,32,64,128

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. Với chế độ Normal mode, mỗi khi vào ngắt OverFlow ta có phải khởi động lại
thanh ghi đếm hay không?
Trong vi xử lý ATmega324p, khi sử dụng chế độ Normal mode và xảy ra ngắt
OverFlow của thanh ghi đếm Timer/Counter, thanh ghi đếm sẽ tự động được
khởi động lại từ giá trị 0 mà không cần phải thực hiện khởi động lại thanh ghi
đếm bằng tay.
b. Giải thích các giá trị ghi vào các thanh ghi cấu hình timer và prescaler.

Trong vi xử lý ATmega324p, có một số thanh ghi cấu hình timer và prescaler để


thiết lập các chế độ hoạt động của bộ định thời (Timer/Counter), bao gồm:
- Thanh ghi TCCRnA (n là số của timer): Thanh ghi này giúp cấu hình chế độ hoạt
động của timer, bao gồm chế độ đếm theo cạnh (edge) của tín hiệu đầu vào, chế
độ PWM (Pulse Width Modulation), hoặc chế độ Capture Input để bắt lấy giá trị
của tín hiệu đầu vào.
- Thanh ghi TCCRnB: Thanh ghi này cũng giúp cấu hình chế độ hoạt động của
timer, bao gồm chế độ chọn nguồn Clock cho timer, chọn chế độ đếm (up-
counting hoặc down-counting), cấu hình chế độ ngắt (interrupt) và xác định giá trị
cho prescaler.
- Thanh ghi TCNTn (n là số của timer): Thanh ghi này chứa giá trị hiện tại của bộ
định thời, nó được đếm lên hoặc đếm xuống mỗi khi bộ định thời được kích hoạt.
- Thanh ghi OCRnA và OCRnB: Thanh ghi này được sử dụng trong chế độ PWM
để thiết lập các giá trị ngưỡng so sánh để tạo ra các xung PWM.

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

- Thanh ghi TIFRn và TIMSKn: Thanh ghi này dùng để xác định trạng thái của các
ngắt (interrupt) liên quan đến bộ định thời và cho phép hoặc vô hiệu hóa các ngắt
này.
- Thanh ghi TCCRnC: Thanh ghi này được sử dụng trong chế độ PWM để cấu hình
chế độ đầu ra PWM và các tín hiệu phụ trợ.
- Thanh ghi TCCRnD: Thanh ghi này được sử dụng để cấu hình chế độ đầu ra của
PWM và các chức năng khác liên quan đến đầu ra.
+ Prescaler là một bộ chia tần được sử dụng để giảm tần số đếm của bộ định
thời (Timer/Counter). Prescaler có thể được cấu hình thông qua thanh ghi
TCCRnB, với các giá trị khác nhau tương ứng với các tỷ lệ chia khác nhau (1,
8, 64, 256, hoặc 1024) để giảm tần số đếm của bộ định thời. Ví dụ, nếu
prescaler được thiết lập thành 64, thì tần số đếm của bộ định thời sẽ giảm
xuống 1/64 so với tần số đầu vào của bộ định thời.
2. Mã nguồn chương trình với chú thích
.INCLUDE <M324PADEF.INC>
.EQU CYCLE=4000;so luong xung toi khi bo dem tran
.ORG 0;VECTOR RESET
RJMP MAIN
.ORG 0X1E;VECTOR TIMER 1 TRAN
RJMP TIMER1_OVF

.ORG 0X40
MAIN:;
SBI DDRC,0;su dung pc0
CBI PORTC,0
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
CLR R16
STS TCCR1A,R16
LDI R16,HIGH(CYCLE);nap gia tri tran

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

STS TCNT1H,R16
LDI R16,LOW(CYCLE)
STS TCNT1L,R16
LDI R16,1;mode normal,clk/1
STS TCCR1B,R16
SEI;cho phep ngat toan cuc
LDI R16,(1<<TOIE1)
STS TIMSK1,R16;cho phep ngat tran timer1
HERE:
RJMP HERE

TIMER1_OVF:
LDI R16,HIGH(CYCLE);cai lai gia tri dem
STS TCNT1H,R16
LDI R16,LOW(CYCLE)
STS TCNT1L,R16
IN R16,PORTC;dao trang thai pc0
COM R16
ANDI R16,1
OUT PORTC,R16
RETI

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 2
1. Trả lời các câu hỏi
a. Với chế độ CTC mode, mỗi khi vào ngắt COMPARE_MATCH ta có phải
khởi động lại thanh ghi đếm hay không?
Trong chế độ này, thanh ghi đếm sẽ được đặt lại về giá trị 0 sau khi đếm
đủ số xung được thiết lập trong thanh ghi OCRnA (n là số của timer) và
bắt đầu đếm lại từ đầu. Việc đặt lại thanh ghi đếm này sẽ được thực hiện
tự động bởi phần cứng, và không cần phải thực hiện bằng tay.
b. Điểm tiện lợi của chế độ này so với cách cấu hình ở bài 1 là như thế nào?
Chế độ CTC mode cho phép đặt giới hạn cho thanh ghi đếm
Timer/Counter bằng cách sử dụng thanh ghi OCRnA (n là số của timer), giúp dễ
dàng cấu hình thời gian đếm cho ứng dụng. Trong khi đó, trong chế độ Normal
mode, thanh ghi đếm sẽ tiếp tục đếm lên hoặc đếm xuống mà không có giới hạn.

c. Giải thích các giá trị ghi vào các thanh ghi cấu hình timer và prescaler.
2. Mã nguồn và chú thích

.INCLUDE <M324PADEF.INC>
.EQU CYCLE=1250;so luong xung toi khi bo dem tran
.ORG 0X0;VECTOR RESET
RJMP MAIN
.ORG 0X1A;TIMER1 COMPARE MATCH A
RJMP TIMER1_COMPA
.ORG 0X40
MAIN:
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
SBI DDRC,0;su dung pc0

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

CBI PORTC,0
LDI R16,HIGH(CYCLE);nap gia tri so sanh
STS OCR1AH,R16
LDI R16,LOW(CYCLE)
STS OCR1AL,R16
CLR R16
STS TCCR1A,R16
LDI R16,(1<<WGM12)|(1<<CS11)|(1<<CS10);mode ctc,clk/64
STS TCCR1B,R16
SEI;cho phep ngat toan cuc
LDI R16,(1<<OCIE1A)
STS TIMSK1,R16;cho phep ngat tran timer1
LDI R20,0;bien dem
HERE:
RJMP HERE

TIMER1_COMPA:
CPI R20,5;so sanh bien dem voi 5
BRNE EXIT;neu chua bang thoat
CLR R20
IN R16,PORTC;dao trang thai pc0
COM R16
ANDI R16,1
OUT PORTC,R16
EXIT:
INC R20
RETI

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 3
1. Trả lời các câu hỏi

a. Để đạt được tần số quét 50Hz thì 1 LED sẽ sáng trong bao lâu?

1 Led sáng trong 20ms

b. Khi đó, chân PC0 (đảo mỗi khi chuyển LED) sẽ có tần số là bao nhiêu?

Tần số là 100Hz

c. Số lần xảy ra ngắt cần thiết để chuyển LED là bao nhiêu?

1 lần
2. Mã nguồn và chú thích
.INCLUDE<M324PADEF.INC>
.ORG 0
.EQU LED7SEGPORT=PORTD

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

.EQU LED7SEGDR=DDRD//KHAI BAO CONG


.EQU LED7LATCHPORT=PORTA
.EQU LED7LATCHDR=DDRA
.EQU NLED0=0
.EQU NLED1=1
.EQU CYCLE=625;GIA TRI SO SANH NGO A
.EQU LED7INDEX=0X200;DIA CHI LUU GIA TRI HIEN RA LED
.EQU NUMBER=0X1234;GIA TRI HIEN LEN LED 7 DOAN DANG HEX

.ORG 0
RJMP MAIN
.ORG 0X1A
RJMP HIEN_RA

.ORG 0X40
MAIN:
SBI DDRC,0
CBI PORTC,0
LDI R16,0XFF;khai bao ngo ra
OUT LED7SEGDR,R16
LDI R16,3
OUT LED7LATCHDR,R16
RCALL LUU_GIA_TRI
RCALL TIMER_INIT
LDI R20,0;bien dem
HERE:
RJMP HERE

HIEN_LED_7_DOAN:
;R18 la gia tri hien len tren 7segment
;R19 la led minh muon xuat hien
CLR R16
OUT LED7SEGPORT,R16
LDI ZH,HIGH(DATA_SEG<<1);lay dia chi trong flash dang chua ma
led 7 doan
LDI ZL,LOW(DATA_SEG<<1)
ADD ZL,R18;de lay ma led can hien len
ADC ZH,R16

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

LPM ;dua ma led vo r0


SBI LED7LATCHPORT,nLED0;cho ma led vo cac cong du lieu cua led
OUT LED7SEGPORT,R0
NOP
CBI LED7LATCHPORT,nLED0
CLR R16
OUT LED7SEGPORT,R16
LDI ZH,HIGH(LED_CONTROL<<1);ma dieu khien vi tri led sang
LDI ZL,LOW(LED_CONTROL<<1)
ADD ZL,R19; lay ma dieu khien led o vi tri can sang
ADC ZH,R16
LPM R1,Z;
SBI LED7LATCHPORT,nLED1
OUT LED7SEGPORT,R1
NOP
CBI LED7LATCHPORT,nLED1
CLR R16
OUT LED7SEGPORT,R16
RET

LUU_GIA_TRI:
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
LDI R16,4
ST Y+,R16
LDI R16,3
ST Y+,R16
LDI R16,2
ST Y+,R16
LDI R16,1
ST Y+,R16
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
RET

TIMER_INIT:;nap so luong xung can dem truoc khi


; su dung chuong trinh ctc cua timer1
LDI R16,HIGH(CYCLE);nap gia tri so sanh

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

STS OCR1AH,R16
LDI R16,LOW(CYCLE)
STS OCR1AL,R16
CLR R16
STS TCCR1A,R16
LDI R16,(1<<WGM12)|(1<<CS11)|(1<<CS10);mode ctc,clk/64
STS TCCR1B,R16
SEI;cho phep ngat toan cuc
LDI R16,(1<<OCIE1A)
STS TIMSK1,R16;cho phep ngat tran timer1
RET

HIEN_RA:;hien ky tu ra led 7 doan


IN R16,PORTC
ANDI R16,1
COM R16
OUT PORTC,R16
MOV R19,R20;vi tri led dua tren bien dem
LD R18,Y+;gia tri can hien ra
RCALL HIEN_LED_7_DOAN
INC R20
CPI R20,4
BRNE THOAT
CLR R20
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
THOAT:
RETI

DATA_SEG:;ma led 7 doan


.DB
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0X8F,0X80,0X90,0X88,0X83,0X
C6,0XA1,0X86,0X8E
LED_CONTROL:;ma dieu khien
.DB 0B00001110,0B00001101,0B00001011,0B00000111

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

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 4
1. Trả lời các câu hỏi

a. Mô tả các kết nối trên kit.

b. Mô tả cách cấu hình UART

Tốc độ baud 9600, 8 bit data, 1 stop bit. Khi đó giá trị nạp cho thanh ghi
UBRRL là 51, bit UCSZ00 và UCSZ01 trong thanh ghi UCSR0C được
đặt lên 1 và vì ta đang muốn nhận từ UART nên bit RXEN0 trong thanh
ghi UCSR0B được đặt lên 1.

c. Chuyển đổi số đếm thành số BCD để ghi vào bộ đệm hiển thị LED như
thế nào?

Dùng chương trình chia số 16 bit cho số 8 bit ( số 8 bit là 10) để lấy các
chữ số hàng đơn vị, chục, trăm, nghìn và lưu vào sram. Trong chương
trình ngắt timer1 ta lấy từng chữ số trong sram ra để hiển thị lên led 7
đoạn.
2. Mã nguồn và chú thích

.INCLUDE<M324PADEF.INC>
.ORG 0
.EQU LED7SEGPORT=PORTC
.EQU LED7SEGDR=DDRC//KHAI BAO CONG
.EQU LED7LATCHPORT=PORTB
.EQU LED7LATCHDR=DDRB
.EQU NLED0=0
.EQU NLED1=1
.EQU CYCLE=625;GIA TRI SO SANH NGO A
.EQU LED7INDEX=0X250;DIA CHI LUU GIA TRI HIEN RA LED
.EQU LCDPORT=PORTA;NGO RA LCD
.EQU LCDDR=DDRA;
.EQU RS=0

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

.EQU RW=1;CHAN DIEU KHIEN LCD


.EQU E=2
;---------
;R17 LA LENH/DATA SE DUOC XUAT RA LCD
;R18 LA GIA TRI SE HIEN LEN LED
;R19 LA VI TRI LED HIEN LIEN
;R20 LA GIA TRI DEM TUONG UNG VI TRI VA GIA TRI HIEN LEN LED
;R21 LA BYTE THAP CUA SO LAN NHAN
;R22 LA BYTE CAO CUA SO LAN NHAN KY TU
;R23 LA NHU DIA CHI HIEN KY TU CUA BCD
;R24 HANG NGHIN
;R25 HANG TRAM
;R26 HANG CHUC
;R27 HANG DON VI

.ORG 0
RJMP MAIN
.ORG 0X1A
RJMP SO_LUONG
.ORG 0X28
RJMP CHU_CAI
.ORG 0X40
MAIN:
LDI R16,HIGH(RAMEND)
OUT SPH,R16
LDI R16,LOW(RAMEND)
OUT SPL,R16
LDI R16,0XFF;KHAI BAO NGO RA
OUT LED7SEGDR,R16
LDI R16,3
OUT LED7LATCHDR,R16
LDI R16,0XFF
OUT LCDDR,R16
RCALL KHOI_DONG_LCD
RCALL TIMER_INIT
RCALL USART_INIT
SEI
LDI R20,0;R20 LA BIEN DEM VI TRI LED SANG
LDI R21,0

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

LDI R22,0
LDI R23,0
LDI R24,0
LDI R25,0
LDI R26,0
LDI R27,0
HERE:
RJMP HERE

SO_LUONG:
MOV R19,R20;VI TRI LED DUA TREN BIEN DEM
LD R18,Y+;GIA TRI CAN HIEN RA
RCALL HIEN_LED_7_DOAN
INC R20
CPI R20,4
BRNE THOAT
CLR R20
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
THOAT:
RETI

CHU_CAI:
LDS R17,UDR0
SBI LCDPORT,RS
RCALL NGO_RA_LCD
INC R23
CPI R23,0XF
BREQ XOA
QUAY_LAI:
INC R21
CLR R17
ADC R22,R17
CPI R22,HIGH(1000)
BRNE NOT_EQU
CPI R21,LOW(1000)
BRNE NOT_EQU
LDI R21,0
LDI R22,0

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

NOT_EQU:
RCALL LUU_GIA_TRI
RETI

XOA:
CBI LCDPORT,RS
LDI R17,01;XOA KY TU HIEN TREN MAN HINH
RCALL NGO_RA_LCD
LDI R17,02;CHO CON TRO VA MAN HINH HIEN THI VE VI TRI BAN DAU
RCALL NGO_RA_LCD
CLR R23
RJMP QUAY_LAI

TIMER_INIT:;NAP SO LUONG XUNG CAN DEM TRUOC KHI


; SU DUNG CHUONG TRINH CTC CUA TIMER1
LDI R16,HIGH(CYCLE);NAP GIA TRI SO SANH
STS OCR1AH,R16
LDI R16,LOW(CYCLE)
STS OCR1AL,R16
CLR R16
STS TCCR1A,R16
LDI R16,(1<<WGM12)|(1<<CS11)|(1<<CS10);MODE CTC,CLK/64
STS TCCR1B,R16
LDI R16,(1<<OCIE1A)
STS TIMSK1,R16;CHO PHEP NGAT TRAN TIMER1
RET

USART_INIT:
CLR R16
STS UBRR0H,R16
LDI R16,51
STS UBRR0L,R16
LDI R16,(1<<RXEN0)|(1<<RXCIE0)
STS UCSR0B,R16
LDI R16,(1<<UCSZ01)|(1<<UCSZ00)
STS UCSR0C,R16
RET

OUT_LCD:;TUONG TU PRELAB 1

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

OUT LCDPORT,R17
SBI LCDPORT,2
NOP
CBI LCDPORT,2
RET

NGO_RA_LCD:;TUONG TU PRELAB 1
;DU LIEU TU R17 SE DUOC XUAT RA MAN HINH
LDI R16,1
RCALL DELAY_US
IN R16,LCDPORT
ANDI R16,(1<<RS)
STS 0X200,R16
STS 0X201,R17
ANDI R17,0XF0
OR R17,R16
RCALL OUT_LCD
LDI R16,1
RCALL DELAY_US
LDS R16,0X200
LDS R17,0X201
SWAP R17
ANDI R17,0XF0
OR R17,R16
RCALL OUT_LCD
LDI R16,25
RCALL DELAY_US
RET

KHOI_DONG_LCD:;TUONG TU PRELAB 1
LDI R16,250
RCALL DELAY_US
LDI R16,250
RCALL DELAY_US
CBI LCDPORT,RS
LDI R17,0X30
RCALL NGO_RA_LCD
LDI R17,0X30
RCALL NGO_RA_LCD

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

LDI R17,0X32
RCALL NGO_RA_LCD
LDI R17,0X28
RCALL NGO_RA_LCD
LDI R17,0X0E
RCALL NGO_RA_LCD
LDI R17,0X06
RCALL NGO_RA_LCD
LDI R17,0X01
RCALL NGO_RA_LCD
RET

HIEN_LED_7_DOAN:
;R18 LA GIA TRI HIEN LEN TREN 7SEGMENT
;R19 LA LED MINH MUON XUAT HIEN
CLR R16
OUT LED7SEGPORT,R16
LDI ZH,HIGH(DATA_SEG<<1);LAY DIA CHI TRONG FLASH DANG CHUA MA
LED 7 DOAN
LDI ZL,LOW(DATA_SEG<<1)
ADD ZL,R18;DE LAY MA LED CAN HIEN LEN
ADC ZH,R16
LPM ;DUA MA LED VO R0
SBI LED7LATCHPORT,NLED0;CHO MA LED VO CAC CONG DU LIEU CUA LED
OUT LED7SEGPORT,R0
NOP
CBI LED7LATCHPORT,NLED0
CLR R16
OUT LED7SEGPORT,R16
LDI ZH,HIGH(LED_CONTROL<<1);MA DIEU KHIEN VI TRI LED SANG
LDI ZL,LOW(LED_CONTROL<<1)
ADD ZL,R19; LAY MA DIEU KHIEN LED O VI TRI CAN SANG
ADC ZH,R16
LPM
SBI LED7LATCHPORT,NLED1
OUT LED7SEGPORT,R0
NOP
CBI LED7LATCHPORT,NLED1
RET

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

LUU_GIA_TRI:
RCALL BCD
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
ST Y+,R27
ST Y+,R26
ST Y+,R25
ST Y+,R24
LDI YH,HIGH(LED7INDEX)
LDI YL,LOW(LED7INDEX)
CLR R24
CLR R25
CLR R26
CLR R27
RET

BCD:
CPI R22,HIGH(1000)
BRLO HANG_TRAM
CPI R21,LOW(1000)
BRLO HANG_TRAM
SUBI R21,0XE8
SBCI R22,0X3
INC R24
RJMP BCD
HANG_TRAM:
CPI R22,HIGH(256)
BRSH XU_LY_HANG_TRAM
CPI R21,100
BRLO HANG_CHUC
XU_LY_HANG_TRAM:
SUBI R21,100
SBCI R22,0
INC R25
RJMP HANG_TRAM
HANG_CHUC:
CPI R21,10
BRLO HANG_DON_VI

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

SUBI R21,10
INC R26
RJMP HANG_CHUC
HANG_DON_VI:
MOV R27,R21
RET

DELAY_US:
;R16*100US
MOV R15,R16
LDI R16,200
L2:
MOV R14,R16
L1:
NOP
DEC R14
BRNE L1
DEC R15
BRNE L2
RET

DATA_SEG:;MA LED 7 DOAN


.DB
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0X8F,0X80,0X90,0X88,0X83,0XC6,0XA1,
0X86,0X8E
LED_CONTROL:;MA DIEU KHIEN
.DB 0B00001110,0B00001101,0B00001011,0B00000111

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

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 5
1. Trả lời các câu hỏi
a. Mô tả kết nối trên kit
b. Để xảy ra ngắt 1 s 1 lần thì ngắt ngoài cấu hình như thế nào?
c. Hiện tượng gì sẽ xảy ra nếu ta cấu hình ngắt ngoài tích cực theo mức thấp?
2. Mã nguồn chương trình với chú thích

BÀI 6
1. Trả lời các câu hỏi
a. Mô tả kết nối trên kit
b. Để có tần số quét 25Hz thì một cột LED sáng trong bao lâu?
Để có tần số quét là 25Hz, một cột LED sẽ sáng trong 40ms
c. Sự khác nhau khi quét ở tần số 25Hz và 125Hz
Bảng led ở 25Hz sẽ sáng rõ là lâu hơn 125Hz
2. Mã nguồn chương trình với chú thích

.INCLUDE <M324PADEF.INC>
.ORG 0
.EQU MATRIXPORT=PORTB
.EQU MATRIXDR=DDRB
.EQU ROW=1
.EQU COLUMN=4
.EQU SHCP_ROW=0
.EQU STCP_ROW=2
.EQU SHCP_COLUMN=3
.EQU STCP_COLUMN=5
.EQU FREQUENCY=350

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
RJMP MAIN
.ORG 0X1A
RJMP HIEN_RA

MAIN:
SER R16;ngo ra
OUT MATRIXDR,R16
SEI
RCALL TIMER_INIT
LDI R19,0
HERE:
RJMP HERE

HIEN_RA:
RCALL SANG_TUNG_COT
INC R19
CPI R19,8
BRNE THOAT
CLR R19
THOAT:
RETI

SHIFT_ROW:
;du lieu hang dua vao r17 duoc dua ra thanh ghi dich
LDI R16,8;so lan ghi dich
READ_ROW:
ROR R17;lay bit cao dua vao carry, dich qua trai
BRCC BIT_0_ROW;dien bit vao cong data
SBI MATRIXPORT,ROW
RJMP START_SHIFT_ROW
BIT_0_ROW:
CBI MATRIXPORT,ROW
START_SHIFT_ROW:
SBI MATRIXPORT,SHCP_ROW;ghi dich
NOP

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

CBI MATRIXPORT,SHCP_ROW
DEC R16
BRNE READ_ROW;neu chua het so lan ghi dich thi tiep tuc dua
bit cao vao carry
SBI MATRIXPORT,STCP_ROW;luu ra thanh ghi ngo ra
NOP
CBI MATRIXPORT,STCP_ROW
RET

SHIFT_COLUMN:;tuong tu voi cot


;du lieu cot dua vao r18 duoc dua ra thanh ghi dich
LDI R16,8
READ_COLUMN:
ROR R18
BRCC BIT_0_COLUMN
SBI MATRIXPORT,COLUMN
RJMP START_SHIFT_COLUMN
BIT_0_COLUMN:
CBI MATRIXPORT,COLUMN
START_SHIFT_COLUMN:
SBI MATRIXPORT,SHCP_COLUMN
NOP
CBI MATRIXPORT,SHCP_COLUMN
DEC R16
BRNE READ_COLUMN
SBI MATRIXPORT,STCP_COLUMN
NOP
CBI MATRIXPORT,STCP_COLUMN
RET

SANG_TUNG_COT:
;R19 la vi tri cot sang
CLR R16
LDI ZH,HIGH(CHU_CAI<<1);lay dia chi dang luu du lieu dong
LDI ZL,LOW (CHU_CAI<<1)
ADD ZL,R19
ADC ZH,R16;ma can sang tuong voi vi tri cot
LPM R17,Z

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

RCALL SHIFT_ROW
LDI ZH,HIGH(LED_CONTROL<<1)
LDI ZL,LOW (LED_CONTROL<<1)
ADD ZL,R19
ADC ZH,R16;vi tri cot can sang
LPM R18,Z
RCALL SHIFT_COLUMN

TIMER_INIT:;khoi dong timer 1


LDI R16,HIGH(FREQUENCY)
STS OCR1AH,R16
LDI R16,LOW(FREQUENCY)
STS OCR1AL,R16
CLR R16
STS TCCR1A,R16
LDI R16,(1<<WGM12)|(1<<CS11)|(1<<CS10)
STS TCCR1B,R16
LDI R16,(1<<OCIE1A)
STS TIMSK1,R16
RET

CHU_CAI:
.DB
0b00000110,0b00001111,0b01111111,0b11111110,0b11111110,0b01111
111,0b00001111,0b00000110
LED_CONTROL:
.DB 1,2,4,8,16,32,64,128

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

https://doe.dee.hcmut.edu.vn/
LAB 4-2
GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

MỤC TIÊU:

➢ Hiểu và sử dụng được ngắt timer

➢ Hiểu cách điều khiển và đo tốc độ động cơ

THAM KHẢO:

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

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

BÀI 1

Yêu cầu:
a. Viết chương trình điều khiển tốc độ động cơ DC dùng PWM với tần số 1 Khz, sử dụng
timer 0. Điều khiển tốc độ tăng/giảm sử dụng 2 nút nhấn, mỗi lần nhấn nút tăng/giảm
duty cycle 5%. Cho phép động cơ chạy/dừng và điều khiển động cơ quay thuận/ngược
bằng 2 switch trên dip switch.
• Kết nối động cơ vào kit thí nghiệm
• Kết nối tín hiệu từ 2 switch trên dipswitch vào 2 chân port của AVR
• Kết nối tín hiệu từ 2 nút nhấn vào 2 chân port của AVR
• Kết nối tín hiệu từ chân OC0B ra 1 kênh đo của khối test point
• Kết nối tín hiệu từ 2 chân port điều khiển chiều quay thuận/ngược ra led đơn để
kiểm tra trạng thái.
b. Biên dịch, thực thi và kiểm tra hoạt động của chương trình bằng cách đo dạng sóng trên
oscilloscope và quan sát trạng thái các LED khi thay đổi dip switch và khi nhấn các nút
nhấn tăng/giảm tốc độ.

.INCLUDE<M324PADEF.INC>

https://doe.dee.hcmut.edu.vn/
LAB 4-2
GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

.EQU CONTROL_1=1
.EQU CONTROL_2=2
.EQU ENABLE=4
.EQU MOTOR=PORTB
.EQU MOTORDR=DDRB
.EQU DIPSWITCH=PINA
.EQU DIPSWITCHDR=DDRA
.EQU DIPSWITCHPORT=PORTA
.EQU SWITCH=PIND
.EQU SWITCHDR=DDRD
.EQU SWITCHPORT=PORTD
.EQU OFF_ON=0
.EQU DIRECTION=1
.ORG 0
;R17 chinh toc do
;r18 ma nut nhan
LDI R16,(1<<CONTROL_1)|(1<<CONTROL_2)|(1<<ENABLE);khoi tao ngo ra
OUT MOTORDR,R16;
LDI R16,0B11111100
OUT DIPSWITCHDR,R16
OUT SWITCHDR,R16
COM R16
OUT DIPSWITCHPORT,R16
OUT SWITCHPORT,R16
LDI R16,124;khoi tao gia tri top
OUT OCR0A,R16
RCALL TIMER_INIT;khoi dong timer
LDI R17,0;bat dau toc do =0
RCALL MOTOR_SPEED
MAIN:
RCALL DIEU_KHIEN_CHIEU;xet chieu cua dong co
RCALL NUT_NHAN;lay ma nut nhan
CPI R18,0B10;neu nut 0 duoc an, tang toc
BREQ TANG_TOC
CPI R18,0B01;nut 1 duoc an,giam toc do
BREQ GIAM_TOC
RJMP XUONG
TANG_TOC:
CPI R17,124

https://doe.dee.hcmut.edu.vn/
LAB 4-2
GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

BREQ XUONG
LDI R20,6
ADD R17,R20;dieu chinh toc do
RCALL MOTOR_SPEED
RJMP XUONG
GIAM_TOC:
CPI R17,0
BREQ XUONG
SUBI R17,6;dieu chinh toc do
RCALL MOTOR_SPEED
XUONG:
RJMP MAIN

TIMER_INIT:;su dung mode FPWM, dung cong OC0B che do ko dao,clk/64


LDI R16,(1<<COM0B1)|(1<<WGM01)|(1<<WGM00)
OUT TCCR0A,R16
LDI R16,(1<<CS01)|(1<<CS00)|(1<<WGM02)
OUT TCCR0B,R16
RET

BREAK_MOTOR:;thang
LDI R17,124
RCALL MOTOR_SPEED
SBI MOTOR,CONTROL_1
SBI MOTOR,CONTROL_2
RET

MOTOR_FORWARD:;chieu thuan
SBI MOTOR,CONTROL_1
CBI MOTOR,CONTROL_2
RET

MOTOR_BACKWARD:;chieu nguoc
SBI MOTOR,CONTROL_2
CBI MOTOR,CONTROL_1
RET

MOTOR_SPEED:
;truoc khi chinh toc do, phai khoi dong timer0

https://doe.dee.hcmut.edu.vn/
LAB 4-2
GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

;gia tri r17 se tac dong den toc do dong co


OUT OCR0B,R17
RET

DIEU_KHIEN_CHIEU:
;cong tac 0 dong mo dong co
;cong tac 1 chieu dong co
IN R16,DIPSWITCH
COM R16
ANDI R16,3
CPI R16,0B01
BREQ CHIEU_THUAN
CPI R16,0B11
BREQ CHIEU_NGUOC
SBRS R16,0
RJMP TAT_DONG_CO
CHIEU_THUAN:
RCALL MOTOR_FORWARD
RJMP EXIT
CHIEU_NGUOC:
RCALL MOTOR_BACKWARD
RJMP EXIT
TAT_DONG_CO:
RCALL BREAK_MOTOR
EXIT:
RET

NUT_NHAN:;chong rung nut


LDI R16,50
BACK_1:
RCALL NUT
BRCC NUT_NHAN
DEC R16
BRNE BACK_1
STS 0X150,R18
WAIT2:
LDI R16,50
BACK_2:
RCALL NUT

https://doe.dee.hcmut.edu.vn/
LAB 4-2
GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

BRCS WAIT2
DEC R16
BRNE BACK_2
LDS R18,0X150
RET

NUT:;lay ma nut
IN R18,SWITCH
ANDI R18,3
CPI R18,3
BRNE LAY_MA
CLC
RJMP THOAT
LAY_MA:
SEC
THOAT:
RET

c. Kết nối tín hiệu PWM vào MOTOR_ENABLE, tín hiệu điều khiển chiều quay vào
MOTOR_CTRL1, MOTOR_CTRL2 trên J76 của khối DC_MOTOR.

d. Kiểm tra hoạt động của hệ thống.


e. Đo dạng sóng từ hai tín hiệu A-B của encoder và so sánh trong hai trường hợp động cơ
quay thuận hay ngược.

BÀI 2

Yêu cầu:
Thêm vào bài 1 ở trên chức năng đo tốc độ động cơ và hiển thị tốc độ, chiều quay lên LCD.

https://doe.dee.hcmut.edu.vn/
LAB 4-2
GIAO TIẾP I/O VÀ CÁC LỆNH TÍNH TOÁN

Tín hiệu từ 1 kênh của encoder đưa vào ngõ vào clock cho timer 2, sử dụng timer 2 ở chế độ
dùng clock ngoài. Khi timer 2 tràn sẽ sinh ra một ngắt, khi đó ta tăng 1 số đếm lên để đếm số lần
tràn của timer.
Hai kênh từ encoder cũng được đưa vào 2 chân port để xác định chiều quay thuận/ngược.
Thời gian 1 s tạo ra sử dụng ngắt timer 1. Khi ngắt xảy ra, đếm số lượng xung từ encoder trong
vòng 1 s và tính ra tốc độ động cơ, đưa lên LCD. Reset các số đếm để bắt đầu lại quá trình đo

BÀI 1
3. Trả lời các câu hỏi
c. Mô tả cách kết nối trên kit

d. Chụp ảnh dạng xung của 2 kênh encoder trong trường hợp quay thuận và quay
nghịch.
4. Mã nguồn chương trình với chú thích
.INCLUDE<M324PADEF.INC>
.EQU CONTROL_1=1
.EQU CONTROL_2=2
.EQU ENABLE=4
.EQU MOTOR=PORTB
.EQU MOTORDR=DDRB
.EQU DIPSWITCH=PINA
.EQU DIPSWITCHDR=DDRA
.EQU DIPSWITCHPORT=PORTA
.EQU SWITCH=PIND
.EQU SWITCHDR=DDRD
.EQU SWITCHPORT=PORTD
.EQU OFF_ON=0
.EQU DIRECTION=1
.ORG 0
;R17 chinh toc do
;r18 ma nut nhan

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

LDI R16,(1<<CONTROL_1)|(1<<CONTROL_2)|(1<<ENABLE);khoi tao ngo


ra
OUT MOTORDR,R16;
LDI R16,0B11111100
OUT DIPSWITCHDR,R16
OUT SWITCHDR,R16
COM R16
OUT DIPSWITCHPORT,R16
OUT SWITCHPORT,R16
LDI R16,124;khoi tao gia tri top
OUT OCR0A,R16
RCALL TIMER_INIT;khoi dong timer
LDI R17,0;bat dau toc do =0
RCALL MOTOR_SPEED
MAIN:
RCALL DIEU_KHIEN_CHIEU;xet chieu cua dong co
RCALL NUT_NHAN;lay ma nut nhan
CPI R18,0B10;neu nut 0 duoc an, tang toc
BREQ TANG_TOC
CPI R18,0B01;nut 1 duoc an,giam toc do
BREQ GIAM_TOC
RJMP XUONG
TANG_TOC:
CPI R17,124
BREQ XUONG
LDI R20,6
ADD R17,R20;dieu chinh toc do
RCALL MOTOR_SPEED
RJMP XUONG
GIAM_TOC:
CPI R17,0
BREQ XUONG
SUBI R17,6;dieu chinh toc do
RCALL MOTOR_SPEED
XUONG:
RJMP MAIN

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

TIMER_INIT:;su dung mode FPWM, dung cong OC0B che do ko


dao,clk/64
LDI R16,(1<<COM0B1)|(1<<WGM01)|(1<<WGM00)
OUT TCCR0A,R16
LDI R16,(1<<CS01)|(1<<CS00)|(1<<WGM02)
OUT TCCR0B,R16
RET

BREAK_MOTOR:;thang
LDI R17,124
RCALL MOTOR_SPEED
SBI MOTOR,CONTROL_1
SBI MOTOR,CONTROL_2
RET

MOTOR_FORWARD:;chieu thuan
SBI MOTOR,CONTROL_1
CBI MOTOR,CONTROL_2
RET

MOTOR_BACKWARD:;chieu nguoc
SBI MOTOR,CONTROL_2
CBI MOTOR,CONTROL_1
RET

MOTOR_SPEED:
;truoc khi chinh toc do, phai khoi dong timer0
;gia tri r17 se tac dong den toc do dong co
OUT OCR0B,R17
RET

DIEU_KHIEN_CHIEU:
;cong tac 0 dong mo dong co
;cong tac 1 chieu dong co
IN R16,DIPSWITCH
COM R16
ANDI R16,3

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

CPI R16,0B01
BREQ CHIEU_THUAN
CPI R16,0B11
BREQ CHIEU_NGUOC
SBRS R16,0
RJMP TAT_DONG_CO
CHIEU_THUAN:
RCALL MOTOR_FORWARD
RJMP EXIT
CHIEU_NGUOC:
RCALL MOTOR_BACKWARD
RJMP EXIT
TAT_DONG_CO:
RCALL BREAK_MOTOR
EXIT:
RET

NUT_NHAN:;chong rung nut


LDI R16,50
BACK_1:
RCALL NUT
BRCC NUT_NHAN
DEC R16
BRNE BACK_1
STS 0X150,R18
WAIT2:
LDI R16,50
BACK_2:
RCALL NUT
BRCS WAIT2
DEC R16
BRNE BACK_2
LDS R18,0X150
RET

NUT:;lay ma nut

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

IN R18,SWITCH
ANDI R18,3
CPI R18,3
BRNE LAY_MA
CLC
RJMP THOAT
LAY_MA:
SEC
THOAT:
RET

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 2
3. Trả lời các câu hỏi
a. Mô tả kết nối trên

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

b. Với động cơ trong thí nghiệm, công thức tính tốc độ như thế nào?
Để đo tốc độ động cơ, có hai cách thông dụng: 1. Đếm số xung từ encoder
trong vòng 1 s, từ đó tính ra số vòng quay trong 1s. 2. Đếm thời gian cần
để quay đủ 1 vòng, từ đó tính ra tốc độ. Với phương pháp 1, tín hiệu từ
encoder được đưa vào ngõ vào của 1 timer. Một timer khác được sử dụng
để đếm thời gian 1 s. Sau khi hết 1 s này thì ta đọc số đếm của timer đếm
xung. Giả sử ta đếm được 330 xung thì có nghĩa là tốc độ trong giây vừa
rồi là 1v/s hay 60rpm (revolutions per minute). Với phương pháp 2, timer
đếm xung được cấu hình sao cho khi số đếm đạt 330 xung thì báo ngắt.
Timer còn lại dùng để đếm thời gian từ khi số xung bằng 0 cho đến khi
bằng 330. Từ thời gian này ta có thể tính ra tốc độ motor.
c. Timer 1 có thể được sử dụng để tạo ngắt sau mỗi 1 s hay không?
d. Cấu hình timer 1 như thế nào?
e. Thanh ghi đếm của timer 2 là thanh ghi bao nhiêu bit?S
f. Để sử dụng timer 2 đếm số xung trong vòng 1s, có xảy ra trường hợp tràn
timer 2 không?
HD: từ tốc độ tối đa của động cơ, tỉ số truyền, số xung/vòng ta tính ra số
xung tối đa trong 1s.
g. Nếu có khả năng tràn timer 2, ta phải làm gì để đảm bảo tính đúng số xung
encoder?S
4. Mã nguồn và 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:

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

You might also like