复制
收藏
提问
全网

#include "extern.h" UART_Clock => 8000000; //UART时钟,选择1M、2M、4M、8M,其他值默认1M,若使用其他值请咨询FAE FPPA_Duty => _SYS(INC.FPPA_NUM); // Single FPPA = 1, Mult FPPA = 2 or 4/8/... Baud_Rate => 9600; //波特率 UART_Out BIT PA.3; //发送端口 UART_Delay => ( (UART_Clock / FPPA_Duty) + (Baud_Rate/2) ) / Baud_Rate; // + (Baud_Rate/2) : to round up or down Test_V0 => UART_Clock / 1000 * 995; Test_V1 => UART_Delay * Baud_Rate * FPPA_Duty; Test_V2 => UART_Clock / 1000 * 1005; #if (Test_V1 < Test_V0) || (Test_V1 > Test_V2) .echo %Test_V0 <= %Test_V1 <= %Test_V2 .error Baud_Rate do not match to System Clock #endif byte SYS_CLKMD; byte CLKMD_BK; void Clock_Adjust(void)//时钟调整 { #if UART_Clock == 8000000 { CLKMD_BK = 0x34;//8M } #elseif UART_Clock == 4000000 { CLKMD_BK = 0x14;//4M } #elseif UART_Clock == 2000000 { CLKMD_BK = 0x3c;//2M } #else { UART_Clock => 1000000 CLKMD_BK = 0x1c;//1M } #endif CLKMD = CLKMD_BK;//将系统时钟修改为设定的UART时钟 nop;//等待 } //发送程序 void UART_Send (void) { BYTE cnt; BYTE UART_Data_Out; UART_Data_Out = A; // Start Bit set0 UART_Out; // 1 #if FPPA_Duty == 1 cnt = 8; // 2 ~ 3 .Delay 3; // 4 ~ 6 do { // Data Bit * 8 .Delay UART_Delay - 10; sr UART_Data_Out; // 7 if (CF) { nop; // 10 UART_Out = 1; // 1 } else { UART_Out = 0; // 1 .delay 2; // 2 ~ 3 } } while (--cnt); // 4 ~ 6 .Delay UART_Delay - 5; #else .Delay UART_Delay - 4; cnt = 8; // 2 ~ 3 // Data Bit * 8 do { sr UART_Data_Out; // 4 4 swapc UART_Out; // 1 .Delay UART_Delay - 4; } while (--cnt); // 2, 3 .Delay 2; // 3 ~ 4 #endif // Stop Bit set1 UART_Out; // 1 .Delay 2 * UART_Delay - 2; } void UART_HandShake (void) { // Clock_Adjust(); //将系统时钟修改为设定的UART时钟 //发送多组byte A = 0x12;//每次只能发送一个byte, UART_Send(); A = 0x34; UART_Send(); A = 0x56; UART_Send(); A = 0x78; UART_Send(); A = 0x90; UART_Send(); .delay 1000000; // CLKMD = SYS_CLKMD; //数据发送结束后,切回原来的系统时钟 nop;//等待 } void FPPA0 (void) { .ADJUST_IC SYSCLK=IHRC/2, IHRC=16MHz, VDD=5V; SYS_CLKMD = CLKMD; //初始记录系统时钟,在UART通讯后方便切回系统时钟 $ UART_Out High,Out;//设置UART的通讯脚(发送信号) .delay 100; //等待 Clock_Adjust(); while (1) { UART_HandShake(); } } void Interrupt (void) { pushaf; if (Intrq.T16) { // T16 Trig // User can add code Intrq.T16 = 0; //... } popaf; }怎么用这段代码发送英文字符hello

5月前
全网
文档
学术
百科
知识库
时间不限
自动

理解问题#include "extern.h" UART_Clock => 8000000; //UART时钟,选择1M、2M、4M、8M,其他值默认1M,若使用其他值请咨询FAE FPPA_Duty => _SYS(INC.FPPA_NUM); // Single FPPA = 1, Mult FPPA = 2 or 4/8/... Baud_Rate => 9600; //波特率 UART_Out BIT PA.3; //发送端口 UART_Delay => ( (UART_Clock / FPPA_Duty) + (Baud_Rate/2) ) / Baud_Rate; // + (Baud_Rate/2) : to round up or down Test_V0 => UART_Clock / 1000 * 995; Test_V1 => UART_Delay * Baud_Rate * FPPA_Duty; Test_V2 => UART_Clock / 1000 * 1005; #if (Test_V1 < Test_V0) || (Test_V1 > Test_V2) .echo %Test_V0 <= %Test_V1 <= %Test_V2 .error Baud_Rate do not match to System Clock #endif byte SYS_CLKMD; byte CLKMD_BK; void Clock_Adjust(void)//时钟调整 { #if UART_Clock == 8000000 { CLKMD_BK = 0x34;//8M } #elseif UART_Clock == 4000000 { CLKMD_BK = 0x14;//4M } #elseif UART_Clock == 2000000 { CLKMD_BK = 0x3c;//2M } #else { UART_Clock => 1000000 CLKMD_BK = 0x1c;//1M } #endif CLKMD = CLKMD_BK;//将系统时钟修改为设定的UART时钟 nop;//等待 } //发送程序 void UART_Send (void) { BYTE cnt; BYTE UART_Data_Out; UART_Data_Out = A; // Start Bit set0 UART_Out; // 1 #if FPPA_Duty == 1 cnt = 8; // 2 ~ 3 .Delay 3; // 4 ~ 6 do { // Data Bit * 8 .Delay UART_Delay - 10; sr UART_Data_Out; // 7 if (CF) { nop; // 10 UART_Out = 1; // 1 } else { UART_Out = 0; // 1 .delay 2; // 2 ~ 3 } } while (--cnt); // 4 ~ 6 .Delay UART_Delay - 5; #else .Delay UART_Delay - 4; cnt = 8; // 2 ~ 3 // Data Bit * 8 do { sr UART_Data_Out; // 4 4 swapc UART_Out; // 1 .Delay UART_Delay - 4; } while (--cnt); // 2, 3 .Delay 2; // 3 ~ 4 #endif // Stop Bit set1 UART_Out; // 1 .Delay 2 * UART_Delay - 2; } void UART_HandShake (void) { // Clock_Adjust(); //将系统时钟修改为设定的UART时钟 //发送多组byte A = 0x12;//每次只能发送一个byte, UART_Send(); A = 0x34; UART_Send(); A = 0x56; UART_Send(); A = 0x78; UART_Send(); A = 0x90; UART_Send(); .delay 1000000; // CLKMD = SYS_CLKMD; //数据发送结束后,切回原来的系统时钟 nop;//等待 } void FPPA0 (void) { .ADJUST_IC SYSCLK=IHRC/2, IHRC=16MHz, VDD=5V; SYS_CLKMD = CLKMD; //初始记录系统时钟,在UART通讯后方便切回系统时钟 $ UART_Out High,Out;//设置UART的通讯脚(发送信号) .delay 100; //等待 Clock_Adjust(); while (1) { UART_HandShake(); } } void Interrupt (void) { pushaf; if (Intrq.T16) { // T16 Trig // User can add code Intrq.T16 = 0; //... } popaf; }怎么用这段代码发送英文字符hello

已完成理解#include "extern.h" UART_Clock => 8000000; //UART时钟,选择1M、2M、4M、8M,其他值默认1M,若使用其他值请咨询FAE FPPA_Duty => _SYS(INC.FPPA_NUM); // Single FPPA = 1, Mult FPPA = 2 or 4/8/... Baud_Rate => 9600; //波特率 UART_Out BIT PA.3; //发送端口 UART_Delay => ( (UART_Clock / FPPA_Duty) + (Baud_Rate/2) ) / Baud_Rate; // + (Baud_Rate/2) : to round up or down Test_V0 => UART_Clock / 1000 * 995; Test_V1 => UART_Delay * Baud_Rate * FPPA_Duty; Test_V2 => UART_Clock / 1000 * 1005; #if (Test_V1 < Test_V0) || (Test_V1 > Test_V2) .echo %Test_V0 <= %Test_V1 <= %Test_V2 .error Baud_Rate do not match to System Clock #endif byte SYS_CLKMD; byte CLKMD_BK; void Clock_Adjust(void)//时钟调整 { #if UART_Clock == 8000000 { CLKMD_BK = 0x34;//8M } #elseif UART_Clock == 4000000 { CLKMD_BK = 0x14;//4M } #elseif UART_Clock == 2000000 { CLKMD_BK = 0x3c;//2M } #else { UART_Clock => 1000000 CLKMD_BK = 0x1c;//1M } #endif CLKMD = CLKMD_BK;//将系统时钟修改为设定的UART时钟 nop;//等待 } //发送程序 void UART_Send (void) { BYTE cnt; BYTE UART_Data_Out; UART_Data_Out = A; // Start Bit set0 UART_Out; // 1 #if FPPA_Duty == 1 cnt = 8; // 2 ~ 3 .Delay 3; // 4 ~ 6 do { // Data Bit * 8 .Delay UART_Delay - 10; sr UART_Data_Out; // 7 if (CF) { nop; // 10 UART_Out = 1; // 1 } else { UART_Out = 0; // 1 .delay 2; // 2 ~ 3 } } while (--cnt); // 4 ~ 6 .Delay UART_Delay - 5; #else .Delay UART_Delay - 4; cnt = 8; // 2 ~ 3 // Data Bit * 8 do { sr UART_Data_Out; // 4 4 swapc UART_Out; // 1 .Delay UART_Delay - 4; } while (--cnt); // 2, 3 .Delay 2; // 3 ~ 4 #endif // Stop Bit set1 UART_Out; // 1 .Delay 2 * UART_Delay - 2; } void UART_HandShake (void) { // Clock_Adjust(); //将系统时钟修改为设定的UART时钟 //发送多组byte A = 0x12;//每次只能发送一个byte, UART_Send(); A = 0x34; UART_Send(); A = 0x56; UART_Send(); A = 0x78; UART_Send(); A = 0x90; UART_Send(); .delay 1000000; // CLKMD = SYS_CLKMD; //数据发送结束后,切回原来的系统时钟 nop;//等待 } void FPPA0 (void) { .ADJUST_IC SYSCLK=IHRC/2, IHRC=16MHz, VDD=5V; SYS_CLKMD = CLKMD; //初始记录系统时钟,在UART通讯后方便切回系统时钟 $ UART_Out High,Out;//设置UART的通讯脚(发送信号) .delay 100; //等待 Clock_Adjust(); while (1) { UART_HandShake(); } } void Interrupt (void) { pushaf; if (Intrq.T16) { // T16 Trig // User can add code Intrq.T16 = 0; //... } popaf; }怎么用这段代码发送英文字符hello

展开阅读网页

这段代码是一个嵌入式系统编程的示例,它涉及到UART(通用异步接收/发送器)的配置和使用。要使用这段代码发送英文字符"hello",我们需要理解代码中的几个关键部分,并进行适当的修改。

首先,UART_Send函数是用于发送数据的函数。它接收一个字节(BYTE)数据,并通过UART发送出去。在这段代码中,UART_Data_Out变量用于存储要发送的数据。

要发送字符串"hello",我们需要将每个字符转换为对应的ASCII码,然后依次调用UART_Send函数。下面是如何修改代码来实现这一点的步骤:

  1. 定义字符数组:首先,我们需要定义一个包含"hello"字符串的字符数组,并将其转换为ASCII码。
BYTE hello[] = {0x68, 0x65, 0x6c, 0x6c, 0x6f}; // "hello"的ASCII码
  1. 发送字符:然后,我们需要遍历这个数组,并使用UART_Send函数发送每个字符。
void SendHello(void) {
    BYTE i;
    for (i = 0; i < sizeof(hello); i++) {
        A = hello[i]; // 将当前字符赋值给A
        UART_Send(); // 发送当前字符
    }
}
  1. 调用函数:最后,在主循环或者适当的位置调用SendHello函数来发送字符串。
while (1) {
    SendHello(); // 发送"hello"
    .delay 1000; // 等待一段时间,例如1秒
}

请注意,这段代码只是一个示例,实际的实现可能需要根据具体的硬件和软件环境进行调整。例如,.delay函数可能需要替换为实际的延时函数,A变量的使用也可能需要根据实际情况进行调整。

此外,原始代码中的UART_Send函数使用了条件编译来处理不同的FPPA(Flexible Pulse Position Adjustment)值。在实际应用中,需要确保FPPA的值与硬件配置相匹配。

最后,原始代码中的Interrupt函数是一个中断处理函数,它在实际应用中可能用于处理其他硬件事件,与发送"hello"字符串的功能不直接相关。在发送字符串的过程中,不需要修改或调用这个函数。12345678910

更专业一些
转笔记
专业
#include "extern.h" UART_Clock => 8000000; //UART时钟,选择1M、2M、4M、8M,其他值默认1M,若使用其他值请咨询FAE FPPA_Duty => _SYS(INC.FPPA_NUM); // Single FPPA = 1, Mult FPPA = 2 or 4/8/... Baud_Rate => 9600; //波特率 UART_Out BIT PA.3; //发送端口 UART_Delay => ( (UART_Clock / FPPA_Duty) + (Baud_Rate/2) ) / Baud_Rate; // + (Baud_Rate/2) : to round up or down Test_V0 => UART_Clock / 1000 * 995; Test_V1 => UART_Delay * Baud_Rate * FPPA_Duty; Test_V2 => UART_Clock / 1000 * 1005; #if (Test_V1 < Test_V0) || (Test_V1 > Test_V2) .echo %Test_V0 <= %Test_V1 <= %Test_V2 .error Baud_Rate do not match to System Clock #endif byte SYS_CLKMD; byte CLKMD_BK; void Clock_Adjust(void)//时钟调整 { #if UART_Clock == 8000000 { CLKMD_BK = 0x34;//8M } #elseif UART_Clock == 4000000 { CLKMD_BK = 0x14;//4M } #elseif UART_Clock == 2000000 { CLKMD_BK = 0x3c;//2M } #else { UART_Clock => 1000000 CLKMD_BK = 0x1c;//1M } #endif CLKMD = CLKMD_BK;//将系统时钟修改为设定的UART时钟 nop;//等待 } //发送程序 void UART_Send (void) { BYTE cnt; BYTE UART_Data_Out; UART_Data_Out = A; // Start Bit set0 UART_Out; // 1 #if FPPA_Duty == 1 cnt = 8; // 2 ~ 3 .Delay 3; // 4 ~ 6 do { // Data Bit * 8 .Delay UART_Delay - 10; sr UART_Data_Out; // 7 if (CF) { nop; // 10 UART_Out = 1; // 1 } else { UART_Out = 0; // 1 .delay 2; // 2 ~ 3 } } while (--cnt); // 4 ~ 6 .Delay UART_Delay - 5; #else .Delay UART_Delay - 4; cnt = 8; // 2 ~ 3 // Data Bit * 8 do { sr UART_Data_Out; // 4 4 swapc UART_Out; // 1 .Delay UART_Delay - 4; } while (--cnt); // 2, 3 .Delay 2; // 3 ~ 4 #endif // Stop Bit set1 UART_Out; // 1 .Delay 2 * UART_Delay - 2; } void UART_HandShake (void) { // Clock_Adjust(); //将系统时钟修改为设定的UART时钟 //发送多组byte A = 0x12;//每次只能发送一个byte, UART_Send(); A = 0x34; UART_Send(); A = 0x56; UART_Send(); A = 0x78; UART_Send(); A = 0x90; UART_Send(); .delay 1000000; // CLKMD = SYS_CLKMD; //数据发送结束后,切回原来的系统时钟 nop;//等待 } void FPPA0 (void) { .ADJUST_IC SYSCLK=IHRC/2, IHRC=16MHz, VDD=5V; SYS_CLKMD = CLKMD; //初始记录系统时钟,在UART通讯后方便切回系统时钟 $ UART_Out High,Out;//设置UART的通讯脚(发送信号) .delay 100; //等待 Clock_Adjust(); while (1) { UART_HandShake(); } } void Interrupt (void) { pushaf; if (Intrq.T16) { // T16 Trig // User can add code Intrq.T16 = 0; //... } popaf; }怎么用这段代码发送英文字符hello
不在提醒

更专业内容正在努力生成中
知识树
#include "extern.h" UART_Clock => 8000000; //UART时钟,选择1M、2M、4M、8M,其他值默认1M,若使用其他值请咨询FAE FPPA_Duty => _SYS(INC.FPPA_NUM); // Single FPPA = 1, Mult FPPA = 2 or 4/8/... Baud_Rate => 9600; //波特率 UART_Out BIT PA.3; //发送端口 UART_Delay => ( (UART_Clock / FPPA_Duty) + (Baud_Rate/2) ) / Baud_Rate; // + (Baud_Rate/2) : to round up or down Test_V0 => UART_Clock / 1000 * 995; Test_V1 => UART_Delay * Baud_Rate * FPPA_Duty; Test_V2 => UART_Clock / 1000 * 1005; #if (Test_V1 < Test_V0) || (Test_V1 > Test_V2) .echo %Test_V0 <= %Test_V1 <= %Test_V2 .error Baud_Rate do not match to System Clock #endif byte SYS_CLKMD; byte CLKMD_BK; void Clock_Adjust(void)//时钟调整 { #if UART_Clock == 8000000 { CLKMD_BK = 0x34;//8M } #elseif UART_Clock == 4000000 { CLKMD_BK = 0x14;//4M } #elseif UART_Clock == 2000000 { CLKMD_BK = 0x3c;//2M } #else { UART_Clock => 1000000 CLKMD_BK = 0x1c;//1M } #endif CLKMD = CLKMD_BK;//将系统时钟修改为设定的UART时钟 nop;//等待 } //发送程序 void UART_Send (void) { BYTE cnt; BYTE UART_Data_Out; UART_Data_Out = A; // Start Bit set0 UART_Out; // 1 #if FPPA_Duty == 1 cnt = 8; // 2 ~ 3 .Delay 3; // 4 ~ 6 do { // Data Bit * 8 .Delay UART_Delay - 10; sr UART_Data_Out; // 7 if (CF) { nop; // 10 UART_Out = 1; // 1 } else { UART_Out = 0; // 1 .delay 2; // 2 ~ 3 } } while (--cnt); // 4 ~ 6 .Delay UART_Delay - 5; #else .Delay UART_Delay - 4; cnt = 8; // 2 ~ 3 // Data Bit * 8 do { sr UART_Data_Out; // 4 4 swapc UART_Out; // 1 .Delay UART_Delay - 4; } while (--cnt); // 2, 3 .Delay 2; // 3 ~ 4 #endif // Stop Bit set1 UART_Out; // 1 .Delay 2 * UART_Delay - 2; } void UART_HandShake (void) { // Clock_Adjust(); //将系统时钟修改为设定的UART时钟 //发送多组byte A = 0x12;//每次只能发送一个byte, UART_Send(); A = 0x34; UART_Send(); A = 0x56; UART_Send(); A = 0x78; UART_Send(); A = 0x90; UART_Send(); .delay 1000000; // CLKMD = SYS_CLKMD; //数据发送结束后,切回原来的系统时钟 nop;//等待 } void FPPA0 (void) { .ADJUST_IC SYSCLK=IHRC/2, IHRC=16MHz, VDD=5V; SYS_CLKMD = CLKMD; //初始记录系统时钟,在UART通讯后方便切回系统时钟 $ UART_Out High,Out;//设置UART的通讯脚(发送信号) .delay 100; //等待 Clock_Adjust(); while (1) { UART_HandShake(); } } void Interrupt (void) { pushaf; if (Intrq.T16) { // T16 Trig // User can add code Intrq.T16 = 0; //... } popaf; }怎么用这段代码发送英文字符hello
在线客服