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.HCM
KHOA ĐÀ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
// 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;
}
}
}