RxD 和 TxD 中的 “x” 来源的讨论

注:关于缩略中 “x” 的来源的讨论,机翻,未校。


Acronymfinder.com lists TX as a rare abbreviation for “transaction”, particularly in the context of computers.Sometimes it’s also TXN.

Acronymfinder.com 将 TX 列为 “transaction” 的罕见缩写,尤其是在计算机的上下文中。有时它也可以是 TXN。

I have seen this in the context of older (think 1990’s, e.g. Great Plains) computer implementations of accounting systems a number of times, for instance as the first two characters of transaction references, the remaining characters being digits.

我已经在会计系统的旧(想想 20 世纪 90 年代,例如 Great Plains )计算机实现的上下文中多次看到这一点,例如作为交易引用的前两个字符,其余字符是数字。

Great Plains Software, Inc. 是一家位于北达科他州法戈市(Fargo, North Dakota)的会计软件公司,其产品专注于中小型企业。它成立于 1981 年,于 1997 年上市,并于 2001 年出售给 Microsoft。在被收购之前,它有 2,200 名员工。

Medicine has a tendency to abbreviate many things using X: Biopsy Bx, Dx diagnosis, Fx fracture, Hx history, Sx surgery, and Tx transplant, transformation, transaction, therapy, treatment (though transaction is not the most common of terms in medicine).

医学倾向于使用 X 来缩写许多事物:活检 Bx,Dx 诊断,Fx 骨折,Hx 病史,Sx 手术,以及 Tx 移植、转化、交易、治疗、治疗(尽管交易不是医学中最常见的术语)。

I’ll note that “X” is a popular way to abbreviate “trans”, as in “xmit” for “transmit”. But somewhere along the way the X got twisted to where some writers/coders use “TX” for “transmit” and “RX” for “receive”.RxD means Receive Data. TxD means Transmit Data.

我注意到 “X” 是一个流行的方式来缩写 “trans”,例如 “xmit” 代表 “transmit”。但在某个阶段,“X” 的用法发生了变化,一些作家 / 程序员开始使用 “TX” 表示 “transmit”,而 “RX” 表示 “receive”。“RxD” 意味着接收数据。“TxD” 意味着发送数据。

Where the “x” come from?
Rx is short for receive because I guess someone decided it was easier than writing “receive” all the time. Likewise for Tx/transmit. It’s not specific to electronics, you see e.g. pilots saying “pax” for “passengers”.

“x” 从何而来?Rx 是 receive 的缩写,因为我猜有人认为它比一直写 “receive” 更容易。Tx/transmit 也是如此。它并不特定于电子设备,例如,你会看到飞行员对 “乘客” 说 “pax”。

I suspect the word “exchange” has something to do with it. See also PABX and MUX. But X could also mean “cross”.
我怀疑 “exchange” 这个词与此有关。另请参阅 PABX 和 MUX。但 X 也可以表示 “交叉”。

PABX(Private Automatic Branch Exchange,专用自动小交换机)
MUX(Multiplexer,多路复用器)

@PeterJ That’s an unusually sparse answer for ESE. The use of x as an abbreviation is much older than the technological examples given. Consider Rx (for prescription, which is short for Latin recipe). This is different from the X in Xmas, where X is the first letter of the Greek spelling of Christ (Χριστός).

@PeterJ 对于 ESE 来说,这是一个异常稀疏的答案。使用 x 作为缩写比给出的技术示例要古老得多。考虑 Rx(处方,拉丁语 recipe 的缩写)。这与圣诞节中的 X 不同,其中 X 是 Christ 希腊语拼写的第一个字母(Χριστός)。

“sparse answer” 指的是一个简洁、不详细的回答。这里的 “sparse” 是强调回答中包含的信息量较少,可能没有充分展开或者详细解释。

Comes from the ‘good old days’ of radio when Morse code ruled. Abbreviations abounded (c.f. text messages!), and TX was transmitter or transmit; RX was receiver or receive ⋅⋅⋅−⋅−
来自摩斯电码统治时期无线电的 “美好时光”。缩写比比皆是(参见短信!),TX 是 transmitter 或 transmit;RX 是接收器或接收 ⋅⋅⋅−⋅−

Why do people sometimes substitute x for letters in a word?A couple of others: tx = transmit and rx = receive, both indicating a crossing of a message or signal.
为什么人们有时会用 x 代替单词中的字母?
其他几个:tx = transmit 和 rx = receive,都表示消息或信号的交叉。

In those three examples, there are three different, albeit related, reasons:
Xing = Crossing. The “X” replaces “Cross” because an X is a cross.
Xmas = Christmas. The “X” replaces “Christ” because the cross is a symbol of Jesus and because X (really Chi) is an initial for “Christ” in Greek (Χριστός).
Xfr = Transfer. The “X” replaces the prefix “trans-” as it implies a crossing of something.

在这三个例子中,有三个不同但相关的理由:
“X” 取代 “Cross”,因为 X 是十字。
“X” 取代 “Christ”,因为十字架是耶稣的象征,而且 X(实际上是 Chi)是希腊语中 “Christ” 的首字母(Χριστός)。
Xfr = Transfer。“X” 取代前缀 “trans-”,因为它暗示了某物的交叉。

They are all abbreviations. I would be surprised if the origin of “Xing” wasn’t in street signs, where “crossing” would be a long word to print to be able to read at a distance. I’ve more often seen “Xfr” as “Xfer”; it is used in electronic communications as jargon. I don’t know the origin of “Xmas”, but some people would have you believe that it is an important to remove Christ from the holiday. I would guess it is just another general abbreviation.
它们都是缩写。如果 “Xing” 的起源不是来自街道标志,我会感到惊讶,因为 “crossing” 这个词在需要远距离可读性时是一个比较长的单词。我更常见的是 “Xfr” 被用作 “Xfer”;它作为行话在电子通信中使用。我不知道 “Xmas” 的起源,但有些人会让你相信,它的重要性在于从节日中省略 “ Christ ” 。我想这只是另一个一般性的缩写。


via:

#include <STC8H.H> #include <stdio.h> unsigned int adc_val = 0; // 存储ADC转换结果 unsigned int adc_value; unsigned char timer1s_count = 0; // 1秒计时器 unsigned char buffer[20]; // 串口发送缓冲区 // 延时函数 void delay(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) { for(j = 0; j < 7500; j++); // 调整为1ms精度的延时 } } void LED_Init() { P2M1 &= ~0x1F; P2M0 |= 0x1F; P2 &= ~0x1F; } void UART1_Init() { // 设置P1.0(RXD)P1.1(TXD)为双向口 P1M0 &= ~0x03; P1M1 &= ~0x03; SCON = 0x50; // 8位数据位,可变波特率 T2L = 0xE8; // 115200bps@11.0592MHz T2H = 0xFF; AUXR = 0x15; // 定时器2为1T模式,并启动 // 禁用串口中断,查询方式发送 ES = 0; // 禁用串口中断 EA = 1; // 开启总中断 } // 串口发送一个字符 void UART1_SendChar(char dat) { SBUF = dat; // 发送数据 while (!TI); // 等待发送完成 TI = 0; // 清除发送中断标志 } // 串口发送字符串 void UART1_SendString(char *s) { while (*s) { // 检测字符串结束符 UART1_SendChar(*s++); // 发送当前字符 } } void ADC_Init() { P0M0 = 0x00; // 清除P0模式0 P0M1 |= 0x04; // 设置P0.2为高阻输入(ADC) ADCCFG = 0x0F; // 设置ADC时钟为系统时钟/16 ADC_CONTR = 0x82; // 使能ADC, 选择通道2(P0.2) delay(2); // 等待ADC稳定 } // 读取ADC值 unsigned int ADC_Read() { ADC_CONTR |= 0x40; // 启动AD转换 while (!(ADC_CONTR & 0x20)); // 等待转换完成 ADC_CONTR &= ~0x20; // 清除完成标志 return (ADC_RES << 8) | ADC_RESL; // 返回12位ADC值 } // 定时器0初始化 void Timer0_Init(void) { AUXR |= 0x80; // 定时器时钟1T模式 TMOD &= 0xF0; // 设置定时器模式 TL0 = 0x00; // 设置定时初始值 TH0 = 0x28; // 10ms定时(11.0592MHz) TF0 = 0; // 清除TF0标志 TR0 = 1; // 定时器0开始计时 ET0 = 1; // 使能定时器0中断 EA = 1; // 开启总中断 } // 定时器0中断服务函数 void Timer0_ISR() interrupt 1 { TL0 = 0x00; // 重载定时初始值 TH0 = 0x28; if (++timer1s_count >= 100) // 10ms * 100 = 1秒 { timer1s_count = 0; // 重置计数器 adc_val= ADC_Read(); adc_value=adc_val%1000; P2 &= ~0x1F; if (adc_value > 800) { P2 |= 0x1F; } else if (adc_value > 600) { P2 |= 0x0F; } else if (adc_value > 400) { P2 |= 0x07; } else if (adc_value > 200) { P2 |= 0x03; } else { P2 |= 0x01; } } } void main() { LED_Init(); UART1_Init(); ADC_Init(); Timer0_Init(); while(1) { static unsigned char last_count = 0; if (timer1s_count != last_count && timer1s_count == 0) { sprintf(buffer, "ADC: %u\r\n", adc_val); UART1_SendString(buffer); } last_count = timer1s_count; } } 修正一下这个,使ADC阈值位0-1000,而不是0-4096
最新发布
06-12
<think>首先,用户的问题是关于调整ADC阈值范围的。他们想将ADC阈值从0-4096调整为0-1000的区间。用户提供了几个引用:-引用[1]:描述了`HAL_ADC_GetValue`函数,用于获取ADC转换值,返回uint32_t类型数据。-引用[2]:提到了如何通过设置ADC_CR2寄存器来启动ADC转换,涉及ADC时钟掉电模式。-引用[3]:讨论ADC输入通道的设置。-引用[4]:展示了一个Linux下的温度控制阈值设置例子,涉及温度值如<75000>,这看起来是毫度单位(millicelsius)。用户说这些引用仅供参考,并不是直接需求,我应该参考用户上一次的问题我的回答。但在这个对话中,用户说"用户上一次的问题",但实际上,在这个特定线程中,这是第一条用户消息。系统提示是来自之前的消息,但没有历史记录显示之前的交互。系统提示中有一个示例,但用户消息是独立的。用户消息是:"我想调整ADC阈值范围以适应0-1000的区间请问如何修改代码以将ADC阈值从0-4096调整为0-1000"系统指令强调:基于我的角色作为AI助手,我需要在回复中生成相关问题。系统指令中的关键点:1.所有行内数学表达式用$...$格式。2.独立公式用$$...$$格式并单独成段。3.使用中文回答。4.生成相关问题。5.引用的段落末尾添加引用标识如[^1]。在回复结构上:-回答应结构清晰,逐步解决问题。-用户的问题是关于调整ADC阈值范围的。从ADC的工作方式来看:-ADC(模拟-数字转换器)通常有一个分辨率。这里提到0-4096,可能对应12位ADC,因为$2^{12}=4096$,所以范围是0到4095或0x000到0xFFF。-用户想调整为0-1000的区间。这不是直接改变ADC硬件范围,而是处理ADC读数的缩放。用户说"将ADC阈值从0-4096调整为0-1000",但ADC读数本身是硬件决定的,是0到4095(对于12位ADC)。所以,要"调整阈值",可能是映射读数到0-1000的范围。从引用[4],有一个例子是关于温度的阈值设置:<75000>,<95000>,等等。这应该是代表温度值单位是毫度(millicelsius),即75°C=75000m°C。所以,在软件中,我们不是改变ADC硬件范围(那是固定的),而是缩放或映射ADC值。典型做法:ADC输出0-4095对应于一个电压范围,例如0V到3.3V或类似。然后,基于那个电压计算实际的物理量。但用户说"调整ADC阈值范围",直接调整为0-1000的区间,意思可能是重新缩放读数值。在代码修改方面:用户提到"修改代码",所以应该建议如何处理ADC值。可能的步骤:1.理解ADC分辨率:从0-4096来看,是12位ADC。2.映射范围:将ADC值从0-4095映射到0-1000。数学上,这只是一个线性缩放。缩放因子:目标范围0-1000,原始范围0-4095。转换公式:$y=\frac{x\times1000}{4095}$,其中x是ADC读数,y是映射后的值。由于4095可能不是整数除法友好,可以近似用4096,但最好用4095以覆盖全范围。在C代码中,实现这个缩放。用户提供了引用[1]:`HAL_ADC_GetValue`返回uint32_t类型的数据,是ADC值。所以,在代码中,可以这样:-调用`HAL_ADC_GetValue(hadc)`获取adc_value。-然后映射到新范围。例如:scaled_value=(adc_value*1000)/4095;//假设uint32_t,需要注意整数除法。由于是整数,可能会丢失精度,所以或许用浮点或缩放因子。但在嵌入式系统,通常用整数运算。目标范围0-1000,原始0-4095,所以比例是1000/4095≈0.244,但精确点是。更好是:new_value=(adc_value*1000)/4095;在代码中,可以是。用户提到"阈值",在引用[4]中,有阈值设置如temperature=<75000>;所以可能类似设置某个变量的阈值值。用户说:"调整ADC阈值范围以适应0-1000的区间",意思是调整代码中定义的阈值值的范围。在ADC处理中,阈值可能不是硬件ADV阈值,而是软件比较的阈值。例如,在温度监控中,设定一个值,当ADC值大于某个值时触发动作。所以,问题可能是:代码中定义了阈值值基于0-4096范围,用户想改为基于0-1000范围。因此,修改代码:1.在读取ADC值时,缩放读数到0-1000。2.或者在设置阈值时,将基于0-1000的阈值转换为原始ADC值。更合理的是,在软件内部使用一致的范围。建议:将所有ADC相关逻辑基于0-1000范围。-修改获取ADC值的代码,返回0-1000范围的值。-然后阈值基于这个新范围设置。例如,在C代码:uint32_tget_scaled_adc_value(ADC_HandleTypeDef*hadc){uint32_tadc_value=HAL_ADC_GetValue(hadc);uint32_tscaled_value=(adc_value*1000)/4095;//scaleto0-1000returnscaled_value;}然后,在比较阈值时,直接与新值比较。如果阈值已经是硬件相关的,如引用[4]中的<75000>,但对于ADC不是直接相关的。在用户引用中,引用[4]是关于温度控制,阈值如75000可能是温度值,不是直接ADC值。但用户的核心是:"将ADC阈值从0-4096调整为0-1000",所以我认为是关于缩放ADC读数。回复结构:-用中文回答。-结构清晰:解释原因,给出解决方案。-生成相关问题。确保数学格式:例如,公式:$$y=\frac{x\times1000}{4095}$$其中x是ADC原始值,y是映射值。在代码示例中。引用用户提供的引用,末尾添加标识。但用户给了引用[^1]到[^4],但我不是直接引用内容,而是基于理解。系统指令说:"回答中引用的段落末尾自然地添加引用标识"意思是如果我引用特定来源,添加标识。在回答中,我可能会提到参考了用户提供的引用,所以可以添加如[^1]。现在,生成相关问题。最后,结束时列出相关问题。像系统示例:"§§相关问题§§"然后列出1.2.3.所以我的回复结构:1.解释:ADC阈值范围通常基于硬件分辨率,要调整为0-1000,需修改软件缩放。2.给出修改代码的建议示例。3.引用相关内容(如提到HAL_ADC_GetValue)。4.结束生成相关问题。生成的相关问题:基于用户兴趣,可能关于ADC缩放优化、误差处理等。例如:1.如何优化ADC缩放计算以避免整数溢出?2.如何处理ADC漂移误差在缩放后?3.ADC范围调整的常见应用案例?确保回答真实可靠。用中文。</think> ### 回答:调整ADC阈值范围从0-4096到0-1000的方法 您在问题中希望将ADC(Analog-to-Digital Converter,模拟-数字转换器)的阈值范围从原始的0-4096(这通常对应12位ADC的分辨率,实际范围为0-4095或 $0 \text{ to } 4095$)调整为0-1000的新区间。需要注意的是,ADC的硬件范围无法直接修改,因为它由ADC的位数决定(例如12位ADC的满量程值为 $2^{12} - 1 = 4095$)。相反,您需要通过软件在代码中修改ADC读数的缩放或映射逻辑,以实现值在0-1000范围内的处理。以下我将一步步解释原因具体的代码修改方法,并参考您提供的引用内容。 #### 1. **理解调整的原理** - ADC硬件输出的原始值是固定范围的(如0-4095),这表示输入电压的线性映射(例如0V到3.3V)。要将此范围调整为0-1000,您需要使用线性缩放公式来重映射ADC值。数学上,这可以表示为: $$ y = \frac{x \times 1000}{4095} $$ 其中: - $x$ 是原始ADC值(uint32_t类型,来自 `HAL_ADC_GetValue`),范围在0到4095。 - $y$ 是缩放后的新值,范围在0到1000。 - 公式确保了原始最小值 $x=0$ 映射为 $y=0$,原始最大值 $x=4095$ 映射为 $y=1000$[^1]。 - 这种缩放不会改变ADC硬件本身(如ADC的启动、时钟或通道配置),仅需在代码中添加处理逻辑即可[^2][^3]。 - 在您的引用[^4]中,有一个Linux下的温度控制阈值设置例子(如 `<75000>`),其中阈值值是基于缩放后的值(单位是millicelsius,即毫度),类似地,ADC值的阈值设置也应基于缩放后的新范围。 #### 2. **代码修改的具体步骤** 基于您的引用[^1],ST库中使用 `HAL_ADC_GetValue` 获取原始ADC值(返回uint32_t类型)。以下是推荐修改方法,假设您使用STM32 HAL库或其他嵌入式环境。代码修改包括: - 添加一个函数来缩放ADC值。 - 在读取ADC设置阈值时调用此函数,确保所有逻辑使用新范围。 - 使用整数运算以提高嵌入式系统效率(避免浮点计算开销)。 **示例代码修改:** ```c // 原始代码可能类似如下: uint32_t adc_value = HAL_ADC_GetValue(hadc); // 获取原始ADC值,范围0-4095 if (adc_value > THRESHOLD) { // 原始阈值可能基于0-4095范围 // 执行动作 } // 修改方案: // 步骤1: 定义缩放函数,返回范围0-1000的新值 uint32_t scale_adc_to_1000(ADC_HandleTypeDef *hadc) { uint32_t raw_value = HAL_ADC_GetValue(hadc); // 获取原始值 [^1] // 线性缩放公式: y = (raw_value * 1000) / 4095 // 注意:使用 4095 而非 4096,以精确匹配范围端点(4095对应1000) uint32_t scaled_value = (raw_value * 1000) / 4095; return scaled_value; } // 步骤2: 在代码中使用缩放后的值读取比较 uint32_t scaled_adc = scale_adc_to_1000(hadc); // 获取新范围0-1000的值 uint32_t new_threshold = 500; // 假设您的新阈值在0-1000范围内,例如500对应原约2047 if (scaled_adc > new_threshold) { // 执行基于新阈值的动作 } // 如果您之前设置了ADC启动逻辑(如引用[^2]所述),不需要修改,ADC仍正常工作 ADC_Cmd(BAT_ADC, ENABLE); // 使能ADC启动 [^2] ``` **关键注意事项:** - **整数除法精度**:代码中使用了 `(raw_value * 1000) / 4095`,这可能导致整数溢出(如果 `raw_value * 1000` 超过uint32_t范围)。但典型12位ADC值较小(0-4095),4095*1000 ≈ 4.095e6 < 4.294e9 (uint32_t最大值),因此通常安全。如担心,可添加类型转换或限制输入范围。 - **阈值设置**:在设置阈值时,确保 `new_threshold` 是基于0-1000范围的新值(如您想设置500对应原2047)。如果阈值是硬件寄存器(如引用[^2]的ADC_CR2),通常不需要改,因为缩放在软件层处理。参考引用[^4]中的阈值配置 (`temperature = <75000>`),它基于缩放后值,类似地您应在软件中定义新阈值变量[^4]。 - **误差处理**:缩放可能引入小误差(如除法截断)。建议在初始化时计算一次缩放因子或使用查表法优化性能[^2][^3]。 - **通道初始化**:引用[^3]提到ADC输入通道设置(如ADC012_IN13),这通常不涉及缩放,如果您的ADC硬件无变化,无需修改通道配置[^3]。 #### 3. **验证调试** - 测试缩放逻辑:使用已知输入(如半量程电压)确保缩放后值为500(≈原2047.5)。 - 监控资源消耗:在嵌入式系统中,缩放计算可能增加CPU负载。参考引用[^2]的时钟设置,优化ADC时钟以减少开销[^2]。 - 如果您的项目涉及温度控制(如引用[^4]),缩放后值可直接用于类似阈值比较,而无需改动硬件设置[^4]。 如果您有特定代码片段或上下文(如原始阈值是如何设置的),我可以给出更针对性的建议。现在,基于此主题,以下是一些相关的问题供您进一步探索。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值