-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprint_string_by_uart.c
executable file
·190 lines (135 loc) · 4.83 KB
/
print_string_by_uart.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
//******************************************
// 档案名称: PRINT_STRING_BY_UART
// 版本 : V...
// 功能 : PRINT_STRING_BY_UART 使用函数
// 备注 : 使用 UART 采字串方式传送给串口调试助手
//******************************************
#include "MQ6812.h"
#include "iApp.h"
#include "print_string_by_uart.h"
#include "uart_data.h"
// 依照程序使用之 UART 组数选择定义如下:
//----------------------
//#define TX_Data_Buf TD0BUF.byte // 定义使用芯片第 0 组 UART 之 TD0BUF
#define TX_Data_Buf TD1BUF.byte // 定义使用芯片第 1 组 UART 之 TD1BUF
//#define TX_Data_Buf TD2BUF.byte // 定义使用芯片第 2 组 UART 之 TD2BUF
//----------------------
//----------------------
// 备注:1. "\r\n" 占了 3 个字节,
// 2. 若有 ERROR: NOW_STR_LEN[]******* 时,之后芯片内部操作可能是异常的
// 此为传送字串已超过定义之长度,
// 请忽必修改程序后再重新调试,避免分析到错误的资料!
char str_list[MAX_STR_LEN];
uchar str_len;
//----------------------
extern SENT_EVT sent_evt ;
extern REC_EVT rec_evt ;
//*********************************************************************
// 函数名 :
// 函数功能 :
// 备注 :
//*********************************************************************
void printf_byUART(void)
{
// 字串最大数检查 ......
// 备注:1. "\r\n" 占了 3 个字节,
// 2. 若有 ERROR: NOW_STR_LEN[]******* 时,之后芯片内部操作可能是异常的
// 此为传送字串已超过定义之长度,
// 请忽必修改程序后再重新调试,避免分析到错误的资料!
// 若大于 MAX_STR_LEN,则传送 ERROR: > MAX_STR_LEN
str_len = strlen(str_list);
if( str_len >= MAX_STR_LEN )
{
sprintf(str_list, "\r\n");
sprintf(str_list, "ERROR: NOW_STR_LEN[%d] > MAX_STR_LEN[%d]\r\n", str_len, MAX_STR_LEN);
str_len = strlen(str_list);
}
start_trans();
}
// 主程序里直定好 UART 串口参数后,直接调用如下:
// { sprintf(str_list, "************************\r\n"); printf_byUART(); }
// { sprintf(str_list, "123 abc ABC\r\n"); printf_byUART(); }
// { sprintf(str_list, "temp = %d:\r\n", temp); printf_byUART(); }
// { sprintf(str_list, "num = %d:\r\n", 555); printf_byUART(); }
// { sprintf(str_list, "char = %s:\r\n", "string"); printf_byUART(); }
//*********************************************************************
// 函数名 :
// 函数功能 :
// 备注 :
//*********************************************************************
void start_trans(void)
{
uchar iloop=0;
while( iloop < str_len )
{
TX_Data_Buf = str_list[iloop];
while( UART1SR.bit.b0 )
{
WDCDR.byte = 0x4e; // clear wdt
}
iloop++;
}
}
void Print_Uart_Sent_Process(void)
{
switch (sent_evt.sent_process)
{
__asm("NOP"); // switch 与第一个 case 之间置入一行 "NOP",避免编译出 "JP gg" 指令!
case UART_TX_IDLE :
sprintf(str_list, "UART_TX_IDLE\r\n");
break;
case UART_SENDING_DATA:
sprintf(str_list, "UART_SENDING_DATA\r\n");
break;
case UART_WAITING_OK1:
sprintf(str_list, "UART_WAITING_OK1\r\n");
break;
case UART_REC_OK1:
sprintf(str_list, "UART_REC_OK1\r\n");
break;
case UART_SENT_SUCCESS:
sprintf(str_list, "UART_SENT_SUCCESS\r\n");
break;
case UART_SENT_TIME_OUT:
sprintf(str_list, "UART_SENT_TIME_OUT\r\n");
break;
case UART_SENT_FAIL:
sprintf(str_list, "UART_SENT_FAIL\r\n");
break;
case UART_REC_ERR:
sprintf(str_list, "UART_REC_ERR\r\n");
break;
}
printf_byUART();
}
void Print_Uart_Receive_Process(void)
{
switch(rec_evt.rec_process)
{
__asm("NOP"); // switch 与第一个 case 之间置入一行 "NOP",避免编译出 "JP gg" 指令!
case UART_RX_IDLE:
sprintf(str_list, "UART_RX_IDLE\r\n");
break;
case UART_REC_PACKAGE:
sprintf(str_list, "UART_REC_PACKAGE\r\n");
break;
case UART_ODD_PARITY:
sprintf(str_list, "UART_ODD_PARITY\r\n");
break;
case UART_SENDING_OK1:
sprintf(str_list, "UART_SENDING_OK1\r\n");
break;
case UART_SENDING_ERR:
sprintf(str_list, "UART_SENDING_ERR\r\n");
break;
case UART_WAITING_OK2:
sprintf(str_list, "UART_WAITING_OK2\r\n");
break;
case UART_REC_OK2:
sprintf(str_list, "UART_REC_OK2\r\n");
break;
case UART_REC_SUCCESS:
sprintf(str_list, "UART_REC_SUCCESS\r\n");
}
printf_byUART();
}