Tải bản đầy đủ (.pdf) (23 trang)

báo cáo thực tập vi xử lý 1 viết chương trình chớp tắt led đơn ở chân gpioa10

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (667.85 KB, 23 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>BỘ GIÁO DỤC VÀ ĐÀO TẠO</b>

<b>TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCMKHOA ĐÀO TẠO CHẤT LƯỢNG CAO</b>

<b>---BÁO CÁO THỰC TẬP VI XỬ LÝGVHD: Huỳnh Quang Duy </b>

<b>SVTH: Nguyễn Toàn Quân MSSV: 20146403</b>

1

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>Bài tập 1: Viết chương trình chớp tắt led đơn ở chân GPIOA10</b>

/* USER CODE BEGIN 2 */

RCC->AHB1ENR |= (1<<0); //Clock for GPIOB GPIOA->MODER |= (1<<(10*2)); // GPIO output A0 GPIOA->OTYPER &= ~(0<<10); //push - pull GPIOA->OSPEEDR |= (0<<20); //medium speed /* USER CODE END 2 */

/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }

/* USER CODE END 3 */ }

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>Bài 2: Viết chương trình đọc nút nhấn P1 và chớp tắt led đơn</b>

/* USER CODE BEGIN 2 */

RCC->AHB1ENR |= (1<<0); //Clock for GPIOB RCC->AHB1ENR |= (1<<3); //Clock for GPIOD GPIOA->MODER |= (1<<(10*2)); // GPIO output A0 GPIOA->OTYPER &= ~(0<<10); //push - pull GPIOA->OSPEEDR |= (0<<20); //medium speed

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

/* USER CODE BEGIN 3 */ }

/* USER CODE END 3 */ }

<b>Bài 3: Viết chương trình đọc nút nhấn và thực hiện theo yêu cầu sau - Nhấn (không giữ) nút nhấn lần 3n, 3 led dịch với chu kỳ 0.1s</b>

<b>-Nhấn (không giữ) nút nhấn lần 3n+1, 3 led dịch với chu kỳ 1s.-Nhấn (không giữ) nút nhấn 3n+2, tắt cả 3 led.</b>

/* USER CODE BEGIN 2 */

RCC->AHB1ENR |= (1<<1); //Clock for GPIOB RCC->AHB1ENR |= (1<<4); //Clock for GPIOE RCC->AHB1ENR |= (1<<3); //Clock for GPIOD

GPIOB->MODER |= (1<<0)|(1<<2)|(1<<4); // GPIO output B0 //GPIOB->OTYPER;

GPIOB->OTYPER &= ~(1<<0); //push - pull GPIOB->OSPEEDR |= (1<<0); //medium speed

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }

/* USER CODE END 3 */ }

<b>Bài 5: Viết chương trình theo yêu cầu sau, 16 led kết nối: </b>

-> 8 led dịch từ phải qua trái -> 8 led dịch từ trái qua phải -> 8 led chớp tắt xen kẽ -> 8 led sáng dần từ trái qua phải -> 8 led sáng dần từ phải qua trái -> 8 led sáng dần từ trong ra ngoài -> 8 led sáng dần từ ngoài vào trong -> 8 led cùng chớp tắt.

/* USER CODE BEGIN 2 */ RCC->AHB1ENR|= (1<<1); RCC->AHB1ENR|= (1<<4); RCC->AHB1ENR|= (1<<3); GPIOD->MODER = 0<<(11*2);

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

/* USER CODE BEGIN 3 */

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }

/* USER CODE END 3 */ }

<b>Bài tâp 7: Viết chương trình nhấn nút thực hiện yêu cầu sau- Nhấn nút P1 (không giữ) băng tải quay</b>

<b>- Nhấn nút P2 (không giữ) băng tải dừng</b>

#define RCC_AHB1ENR (*((unsigned int*)0x40023830)) #define GPIOB_MODER (*((unsigned int*)0x40020400)) #define GPIOB_IDR (*((unsigned int*)0x40020410)) #define GPIOB_ODR (*((unsigned int*)0x40020414))

int main(void)

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

// Enable GPIOB clock

RCC_AHB1ENR |= 0x02; // bit 1: GPIOB clock enable

// Configure GPIOB0 and GPIOB1 as input pins

GPIOB_MODER &= ~(0x03 << 2*0); // Clear mode for GPIOB0 GPIOB_MODER &= ~(0x03 << 2*1); // Clear mode for GPIOB1

// Start conveyor belt

GPIOB_ODR |= (1 << 5); // Set bit 5 to high }

// Check if button P2 is pressed if ((GPIOB_IDR & (1 << 1)) == 0) {

// Stop conveyor belt

GPIOB_ODR &= ~(1 << 5); // Set bit 5 to low }

}

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<b>Bài tập 8: Viết chương trình xử lý tiens hiệu trả về từ cảm biến S1, S2 theo yêu cầu sau-Nếu S1 bị ngừng tác động, chớp tắt Led đơn với chu kỳ 500ms</b>

<b>-Nếu S2 bị ngừng tác động, chớp tắt Led đơn với chu kỳ 1000ms</b>

/* USER CODE BEGIN 2 */

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

while (1) {

/* USER CODE END WHILE */ //chop tat led su dung cam bien

<b>Bài tâp 9: Viết chương trình xử lý tín hiệu trả về từ cảm biến S1, S2 theo yêu cầu sau</b>

- Nếu S1 bị ngừng tác động, Băng tải quay

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

- Nếu S2 bị ngừng tác động, Băng tải dừng

#define RCC_AHB1ENR (*((volatile unsigned long*)0x40023830)) // Ðia chi thanh ghi de bat tín hieu clock cho GPIO

#define GPIOA_MODER (*((volatile unsigned long*)0x40020000)) // Ð?a chi thanh ghi de cau hình chân GPIO

#define GPIOA_IDR (*((volatile unsigned long*)0x40020010)) // Ð?a chi thanh ghi de doc giá tri tu chân GPIO

#define GPIOA_ODR (*((volatile unsigned long*)0x40020014)) // Ð?a chi thanh ghi de ghi giá tri vào chân GPIO

#define S1_Pin (1 << 0) // Chân GPIO dùng de ket noi voi cam bien S1 #define S2_Pin (1 << 1) // Chân GPIO dùng de ket noi voi cam bien S2 #define Motor_Pin (1 << 2) // Chân GPIO dùng de dieu khien bang tai

// clock GPIO

RCC_AHB1ENR |= (1 << 0);

// C?u hình chân GPIOA0 và GPIOA1 là dau vào (input) de ket noi voi cam bien S1 và S2 GPIOA_MODER &= ~(3 << 0); // GPIOA0

GPIOA_MODER &= ~(3 << 2); // GPIOA1

// Cau hình chân GPIOA2 là dau ra (output) de dieu khien bang tai GPIOA_MODER &= ~(3 << 4); // GPIOA2

GPIOA_MODER |= (1 << 4); // Output mode

while(1) {

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

// Ðoc giá tri tu cam bien S1 và S2

int s1_value = (GPIOA_IDR & S1_Pin) ? 1 : 0; int s2_value = (GPIOA_IDR & S2_Pin) ? 1 : 0;

// Neu cam bien S2 bi ngung tác dong, bang tai dung GPIOA_ODR &= ~Motor_Pin;

} } }

</div>

×