






Preview text:
BÁO CÁO THỰC TẬP VI XỬ LÝ
Sinh viên: Trần Thái Bảo MSSV: 20146054 Phòng học: E1- 306 Ngày báo cáo:27/01/2024
Nội dung: Sử dụng printf để debug dự án Tuần học: tuần 2
1. Khảo sát sơ đồ nguyên lý:
Sinh viên vẽ sơ đồ nguyên lý khối RS232 UART PA2/UART2_TX RXD STM32F205VCT6 ESP 8266 PA3/UART2_TX RXD
2. Bảng kết nối input - output STT Tên phần cứng Vị trí chân vi điều Trạng thái phần Mức logic tại chân khiển tương ứng cứng vi điều khiển RS232_TX PA2 Output (truyền) 1 RS232_RX PA3 Input (nhận) 1
3. Bảng cấu hình UART:
Trên vi điều khiển: Trên máy tính: • BAUD RATE = 9600 • BAUD RATE = 9600 • Word length = 8 bits • Word length = 8 bits • Parity = None • Parity = None
4. Tham khảo lệnh printf: T r a n g 1 / 7
5. Báo cáo dự án Lập trình Yêu cầu 1: -
Khởi tạo dự án và lập trình sử dụng printf in (liên tục, lặp lại) lên Terminal UART mã số sinh
viên của bạn. Trì hoãn giữa 2 lần truyền dữ liệu là 500ms.
Lưu đồ giải thuật từ lúc khởi tạo dự án Start Thêm thư viện chứa hàm printf While(1){ Print(“19146276”); Delay(“500”) } End
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chỉnh sửa từ code dự án) T r a n g 2 / 7 #include "stdio.h" struct __FILE { int handle; };
/* FILE is typedef’d in stdio.h. */ FILE __stdout; /* USER CODE END PV */ int fputc(int ch, FILE *f) {
/* Your implementation of fputc(). */
HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,100); return ch; } int main(void) { while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ printf(" 19146276 "); HAL_Delay(500); } } Yêu cầu 2: -
In lên Terminal từng dòng sau. Ghi kết quả hiển thị trên Terminal ngay bên dưới
1. printf ("Integers: %i %u \n", -3456, 3456); Interger: -3456 3456 Interger: -3456 3456 …
2. printf ("Characters: %c %c \n", 'z', 80); T r a n g 3 / 7
Characters: z P Character:z P Character:z P
3. printf ("Decimals: %d %ld\n", 1997, 32000L); Decimals: 1997 32000 Decimals: 1997 32000 Decimals: 1997 32000 …
4. printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
Some different radices: 100 64 144 0x64 0144
Some different radices: 100 64 144 0x64 0144 …
5. printf ("floats: %4.2f %+.0e %E \n", 3.14159, 3.14159, 3.14159);
float: 3.14 +3e+00 3.141590E+00
float: 3.14 +3e+00 3.141590E+00 …
6. printf ("Preceding with empty spaces: %10d \n", 1997);
Preceding with empty spaces: 1997
Preceding with empty spaces: 1997 …
7. printf ("Preceding with zeros: %010d \n", 1997);
Preceding with zeros: 0000001997
Preceding with zeros: 0000001997 …
8. printf ("Width: %*d \n", 15, 140); Width: 140 Width: 140 …
9. printf ("%s \n", " A string "); A string A string … 10. Đoạn chương trình int ch;
for( ch = 75 ; ch <= 100; ch++ ) {
printf("ASCII value = %d, Character = %c\n", ch , ch ); }
ASCII value = 75, Character = K Yêu cầu 3:
Tạo dự án và lập trình debug để in ra Terminal đồng hồ đếm giờ : phút : giây Ví dụ: T r a n g 4 / 7 08:59:56 08:59:57 08:59:58 08:59:59 09:00:00 09:00:01 ... Lưu đồ giải thuật Start Dữ liệu giờ ,phút , giây
In ra màn hình Giờ, phút, giây End
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chỉnh sửa từ code dự án) char ch[]="11:30:30"; printf("%s\n", ch ); T r a n g 5 / 7 Yêu cầu 4:
Tạo dự án và lập trình debug để điều khiển đèn D1 như sau: -
Mỗi lần nhấn nút B1 đèn D1 đảo trạng thái. (từ tắt sang sáng và ngược lại) -
Mỗi khi đèn sáng, sử dụng printf gởi số lần nhấn nút lên Terminal Lưu đồ giải thuật Start B1= False ; D1= False; PressCount= 0; - Hàm đọc trạng thái B1 -
Hàm mô phỏng bật/tắt D1 Vòn g lặp (while (1)) Đọc trạng thái nút nhấn B1 sai Kiểm tra nút nhấn B1 có được nhấn chưa ? Đúng Điều khiển đèn D1 dựa trên trạng thái nút nhấn B1 In số lần nhấn lên terminal Cập nhật trạng thái nút nhấn B1 cho vòng End lặp T r a n g 6 / 7
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chỉnh sửa từ code dự án) #include
// Giả sử sử dụng mô phỏng nút B1 và đèn D1
bool B1= false; // Trạng thái nút B1
bool D1 = false; // Trạng thái đèn D1
int pressCount = 0; // Số lần nhấn nút
// Hàm mô phỏng đọc trạng thái nút B1 bool readButtonState() { return ; }
// Hàm mô phỏng việc bật/tắt đèn D1
void controlLED(bool state) { } int main() { while (1) {
// Đọc trạng thái nút B1
bool currentButtonState = readButtonState();
// Kiểm tra xem nút B1 có được nhấn hay không
if (currentButtonState && !B1) { // Nút B1 được nhấn
pressCount++; // Tăng số lần nhấn
// Đảo trạng thái đèn D1 ledState = !D1; controlLED(D1);
// In số lần nhấn lên Terminal
printf("Press count: %d\n", pressCount); }
// Cập nhật trạng thái nút B1 cho vòng lặp tiếp theo B1= currentButtonState; } return 0; } T r a n g 7 / 7