1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo thực hành vi xử lý vi Điều khiển lab 2 timer interrupt and led scanning

24 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo cáo thực hành vi xử lý - vi điều khiển Lab 2: Timer Interrupt and LED Scanning
Tác giả Nguyễn Nhật Khải
Người hướng dẫn Lê Trọng Nhân, Huỳnh Phúc Nghị
Trường học Trường Đại học Bách khoa, Đại học Quốc gia Thành phố Hồ Chí Minh
Chuyên ngành Khoa học và Kỹ thuật Máy tính
Thể loại Báo cáo thực hành
Năm xuất bản 2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 24
Dung lượng 579,04 KB

Nội dung

Chương trình 1.7: Source file software_timer.cGhi chú: Đối với các bài tập sau, việc bổ sung software timer được thực hiện tượng tự, do đó sẽ không trình bày lại source code... Chương tr

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC VÀ KỸ THUẬT MÁY TÍNH

BÁO CÁO THỰC HÀNH

VI XỬ LÝ - VI ĐIỀU KHIỂN LAB 2: TIMER INTERRUPT AND LED SCANNING

Trang 2

Mục lục

1.1 Thiết lập Timer Interrupt 4

1.1.1 Sơ đồ nguyên lý 4

1.1.2 Source code 4

1.2 Bài 1 6

1.2.1 Sơ đồ nguyên lý 6

1.2.2 Source code 6

1.2.3 Trả lời câu hỏi 9

1.3 Bài 2 10

1.3.1 Sơ đồ nguyên lý 10

1.3.2 Source code 10

1.3.3 Trả lời câu hỏi 12

1.4 Bài 3 12

1.4.1 Hiện thực hàm update7SEG(int index) 12

1.4.2 Source code 13

1.5 Bài 4 13

1.5.1 Source code 13

1.6 Bài 5 14

1.6.1 Hiện thực hàm updateClockBuffer() 14

1.6.2 Source code 14

Trang 3

1.7 Bài 6 15

1.7.1 Trả lời câu hỏi 16

1.7.2 Trả lời câu hỏi 16

1.7.3 Trả lời câu hỏi 16

1.8 Bài 7+8 17

1.9 Bài 9 17

1.9.1 Sơ đồ nguyên lý 17

1.9.2 Hiện thực hàm updateLEDMatrix(int index) 18

1.9.3 Hiển thị ký tự 18

1.10 Bài 10 21

1.10.1 Source code 21

Trang 4

Chương 1

Timer Interrupt and LED Scanning

Link GitHub

Link Overleaf

Trang 5

1.1 Thiết lập Timer Interrupt

Sử dụng header file software_timer.h và source file software_timer.c để hiện thực software timer.

1 # i f n d e f I N C _ S O F T W A R E _ T I M E R _ H _

2 # d e f i n e I N C _ S O F T W A R E _ T I M E R _ H _

3

4 e x t e r n int t i m e r 0 _ f l a g ;

Trang 6

Chương trình 1.2: Source file software_timer.c

Khởi tạo chương trình đơn giản, với một LED nối vào chân PA2 và thiết lập các thông số phù hợp cho timer interrupt.

Trang 7

Hình 1.2: Sơ đồ nguyên lý

Sử dụng header file led_display.h và source file led_display.c để hiện thực các hàm liên quan đến điều khiển LED.

Trang 8

6 v o i d d i s p l a y 7 S E G (int num ) {

7 if ( num >= 0 && num <= 9) {

8 GPIOA - > ODR = ( GPIOA - > ODR | ( s e t 7 S E G [ num ] < < 8) ) & ~( r e s e t 7 S E G [ num ]

Chương trình 1.5: Source file led_display.c

Hiện thực bổ sung timer1 dùng để điều khiển quá trình quét LED.

Trang 9

Chương trình 1.7: Source file software_timer.c

Ghi chú: Đối với các bài tập sau, việc bổ sung software timer được thực hiện tượng

tự, do đó sẽ không trình bày lại source code.

Trang 10

Chương trình 1.8: Các thay đổi trong source file main.c

Ghi chú: Xuyên suốt bài thực hành, đoạn chương trình trình bày source file main.c chỉ trình bày những phần USER CODE có sự thay đổi, những phần không thay đổi sẽ không được trình bày.

Xác định tần số của quá trình quét LED.

Chu kỳ của quá trình quét LED: T = 0.5 + 0.5 = 1(s).

Tần số của quá trình quét LED: f = 1/T = 1/1 = 1(Hz).

Trang 13

Chương trình 1.10: Các thay đổi trong source file main.c

Xác định tần số của quá trình quét LED.

Chu kỳ của quá trình quét LED: T = 0.5 + 0.5 + 0.5 + 0.5 = 2(s).

Tần số của quá trình quét LED: f = 1/T = 1/2 = 0.5(Hz).

Trang 15

Xác định giá trị DURATION_1.

Chu kỳ của quá trình quét LED: T = 1/f = 1/1 = 1(s).

Thời gian sáng của mỗi LED: t = T /LED_NUMBER = 1/4 = 0.25(s) = 250(ms).

Trang 17

4 H A L _ G P I O _ T o g g l e P i n ( L E D _ R E D _ G P I O _ P o r t , L E D _ R E D _ P i n ) ;

7 }

Chương trình 1.16: Đoạn chương trình mẫu sử dụng để nhấp nháy đèn LED

Nếu dòng 1 của đoạn code mẫu trên bị thiếu, điều gì sẽ xảy ra và tại sao? Nếu dòng 1 của đoạn code mẫu trên bị thiếu, biến timer_flag0 sẽ không được set Khi đó, điều kiện trong vòng lặp while (1) sẽ không bao giờ đúng, LED_RED sẽ không được chuyển đổi trạng thái.

Nếu dòng 1 của đoạn code mẫu trên đổi thành setTimer0(1), điều gì sẽ xảy ra và tại sao?

Nếu dòng 1 của đoạn code mẫu trên đổi thành setTimer0(1), biến timer_flag0

sẽ được set sau 1ms Khi đó, điều kiện trong vòng lặp while (1) sẽ trở thành đúng, LED_RED sẽ chuyển đổi trạng thái rất nhanh ở lần đầu tiên Sau đó, hàm set- Timer0(2000) sẽ lần lượt được gọi, LED_RED sẽ chuyển đổi trạng thái sau một khoảng thời gian nhất định (2000ms).

Nếu dòng 1 của đoạn code mẫu trên đổi thành setTimer0(10), những thay đổi gì sẽ xảy ra so với 2 câu hỏi trước và tại sao?

Nếu dòng 1 của đoạn code mẫu trên đổi thành setTimer0(10), biến timer_flag0

sẽ được set sau 10ms Khi đó, điều kiện trong vòng lặp while (1) sẽ trở thành đúng, LED_RED sẽ chuyển đổi trạng thái nhanh hơn bình thường ở lần đầu tiên Sau đó, hàm setTimer0(2000) sẽ lần lượt được gọi, LED_RED sẽ chuyển đổi trạng thái sau một khoảng thời gian nhất định (2000ms).

So với trường hợp 1, LED_RED có thể thay đổi trạng thái bình thường So với trường hợp 2, LED_RED ở trường hợp 3 chuyển đổi trạng thái lần đầu tiên chậm hơn (10ms so với 1ms).

Trang 18

Các chân từ PB8 đến PB15 theo thứ tự kết nối với các tín hiệu từ ROW_0 đến ROW_7.

Hình 1.4: Sơ đồ nguyên lý

Trang 19

1.9.2 Hiện thực hàm updateLEDMatrix(int index)

1 u i n t 1 6 _ t s e t M a t r i x E n a b l e [9] = {0 x01 , 0 x02 , 0 x04 , 0 x08 , 0 x10 , 0 x20 , 0 x40 ,

0 x80 , 0 x00 };

2 u i n t 1 6 _ t r e s e t M a t r i x E n a b l e [9] = {0 xFE , 0 xFD , 0 xFB , 0 xF7 , 0 xEF , 0 xDF , 0xBF , 0 x7F , 0 xFF };

Trang 21

85 GPIOB - > ODR = ( GPIOB - > ODR | ( s e t M a t r i x R o w [ c - 'A' + 1 0 ] [ i n d e x ] < < 8) )

Chương trình 1.18: Hàm displayLEDMatrix(char c, int index)

Hiện thực bổ sung timer4 dùng để điều khiển quá trình quét LED ma trận Giá trị của DURATION_4 được đặt tùy ý.

Cập nhật sourcefile main.c thực hiện yêu cầu của đề bài.

Ngày đăng: 30/10/2024, 09:28

w