Professional Documents
Culture Documents
Lưu ý: Trong các câu hỏi liên quan đến tần số dao động, sử dụng Fosc = 8MHz, 1MC = 125ns.
Câu hỏi 1) (2.5đ) (L.O.2, L.O.5, L.O.6):
a. (0.5đ) Viết chương trình con DELAY_2MS có chức b. (0.5đ) Sử dụng chương trình con ở câu a, viết
năng tạo trễ 2ms sử dụng Timer2, chế độ NOR. Giả sử chương trình con XUNG tạo 1 xung vuông ở chân
đã khởi động Timer2 (nhưng chưa cho Timer2 chạy) ở PB3 như hình vẽ. Giả sử đã khai báo PB3 là ngõ ra ở
chương trình chính. chương trình chính.
PB3
2ms 8ms
c. (1.5đ) Cho sơ đồ kết nối giữa ATmega324P và các LED như Hình 1 (xem ở trang phụ lục hình). Ban đầu làm tối
hết dãy LED.
Viết chương trình sử dụng 2 Timer: Timer2 (tạo trễ) và Timer1 (tạo ngắt) hoạt động như sau:
- Chương trình chính: cấu hình port; khởi động các Timer1 và Timer2 hoạt động ở chế độ thích hợp; khởi tạo con
trỏ bảng dữ liệu; cho phép ngắt Timer1 và liên tục tạo chuỗi xung vuông ở ngõ ra PB3 với chu kỳ xung như ở câu b.
Các chương trình con chỉ cần trình bày nhãn đầu vào và lệnh kết thúc.
- Chương trình phục vụ ngắt tràn Timer1 TIMER1_OVF_ISR: thực hiện điều khiển các LED sáng dần từ 2
biên vào trong cho đến khi sáng hết dãy LED, sau đó tối hết dãy LED rồi quay vòng lại. Ngắt tràn Timer1 tạo thời
gian 0.5s để chuyển trạng thái các LED (xem minh họa ở Bảng 1 trang phụ lục hình). Gợi ý: sử dụng bảng tham
chiếu định nghĩa các trạng thái LED.
a. (0.75đ) Cho chương trình con khởi động UART sau: Xác định các thông số hoạt động của bộ
INIT_UART: UART được khởi động ở câu a:
LDI R16,(1<<RXEN1) | (1<<TXEN1) Tốc độ baud (trình bày công thức tính và
STS UCSR1B,R16 kết quả):
LDI R16,(1<<UCSZ11)|(1<<UCSZ10)|(1<<UPM11)
STS UCSR1C,R16
LDI R16,0x00
STS UBRR1H,R16
LDI R16,51 Kích thước dữ liệu (5/6/7/8/9 bit):
STS UBRR1L,R16 Parity bit (chẵn/lẻ/không dùng):
RET Số stop bit (1/2 bit):
Giả sử việc thiết lập chế độ hoạt động của UART có sẵn như ở câu a. Trả lời các câu hỏi bên dưới về hoạt động của
các chương trình con RECEIVE và TRANS:
b. (0.75đ) Chương trình con RECEIVE:
RECEIVE: LDS R16,UCSR1B ;(8)
LDS R16,UCSR1A ;(1) SBR R16,(1<<TXEN1) ;(9)
SBRS R16,RXC1 ;(2) CBR R16,(1<<RXEN1) ;(10)
RJMP RECEIVE ;(3) STS UCSR1B,R16 ;(11)
LDS R18,UCSR1A ;(4) EXIT: RET
LDS R17,UDR1 ;(5)
SBRC R18,UPE1 ;(6)
RJMP EXIT ;(7)
Hãy cho biết chức năng của:
- Lệnh (1) đến (3):
- Lệnh (4) đến (7):
- Lệnh (8) đến (11):
d. (0.5đ) Từ CTC RECEIVE ở câu b, sửa lại thành chương trình ngắt thu USART1_RX_ISR sao cho không thay
đổi chức năng với số dòng lệnh tối thiểu. Giả sử việc cho phép ngắt và các vector ngắt đã được khai báo sẵn.
a. (0.5đ) Viết phương trình ngõ ra điện áp Vo và cho biết tầm giá trị của Vo tương ứng với tầm đo nhiệt độ ở trên.
b. (0.5đ) Viết công thức tính giá trị ADC c. (0.5đ) Viết chương trình con INIT_ADC thực hiện khởi động
ngõ ra. Từ đó, tính giá trị ngõ ra ADC khi ADC ở mode tự kích (Auto Trigger) sử dụng nguồn tạo tín hiệu
T=80oC. kích khởi là cờ báo kết quả so sánh Timer1 B OCF1B, ngõ vào đơn
(xem Hình 3b), hiệu chỉnh phải, Vref=2.56V (nguồn trong),
fCKADC=125KHz.
d. (1.0đ) Viết một chương trình hoàn chỉnh thực hiện công việc như mô tả ở trên, sử dụng chương trình con (CTC)
INIT_ADC (ở câu c) và hai CTC INIT_TIMER, COMPARE_16BIT cho sẵn như mô tả bên dưới.
CTC INIT_TIMER có chức năng khởi động và chạy Timer1 mode CTC4 so sánh kênh B để tạo thời gian đếm
50ms cho bật cờ OCF1B.
CTC COMPARE_16BIT thực hiện so sánh hai số 16 bit với số thứ nhất chứa trong R20:R19 (R20 chứa byte
cao), số thứ hai chứa trong R22:R21 (R22 chứa byte cao).
o Nếu R20:R19 < R22:R21 thì PC1 = 0 và PC2 = 1.
o Nếu R20:R19 ≥ R22:R21 thì PC1 = 1 và PC2 = 0.
Lưu ý: Ngoài việc sử dụng các CTC trên, SV cần phải cấu hình port, khởi tạo các thông số khác phù hợp trong
chương trình chính. Khi viết các CTC chỉ cần ghi nhãn đầu vào và lệnh kết thúc.
d. (1.0đ) Viết một chương trình hoàn chỉnh thực hiện các công việc sau:
- Khi nhấn SW1 tạo ngắt INT1 tác động cạnh xuống cho phép ngắt Timer1 COMPA và xóa R17=0.
- Khi nhấn SW0 tạo ngắt INT0 tác động cạnh xuống cấm ngắt Timer1 COMPA.
- Ngắt Timer1 COMPA thực hiện cứ sau 0.1s đếm lên R17 từ 0 đến 9 và lặp vòng lại từ 0.
- Chương trình chính khởi động và khai báo Timer1 mode thích hợp, cho phép các ngắt tương ứng và liên tục gọi
CTC DISP_LED như câu a.
Xem CTC và các ISR có sẵn (đã trình bày ở các câu a, b, c), chỉ cần trình bày nhãn đầu vào và lệnh kết thúc.
Lưu ý: SV ghi đầy đủ MSSV, họ và tên và nộp lại trang Phụ lục hình này kèm với đề thi.
Câu hỏi 1:
Hình 1 Bảng 1
8 x 330
PC0
Các trạng thái LED (LED sáng , LED tối ):
t1=0.5s t 2 =1.0s t 3 =1.5s t 4 =2.0s t 5 =2.5s t 6 =3.0s …
PB3 PC1
…
ATmega324P
PC2 …
PC3 …
PC4 …
…
PC5
…
PC6 …
PC7 …
Câu hỏi 2:
Hình 2
a
f b
e c
PD2 RXD1
PD3 TXD1
IC 7447: có chức năng giải mã từ BCD sang LED 7 đoạn anode chung. Ví dụ: ngõ vào DCBA = 0000,
ngõ ra QA…QG = 0000001 LED 7 đoạn hiển thị số 0.
Câu hỏi 3:
Hình 3a Hình 3b
LED1
ADC2/PA2
LED2
Câu hỏi 4:
Hình 4