From 4f4a1635ab9a9b606b4332c62630c25c32eece28 Mon Sep 17 00:00:00 2001 From: liumin Date: Tue, 18 Nov 2025 14:47:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B0=8F=E5=BB=B6=E6=97=B6?= =?UTF-8?q?=E7=9B=B4=E6=8E=A5=E7=94=A8nop=EF=BC=8C=E5=8D=95=E8=8A=82?= =?UTF-8?q?=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- User.c | 8 +-- temperature.C | 190 ++++++++++++++++++++++++++------------------------ temperature.h | 122 +++++++++++++++++--------------- 3 files changed, 167 insertions(+), 153 deletions(-) diff --git a/User.c b/User.c index 9cdba7e..e67522e 100644 --- a/User.c +++ b/User.c @@ -1,4 +1,4 @@ -#include "MAIN.H" +#include "MAIN.H"- #include "RTC.H" #include "temperature.H" #include @@ -380,13 +380,13 @@ void CanRXTX(void) } GetTemp();//1s采集一次温度 - UnSwSample_1.bit_data.emergency_stop_switch = STOP_PIN; - UnSwSample_1.bit_data.High_voltage_switch = ~WAKE_UP_PIN; + UnSwSample_1.bit_data.emergency_stop_switch = 0; + UnSwSample_1.bit_data.High_voltage_switch = 1; UnSwSample_1.bit_data.CH03 = flg_wake_ecu; if(1 == flg_KGF)//等待KGF唤醒后再发送数据 { -// canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1.arr[0]); //不需要发送 小车不需要采集 + canSendTo(DF_SwTxTemp,(ubyte *)&UnSwSample_1.arr[0]); //不需要发送 小车不需要采集 } } diff --git a/temperature.C b/temperature.C index 678d050..c3b16ee 100644 --- a/temperature.C +++ b/temperature.C @@ -89,12 +89,12 @@ unsigned char read_bit(void) P3_DIR = P3_DIR | 0x20; // load direction register 切换为输出状态 DQ = 0; // 主机拉低 DQ 总线 - Delay_us(1); // 拉低 DQ 总线 持续 3us + DELAY_3US(); // 拉低 DQ 总线 持续 3us DQ = 1; // 主机释放 DQ 总线,由上拉电阻拉高 SFR_PAGE(_pp0, noSST); // switch to page 0 P3_DIR = P3_DIR & 0xDF;// load direction register - Delay_us(3); // 等待 10us 确保总线上数据稳定 + DELAY_10US(); // 等待 10us 确保总线上数据稳定 res = DQ; Delay_us(27); // 时序末尾 等待 @@ -109,11 +109,11 @@ void write_bit(char bitval) P3_DIR = P3_DIR | 0x20; // load direction register 切换为输出状态 DQ = 0; // 主机拉低 DQ 总线 - Delay_us(2); // 拉低 DQ 总线 持续 5us + DELAY_3US(); // 拉低 DQ 总线 持续 5us if(bitval == 1) DQ =1; // 如果 写 1,此时拉高 DQ 总线 - Delay_us(25); // 如果 写 0,则持续拉低 DQ 总线 60 us + Delay_us(30); // 如果 写 0,则持续拉低 DQ 总线 60 us DQ = 1; // 释放 DQ 总线 - Delay_us(5); // (写 0)恢复 时间 10us + DELAY_10US(); // (写 0)恢复 时间 10us } ///////////////////////////////////////////////////////////////////// @@ -268,63 +268,35 @@ BOOL ConvertTemp(void) * @param iTemp:返回的16位温度测量结果 * @retval 读状态 */ -//BOOL ReadTempWaiting(uword *iTemp) -//{ -// ubyte scrb[sizeof(M601_SCRATCHPAD_READ)]; -// M601_SCRATCHPAD_READ *scr = (M601_SCRATCHPAD_READ *) scrb; +BOOL ReadTempWaiting(uword *iTemp) +{ + ubyte scrb[sizeof(M601_SCRATCHPAD_READ)]; + M601_SCRATCHPAD_READ *scr = (M601_SCRATCHPAD_READ *) scrb; -// /*读9个字节。前两个是温度转换结果,最后字节是前8个的校验和--CRC。*/ -// if(M601_ReadScratchpad_SkipRom(scrb) == FALSE) -// { -// UnSwSample_1.bit_data.temperature[1] = 1; -// return FALSE; /*读寄存器失败*/ -// } + /*读9个字节。前两个是温度转换结果,最后字节是前8个的校验和--CRC。*/ + if(M601_ReadScratchpad_SkipRom(scrb) == FALSE) + { + UnSwSample_1.bit_data.temperature[1] = 1; + return FALSE; /*读寄存器失败*/ + } -// /*计算接收的前8个字节的校验和,并与接收的第9个CRC字节比较。*/ -// UnSwSample_1.bit_data.temperature[1] = scrb[8]; + /*计算接收的前8个字节的校验和,并与接收的第9个CRC字节比较。*/ + UnSwSample_1.bit_data.temperature[1] = scrb[8]; // if(scrb[8] != MY_OW_CRC8(scrb, 8)) // { // return FALSE; /*CRC验证未通过*/ // } -//// UnSwSample_1.bit_data.temperature[1] = *iTemp; -// /*将温度测量结果的两个字节合成为16位字。*/ -// *iTemp = ((uword)(scr->T_msb) << 8) | scr->T_lsb; -// -// return TRUE; -//} +// UnSwSample_1.bit_data.temperature[1] = *iTemp; + /*将温度测量结果的两个字节合成为16位字。*/ + *iTemp = ((uword)(scr->T_msb) << 8) | scr->T_lsb; + + return TRUE; +} -/** - * @brief 启动温度测量并读温 - * @param 无 - * @retval 状态 -*/ -//BOOL GetTemp(void) -//{ -// static uword intTemp = 0;//定义为静态变量,否则会出现值自己变化 -// float fTemp; -// int signedInt_f_tem = 0; -////--------------------------------------- -// intTemp = 0; -// if(ConvertTemp() == FALSE) return FALSE; -// Delay_us(6000); -// ReadTempWaiting(&intTemp); - -// signedInt_f_tem = (int)intTemp; -// -// fTemp = ( (float)(signedInt_f_tem)/256.0 ) + 40.0; -// -// -//// fTemp = M601_OutputtoTemp(signedInt_f_tem); -//// 将浮点数转换为有符号整型 -// signedInt_f_tem = (int)(fTemp*10); -//// 温度 有符号整型转成无符号整形 -// UnSwSample_1.bit_data.temperature[0] = signedInt_f_tem; -// return TRUE; -//} /**----------------------------------------------------------------------- * @brief 主机从芯片读取两个bit(读取顺序:低位->高位) * @param 无 @@ -460,26 +432,58 @@ BOOL M601_ReadScratchpad(unsigned char* scr, unsigned char j) * @param j :search到的芯片的序号,如总线上只有一颗芯片,j赋值0 * @retval 读状态 */ -BOOL ReadTempWaiting(unsigned short* iTemp, unsigned char j) -{ - unsigned char scrb[sizeof(M601_SCRATCHPAD_READ)]; - M601_SCRATCHPAD_READ* scr = (M601_SCRATCHPAD_READ*)scrb; +//BOOL ReadTempWaiting(unsigned short* iTemp, unsigned char j) +//{ +// unsigned char scrb[sizeof(M601_SCRATCHPAD_READ)]; +// M601_SCRATCHPAD_READ* scr = (M601_SCRATCHPAD_READ*)scrb; - /*读9个字节。前两个是温度转换结果,最后字节是前8个的校验和--CRC。*/ - if (M601_ReadScratchpad(scrb, j) == 0) - { - return FALSE; /*读寄存器失败*/ - } +// /*读9个字节。前两个是温度转换结果,最后字节是前8个的校验和--CRC。*/ +// if (M601_ReadScratchpad(scrb, j) == 0) +// { +// return FALSE; /*读寄存器失败*/ +// } - /*计算接收的前8个字节的校验和,并与接收的第9个CRC字节比较。*/ - if (scrb[8] != MY_OW_CRC8(scrb, 8)) - { - return FALSE; /*CRC验证未通过*/ - } +// /*计算接收的前8个字节的校验和,并与接收的第9个CRC字节比较。*/ +// if (scrb[8] != MY_OW_CRC8(scrb, 8)) +// { +// return FALSE; /*CRC验证未通过*/ +// } - /*将温度测量结果的两个字节合成为16位字。*/ - *iTemp = (unsigned short)scr->T_msb << 8 | scr->T_lsb; +// /*将温度测量结果的两个字节合成为16位字。*/ +// *iTemp = (unsigned short)scr->T_msb << 8 | scr->T_lsb; +// return TRUE; +//} + + + +/** + * @brief 启动温度测量并读温 + * @param 无 + * @retval 状态 +*/ + +BOOL GetTemp(void) +{ + static uword intTemp = 0;//定义为静态变量,否则会出现值自己变化 + float fTemp; + int signedInt_f_tem = 0; +//--------------------------------------- +// intTemp = 0; + if(ConvertTemp() == FALSE) return FALSE; + Delay_us(6500); + ReadTempWaiting(&intTemp); + + signedInt_f_tem = (int)intTemp; + + fTemp = ( (float)(signedInt_f_tem)/256.0 ) + 40.0; + + +// fTemp = M601_OutputtoTemp(signedInt_f_tem); +// 将浮点数转换为有符号整型 + signedInt_f_tem = (int)(fTemp*10); +// 温度 有符号整型转成无符号整形 + UnSwSample_1.bit_data.temperature[0] = signedInt_f_tem; return TRUE; } /** @@ -487,32 +491,32 @@ BOOL ReadTempWaiting(unsigned short* iTemp, unsigned char j) * @param 无 * @retval 状态 */ -BOOL GetTemp(void) -{ - float fTemp; - static unsigned int iTemp[MAXNUM]; - int i; - int signedInt_f_tem = 0; -//---------------------------------------------------- -// memset(romid, 0, sizeof(romid));//清零 - - /*总线上所有芯片一起测温*/ - if(ConvertTemp() == FALSE) return FALSE; - Delay_us(6500); +//BOOL GetTemp(void) +//{ +// float fTemp; +// static unsigned int iTemp[MAXNUM]; +// int i; +// int signedInt_f_tem = 0; +////---------------------------------------------------- +//// memset(romid, 0, sizeof(romid));//清零 +// +// /*总线上所有芯片一起测温*/ +// if(ConvertTemp() == FALSE) return FALSE; +// Delay_us(6500); - - for (i = 0; i < RomNum; i++) //遍历所有芯片 - { - iTemp[i] = 0; - /*读温*/ - ReadTempWaiting(&iTemp[i], i); +// +// for (i = 0; i < RomNum; i++) //遍历所有芯片 +// { +// iTemp[i] = 0; +// /*读温*/ +// ReadTempWaiting(&iTemp[i], i); - fTemp = M601_OutputtoTemp((int)iTemp[i]); //温度输出的浮点数 +// fTemp = M601_OutputtoTemp((int)iTemp[i]); //温度输出的浮点数 - // 将浮点数转换为有符号整型 - signedInt_f_tem = (int)(fTemp*10); - // 温度 有符号整型转成无符号整形 - UnSwSample_1.bit_data.temperature[1] = (unsigned int)signedInt_f_tem; - } - return TRUE; -} +// // 将浮点数转换为有符号整型 +// signedInt_f_tem = (int)(fTemp*10); +// // 温度 有符号整型转成无符号整形 +// UnSwSample_1.bit_data.temperature[i] = (unsigned int)signedInt_f_tem; +// } +// return TRUE; +//} diff --git a/temperature.h b/temperature.h index 6722106..fc963f0 100644 --- a/temperature.h +++ b/temperature.h @@ -4,6 +4,16 @@ #include "MAIN.H" +#define DELAY_3US() _nop_(); _nop_(); _nop_() + +#define DELAY_5US() _nop_(); _nop_(); _nop_(); _nop_(); _nop_() + +#define DELAY_10US() _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); \ + _nop_(); _nop_(); _nop_(); _nop_(); _nop_() + + + + #define DQ P3_5 ///*Bit definition of config register*/ @@ -26,7 +36,7 @@ #define CFG_Repeatbility_High 0x02 -#define MAXNUM 5 /*总线级联最大芯片数量*/ +#define MAXNUM 5 /*鎬荤嚎绾ц仈鏈澶ц姱鐗囨暟閲*/ typedef enum { FALSE = 0, @@ -38,7 +48,7 @@ typedef struct { char Tha_set_lsb; char Tla_set_lsb; - ubyte Cfg; /*系统配置寄存器, RW*/ + ubyte Cfg; /*绯荤粺閰嶇疆瀵勫瓨鍣, RW*/ } M601_SCRATCHPAD_WRITE; @@ -64,14 +74,14 @@ typedef enum /*SRAM scratchpad*/ typedef struct { - ubyte T_lsb; /*The LSB of 温度结果, RO*/ - ubyte T_msb; /*The MSB of 温度结果, RO*/ - ubyte C1_lsb; /*The LSB of 电容通道C1, RO*/ - ubyte C1_msb; /*The MSB of 电容通道C1, Ro*/ + ubyte T_lsb; /*The LSB of 娓╁害缁撴灉, RO*/ + ubyte T_msb; /*The MSB of 娓╁害缁撴灉, RO*/ + ubyte C1_lsb; /*The LSB of 鐢靛閫氶亾C1, RO*/ + ubyte C1_msb; /*The MSB of 鐢靛閫氶亾C1, Ro*/ ubyte Tha_set_lsb; ubyte Tla_set_lsb; - ubyte Cfg; /*系统配置寄存器, RW*/ - ubyte Status; /*系统状态寄存器, RO*/ + ubyte Cfg; /*绯荤粺閰嶇疆瀵勫瓨鍣, RW*/ + ubyte Status; /*绯荤粺鐘舵佸瘎瀛樺櫒, RO*/ ubyte crc_scr; /*CRC for byte0-7, RO*/ } M601_SCRATCHPAD_READ; @@ -79,64 +89,64 @@ typedef struct -//20250116 增加温度采集字节 +//20250116 澧炲姞娓╁害閲囬泦瀛楄妭 typedef struct _StrSwSample { - unsigned int emergency_stop_switch : 1; // 通道1,急停开关 - unsigned int High_voltage_switch : 1; // 通道2,高压开关 - unsigned int CH03 : 1; // 通道3 - unsigned int CH04 : 1; // 通道4 - unsigned int CH05 : 1; // 通道5 - unsigned int CH06 : 1; // 通道6 - unsigned int CH07 : 1; // 通道7 - unsigned int CH08 : 1; // 通道8 - unsigned int CH09 : 1; // 通道9 - unsigned int CH10 : 1; // 通道10 - unsigned int CH11 : 1; // 通道11 - unsigned int CH12 : 1; // 通道12 - unsigned int CH13 : 1; // 通道13 - unsigned int CH14 : 1; // 通道14 - unsigned int CH15 : 1; // 通道15 - unsigned int CH16 : 1; // 通道16 - unsigned int CH17 : 1; // 通道17 - unsigned int CH18 : 1; // 通道18 - unsigned int CH19 : 1; // 通道19 - unsigned int CH20 : 1; // 通道20 - unsigned int CH21 : 1; // 通道21 - unsigned int CH22 : 1; // 通道22 - unsigned int CH23 : 1; // 通道23 - unsigned int CH24 : 1; // 通道24 - unsigned int CH25 : 1; // 通道25 - unsigned int CH26 : 1; // 通道26 - unsigned int CH27 : 1; // 通道27 - unsigned int CH28 : 1; // 通道28 - unsigned int CH29 : 1; // 通道29 - unsigned int CH30 : 1; // 通道30 - unsigned int CH31 : 1; // 通道31 - unsigned int CH32 : 1; // 通道32 + unsigned int emergency_stop_switch : 1; // 閫氶亾1锛屾ュ仠寮鍏 + unsigned int High_voltage_switch : 1; // 閫氶亾2锛岄珮鍘嬪紑鍏 + unsigned int CH03 : 1; // 閫氶亾3 + unsigned int CH04 : 1; // 閫氶亾4 + unsigned int CH05 : 1; // 閫氶亾5 + unsigned int CH06 : 1; // 閫氶亾6 + unsigned int CH07 : 1; // 閫氶亾7 + unsigned int CH08 : 1; // 閫氶亾8 + unsigned int CH09 : 1; // 閫氶亾9 + unsigned int CH10 : 1; // 閫氶亾10 + unsigned int CH11 : 1; // 閫氶亾11 + unsigned int CH12 : 1; // 閫氶亾12 + unsigned int CH13 : 1; // 閫氶亾13 + unsigned int CH14 : 1; // 閫氶亾14 + unsigned int CH15 : 1; // 閫氶亾15 + unsigned int CH16 : 1; // 閫氶亾16 + unsigned int CH17 : 1; // 閫氶亾17 + unsigned int CH18 : 1; // 閫氶亾18 + unsigned int CH19 : 1; // 閫氶亾19 + unsigned int CH20 : 1; // 閫氶亾20 + unsigned int CH21 : 1; // 閫氶亾21 + unsigned int CH22 : 1; // 閫氶亾22 + unsigned int CH23 : 1; // 閫氶亾23 + unsigned int CH24 : 1; // 閫氶亾24 + unsigned int CH25 : 1; // 閫氶亾25 + unsigned int CH26 : 1; // 閫氶亾26 + unsigned int CH27 : 1; // 閫氶亾27 + unsigned int CH28 : 1; // 閫氶亾28 + unsigned int CH29 : 1; // 閫氶亾29 + unsigned int CH30 : 1; // 閫氶亾30 + unsigned int CH31 : 1; // 閫氶亾31 + unsigned int CH32 : 1; // 閫氶亾32 -// unsigned int CH33 : 1; // 通道33 -// unsigned int CH34 : 1; // 通道34 -// unsigned int CH35 : 1; // 通道35 -// unsigned int CH36 : 1; // 通道36 -// unsigned int CH37 : 1; // 通道37 -// unsigned int CH38 : 1; // 通道38 -// unsigned int CH39 : 1; // 通道39 -// unsigned int CH40 : 1; // 通道40 -// unsigned int CH41 : 1; // 通道41 -// unsigned int CH42 : 1; // 通道42 -// unsigned int CH43 : 1; // 通道43 -// unsigned int CH44 : 1; // 通道44 +// unsigned int CH33 : 1; // 閫氶亾33 +// unsigned int CH34 : 1; // 閫氶亾34 +// unsigned int CH35 : 1; // 閫氶亾35 +// unsigned int CH36 : 1; // 閫氶亾36 +// unsigned int CH37 : 1; // 閫氶亾37 +// unsigned int CH38 : 1; // 閫氶亾38 +// unsigned int CH39 : 1; // 閫氶亾39 +// unsigned int CH40 : 1; // 閫氶亾40 +// unsigned int CH41 : 1; // 閫氶亾41 +// unsigned int CH42 : 1; // 閫氶亾42 +// unsigned int CH43 : 1; // 閫氶亾43 +// unsigned int CH44 : 1; // 閫氶亾44 // unsigned int reserve : 4; - unsigned int temperature[2]; // 温度 + unsigned int temperature[2]; // 娓╁害 } StrSwSample; typedef union _UnSwSample { - StrSwSample bit_data; // 使用定义的结构体变量名 - unsigned char arr[sizeof(StrSwSample)]; // 通过结构体类型确定大小 + StrSwSample bit_data; // 浣跨敤瀹氫箟鐨勭粨鏋勪綋鍙橀噺鍚 + unsigned char arr[sizeof(StrSwSample)]; // 閫氳繃缁撴瀯浣撶被鍨嬬‘瀹氬ぇ灏 } UnSwSample;