Sử dụng Printf để debug dự án | Báo cáo thực tập Vi xử Lí | Đại học Bách Khoa Hà Nộ

Báo cáo thực tập Vi xử Lí với đề tài: "Sử dụng Printf để debug dự án" của sinh viên trường Đại học Bách Khoa Hà Nội. Tài liệu được biên soạn dưới dạng file PDF giúp bạn tham khảo và hoàn thành tốt bài tập của mình đạt kết quả cao. Mời bạn đọc đón xem!

T r a n g 1 / 7
BÁO CÁO THC TP VI X
Sinh viên: Trn Thái Bo
MSSV: 20146054
Phòng hc: E1- 306
Ngày báo cáo:27/01/2024
Ni dung: S dụng printf để debug d án
Tun hc: tun 2
1. Khảo sát sơ đồ nguyên lý:
Sinh viên v sơ đ nguyên lý khi RS232 UART
2. Bng kết ni input - output
STT
Tên phn cng
V trí chân vi điều
khiển tương ứng
Trng thái phn
cng
Mc logic ti chân
vi điều khin
RS232_TX
PA2
Output (truyn)
1
RS232_RX
PA3
Input (nhn)
1
3. Bng cu hình UART:
Trên máy tính:
BAUD RATE = 9600
Word length = 8 bits
Parity = None
4. Tham kho lnh printf:
PA2/UART2_TX
PA3/UART2_TX
RXD
RXD
STM32F205VCT6
ESP8266
T r a n g 2 / 7
5. Báo cáo d án Lp trình
Yêu cu 1:
- Khi to d án và lp trình s dng printf in (liên tc, lp li) lên Terminal UART mã s sinh
viên ca bn. Trì hoãn gia 2 ln truyn d liu là 500ms.
Lưu đồ gii thut t lúc khi to d án
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chnh sa t code d án)
Start
While(1){
Print(“19146276”);
Delay(“500”) }
Thêm thư viện
cha hàm printf
End
T r a n g 3 / 7
Yêu cu 2:
- In lên Terminal tng dòng sau. Ghi kết qu hin 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);
#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);
}
}
T r a n g 4 / 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 );
}
Yêu cu 3:
To d án và lập trình debug để in ra Terminal đồng h đếm gi : phút : giây
Ví d:
ASCII value = 75, Character = K
T r a n g 5 / 7
08:59:56
08:59:57
08:59:58
08:59:59
09:00:00
09:00:01
...
Lưu đồ gii thut
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chnh sa t code d án)
Start
D liu gi ,phút ,
giây
In ra màn hình Gi, phút, giây
End
char ch[]="11:30:30";
printf("%s\n", ch );
T r a n g 6 / 7
Yêu cu 4:
To d án và lập trình debug để điu khiển đèn D1 như sau:
- Mi ln nhấn nút B1 đèn D1 đảo trng thái. (t tắt sang sáng và ngược li)
- Mỗi khi đèn sáng, sử dng printf gi s ln nhn nút lên Terminal
Lưu đồ gii thut
Đúng
Start
- Hàm đọc trng thái B1
- Hàm mô phng bt/tt D1
B1= False ;
D1= False;
PressCount= 0;
Vòng lp
(while (1))
Kim tra nút nhn B1
có được nhấn chưa ?
Điu khiển đèn D1
da trên trng thái
nút nhn B1
In s ln nhn lên
terminal
End
Đọc trng thái nút
nhn B1
Cp nht trng thái
nút nhn B1 cho vòng
lp
sai
T r a n g 7 / 7
Mã nguồn chương trình (chỉ copy nội dung đã thêm hoặc chnh sa t code d án)
#include <stdbool.h>
// Gi s s dng mô phỏng nút B1 và đèn D1
bool B1= false; // Trng thái nút B1
bool D1 = false; // Trạng thái đèn D1
int pressCount = 0; // S ln nhn nút
// Hàm mô phỏng đc trng thái nút B1
bool readButtonState() {
return ;
}
// Hàm mô phng vic bt/tắt đèn D1
void controlLED(bool state) { }
int main() {
while (1) {
// Đọc trng thái nút B1
bool currentButtonState = readButtonState();
// Kiểm tra xem nút B1 có được nhn hay không
if (currentButtonState && !B1) {
// Nút B1 được nhn
pressCount++; // Tăng số ln nhn
// Đảo trạng thái đèn D1
ledState = !D1;
controlLED(D1);
// In s ln nhn lên Terminal
printf("Press count: %d\n", pressCount);
}
// Cp nht trng thái nút B1 cho vòng lp tiếp theo
B1= currentButtonState;
}
return 0;
}
| 1/7

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