BỘ GIÁO DỤC VÀ ĐÀO TẠOTRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCMKHOA ĐÀO TẠO CHẤT LƯỢNG CAO---BÁO CÁO THỰC TẬP VI XỬ LÝGVHD: Huỳnh Quang Duy SVTH: Nguyễn Toàn Quân MSSV: 201464031.
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCMKHOA ĐÀO TẠO CHẤT LƯỢNG CAO
-BÁO CÁO THỰC TẬP VI XỬ LÝGVHD: Huỳnh Quang Duy
SVTH: Nguyễn Toàn Quân MSSV: 20146403
1
Trang 2Bài tập 1: Viết chương trình chớp tắt led đơn ở chân GPIOA10
/* 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 */ }
Trang 3Bài 2: Viết chương trình đọc nút nhấn P1 và chớp tắt led đơn
/* 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
Trang 4/* USER CODE BEGIN 3 */ }
/* USER CODE END 3 */ }
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
-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.
/* 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
Trang 6/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
Trang 10/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }
/* USER CODE END 3 */ }
Bài 5: Viết chương trình theo yêu cầu sau, 16 led kết nối:
-> 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);
Trang 16/* USER CODE BEGIN 3 */
Trang 18/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }
/* USER CODE END 3 */ }
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
- Nhấn nút P2 (không giữ) băng tải dừng
#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)
Trang 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 }
}
Trang 20Bà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
-Nếu S2 bị ngừng tác động, chớp tắt Led đơn với chu kỳ 1000ms
/* USER CODE BEGIN 2 */
Trang 21while (1) {
/* USER CODE END WHILE */ //chop tat led su dung cam bien
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
- Nếu S1 bị ngừng tác động, Băng tải quay
Trang 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) {
Trang 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;
} } }