Compare commits

...

7 Commits
master ... dev

  1. 14
      keilp/stcTTSS2_W5.uvprojx
  2. 5
      source/.vscode/settings.json
  3. 23
      source/New0001.h
  4. 32
      source/app/app_task_reg.h
  5. 382
      source/app/app_weight.c
  6. 56
      source/app/app_weight.h
  7. 73
      source/app/main.c
  8. 421
      source/app/nouse/app_save.c
  9. 146
      source/app/nouse/app_save.h
  10. 473
      source/app/nouse/app_task_adc - 副本.c
  11. 214
      source/app/nouse/app_task_adc - 副本.h
  12. 30
      source/app/nouse/app_task_adc.c
  13. 29
      source/app/nouse/app_task_adc.h
  14. 124
      source/app/nouse/app_task_debug.c
  15. 32
      source/app/nouse/app_task_debug.h
  16. 64
      source/app/nouse/app_task_reg.c
  17. 64
      source/app/nouse/app_task_reg.c.bak
  18. 24
      source/app/nouse/app_task_uart0.c
  19. 11
      source/app/nouse/app_task_uart0.h
  20. 536
      source/app/nouse/app_weight.c
  21. 151
      source/app/nouse/app_weight.h
  22. 105
      source/app/nouse/app_weightzero.c
  23. 106
      source/app/nouse/app_weightzero.h
  24. 121
      source/app/nouse/common.c
  25. 79
      source/app/nouse/common.h
  26. 173
      source/asp/新建文件夹/SL_Sc7a20_FreeFall_Driver.c
  27. 207
      source/asp/新建文件夹/SL_Sc7a20_FreeFall_Driver.h
  28. 350
      source/asp/新建文件夹/SL_algo1.h
  29. BIN
      source/asp/新建文件夹/SL_algo1.lib
  30. 264
      source/asp/新建文件夹/SL_app.c
  31. 10
      source/asp/新建文件夹/SL_app1.h
  32. 46
      source/asp/新建文件夹/asp_moto.c
  33. 13
      source/asp/新建文件夹/asp_moto.h
  34. 87
      source/asp/新建文件夹/asp_para.c
  35. 67
      source/asp/新建文件夹/asp_para.h
  36. 588
      source/asp/新建文件夹/asp_schain.c
  37. 127
      source/asp/新建文件夹/asp_schain.h
  38. 620
      source/asp/新建文件夹/asp_weight_save.c
  39. 126
      source/asp/新建文件夹/asp_weight_save.h
  40. 691
      source/bsp/TTSSbsp/bsp_config.h
  41. 1787
      source/clib/c_lib.c.bak
  42. 121
      source/clib/c_lib.h.bak
  43. 359
      source/clib/c_type51.h.bak
  44. 405
      source/clib/新建文件夹/bit.h
  45. 1140
      source/clib/新建文件夹/c_printf - 复杂待待调试.c
  46. 29
      source/clib/新建文件夹/c_printf - 复杂待待调试.h
  47. 64
      source/clib/新建文件夹/c_printf.c
  48. 29
      source/clib/新建文件夹/c_printf.h
  49. 323
      source/clib/新建文件夹/c_type.h
  50. 340
      source/clib/新建文件夹/c_typeArm.h
  51. 1851
      source/clib/新建文件夹/clib.c
  52. 121
      source/clib/新建文件夹/clib.h
  53. 317
      source/clib/新建文件夹/type.h
  54. 384
      source/cpu/111/stc_macro.H
  55. 640
      source/cpu/111/stc_stc8hxx.h
  56. 589
      source/cpu/nouse/STC_stc8a8k.H
  57. 1394
      source/cpu/nouse/STC_stc8h3k.H
  58. 653
      source/cpu/nouse/stc_8A8K64D4.h
  59. 466
      source/cpu/nouse/stc_stc15w.H
  60. 746
      source/cpu/nouse/stc_stc8G1k.H
  61. 593
      source/cpu/nouse/stc_stc8f.h
  62. 278
      source/ctask/TTSS_task.c.bak
  63. 411
      source/ctask/TTSS_task.h.bak
  64. 228
      source/ctask/TTSS_tick.h.bak
  65. 93
      source/ctask/TTSS_time_stc.c.bak
  66. 23
      source/ctask/TTSS_time_stc.h.bak
  67. 98
      source/debug/debug_drv.c
  68. 5
      source/debug/debug_drv.h
  69. 203
      source/debug/debug_drv.h.bak
  70. 378
      source/debug/debug_drvdd.c
  71. BIN
      source/debug/testiic.uvla
  72. BIN
      source/msp/202204201431275395_202204201431274606.jpg
  73. 135
      source/msp/nouse/msp_adc.c
  74. 66
      source/msp/nouse/msp_adc.h
  75. 52
      source/msp/nouse/msp_id.c
  76. 40
      source/msp/nouse/msp_id.h
  77. 382
      source/msp/nouse/msp_iicM1.c
  78. 63
      source/msp/nouse/msp_iicM1.h
  79. 383
      source/msp/nouse/msp_iicM2.c
  80. 63
      source/msp/nouse/msp_iicM2.h
  81. 447
      source/msp/nouse/msp_iicMx c.c
  82. 63
      source/msp/nouse/msp_iicMx f.h
  83. 62
      source/msp/nouse/msp_iicN1.h
  84. 204
      source/msp/nouse/msp_time1.c
  85. 42
      source/msp/nouse/msp_time2.c
  86. 28
      source/msp/nouse/msp_time2.h
  87. 140
      source/msp/simiic n/msp_siic1.c
  88. 38
      source/msp/simiic n/msp_siic1.h
  89. 150
      source/msp/simiic n/msp_siic2.c
  90. 55
      source/msp/simiic n/msp_siic2.h
  91. 145
      source/msp/simiic n/msp_siic3.c
  92. 53
      source/msp/simiic n/msp_siic3.h
  93. 483
      source/msp/simiic n/msp_siicx.c
  94. 91
      source/msp/simiic n/msp_siicx.h
  95. BIN
      source/msp/simiic.zip
  96. BIN
      source/msp/uart/msp_UART3.zip
  97. 69
      source/msp/uart/msp_uart1.c
  98. 403
      source/msp/uart/msp_uartN.c.bak
  99. 173
      source/msp/uart/新建文件夹/msp_UART2.c
  100. 91
      source/msp/uart/新建文件夹/msp_UART2.h

14
keilp/stcTTSS2_W5.uvprojx

@ -7,7 +7,7 @@
<Targets>
<Target>
<TargetName>STC8H3K48S2</TargetName>
<TargetName>STC8H3K64S2</TargetName>
<ToolsetNumber>0x0</ToolsetNumber>
<ToolsetName>MCS-51</ToolsetName>
<TargetOption>
@ -45,7 +45,7 @@
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>..\out\</OutputDirectory>
<OutputName>stcTTSS2_w5</OutputName>
<OutputName>stcweight</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>
@ -132,13 +132,13 @@
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>1</LimitSpeedToRealTime>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>0</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RunToMain>0</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
@ -148,7 +148,7 @@
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>10</TargetSelection>
<TargetSelection>-1</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
@ -162,7 +162,7 @@
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver>BIN\STCMON51.DLL</Driver>
<Driver></Driver>
</TargetDlls>
</DebugOption>
<Utilities>
@ -176,7 +176,7 @@
</Flash1>
<bUseTDR>0</bUseTDR>
<Flash2></Flash2>
<Flash3>"" ()</Flash3>
<Flash3></Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>

5
source/.vscode/settings.json

@ -0,0 +1,5 @@
{
"files.associations": {
"msp_uart1.h": "c"
}
}

23
source/New0001.h

@ -1,23 +0,0 @@
day1
day2
day3
day4
day5
day6
day7
ECU功能验证

32
source/app/app_task_reg.h

@ -1,32 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_REG_H
#define _APP_TASK_REG_H
#include "TTSS_task.h"
#include "c_lib.h"
typedef struct _s_task_reglisten
{
TS_task task;
}S_TASK_REGVAL_LISTEN;
extern S_TASK_REGVAL_LISTEN s_task_reglisten;
extern void L3_task_reglisten_init(void);
extern void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s);
#endif // #ifndef _APP_TASK_ADC_H

382
source/app/app_weight.c

@ -251,25 +251,27 @@ void L3_task_weight_cal(void)
*/
#if 0
void L3_weight_ONdebug(u8 filter)//// ON listen function
{
if(filter == pd->filter)
{///filter num d1 d2 d3 ....dn
//// FE 08 11 22 33 44 55 66 77 88
/// printf("\r\nDdebug:FD R1 R2 R3 R4 R5 R6 ocr FD->");
/// printf4("22 ch:(%2X)-%2X S %2X=%2X\r\n",(int)pd->R1,(int)pd->R2,(int)pd->R3,(int)pd->ocr);
{
///filter num d1 d2 d3 ....dn
////FE 08 11 22 33 44 55 66 77 88
///printf("\r\nDdebug:FD R1 R2 R3 R4 R5 R6 ocr FD->");
///printf4("22 ch:(%2X)-%2X S %2X=%2X\r\n",(int)pd->R1,(int)pd->R2,(int)pd->R3,(int)pd->ocr);
L1_uartD_Arrayhex((u8*)pd,9);
switch (pd->ocr)
{
case 0x20:
//// 选择一个砝码,发送0x12指令,然后读取的数据 和砝码的重量使用 20 21 22参数来
////选择一个砝码,发送0x12指令,然后读取的数据 和砝码的重量使用 20 21 22参数来
///fx R1 R2 R3R4 R5R6 ocr
///Fe ch 00 2233 4455 20 0x2233 kg= 0x4455 adc
///Fe 00 00 0000 18D9 20
///Fe 01 00 00c8 1c2c 20
///Fe 02 00 0352 26f9 20
/// 0352 26f9
///00c8 1c2c
/// 0352 26f9
///00c8 1c2c
///Fe 22 33 44 55 21
///Fe 22 33 44 55 22
if(pd->R1 < 3)
@ -282,24 +284,22 @@ void L3_weight_ONdebug(u8 filter)//// ON listen function
}
L3_R_2_S();
L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN);
break;
case 0x35: ///// '5'///
//// 选择一个砝码,发送0x12指令,然后读取的数据 和砝码的重量使用 20 21 22参数来
///fx R1 R2 R3R4 R5R6 ocr
///Fe ch 00 2233 4455 35 kg= 0x2233
////校准20kg 输入 Fe 01 00 00 c8 02 00 35
///Fe 01 00 00 c8 02 00 35 kg= 0x00c8=200d///需要校准的重量的 20kg 200d=0xc8
///校准20kg 输入 Fe 01 00 00 c8 02 00 35
/// Fe 00 00 00 00 01 00 35 校准零点 不需要上电即可
/// Fe 01 00 00 c8 02 00 35 20kg 放置20kg 然后输入
/// Fe 02 00 01 d6 03 00 35 47kg 10个3kg砝码实际是27kg+20kg
////如果需要上位机设置 需要在上位机的串口 加上D4 D代表chuandi
////选择一个砝码,发送0x12指令,然后读取的数据 和砝码的重量使用 20 21 22参数来
///fx R1 R2 R3R4 R5R6 ocr
///Fe ch 00 2233 4455 35 kg= 0x2233
////校准20kg 输入 Fe 01 00 00 c8 02 00 35
///Fe 01 00 00 c8 02 00 35 kg= 0x00c8=200d///需要校准的重量的 20kg 200d=0xc8
///校准20kg 输入 Fe 01 00 00 c8 02 00 35
/// Fe 00 00 00 00 01 00 35 校准零点 不需要上电即可
/// Fe 01 00 00 c8 02 00 35 20kg 放置20kg 然后输入
/// Fe 02 00 01 d6 03 00 35 47kg 10个3kg砝码实际是27kg+20kg
////如果需要上位机设置 需要在上位机的串口 加上D4 D代表chuandi
if(pd->R1 < 3)
{
ts_weight_SPara.ts_WPoint[pd->R1].kg = D_2uc_u16(pd->R3,pd->R4);
@ -313,15 +313,17 @@ void L3_weight_ONdebug(u8 filter)//// ON listen function
L3_R_2_S();
L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN);
break;
case 0x21: /// 清零指令 把当前的重量值作为0点; 可以在pad上配置参数
////Fe 223344556677 21
////Fe 223344556677 21
L4_weight_print();
tst_weight.kgx10_zero = tst_weight.kgx10;
printf2("\r\n kgx10_zero= %4x(%4d)",tst_weight.kgx10_zero,tst_weight.kgx10_zero);
break;
case 0x23:
///Fe 11 22 33 44 55 66 23
///Fe 11 22 33 44 55 66 23
TTSS_run_times(3)
{
printf5("\r\n%d: %4x(%4d ) %4x(%6d)\r\n",(int)tst_v.i,
@ -329,27 +331,119 @@ void L3_weight_ONdebug(u8 filter)//// ON listen function
ts_weight_SPara.ts_WPoint[tst_v.i].adc,ts_weight_SPara.ts_WPoint[tst_v.i].adc);
}
break;
case 0x32: ///读取当前的重量和传感器数值
///Fe 223344556677 12
printfs("\r\n ");
L4_weight_print();
break;
case 0x33: ///读取当前的重量和传感器数值 hex
///Fe 223344556677 12
D_LED1_REV();
L4_weight_out();
D_LED1_REV();
break;
default:
printfs(" pp error\r\n ");
break;
break;
};
printfs("333");
}
}
#else
void L3_weight_ONdebug(u8 filter)//// ON listen function
{
// printf(" \r\n0->filter=%X ", (int)filter);
// printf(" \r\n1->filter=%X slaveId=%X cmd=%X len = %d ", (int)pd485->filter,(int)pd485->slaveId, (int)pd485->cmd, (int)ts_Urec[D_UART1].num);
// D_LED2_REV();
if(filter == pd485->filter)
{
// L1_uartD_Arrayhex((u8*)pd,9);
switch (pd485->cmd)
{
case 0x10:
////读取称重
D_LED1_REV();
L4_weight_out();
D_LED1_REV();
break;
case 0x20:
///// 校准
////选择一个砝码,发送0x12指令,然后读取的数据 和砝码的重量使用 20 21 22参数来
///fx R1 R2 R3R4 R5R6 ocr
///Fe ch 00 2233 4455 35 kg= 0x2233
////校准20kg 输入 Fe 01 00 00 c8 02 00 35
///Fe 01 00 00 c8 02 00 35 kg= 0x00c8=200d///需要校准的重量的 20kg 200d=0xc8
///校准20kg 输入 Fe 01 00 00 c8 02 00 35
/// Fe 00 00 00 00 01 00 35 校准零点 不需要上电即可
/// Fe 01 00 00 c8 02 00 35 20kg 放置20kg 然后输入
/// Fe 02 00 01 d6 03 00 35 47kg 10个3kg砝码实际是27kg+20kg
////如果需要上位机设置 需要在上位机的串口 加上D4 D代表chuandi
//AA 02 20 00 03 pIndex kgx10_0 kgx10_1 ocr 对pIndex(0/1/2)点进行校准,校准值为kgx10
if(pd485->buf[0] < 3)
{
ts_weight_SPara.ts_WPoint[pd485->buf[0]].kg = D_2uc_u16(pd485->buf[1],pd485->buf[2]);
ts_weight_SPara.ts_WPoint[pd485->buf[0]].adc = tst_weight.adc32;////使用当前采样值
// printf5("\r\nset %d: %4x(%6d) %4x(%6d)\r\n",(int)pd->R1,
// ts_weight_SPara.ts_WPoint[pd->R1].kg,ts_weight_SPara.ts_WPoint[pd->R1].kg,
// ts_weight_SPara.ts_WPoint[pd->R1].adc,ts_weight_SPara.ts_WPoint[pd->R1].adc);
D_LED1_REV();
L4_WPoint_out();
D_LED1_REV();
//写入IAP
L3_R_2_S();
L0_Iap_Program_array(D_EEP_BASE,D_struct2U8(S),D_S_LEN);
}
break;
case 0x30:
/// 清零指令 把当前的重量值作为0点; 可以在pad上配置参数
////Fe 223344556677 21
//L4_weight_print();
tst_weight.kgx10_zero = tst_weight.kgx10;
//printf2("\r\n kgx10_zero= %4x(%4d)",tst_weight.kgx10_zero,tst_weight.kgx10_zero);
D_LED1_REV();
L4_kgx10zero_out();
D_LED1_REV();
break;
case 0x40:
///Fe 11 22 33 44 55 66 23
TTSS_run_times(3)
{
printf5("\r\n%d: %4x(%4d ) %4x(%6d)\r\n",(int)tst_v.i,
ts_weight_SPara.ts_WPoint[tst_v.i].kg,ts_weight_SPara.ts_WPoint[tst_v.i].kg,
ts_weight_SPara.ts_WPoint[tst_v.i].adc,ts_weight_SPara.ts_WPoint[tst_v.i].adc);
}
break;
case 0x50: ///读取当前的重量和传感器数值
///Fe 223344556677 12
printfs("\r\n ");
L4_weight_print();
break;
default:
printfs(" pp error\r\n ");
break;
};
}
}
#endif
void L4_weight_print(void)
{
L1_uartD_ushex(ts_adc_samples[0].out1_adc);L1_uartD_uc(' ');
@ -376,9 +470,11 @@ void L4_weight_print(void)
printf2("out (%d)%4x\r\n", tst_weight.kgx10_out,tst_weight.kgx10_out);
}
TS_weight_out_ ts_weight_out;
#if 0
TS_weight_out_ ts_weight_out;
void L4_weight_out(void)
{
ts_weight_out.fx = 0x55;
@ -401,207 +497,57 @@ void L4_weight_out(void)
}
#if 0
#else
void L3_adc_zero(void)
TS_weight_out_ ts_weight_out;
void L4_weight_out(void)
{
L3_out_zero(0);
L3_out_zero(1);
L3_out_zero(2);
L3_out_zero(3);
// printf("\r\niapData.zeroout= %d = 0x%4x\r\n", iapData.zeroout, iapData.zeroout);
// printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset);
/*
S.sd.offset[0] = ts_adc_samples[0].offset;
S.sd.offset[1] = ts_adc_samples[1].offset;
S.sd.offset[2] = ts_adc_samples[2].offset;
S.sd.offset[3] = ts_adc_samples[3].offset;
ts_weight_SPara.offset[0] = S.sd.offset[0];
ts_weight_SPara.offset[1] = S.sd.offset[1];
ts_weight_SPara.offset[2] = S.sd.offset[2];
ts_weight_SPara.offset[3] = S.sd.offset[3];
L0_waitFree_uartN(0);
printf("\r\nR.sd.offset 0x%4x,0x%4x,0x%4x,0x%4x,\r\n",S.sd.offset[0],S.sd.offset[1],S.sd.offset[2],S.sd.offset[3]);
*/
/// L4_reg_2_iap();///写入iap
/// L4_iap_2_reg();///读取出来验证
U8 dnum = 12, total = 18;
ts_weight_out.filter = 0xAA;
ts_weight_out.slaveId = 0x02;
ts_weight_out.cmd = 0x10;
ts_weight_out.num[0] = (dnum >> 8) & 0xFF;
ts_weight_out.num[1] = dnum & 0xFF;
ts_weight_out.sensor_adc[0]=ts_adc_samples[0].out1_adc;
ts_weight_out.sensor_adc[1]=ts_adc_samples[1].out1_adc;
ts_weight_out.sensor_adc[2]=ts_adc_samples[2].out1_adc;
ts_weight_out.sensor_adc[3]=ts_adc_samples[3].out1_adc;
ts_weight_out.kgx10_out = tst_weight.kgx10_out;
ts_weight_out.adc32= tst_weight.adc32;////采样值用作校准时使用
ts_weight_out.ocr =0x33;
L1_uartD_Array((u8 *)&ts_weight_out,total);
}
void L3_task_weight_set(Ts_uart_rev_ *ph4)
TS_WPoint_out_ ts_wpoint_out;
void L4_WPoint_out(void)
{
TS_P_debug *td;
if(ph4->debugok)
{ ph4->debugok = 0;
td = (TS_P_debug *)ph4->buf;
/// TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
L0_uartN_uchexArray(0,ph4->buf, 8);
if(0xfd == td->filter)
{
if(0x04 == td->R1)///设置四个传感器的清零
{ //// fd 04 33 44 55
L0_uart0_sendstr("\r\n 4sensor zero \r\n");
L3_adc_zero();
}else if(0x01 == td->R1)///设置重量的清零
{ //// fd 04 33 44 55
L0_uart0_sendstr("\r\n--weight zero-- \r\na b= ");
}else if(0x02 == td->R1)///读取
{
if(0x00 == td->R2)
{//// fd 02 00 44 55
L0_uart0_sendstr("\r\n--read iapData-- \r\n");
L4_print_iap(&iapData);
}else
{//// fd 02 33 44 55
L0_uart0_sendstr("\r\n--read R.sd-- \r\n");
L4_print_iap(&R.sd);
}
}
else
{
L0_uart0_sendstr("\r\n command error \r\n");
}
}
else if(0xf5 == td->filter)
{///设置重量
if(td->R1 < 3)///
{
//// R1 R2 R3
//// f5 00 33 44 55 把当前的adc的值作为第R1个校准点的值
R.sd.zerows[td->R1].adc = (vU16)tst_weight.out6;
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证
}else
{
}
L0_waitFree_uartN(0);
printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)td->R1, (vU16)tst_weight.out6);
}
else if(0xf6 == td->filter)
{///设置砝码
if(td->R1 < 3)///
{
//// R1 R2 R3
//// f5 00 33 44 55 把当前第R1个校准曲线的点的kg的值 0x3344
R.sd.zerows[td->R1].kg = D_2uc_u16(R2,R3);
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证
}else
{
}
L0_waitFree_uartN(0);
printf("\r\nset [ %d],Kg = 0x%04x\r\n",(int)td->R1, R.sd.zerows[td->R1].kg );
}
else
{
}
}
U8 dnum = 12, total = 18;
ts_wpoint_out.filter = 0xAA;
ts_wpoint_out.slaveId = 0x02;
ts_wpoint_out.cmd = 0x20;
ts_wpoint_out.num[0] = (dnum >> 8) & 0xFF;
ts_wpoint_out.num[1] = dnum & 0xFF;
Lc_buf_from_const_uc(ts_wpoint_out.wpoint, S.weight_SPara.ts_WPoint , sizeof(S.weight_SPara.ts_WPoint));
ts_wpoint_out.ocr =0x33;
L1_uartD_Array((u8 *)&ts_wpoint_out,total);
}
/////////cc 2023/04/06--7:3:24 协议解析
void L3_weight_setPara(u8 filter)
TS_Kgx10zero_out_ ts_kgx10zero_out;
void L4_kgx10zero_out(void)
{
if(filter == Ts_debug.td->filter)
{
L1_uartD_uc('D');
L0_uart0_0d0a();
if(0x01 == Ts_debug.td->ocr)
{
if(0x04 == Ts_debug.td->R1)///设置四个传感器的清零
{ //// fd 04 33 44 01
L0_uart0_sendstr("\r\n 4sensor zero \r\n");
L3_adc_zero();
}else if(0x01 == Ts_debug.td->R1)///设置重量的清零
{ //// fd 01 33 44 01
L0_uart0_sendstr("\r\n--weight zero-- \r\na b= ");
}else if(0x02 == Ts_debug.td->R1)///读取
{
if(0x00 == Ts_debug.td->R2)
{//// fd 02 00 44 01
L0_uart0_sendstr("\r\n--read ts_weight_save-- \r\n");
L4_print_iap(&ts_weight_save);
}else
{//// fd 02 33 44 01
L0_uart0_sendstr("\r\n--read R.sd-- \r\n");
L4_print_iap(&R.sd);
}
}
else
{
L0_uart0_sendstr("\r\n command error \r\n");
}
}
else if(0x02 == Ts_debug.td->ocr)
{///设置重量
if(Ts_debug.td->R1 < 3)///
{
//// R1 R2 R3
//// fd 00 33 44 02 把当前的adc的值作为第R1个校准点的值
R.sd.zerows[Ts_debug.td->R1].adc = (vU16)tst_weight.out6;
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证
}else
{
}
L0_waitFree_uartN(0);
printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)Ts_debug.td->R1, (vU16)tst_weight.out6);
}
else if(0x03 == Ts_debug.td->ocr)
{///设置砝码
if(Ts_debug.td->R1 < 3)///
{ //200
//// R1 R2 R3
//// fd 00 33 44 03 把当前第R1个校准曲线的点的kg的值 0x3344
R.sd.zerows[Ts_debug.td->R1].kg = D_2uc_u16(Ts_debug.td->R2,Ts_debug.td->R3);
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证 20 14
}else
{
}
L0_waitFree_uartN(0);
printf("\r\nset [ %d],Kg = 0x%04x\r\n",(int)Ts_debug.td->R1, R.sd.zerows[Ts_debug.td->R1].kg );
}
else
{
}
}
U8 dnum = 2, total = 8;
ts_kgx10zero_out.filter = 0xAA;
ts_kgx10zero_out.slaveId = 0x02;
ts_kgx10zero_out.cmd = 0x30;
ts_kgx10zero_out.num[0] = (dnum >> 8) & 0xFF;
ts_kgx10zero_out.num[1] = dnum & 0xFF;
ts_kgx10zero_out.kgx10zero[0] = tst_weight.kgx10_zero >> 8 & 0xFF;
ts_kgx10zero_out.kgx10zero[1] = tst_weight.kgx10_zero >> 0 & 0xFF;
ts_kgx10zero_out.ocr =0x33;
L1_uartD_Array((u8 *)&ts_kgx10zero_out,total);
}
#endif

56
source/app/app_weight.h

@ -58,6 +58,17 @@ Layer1: bsp: bsp_cs1232 最底层的adc的采样
#include "msp_uart1.h"
#include "../bsp/bsp_cs1232.h"
/////水一般是18-19升,再加上桶,就是大约20公斤
typedef struct
{
vU16 kg;
vU16 adc; ///kg 对应的adc的采样值
}TS_weight_point_;///8Bytes
#if 0
typedef struct
{
///40Bytes
@ -76,12 +87,45 @@ typedef struct
}TS_weight_out_;
typedef struct
#else
typedef struct
{
vU16 kg;
vU16 adc; ///kg 对应的adc的采样值
u8 filter;
u8 slaveId;
u8 cmd;
u8 num[2];
vU16 sensor_adc[4];
vU16 kgx10_out;
vU16 adc32;
u8 ocr;
vU16 out6;
}TS_weight_out_;
typedef struct
{
u8 filter;
u8 slaveId;
u8 cmd;
u8 num[2];
TS_weight_point_ wpoint[3];
u8 ocr;
vU16 out6;
}TS_WPoint_out_;
typedef struct
{
u8 filter;
u8 slaveId;
u8 cmd;
u8 num[2];
u8 kgx10zero[2];
u8 ocr;
vU16 out6;
}TS_Kgx10zero_out_;
#endif
}TS_weight_point_;///8Bytes
#define D_rev0x55aa55aa 0x55aa55aa
@ -183,7 +227,9 @@ extern void L3_task_weight_handler(TS_TASK_weight_ *s);
///extern void L3_weight_setPara(u8 filter);
extern void L3_weight_ONdebug(u8 filter);
extern void L4_weight_print(void);
void L4_weight_out(void);
extern void L4_weight_out(void);
extern void L4_WPoint_out(void);
extern void L4_kgx10zero_out(void);
#define D_get_weight() tst_weight.kgx10

73
source/app/main.c

@ -28,7 +28,7 @@
void L0_RTC_init(void)
{
P_SW2 = 0x80;
P_SW2 = 0x80;
// XOSCCR =0;
///HIRCCR = 0;
IRC32KCR = 0x80; //启动内部32K IRC
@ -54,7 +54,6 @@ void L0_RTC_init(void)
Lc_delay_ms(200);
}
void L0_main_initled(void)
{
D_LED1_OFF();
@ -71,28 +70,22 @@ void L0_main_initled(void)
void L0_main_init(void)
{
int r = 0;
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>算法测试区域
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<算法测试区域
int r = 0;
Lc_delay_ms(200);
L0_main_initled();
CLKDIV = 0;////不分频,使用focs
L0_uart1_open();
/// L0_uart2_open();
L0_uart1_open();
L3_debug_drv_init();
L1_task_tick_init();
L0_timer0_Init();ET0 = 1;
L0_timer0_Init();
ET0 = 1;
printf1("\r\nD_sys_MainFre %ld",D_sys_MainFre);
r = L3_S_init();
printf1("\r\nL3_S_init %d",r);
}
//===============================================
@ -101,10 +94,7 @@ int r = 0;
void main(void)
{
u16 a= 0;
char d[9]={0xab};
//-----------------------------------------------
//系统初始化
//----------------------------------------------
char d[9]={0xab};
L0_main_init();
L3_task_weight_init();
@ -113,55 +103,26 @@ char d[9]={0xab};
printfs("\r\3 main while13\r\n");
//-----------------------------------------------
//系统主循环
//-----------------------------------------------
while(1)
{///44M 裸奔2us一个循环
//1>>>>>1>>>>>1>>>>>1>>>>>1>>>>>1>>>>> TTSS 1心跳>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
{
if(1 == s_nos_tick.t1s_heartbeat)///
{
s_nos_tick.t1s_heartbeat = 0;
///L1_uartD_uc('.');
D_LED2_REV();
// D_LED2_REV();
}
//1<<<<<1<<<<<1<<<<<1<<<<<1<<<<<1<<<<< TTSS 1心跳<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
//--------------------------------------------------------------------------------------
//>>>>>2>>>>>>2>>>>>2>>>>>2>>>>>2>>>>> TTSS 2 定期任务>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
TTSS_run_every(s_nos_tick.stamp,40)////500 -7s 70-1s TTSS 2需要主循环定时工作的任务:stamp需要防止被其他程序使用
D_LED1_REV(); L4_weight_out(); //// D_LED1_REV();
///55 0D 0C 90 F5 77 FF 52 80 00 00 00 33
TTSS_run_every_end
//// L1_expara_sample();///
//<<<<<2<<<<<<<2<<<<<<2<<<<<<2<<<<<<<TTSS 2 定期任务 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
//--------------------------------------------------------------------------------------
//>>>>>3>>>>>>>3>>>>>>3>>>>>>3>>>>>>>TTSS 3 debug>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
// TTSS_run_every(s_nos_tick.stamp,40)
// D_LED1_REV();
// L4_weight_out();
// ///55 0D 0C 90 F5 77 FF 52 80 00 00 00 33
// TTSS_run_every_end
if(L2_debug_ONcomand())
{
L3_test_ONdebug(D_cmd_filter_debug);///fd xx xx///
L3_weight_ONdebug(D_cmd_filter_weight);///fd xx xx///
//L3_ADC_debug(D_cmd_filter_adc);///fa xx xx
//L3_moto_debug(D_cmd_filter_moto);///f0 xx xx/
/// L3_lora_debug(D_cmd_filter_lora);//
L3_weight_ONdebug(D_cmd_filter_weight);///fe xx xx///
}
//<<<<<3<<<<<<<3<<<<<<<3<<<<<<3<<<<<<TTSS 3 debug><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
//--------------------------------------------------------------------------------------
//>>>>>>4>>>>>>>4>>>>>>4>>>>>>4>>>>>>TTSS 4 并行任务>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
L3_task_weight_handler(&tst_weight);
/// L2_task_move_handle(&ts_task_move);
//<<<<<4<<<<<<<<4<<<<<<4<<<<<<<4<<<<<TTSS 4 并行任务 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
//--------------------------------------------------------------------------------------
//>>>>>>5>>>>>>>5>>>>>>5>>>>>>5>>>>>>TTSS 5 日常任务 随机任务>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
//<<<<<5<<<<<<<5<<<<<<<5<<<<<<5<<<<<<TTSS 5 日常任务 随机任务<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.
L3_task_weight_handler(&tst_weight);
}
}

421
source/app/nouse/app_save.c

@ -1,421 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file app_save.c
/// @brief @ app save
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20220120
/// @note cc_AS_stc02
#ifdef doc453453
app_save
asp_para L1_para_write eeprom的读写函数和地址配置
U8 L1_para_write(U8 *buf, U8 len)
msp_eeprom mcu的eeprom的底层驱动函数
----------global_register-------------------------------->
iapData数据的映射
TS_GlobalRegisterd R
..........................................
//RO Register
U16 reserved1;
//RW Register
TS_IapData_ sd;//// save data 需要保存的额参数
-----------iapData-------------------------------------->
TS_IapData_ iapData
TS_IapData_ code iapData_factory
..................................................
S16 slaver_id;
ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
////此值上电后更改, 顺便保存(区别于实时保存),
u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
-----------eep_param----------------------------------->
eeprom中的缓存
eeprom ---,,.
TS_eeprom_param_
.........................................
U8 filter;
U8 len;
U8 buf[EEPROM_PARAM_DATA_MAX];
U8 crc[2];
#endif
//////////////////////////////////////////////////////////////////////////////
#include "app_save.h"
#include "app_config.h"
#include "debug_drv.h"
#define D_20kg 200
#define D_85kg 850
///#define D_20kg 190
TS_IapData_ iapData=
{
0xaabcd,
0x18da,0x18d9,0x18d9,0x18d9,///0x18da,0x18d9 0x18d9 0x18d9
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
123,
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
///vU16 zeroout; //2
8049,///30*0x134
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
2,5,
D_rev0x55aa55aa
};
TS_IapData_ code iapData_factory=
{
0xaabcd,
0x18da,0x18d9,0x18d9,0x18d9,///
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
123,
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
///vU16 zeroout; //2
8049,///30*0x134
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
2,5,
D_rev0x55aa55aa
};
//读取reg内容,写入iap
u8 L4_reg_2_iap(void)
{
Lc_buf_copy_uc((u8 *)&iapData,(u8 *)&R.sd,D_TS_IapData_SIZE);
//写入eeprom
if(L1_para_write((U8*)&iapData,sizeof(TS_IapData_)) == 0)
{
L0_uart0_sendstr("e2p write success");
return 0;
}else
{
return 1;
}
}
//读取factory内容,写入iap
u8 L4_factory_2_iap(void)
{
Lc_buf_copy_uc((u8 *)&iapData,(u8 *)&iapData_factory,D_TS_IapData_SIZE);
L0_uart0_sendstr("\r\nFFFFF return to factory");
//写入eeprom
if(L1_para_write((U8*)&iapData,D_TS_IapData_SIZE) == 0)
{ L0_uart0_sendstr(" ok");
return 0;
}else
{ L0_uart0_sendstr(" error");
return 1;
}
}
///// 多次读取
void L4_iap_2_reg(void)
{
U8 d,len = 0,i = 0;
len = D_TS_IapData_SIZE;///sizeof(TS_IapData_);
/// printf("\r\n len = %d\r\n",len);
L0_uart0_sendstr("\r\nRRRRRRRRRRRRRRRRRRRRRRRRRRRRR\r\n");
/// L0_uart0_uchex(len);
do
{
d = L1_para_read((U8*)&iapData,&len);
if(d == 1)
{////读取错误
L0_uart0_sendstr("e2p read failed\r\n");
L4_factory_2_iap();
}else
{
/// L0_uartD_uchexArray((u8 *)&iapData,len);
L4_print_iap(&iapData);
if(D_rev0x55aa55aa != iapData.rev0x55aa55aa)
{
L0_uart0_sendstr("iapData_factory\r\n");L0_waitFree_uartN(0);
L1_para_write((U8*)&iapData_factory,len);
}else
{
L0_uart0_sendstr("e2p read success\r\n");L0_waitFree_uartN(0);
Lc_buf_copy_uc((u8 *)&R.sd,(u8 *)&iapData,len);
L4_print_iap(&R.sd);
break;
}
}
i ++;
}while(i < 3);
}
void L4_print_iap(TS_IapData_ *s)
{
L0_uart0_sendstr("\r\n--print_reg-- \r\na b= ");
L0_uart0_uchex(s->ADC_shiftaverage_a);
L0_uart0_uc(' ');
L0_uart0_uchex(s->ADC_shiftaverage_b);
L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
printf("\r\nfactory_ws\r\n %d kg = 0x%4x\r\n", s->factory_ws[0].kg,s->factory_ws[0].adc);
printf(" %d kg = 0x%4x\r\n", s->factory_ws[1].kg,s->factory_ws[1].adc);
printf(" %d kg = 0x%4x\r\n", s->factory_ws[2].kg,s->factory_ws[2].adc);
printf("\r\nzerows\r\n %d kg = 0x%4x\r\n", s->zerows[0].kg,s->zerows[0].adc);
printf(" %d kg = 0x%4x\r\n", s->zerows[1].kg,s->zerows[1].adc);
printf(" %d kg = 0x%4x\r\n", s->zerows[2].kg,s->zerows[2].adc);
printf("\r\ns->zeroout= %d = 0x%4x\r\n", s->zeroout, s->zeroout);
printf("\r\ns->sensor 0x%04x 0x%04x 0x%04x 0x%04x\r\n",s->sensor[0],s->sensor[1],s->sensor[2],s->sensor[3]);
printf("\r\ns->ADC_shiftaverage_a 0x%02x s->ADC_shiftaverage_b 0x%02x\r\n",(int)s->ADC_shiftaverage_a ,(int)s->ADC_shiftaverage_b );
printf("\r\n-----print_reg end--------\r\n");
}
/*******
L0_uart0_sendstr("\r\nfactory_ws= ");
L0_uart0_ushex(iapData.factory_ws[0].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[0].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.factory_ws[1].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[1].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.factory_ws[2].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[3].adc);L0_uart0_0d0a();
L0_uart0_sendstr("\r\nzerows= ");
L0_uart0_ushex(iapData.zerows[0].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[0].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.zerows[1].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[1].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.zerows[2].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[3].adc);L0_uart0_0d0a();
63 = 0x 3
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4
4
v3.4
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR
2800 01 00 02 00 03 00 04 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x0001 0x0002 0x0003 0x0004
e2p read success
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x0001 0x0002 0x0003 0x0004
8
ADC_SAMPLE
ADC_SAMPLE
ADC_SAMPLE
ADC_SAMPLE
R.sd.zeroout= 8049 = 0x1f71 offset 1 = 0x 1
R.sd.zeroout= 8049 = 0x1f71 offset 2 = 0x 2
R.sd.zeroout= 8049 = 0x1f71 offset 3 = 0x 3
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4
4Z00 FDAA 21C7 Z02 13EF 0B82 Z03 FD31 2240 Z01 F49D 2AD4 1F3D 1F6D 13F2 1F35 1C74 001E
1EF0 1F64 13F2 1EF7 1C4F 001D
1EA8 1F4A 1EAF 1EB8 1ED6 0025
1E5F 1F44 1E5A 1E55 1E94 0024
1E14 1F3D 1E19 1E74 1E77 0023
1DD3 1F2F 1DD4 1E39 1E43 0023
1D92 1F20 1D8C 1E37 1E1D 0022
1D4C 1F0E 1D4F 1DCF 1DDE 0022
1D0B 1EFF 1D01 1D7F 1DA2 0021
1CEA 1EF4 1CBD 1D49 1D79 0021
FD 04 33 44 55 00 00 00
4sensor zero
R.sd.sensor 0x245d 0x2b5a 0x e46 0x2478
&e2p write success
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR
2824 5D 2B 5A 0E 46 24 78 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
e2p read success
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1F28 1F65 1CAE 1F2D 1E9A 0024
1EEA 1F58 1EF4 1F37 1F1B 0025
1EA3 1F45 1EB3 1ECE 1EDA 0025
1E72 1F35 1E69 1E92 1EA8 0024
1E2A 1F25 1E2B 1E7B 1E7D 0023
FD 02 33 44 55 00 00 00
--read --
a b=
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1DE4 1F16 1DE6 1E20 1E40 0023
1DA3 1F06 1DA8 1DFB 1E13 0022
1D7C 1EF4 1D67 1DA9 1DE0 0022
1D37 1EE6 1D28 1D53 1DA6 0021
1CE9 1ED4 1CE7 1D37 1D76 0020
1CA7 1EC2 1CA6 1D02 1D44 0020
1C5F 1EAF 1C60 1CA3 1D04 001F
1C2D 1EA1 1C24 1C58 1CD2 001F
1BEB 1E93 1BDC 1C21 1C9E 001E
FD 03 33 44 55 00 00 00
--read R.sd--
a b=
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1BAB 1E83 1B98 1BDB 1C68 001D
1B7D 1E70 1B5A 1BA3 1C3A 001D
1B32 1E5F 1B0B 1AF9 1BE5 001C
1AEA 1E53 1AD3 1AEE 1BBF 001B
*********/

146
source/app/nouse/app_save.h

@ -1,146 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file app_save.h
/// @brief @ app save
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20220120
/// @note cc_AS_stc02
/*********
1,
1 512---4-6ms
01
,,
,
--->,
1,,512
30
2, ,.--->,;
flash 28k 8k EEp 28K的最后8K 5000h-6FFFh
*******/
/*******
app_config app_save
app_save ,
,西,,使bsp中
asp ,app通过参数调用asp,使.
,.
app ,
asp app support program wifi的模式设置,adc的读取后的处理
bsp board support program ,wdt,wifi的底层配置函数,sensor
msp mcu support program ,cpu自身的外设,uart led
cpu
*****/
/*******
adc采样值
^
|
| o
| |
| o |
| | |
| ---|---- |------------0=adc=0
0 | |D_ADC_OFFSET
|____|_____|____________> adc + D_ADC_OFFSET
0 40 80
西:
1,< >
2, 0kg的时候的<>
3,<> + <>
3.1 ,250kg,,,.<250kg,>
4, : <(+-10kg)>,<>
,.
5,,<>,,.
4,.
B:4,.
---->C: 4.5 ,
c,,0 (H1sL0.5s)3
西:
< > Byte x n=? .
Byte x n=? .
<> Byte x n=? .
<> ,
,250kg
,id之类的
3,,,使.使.
*****/
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_SAVE_H
#define _APP_SAVE_H
#include "TTSS_task.h"
#include "c_lib.h"
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
#include "msp_uartN.h"
#include "asp_para.h"
#include "app_weight.h"
////#include "asp_adc.h"
#define D_rev0x55aa55aa 0x55aa55aa
////需要向eeprom中存储的数据
typedef struct _iap_data
{
///40Bytes
S16 slaver_id;
vU16 sensor[4];//// 4x2与第一个传感器的差值,第一个传感器为偏移量
ts_weight_sheet_ factory_ws[3]; ///4x3=12 出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
ts_weight_sheet_ zerows[3]; ///4x3=12 手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
vS16 zerodiff_max; ///2 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
vS16 zerodiff; ///2零点的差值 零公斤位置和手工的差值
////此值上电后更改, 顺便保存(区别于实时保存),
vU16 zeroout; //2
u8 ADC_shiftaverage_a; ///2 a路移位滤波的参数 由上位机命令更改,实时保存
u8 ADC_shiftaverage_b; /// b路移位滤波的参数 由上位机命令更改,实时保存
U32 rev0x55aa55aa;
}TS_IapData_;
extern TS_IapData_ iapData;
#define D_TS_IapData_SIZE 46///
extern void L4_iap_2_reg(void);
void L4_print_iap(TS_IapData_ *s);
u8 L4_reg_2_iap(void);
#endif // #ifndef _APP_TASK_ADC_H

473
source/app/nouse/app_task_adc - 副本.c

@ -1,473 +0,0 @@
#include "app_task_adc.h"
#include "../msp/UART0.h"
//TS_ADC_CH_SWITCH ts_adc_ch_switch;
TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num];
//TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num];
TS_ADC_ALL_BLUR ts_adc_all_blur;
TS_ADC_ALL_OUT ts_adc_all_out;
TS_ADC_SHOW ts_adc_show;
TS_ADC_CH_MID_BLUR ts_adc_ch_mid_blur[D_ch_max_num];
TS_ADC_CH_AVG_BLUR ts_adc_ch_avg_blur[D_ch_max_num];
TS_ADC_CH_SHIFT_BLUR ts_adc_ch_shift_blur[D_ch_max_num];
static U8 count_n(u8 n,u8 d)
{
if(n < d)
{
return MAX_OUT_NUM + n - d ;
}
else
{
return n-d;
}
}
U32 Abs(S32 a)
{
if(a < 0)
{
a = -a;
}
return a;
}
void L3_task_adc_init(U8 ch)
{
//通道采集任务初始化
L1_task_init(&ts_adc_ch_sample[ch].task);
L3_task_s_go(ts_adc_ch_sample[ch],D_task_init);
ts_adc_ch_sample[ch].status = R.p.adc_ch_status & (ADC_status_chx_Ready_BASE << ch);
ts_adc_ch_sample[ch].pool = 0;
ts_adc_ch_sample[ch].adcval = 0;
ts_adc_ch_sample[ch].n = 0;
ts_adc_ch_sample[ch].ch = D_ADCCH_1 + ch;
//单路中值滤波
L1_task_init(&ts_adc_ch_mid_blur[ch].task);
L3_task_s_go(ts_adc_ch_mid_blur[ch],D_task_init);
ts_adc_ch_mid_blur[ch].n = 0;
ts_adc_ch_mid_blur[ch].max = 1;
ts_adc_ch_mid_blur[ch].ch = D_ADCCH_1 + ch;
//单路均值滤波
L1_task_init(&ts_adc_ch_avg_blur[ch].task);
L3_task_s_go(ts_adc_ch_avg_blur[ch],D_task_init);
ts_adc_ch_avg_blur[ch].max = R.p.cc_blur_ch_avg;
ts_adc_ch_avg_blur[ch].avgval = 0;
ts_adc_ch_avg_blur[ch].n = 0;
ts_adc_ch_avg_blur[ch].ch = D_ADCCH_1 + ch;
//单路移位滤波
L1_task_init(&ts_adc_ch_shift_blur[ch].task);
L3_task_s_go(ts_adc_ch_shift_blur[ch],D_task_init);
ts_adc_ch_shift_blur[ch].n = 0;
ts_adc_ch_shift_blur[ch].max = 1;
ts_adc_ch_shift_blur[ch].sum = 0;
ts_adc_ch_shift_blur[ch].shiftval = 0;
ts_adc_ch_shift_blur[ch].ch = D_ADCCH_1 + ch;
#if 0
L1_task_init(&ts_adc_ch_blur[i].task);
L3_task_s_go(ts_adc_ch_blur[i],D_task_init);
ts_adc_ch_blur[i].SA_sum = 0;
ts_adc_ch_blur[i].SA_avg = 0;
ts_adc_ch_blur[i].SA_n = 0;
ts_adc_ch_blur[i].SHA_sum = 0;
ts_adc_ch_blur[i].SHA_avg = 0;
ts_adc_ch_blur[i].n = 0;
ts_adc_ch_blur[i].ch = D_ADCCH_1 + i;
ts_adc_ch_blur[i].ch_n = TS_ADC_CH_01 + i;
#endif
L1_task_init(&ts_adc_all_blur.task);
L3_task_s_go(ts_adc_all_blur,D_task_init);
ts_adc_all_blur.n = 0;
ts_adc_all_blur.sum = 0;
ts_adc_all_blur.SHA_sum_0 = 0;
ts_adc_all_blur.SHA_avg_0 = 0;
ts_adc_all_blur.SHA_pool_0[0] = ts_adc_all_blur.SHA_pool_0[1] = ts_adc_all_blur.SHA_pool_0[2] = 0;
ts_adc_all_blur.SHA_sum_1 = 0;
ts_adc_all_blur.SHA_avg_1 = 0;
////ts_adc_all_blur.SHA_pool_1[0] = ts_adc_all_blur.SHA_pool_1[1] = ts_adc_all_blur.SHA_pool_1[2] = 0;
L1_task_init(&ts_adc_all_out.task);
L3_task_s_go(ts_adc_all_out,D_task_init);
ts_adc_all_out.n = 0;
for(i=0;i<D_ADC_CH_BLUE_POOL_NUM;i++)
{
ts_adc_all_out.SHA_pool[i] = 0;
}
L1_task_init(&ts_adc_show.task);
L3_task_s_go(ts_adc_show,D_task_init);
ts_adc_show.pool_val = 0;
ts_adc_show.pool_gt = 1;
ts_adc_show.val = 0;
for(i=0;i<D_weight_show_limit_num;i++)
{
ts_adc_show.times[i] = 0;
}
}
//#define D_SA_mid(X); ts_sample[X].midv = Lc_S32_media3(ts_sample[X].mid[0],ts_sample[X].mid[1],ts_sample[X].mid[2]);
#define D_ADC_CHANNEL_READY(X) (R.p.adc_ch_status & (ADC_status_chx_Ready_BASE << X))
#define D_task_ADC_CHx_SAMPLE 0x51
#define D_task_ADC_CHx_WAIT_HIGH_LEVEL 0x52
#define D_task_ADC_CHx_WAIT_LOW_LEVEL 0x53
#define D_task_ADC_CHx_READ 0x54
#define D_task_ADC_CHx_OUT 0x55
void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_SAMPLE);
TTSS_Task_step(D_task_ADC_CHx_SAMPLE)
if(D_ADC_CHANNEL_READY(s->ch))
{
L2_task_go(D_task_ADC_CHx_WAIT_LOW_LEVEL);
}
else
{
s->adcval = s->pool;
L2_task_go(D_task_ADC_CHx_OUT);
}
TTSS_Task_step(D_task_ADC_CHx_WAIT_LOW_LEVEL)
if(0 == L0_2dc_DOUT_AT(s->ch))
{
L2_task_go(D_task_ADC_CHx_READ);
}
TTSS_Task_step(D_task_ADC_CHx_READ)
s->adcval = L0_ADS1231_readCH(s->ch);
L2_task_go(D_task_ADC_CHx_OUT);
TTSS_Task_step(D_task_ADC_CHx_OUT)
s->pool = s->adcval;
s->out[s->n] = s->adcval;
L0_uart0_ulhex(s->out[s->n]);
L0_uart0_uc(' ');
L0_uart0_uc('\n');
s->n++;
if(s->n >= D_ADC_CH_SAMPLE_BUF_MAX)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_SAMPLE);
TTSS_Task_end();
}
//单路中值滤波任务
#define D_task_ADC_CHx_MID_BLUR_GET 0x51
#define D_task_ADC_CHx_MID_BLUR_COUNT 0x52
#define D_task_ADC_CHx_MID_BLUR_OUT 0x53
void L3_task_adc_ch_mid_blur(TS_ADC_CH_MID_BLUR *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_MID_BLUR_GET);
TTSS_Task_step(D_task_ADC_CHx_MID_BLUR_GET)
if(ts_adc_ch_sample[s->ch].n >= 1)
{
U8 i = 0;
for(i=0;i<s->max;i++)
{
s->in[i] = ts_adc_ch_sample[s->ch].out[i];
}
ts_adc_ch_sample[s->ch].n = 0;
L2_task_go(D_task_ADC_CHx_MID_BLUR_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_MID_BLUR_COUNT)
s->midval = Lc_vS32_media(s->in, s->max);
L2_task_go(D_task_ADC_CHx_MID_BLUR_OUT);
TTSS_Task_step(D_task_ADC_CHx_MID_BLUR_OUT)
s->out[s->n] = s->midval;
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_MID_BLUR_GET);
TTSS_Task_end();
}
//单路均值滤波任务
#define D_task_ADC_CHx_AVG_BLUR_GET 0x51
#define D_task_ADC_CHx_AVG_BLUR_COUNT 0x52
#define D_task_ADC_CHx_AVG_BLUR_OUT 0x53
void L3_task_adc_ch_avg_blur(TS_ADC_CH_AVG_BLUR *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_AVG_BLUR_GET);
TTSS_Task_step(D_task_ADC_CHx_AVG_BLUR_GET)
if(ts_adc_ch_mid_blur[s->ch].n >= s->max)
{
U8 i = 0;
for(i=0;i<s->max;i++)
{
s->in[i] = ts_adc_ch_mid_blur[s->ch].out[i];
}
ts_adc_ch_mid_blur[s->ch].n = 0;
L2_task_go(D_task_ADC_CHx_AVG_BLUR_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_AVG_BLUR_COUNT)
s->avgval = Lc_vU32_avg(s->in,s->max);
L2_task_go(D_task_ADC_CHx_AVG_BLUR_OUT);
TTSS_Task_step(D_task_ADC_CHx_AVG_BLUR_OUT)
s->out[s->n] = s->avgval;
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_AVG_BLUR_GET);
TTSS_Task_end();
}
//单路移位滤波任务
#define D_task_ADC_CHx_SHIFT_BLUR_GET 0x51
#define D_task_ADC_CHx_SHIFT_BLUR_COUNT 0x52
#define D_task_ADC_CHx_SHIFT_BLUR_OUT 0x54
void L3_task_adc_ch_shift_blur(TS_ADC_CH_SHIFT_BLUR *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_SHIFT_BLUR_GET);
TTSS_Task_step(D_task_ADC_CHx_SHIFT_BLUR_GET)
if(s->h != ts_adc_ch_avg_blur[s->ch].n)
{
s->in = ts_adc_ch_avg_blur[s->ch].out[count_n(ts_adc_ch_avg_blur[s->ch].n,1)];
s->h = ts_adc_ch_avg_blur[s->ch].n;
L2_task_go(D_task_ADC_CHx_SHIFT_BLUR_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_SHIFT_BLUR_COUNT)
s->sum -= s->shiftval;
s->sum += s->in;
s->shiftval = s->sum >> R.p.cc_blur_ch_shift;
L2_task_go(D_task_ADC_CHx_SHIFT_BLUR_OUT);
TTSS_Task_step(D_task_ADC_CHx_SHIFT_BLUR_OUT)
G.weight[s->ch] = D_COUNT_WEIGHT(s->shiftval);
s->n++;
L2_task_go(D_task_ADC_CHx_SHIFT_BLUR_GET);
TTSS_Task_end();
}
#define D_task_ADC_SHOW_GET 0x53
#define D_task_ADC_SHOW_1 0x54
#define D_task_ADC_SHOW_DEBUG 0x55
void L3_task_adc_show(TS_ADC_SHOW *s)
{
U8 i = 0,find = 0,j = 0;
TTSS_Task_init()
L2_task_go(D_task_ADC_SHOW_GET);
TTSS_Task_step(D_task_ADC_SHOW_GET)
if(ts_adc_ch_shift_blur[0].n >= 1)
{
ts_adc_ch_shift_blur[0].n = 0;
ts_adc_ch_shift_blur[1].n = 0;
ts_adc_ch_shift_blur[2].n = 0;
ts_adc_ch_shift_blur[3].n = 0;
s->val = G.weight[0] + G.weight[1] + G.weight[2] + G.weight[3];
L2_task_go(D_task_ADC_SHOW_1);
}
TTSS_Task_step(D_task_ADC_SHOW_1)
if((s->val - s->pool_val) * s->pool_gt < 0)
{
//符号改变,计数清0
//L0_uart0_uc('-');
L3_task_show_times_reset();
}
s->pool_gt = (s->val >= s->pool_val) ? 1 : -1;
s->diff_val = Lc_abs(s->val,s->pool_val);
for(i=0;i<D_weight_show_limit_num;i++)
{
if(R.p.weight_show_limit[i].times == 0)
{
break;
}
if(s->diff_val >= R.p.weight_show_limit[i].weight)
{
find = 1;
break;
}
}
if(find)
{
s->times[i]++;
for(j=0;j<D_weight_show_limit_num;j++)
{
if(j != i)
{
s->times[j] = 0;
}
}
}
else //小于显示分辨率(<0.02kg)
{
L3_task_show_times_reset();
}
for(i=0;i<D_weight_show_limit_num;i++)
{
if(s->times[i] >= R.p.weight_show_limit[i].times)
{
L3_task_show_times_reset();
s->pool_val = s->val;
G._total_weight = s->pool_val;
R.total_weight = L3_count_std_weight(G._total_weight);
break;
}
}
L2_task_go(D_task_ADC_SHOW_GET);
TTSS_Task_end();
}
void L3_task_show_times_reset()
{
U8 i = 0;
for(i=0;i<D_weight_show_limit_num;i++)
{
ts_adc_show.times[i] = 0;
}
}
void L3_task_adc_handler(u8 ch)
{
L3_task_adc_ch_sample(&ts_adc_ch_sample[ch]);
L3_task_adc_ch_mid_blur(&ts_adc_ch_mid_blur[ch]);
L3_task_adc_ch_avg_blur(&ts_adc_ch_avg_blur[ch]);
L3_task_adc_ch_shift_blur(&ts_adc_ch_shift_blur[ch]);
}
#if 0
//单路滤波任务
#define D_task_ADC_CHx_BLUR_GET 0x51
#define D_task_ADC_CHx_BLUR_AVG 0x52
#define D_task_ADC_CHx_BLUR_SHIFT 0x53
#define D_task_ADC_CHx_BLUR_COUNT 0x54
void L3_task_adc_ch_blur(TS_ADC_CH_BLUR *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_BLUR_GET);
TTSS_Task_step(D_task_ADC_CHx_BLUR_GET)
if(ts_adc_ch_sample[s->ch_n].n >= R.p.cc_blur_ch_avg)
{
s->SA_sum = ts_adc_ch_sample[s->ch_n].sum;
s->SA_n = ts_adc_ch_sample[s->ch_n].n;
ts_adc_ch_sample[s->ch_n].sum = 0;
ts_adc_ch_sample[s->ch_n].n = 0;
L2_task_go(D_task_ADC_CHx_BLUR_AVG);
}
TTSS_Task_step(D_task_ADC_CHx_BLUR_AVG)
s->SA_avg = s->SA_sum / s->SA_n;
L2_task_go(D_task_ADC_CHx_BLUR_SHIFT);
TTSS_Task_step(D_task_ADC_CHx_BLUR_SHIFT)
s->SHA_sum -= s->SHA_avg;
s->SHA_sum += s->SA_avg;
s->SHA_avg = (S32)(s->SHA_sum >> R.p.cc_blur_ch_shift);
s->n++;
L2_task_go(D_task_ADC_CHx_BLUR_COUNT);
TTSS_Task_step(D_task_ADC_CHx_BLUR_COUNT)
G.weight[s->ch_n] = D_COUNT_WEIGHT(s->SHA_avg);
L2_task_go(D_task_ADC_CHx_BLUR_GET);
TTSS_Task_end();
}
#define D_task_ADC_ALL_OUT_GET 0x51
#define D_task_ADC_ALL_OUT_DECIDE 0x52
#define D_task_ADC_ALL_OUT_SHOW 0x53
#define D_task_ADC_ALL_OUT_SHOW_1 0x54
#define D_task_ADC_ALL_OUT_DEBUG 0x55
void L3_task_adc_all_out(TS_ADC_ALL_OUT *s)
{
TTSS_Task_init()
//s->diff_threshold = (R.p.cc_blur_all_out_threshold);
//s->diff_threshold1 = (R.p.cc_blur_all_out_threshold1);
//s->diff_threshold2 = (R.p.cc_blur_all_out_threshold2);
//s->should_show_times_threshold = (R.p.cc_blur_all_out_should_show_times_threshold);
L2_task_go(D_task_ADC_ALL_OUT_GET);
TTSS_Task_step(D_task_ADC_ALL_OUT_GET)
if(ts_adc_all_blur.n >= 1)
{
ts_adc_all_blur.n = 0;
Lc_buf_copy_uc((U8*)s->SHA_pool, (U8*)ts_adc_all_blur.SHA_pool_0, D_ADC_CH_BLUE_POOL_NUM * sizeof(S32));
s->SHA_diff[0] = Lc_abs(s->SHA_pool[1] , s->SHA_pool[0]);
s->SHA_diff[1] = Lc_abs(s->SHA_pool[2] , s->SHA_pool[1]);
s->SHA_ddiff[0] = Lc_abs(s->SHA_diff[1] , s->SHA_diff[0]);
L2_task_go(D_task_ADC_ALL_OUT_DECIDE);
}
TTSS_Task_step(D_task_ADC_ALL_OUT_DECIDE)
if((s->SHA_diff[1] >= R.p.cc_blur_all_out_d_threshold) || (s->SHA_diff[0] >= R.p.cc_blur_all_out_d_threshold) || (s->SHA_ddiff[0] >= R.p.cc_blur_all_out_dd_threshold))
{
#if 1
s->sum = s->SHA_pool[2] + s->SHA_pool[1] + s->SHA_pool[0];
ts_adc_all_blur.SHA_sum_1 = s->sum;
ts_adc_all_blur.SHA_sum_1 <<= R.p.cc_blur_all_shift1;
ts_adc_all_blur.SHA_sum_1 /= 3;
ts_adc_all_blur.SHA_avg_1 = (S32)(ts_adc_all_blur.SHA_sum_1 >> R.p.cc_blur_all_shift1);
//s->val = ts_adc_all_blur.SHA_avg_0;
s->val = s->sum / 3;
//s->t = 0;
#else
ts_adc_all_blur.SHA_sum_1 = ts_adc_all_blur.SHA_avg_0 << R.p.cc_blur_all_shift1;
ts_adc_all_blur.SHA_avg_1 = ts_adc_all_blur.SHA_avg_0;
s->val = ts_adc_all_blur.SHA_avg_0;
//s->t = 0;
#endif
}
else
{
s->val = ts_adc_all_blur.SHA_avg_1;
//s->t = 1;
}
s->n++;
L2_task_go(D_task_ADC_ALL_OUT_GET);
TTSS_Task_end();
}
#endif

214
source/app/nouse/app_task_adc - 副本.h

@ -1,214 +0,0 @@
#ifndef APP_TASK_ADC_H
#define APP_TASK_ADC_H
#include "common.h"
#include "../ctask/task.h"
#include "../bsp/bsp_cs1232.h"
#include "../bsp/bsp_config.h"
#define D_ADC_BLUR_MID_MAX 5
enum D_TASK_ADC_CHANNEL
{
TS_ADC_CH_01 = 0x00,
TS_ADC_CH_02 = 0x01,
TS_ADC_CH_03 = 0x02,
TS_ADC_CH_04 = 0x03,
};
//对每一路进行采样
#define D_ADC_CH_SAMPLE_BUF_MAX 50
#define D_ADC_CH_BLUE_POOL_NUM 3
#define MAX_OUT_NUM 10
typedef struct
{
TS_task task;
vU8 pending_ch;
}TS_ADC_CH_SWITCH;
typedef struct
{
TS_task task;
vS32 adcval;
vS32 status;
vS32 pool;
vU8 ch;
vU8 n;
vU32 out[MAX_OUT_NUM];
}TS_ADC_CH_SAMPLE;
//中值滤波
typedef struct ts_adc_ch_mid_blur
{
TS_task task;
vU8 ch;
vU8 max;
vU32 in[MAX_OUT_NUM];
vU32 midval;
vU8 n;
vU32 out[MAX_OUT_NUM];
}TS_ADC_CH_MID_BLUR;
// 均值滤波
typedef struct ts_adc_ch_avg_blur
{
TS_task task;
vU8 ch;
vU8 max;
vU32 in[MAX_OUT_NUM];
vU32 avgval;
vU8 n;
vU32 out[MAX_OUT_NUM];
}TS_ADC_CH_AVG_BLUR;
// 移位滤波
typedef struct ts_adc_ch_shift_blur
{
TS_task task;
vU8 ch;
vU8 h;//均值有数值
vU8 n;//移位有值
vU8 max;
vU32 in;
vU32 sum;
vU32 shiftval;
vU32 out[MAX_OUT_NUM];
}TS_ADC_CH_SHIFT_BLUR;
#if 0
//对每一路进行滤波
typedef struct
{
TS_task task;
vU8 ch;
vU8 ch_n;
//平均滤波
vS32 SA_sum;
vS32 SA_avg;
vS32 SA_n;
//移位滤波
vS32 SHA_sum;
vS32 SHA_avg;
vU8 n;
}TS_ADC_CH_BLUR;
#endif
//和值滤波
typedef struct
{
TS_task task;
vU8 n;
vS32 sum;
vS32 SHA_sum_0;
vS32 SHA_avg_0;
vS32 SHA_pool_0[D_ADC_CH_BLUE_POOL_NUM];
vS32 SHA_sum_1;
vS32 SHA_avg_1;
//vS32 SHA_pool_1[D_ADC_CH_BLUE_POOL_NUM];
}TS_ADC_ALL_BLUR;
//和值阈值判定(滤波方式切换)决定输出
#define D_ADC_ALL_OUT_POOL_NUM 5
typedef struct
{
TS_task task;
vS32 val;
vS32 SHA_pool[D_ADC_CH_BLUE_POOL_NUM];
vU32 SHA_diff[D_ADC_CH_BLUE_POOL_NUM-1];
vU32 SHA_ddiff[D_ADC_CH_BLUE_POOL_NUM-2];
vU8 n;
vS32 sum;
}TS_ADC_ALL_OUT;
typedef struct
{
TS_task task;
vS8 pool_gt;
vS32 pool_val;
vS32 val;
vU16 u16_v;
U32 diff_val;
vU8 times[D_weight_show_limit_num];
U8 stable;
}TS_ADC_SHOW;
typedef struct
{
TS_task task;
U8 cnt1;//不稳定判定次数
U8 cnt2;//稳定判定次数
vS32 r_val;//实际值
vS32 s_val;//显示值
vS32 r_val_pool;//上一个实际值
vU8 n;
}TS_ADC_STABLE;
#if 0
typedef struct _TS_ADC_SampleM_
{
//中值滤波
vS32 mid[D_ADC_BLUR_MID_MAX];
vS32 midv;
//均值滤波
vS32 SA_sum;
vS32 SA_avg;
//移位滤波
vS32 SHA_sum;
vS32 SHA_avg;
}TS_ADC_SampleM;
typedef struct
{
TS_task task;
vU8 error;
vU8 m_n;
vU8 a_n;
vU8 ch;
vU8 ch_n;
vU16 u16_v;
TS_ADC_SampleM ts_sample;
}TS_task_ADC_;
#endif
extern TS_ADC_CH_SWITCH ts_adc_ch_switch;
extern TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num];
extern TS_ADC_CH_MID_BLUR ts_adc_ch_mid_blur[D_ch_max_num];
extern TS_ADC_CH_AVG_BLUR ts_adc_ch_avg_blur[D_ch_max_num];
extern TS_ADC_CH_SHIFT_BLUR ts_adc_ch_shift_blur[D_ch_max_num];
//extern TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num];
extern TS_ADC_ALL_BLUR ts_adc_all_blur;
extern TS_ADC_ALL_OUT ts_adc_all_out;
extern TS_ADC_SHOW ts_adc_show;
extern TS_ADC_STABLE ts_adc_stable;
extern void L3_task_adc_init(U8 ch);
extern void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s);
//extern void L3_task_adc_all_blur(TS_ADC_ALL_BLUR *s);
//extern void L3_task_adc_all_out(TS_ADC_ALL_OUT *s);
extern void L3_task_adc_show(TS_ADC_SHOW *s);
extern void L3_task_show_times_reset();
//extern void L3_task_weight_stable(TS_ADC_STABLE *s);
extern void L3_task_weight_init(void);
//extern void L3_task_adc_ch_mid_blur(TS_ADC_CH_MID_BLUR *s);
//extern void L3_task_adc_ch_avg_blur(TS_ADC_CH_AVG_BLUR *s);
//extern void L3_task_adc_ch_shift_blur(TS_ADC_CH_SHIFT_BLUR *s);
extern void L3_task_adc_handler(u8 ch);
extern void L3_task_all_adc_handler(void);
#endif

30
source/app/nouse/app_task_adc.c

@ -1,30 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "app_task_adc.h"
#include "common.h"
void L3_task_adc_handler(u8 ch)
{
L3_task_adc_sample(&ts_adc_samples[ch]);
/***********
//方法论和计算书 https://ccsensp.yuque.com/tegchg/lr84bm/hhexas
L3_task_adc_channel_sample(&ts_adc_channel_samples[ch]);
//L3_task_adc_filter_mid(&ts_adc_blur_mid[ch]);
L3_task_adc_filter_avg(&ts_adc_blur_avg[ch]);
L3_task_adc_filter_shift(&ts_adc_blur_shift[ch]);
L3_task_adc_filter_out(&ts_adc_blur_out[ch]);
***********/
}

29
source/app/nouse/app_task_adc.h

@ -1,29 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_ADC_H
#define _APP_TASK_ADC_H
#include "../ctask/task.h"
#include "../clib/clib.h"
#include "asp_adc.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../bsp/bsp_cs1232.h"
void L3_task_adc_handler(u8 ch);
#endif // #ifndef _APP_TASK_ADC_H

124
source/app/nouse/app_task_debug.c

@ -1,124 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "app_task_debug.h"
///#include "common.h"
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
#include "app_weight.h"
S_TASK_DEBUG _s_task_debug;
//=============================================
void L3_task_debug_init(void)
{
L1_task_init(&_s_task_debug.task);
L3_task_s_go(_s_task_debug,D_task_init);
}
#define D_task_ADC_CHx_DEBUG 0x53
void L3_task_debug(S_TASK_DEBUG *s)
{
TTSS_Task_init():
L2_task_go(D_task_ADC_CHx_DEBUG);
TTSS_Task_step(D_task_ADC_CHx_DEBUG):
if(ts_adc_samples[0].ok)
{ts_adc_samples[0].ok = 0;
L0_uart0_ushex(ts_adc_samples[0].out1);
L0_uart0_uc(0x09);
L0_uart0_ushex(ts_adc_samples[0].out2);
L0_uart0_uc(0x09);
L0_uart0_ushex(ts_adc_samples[0].ts_SAa.out4);
L0_uart0_0d0a();
}
//// L2_task_go_Tdelay(D_task_ADC_CHx_DEBUG,D_Tdelay_Msec(150)); //延时15ms
TTSS_Task_end()
}
/************
...
: STC8H3K48S2
: 7.4.1U
:
. ISP工作频率: 23.866MHz
. IRC振荡器的频率: 11.064MHz
. : 35.250KHz
. 使
. P3.2P3.3
.
. I/O口
.
. : 3.00 V
. ,
. : 256
.
. ,,
. ,EEPROM区一并擦除
. ,485
.
. : 1195 mV (: 1100~1300mV)
. : 202192
: STC8H3K48S2
: 7.4.1U
... [0.812"]
: 11.057MHz (-0.022%)
... [0.125"]
: 115200
... ! [0.656"]
: F74DC52602599C
... ! [3.796"]
... ! [0.016"]
:
. ISP工作频率: 23.866MHz
. IRC振荡器的频率: 11.057MHz
. : 35.250KHz
. 使
. P3.2P3.3
.
. I/O口
.
. : 3.00 V
. ,
. : 256
.
. ,,
. ,EEPROM区
. ,485
.
. : 1195 mV (: 1100~1300mV)
. : 202192
: F74DC52602599C
: STC8H3K48S2
: 7.4.1U
. : 11.059MHz
. : 11.057MHz
. : -0.022%
!(2022-01-08 10:36:46)
*************/

32
source/app/nouse/app_task_debug.h

@ -1,32 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_DEBUG_H
#define _APP_TASK_DEBUG_H
#include "TTSS_task.h"
#include "c_lib.h"
typedef struct _s_task_debug
{
TS_task task;
}S_TASK_DEBUG;
extern S_TASK_DEBUG _s_task_debug;
extern void L3_task_debug_init(void);
extern void L3_task_debug(S_TASK_DEBUG *s);
#endif // #ifndef _APP_TASK_ADC_H

64
source/app/nouse/app_task_reg.c

@ -1,64 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "app_task_reg.h"
#include "app_weight.h"
///#include "common.h"
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
S_TASK_REGVAL_LISTEN s_task_reglisten;
//=============================================
void L3_task_reglisten_init(void)
{
L1_task_init(&s_task_reglisten.task);
L3_task_s_go(s_task_reglisten,D_task_init);
}
//清零任务
#define D_task_WEIGHT_COUNT 0x50
#define D_task_IAP 0x51
void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s)
{
TTSS_Task_init():
L2_task_go(D_task_WEIGHT_COUNT);
TTSS_Task_step(D_task_WEIGHT_COUNT):
/// if(R.zero != 0)
{
// R.total_zweight = ts_adc_blur_show.rough_weight = R.rough_weight; //皮重 = 毛重
/// R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
/// R.zero = 0;
}
L2_task_go(D_task_IAP); //延时100ms
TTSS_Task_step(D_task_IAP):
/// if(R.status_eep_save != 0)
{
/// R.status_eep_save = 0;
/// L3_reg_2_iap();//写入IAP
}
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
TTSS_Task_end();
}

64
source/app/nouse/app_task_reg.c.bak

@ -1,64 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "app_task_reg.h"
#include "app_weight.h"
#include "common.h"
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
S_TASK_REGVAL_LISTEN s_task_reglisten;
//=============================================
void L3_task_reglisten_init(void)
{
L1_task_init(&s_task_reglisten.task);
L3_task_s_go(s_task_reglisten,D_task_init);
}
//清零任务
#define D_task_WEIGHT_COUNT 0x50
#define D_task_IAP 0x51
void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s)
{
TTSS_Task_init():
L2_task_go(D_task_WEIGHT_COUNT);
TTSS_Task_step(D_task_WEIGHT_COUNT):
if(R.zero != 0)
{
R.total_zweight = ts_adc_blur_show.rough_weight = R.rough_weight; //皮重 = 毛重
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
R.zero = 0;
}
L2_task_go(D_task_IAP); //延时100ms
TTSS_Task_step(D_task_IAP):
if(R.status_eep_save != 0)
{
R.status_eep_save = 0;
L3_reg_2_iap();//写入IAP
}
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
TTSS_Task_end();
}

24
source/app/nouse/app_task_uart0.c

@ -1,24 +0,0 @@
#include "app_task_uart0.h"
#include "msp_uart0.h"
///#include "../app/common.h"
#include "app_config.h"
void L3_task_uart0_modbus_handler(Ts_uart_rev_ *ph4)
{
if(ph4->ok)
{
#if 1
TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
//L0_uart0_sendArray(ph4->buf, 8);
//L0_uart0_sendArray("abcdefgh", 8);
ph4->ok = 0;
if(ts_modbus->slaver == R.sd.slaver_id ||
ts_modbus->slaver == D_UART0_485_SLAVER_ID_BROADCAST) //从机
{
U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack);
L0_uart0_sendArray((U8*)&s_uart0_ack, acklen);
}
#endif
}
}

11
source/app/nouse/app_task_uart0.h

@ -1,11 +0,0 @@
#ifndef APP_TASK_UART0_H
#define APP_TASK_UART0_H
///#include "common.h"
#include "../ctask/TTSS_task.h"
#include "../tpc/tpc_modbus.h"
//extern void L3_task_uart0_handler(TS_Handle_PH3 *ph3);
extern void L3_task_uart0_modbus_handler(Ts_uart_rev_ *ph4);
#endif

536
source/app/nouse/app_weight.c

@ -1,536 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "app_weight.h"
#include "app_config.h"
#include "debug_drv.h"
TS_TASK_weight_ tst_weight;
#define D_task_WEIGHT_add 12
#define D_task_WEIGHT_CAL 13
#define D_task_WEIGHT_get 14
#define D_task_WEIGHT_zero 15
///#define D_task_WEIGHT_CAL 124
#define D_task_WEIGHT_out 45
#define D_task_WEIGHT_Sline 11
#define D_task_WEIGHT_getADC 22
///#define D_task_WEIGHT_CAL 33
////#define D_task_WEIGHT_Sline
void L2_task_weight_init(u8 openclose)
{
if(openclose)
{
}else
{
}
L2_task_adc_SAinit(0,&R.sd.ADC_shiftaverage_a,&R.sd.ADC_shiftaverage_b);
L2_task_adc_SAinit(1,&R.sd.ADC_shiftaverage_a,&R.sd.ADC_shiftaverage_b);
L2_task_adc_SAinit(2,&R.sd.ADC_shiftaverage_a,&R.sd.ADC_shiftaverage_b);
L2_task_adc_SAinit(3,&R.sd.ADC_shiftaverage_a,&R.sd.ADC_shiftaverage_b);
ts_adc_samples[0].zeroout = R.sd.zeroout;
ts_adc_samples[1].zeroout = R.sd.zeroout;
ts_adc_samples[2].zeroout = R.sd.zeroout;
ts_adc_samples[3].zeroout = R.sd.zeroout;
ts_adc_samples[0].offset = R.sd.sensor[0];
ts_adc_samples[1].offset = R.sd.sensor[1];
ts_adc_samples[2].offset = R.sd.sensor[2];
ts_adc_samples[3].offset = R.sd.sensor[3];
L0_waitFree_uartN(0);
printf("\r\n\L2_task_weight_initr\n");
printf("\r\n\R.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset);
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[1].offset,ts_adc_samples[1].offset);
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[2].offset,ts_adc_samples[2].offset);
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[3].offset,ts_adc_samples[3].offset);
}
void L3_task_weight_init(void)
{
//显示任务初始化
L1_task_init(&tst_weight.task);
L3_task_s_go(tst_weight,D_task_init);
L2_task_weight_init(0);
}
#define D_debug_ch D_Wch2
void L3_task_weight_handler6666(TS_TASK_weight_ *s)
{
L2_task_adc_sample(&ts_adc_samples[D_Wch1]);
//////// /// L2_task_adc_sample(&ts_adc_samples[D_Wch2]);
L2_task_adc_sample(&ts_adc_samples[D_Wch3]);
L2_task_adc_sample(&ts_adc_samples[D_Wch4]);
L2_task_adc_sample(&ts_adc_samples[D_debug_ch]);
if(1 == ts_adc_samples[D_debug_ch].ok)
{
ts_adc_samples[D_debug_ch].ok = 0;
L0_uart0_ulhex(ts_adc_samples[D_debug_ch].out0);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[D_debug_ch].out1a );L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[D_debug_ch].out1);L0_uart0_uc(' ');
L0_uart0_0d0a();
}
}
void L3_task_weight_handler777(TS_TASK_weight_ *s)
{
L2_task_adc_sample(&ts_adc_samples[D_Wch1]);
L2_task_adc_sample(&ts_adc_samples[D_Wch2]);
L2_task_adc_sample(&ts_adc_samples[D_Wch3]);
L2_task_adc_sample(&ts_adc_samples[D_Wch4]);
if(1 == ts_adc_samples[D_debug_ch].ok)
{
ts_adc_samples[D_debug_ch].ok = 0;
/*
L0_uart0_ulhex(ts_adc_samples[D_Wch1].out0);L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_samples[D_Wch2].out0);L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_samples[D_Wch3].out0);L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_samples[D_Wch4].out0);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[D_Wch1].out1a );L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[D_Wch2].out1a );L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[D_Wch3].out1a );L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[D_Wch4].out1a );///L0_uart0_uc(' ');
L0_uart0_0d0a();
****/
}
}
///L3_task_weight_handler(&tst_weight);
void L3_task_weight_handler(TS_TASK_weight_ *s)
{
L2_task_adc_sample(&ts_adc_samples[D_Wch1]);
L2_task_adc_sample(&ts_adc_samples[D_Wch2]);
L2_task_adc_sample(&ts_adc_samples[D_Wch3]);
L2_task_adc_sample(&ts_adc_samples[D_Wch4]);
TTSS_Task_init():
L0_waitFree_uartN(0);
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset);
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[1].offset,ts_adc_samples[1].offset);
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[2].offset,ts_adc_samples[2].offset);
printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[3].offset,ts_adc_samples[3].offset);
L0_uart0_uc('4');
s->slow = 0;
s->zero = 0;
L2_task_go(D_task_WEIGHT_get);
TTSS_Task_step(D_task_WEIGHT_get):
if(1 == ts_adc_samples[D_Wch4].ok)
{//
ts_adc_samples[0].ok = 0;
ts_adc_samples[1].ok = 0;
ts_adc_samples[2].ok = 0;
ts_adc_samples[3].ok = 0;
s->slow ++;
// L0_uart0_uc('%');
L2_task_go(D_task_WEIGHT_Sline);
}
TTSS_Task_step(D_task_WEIGHT_Sline):
if (s->slow >= 1)////采样减速
{s->slow = 0;
///调用asp——adc中的输出 out3
/************/
ts_adc_samples[0].out5 = ts_adc_samples[0].ts_SAb.out4;
ts_adc_samples[1].out5 = ts_adc_samples[1].ts_SAb.out4;
ts_adc_samples[2].out5 = ts_adc_samples[2].ts_SAb.out4;
ts_adc_samples[3].out5 = ts_adc_samples[3].ts_SAb.out4;
L2_task_go(D_task_WEIGHT_getADC);
}else
{
L2_task_go(D_task_WEIGHT_get);
}
//L2_task_go(D_task_WEIGHT_getADC);
TTSS_Task_step(D_task_WEIGHT_getADC):
////四个传感器相加后平均
tst_weight.sum32 = ts_adc_samples[0].out5;
tst_weight.sum32 += ts_adc_samples[1].out5;
tst_weight.sum32 += ts_adc_samples[2].out5;
tst_weight.sum32 += ts_adc_samples[3].out5;
tst_weight.sum32b = ts_adc_samples[0].out1a;
tst_weight.sum32b += ts_adc_samples[1].out1a;
tst_weight.sum32b += ts_adc_samples[2].out1a;
tst_weight.sum32b += ts_adc_samples[3].out1a;
tst_weight.out6 = tst_weight.sum32 >>2;
L0_uart0_ushex((vU16)tst_weight.adc32); L0_uart0_uc(' ');
L2_task_go(D_task_WEIGHT_CAL);
TTSS_Task_step(D_task_WEIGHT_CAL):
tst_weight.adc32 = tst_weight.out6;
L3_task_weight_cal();
/// L0_uart0_ushex(tst_weight.woutx10);
#if 0
L0_uart0_ulhex(ts_adc_samples[0].out1a);L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_samples[1].out1a);L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_samples[2].out1a);L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_samples[3].out1a);L0_uart0_uc(' ');
#else
L0_uart0_ushex(ts_adc_samples[0].out1);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[1].out1);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[2].out1);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[3].out1);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[0].out2);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[1].out2);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[2].out2);L0_uart0_uc(' ');
L0_uart0_ushex(ts_adc_samples[3].out2);L0_uart0_uc(' ');
/// L0_uart0_ushex(tst_weight.woutx10);L0_uart0_uc(' ');
#endif
L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
//// printf("\r\ntst_weight.t32a\r\n %d kg = 0x%4x\r\n", (vU16)tst_weight.t32a,(vU16)tst_weight.t32a);
printf(" (%d)0x%4x\r\n", tst_weight.woutx10,tst_weight.woutx10);
/// L0_uart0_0d0a();
L2_task_go(D_task_WEIGHT_out);
TTSS_Task_step(D_task_WEIGHT_out):
L2_task_go(D_task_WEIGHT_get);
TTSS_Task_step(D_task_WEIGHT_zero):
L2_task_go(D_task_WEIGHT_get);
TTSS_Task_end();
}
void L3_task_weight_cal(void)
{
if(tst_weight.adc32 <= (vU32)R.sd.zerows[1].adc)
{
if(tst_weight.adc32 <= (vU32)R.sd.zerows[0].adc )
{
tst_weight.adc32 = (vU32)R.sd.zerows[0].adc;
}
///0-0-40KG
tst_weight.t32a = (tst_weight.adc32-(vU32)R.sd.zerows[0].adc);////有可能<0
tst_weight.t32b = (vU32)(R.sd.zerows[1].adc-R.sd.zerows[0].adc);
tst_weight.t32a *= (vU32)(R.sd.zerows[1].kg - R.sd.zerows[0].kg);
tst_weight.t32a /= tst_weight.t32b;
}else
{ ///40KG 80KG
tst_weight.t32a = (vU32)(tst_weight.adc32-R.sd.zerows[1].adc);////有可能大于b
tst_weight.t32b = (vU32)(R.sd.zerows[2].adc-R.sd.zerows[1].adc);
tst_weight.t32a *= (vU32)(R.sd.zerows[2].kg-R.sd.zerows[1].kg) ;
tst_weight.t32a /= tst_weight.t32b;
tst_weight.t32a += (vU32)R.sd.zerows[1].kg;
}
tst_weight.woutx10 = (vU16)tst_weight.t32a;
}
void L3_adc_zero(void)
{
L3_out_zero(0);
L3_out_zero(1);
L3_out_zero(2);
L3_out_zero(3);
// printf("\r\niapData.zeroout= %d = 0x%4x\r\n", iapData.zeroout, iapData.zeroout);
// printf("\r\nR.sd.zeroout= %d = 0x%4x offset %d = 0x%4x\r\n", R.sd.zeroout, R.sd.zeroout,ts_adc_samples[0].offset,ts_adc_samples[0].offset);
R.sd.sensor[0] = ts_adc_samples[0].offset;
R.sd.sensor[1] = ts_adc_samples[1].offset;
R.sd.sensor[2] = ts_adc_samples[2].offset;
R.sd.sensor[3] = ts_adc_samples[3].offset;
iapData.sensor[0] = R.sd.sensor[0];
iapData.sensor[1] = R.sd.sensor[1];
iapData.sensor[2] = R.sd.sensor[2];
iapData.sensor[3] = R.sd.sensor[3];
L0_waitFree_uartN(0);
printf("\r\nR.sd.sensor 0x%4x,0x%4x,0x%4x,0x%4x,\r\n",R.sd.sensor[0],R.sd.sensor[1],R.sd.sensor[2],R.sd.sensor[3]);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证
}
#if 0
void L3_task_weight_set(Ts_uart_rev_ *ph4)
{
TS_P_debug *td;
if(ph4->debugok)
{ ph4->debugok = 0;
td = (TS_P_debug *)ph4->buf;
/// TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
L0_uartN_uchexArray(0,ph4->buf, 8);
if(0xfd == td->filter)
{
if(0x04 == td->R1)///设置四个传感器的清零
{ //// fd 04 33 44 55
L0_uart0_sendstr("\r\n 4sensor zero \r\n");
L3_adc_zero();
}else if(0x01 == td->R1)///设置重量的清零
{ //// fd 04 33 44 55
L0_uart0_sendstr("\r\n--weight zero-- \r\na b= ");
}else if(0x02 == td->R1)///读取
{
if(0x00 == td->R2)
{//// fd 02 00 44 55
L0_uart0_sendstr("\r\n--read iapData-- \r\n");
L4_print_iap(&iapData);
}else
{//// fd 02 33 44 55
L0_uart0_sendstr("\r\n--read R.sd-- \r\n");
L4_print_iap(&R.sd);
}
}
else
{
L0_uart0_sendstr("\r\n command error \r\n");
}
}
else if(0xf5 == td->filter)
{///设置重量
if(td->R1 < 3)///
{
//// R1 R2 R3
//// f5 00 33 44 55 把当前的adc的值作为第R1个校准点的值
R.sd.zerows[td->R1].adc = (vU16)tst_weight.out6;
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证
}else
{
}
L0_waitFree_uartN(0);
printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)td->R1, (vU16)tst_weight.out6);
}
else if(0xf6 == td->filter)
{///设置砝码
if(td->R1 < 3)///
{
//// R1 R2 R3
//// f5 00 33 44 55 把当前第R1个校准曲线的点的kg的值 0x3344
R.sd.zerows[td->R1].kg = D_2uc_u16(R2,R3);
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证
}else
{
}
L0_waitFree_uartN(0);
printf("\r\nset [ %d],Kg = 0x%04x\r\n",(int)td->R1, R.sd.zerows[td->R1].kg );
}
else
{
}
}
}
#endif
void L3_weight_setPara(u8 filter)
{
if(filter == Ts_debug.td->filter)
{
L0_uart0_uc("A");
L0_uart0_0d0a();
if(0x01 == Ts_debug.td->ocr)
{
if(0x04 == Ts_debug.td->R1)///设置四个传感器的清零
{ //// fd 04 33 44 01
L0_uart0_sendstr("\r\n 4sensor zero \r\n");
L3_adc_zero();
}else if(0x01 == Ts_debug.td->R1)///设置重量的清零
{ //// fd 01 33 44 01
L0_uart0_sendstr("\r\n--weight zero-- \r\na b= ");
}else if(0x02 == Ts_debug.td->R1)///读取
{
if(0x00 == Ts_debug.td->R2)
{//// fd 02 00 44 01
L0_uart0_sendstr("\r\n--read iapData-- \r\n");
L4_print_iap(&iapData);
}else
{//// fd 02 33 44 01
L0_uart0_sendstr("\r\n--read R.sd-- \r\n");
L4_print_iap(&R.sd);
}
}
else
{
L0_uart0_sendstr("\r\n command error \r\n");
}
}
else if(0x02 == Ts_debug.td->ocr)
{///设置重量
if(Ts_debug.td->R1 < 3)///
{
//// R1 R2 R3
//// fd 00 33 44 02 把当前的adc的值作为第R1个校准点的值
R.sd.zerows[Ts_debug.td->R1].adc = (vU16)tst_weight.out6;
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证
}else
{
}
L0_waitFree_uartN(0);
printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)Ts_debug.td->R1, (vU16)tst_weight.out6);
}
else if(0x03 == Ts_debug.td->ocr)
{///设置砝码
if(Ts_debug.td->R1 < 3)///
{ //200
//// R1 R2 R3
//// fd 00 33 44 03 把当前第R1个校准曲线的点的kg的值 0x3344
R.sd.zerows[Ts_debug.td->R1].kg = D_2uc_u16(Ts_debug.td->R2,Ts_debug.td->R3);
Lc_buf_copy_uc((u8 *)&R.sd.factory_ws,(u8 *)&R.sd.zerows,12);
L4_reg_2_iap();///写入iap
L4_iap_2_reg();///读取出来验证 20 14
}else
{
}
L0_waitFree_uartN(0);
printf("\r\nset [ %d],Kg = 0x%04x\r\n",(int)Ts_debug.td->R1, R.sd.zerows[Ts_debug.td->R1].kg );
}
else
{
}
}
}
#ifdef doc4324
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x2198 0x2b58 0x ad3 0x21e6
--read --
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x2198 0x2b58 0x ad3 0x21e6
--read R.sd--
iapData.sensor 0x263b 0x32ac 0x1465 0x2e99
&e2p write success2800 01 00 02 00 03 00 04 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
iapData.zeroout= 8049 = 0x1f71
R.sd.zeroout= 8049 = 0x1f71 offset 9787 = 0x263b
iapData.sensor 0x 1 0x 2 0x 3 0x 4
e2p read success
17FC 1F6A 1F4D 1F39 1D7B 0021
1F19 1F51 1F0C 1EEB 1F18 0025
1EEA 1F3A 1ECD 1EB3 1EE9 0025
1EA7 1F25 1E87 1E6F 1EB0 0024
#endif

151
source/app/nouse/app_weight.h

@ -1,151 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20220109
/// @note cc_AS_stc02
/*******************
xxx.x
Layer4: send/show
write to buffer -->send
-----------------------------
weight = cal(adc32)
Layer3: app weight
tst_weight.adc32 = ts_adc_samples[0].out5;
线 line
-----------------------------
out3
out2
Layer2: asp asp_adc
out1 adc
-------------------------
void L0_ADS1231_readCH2(vtype ch,vU16 *d)
Layer1: bsp: bsp_cs1232 adc的采样
*******************/
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_WEIGHT_H
#define _APP_WEIGHT_H
#include "TTSS_task.h"
#include "c_lib.h"
#include "asp_schain.h"
#include "tpc_debug.h"
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
#include "../bsp/bsp_cs1232.h"
/////水一般是18-19升,再加上桶,就是大约20公斤
typedef struct
{
vU16 kg;
vU16 adc; ///kg 对应的adc的采样值
}ts_weight_sheet_;///8Bytes
typedef struct
{
TS_task task;
vS32 rough_weight;
vU32 adc32;
vU32 sum32;
vU32 sum32b;
vU32 out6;
vU32 t32a,t32b;
/// ts_weight_sheet_
u8 slow;
u8 zero;
u8 pp;
vU16 woutx10;///计算出来的重量
ts_weight_sheet_ ws[3];
}TS_TASK_weight_;
extern TS_TASK_weight_ tst_weight;
/*******
^
|
| o
| |
| o |
| | |
o | |
| | |
|____|_____|____________>
0 40 80
[0] [1] [2]
20KG 40kg
190 290
19kg 29kg
,adc在一定范围内
:0 40 80
0+-% 40+-% 80+-%
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
0,0x1235,
D_20kg,0x5678,
D_40kg,0x789a,
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
0,0x1234,
D_20kg,0x5678,
D_40kg,0x789b,
factory_ws
0 kg = 0x1235
190 kg = 0x5678
290 kg = 0x789a
zerows
0 kg = 0x1234
190 kg = 0x5678
290 kg = 0x789b
**/
////
extern void L3_task_weight_cal(void);
extern void L3_task_weight_init(void);
extern void L3_task_weight_handler(TS_TASK_weight_ *s);
///extern void L3_task_weight_set(Ts_uart_rev_ *ph4);
#define D_cmd_filter 0xfd
extern void L3_weight_setPara(u8 filter);
#define D_get_weight() tst_weight.woutx10
#endif // #ifndef _APP_TASK_ADC_H

105
source/app/nouse/app_weightzero.c

@ -1,105 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
/*******************
1.--线
2.--使AD值
3.--线
(1)线--AD值构成的曲线
(2)线--线线线线
*******************/
#include "app_weight.h"
#include "app_config.h"
#include "app_weightzero.h"
////#include "common.h"
TS_TASK_weight_zero tst_weight_zero;
void L3_task_weight_zero_init(void)
{
//显示任务初始化
L1_task_init(&tst_weight_zero.task);
L3_task_s_go(tst_weight_zero,D_task_init);
}
#define D_task_weight_zero 16
#define D_task_WEIGHT_ZERO 15
#define D_task_WEIGHT_CAL 10
#define D_task_WEIGHT_get 2
void L3_task_weight_zero_handler(TS_TASK_weight_zero *s)
{
TTSS_Task_init():
printf("\r\n weight_zero\r\n");
L2_task_go_Tdelay(D_task_WEIGHT_get,300);//延时等待重量稳定
TTSS_Task_step(D_task_WEIGHT_get):
s->zero_weight = D_get_weight(); //获取当前重量
/// R.total_zweight = s->zero_weight - tst_weight.ws[0].kg; //当前差值 = 当前重量 - 预设0点重量
L2_task_go(D_task_weight_zero);
TTSS_Task_step(D_task_weight_zero):
///if(R.total_zweight <= R.p.zero_weight) //当前差值在规定范围之内
if(0)
{
L2_task_go(D_task_WEIGHT_CAL);
}
else
{
L2_task_go(D_task_WEIGHT_ZERO);
}
TTSS_Task_step(D_task_WEIGHT_CAL)://计算差值更新曲线
printf("\r\n weight_zero\r\n");
/// s->weight_dval = tst_weight.adc32 - tst_weight.ws[0].adc; //AD差值
tst_weight.ws[0].kg = 0;
tst_weight.ws[0].adc = tst_weight.adc32; //0点AD值=当前AD值
if(s->weight_dval >= 0) //曲线上移
{
tst_weight.ws[1].adc += s->weight_dval; //20KG
tst_weight.ws[2].adc += s->weight_dval; //72KG
}
else //曲线下移
{
tst_weight.ws[1].adc -= s->weight_dval;
tst_weight.ws[2].adc -= s->weight_dval;
}
L2_task_go(D_task_WEIGHT_ZERO);
TTSS_Task_step(D_task_WEIGHT_ZERO): //手动清零
/// if(R.zero != 0) //外部消息
{
// R.zero = 0;
// st_weight.ws[0].kg = s->zero_weight; //预设重量 = 当前重量
}
L2_task_go(D_task_WEIGHT_ZERO);
TTSS_Task_end();
}

106
source/app/nouse/app_weightzero.h

@ -1,106 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20220109
/// @note cc_AS_stc02
/*******************
app:
weight zero
:
-----------------------------
xxx.x
Layer4: send/show
write to buffer -->send
-----------------------------
weight = cal(adc32)
Layer3: app weight
tst_weight.adc32 = ts_adc_samples[0].out5;
线 line
-----------------------------
out3
out2
Layer2: asp asp_adc
out1 adc
-------------------------
void L0_ADS1231_readCH2(vtype ch,vU16 *d)
Layer1: bsp: bsp_cs1232 adc的采样
*******************/
//////////////////////////////////////////////////////////////////////////////
#ifndef _app_weightzero_H
#define _app_weightzero_H
#include "TTSS_task.h"
#include "c_lib.h"
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
#include "../bsp/bsp_cs1232.h"
/////水一般是18-19升,再加上桶,就是大约20公斤
/*******
^
|
| o
| |
| o |
- - | |
o | |
| | |
|____|_____|____________>
0 40 80
[0] [1] [2]
,adc在一定范围内
:0 40 80
0+-% 40+-% 80+-%
**/
typedef struct
{
TS_task task;
vS32 rough_weight;
vU32 zero_weight;
vU32 adc32;
vU32 t32a,t32b;
vU32 weight_dval;
/// ts_weight_sheet_ ws[3];
}TS_TASK_weight_zero;
extern TS_TASK_weight_zero tst_weight_zero;
void L3_task_weight_zero_init(void);
void L3_task_weight_zero_handler(TS_TASK_weight_zero *s);
#endif // #ifndef _APP_TASK_ADC_H

121
source/app/nouse/common.c

@ -1,121 +0,0 @@
#include "common.h"
//#include "../tpc/tpc_uart.h"
#include "../bsp/bsp_cs1232.h"
#include "../msp/msp_eeprom.h"
#include "../msp/msp_id.h"
#include "c_crc.h"
struct global_param G;
struct ts_eeprom_param eep_param;
struct ts_eeprom_enc eep_enc;
#define EEP_SECTOR_SIZE 0x200
#define EEP_PARAM_ADDR (EEP_SECTOR_SIZE * 1)
#define EEP_ENC_ADDR (EEP_SECTOR_SIZE * 0)
U8 L1_eeprom_read(U8 *buf,U8 *len)
{
U8 dlen = 0;
L0_Iap_Read_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + EEPROM_PARAM_DATA_MAX + 2);
if(eep_param.filter == EEPROM_PARAM_FILTER)
{
dlen = eep_param.len - 2;
crc16(eep_param.crc,(U8*)&eep_param,2+dlen);
if(eep_param.crc[0] == eep_param.buf[dlen] && eep_param.crc[1] == eep_param.buf[dlen+1])
{
L0_uart0_uc('#');
//Lc_buf_copy_uc((U8*)&G.p,(U8*)eep_param.buf,dlen);
Lc_buf_copy_uc(buf,(U8*)eep_param.buf,dlen);//防止dlen>sizeof(G.P)引起的内存错误
*len = dlen;
return 0;
}
}
return 1;
}
U8 L1_eeprom_write(U8 *buf, U8 len)
{
U8 dlen = len;
eep_param.filter = EEPROM_PARAM_FILTER;
eep_param.len = dlen + 2;
Lc_buf_copy_uc((U8*)eep_param.buf,buf,dlen);
crc16(eep_param.crc, &eep_param, 2+dlen);
eep_param.buf[dlen] = eep_param.crc[0];
eep_param.buf[dlen+1] = eep_param.crc[1];
L0_Iap_Erase(EEP_PARAM_ADDR);
L0_Iap_Program_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + dlen + 2);
return 0;
}
int L3_mcu_id_ok(void)
{
U8 i = 0,crc[2];
U32 enc_key;
//1.获取MCU_ID
L0_id_get_rom(G.e.mcu_id);
for(i=0;i<MCU_ID_LEN;i++)
{
L0_uart0_uchex(G.e.mcu_id[i]);
}
//2.读取eeprom中的加密信息
L0_Iap_Read_array(EEP_ENC_ADDR, (U8*)&eep_enc, MCU_ID_KEY_LEN + MCU_ID_LEN + 2);
crc16(crc,(U8*)&eep_enc,MCU_ID_KEY_LEN + MCU_ID_LEN);
if(eep_enc.crc[0] != crc[0] || eep_enc.crc[1] != crc[1])
{
L0_uart0_uc('-');
return 0;
}
//3.根据mcu_id和enc_key计算enc_val
enc_key = ((U32)eep_enc.enc_key[0] << 24) | (eep_enc.enc_key[1] << 16) | (eep_enc.enc_key[2] << 8) |(eep_enc.enc_key[3] << 0);
Lc_encrypt_id((U8*)G.e.mcu_enc_id, (U8*)G.e.mcu_id, enc_key, MCU_ID_LEN);
//4.判断enc_val是否一致
for(i=0;i<MCU_ID_KEY_LEN;i++)
{
if(G.e.mcu_enc_id[i] != eep_enc.enc_val[i])
{
return 0;
}
}
return 1;
}
void L3_param_init(void)
{
int i;
for(i=0;i<D_ch_max_num;i++)
{
G.weight[i] = 0;
}
G.allweight = 0;
G._total_weight = 0;
G._total_zweight = 0;
//L3_eeprom_read_param();
}
#if 0
S32 L3_count_std_weight(S32 weight)
{
U8 i = 0;
U16 ratio = 100;
weight = (weight - G._total_zweight)/10;
for(i=0;i<D_weight_std_num;i++)
{
if(R.p.weight_std[i].weight_range == 0 || (R.p.weight_std[i].weight_range * 100) >= weight)
{
break;
}
}
if(i<D_weight_std_num && R.p.weight_std[i].ratio != 0)
{
ratio = R.p.weight_std[i].ratio;
}
return (S32)(weight * 1.0 * ratio / 100) ;
}
#endif

79
source/app/nouse/common.h

@ -1,79 +0,0 @@
#ifndef APP_COMMON_H
#define APP_COMMON_H
#include "../clib/type.h"
#define APP_VERSION 0x10
#define D_MCU_BIGENDIAN 1
// #define D_MCU_LITTLEENDIAN 1
enum tp_handle
{
TP_HANDLED,
TP_UNHANDLE
};
/**
* EEPROM
*/
#define EEPROM_PARAM_DATA_MAX 90
#define EEPROM_PARAM_FILTER 0xAA
typedef struct ts_eeprom_param
{
U8 filter;
U8 len;
U8 buf[EEPROM_PARAM_DATA_MAX];
U8 crc[2];
}EEPROM_PARAM;
#define MCU_ID_LEN 7
#define MCU_ID_KEY_LEN 4
#define EEPROM_ENC_DATA_MAX 64
#define EEPROM_ENC_FILTER 0xAA
typedef struct ts_eeprom_enc
{
U8 enc_key[MCU_ID_KEY_LEN];
U8 enc_val[MCU_ID_LEN];
U8 crc[2];
}EEPROM_ENC;
#define baud_rade L3_baud_rate_change(G.p.baud_rate)
typedef struct mcu_encrypt_info
{
U8 enc_key[MCU_ID_KEY_LEN];
U8 mcu_id[MCU_ID_LEN];
U8 mcu_enc_id[MCU_ID_LEN];
}McuEncryptInfo;
#define D_ch_max_num 4
typedef struct global_param
{
//EncryptInfo
McuEncryptInfo e;
//Global Variables
S32 weight[D_ch_max_num]; //4路重量
S32 allweight; //总重量
S32 _total_weight; //实际重量*1000
S32 _total_zweight; //实际皮重*1000
}GlobalParam;
extern struct global_param G;
extern struct ts_eeprom_param eep_param;
extern struct ts_eeprom_enc eep_enc;
extern void L3_param_init(void);
extern int L3_mcu_id_ok();
extern S32 L3_count_std_weight(S32 weight);
extern void L3_eeprom_persist_param(void);
extern U8 L1_eeprom_read(U8 *buf,U8 *len);
extern U8 L1_eeprom_write(U8 *buf, U8 len);
#endif

173
source/asp/新建文件夹/SL_Sc7a20_FreeFall_Driver.c

@ -1,173 +0,0 @@
#include "SL_Sc7a20_FreeFall_Driver.h"
#include "msp_iicM1.h"
unsigned char SL_MEMS_i2c_spi_Write(unsigned char reg, unsigned char dat)
{
///void L2_IICM1_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd)
L2_IICM1_WriteCmd(SC7A20_IIC_ADDRESS, reg, dat); //由客户的II函数接口决定
return 1;
}
unsigned char SL_MEMS_i2c_spi_Read(unsigned char reg, unsigned char len, unsigned char *buf)
{
///void L2_IICM1_ReadReg(unsigned char sla,unsigned char reg,
/// unsigned char *r,unsigned char n)
L2_IICM1_ReadReg( SC7A20_IIC_ADDRESS, reg, buf, len);//由客户的II函数接口决定
return 1;
}
/***************在线测试**********************/
signed char SL_SC7A20_Online_Test(void)
{
unsigned char SL_Read_Reg=0xff;
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x0F,1, &SL_Read_Reg);
if(SL_Read_Reg==SC7A20_CHIP_ID_VALUE) return 1;
else return -1;
}
/***************BOOT 重载内部寄存器值*********************/
signed char SL_SC7A20_BOOT(void)
{
unsigned char SL_Read_Reg=0xff;
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x24,1, &SL_Read_Reg);
SL_Read_Reg=SL_SC7A20_BOOT_ENABLE|SL_Read_Reg;
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x24, SL_Read_Reg);
return 1;
}
/***************传感器量程设置**********************/
signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg)
{
unsigned char SL_Read_Reg=0xff,SL_Write_Reg;
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x23,1, &SL_Read_Reg);
// SL_Write_Reg=0x80|Sc7a20_FS_Reg|SL_SC7A20_HR_ENABLE;
SL_Write_Reg=0x80|Sc7a20_FS_Reg;
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x23, SL_Write_Reg);
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x23,1, &SL_Read_Reg);
if(SL_Read_Reg==SL_Write_Reg) return 1;
else return -1;
}
/***************数据更新速率**加速度计使能**********/
signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg)
{
unsigned char SL_Read_Reg;
#if SL_SC7A20_MTP_ENABLE == 0X01
SL_Read_Reg = 0x00;
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x1E, SL_SC7A20_MTP_VALUE);
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x57,1, &SL_Read_Reg);
SL_Read_Reg=SL_Read_Reg|SL_SC7A20_SDO_PU_MSK|SL_SC7A20_I2C_PU_MSK;
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x57, SL_Read_Reg);
#endif
SL_Read_Reg = 0xff;
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x20, Power_Config_Reg);
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x20,1, &SL_Read_Reg);
if(SL_Read_Reg==Power_Config_Reg) return 1;
else return -1;
}
/***************数据更新速率**加速度计使能**********/
signed char SL_SC7A20_FreeFall_Config(void)
{
unsigned char SL_Read_Reg;
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x24,1, &SL_Read_Reg);
SL_Read_Reg=0x80|SL_Read_Reg;//AOI1 LATCH
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x24, SL_Read_Reg);
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x22, 0x40);//AOI1 映射到INT1
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x25, 0x02);//INT1 默认高电平,有中断输出低电平
//FreeFall AOI1
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x30, 0x95);
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x32, 0x19);
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE,0x33, 0x04);
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,0x30,1, &SL_Read_Reg);
if(SL_Read_Reg==0x95) return 1;
else return -1;
}
#if SL_SC7A20_16BIT_8BIT==0
/***************加速度计数据读取*8bits*********/
signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf)
{
unsigned char SL_Read_Buf[7];
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,1, &SL_Read_Buf[0]);
if((SL_Read_Buf[0]&0x0f)==0x0f)
{
#if SL_SC7A20_SPI_IIC_MODE ==1//IIC
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_DATA_OUT,6, &SL_Read_Buf[1]);
#elif SL_SC7A20_SPI_IIC_MODE ==0//SPI
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,7, &SL_Read_Buf[0]);
#endif
SL_SC7A20_Data_XYZ_Buf[0]=(signed char)SL_Read_Buf[2];
SL_SC7A20_Data_XYZ_Buf[1]=(signed char)SL_Read_Buf[4];
SL_SC7A20_Data_XYZ_Buf[2]=(signed char)SL_Read_Buf[6];
return 1;
}
else
{
return 0;
}
}
#elif SL_SC7A20_16BIT_8BIT==1
/***************加速度计数据读取*16bits*********/
signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf)
{
unsigned char SL_Read_Buf[7];
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,1, &SL_Read_Buf[0]);
if((SL_Read_Buf[0]&0x0f)==0x0f)
{
#if SL_SC7A20_SPI_IIC_MODE ==1//IIC
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_DATA_OUT,6, &SL_Read_Buf[1]);
#elif SL_SC7A20_SPI_IIC_MODE ==0//SPI
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE,SL_SC7A20_STATUS_REG,7, &SL_Read_Buf[0]);
#endif
SL_SC7A20_Data_XYZ_Buf[0]=(signed short)((SL_Read_Buf[2]<<8) + SL_Read_Buf[1]);
SL_SC7A20_Data_XYZ_Buf[1]=(signed short)((SL_Read_Buf[4]<<8) + SL_Read_Buf[3]);
SL_SC7A20_Data_XYZ_Buf[2]=(signed short)((SL_Read_Buf[6]<<8) + SL_Read_Buf[5]);
return 1;
}
else
{
return 0;
}
}
#endif
//自由落体检测
signed char SL_SC7A20_Freefall_Status(void)
{
unsigned char sl_freefall_reg;
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE, 0x31,1, &sl_freefall_reg);
//USART_printf( USART1, "SL_reg31:%x!\r\n",sl_freefall_reg);
if((sl_freefall_reg&0x40)==0x40)
{
return 1;//自由落体成立
}
return 0;//自由落体不成立
}
signed char SL_SC7A20_Power_Down(void)//power down
{
unsigned char SL_Read_Reg = 0xff;
SL_SC7A20_I2c_Spi_Write(SL_SC7A20_SPI_IIC_MODE, 0x20, 0x00);
SL_SC7A20_I2c_Spi_Read(SL_SC7A20_SPI_IIC_MODE, 0x20,1, &SL_Read_Reg);
if(SL_Read_Reg==0x00) return 1;
else return -1;
}

207
source/asp/新建文件夹/SL_Sc7a20_FreeFall_Driver.h

@ -1,207 +0,0 @@
#ifndef __SL_SC7A20_FREEFALL_DRIVER_H__
#define __SL_SC7A20_FREEFALL_DRIVER_H__
/***使用驱动前请根据实际接线情况配置******/
/**SC7A20的SDO 脚接地: 0****************/
/**SC7A20的SDO 脚接电源:1****************/
#define SC7A20_SDO_VDD_GND 1
/*****************************************/
/***使用驱动前请根据实际IIC情况进行配置***/
/**SC7A20的IIC 接口地址类型 7bits: 0****/
/**SC7A20的IIC 接口地址类型 8bits: 1****/
#define SC7A20_IIC_7BITS_8BITS 0
/*****************************************/
#define SL_SC7A20_16BIT_8BIT 1
/**SC7A20的数据位数选择 16bits: 1****/
/**SC7A20的数据位数选择 8bits: 0****/
/*****************************************/
#define SL_SC7A20_SPI_IIC_MODE 1
/**SC7A20 SPI IIC 选择 SPI: 0****/
/**SC7A20 SPI IIC 选择 IIC: 1****/
/*****************************************/
#if SC7A20_SDO_VDD_GND==0
#define SC7A20_IIC_7BITS_ADDR 0x18
#define SC7A20_IIC_8BITS_ADDR 0x30
#else
#define SC7A20_IIC_7BITS_ADDR 0x19
#define SC7A20_IIC_8BITS_ADDR 0x32
#endif
#if SC7A20_IIC_7BITS_8BITS==0
#define SC7A20_IIC_ADDRESS SC7A20_IIC_7BITS_ADDR
#else
#define SC7A20_IIC_ADDRESS SC7A20_IIC_8BITS_ADDR
#endif
#define SC7A20_CHIP_ID_ADDRESS (unsigned char)0x0F
#define SC7A20_CHIP_ID_VALUE (unsigned char)0x11
#define SL_SC7A20_CTRL_REG1 (unsigned char)0x20
#define SL_SC7A20_CTRL_REG2 (unsigned char)0x21
#define SL_SC7A20_CTRL_REG3 (unsigned char)0x22
#define SL_SC7A20_CTRL_REG4 (unsigned char)0x23
#define SL_SC7A20_CTRL_REG5 (unsigned char)0x24
#define SL_SC7A20_CTRL_REG6 (unsigned char)0x25
#define SL_SC7A20_STATUS_REG (unsigned char)0x27
#define SL_SC7A20_OUT_X_L (unsigned char)0x28
#define SL_SC7A20_OUT_X_H (unsigned char)0x29
#define SL_SC7A20_OUT_Y_L (unsigned char)0x2A
#define SL_SC7A20_OUT_Y_H (unsigned char)0x2B
#define SL_SC7A20_OUT_Z_L (unsigned char)0x2C
#define SL_SC7A20_OUT_Z_H (unsigned char)0x2D
#define SL_SC7A20_FIFO_CTRL_REG (unsigned char)0x2E
#define SL_SC7A20_FIFO_SRC_REG (unsigned char)0x2F
#define SL_SC7A20_INT1_CFG (unsigned char)0x30
#define SL_SC7A20_INT1_SRC (unsigned char)0x31
#define SL_SC7A20_INT1_THS (unsigned char)0x32
#define SL_SC7A20_INT1_DURATION (unsigned char)0x33
#define SL_SC7A20_INT2_CFG (unsigned char)0x34
#define SL_SC7A20_INT2_SRC (unsigned char)0x35
#define SL_SC7A20_INT2_THS (unsigned char)0x36
#define SL_SC7A20_INT2_DURATION (unsigned char)0x37
#define SL_SC7A20_CLICK_CFG (unsigned char)0x38
#define SL_SC7A20_CLICK_SRC (unsigned char)0x39
#define SL_SC7A20_CLICK_THS (unsigned char)0x3A
#define SL_SC7A20_TIME_LIMIT (unsigned char)0x3B
#define SL_SC7A20_TIME_LATENCY (unsigned char)0x3C
#define SL_SC7A20_TIME_WINDOW (unsigned char)0x3D
#define SL_SC7A20_ACT_THS (unsigned char)0x3E
#define SL_SC7A20_ACT_DURATION (unsigned char)0x3F
/*连续读取数据时的数据寄存器地址*/
#define SL_SC7A20_DATA_OUT (unsigned char)(SL_SC7A20_OUT_X_L|0x80)
/**********特殊功能寄存器**********/
/*非原厂技术人员请勿修改*/
#define SL_SC7A20_MTP_ENABLE 0x00
#define SL_SC7A20_MTP_CFG (unsigned char)0x1E
#define SL_SC7A20_MTP_VALUE (unsigned char)0x05
#define SL_SC7A20_SDOI2C_PU_CFG (unsigned char)0x57
#define SL_SC7A20_SDO_PU_MSK (unsigned char)0x08
#define SL_SC7A20_I2C_PU_MSK (unsigned char)0x04
#define SL_SC7A20_HR_ENABLE (unsigned char)0X08
#define SL_SC7A20_BOOT_ENABLE (unsigned char)0X80
/*非原厂技术人员请勿修改*/
/***************数据更新速率**加速度计使能**********/
#define SL_SC7A20_ODR_POWER_DOWN (unsigned char)0x00
#define SL_SC7A20_ODR_1HZ (unsigned char)0x17
#define SL_SC7A20_ODR_10HZ (unsigned char)0x27
#define SL_SC7A20_ODR_25HZ (unsigned char)0x37
#define SL_SC7A20_ODR_50HZ (unsigned char)0x47
#define SL_SC7A20_ODR_100HZ (unsigned char)0x57
#define SL_SC7A20_ODR_200HZ (unsigned char)0x67
#define SL_SC7A20_ODR_400HZ (unsigned char)0x77
#define SL_SC7A20_ODR_1600HZ (unsigned char)0x87
#define SL_SC7A20_ODR_1250HZ (unsigned char)0x97
#define SL_SC7A20_ODR_5000HZ (unsigned char)0x9F
#define SL_SC7A20_LOWER_POWER_ODR_1HZ (unsigned char)0x1F
#define SL_SC7A20_LOWER_POWER_ODR_10HZ (unsigned char)0x2F
#define SL_SC7A20_LOWER_POWER_ODR_25HZ (unsigned char)0x3F
#define SL_SC7A20_LOWER_POWER_ODR_50HZ (unsigned char)0x4F
#define SL_SC7A20_LOWER_POWER_ODR_100HZ (unsigned char)0x5F
#define SL_SC7A20_LOWER_POWER_ODR_200HZ (unsigned char)0x6F
#define SL_SC7A20_LOWER_POWER_ODR_400HZ (unsigned char)0x7F
/***************数据更新速率**加速度计使能**********/
/***************传感器量程设置**********************/
#define SL_SC7A20_FS_2G (unsigned char)0x00
#define SL_SC7A20_FS_4G (unsigned char)0x10
#define SL_SC7A20_FS_8G (unsigned char)0x20
#define SL_SC7A20_FS_16G (unsigned char)0x30
/***************传感器量程设置**********************/
/***取值在0-127之间,此处仅举例****/
#define SL_SC7A20_INT1_THS_5PERCENT (unsigned char)0x06
#define SL_SC7A20_INT1_THS_10PERCENT (unsigned char)0x0C
#define SL_SC7A20_INT1_THS_20PERCENT (unsigned char)0x18
#define SL_SC7A20_INT1_THS_40PERCENT (unsigned char)0x30
#define SL_SC7A20_INT1_THS_80PERCENT (unsigned char)0x60
/***取值在0-127之间,此处仅举例 乘以ODR单位时间****/
#define SL_SC7A20_INT1_DURATION_2CLK (unsigned char)0x02
#define SL_SC7A20_INT1_DURATION_5CLK (unsigned char)0x05
#define SL_SC7A20_INT1_DURATION_10CLK (unsigned char)0x0A
/***中断有效时的电平设置,高电平相当于上升沿,低电平相当于下降沿****/
#define SL_SC7A20_INT_ACTIVE_LOWER_LEVEL 0x02 //0x02:中断时INT1脚输出 低电平
#define SL_SC7A20_INT_ACTIVE_HIGH_LEVEL 0x00 //0x00:中断时INT1脚输出 高电平
/***中断有效时的电平设置,高电平相当于上升沿,低电平相当于下降沿****/
#define SL_SC7A20_INT_AOI1_INT1 0x40 //AOI1 TO INT1
#define SL_SC7A20_INT_AOI2_INT1 0x20 //AOI2 TO INT1
/********客户需要进行的IIC接口封包函数****************/
extern unsigned char SL_SC7A20_I2c_Spi_Write(unsigned char sl_spi_iic,unsigned char reg, unsigned char dat);
extern unsigned char SL_SC7A20_I2c_Spi_Read(unsigned char sl_spi_iic,unsigned char reg, unsigned char len, unsigned char *buf);
/**SL_SC7A20_I2c_Spi_Write 函数中, sl_spi_iic:0=spi 1=i2c Reg:寄存器地址 data:寄存器的配置值******************/
/**SL_SC7A20_I2c_Spi_Write 函数 是一个单次写的函数*******************************************************************/
/***SL_SC7A20_I2c_Spi_Read 函数中, sl_spi_iic:0=spi 1=i2c Reg 同上,len:读取数据长度,buf:存储数据首地址(指针)***/
/***SL_SC7A20_I2c_Spi_Read 函数 是可以进行单次读或多次连续读取的函数*************************************************/
/*** 客户IIC函数封装举例
unsigned char SL_MEMS_i2c_spi_Write(unsigned char reg, unsigned char data)
{
i2cWrite(SC7A20_IIC_ADDRESS, reg, data); //由客户的II函数接口决定
return 1;
}
unsigned char SL_MEMS_i2c_spi_Read(unsigned char reg, unsigned char len, unsigned char *buf)
{
i2cRead( SC7A20_IIC_ADDRESS, reg, len, buf);//由客户的II函数接口决定
return 1;
}
***/
signed char SL_SC7A20_Online_Test(void);
signed char SL_SC7A20_BOOT(void);
signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg);
signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg);
signed char SL_SC7A20_FreeFall_Config(void);
#if SL_SC7A20_16BIT_8BIT==0
signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf);
#elif SL_SC7A20_16BIT_8BIT==1
signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf);
#endif
signed char SL_SC7A20_Freefall_Status(void);
//步骤如下:
//0.signed char SL_SC7A20_BOOT(void);
//1.signed char SL_SC7A20_Online_Test(void);
//2.signed char SL_SC7A20_FS_Config(unsigned char Sc7a20_FS_Reg);
//3.signed char SL_SC7A20_Power_Config(unsigned char Power_Config_Reg);
//4.signed char SL_SC7A20_FreeFall_Config(void);
//6.signed char SL_SC7A20_Read_XYZ_Data(signed char *SL_SC7A20_Data_XYZ_Buf);
//6.signed char SL_SC7A20_Read_XYZ_Data(signed short *SL_SC7A20_Data_XYZ_Buf);
//7.signed char SL_SC7A20_Freefall_Status(void);
#endif /* __SL_SC7A20_DRIVER_H */

350
source/asp/新建文件夹/SL_algo1.h

@ -1,350 +0,0 @@
/*
Copyright (c) 2017 Silan MEMS. All Rights Reserved.
*/
#ifndef SL_Watch_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO_DRV__H__
#define SL_Watch_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO_DRV__H__
#define SL_Sensor_Algo_Release_Enable 0x01
//0x00: for debug
//0x01: release version
/***使用驱动前请根据实际接线情况配置******/
/**SC7A20的SDO 脚接地: 0****************/
/**SC7A20的SDO 脚接电源:1****************/
#define SL_SC7A20_SDO_VDD_GND 1
/*****************************************/
/***使用驱动前请根据实际IIC情况进行配置***/
/**SC7A20的IIC 接口地址类型 7bits: 0****/
/**SC7A20的IIC 接口地址类型 8bits: 1****/
#define SL_SC7A20_IIC_7BITS_8BITS 1
/*****************************************/
#if SL_SC7A20_SDO_VDD_GND==0
#define SL_SC7A20_IIC_7BITS_ADDR 0x18
#define SL_SC7A20_IIC_8BITS_WRITE_ADDR 0x30
#define SL_SC7A20_IIC_8BITS_READ_ADDR 0x31
#else
#define SL_SC7A20_IIC_7BITS_ADDR 0x19
#define SL_SC7A20_IIC_8BITS_WRITE_ADDR 0x32
#define SL_SC7A20_IIC_8BITS_READ_ADDR 0x33
#endif
#if SL_SC7A20_IIC_7BITS_8BITS==0
#define SL_SC7A20_IIC_ADDRESS SL_SC7A20_IIC_7BITS_ADDR
#else
#define SL_SC7A20_IIC_WRITE_ADDRESS SL_SC7A20_IIC_8BITS_WRITE_ADDR
#define SL_SC7A20_IIC_READ_ADDRESS SL_SC7A20_IIC_8BITS_READ_ADDR
#endif
#define SL_SC7A20_CHIP_ID_ADDR (unsigned char)0x0F
#define SL_SC7A20_CHIP_ID_VALUE (unsigned char)0x11
#define SL_SC7A20_VERSION_ADDR (unsigned char)0x70
#define SL_SC7A20_VERSION_VALUE (unsigned char)0x11
#define SL_SC7A20E_VERSION_VALUE (unsigned char)0x26
typedef enum {FALSE = 0,TRUE = !FALSE} bool;
/********客户需要进行的IIC接口封包函数****************/
extern unsigned char SL_SC7A20_I2c_Spi_Write(bool sl_spi_iic,unsigned char reg, unsigned char dat);
extern unsigned char SL_SC7A20_I2c_Spi_Read(bool sl_spi_iic,unsigned char reg, unsigned char len, unsigned char *buf);
/**SL_SC7A20_I2c_Spi_Write 函数中, sl_spi_iic:0=spi 1=i2c Reg:寄存器地址 dat:寄存器的配置值*******************/
/**SL_SC7A20_I2c_Spi_Write 函数 是一个单次写的函数*******************************************************************/
/***SL_SC7A20_I2c_Spi_Read 函数中, sl_spi_iic:0=spi 1=i2c Reg 同上,len:读取数据长度,buf:存储数据首地址(指针)***/
/***SL_SC7A20_I2c_Spi_Read 函数 是可以进行单次读或多次连续读取的函数*************************************************/
/*************驱动初始化函数**************/
signed char SL_SC7A20_Driver_Init(bool Sl_spi_iic_init,unsigned char Sl_pull_up_mode);
/***输入参数:1,Sl_spi_iic_init:0-1***2,PULL_UP_MODE:0x00 0x08 0x04 0x0c********/
/****Sl_spi_iic_init=0:SPI MODE, Sl_pull_up_mode config failed****************/
/****Sl_spi_iic_init=1:IIC MODE***********************************************/
/****Sl_pull_up_mode=0x00: SDO I2C pull up***********************************/
/****Sl_pull_up_mode=0x08: I2C pull up and SDO open drain*******************/
/****Sl_pull_up_mode=0x04: SDO pull up and I2C open drain*******************/
/****Sl_pull_up_mode=0x0C: SDO I2C open drain********************************/
/****SDO脚接地,推荐关闭SDO内部上拉电阻****************************************/
/****SPI通讯,推荐关闭SDA,SCL内部上拉电阻,SDO内部上拉电阻会自动关闭**********/
/*************返回数据情况如下*****************/
/**return : 0x11/0x26 表示CHIP ID 正常*********/
/**return : 0 表示读取异常*************/
/**return :-1; SPI 通信问题*************/
/**return :-2; IIC 通信问题*************/
/**return :-3; 连续读取 通信问题********/
/***************执行算法前需要读取FIFO数据*****/
/***************FIFO数据读取后,FIFO会清空*****/
/***************所以FIFO只能定时读取一次*******/
unsigned char SL_SC7A20_Read_FIFO(void);
/**return : FIFO_LEN 表示数组长度***********/
/****说明:该函数需要定时执行,从而保证算法执行到位**/
/***************执行算法获取计步结果***************/
unsigned int SL_Watch_Kcal_Pedo_Algo(bool sl_music_motor_en);
/***sl_music_motor_en=0: 马达电机和音乐功能未打开**/
/***sl_music_motor_en=1: 马达电机和音乐功能已打开**/
/**************获取当天的当前计步值****************/
/*************输出数据为:计步值(步)***************/
/***************获取三轴原始数据***************/
unsigned char SL_SC7A20_GET_FIFO_Buf(signed short *sl_x_buf,signed short *sl_y_buf,signed short *sl_z_buf,bool filter_en);
/****************执行算法后执行该命令**********/
/**x_buf y_buf z_buf : 长度32的数组首地址****/
/**filter_en:0 低通滤波禁止 1:低通滤波使能***/
/****************返回数据情况如下**************/
/**return : FIFO_LEN 表示数组长度***********/
/******************复位计步值************************/
void SL_Pedo_Kcal_ResetStepCount(void);
/**********输入数据为:无******输出数据为:无********/
/*使用方法: 系统时间到第二天时,调用该函数清除计步值*/
/*******************计步状态复位**********************/
void SL_Pedo_WorkMode_Reset(void);
/******************输入参数:无***********************/
/******************输出值参数:无*********************/
/******************升级后,设置计步值,距离,热量************************/
/******************升级后,请在初始化函数后,增加该函数****************/
void SL_Pedo_StepCount_Set(unsigned int sl_pedo_value,unsigned int sl_dis_value,unsigned int sl_kcal_value);
/**********输入数据为:sl_pedo_value 计步值*****/
/**********输入数据为:sl_dis_value 距离值*****/
/**********输入数据为:sl_kcal_value 热量值*****/
/******************计步灵敏度设置********************/
void SL_PEDO_TH_SET(unsigned char sl_pedo_amp,unsigned char sl_pedo_th,unsigned char sl_pedo_weak,unsigned char sl_zcr_lel,unsigned char sl_scope_lel);
/******sl_pedo_amp>4&&sl_pedo_amp<201**************************/
/******sl_pedo_amp:越小灵敏度越高,越容易计步******************/
/******sl_pedo_amp:越大灵敏度越高,越难计步********************/
/******sl_pedo_amp:默认值26,不设置就是26**********************/
/******sl_pedo_th>5&&sl_pedo_th<50*****************************/
/******sl_pedo_th:越小灵敏度越高,越容易计步*******************/
/******sl_pedo_th:越大灵敏度越高,越难计步*********************/
/******sl_pedo_th:默认值10,不设置就是10***********************/
/******sl_pedo_weak>=0&&sl_pedo_weak<6*************************/
/******sl_pedo_th:0,不打开轻微走路计步功能*********************/
/******sl_pedo_th:1,打开轻微走路计步功能***********************/
/******sl_pedo_th:2,打开轻微走路计步功能***********************/
/******sl_pedo_th:3,打开轻微走路计步功能***********************/
/******sl_pedo_th:4,打开轻微走路计步功能***********************/
/******sl_pedo_th:5,打开轻微走路计步功能***********************/
/******sl_pedo_th:默认值0,设置的值越大,检测计步的越灵敏*******/
/*****sl_zcr_lel>=0&&sl_zcr_lel<=255***************************/
/*****sl_zcr_lel:默认值=20,设置的值越小,越容易屏蔽喇叭震动****/
/*****一定时间内的过零率计算***********************************/
/*****sl_scope_lel>=0&&sl_scope_lel<=255***********************/
/*****整体数据幅度阈值*****************************************/
/*******计步主轴设置****************/
void SL_PEDO_SET_AXIS(unsigned char sl_xyz);
/***sl_xyz:0 x轴*******************/
/***sl_xyz:1 y轴*******************/
/***sl_xyz:2 z轴*******************/
/***sl_xyz:3 算法决定**************/
/*设置运动检测幅度阈值和时间阈值****/
void SL_PEDO_INT_SET(unsigned char V_TH,unsigned char T_TH,bool INT_EN);
/***V_TH:0 0-127************************************/
/***T_TH:1 0-127************************************/
/***INT_EN:0 关闭中断功能,1,打开中断状态监测功能***/
/***USE AOI2 INT*************************************/
/*设置运动状态读取******************/
bool SL_INT_STATUS_READ(void);
/*0: 没有运动*********************/
/*1: 有运动***********************/
/*关闭中断功能情况下,一直输出1*****/
/***********关闭IIC设备**************/
/***********Power down 函数**********/
/********不使用该设备情况下**********/
/****如需重启,使用驱动初始化函数****/
bool SL_SC7A20_Power_Down(void);
/*************输入参数:无************/
/**********返回参数情况说明**********/
/**return 1: Power Down Success*****/
/**return 0: Power Down Fail********/
/*************初始化个人参数*************/
/**参数初始化,用于热量,距离计算********/
void SL_Pedo_Person_Inf_Init(unsigned char *Person_Inf_Init);
/*********输入指针参数分别是:身高 体重 年龄 性别***举例:178,60,26 1*********/
/**身高范围: 30cm ~ 250cm ***********/
/**体重范围: 10Kg ~ 200Kg ***********/
/**年龄范围: 3岁 ~ 150岁 ***********/
/**性别范围: 0 ~ 1 0:女 1:男 ****/
/*********************获取运动状态值**********************/
unsigned char SL_Pedo_GetMotion_Status(void);
/**********输入数据为:无*********************************/
/**********输出数据为:0 ~ 3 *****************************/
/**输出数据为:0 *静止或静坐**********/
/**输出数据为:1 *慢走或散步**********/
/**输出数据为:2 *正常走路************/
/**输出数据为:3 *跑步或剧烈运动******/
/**************获取截止当前当天的行走距离*****************/
unsigned int SL_Pedo_Step_Get_Distance(void);
/*******************输入数据为:无************************/
/*******************输出数据为:当天行走距离 *************/
/*******************单位: 分米(dm)******************/
/**************获取截止当前当天的热量消耗*****************/
unsigned int SL_Pedo_Step_Get_KCal(void);
/*******************输入数据为:无************************/
/*******************输出数据为:当天热量消耗值 ***********/
/*********单位: 大卡 1个单位=0.1大卡******************/
/**************获取最近一段时间的走路平均幅度*************/
unsigned short SL_Pedo_Step_Get_Avg_Amp(void);
/********************输入数据为:无***********************/
/***********************1LSB≈XXXmg************************/
/***********************获取当前走路平均步频**************/
unsigned char SL_Pedo_Step_Get_Step_Per_Min(void);
/********************输入数据为:无***********************/
/********************输出数据为:XXX步/分钟 **************/
/***********************获取当前的运动等级****************/
unsigned char SL_Pedo_Step_Get_Motion_Degree(void);
/********************输入数据为:无***********************/
/********************输出数据为:0-25 ********************/
/**********抬手亮屏算法**********/
/*****************抬手亮屏算法初始化函数****************/
void SL_Turn_Wrist_Init(unsigned char *SL_Turn_Wrist_Para);
/************输入参数:*************/
/******SL_Turn_Wrist_Para[0]:加速度计贴片位置设置 0--7********/
/******SL_Turn_Wrist_Para[1]:抬手亮屏灵敏度设置 1--5********/
/******SL_Turn_Wrist_Para[2]:水平抬手亮屏使能控制位0--1********/
/*************三轴加速度计贴片位置设置*************************/
/***SL_Turn_Wrist_Para[0]:设定值的范围为: 0 ~ 7 **************/
/***请参考文档:Silan_MEMS_手环算法说明书_V1.1.pdf**************/
/***SL_Turn_Wrist_Para[1]:设定值的范围为: 1 ~ 5 **/
/*********默认值为:3 中等灵敏度****************/
/*********设定值为:1 最低灵敏度****************/
/*********默认值为:5 最高灵敏度****************/
/*********设定值为:1(最迟钝)~5(最灵敏)***********/
/******SL_Turn_Wrist_Para[2]:水平抬手亮屏使能控制位0--1*******/
/******0:禁止水平抬手功能********/
/******1:使能水平抬手功能********/
/*****************抬手亮屏状态获取函数****************/
signed char SL_Watch_Wrist_Algo(void);
/***********输入参数:无***********/
/***********返回参数情况说明*******/
/**Return: 2 备注说明:屏幕点亮后需要关闭*********/
/**Return: 1 备注说明:屏幕需要点亮***************/
/**Return: 0 备注说明:屏幕不需要点亮*************/
/**Return: -1 备注说明:未初始化或初始化失败*******/
/*****************抬手亮屏状态复位********************/
//void SL_Turn_Wrist_WorkMode_Reset(void);
/******************输入参数:无***********************/
/******************输出值参数:无*********************/
//3-12
//1-10
//0-10
/******************睡眠参数设置********************/
void SL_Sleep_Para(unsigned char adom_time_th,unsigned char sleep_vpp_th,unsigned char sleep_time_th);
/**************************佩戴检测的时长***********************/
/******adom_time_th:0-255 min***********************************/
/******adom_time_th:未活动的时间,大于设置阈值才能认为未佩戴****/
/******adom_time_th:设置值越小,越容易出现未佩戴情况************/
/**************************睡眠中间点阈值***********************/
/******sleep_vpp_th:越小灵敏度越高,越容易睡眠状态切换**********/
/******sleep_vpp_th:越大灵敏度越低,越难睡眠状态切换************/
/******sleep_vpp_th:默认值10,不设置就是10**********************/
/**************************状态切换最小时间*********************/
/******sleep_time_th:该值越小,睡眠状态切换的所需时间就越短*****/
/******sleep_time_th:该值越大,睡眠状态切换的所需时间就越长*****/
/******sleep_time_th:默认值1,不设置就是1***********************/
/***************获取当前的睡眠状态*****************/
unsigned char SL_Sleep_GetStatus(unsigned char SL_Sys_Time);
/*******SL_Sys_Time:当前的时间,以小时为单位******/
/*******全天的输入时间范围为:0-23 ****************/
/***************输出数据范围:0-7******************/
/***************0:清醒状态************************/
/***************7:深度睡眠************************/
/***************获取当前的活动等级*****************/
unsigned char SL_Sleep_Active_Degree(unsigned char mode);
/***************mode:0 定时器0.5s中调用***********/
/***************mode:1 定时器1min中调用***********/
/***************输出数据范围:0-255****************/
/***************0:静止****************************/
/*************255:运动****************************/
unsigned char SL_Sleep_Get_Active_Degree(void);
/***************mode:0 定时器0.5s中调用***********/
/***************mode:1 定时器1min中调用***********/
/***************输出数据范围:0-255****************/
/***************0:静止****************************/
/*************255:运动****************************/
/***************获取当前的佩戴的情况***************/
unsigned char SL_Adom_GetStatus(void);
/***************0:未佩戴**************************/
/***************1:已佩戴**************************/
/***************获取当前的佩戴的情况***************/
unsigned char SL_In_Sleep_Status(void);
/***************0:out sleep**********************/
/***************1:in sleep***********************/
/**************************翻转功能************************/
bool SL_Get_Clock_Status(bool open_close);
/***********输入参数:sensor_pos***********/
/****sensor_pos:1 open 检测是否要关闭时输入 1*************/
/****sensor_pos:0 close 关闭闹铃时时 输入 0*************/
/*********************返回参数情况说明*********************/
/***********************翻转功能检测***********************/
/**Return: 1 备注说明:屏幕已翻转,关闭闹钟************/
/**Return: 0 备注说明:屏幕未翻转,不关闭闹钟**********/
/**************************摇晃功能************************/
bool SL_Get_Phone_Answer_Status(unsigned char Sway_Degree,unsigned char Sway_Num);
/***********输入参数:摇晃等级0--10 摇晃数量0--10***********************/
/***摇晃等级:设置值越小,需要摇晃的幅度越小,越容易触发接听动作*********/
/***摇晃数量:设置值越小,需要摇晃的次数越少,越容易触发接听动作*********/
/***********返回参数情况说明*******************************/
/**Return: 1 备注说明:摇晃动作成立,接听电话**********/
/**Return: 0 备注说明:摇晃动作不成立,不接听电话******/
/************加测项目客户端测试***********/
/***初始化的时候调用用于判断FIFO是否正常**/
bool SL_SC7A20_FIFO_TEST(void);
/*************输入参数:无*****************/
/*************返回数据情况如下************/
/**return :1 FIFO 异常*******************/
/**return :0 FIFO 正常*******************/
#endif/****SL_Watch_ALGO_DRV__H__*********/

BIN
source/asp/新建文件夹/SL_algo1.lib

Binary file not shown.

264
source/asp/新建文件夹/SL_app.c

@ -1,264 +0,0 @@
#include "SL_algo1.h"
#if SL_Sensor_Algo_Release_Enable==0x00
#include "usart.h"
extern signed short SL_DEBUG_DATA[10][128];
extern unsigned char SL_DEBUG_DATA_LEN;
extern unsigned char sl_sleep_sys_cnt;
#endif
#if SL_Sensor_Algo_Release_Enable==0x00
extern signed short SL_ACCEL_DATA_Buf[3][16];
extern unsigned char SL_FIFO_ACCEL_PEDO_NUM;
signed short hp_buf[16];
#endif
#define SL_SC7A20_SPI_IIC_MODE 1
/***SL_SC7A20_SPI_IIC_MODE==0 :SPI*******/
/***SL_SC7A20_SPI_IIC_MODE==1 :IIC*******/
static signed char sl_init_status=0x00;
/**Please modify the following parameters according to the actual situation**/
signed char SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_INIT(void)
{
#if SL_Sensor_Algo_Release_Enable==0x00
unsigned char sl_version_value=0x00;
#endif
// bool fifo_status =0;
unsigned char sl_person_para[4] ={178,60,26,1};
unsigned char Turn_Wrist_Para[3]={1,3,0};//refer pdf
#if SL_Sensor_Algo_Release_Enable==0x00
//sl_version_value==0x11 SC7A20
//sl_version_value==0x26 SC7A20E
SL_SC7A20_I2c_Spi_Read(1, SL_SC7A20_VERSION_ADDR,1, &sl_version_value);
USART_printf( USART1, "Version ID=0x%x!\r\n",sl_version_value);
if(sl_version_value==SL_SC7A20_VERSION_VALUE)
USART_printf( USART1, "SC7A20!\r\n");
else if(sl_version_value==SL_SC7A20E_VERSION_VALUE)
USART_printf( USART1, "SC7A20E!\r\n");
#endif
/*****if use spi mode please config first******/
#if SL_SC7A20_SPI_IIC_MODE == 0//spi
sl_init_status=SL_SC7A20_Driver_Init(1,0x04);//iic mode pull up config
//init sensor
sl_init_status=SL_SC7A20_Driver_Init(0,0x04);//spi or iic select
#else//i2c
sl_init_status=SL_SC7A20_Driver_Init(1,0x00);//spi or iic select
//0x08-->close sdo pull up
#endif
/**********sc7a20 fifo test***************/
//fifo_status=SL_SC7A20_FIFO_TEST();
/**********set pedo sensitivity***********/
SL_PEDO_TH_SET(32,10,1,30,50);//36 12 0 30 50for motor
/*which axis used to pedo depend on algo**/
SL_PEDO_SET_AXIS(3);
/**********set int para*******************/
SL_PEDO_INT_SET(2,1,1);//0 or 1 sleep is different
/**********set motion para****************/
SL_Pedo_Person_Inf_Init(&sl_person_para[0]);//personal para init
/**********set turn wrist para************/
SL_Turn_Wrist_Init(&Turn_Wrist_Para[0]);
/**********set sleep sensitivity**********/
SL_Sleep_Para(120,10,1);
return sl_init_status;
}
static unsigned int SL_STEP = 0;
static unsigned int SL_STEP_TEMP = 0;
static unsigned char SL_STEP_MOTION = 0;
static unsigned int SL_DISTANCE = 0;
static unsigned int SL_KCAL = 0;
static unsigned char SL_CADENCE_STEP = 0;//step per minutes
static unsigned short SL_CADENCE_AMP = 0;//Equal scale scaling
static unsigned char SL_CADENCE_DEGREE = 0;//degree
static signed char SL_WRIST = 0;
static unsigned char SL_SLEEP_ACTIVE = 0;
static unsigned char SL_SLEEP_STATUS = 0;
static unsigned char SL_SLEEP_ADOM = 0;
static unsigned char SL_SLEEP_CNT = 0;
static bool SL_CLOCK_STATUS = 0;
static bool SL_SWAY_STATUS = 0;
static bool SL_SWAY_ENABLE = 0;
static unsigned char SL_INT_TIME_CNT = 0;
#define SL_INT_TIME_TH 12 //per lsb is 0.5s
extern unsigned char sl_sleep_sys_hour;
unsigned char SL_MCU_SLEEP_ALGO_FUNCTION(void);
unsigned int SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO(void)
{
#if SL_Sensor_Algo_Release_Enable==0x00
unsigned char sl_i;
#endif
signed short SC7A20_XYZ_Buf[3][14];
unsigned char SC7A20_FIFO_NUM;
bool SC7A20_INT_STATUS;
if((sl_init_status!=SL_SC7A20_VERSION_VALUE)&&(sl_init_status!=SL_SC7A20E_VERSION_VALUE)) return 0;//initial fail
/*******read int status******/
SC7A20_INT_STATUS=SL_INT_STATUS_READ();
if((SC7A20_INT_STATUS==1)||(SL_STEP_TEMP!= SL_STEP))
{
SL_INT_TIME_CNT =0;
SL_STEP_TEMP =SL_STEP;
}
else
{
if(SL_INT_TIME_CNT<200)
{
SL_INT_TIME_CNT++;
}
}
if(SL_INT_TIME_CNT<SL_INT_TIME_TH)//6s
{
/*******get sc7a20 FIFO data******/
SC7A20_FIFO_NUM= SL_SC7A20_Read_FIFO();
/*******get pedo value************/
SL_STEP= SL_Watch_Kcal_Pedo_Algo(0);//涓嶆墦寮€椹揪鎴栭煶涔愭椂璋冪敤璇ュ嚱鏁?
//SL_STEP= SL_Watch_Kcal_Pedo_Algo(1);//鎵撳紑椹揪鎴栭煶涔愭椂璋冪敤璇ュ嚱鏁?
/*********get sleep active degree value*********/
SL_SLEEP_ACTIVE = SL_Sleep_Active_Degree(0);
/*******get accel orginal data and length*******/
SC7A20_FIFO_NUM = SL_SC7A20_GET_FIFO_Buf(&SC7A20_XYZ_Buf[0][0],&SC7A20_XYZ_Buf[1][0],&SC7A20_XYZ_Buf[2][0],0);
/* SL_Pedo_GetMotion_Status */
SL_STEP_MOTION = SL_Pedo_GetMotion_Status();
/* SL_Pedo_Step_Get_Distance */
SL_DISTANCE = SL_Pedo_Step_Get_Distance();
/* SL_Pedo_Step_Get_KCal */
SL_KCAL = SL_Pedo_Step_Get_KCal();
/*****average step per minutes****/
SL_CADENCE_STEP = SL_Pedo_Step_Get_Step_Per_Min();
/*****average amp per step****/
SL_CADENCE_AMP = SL_Pedo_Step_Get_Avg_Amp();
/*****motion degree****/
SL_CADENCE_DEGREE = SL_Pedo_Step_Get_Motion_Degree();
// if(SL_STEP>200)
// {
/**reset pedo value**/
// SL_Pedo_Kcal_ResetStepCount();
// }
/*******get wrist value******/
SL_WRIST= SL_Watch_Wrist_Algo();
/*******get overturn value******/
SL_CLOCK_STATUS=SL_Get_Clock_Status(1);//open overturn monitor
if(SL_CLOCK_STATUS==1)//overturn success
{
SL_Get_Clock_Status(0);//close overturn monitor
}
/*******get sway value******/
if(SL_SWAY_ENABLE==1)
{
/**this function will disable pedo function**/
SL_SWAY_STATUS=SL_Get_Phone_Answer_Status(4,5);//get sway value
}
}
else
{
//sc7a20 's data for heart rate algo
//SC7A20_FIFO_NUM= SL_SC7A20_Read_FIFO();
//SC7A20_FIFO_NUM= SL_SC7A20_GET_FIFO_Buf(&SC7A20_XYZ_Buf[0][0],&SC7A20_XYZ_Buf[1][0],&SC7A20_XYZ_Buf[2][0],0);
SL_Pedo_WorkMode_Reset();
//SL_Turn_Wrist_WorkMode_Reset();please not use this function
SC7A20_FIFO_NUM=0;
}
/*******get sleep status value******/
SL_SLEEP_CNT++;
#if SL_Sensor_Algo_Release_Enable==0x00
if(SL_SLEEP_CNT>39)//1min
#else
if(SL_SLEEP_CNT>119)//1min
#endif
{
#if SL_Sensor_Algo_Release_Enable==0
sl_sleep_sys_cnt++;
if(sl_sleep_sys_cnt>59)//min
{
sl_sleep_sys_cnt=0;
sl_sleep_sys_hour++;//hour
if(sl_sleep_sys_hour==24)
sl_sleep_sys_hour=0;
}
#endif
SL_SLEEP_CNT=0;
SL_MCU_SLEEP_ALGO_FUNCTION();
}
#if SL_Sensor_Algo_Release_Enable==0x00
SL_DEBUG_DATA_LEN=SC7A20_FIFO_NUM;
for(sl_i=0;sl_i<SL_DEBUG_DATA_LEN;sl_i++)
{
SL_DEBUG_DATA[0][sl_i]=SC7A20_XYZ_Buf[0][sl_i];
SL_DEBUG_DATA[1][sl_i]=SC7A20_XYZ_Buf[1][sl_i];
SL_DEBUG_DATA[2][sl_i]=SC7A20_XYZ_Buf[2][sl_i];
SL_DEBUG_DATA[3][sl_i]=SL_STEP;
SL_DEBUG_DATA[4][sl_i]=SL_WRIST;
// SL_DEBUG_DATA[4][sl_i]=SL_CLOCK_STATUS;
// SL_DEBUG_DATA[5][sl_i]=SL_SLEEP_STATUS;
SL_DEBUG_DATA[5][sl_i]=SL_SWAY_STATUS;
SL_DEBUG_DATA[6][sl_i]=SL_STEP_MOTION;
SL_DEBUG_DATA[7][sl_i]=SL_DISTANCE;
// SL_DEBUG_DATA[7][sl_i]=hp_buf[sl_i];
SL_DEBUG_DATA[8][sl_i]=SL_KCAL;
SL_DEBUG_DATA[9][sl_i]=SL_CADENCE_STEP;
// SL_DEBUG_DATA[8][sl_i]=SL_CADENCE_AMP;
// SL_DEBUG_DATA[9][sl_i]=SL_CADENCE_DEGREE;
}
#endif
return SL_STEP;
}
#if SL_Sensor_Algo_Release_Enable==0x00
unsigned short sl_sleep_counter=0;
#endif
#define SL_SLEEP_DEEP_TH 6
#define SL_SLEEP_LIGHT_TH 3
/***Call this function regularly for 1 minute***/
unsigned char SL_MCU_SLEEP_ALGO_FUNCTION(void)
{
/*******get sleep status value******/
SL_SLEEP_STATUS= SL_Sleep_GetStatus(sl_sleep_sys_hour);
SL_SLEEP_ACTIVE= SL_Sleep_Get_Active_Degree();
SL_SLEEP_ADOM = SL_Adom_GetStatus();
#if SL_Sensor_Algo_Release_Enable==0x00
sl_sleep_counter++;
USART_printf( USART1, "step=%d! sys_time=%d!\r\n",SL_STEP,sl_sleep_sys_hour);
USART_printf( USART1, "T=%d,sleep_status:%d,sleep_adom:%d!\r\n",sl_sleep_counter,SL_SLEEP_STATUS,SL_SLEEP_ADOM);
USART_printf( USART1, "SL_SLEEP_ACTIVE:%d!\r\n",SL_SLEEP_ACTIVE);
#endif
if(SL_SLEEP_STATUS<SL_SLEEP_LIGHT_TH)
{
return 0;//0 1 2 3
}
else if(SL_SLEEP_STATUS<SL_SLEEP_DEEP_TH)
{
return 1;//4 5 6
}
else
{
return 2;//7
}
}

10
source/asp/新建文件夹/SL_app1.h

@ -1,10 +0,0 @@
#ifndef SL_Watch_Pedo_Kcal_Wrist_Sleep_Sway_Application__H__
#define SL_Watch_Pedo_Kcal_Wrist_Sleep_Sway_Application__H__
extern signed char SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_INIT(void);
extern unsigned int SL_SC7A20_PEDO_KCAL_WRIST_SLEEP_SWAY_ALGO(void);
#endif

46
source/asp/新建文件夹/asp_moto.c

@ -1,46 +0,0 @@
#include "asp_moto.h"
#include "debug_drv.h"
void L2_moto_init(void)
{
;
}
/// L3_moto_debug(D_cmd_filter_moto)
void L3_moto_debug(u8 filter)
{
if(filter == Ts_debug.td->filter)
{///filter num d1 d2 d3 ....dn
//// FD 08 11 22 33 44 55 66 77 88
L1_uartD_uchexArray(Ts_debug.td,Ts_debug.td->R1);
if(0x10 == Ts_debug.td->ocr)///read 读
{
//NUM: 0 1 2 3 4
// Fx R1 R2 R3 ocr
// sla reg1 num
/// f1 32 15 06 10
printf("\r\n ch(%d)=",(int)Ts_debug.td->R1);
/// Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R1);
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16);
}
else if(0x11 == Ts_debug.td->ocr)
{
}
else if(0x12 == Ts_debug.td->ocr)
{
}
else
{
}
}
}

13
source/asp/新建文件夹/asp_moto.h

@ -1,13 +0,0 @@
#ifndef _ASP_MOTO_H_
#define _ASP_MOTO_H_
#include "bsp_config.h"
//485_RE P33
//485_DE P32
///#define D_485_TX() P55 = 1;// >750us
///#define D_485_RX() P55 = 0;
extern void L2_moto_init(void);
#define D_cmd_filter_moto 0xf0
extern void L3_moto_debug(u8 filter);
#endif

87
source/asp/新建文件夹/asp_para.c

@ -1,87 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "asp_para.h"
///#include "common.h"
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
#include "msp_eeprom.h"
/*********
v3.3
AA 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
#e2p read success
00 00 00 00 00 00 00 00 00 00
AA 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
#e2p read success
00 00 00 00 00 00 00 00 00 00
AA 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
#e2p read success
00 00 00 00 00 00 00 00 00 00
AA 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
#e2p read success
00 00 00 00 00 00 00 00 00 00
8ADC_SAMPLEADC_SAMPLEADC_SAMPLEADC_SAMPLE4E320 F408 2088 FA90 0000BC90 1502
**********/
TS_eeprom_param_ eep_param;
U8 L1_para_read(U8 *buf,U8 *len)
{
U8 dlen = 0;
L0_Iap_Read_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + EEPROM_PARAM_DATA_MAX + 2);
/// L0_uartN_uchexArray(0,(u8 *)&eep_param,20);
if(eep_param.filter == EEPROM_PARAM_FILTER)
{
dlen = eep_param.len - 2;
crc16(eep_param.crc,(U8*)&eep_param,2+dlen);
if(eep_param.crc[0] == eep_param.buf[dlen] && eep_param.crc[1] == eep_param.buf[dlen+1])
{
/// if()
//L0_uart0_uc('#');
//Lc_buf_copy_uc((U8*)&G.p,(U8*)eep_param.buf,dlen);
Lc_buf_copy_uc(buf,(U8*)eep_param.buf,dlen);//防止dlen>sizeof(G.P)引起的内存错误
*len = dlen;
return 0;
}
}
return 1;
}
U8 L1_para_write(U8 *buf, U8 len)
{
U8 dlen = len;
eep_param.filter = EEPROM_PARAM_FILTER;////fxime
eep_param.len = dlen + 2;
Lc_buf_copy_uc((U8*)eep_param.buf,buf,dlen);
crc16(eep_param.crc, &eep_param, 2+dlen);
eep_param.buf[dlen] = eep_param.crc[0];
eep_param.buf[dlen+1] = eep_param.crc[1];
L0_Iap_Erase(EEP_PARAM_ADDR);
L0_Iap_Program_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + dlen + 2);
L0_uart0_uc('&');
return 0;
}

67
source/asp/新建文件夹/asp_para.h

@ -1,67 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file app_save.h
/// @brief @ app save
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20220120
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _ASP_EEPROM_H
#define _ASP_EEPROM_H
#include "TTSS_task.h"
#include "c_lib.h"
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
/////cc 20220127 和cup息息相关 应该和标识牌_config进行匹配
/// 16k =16 1024 = 32 512 =
//// 16 1024 =16384 =0x4000
#define EEP_SECTOR_SIZE 0x200 ///512
#define EEP_PARAM_ADDR (EEP_SECTOR_SIZE * 1)
#define EEP_ENC_ADDR (EEP_SECTOR_SIZE * 0)//// 加密信息
/**
* EEPROM
*/
#define EEPROM_PARAM_DATA_MAX 90
#define EEPROM_PARAM_FILTER 0xAA
typedef struct
{
U8 filter;
U8 len;
U8 buf[EEPROM_PARAM_DATA_MAX];
U8 crc[2];
}TS_eeprom_param_;
#define MCU_ID_LEN 7
#define MCU_ID_KEY_LEN 4
#define EEPROM_ENC_DATA_MAX 64
#define EEPROM_ENC_FILTER 0xAA
typedef struct ts_eeprom_enc
{
U8 enc_key[MCU_ID_KEY_LEN];
U8 enc_val[MCU_ID_LEN];
U8 crc[2];
}TS_EEPROM_ENC_;
U8 L1_para_read(U8 *buf,U8 *len);
U8 L1_para_write(U8 *buf, U8 len);
#endif // #ifndef _APP_TASK_ADC_H

588
source/asp/新建文件夹/asp_schain.c

@ -1,588 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "asp_schain.h"
///#include "common.h"
#include "msp_uart0.h"
#include "bsp_cs1232.h"
//=============================================
//S_TASK_ADC_CHANNEL_BLUR ts_adc_channel_blurs[D_ADC_CHANNEL_NUM];
//S_TASK_ADC_CHANNEL_SHOW ts_adc_channel_show;
TS_TASK_ADC_SAMPLE ts_adc_samples[D_ADC_CHANNEL_NUM];
/***********
TS_TASK_ADC_SHIFTFILTER ts_adc_ShiftFilter[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM];
*********/
void L2_task_adc_SAinit(U8 ch,U8 *a,U8 *b)
{
ts_adc_samples[ch].ts_SAa.shift = *a;
ts_adc_samples[ch].ts_SAb.shift = *b;
}
//ch是0123,代表4通道
void L2_task_adc_init(U8 ch)
{
//通道采集任务初始化
L1_task_init(&ts_adc_samples[ch].task);
L3_task_s_go(ts_adc_samples[ch],D_task_init);
ts_adc_samples[D_Wch1].ch = D_Wch1;
ts_adc_samples[D_Wch2].ch = D_Wch2;
ts_adc_samples[D_Wch3].ch = D_Wch3;
ts_adc_samples[D_Wch4].ch = D_Wch4;
}
//ADC Channel 采样任务
#define D_task_ADC_CHx_SAMPLE_JITTER_START_SAMPLE 0x53
#define D_task_ADC_CHx_JITTER 0x63
#define D_task_ADC_CHx_PIANYI 0x93
#define D_task_ADC_CHx_JITTER2 0x83
#define D_task_ADC_CHx_despiking_shift 0x94
#define D_task_ADC_CHx_SAMPLE_WAIT_LOW 0x73
#define D_task_ADC_CHx_SAMPLE_READ 0x54
#define D_task_ADC_CHx_SAMPLE_OUT 0x55
#define D_task_ADC_CHx_SHIFTFILTER 0x56
#define D_task_ADC_CHx_SHIFTFILTER2 0x57
#define D_ADC_JITTER_zero 11///还包含建立时间 至少9个
#define D_ADC_JITTER_FINISH 12///还包含建立时间 至少9个
/********
80hZ
1000ms/80= 12.5ms/point
ushex send = 4Bytes+blank = 5Byte;
115200 0.1ms/Byte
5Bytes 0.5ms 2ms
*******/
/****************
^
|
|--------------------------zeroout
| | | | | offset
| | | | .
| . | |
0------.----|-------------> 0
| .
ts_adc_samples[3].offset = R.sd.zeroout;
ts_adc_samples[0].zeroout = R.sd.zeroout;
R.sd.zeroout= 2418 = 0x 972 offset 2418 = 0x 972
R.sd.zeroout= 2418 = 0x 972 offset 2418 = 0x 972
R.sd.zeroout= 2418 = 0x 972 offset 2418 = 0x 972
R.sd.zeroout= 2418 = 0x 972 offset 2418 = 0x 972
4
out1 offset
Z00 0116 085C
Z01 F671 1301
Z02 1642 F330
Z03 FF66 0A0C
092B 0967 0928 0954 0943 0000
08DF 0956 08E0 0929 090F 0000
0895 0945 089C 0900 08DD 0000
R.sd.zeroout= 8049 = 0x1f71 offset 8049 = 0x1f71
4
Z00 0415 1B5C
Z01 F482 2AEF
Z02 1902 066F
Z03 02C7 1CAA
0000 1F4D 1F16 1F35 1766 000F
0000 1F34 1EB7 1F08 173C 000E
0000 1F19 1E6C 1E73
*********************/
void L3_out_zero(u8 ch)
{
vS16 t,m;
t = ts_adc_samples[ch].out1;
m = ts_adc_samples[ch].zeroout;
m -= t;
ts_adc_samples[ch].offset = (vU16)m;
/// L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
/// printf("\r\nzeroout = %4x offset= 0x%4x\r\n", ts_adc_samples[ch].zeroout,ts_adc_samples[ch].offset);
/// D_ADC_OFFSET(ch) = ts_adc_samples[ch].zeroout - ts_adc_samples[ch].out1;
}
vU16 L3_out_tran2(vU32 rdata)
{
vU16 t16;
//// L0_ADS1231_readCH2(0,&rdata);
// L0_uart0_uc('0'+ch); L0_uart0_uc(0x09);
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
if (rdata > 0x007fFFff)
{
rdata >>= D_sensor_zoom; ///fixme:此处正负差和移位不一致需要谨慎
rdata |= D_sensor_zoom_FF; /// 1111 1100
}else
{
rdata >>= D_sensor_zoom;
}
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
t16 = rdata;
// L0_uart0_ushex(t16); L0_uart0_uc(0x09);
///L0_uart0_0d0a();
return t16;
}
S16 L3_out_tran(vU32 rdata)
{
S16 t16;
/// 24bits 3Bytes
rdata >>= 8;
t16 = rdata;
return t16;
}
vU16 L3_out_offset(u8 ch,vU16 t16)
{
vU16 out;
/// L0_uart0_ushex(t16); L0_uart0_uc(' ');
if(t16 & 0x8000) //最高位为1,<0则
{
t16 = 0xffFF - t16;///转变为正数
///*d = D_ADC_OFFSET - t16;
out = ts_adc_samples[ch].offset - t16;
// L0_uart0_uc('$'); L0_uart0_ushex(ts_adc_samples[ch].offset);L0_uart0_uc(' ');
}else
{
out = t16 + ts_adc_samples[ch].offset;
}
// L0_uart0_ushex(out);L0_uart0_uc(' '); L0_uart0_uc('R');L0_uart0_0d0a();
return out;
}
void L2_task_adc_sample(TS_TASK_ADC_SAMPLE *s)
{
TTSS_Task_init():
////cc 初始化尽量放到这里,不要放到main ——init中,减少系统启动的时间
s->jitter_start = 0; s->ok = 0;
/// L0_uart0_sendstr("\r\nADC_SAMPLE\r\n");
/// L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
L2_task_go_Tdelay(D_task_ADC_CHx_SAMPLE_READ,D_Tdelay_Msec(1500)); //延时15ms
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_READ):
if(0 == L0_adc_DOUT_AT(s->ch))
{////L0_uart0_uc('X');L0_uart0_uc(0x30+s->ch);
//// L0_ADS1231_readCH2(s->ch,&(s->out1)); ////
L0_ADS1231_readCH2(s->ch,&(s->out0));
L2_task_go(D_task_ADC_CHx_PIANYI);
}
TTSS_Task_step(D_task_ADC_CHx_PIANYI):
s->out1 = L3_out_tran(s->out0);
////s->out1a = L3_out_tran2(s->out0);
/// L0_uart0_uc('0' + s->ch);
s->out2 = L3_out_offset(s->ch,s->out1);
L2_task_go(D_task_ADC_CHx_despiking_shift);
TTSS_Task_step(D_task_ADC_CHx_despiking_shift):
s->outm[0] = s->outm[1];
s->outm[1] = s->outm[2];
s->outm[2] = s->out2;
Lc_despiking_shift3_U16(s->outm);////采样后进行削峰
s->out3 = s->outm[1];
L2_task_go(D_task_ADC_CHx_JITTER2);
TTSS_Task_step(D_task_ADC_CHx_JITTER2):
///刚开始的抖动,先去掉几个最开始的数据
if(D_ADC_JITTER_FINISH == s->jitter_start)
{
s->ts_SAa.average = (vU32)s->out3;///shiftaverage_a路初始化
s->ts_SAa.sum = s->ts_SAa.average << s->ts_SAa.shift;
s->ts_SAb.average = (vU32)s->out3;///shiftaverage_b路初始化
s->ts_SAb.sum = s->ts_SAb.average << s->ts_SAb.shift;
L2_task_go(D_task_ADC_CHx_SHIFTFILTER);
}else if(D_ADC_JITTER_zero == s->jitter_start)
{///
L3_out_zero(s->ch);///算出当前的偏移量 更新offset
L0_uart0_uc('Z');L0_uart0_uchex(s->ch);
L0_uart0_uc(' ');L0_uart0_ushex(s->out1);L0_uart0_uc(' ');
L0_uart0_uc(' ');L0_uart0_ushex(s->offset);L0_uart0_uc(' ');
s->jitter_start ++;
L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
}else
{
s->jitter_start ++;
L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
}
TTSS_Task_step(D_task_ADC_CHx_SHIFTFILTER):
//L0_uart0_uc('B');
s->ts_SAa.sum -= s->ts_SAa.average;
s->ts_SAa.sum += (vU32)s->out3;
s->ts_SAa.average = s->ts_SAa.sum >> s->ts_SAa.shift;
// s->ts_SAa.new = s->ts_SAa.average;
s->ts_SAa.out4 = (vU16)s->ts_SAa.average;
/// L0_uart0_uc('s');
L2_task_go(D_task_ADC_CHx_SHIFTFILTER2);
TTSS_Task_step(D_task_ADC_CHx_SHIFTFILTER2):
s->ts_SAb.sum -= s->ts_SAb.average;
s->ts_SAb.sum += (vU32)s->out3;
s->ts_SAb.average = s->ts_SAb.sum >> s->ts_SAb.shift;
s->ts_SAb.out4 = (vU16)s->ts_SAb.average;
///out4 = out3
s->ok = 1;
L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
/// L2_task_go(D_task_ADC_CHx_SAMPLE_OUT);
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_OUT):
/***
L0_uart0_ulhex(s->out0); L0_uart0_uc(0x09);
L0_uart0_ushex(s->out1); L0_uart0_uc(0x09);
L0_uart0_ushex(s->out2); L0_uart0_uc(0x09);
L0_uart0_ushex(s->ts_SAa.out4); L0_uart0_uc(0x09);
L0_uart0_ushex(s->ts_SAb.out4);
L0_uart0_0d0a();
**/
////
//// L0_uart0_uc('0' + s->ch);L0_uart0_uc('A');//
TTSS_Task_end();
}
#if 0
void L3_task_show_init(void)
{
//显示任务初始化
L1_task_init(&ts_adc_blur_show.task);
L3_task_s_go(ts_adc_blur_show,D_task_init);
ts_adc_blur_show.rough_weight = 0;
}
//中值滤波任务
#define D_task_ADC_CHx_FILTER_MID_GET 0x50
#define D_task_ADC_CHx_FILTER_MID_COUNT 0x51
#define D_task_ADC_CHx_FILTER_MID_OUT 0x52
void L3_task_adc_filter_mid(S_TASK_ADC_BLUR_MID *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_GET)
if(ts_adc_channel_samples[s->ch].n >= s->max)
{
U8 i = 0;
for(i=0;i<s->max;i++)
{
s->in[i] = ts_adc_channel_samples[s->ch].out1[i];
}
ts_adc_channel_samples[s->ch].n = 0;
L2_task_go(D_task_ADC_CHx_FILTER_MID_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_COUNT)
s->midval = Lc_S32_media(s->in, s->max);
L2_task_go(D_task_ADC_CHx_FILTER_MID_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_OUT)
s->out[s->n] = s->midval;
//R.adval[s->ch] = s->out[s->n];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET);
TTSS_Task_end();
}
//均值滤波任务
#define D_task_ADC_CHx_FILTER_AVG_GET 0x50
#define D_task_ADC_CHx_FILTER_AVG_COUNT 0x51
#define D_task_ADC_CHx_FILTER_AVG_OUT 0x52
void L3_task_adc_filter_avg(S_TASK_ADC_BLUR_AVG *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_GET)
if(ts_adc_channel_samples[s->ch].n >= s->max)
{
U8 i = 0;
ts_adc_channel_samples[s->ch].n = 0;
for(i=0;i<s->max;i++)
{
s->in[i] = ts_adc_channel_samples[s->ch].out1[i];
}
L2_task_go(D_task_ADC_CHx_FILTER_AVG_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_COUNT)
s->avgval = Lc_vS32_avg(s->in,s->max);
L2_task_go(D_task_ADC_CHx_FILTER_AVG_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_OUT)
s->out[s->n] = s->avgval;
//R.adval[s->ch] = s->out[s->n];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET);
TTSS_Task_end();
}
//移位滤波任务
#define D_task_ADC_CHx_FILTER_SHIFT_GET 0x50
#define D_task_ADC_CHx_FILTER_SHIFT_COUNT 0x51
#define D_task_ADC_CHx_FILTER_SHIFT_OUT 0x52
void L3_task_adc_ShiftFilter(TS_TASK_ADC_SHIFTFILTER *s)
{
TTSS_Task_init()
s->average = ts_adc_samples[s->ch].out2;///
s->sum = s->average << s->shift;
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_GET)
s->sum +=
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_COUNT)
s->sum[0] -= s->shiftval[0];
s->sum[0] += s->in;
s->shiftval[0] = s->sum[0] >> s->shiftreg[0];
s->sum[1] -= s->shiftval[1];
s->sum[1] += s->in;
s->shiftval[1] = s->sum[1] >> s->shiftreg[1];
s->sum[2] -= s->shiftval[2];
s->sum[2] += s->in;
s->shiftval[2] = s->sum[2] >> s->shiftreg[2];
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_OUT)
s->out[0][s->n] = s->shiftval[0];
s->out[1][s->n] = s->shiftval[1];
s->out[2][s->n] = s->shiftval[2];
//R.adval[s->ch] = s->out[0][s->n] = s->shiftval[0];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET);
TTSS_Task_end();
}
//输出判定任务
#define D_task_ADC_CHx_FILTER_OUT_GET 0x50
#define D_task_ADC_CHx_FILTER_OUT_COUNT 0x51
#define D_task_ADC_CHx_FILTER_OUT_CHANGE 0x52
#define D_task_ADC_CHx_FILTER_OUT_OUT 0x53
void L3_task_adc_filter_out(S_TASK_ADC_BLUR_OUT *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_GET)
if(s->h != ts_adc_blur_shift[s->ch].n)
{
s->h = ts_adc_blur_shift[s->ch].n;
s->in[0] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 1)];
s->in[1] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 2)];
//获取输出曲线val
s->newout = ts_adc_blur_shift[s->ch].out[s->oldnum][count_n(ts_adc_blur_shift[s->ch].n, 1)];
L2_task_go(D_task_ADC_CHx_FILTER_OUT_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_COUNT) //根据阀值选择输出的曲线
//判断选择新曲线
if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[0])//2KG
{
s->newnum = 0;
}
else if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[1]) //0.5KG
{
s->newnum = 1;
}
else
{
s->newnum = 2;
}
//L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
L2_task_go(D_task_ADC_CHx_FILTER_OUT_CHANGE);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_CHANGE)
if(s->newnum != s->oldnum)//切换移位滤波时调整其他滤波的SUM
{
s->oldnum = s->newnum; //不能只调整新值,所有曲线都要一起调整
//ts_adc_blur_shift[s->ch].sum[1] = (ts_adc_blur_avg[s->ch].out[ts_adc_blur_avg[s->ch].n] * R.adc_blur_avg);
ts_adc_blur_shift[s->ch].sum[0] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[0];
ts_adc_blur_shift[s->ch].shiftval[0] = s->newout;
ts_adc_blur_shift[s->ch].sum[1] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[1];
ts_adc_blur_shift[s->ch].shiftval[1] = s->newout;
ts_adc_blur_shift[s->ch].sum[2] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[2];
ts_adc_blur_shift[s->ch].shiftval[2] = s->newout;
}
L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_OUT)
R.adval[s->ch] = s->newout;
//R.adval[s->ch] = ts_adc_channel_samples[s->ch].adcval;
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET);
TTSS_Task_end();
}
//显示任务
#define D_task_ADC_CHx_SHOW 0x50
void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_SHOW);
TTSS_Task_step(D_task_ADC_CHx_SHOW)
R.ch_weight[0] = D_COUNT_WEIGHT(R.adval[0]);
R.ch_weight[1] = D_COUNT_WEIGHT(R.adval[1]);
R.ch_weight[2] = D_COUNT_WEIGHT(R.adval[2]);
R.ch_weight[3] = D_COUNT_WEIGHT(R.adval[3]);
s->rough_weight = R.ch_weight[0] + R.ch_weight[1] + R.ch_weight[2] + R.ch_weight[3]; //毛重
#if 0
L0_uart0_ulhex(s->rough_weight);
L0_uart0_uc(' ');
#endif
if( ABS(R.rough_weight,s->rough_weight) >= 50) //变化超过0.05KG
{
R.rough_weight = s->rough_weight;
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
}
L2_task_go_Tdelay(D_task_ADC_CHx_SHOW,D_Tdelay_Msec(15)); //延时15ms
TTSS_Task_end();
}
/*******
ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1;
ts_adc_channel_samples[ch].pool = 0;
ts_adc_channel_samples[ch].adcval = 0;
ts_adc_channel_samples[ch].n = 0;
ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch;
//通道中值滤波任务初始化
L1_task_init(&ts_adc_blur_mid[ch].task);
L3_task_s_go(ts_adc_blur_mid[ch],D_task_init);
ts_adc_blur_mid[ch].n = 0;
ts_adc_blur_mid[ch].max = R.p.adc_blur_mid;
ts_adc_blur_mid[ch].ch = D_ADCCH_1 + ch;
//通道均值滤波任务初始化
L1_task_init(&ts_adc_blur_avg[ch].task);
L3_task_s_go(ts_adc_blur_avg[ch],D_task_init);
ts_adc_blur_avg[ch].max = R.p.adc_blur_avg;
ts_adc_blur_avg[ch].avgval = 0;
ts_adc_blur_avg[ch].n = 0;
ts_adc_blur_avg[ch].ch = D_ADCCH_1 + ch;
//通道移位滤波任务初始化
L1_task_init(&ts_adc_blur_shift[ch].task);
L3_task_s_go(ts_adc_blur_shift[ch],D_task_init);
ts_adc_blur_shift[ch].n = 0;
ts_adc_blur_shift[ch].h = 0;
ts_adc_blur_shift[ch].shiftreg[0] = R.p.adc_blur_shift[0];
ts_adc_blur_shift[ch].shiftreg[1] = R.p.adc_blur_shift[1];
ts_adc_blur_shift[ch].shiftreg[2] = R.p.adc_blur_shift[2];
ts_adc_blur_shift[ch].sum[0] = 0;
ts_adc_blur_shift[ch].sum[1] = 0;
ts_adc_blur_shift[ch].sum[2] = 0;
ts_adc_blur_shift[ch].shiftval[0] = 0;
ts_adc_blur_shift[ch].shiftval[1] = 0;
ts_adc_blur_shift[ch].shiftval[2] = 0;
ts_adc_blur_shift[ch].ch = D_ADCCH_1 + ch;
//输出判定任务初始化
L1_task_init(&ts_adc_blur_out[ch].task);
L3_task_s_go(ts_adc_blur_out[ch],D_task_init);
ts_adc_blur_out[ch].h= 0;
ts_adc_blur_out[ch].threshold[0] = D_blur_threshold_2_1(R.p.adc_blur_threshold[0]); //2KG
ts_adc_blur_out[ch].threshold[1] = D_blur_threshold_2_1(R.p.adc_blur_threshold[1]); //0.5KG
ts_adc_blur_out[ch].newnum = 0;
ts_adc_blur_out[ch].oldnum = 0;
ts_adc_blur_out[ch].oldout = 0;
ts_adc_blur_out[ch].newout = 0;
ts_adc_blur_out[ch].n = 0;
ts_adc_blur_out[ch].ch = D_ADCCH_1 + ch;
*****/
#if 0
//通道切换任务初始化
//L1_task_init(&ts_adc_channel_switch.task);
L3_task_s_go(ts_adc_channel_switch,D_task_init);
#endif
#endif

127
source/asp/新建文件夹/asp_schain.h

@ -1,127 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _asp_schain_H
#define _asp_schainH
#include "../bsp/bsp_config.h"
#include "TTSS_task.h"
#include "c_lib.h"
///#include "app_config.h"
#define D_Wch1 0
#define D_Wch2 1
#define D_Wch3 2
#define D_Wch4 3
#define ADC_CHANNEL_STATUS_UNREADY 0 //UnReady状态,不能读取
#define ADC_CHANNEL_STATUS_READY 1 //ready状态,可以读取
#define D_ADC_CHANNEL_NUM 4
#define D_ADC_CH_SAMPLE_BUF_MAX 50
#define D_ADC_CH_BLUE_POOL_NUM 3
typedef struct
{
vU32 average; ///
vU8 shift; ///移动的位数 1-2 2-4 3-8 4-16
vU32 sum;
vU32 new; ///新的输出值
vU16 out4; ///
}TS_shift_averge_;
////cc 比较重要的滤波调整参数,根据实际需要进行调整
#define D_ADC_shiftaverage_a 2
#define D_ADC_shiftaverage_b 4
///vtype i; vU32 rdata = 0;
//任务读
/// 单个传感器 D_sensor_zoom=8 2kg 289 80kg 8374
/// D_sensor_zoom=6 1274 31787
///#define D_sensor_zoom 6
///#define D_sensor_zoom_FF 0xFFfc0000
#define D_sensor_zoom 7
#define D_sensor_zoom_FF 0xFFfe0000
///#define D_sensor_zoom 8///实际上8位不需要,因为强制转换成16位后自动符合要求
///#define D_sensor_zoom_FF 0xfF000000
//// 31688 80kg 31688/80= =400
//#define D_ADC_PER_KG 400 ///每公斤adc
//#define D_ADC_OFFSET (20*D_ADC_PER_KG)
///134
///extern TS_GlobalRegister R;
#define D_ADC_PER_KG 0x134///每公斤adc
#define D_ADC_OFFSET(ch) ts_adc_samples[ch].offset////(30*D_ADC_PER_KG)
///#define D_ADC_OFFSET(ch) 0////(30*D_ADC_PER_KG)
/*****
000028FE 1kg 81.984375
00015D85 3kg 699.0390625 617.0546875
2^7 128 0x134
******/
//AD_CHANNEL_SAMPLE 采样
#define MAX_OUT_NUM 10
typedef struct _s_task_adc_sample
{
TS_task task;
vU8 ok;
vU8 ch;
/// vS32 adcval;
// vS32 pool;
vU8 jitter_start; ///刚开始的抖动,先去掉几个最开始的数据
vU32 out0;
vU16 out1;
S16 out1a;
vU16 outm[3];///中值移位滤波的缓存
vU16 out2;
vU16 out3;
/****************
^
|
|--------------------------zeroout
| | | | | offset
| | | | .
| . | |
0------.----|-------------> 0
| .
*********************/
vU16 offset;
vU16 zeroout;
TS_shift_averge_ ts_SAa;
TS_shift_averge_ ts_SAb;
vU16 out4;//滤波输出
vU16 out5;////选择后的
}TS_TASK_ADC_SAMPLE;
extern TS_TASK_ADC_SAMPLE ts_adc_samples[D_ADC_CHANNEL_NUM];
extern void L2_task_adc_init(U8 ch);
extern void L2_task_adc_sample(TS_TASK_ADC_SAMPLE *s);
extern void L2_task_adc_SAinit(U8 ch,U8 *a,U8 *b);
void L3_out_zero(u8 ch);
#endif // #ifndef _asp_adc_H

620
source/asp/新建文件夹/asp_weight_save.c

@ -1,620 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file app_save.c
/// @brief @ app save
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20220120
/// @note cc_AS_stc02
#ifdef doc453453
app_save
asp_para L1_para_write eeprom的读写函数和地址配置
U8 L1_para_write(U8 *buf, U8 len)
msp_eeprom mcu的eeprom的底层驱动函数
----------global_register-------------------------------->
iapData数据的映射
TS_GlobalRegisterd S
..........................................
//RO Register
U16 reserved1;
//RW Register
TS_IapData_ sd;//// save data 需要保存的额参数
-----------iapData-------------------------------------->
TS_IapData_ iapData
TS_IapData_ code iapData_factory
..................................................
S16 slaver_id;
TS_weight_point_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
TS_weight_point_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
////此值上电后更改, 顺便保存(区别于实时保存),
u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
-----------eep_param----------------------------------->
eeprom中的缓存
eeprom ---,,.
TS_eeprom_param_
.........................................
U8 filter;
U8 len;
U8 buf[EEPROM_PARAM_DATA_MAX];
U8 crc[2];
#endif
//////////////////////////////////////////////////////////////////////////////
#include "asp_weight_save.h"
#include "app_config.h"
#include "debug_drv.h"
#include "msp_eeprom.h"
#define D_0kg 0
#define D_20kg 200
#define D_85kg 850
///#define D_20kg 190
///cc 2023/04/06--6:41:48 西安方块 传感器 根据传感器调配 程序应该专门数据结构
/*
///cc 2023/04/06--6:43:39
\--------adc---------
hex dec kg adc/kg
68F 1679 10 168
4196 16790 100
37BF 14272 85
D1E 3358 20
1out_adc
210kg D_Rsensor_per_10kg
step 1 adc
step 2 offset
step 3
step 4 zeroout
step 5
^
|
|
| | | | | offset
| | | | .
| . | |
0------.----|-------------> 0
| .
vU16 offset;
vU16 zeroout; ///默认的零点输出吧所有通道都调整成同一个起点 ,应该远大于原始采样值out_adc的最大值
*/
///打开adc输出监控,0kg的试试每一路的输出就是 0kg_out1_adc
#define D_ch1_0kg_out1_adc (vS16)0xFF3D
#define D_ch2_0kg_out1_adc (vS16)0xFF8D
#define D_ch3_0kg_out1_adc (vS16)0x00D9
#define D_ch4_0kg_out1_adc (vS16)0xFFE0
/////需要通过测试配置 如果不在意符号位 可以优化 diao
#define D_ch1_out1_offset (D_ch1_wantline-D_ch1_0kg_out1_adc)
#define D_ch2_out1_offset (D_ch2_wantline-D_ch2_0kg_out1_adc)
#define D_ch3_out1_offset (D_ch3_wantline-D_ch3_0kg_out1_adc)
#define D_ch4_out1_offset (D_ch4_wantline-D_ch4_0kg_out1_adc)
#define D_ch1_wantline 0x18da
#define D_ch2_wantline 0x18da
#define D_ch3_wantline 0x18da
#define D_ch4_wantline 0x18da
///cc 2023/04/06--7:39:40 每个传感器放置10kg
///应变片传感器10kg的adc值,选择这个是因为10kg容易获得 并且有一定的重量差
///这个值需要实验获得
#define D_ch1_10kg_out1_adc (vS16)0x0584
#define D_ch2_10kg_out1_adc (vS16)0x05DE
#define D_ch3_10kg_out1_adc (vS16)0x0731
#define D_ch4_10kg_out1_adc (vS16)0x066C
#define D_Rsensor_per_10kg ((vS16)10)
#define D_adc_per_kg ((D_ch1_10kg_out1_adc-D_ch1_out1_adc)/D_Rsensor_per_10kg)
#define D_adc_zeroout (10*D_adc_per_kg) ///零点都拉到10kg
///cc 2023/04/06--7:50:26 应该是tst_weight.out6的值
#define D_Rsensor_adc_D_0kg 0x5e2
#define D_Rsensor_adc_D_20kg 0x11a6
#define D_Rsensor_adc_D_85kg 0x37E3
///TS_weight_save_ ts_weight_save;
TS_weight_SPara_ ts_weight_SPara=
{
0xaabcd,
D_ch1_out1_offset,D_ch2_out1_offset,D_ch3_out1_offset,D_ch4_out1_offset,///0x18da,0x18d9 0x18d9 0x18d9 4x2与第一个传感器的差值,第一个传感器为偏移量
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
D_0kg,D_Rsensor_adc_D_0kg,
D_20kg,D_Rsensor_adc_D_20kg,
D_85kg,D_Rsensor_adc_D_85kg,
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
/// 123,
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
/// -123, ////此值上电后更改, 顺便保存(区别于实时保存),
///vU16 zeroout; //2
/// D_adc_zeroout,
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
2,5,
D_rev0x55aa55aa
};
TS_weight_SPara_ code ts_weight__factory=
{
0xaabcd,
D_ch1_out1_offset,D_ch2_out1_offset,D_ch3_out1_offset,D_ch4_out1_offset,///
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
// 123,
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
////// -123, ////此值上电后更改, 顺便保存(区别于实时保存),
///vU16 zeroout; //2
/// D_adc_zeroout,
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
2,5,
D_rev0x55aa55aa
};
#if 0
///cc 2023/04/06--6:41:28 长条的传感器数据150kg?
///cc 2023/04/06--6:41:48 西安方块 传感器
TS_IapData_ iapData=
{
0xaabcd,
0x18da,0x18d9,0x18d9,0x18d9,///0x18da,0x18d9 0x18d9 0x18d9
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
123,
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
///vU16 zeroout; //2
8049,///30*0x134
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
2,5,
D_rev0x55aa55aa
};
TS_IapData_ code iapData_factory=
{
0xaabcd,
0x18da,0x18d9,0x18d9,0x18d9,///
/// ts_weight_sheet_ factory_ws[3]; ///出厂的设置,发布出厂指令后更新 由上位机命令更改,实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// ts_weight_sheet_ zerows[3]; ///手工清零后的参数, 没有清零或者出错恢复到和出厂设置一样,需要实时保存
0,0x1f7f,
D_20kg,0x25ed,
D_85kg,0x3236,
/// vS16 zerodiff_max; /// 上电时,如果和zerows的零点ADC的差值小于 zerodiff_max 说明没有人,启动上电校准;
123,
/// vS16 zerodiff; ///零点的差值 零公斤位置和手工的差值
-123, ////此值上电后更改, 顺便保存(区别于实时保存),
///vU16 zeroout; //2
8049,///30*0x134
/// u8 ADC_shiftaverage_a; ///a路移位滤波的参数 由上位机命令更改,实时保存
/// u8 ADC_shiftaverage_b; ///b路移位滤波的参数 由上位机命令更改,实时保存
2,5,
D_rev0x55aa55aa
};
#endif
//读取reg内容,写入iap
u8 L4_reg_2_iap(void)
{
}
//读取factory内容,写入iap
u8 L4_factory_2_iap(void)
{
}
#define D_EEP_SAVE_ADDR 0
///// 多次读取
void L4_iap_2_reg(void)
{
L0_Iap_Read_array(D_EEP_SAVE_ADDR, (U8*)&S, 128);
}
void L4_print_iap(TS_weight_SPara_ *s)
{
L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
printf("\r\nzerows\r\n %d kg = 0x%4x\r\n", s->zerows[0].kg,s->zerows[0].adc);
printf(" %d kg = 0x%4x\r\n", s->zerows[1].kg,s->zerows[1].adc);
printf(" %d kg = 0x%4x\r\n", s->zerows[2].kg,s->zerows[2].adc);
/// printf("\r\ns->zeroout= %d = 0x%4x\r\n", s->zeroout, s->zeroout);
//// printf("\r\ns->offset 0x%04x 0x%04x 0x%04x 0x%04x\r\n",s->offset[0],s->offset[1],s->offset[2],s->offset[3]);
printf("\r\n-----print_reg end--------\r\n");
}
/*******
///cc 2023/04/06--6:51:31
1.out1 1.out2
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31
1F7F FF3D FF8D 00D9 FFE0 1F6C 1F6E 1F75 1F6E (0)0x 0 -194 -114 217 -31
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31
1F7F FF3D FF8D 00D9 FFE0 1F6C 1F6E 1F75 1F6E (0)0x 0 -194 -114 217 -31
1F7F FF3D FF8E 00DA FFE0 1F6C 1F6F 1F76 1F6E (0)0x 0 -194 -113 218 -31
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31
1F7F FF3D FF8E 00D9 FFE1 1F6C 1F6F 1F75 1F6F (0)0x 0 -194 -113 217 -30
1F7F FF3B FF8E 00D8 FFDF 1F6A 1F6F 1F74 1F6D (0)0x 0 -196 -113 216 -32
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31
1F7F FF3D FF8C 00D9 FFE0 1F6C 1F6D 1F75 1F6E (0)0x 0 -194 -115 217 -31
1F7F FF3E FF8D 00D9 FFE0 1F6D 1F6E 1F75 1F6E (0)0x 0 -193 -114 217 -31
1F7F FF3D FF8C 00D9 FFE0 1F6C 1F6D 1F75 1F6E (0)0x 0 -194 -115 217 -31
1F7F FF3E FF8C 00D9 FFE0 1F6D 1F6D 1F75 1F6E (0)0x 0 -193 -115 217 -31
1F7F FFB7 FF88 00D9 FFE1 1FE6 1F69 1F75 1F6F (1)0x 1 -72 -119 217 -30
1F8C 033F FF8A 00D9 FFE1 236D 1F6B 1F75 1F6F (28)0x 1c 831 -117 217 -30
2069 0478 FF8A 00D9 FFE0 24A6 1F6B 1F75 1F6E (38)0x 26 1144 -117 217 -31
20BA 04D3 FF8B 00D9 FFE1 2501 1F6C 1F75 1F6F (41)0x 29 1235 -116 217 -30
20D3 0520 FF8D 00D9 FFE1 254E 1F6E 1F75 1F6F (43)0x 2b 1312 -114 217 -30
20E5 053C FF8B 00D9 FFE1 256A 1F6C 1F75 1F6F (44)0x 2c 1340 -116 217 -30
20EE 0542 FF8B 00D9 FFE1 2570 1F6C 1F75 1F6F (45)0x 2d 1346 -116 217 -30
20F3 0575 FF8C 00D9 FFE1 25A3 1F6D 1F75 1F6F (46)0x 2e 1397 -115 217 -30
20FB 0562 FF8C 00D9 FFE0 2590 1F6D 1F75 1F6E (45)0x 2d 1378 -115 217 -31
20F8 056E FF8D 00D9 FFE1 259C 1F6E 1F75 1F6F (46)0x 2e 1390 -114 217 -30
20FC 0581 FF8D 00D9 FFE1 25AF 1F6E 1F75 1F6F (46)0x 2e 1409 -114 217 -30
2100 057C FF8C 00D9 FFE1 25AA 1F6D 1F75 1F6F (46)0x 2e 1404 -115 217 -30
20FE 0584 FF8C 00DA FFE1 25B2 1F6D 1F76 1F6F (46)0x 2e 1412 -115 218 -30
2101 0585 FF8D 00DA FFE1 25B3 1F6E 1F76 1F6F (46)0x 2e 1413 -114 218 -30
2101 05A4 FF8D 00D9 FFE0 25D2 1F6E 1F75 1F6E (47)0x 2f 1444 -114 217 -31
2109 05AD FF8C 00D9 FFE1 25DB 1F6D 1F75 1F6F (48)0x 30 1453 -115 217 -30
210B 05C0 FF8D 00D9 FFE1 25EE 1F6E 1F75 1F6F (48)0x 30 1472 -114 217 -30
210F 05BD FF8C 00D9 FFE0 25EB 1F6D 1F75 1F6E (48)0x 30 1469 -115 217 -31
210E 0584 FF8D 00D9 FFE1 25B2 1F6E 1F75 1F6F (47)0x 2f 1412 -114 217 -30
2105 FF3E FF8D 00D9 FFE0 1F6D 1F6E 1F75 1F6E (0)0x 0 -193 -114 217 -31
1F7F FF3D FF8D 00D9 FFE0 1F6C 1F6E 1F75 1F6E (0)0x 0 -194 -114 217 -31
1F7F FF3E FF8D 00DA FFE1 1F6D 1F6E 1F76 1F6F (0)0x 0 -193 -114 218 -30
1F7F FF3D FF8D 00D9 FFE0 1F6C 1F6E 1F75 1F6E (0)0x 0 -194 -114 217 -31
1F7F FF3E 005C 00DA FFE0 1F6D 203C 1F76 1F6E (2)0x 2 -193 92 218 -31
1F97 FF3D 04BA 00D9 FFE0 1F6C 249A 1F75 1F6E (37)0x 25 -194 1210 217 -31
20B5 FF3E 05D0 00D9 FFE0 1F6D 25B0 1F75 1F6E (47)0x 2f -193 1488 217 -31
2103 FF3E 0608 00D9 FFE0 1F6D 25E8 1F75 1F6E (48)0x 30 -193 1544 217 -31
210E FF3E 05EE 00D9 FFE1 1F6D 25CE 1F75 1F6F (48)0x 30 -193 1518 217 -30
210B FF3E 05DE 00D9 FFE0 1F6D 25BE 1F75 1F6E (47)0x 2f -193 1502 217 -31
2103 FF3D 05E5 00D9 FFE0 1F6C 25C5 1F75 1F6E (47)0x 2f -194 1509 217 -31
2105 FF3E 05E1 00D9 FFE0 1F6D 25C1 1F75 1F6E (47)0x 2f -193 1505 217 -31
2105 FF3D 05E1 00D9 FFE0 1F6C 25C1 1F75 1F6E (47)0x 2f -194 1505 217 -31
2104 FF3E 05C3 00DA FFE0 1F6D 25A3 1F76 1F6E (46)0x 2e -193 1475 218 -31
20FE FF3E 054D 00D9 FFE0 1F6D 252D 1F75 1F6E (43)0x 2b -193 1357 217 -31
20E5 FF3D FF8F 00D9 FFE0 1F6C 1F70 1F75 1F6E (0)0x 0 -194 -112 217 -31
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31
1F7F FF3E FF8F 00D9 FFE0 1F6D 1F70 1F75 1F6E (0)0x 0 -193 -112 217 -31
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31
1F7F FF3D FF8E 00D9 FFE0 1F6C 1F6F 1F75 1F6E (0)0x 0 -194 -113 217 -31
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31
1F7F FF3D FF8E 01FE FFE0 1F6C 1F6F 209A 1F6E (5)0x 5 -194 -113 510 -31
1FAB FF3D FF8E 066F FFE0 1F6C 1F6F 250B 1F6E (41)0x 29 -194 -113 1647 -31
20D2 FF3E FF8E 06EA FFE0 1F6D 1F6F 2586 1F6E (45)0x 2d -193 -113 1770 -31
20F4 FF3E FF8E 0736 FFE0 1F6D 1F6F 25D2 1F6E (47)0x 2f -193 -113 1846 -31
2105 FF3E FF8E 072A FFE0 1F6D 1F6F 25C6 1F6E (47)0x 2f -193 -113 1834 -31
2104 FF3E FF8E 072A FFE0 1F6D 1F6F 25C6 1F6E (47)0x 2f -193 -113 1834 -31
2104 FF3E FF8E 0715 FFE0 1F6D 1F6F 25B1 1F6E (46)0x 2e -193 -113 1813 -31
20FF FF3E FF8E 0731 FFE0 1F6D 1F6F 25CD 1F6E (47)0x 2f -193 -113 1841 -31
2105 FF3E FF8E 0744 FFE0 1F6D 1F6F 25E0 1F6E (47)0x 2f -193 -113 1860 -31
210A FF3E FF8E 076A FFE0 1F6D 1F6F 2606 1F6E (49)0x 31 -193 -113 1898 -31
2114 FF3D FF8E 0762 FFE0 1F6C 1F6F 25FE 1F6E (48)0x 30 -194 -113 1890 -31
2112 FF3E FF8E 0767 FFE0 1F6D 1F6F 2603 1F6E (48)0x 30 -193 -113 1895 -31
2112 FF3E FF8E 076A FFE0 1F6D 1F6F 2606 1F6E (49)0x 31 -193 -113 1898 -31
2114 FF3E FF8E 06F2 FFE0 1F6D 1F6F 258E 1F6E (46)0x 2e -193 -113 1778 -31
20FC FF3E FF8E 00D9 FFE1 1F6D 1F6F 1F75 1F6F (0)0x 0 -193 -113 217 -30
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31
1F7F FF3F FF8E 00D9 FFE0 1F6E 1F6F 1F75 1F6E (0)0x 0 -192 -113 217 -31
1F7F FF3E FF8E 00D9 0230 1F6D 1F6F 1F75 21BD (13)0x d -193 -113 217 560
1FEE FF3F FF8E 00D9 0629 1F6E 1F6F 1F75 25B6 (46)0x 2e -192 -113 217 1577
20FA FF3E FF8E 00D9 066A 1F6D 1F6F 1F75 25F7 (48)0x 30 -193 -113 217 1642
2112 FF3E FF8E 00D9 0670 1F6D 1F6F 1F75 25FD (49)0x 31 -193 -113 217 1648
2113 FF3E FF8F 00D9 0664 1F6D 1F70 1F75 25F1 (48)0x 30 -193 -112 217 1636
2111 FF3D FF8E 00D9 0669 1F6C 1F6F 1F75 25F6 (48)0x 30 -194 -113 217 1641
2111 FF3F FF8F 00D9 066C 1F6E 1F70 1F75 25F9 (48)0x 30 -192 -112 217 1644
2112 FF3E FF8E 00D9 066B 1F6D 1F6F 1F75 25F8 (48)0x 30 -193 -113 217 1643
2112 FF3E FF8F 00D9 066D 1F6D 1F70 1F75 25FA (48)0x 30 -193 -112 217 1645
2112 FF3E FF8F 00D9 066C 1F6D 1F70 1F75 25F9 (48)0x 30 -193 -112 217 1644
2112 FF3E FF8E 00D9 067D 1F6D 1F6F 1F75 260A (49)0x 31 -193 -113 217 1661
2116 FF3E FF8E 00D9 065E 1F6D 1F6F 1F75 25EB (48)0x 30 -193 -113 217 1630
210F FF3E FF8E 00D9 0673 1F6D 1F6F 1F75 2600 (49)0x 31 -193 -113 217 1651
2113 FF3E FF8F 00D9 066B 1F6D 1F70 1F75 25F8 (48)0x 30 -193 -112 217 1643
2112 FF3E FF8E 00D9 0674 1F6D 1F6F 1F75 2601 (49)0x 31 -193 -113 217 1652
2114 FF3F FF8E 00D9 067E 1F6E 1F6F 1F75 260B (49)0x 31 -192 -113 217 1662
2117 FF3E FF8F 00D9 0665 1F6D 1F70 1F75 25F2 (48)0x 30 -193 -112 217 1637
2110 FF3E FF8E 00D9 0610 1F6D 1F6F 1F75 259D (46)0x 2e -193 -113 217 1552
20FE FF3E FF8D 00D9 FFE1 1F6D 1F6E 1F75 1F6F (0)0x 0 -193 -114 217 -30
1F7F FF3E FF8E 00DA FFE0 1F6D 1F6F 1F76 1F6E (0)0x 0 -193 -113 218 -31
1F7F FF3E FF8E 00D9 FFE0 1F6D 1F6F 1F75 1F6E (0)0x 0 -193 -113 217 -31
1F7F FF3E FF8E 00D9 FFE1 1F6D 1F6F 1F75 1F6F (0)0x 0 -193 -113 217 -30
1F7F FF3F FF8E 00DA FFE0 1F6E 1F6F 1F76 1F6E (0)0x 0 -192 -113 218 -31
1F7F FF3E FF8E 00D9 FFE1 1F6D 1F6F 1F75 1F6F (0)0x 0 -193 -113 217 -30
1F7F FF3F FF8D 00D9 FFE0 1F6E 1F6E 1F75 1F6E (0)0x 0 -192 -114 217 -31
1F7F FF3F FF8D 00D9 FFE0 1F6E 1F6E 1F75 1F6E (0)0x 0 -192 -114 217 -31
1F7F FF3F FF96 00D9 FFE0 1F6E 1F77 1F75 1F6E (0)0x 0 -192 -105 217 -31
1F7F FF3F FF96 00D9 FFE0 1F6E 1F77 1F75 1F6E (0)0x 0 -192 -105 217 -31
1F7F FF3F FF96 00D9 FFE0 1F6E 1F77 1F75 1F6E (0)0x 0 -192 -105 217 -31
1F7F FF3F FF95 00D9 FFE0 1F6E 1F76 1F75 1F6E (0)0x 0 -192 -106 217 -31
1F7F FF3F FF94 00D9 FFE0 1F6E 1F75 1F75 1F6E (0)0x 0 -192 -107 217 -31
1F7F FF3F FF93 00D9 FFE0 1F6E 1F74 1F75 1F6E (0)0x 0 -192 -108 217 -31
L0_uart0_sendstr("\r\nfactory_ws= ");
L0_uart0_ushex(iapData.factory_ws[0].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[0].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.factory_ws[1].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[1].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.factory_ws[2].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.factory_ws[3].adc);L0_uart0_0d0a();
L0_uart0_sendstr("\r\nzerows= ");
L0_uart0_ushex(iapData.zerows[0].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[0].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.zerows[1].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[1].adc);L0_uart0_0d0a();
L0_uart0_ushex(iapData.zerows[2].kg);L0_uart0_uc(' ');
L0_uart0_ushex(iapData.zerows[3].adc);L0_uart0_0d0a();
63 = 0x 3
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4
4
v3.4
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR
2800 01 00 02 00 03 00 04 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x0001 0x0002 0x0003 0x0004
e2p read success
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x0001 0x0002 0x0003 0x0004
8
ADC_SAMPLE
ADC_SAMPLE
ADC_SAMPLE
ADC_SAMPLE
R.sd.zeroout= 8049 = 0x1f71 offset 1 = 0x 1
R.sd.zeroout= 8049 = 0x1f71 offset 2 = 0x 2
R.sd.zeroout= 8049 = 0x1f71 offset 3 = 0x 3
R.sd.zeroout= 8049 = 0x1f71 offset 4 = 0x 4
4Z00 FDAA 21C7 Z02 13EF 0B82 Z03 FD31 2240 Z01 F49D 2AD4 1F3D 1F6D 13F2 1F35 1C74 001E
1EF0 1F64 13F2 1EF7 1C4F 001D
1EA8 1F4A 1EAF 1EB8 1ED6 0025
1E5F 1F44 1E5A 1E55 1E94 0024
1E14 1F3D 1E19 1E74 1E77 0023
1DD3 1F2F 1DD4 1E39 1E43 0023
1D92 1F20 1D8C 1E37 1E1D 0022
1D4C 1F0E 1D4F 1DCF 1DDE 0022
1D0B 1EFF 1D01 1D7F 1DA2 0021
1CEA 1EF4 1CBD 1D49 1D79 0021
FD 04 33 44 55 00 00 00
4sensor zero
R.sd.sensor 0x245d 0x2b5a 0x e46 0x2478
&e2p write success
RRRRRRRRRRRRRRRRRRRRRRRRRRRRR
2824 5D 2B 5A 0E 46 24 78 00 00 12 35 00 C8 56 78 01 90 78 9A 00 00 12 34 00 C8 56 78 01 90 78 9B 00 7B FF 85 1F 71 02 05
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
e2p read success
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1F28 1F65 1CAE 1F2D 1E9A 0024
1EEA 1F58 1EF4 1F37 1F1B 0025
1EA3 1F45 1EB3 1ECE 1EDA 0025
1E72 1F35 1E69 1E92 1EA8 0024
1E2A 1F25 1E2B 1E7B 1E7D 0023
FD 02 33 44 55 00 00 00
--read --
a b=
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1DE4 1F16 1DE6 1E20 1E40 0023
1DA3 1F06 1DA8 1DFB 1E13 0022
1D7C 1EF4 1D67 1DA9 1DE0 0022
1D37 1EE6 1D28 1D53 1DA6 0021
1CE9 1ED4 1CE7 1D37 1D76 0020
1CA7 1EC2 1CA6 1D02 1D44 0020
1C5F 1EAF 1C60 1CA3 1D04 001F
1C2D 1EA1 1C24 1C58 1CD2 001F
1BEB 1E93 1BDC 1C21 1C9E 001E
FD 03 33 44 55 00 00 00
--read R.sd--
a b=
--print_reg--
a b= 02 05
factory_ws
0 kg = 0x1235
200 kg = 0x5678
400 kg = 0x789a
zerows
0 kg = 0x1234
200 kg = 0x5678
400 kg = 0x789b
s->zeroout= 8049 = 0x1f71
s->sensor 0x245d 0x2b5a 0x0e46 0x2478
1BAB 1E83 1B98 1BDB 1C68 001D
1B7D 1E70 1B5A 1BA3 1C3A 001D
1B32 1E5F 1B0B 1AF9 1BE5 001C
1AEA 1E53 1AD3 1AEE 1BBF 001B
*********/

126
source/asp/新建文件夹/asp_weight_save.h

@ -1,126 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2022, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file app_save.h
/// @brief @ app save
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20220120
/// @note cc_AS_stc02
/*********
1,
1 512---4-6ms
01
,,
,
--->,
1,,512
30
2, ,.--->,;
flash 28k 8k EEp 28K的最后8K 5000h-6FFFh
*******/
/*******
app_config app_save
app_save ,
,西,,使bsp中
asp ,app通过参数调用asp,使.
,.
app ,
asp app support program wifi的模式设置,adc的读取后的处理
bsp board support program ,wdt,wifi的底层配置函数,sensor
msp mcu support program ,cpu自身的外设,uart led
cpu
*****/
/*******
adc采样值
^
|
| o
| |
| o |
| | |
| ---|---- |------------0=adc=0
0 | |D_ADC_OFFSET
|____|_____|____________> adc + D_ADC_OFFSET
0 40 80
西:
1,< >
2, 0kg的时候的<>
3,<> + <>
3.1 ,250kg,,,.<250kg,>
4, : <(+-10kg)>,<>
,.
5,,<>,,.
4,.
B:4,.
---->C: 4.5 ,
c,,0 (H1sL0.5s)3
西:
< > Byte x n=? .
Byte x n=? .
<> Byte x n=? .
<> ,
,250kg
,id之类的
3,,,使.使.
*****/
//////////////////////////////////////////////////////////////////////////////
#ifndef _asp_weight_save_H
#define _asp_weight_save_H
#include "TTSS_task.h"
#include "c_lib.h"
#include "../bsp/bsp_config.h"
#include "msp_uart1.h"
#include "msp_uartN.h"
///#include "asp_para.h"
///#include "app_weight.h"
////#include "asp_adc.h"
extern void L4_iap_2_reg(void);
void L4_print_iap(TS_weight_SPara_ *s);
u8 L4_reg_2_iap(void);
#endif // #ifndef _APP_TASK_ADC_H

691
source/bsp/TTSSbsp/bsp_config.h

@ -56,144 +56,145 @@
#include "c_type51.h"
/**************
...
: STC8H3K48S2
: 7.4.1U
:
. ISP工作频率: 23.844MHz
. IRC振荡器的频率: 11.057MHz
. : 35.250KHz
. 使
. P3.2P3.3
.
. I/O口
.
. : 2.00 V
. ,
. : 256
.
. ,EEPROM区一并擦除
. ,485
.
. : 1195 mV (: 1100~1300mV)
. : 202192
: STC8H3K48S2
: 7.4.1U
... [0.906"]
: 22.094MHz (-0.109%)
... [0.125"]
: 460800
... ! [0.656"]
... ! [2.860"]
... ! [0.016"]
:
. ISP工作频率: 23.844MHz
. IRC振荡器的频率: 22.094MHz
. : 35.250KHz
. 使
. P3.2P3.3
.
. I/O口
.
. : 2.00 V
. ,
. : 256
.
. ,EEPROM区一并擦除
. ,485
.
. : 1195 mV (: 1100~1300mV)
. : 202192
: F74DC52602599C
: STC8H3K48S2
: 7.4.1U
. : 22.118MHz
. : 22.094MHz ( = 1)
. : -0.109%
!(2023-04-06 21:16:42)
--------------------------------------------------------------
EN_DEC3V3 P14 PIN8
EN_DC5V P37 PIN28
LED5VEN1 P20 PIN33 4 LED5VEN4
RFID5VEN P41 PIN29 RFID
--------------------------------------------------------------
BEE P22
--------------------------------------------------------------
20230317_ CCmodify
U1 DEBUG
U2 5311
U3 485
U4 xx
--------------------------------------------------------------
TTSS 使0
1 123
uart1 使2 uart1.c
uart2 使 uart2.c
modbus使用定时器2 uart空闲状态的判定 使0,
*******************************************************/
#include "bsp_config_stc.h"
#define D_WDT_STATUS TYPE_WDT_DISABLE //如果配置为enable,请在bsp_config.c中设置wdt溢出时间
#define D_MCU_ENDIAN TYPE_MCU_BIGENDIAN
#define D_CODE_ENCRYPTION_TYPE TYPE_ENCRYPTION_ENABLE //是否代码加密
//串口配置
...
: STC8H3K48S2
: 7.4.1U
:
. ISP工作频率: 23.844MHz
. IRC振荡器的频率: 11.057MHz
. : 35.250KHz
. 使
. P3.2P3.3
.
. I/O口
.
. : 2.00 V
. ,
. : 256
.
. ,EEPROM区一并擦除
. ,485
.
. : 1195 mV (: 1100~1300mV)
. : 202192
: STC8H3K48S2
: 7.4.1U
... [0.906"]
: 22.094MHz (-0.109%)
... [0.125"]
: 460800
... ! [0.656"]
... ! [2.860"]
... ! [0.016"]
:
. ISP工作频率: 23.844MHz
. IRC振荡器的频率: 22.094MHz
. : 35.250KHz
. 使
. P3.2P3.3
.
. I/O口
.
. : 2.00 V
. ,
. : 256
.
. ,EEPROM区一并擦除
. ,485
.
. : 1195 mV (: 1100~1300mV)
. : 202192
: F74DC52602599C
: STC8H3K48S2
: 7.4.1U
. : 22.118MHz
. : 22.094MHz ( = 1)
. : -0.109%
!(2023-04-06 21:16:42)
--------------------------------------------------------------
EN_DEC3V3 P14 PIN8
EN_DC5V P37 PIN28
LED5VEN1 P20 PIN33 4 LED5VEN4
RFID5VEN P41 PIN29 RFID
--------------------------------------------------------------
BEE P22
--------------------------------------------------------------
20230317_ CCmodify
U1 DEBUG
U2 5311
U3 485
U4 xx
--------------------------------------------------------------
TTSS 使0
1 123
uart1 使2 uart1.c
uart2 使 uart2.c
modbus使用定时器2 uart空闲状态的判定 使0,
*******************************************************/
#include "bsp_config_stc.h"
#define D_WDT_STATUS TYPE_WDT_DISABLE //如果配置为enable,请在bsp_config.c中设置wdt溢出时间
#define D_MCU_ENDIAN TYPE_MCU_BIGENDIAN
#define D_CODE_ENCRYPTION_TYPE TYPE_ENCRYPTION_ENABLE //是否代码加密
//串口配置
/// #define D_UART1_BRT BRT_460800
/// #define D_UART1_BRT BRT_921600
#define D_UART1_BRT BRT_115200
#define D_UART1_SBIT SBIT_1
#define D_PIN_UART1 PIN_UART1_Rxd_30_Txd_31
#define D_UART2_BRT BRT_115200///BRT_921600///BRT_115200///
#define D_UART3_BRT BRT_115200///BRT_921600///BRT_115200
#define D_UART4_BRT BRT_115200///BRT_921600///BRT_115200
//485配置
#define D_UART1_485_TYPE TYPE_485_SLAVER //UART1启用485
#define D_UART1_485_SLAVER_ID_BROADCAST 0xFF //485从机总是响应0xFF消息
#define D_UART1_485_SLAVER_ID 0x11 //板卡作为485从机 slaverId
#define D_UART1_485_TX() D_P55_stdIO();D_P55_ON();
#define D_UART1_485_RX() D_P55_stdIO();D_P55_OFF();
#define D_UART2_485_TYPE TYPE_485_NONE //UART2不启用485
#define D_UART3_485_TYPE TYPE_485_NONE //UART2不启用485
#define D_UART4_485_TYPE TYPE_485_NONE //UART2不启用485
//MODBUS协议配置
#define D_MODBUS_ENABLE //MODBS启用开关,如果不使用modbus,可以注释掉本行
#define D_MODBUS_SPLIT_ENTRY L1_modbus_split //modbus切割函数,在tpc_modbus.c中实现,依据实际情况修改
#define D_MODBUS_REG_MAX_NUM 32 //每次最多读取/写入的寄存器数量,此处的数量要注意和 D_tp_handle_x_len 对应
//外设定义
#define D_LED1_INIT() D_LED1_OFF()
#define D_LED1_ON() D_P17_stdIO();D_P17_OFF()
#define D_LED1_OFF() D_P17_stdIO();D_P17_ON()
#define D_LED1_REV() D_P17_stdIO();D_P17_REV()
// #define D_UART1_BRT BRT_115200
#define D_UART1_BRT BRT_9600
#define D_UART1_SBIT SBIT_1
#define D_PIN_UART1 PIN_UART1_Rxd_30_Txd_31
#define D_UART2_BRT BRT_115200///BRT_921600///BRT_115200///
#define D_UART3_BRT BRT_115200///BRT_921600///BRT_115200
#define D_UART4_BRT BRT_115200///BRT_921600///BRT_115200
//485配置
#define D_UART1_485_TYPE TYPE_485_SLAVER //UART1启用485
#define D_UART1_485_SLAVER_ID_BROADCAST 0xFF //485从机总是响应0xFF消息
#define D_UART1_485_SLAVER_ID 0x11 //板卡作为485从机 slaverId
#define D_UART1_485_TX() D_P55_stdIO();D_P55_ON();
#define D_UART1_485_RX() D_P55_stdIO();D_P55_OFF();
#define D_UART2_485_TYPE TYPE_485_NONE //UART2不启用485
#define D_UART3_485_TYPE TYPE_485_NONE //UART2不启用485
#define D_UART4_485_TYPE TYPE_485_NONE //UART2不启用485
//MODBUS协议配置
#define D_MODBUS_ENABLE //MODBS启用开关,如果不使用modbus,可以注释掉本行
#define D_MODBUS_SPLIT_ENTRY L1_modbus_split //modbus切割函数,在tpc_modbus.c中实现,依据实际情况修改
#define D_MODBUS_REG_MAX_NUM 32 //每次最多读取/写入的寄存器数量,此处的数量要注意和 D_tp_handle_x_len 对应
//外设定义
#define D_LED1_INIT() D_LED1_OFF()
#define D_LED1_ON() D_P17_stdIO();D_P17_OFF()
#define D_LED1_OFF() D_P17_stdIO();D_P17_ON()
#define D_LED1_REV() D_P17_stdIO();D_P17_REV()
#define D_LED2_INIT() D_LED2_OFF()
#define D_LED2_ON() D_P54_stdIO();D_P54_OFF()
@ -202,13 +203,13 @@ modbus使用定时器2 作为uart空闲状态的判定 (区分协议的结束
//EEP存储地址定义
#define D_EEP_SECTOR_SIZE 0x200
#define D_EEP_PARAM_ADDR (D_EEP_SECTOR_SIZE * 0) //eeprom参数区扇区地址
//存储器特殊参数地址配置
#define D_MCU_SPEC_PARAM_CHIPID 0xFDF9
//...其他参数
//EEP存储地址定义
#define D_EEP_SECTOR_SIZE 0x200
#define D_EEP_PARAM_ADDR (D_EEP_SECTOR_SIZE * 0) //eeprom参数区扇区地址
//存储器特殊参数地址配置
#define D_MCU_SPEC_PARAM_CHIPID 0xFDF9
//...其他参数
#define D_iicch_0 0
@ -245,241 +246,253 @@ modbus使用定时器2 作为uart空闲状态的判定 (区分协议的结束
//////////////////////////ch=1 /0///////////////////////////////////////////////
#ifdef D_SIIC_USE_0
#ifdef D_SIIC_USE_0
//IICM0 SDA
//IICM0 SDA
#define L0_IICM0_SDA_init() D_PUON_P2(BITN2) ;D_OpenD_P4(BITN2)
#define L0_IICM0_SDA_OUT() D_P22_OUT()
#define L0_IICM0_SDA_IN() D_P22_IN()
#define L0_IICM0_SDA_ON() D_P22_ON()
#define L0_IICM0_SDA_OFF() D_P22_OFF()
#define L0_IICM0_SDA_AT() D_P22_AT()
//IICM0 SDA
//IICM0 SDA
#define L0_IICM0_SDA_init() D_PUON_P2(BITN2) ;D_OpenD_P4(BITN2)
#define L0_IICM0_SDA_OUT() D_P22_OUT()
#define L0_IICM0_SDA_IN() D_P22_IN()
#define L0_IICM0_SDA_ON() D_P22_ON()
#define L0_IICM0_SDA_OFF() D_P22_OFF()
#define L0_IICM0_SDA_AT() D_P22_AT()
//IICM0 SCL
#define L0_IICM0_SCL_init() D_PUON_P2(BITN3) ;D_stdIO_P2(BITN3)
//IICM0 SCL
#define L0_IICM0_SCL_init() D_PUON_P2(BITN3) ;D_stdIO_P2(BITN3)
#define L0_IICM0_SCL_OUT() D_P23_OUT()
#define L0_IICM0_SCL_IN() D_P23_IN()
#define L0_IICM0_SCL_ON() D_P23_ON()
#define L0_IICM0_SCL_OFF() D_P23_OFF()
#endif
#define L0_IICM0_SCL_OUT() D_P23_OUT()
#define L0_IICM0_SCL_IN() D_P23_IN()
#define L0_IICM0_SCL_ON() D_P23_ON()
#define L0_IICM0_SCL_OFF() D_P23_OFF()
#endif
//--------------------------------------------
#ifdef D_SIIC_USE_1
#ifdef D_SIIC_USE_1
#define L0_IICM1_SDA_init() D_PUON_P4(BITN1);D_OpenD_P4(BITN1)
#define L0_IICM1_SDA_OUT() D_P41_OUT()
#define L0_IICM1_SDA_IN() D_P41_IN()
#define L0_IICM1_SDA_ON() D_P41_ON()
#define L0_IICM1_SDA_OFF() D_P41_OFF()
#define L0_IICM1_SDA_AT() D_P41_AT()
#define L0_IICM1_SDA_init() D_PUON_P4(BITN1);D_OpenD_P4(BITN1)
#define L0_IICM1_SDA_OUT() D_P41_OUT()
#define L0_IICM1_SDA_IN() D_P41_IN()
#define L0_IICM1_SDA_ON() D_P41_ON()
#define L0_IICM1_SDA_OFF() D_P41_OFF()
#define L0_IICM1_SDA_AT() D_P41_AT()
#define L0_IICM1_SCL_init() D_PUON_P4(BITN2);D_stdIO_P4(BITN2)
#define L0_IICM1_SCL_init() D_PUON_P4(BITN2);D_stdIO_P4(BITN2)
#define L0_IICM1_SCL_OUT() D_P42_OUT()
#define L0_IICM1_SCL_IN() D_P42_IN()
#define L0_IICM1_SCL_ON() D_P42_ON()
#define L0_IICM1_SCL_OFF() D_P42_OFF()
#endif
#define L0_IICM1_SCL_OUT() D_P42_OUT()
#define L0_IICM1_SCL_IN() D_P42_IN()
#define L0_IICM1_SCL_ON() D_P42_ON()
#define L0_IICM1_SCL_OFF() D_P42_OFF()
#endif
#ifdef D_SIIC_USE_2
///DOUT2 P04 sch;MAS_SDA MAS_SCL P50
#define L0_IICM2_SDA_init() D_PUON_P3(BITN4) ;D_OpenD_P3(BITN4)
#define L0_IICM2_SDA_OUT() D_P34_OUT()
#define L0_IICM2_SDA_IN() D_P34_IN()
#define L0_IICM2_SDA_ON() D_P34_ON()
#define L0_IICM2_SDA_OFF() D_P34_OFF()
#define L0_IICM2_SDA_AT() D_P34_AT()
#define L0_IICM2_SCL_init() D_PUON_P5(BITN0) ;D_stdIO_P5(BITN0)
#define L0_IICM2_SCL_OUT() D_P50_OUT()
#define L0_IICM2_SCL_IN() D_P50_IN()
#define L0_IICM2_SCL_ON() D_P50_ON()
#define L0_IICM2_SCL_OFF() D_P50_OFF()
/////////////////////////ch=3 //2//////////////////////////////////////////////
#endif
#ifdef D_SIIC_USE_3
#define L0_IICM3_SDA_init() D_PUON_P3(BITN7) ;D_OpenD_P3(BITN7)
#define L0_IICM3_SDA_OUT() D_P37_OUT()
#define L0_IICM3_SDA_IN() D_P37_IN()
#define L0_IICM3_SDA_ON() D_P37_ON()
#define L0_IICM3_SDA_OFF() D_P37_OFF()
#define L0_IICM3_SDA_AT() D_P37_AT()
#define L0_IICM3_SCL_init() D_PUON_P4(BITN1) ;D_stdIO_P4(BITN1)
#define L0_IICM3_SCL_OUT() D_P41_OUT()
#define L0_IICM3_SCL_IN() D_P41_IN()
#define L0_IICM3_SCL_ON() D_P41_ON()
#define L0_IICM3_SCL_OFF() D_P41_OFF()
#endif
#ifdef D_SIIC_USE_4
/////////////////////////ch=4 //2//////////////////////////////////////////////
#define L0_IICM4_SDA_init() D_PUON_P3(BITN7) ;D_OpenD_P3(BITN7)
#define L0_IICM4_SDA_OUT() D_P37_OUT()
#define L0_IICM4_SDA_IN() D_P37_IN()
#define L0_IICM4_SDA_ON() D_P37_ON()
#define L0_IICM4_SDA_OFF() D_P37_OFF()
#define L0_IICM4_SDA_AT() D_P37_AT()
#define L0_IICM4_SCL_init() D_PUON_P4(BITN1) ;D_stdIO_P4(BITN1)
#define L0_IICM4_SCL_OUT() D_P41_OUT()
#define L0_IICM4_SCL_IN() D_P41_IN()
#define L0_IICM4_SCL_ON() D_P41_ON()
#define L0_IICM4_SCL_OFF() D_P41_OFF()
#endif
#ifdef D_SIIC_USE_5
//IICM5 SDA
#define L0_IICM5_SDA_init() D_stdIO_P1(BITN5)
#define L0_IICM5_SDA_OUT() D_P15_OUT()
#define L0_IICM5_SDA_IN() D_P15_IN()
#define L0_IICM5_SDA_ON() D_P15_ON()
#define L0_IICM5_SDA_OFF() D_P15_OFF()
#define L0_IICM5_SDA_AT() D_P15_AT()
//IICM5 SCL
#define L0_IICM5_SCL_init() D_stdIO_P1(BITN4)
#define L0_IICM5_SCL_OUT() D_P14_OUT()
#define L0_IICM5_SCL_IN() D_P14_IN()
#define L0_IICM5_SCL_ON() D_P14_ON()
#define L0_IICM5_SCL_OFF() D_P14_OFF()
#endif
#ifdef D_SIIC_USE_6
//IICM6 SDA
#define L0_IICM6_SDA_init() D_stdIO_P1(BITN5)
#define L0_IICM6_SDA_OUT() D_P15_OUT()
#define L0_IICM6_SDA_IN() D_P15_IN()
#define L0_IICM6_SDA_ON() D_P15_ON()
#define L0_IICM6_SDA_OFF() D_P15_OFF()
#define L0_IICM6_SDA_AT() D_P15_AT()
//IICM6 SCL
#define L0_IICM6_SCL_init() D_stdIO_P1(BITN4)
#define L0_IICM6_SCL_OUT() D_P14_OUT()
#define L0_IICM6_SCL_IN() D_P14_IN()
#define L0_IICM6_SCL_ON() D_P14_ON()
#define L0_IICM6_SCL_OFF() D_P14_OFF()
#endif
#ifdef D_SIIC_USE_7
//IICM7 SDA
#define L0_IICM7_SDA_init() D_stdIO_P1(BITN5)
#define L0_IICM7_SDA_OUT() D_P15_OUT()
#define L0_IICM7_SDA_IN() D_P15_IN()
#define L0_IICM7_SDA_ON() D_P15_ON()
#define L0_IICM7_SDA_OFF() D_P15_OFF()
#define L0_IICM7_SDA_AT() D_P15_AT()
//IICM7 SCL
#define L0_IICM7_SCL_init() D_stdIO_P1(BITN4)
#define L0_IICM7_SCL_OUT() D_P14_OUT()
#define L0_IICM7_SCL_IN() D_P14_IN()
#define L0_IICM7_SCL_ON() D_P14_ON()
#define L0_IICM7_SCL_OFF() D_P14_OFF()
#endif
#ifdef D_SIIC_USE_8
//IICM8 SDA
#define L0_IICM8_SDA_init() D_stdIO_P1(BITN5)
#define L0_IICM8_SDA_OUT() D_P15_OUT()
#define L0_IICM8_SDA_IN() D_P15_IN()
#define L0_IICM8_SDA_ON() D_P15_ON()
#define L0_IICM8_SDA_OFF() D_P15_OFF()
#define L0_IICM8_SDA_AT() D_P15_AT()
#ifdef D_SIIC_USE_2
//IICM8 SCL
#define L0_IICM8_SCL_init() D_stdIO_P1(BITN4)
///DOUT2 P04 sch;MAS_SDA MAS_SCL P50
#define L0_IICM2_SDA_init() D_PUON_P3(BITN4) ;D_OpenD_P3(BITN4)
#define L0_IICM2_SDA_OUT() D_P34_OUT()
#define L0_IICM2_SDA_IN() D_P34_IN()
#define L0_IICM2_SDA_ON() D_P34_ON()
#define L0_IICM2_SDA_OFF() D_P34_OFF()
#define L0_IICM2_SDA_AT() D_P34_AT()
#define L0_IICM8_SCL_OUT() D_P14_OUT()
#define L0_IICM8_SCL_IN() D_P14_IN()
#define L0_IICM8_SCL_ON() D_P14_ON()
#define L0_IICM8_SCL_OFF() D_P14_OFF()
#endif
#define L0_IICM2_SCL_init() D_PUON_P5(BITN0) ;D_stdIO_P5(BITN0)
#define L0_IICM2_SCL_OUT() D_P50_OUT()
#define L0_IICM2_SCL_IN() D_P50_IN()
#define L0_IICM2_SCL_ON() D_P50_ON()
#define L0_IICM2_SCL_OFF() D_P50_OFF()
/////////////////////////ch=3 //2//////////////////////////////////////////////
#endif
#define D_LPCD_INT_INIT(); P_SW2|=0x80;IT0 = 1;//下降沿中断
#define D_LPCD_INT_OPEN(); EX0 = 1;
#define D_LPCD_INT_CLOSE(); EX0 = 0;
#define D_RTC_INT_INIT(); INTCLKO = EX2;
#define D_RTC_INT_OPEN(); INTCLKO = EX2;
#define D_RTC_INT_CLOSE(); INTCLKO = 0;
#ifdef D_SIIC_USE_3
#define L0_IICM3_SDA_init() D_PUON_P3(BITN7) ;D_OpenD_P3(BITN7)
#define L0_IICM3_SDA_OUT() D_P37_OUT()
#define L0_IICM3_SDA_IN() D_P37_IN()
#define L0_IICM3_SDA_ON() D_P37_ON()
#define L0_IICM3_SDA_OFF() D_P37_OFF()
#define L0_IICM3_SDA_AT() D_P37_AT()
#define L0_IICM3_SCL_init() D_PUON_P4(BITN1) ;D_stdIO_P4(BITN1)
#define L0_IICM3_SCL_OUT() D_P41_OUT()
#define L0_IICM3_SCL_IN() D_P41_IN()
#define L0_IICM3_SCL_ON() D_P41_ON()
#define L0_IICM3_SCL_OFF() D_P41_OFF()
#define D_MSA_INT_INIT(); IT1 = 1;//下降沿中断
#define D_MSA_INT_OPEN(); EX1 = 1;
#define D_MSA_INT_CLOSE(); EX1 = 0;
#endif
typedef struct
{
U8 time_f;
U8 clear_dog;
U8 weak_up;
U8 dog_ok;
U8 who_wake; /// 谁让我醒来 =D_int_RTC 20221002_18542 CCmodify
vU16 sleeptime; ///系统休眠的时间间隔
vU16 sleeptime_left; ///系统休眠的时间间隔
U8 start_sleep; ///上电后多久进入睡眠状态 时间颗粒1秒
U8 nb_status;
}TS_low_time;
extern TS_low_time ts_low_time;
#ifdef D_SIIC_USE_4
/////////////////////////ch=4 //2//////////////////////////////////////////////
#define L0_IICM4_SDA_init() D_PUON_P3(BITN7) ;D_OpenD_P3(BITN7)
#define L0_IICM4_SDA_OUT() D_P37_OUT()
#define L0_IICM4_SDA_IN() D_P37_IN()
#define L0_IICM4_SDA_ON() D_P37_ON()
#define L0_IICM4_SDA_OFF() D_P37_OFF()
#define L0_IICM4_SDA_AT() D_P37_AT()
#define L0_IICM4_SCL_init() D_PUON_P4(BITN1) ;D_stdIO_P4(BITN1)
#define L0_IICM4_SCL_OUT() D_P41_OUT()
#define L0_IICM4_SCL_IN() D_P41_IN()
#define L0_IICM4_SCL_ON() D_P41_ON()
#define L0_IICM4_SCL_OFF() D_P41_OFF()
#endif
#ifdef D_SIIC_USE_5
//IICM5 SDA
#define L0_IICM5_SDA_init() D_stdIO_P1(BITN5)
#define L0_IICM5_SDA_OUT() D_P15_OUT()
#define L0_IICM5_SDA_IN() D_P15_IN()
#define L0_IICM5_SDA_ON() D_P15_ON()
#define L0_IICM5_SDA_OFF() D_P15_OFF()
#define L0_IICM5_SDA_AT() D_P15_AT()
//IICM5 SCL
#define L0_IICM5_SCL_init() D_stdIO_P1(BITN4)
#define L0_IICM5_SCL_OUT() D_P14_OUT()
#define L0_IICM5_SCL_IN() D_P14_IN()
#define L0_IICM5_SCL_ON() D_P14_ON()
#define L0_IICM5_SCL_OFF() D_P14_OFF()
#endif
#ifdef D_SIIC_USE_6
//IICM6 SDA
#define L0_IICM6_SDA_init() D_stdIO_P1(BITN5)
#define L0_IICM6_SDA_OUT() D_P15_OUT()
#define L0_IICM6_SDA_IN() D_P15_IN()
#define L0_IICM6_SDA_ON() D_P15_ON()
#define L0_IICM6_SDA_OFF() D_P15_OFF()
#define L0_IICM6_SDA_AT() D_P15_AT()
/***********
//IICM6 SCL
#define L0_IICM6_SCL_init() D_stdIO_P1(BITN4)
#define L0_IICM6_SCL_OUT() D_P14_OUT()
#define L0_IICM6_SCL_IN() D_P14_IN()
#define L0_IICM6_SCL_ON() D_P14_ON()
#define L0_IICM6_SCL_OFF() D_P14_OFF()
#endif
#ifdef D_SIIC_USE_7
#define L0_IICM1_SDA_init() D_stdIO_P4(BITN2)
#define L0_IICM1_SDA_OUT() D_P42_OUT()
#define L0_IICM1_SDA_IN() D_P42_IN()
#define L0_IICM1_SDA_ON() D_P42_ON()
#define L0_IICM1_SDA_OFF() D_P42_OFF()
#define L0_IICM1_SDA_AT() D_P42_AT()
//IICM7 SDA
#define L0_IICM7_SDA_init() D_stdIO_P1(BITN5)
#define L0_IICM7_SDA_OUT() D_P15_OUT()
#define L0_IICM7_SDA_IN() D_P15_IN()
#define L0_IICM7_SDA_ON() D_P15_ON()
#define L0_IICM7_SDA_OFF() D_P15_OFF()
#define L0_IICM7_SDA_AT() D_P15_AT()
#define L0_IICM1_SCL_init() D_stdIO_P4(BITN1)
//IICM7 SCL
#define L0_IICM7_SCL_init() D_stdIO_P1(BITN4)
#define L0_IICM1_SCL_OUT() D_P41_OUT()
#define L0_IICM1_SCL_IN() D_P41_IN()
#define L0_IICM1_SCL_ON() D_P41_ON()
#define L0_IICM1_SCL_OFF() D_P41_OFF()
#define L0_IICM7_SCL_OUT() D_P14_OUT()
#define L0_IICM7_SCL_IN() D_P14_IN()
#define L0_IICM7_SCL_ON() D_P14_ON()
#define L0_IICM7_SCL_OFF() D_P14_OFF()
#endif
#ifdef D_SIIC_USE_8
***********/
//IICM8 SDA
#define L0_IICM8_SDA_init() D_stdIO_P1(BITN5)
#define L0_IICM8_SDA_OUT() D_P15_OUT()
#define L0_IICM8_SDA_IN() D_P15_IN()
#define L0_IICM8_SDA_ON() D_P15_ON()
#define L0_IICM8_SDA_OFF() D_P15_OFF()
#define L0_IICM8_SDA_AT() D_P15_AT()
//IICM8 SCL
#define L0_IICM8_SCL_init() D_stdIO_P1(BITN4)
#define L0_IICM8_SCL_OUT() D_P14_OUT()
#define L0_IICM8_SCL_IN() D_P14_IN()
#define L0_IICM8_SCL_ON() D_P14_ON()
#define L0_IICM8_SCL_OFF() D_P14_OFF()
#endif
#define D_LPCD_INT_INIT(); P_SW2|=0x80;IT0 = 1;//下降沿中断
#define D_LPCD_INT_OPEN(); EX0 = 1;
#define D_LPCD_INT_CLOSE(); EX0 = 0;
#define D_RTC_INT_INIT(); INTCLKO = EX2;
#define D_RTC_INT_OPEN(); INTCLKO = EX2;
#define D_RTC_INT_CLOSE(); INTCLKO = 0;
#define D_MSA_INT_INIT(); IT1 = 1;//下降沿中断
#define D_MSA_INT_OPEN(); EX1 = 1;
#define D_MSA_INT_CLOSE(); EX1 = 0;
typedef struct
{
U8 time_f;
U8 clear_dog;
U8 weak_up;
U8 dog_ok;
U8 who_wake; /// 谁让我醒来 =D_int_RTC 20221002_18542 CCmodify
vU16 sleeptime; ///系统休眠的时间间隔
vU16 sleeptime_left; ///系统休眠的时间间隔
U8 start_sleep; ///上电后多久进入睡眠状态 时间颗粒1秒
U8 nb_status;
}TS_low_time;
extern TS_low_time ts_low_time;
/***********
#define L0_IICM1_SDA_init() D_stdIO_P4(BITN2)
#define L0_IICM1_SDA_OUT() D_P42_OUT()
#define L0_IICM1_SDA_IN() D_P42_IN()
#define L0_IICM1_SDA_ON() D_P42_ON()
#define L0_IICM1_SDA_OFF() D_P42_OFF()
#define L0_IICM1_SDA_AT() D_P42_AT()
#define L0_IICM1_SCL_init() D_stdIO_P4(BITN1)
#define L0_IICM1_SCL_OUT() D_P41_OUT()
#define L0_IICM1_SCL_IN() D_P41_IN()
#define L0_IICM1_SCL_ON() D_P41_ON()
#define L0_IICM1_SCL_OFF() D_P41_OFF()
***********/
#else
#error "未指定当前板卡"
#endif///#if(TYPE_UASER_BOARD
//STEP 3 Register CONFIG >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

1787
source/clib/c_lib.c.bak

File diff suppressed because it is too large

121
source/clib/c_lib.h.bak

@ -1,121 +0,0 @@
/*****************************************************************************
* uart.h: Header file for NXP LPC17xx Family Microprocessors
*
* Copyright (c) 2023 CCSENS
* All rights reserved.
*
* History
* 2009.05.27 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#ifndef _c_lib_H_
#define _c_lib_H_
#include <stdarg.h>
#include <stdlib.h>
#include "c_type51.h"
//
#include "c_delay.h"
#include "c_crc.h"
//#include "../debug/debug_drv.h"
//extern char guc_send[128];
extern unsigned char code cguHex2Char[16][2];
typedef struct
{
vU16 up_point;
vU16 down_point;
}TS_up_down_p_;
extern U8 Lc_Hex2Char(U8 CharStr);
extern U8 Lc_strStartsWith(U8 *s1,U8 *s2);
//extern void Lc_int2str(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d);
// input: 123456d
// output: '1' '2' '3'....
//对应的点阵 为 0123456789. ,最后为空格,专为显示点阵类的数值使用
//extern void Lc_int2number(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d);
//extern U32 L2_fun_number_show(int i,char str[4]);
#if 10
void Lc_sint2str_2_1(int i_in,char *d);
void Lc_int2str_2(U32 ui_in,char *d);
void Lc_uc2str_2(U8 ui_in,char *d);
extern void Lc_int2str_2_2(U32 ui_in,char *d);
extern void Lc_int2str_3(U32 ui_in,char *d);
extern void Lc_int2str_3(U32 ui_in,char *d);
extern void Lc_int2str_4(U32 ui_in,char *d);
extern void Lc_sint2str_3(int i_in,char *d);
#define Lc_WEI(WEIx,WEIn) (U8)((WEIx/ul2fun2[WEIn])%10);
#define Lc_eee(WEIn) ul2fun2[WEIn]
#endif
extern int Lc_strlen(const char *str);
extern void Lc_despiking_shift3_U16(vU16 *m);
extern int libc_strlen(char *str);
extern char *Lc_int2a(vS32 value, char *string, UN_TYPE radix);
extern void Lc_int2D(vS16 value, char *string,char bits);
extern int hexToDec(const char *source);
extern int getIndexOfSigns(char ch);
extern unsigned char hex_to_char(unsigned char hex);
extern char *strstr(const char *str1, const char *str2);
extern unsigned char catch_protocol (const char d_src[],char d_protocol[]) ;
#define Lc_delay_1us() L0_delay_1us()
extern U8* Lc_strcpy(U8* dst,const char* str);
////////////////
extern void Lc_uc_hex(char ww);
extern void Lc_us_hex(U16 ww);
//extern void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...);
extern void Lc_print(char *dat4,...);
extern void Lc_print_NC(char *dat,...);
extern void Lc_print_buf(char *dat4,...);
extern u8 Lc_ocr8(const u8 *d,u8 len);
extern void L3_us_big(U16 *d);
extern void L3_ui_big(vU32 *d);
extern void Lc_buf_copy_uc(U8 *d,const U8 *s,U16 num);
extern void Lc_buf_copy_us(U16 *d,const U16 *s,U16 num);
///void L2_line_algo_media(U8 *buf,vU16 len);
extern vU8 Lc_U8_media3(vU8 a,vU8 b,vU8 c);
extern vS32 Lc_S32_media3(vS32 a,vS32 b,vS32 c);
extern vS32 Lc_S32_media(vS32 val[],S16 num);
extern void Lc_array_sort(S32 arr[],int n);
/// 0x11 0x22 ---> 0x31 0x31 0x32 0x32 '1' '1' '2' '2'
extern void Lc_hex2ascii(U8 *buf,U16 len,U8 *ascii);
extern int isBigEndianOrder(void);
extern U32 ntohl(U32 dat);
extern U32 htonl(U32 dat);
extern U16 ntohs(U16 dat);
extern U16 htons(U16 dat);
extern U32 Lc_abs(vS32 a,vS32 b);
extern void Lc_encrypt_id(U8 *enc_dst, U8 *enc_src, U32 enc_key, U8 src_len);
extern void Lc_encrypt_id1(U8 *enc_dst, U8 *enc_src, U8 enc_key[], U8 src_len);
extern int Lc_strlen(char *str);
extern U32 Lc_vU32_avg(U32 *d, U8 n);
extern U32 Lc_vS32_media(U32 *d, U8 n);
extern int Lc_memset(U8 *buf,U8 c,U16 len);
extern void Lc_for_int8(U8 i);
extern void Lc_for_int16(U16 i);
#endif /* end _c_lib_H_ */
/*****************************************************************************
** End Of File
******************************************************************************/

359
source/clib/c_type51.h.bak

@ -1,359 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2020, 传控科技
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版本
/// Modified by: cc
/// Modified date: 20200531
/// Version:
/// Descriptions: add u8
//////////////////////////////////////////////////////////////////////////
//#include <stdint.h>
#ifndef __TYPE51_H__
#define __TYPE51_H__
/*********************************************************************************************************
realView编译器需要添加的头文件
*********************************************************************************************************/
#include <ctype.h>
#include <stdlib.h>
#include <setjmp.h>
//#include <rt_misc.h>
typedef unsigned char U8;
typedef volatile unsigned short U16; /* 无符号16位整型变量 */
typedef volatile signed long S32;
typedef volatile unsigned long U32; /* 无符号32位整型变量 */
typedef unsigned int FLAG_P; // 标准类变量
//typedef unsigned char INTU; // 标准类变量8BIT MCU
typedef unsigned int INTU; // 标准类变量32BIT MCU
typedef U8 UN_TYPE;
typedef U8 vtype;
typedef U8 vType;
/*********************************************************************************************************
*********************************************************************************************************/
#define ZY_OK 0 /* 操作成功 */
#define ZY_NOT_OK 1 /* 操作失败 */
#define ZY_PARAMETER_ERR 2 /* 参数错误 */
#define ZY_NO_FIND_FUNCTION 6 /* 没有发现指定函数 */
#define ZY_NO_MEMORY 12 /* 内存不足 */
#define ZY_TIME_OUT 13 /* 超时 */
#define ZY_NO_FIND_OBJECT 16 /* 没有发现对象 */
#define D_flag_lock 2
#define D_flag_clear 0
#define D_flag_CanUse 1
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
#ifndef NULL
#define NULL ((void *)0)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef D_stop
#define D_stop (1)
#endif
#ifndef D_run
#define D_run (0)
#endif
#ifndef D_ready
#define D_ready (1)
#endif
#ifndef D_ready2
#define D_ready2 (2)
#endif
#ifndef D_max
#define D_max (3)
#endif
#ifndef D_diff
#define D_diff (4)
#endif
#ifndef D_set
#define D_set (1)
#endif
#ifndef D_clear
#define D_clear (0)
#endif
#define D_ON 1
#define D_OFF 0
#define D_sleep_wakeup 3
#define D_sleep 1
#define D_wakeup 0
#ifndef TRUE
#define TRUE (1)
#endif
/*********************************************************************************************************
*********************************************************************************************************/
typedef U8 u8;
typedef volatile U8 vU8;
typedef U8 uint8_t;
typedef U8 uint8;
typedef char int8_t;
typedef U8 BOOLEAN; /* 布尔变量 */
typedef U8 *PU8;
typedef U8 BYTE;
typedef signed char S8;
typedef volatile signed char vS8;
typedef signed char *PS8;
typedef S8 s8;
#define bit char
//#define code
typedef U16 u16;
typedef volatile U16 vU16; /* 无符号16位整型变量 */
typedef volatile signed short S16;
typedef volatile signed short s16;
typedef volatile S16 vS16; /* 有符号16位整型变量 */
typedef volatile U16 uint16_t;
typedef volatile S32 vS32;
typedef U32 INT32U; // 无符号32位整型变量
typedef S32 INT32S; // 有符号32位整型变量
typedef volatile U32 vU32; /* 有符号32位整型变量 */
typedef float FP32; /* 单精度浮点数(32位长度) */
typedef double FP64; /* 双精度浮点数(64位长度) */
typedef U32 uint32_t;
typedef U32 uint32;
//typedef unsigned char BOOLEAN; // 布尔变量
typedef unsigned char INT8U; // 无符号8位整型变量
typedef signed char INT8S; // 有符号8位整型变量
typedef unsigned short INT16U; // 无符号16位整型变量
typedef signed short INT16S; // 有符号16位整型变量
//typedef float FP32; // 单精度浮点数(32位长度)
//typedef double FP64; // 双精度浮点数(64位长度)
///>>>>>>cpu类型特有>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>大端小端
typedef union
{
vU32 ui;
vU16 s[2];
vU8 d[4];
}tu_ui4uc;
typedef union
{
vU16 word;
struct
{
vU8 h;
vU8 l;
}BYTE2;
}U_U16;
typedef union
{
vU32 dWord;
///High 0123 Low
struct
{
vU8 byte0;
vU8 byte1;
vU8 byte2;
vU8 byte3;
}BYTE4;
vU16 us[2];
}U_U32;
typedef union
{
vU16 us;
vU8 uc[2];
struct
{
vU8 H;
vU8 L;
}BYTE2;
}U_F16;
/**********
k.us = 0x1234
uc
[0]=0x12
[1]=0x34
byte2
H=0x12
L=0x34
**********/
typedef union
{
float fl;
vU8 uc[4];
}U_F32;
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<大端小端
typedef struct
{
u16 get; //想要达到的值
u16 max; //​最大值
u16 min; //最小值
/// u16 diff; //get和最值max,min的差值 在有些输入的时候有用 不想
}TS_u16get_;//电磁阀动作
typedef struct
{
vU8 *buffer;
vU8 wpt;
vU8 rpt;
vU8 cnt;
}byte_len_fifo_struct;
typedef struct
{
vU16 *buffer;
vU16 wpt;
vU16 rpt;
vU16 cnt;
}word_len_fifo_struct;
typedef struct
{
vU16 x;
vU16 y;
}point_struct;
typedef struct
{
vU16 x;
vU16 y;
vU16 width;
vU16 height;
}rect_struct;
#define HIGHT 1
#define LOW 0
#if 0
#ifndef MIN
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#endif
#ifndef ABS
#define ABS(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
#endif
#define F_FINSIH 1
#define F_WORKING 0
#define F_WAITINGKEY 2
#define DF_var_up(v,step,max,init) (v) += (step);if((v) > (max)) (v) = (init);
//if step > 1 bug warning!!
#define DF_var_down(v,step,min,init) \
if((v) < ((min) + (step))) \
{ \
(v) = (init); \
}else \
{ \
(v) -= (step); \
}
#define D_us2uc_H(x) (U8)(0x00ff&((x)>>8))
#define D_us2uc_L(x) (U8)(0x00ff&(x))
#define D_ul2uc_0(xx) (U8)(0x000000ff&(xx))
#define D_uc_high(ww) ((ww)>>4)
#define D_uc_low(ww) ((ww)&0x0f)
#define D_2uc_u16(H,L) (((u16)H)<<8 | (u16)L)
#define L0_type_byte(x) ((U8 *) &(x))
//#define _nop_ __NOP
// #define _nop_
extern void L3_us_big(U16 *d);
extern void L3_ui_big(vU32 *d);
#endif /* __TYPE_H__ */

405
source/clib/新建文件夹/bit.h

@ -1,405 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2015, 传控科技
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
//////////////////////////////////////////////////////////////////////////
#ifndef __BIT_H__
#define __BIT_H__
#define cSetb0 0x01
#define cSetb1 0x02
#define cSetb2 0x04
#define cSetb3 0x08
#define cSetb4 0x10
#define cSetb5 0x20
#define cSetb6 0x40
#define cSetb7 0x80
#define cClrb0 0xfe
#define cClrb1 0xfd
#define cClrb2 0xfb
#define cClrb3 0xf7
#define cClrb4 0xef
#define cClrb5 0xdf
#define cClrb6 0xbf
#define cClrb7 0x7f
#define cTestb0 0x01
#define cTestb1 0x02
#define cTestb2 0x04
#define cTestb3 0x08
#define cTestb4 0x10
#define cTestb5 0x20
#define cTestb6 0x40
#define cTestb7 0x80
#define true 1
#define false 0
#define B0000_0000 0x00
#define B0000_0001 0x01
#define B0000_0010 0x02
#define B0000_0011 0x03
#define B0000_0100 0x04
#define B0000_0101 0x05
#define B0000_0110 0x06
#define B0000_0111 0x07
#define B0000_1000 0x08
#define B0000_1001 0x09
#define B0000_1010 0x0A
#define B0000_1011 0x0B
#define B0000_1100 0x0C
#define B0000_1101 0x0D
#define B0000_1110 0x0E
#define B0000_1111 0x0F
#define B0001_0000 0x10
#define B0001_0001 0x11
#define B0001_0010 0x12
#define B0001_0011 0x13
#define B0001_0100 0x14
#define B0001_0101 0x15
#define B0001_0110 0x16
#define B0001_0111 0x17
#define B0001_1000 0x18
#define B0001_1001 0x19
#define B0001_1010 0x1A
#define B0001_1011 0x1B
#define B0001_1100 0x1C
#define B0001_1101 0x1D
#define B0001_1110 0x1E
#define B0001_1111 0x1F
#define B0010_0000 0x20
#define B0010_0001 0x21
#define B0010_0010 0x22
#define B0010_0011 0x23
#define B0010_0100 0x24
#define B0010_0101 0x25
#define B0010_0110 0x26
#define B0010_0111 0x27
#define B0010_1000 0x28
#define B0010_1001 0x29
#define B0010_1010 0x2A
#define B0010_1011 0x2B
#define B0010_1100 0x2C
#define B0010_1101 0x2D
#define B0010_1110 0x2E
#define B0010_1111 0x2F
#define B0011_0000 0x30
#define B0011_0001 0x31
#define B0011_0010 0x32
#define B0011_0011 0x33
#define B0011_0100 0x34
#define B0011_0101 0x35
#define B0011_0110 0x36
#define B0011_0111 0x37
#define B0011_1000 0x38
#define B0011_1001 0x39
#define B0011_1010 0x3A
#define B0011_1011 0x3B
#define B0011_1100 0x3C
#define B0011_1101 0x3D
#define B0011_1110 0x3E
#define B0011_1111 0x3F
#define B0100_0000 0x40
#define B0100_0001 0x41
#define B0100_0010 0x42
#define B0100_0011 0x43
#define B0100_0100 0x44
#define B0100_0101 0x45
#define B0100_0110 0x46
#define B0100_0111 0x47
#define B0100_1000 0x48
#define B0100_1001 0x49
#define B0100_1010 0x4A
#define B0100_1011 0x4B
#define B0100_1100 0x4C
#define B0100_1101 0x4D
#define B0100_1110 0x4E
#define B0100_1111 0x4F
#define B0101_0000 0x50
#define B0101_0001 0x51
#define B0101_0010 0x52
#define B0101_0011 0x53
#define B0101_0100 0x54
#define B0101_0101 0x55
#define B0101_0110 0x56
#define B0101_0111 0x57
#define B0101_1000 0x58
#define B0101_1001 0x59
#define B0101_1010 0x5A
#define B0101_1011 0x5B
#define B0101_1100 0x5C
#define B0101_1101 0x5D
#define B0101_1110 0x5E
#define B0101_1111 0x5F
#define B0110_0000 0x60
#define B0110_0001 0x61
#define B0110_0010 0x62
#define B0110_0011 0x63
#define B0110_0100 0x64
#define B0110_0101 0x65
#define B0110_0110 0x66
#define B0110_0111 0x67
#define B0110_1000 0x68
#define B0110_1001 0x69
#define B0110_1010 0x6A
#define B0110_1011 0x6B
#define B0110_1100 0x6C
#define B0110_1101 0x6D
#define B0110_1110 0x6E
#define B0110_1111 0x6F
#define B0111_0000 0x70
#define B0111_0001 0x71
#define B0111_0010 0x72
#define B0111_0011 0x73
#define B0111_0100 0x74
#define B0111_0101 0x75
#define B0111_0110 0x76
#define B0111_0111 0x77
#define B0111_1000 0x78
#define B0111_1001 0x79
#define B0111_1010 0x7A
#define B0111_1011 0x7B
#define B0111_1100 0x7C
#define B0111_1101 0x7D
#define B0111_1110 0x7E
#define B0111_1111 0x7F
#define B1000_0000 0x80
#define B1000_0001 0x81
#define B1000_0010 0x82
#define B1000_0011 0x83
#define B1000_0100 0x84
#define B1000_0101 0x85
#define B1000_0110 0x86
#define B1000_0111 0x87
#define B1000_1000 0x88
#define B1000_1001 0x89
#define B1000_1010 0x8A
#define B1000_1011 0x8B
#define B1000_1100 0x8C
#define B1000_1101 0x8D
#define B1000_1110 0x8E
#define B1000_1111 0x8F
#define B1001_0000 0x90
#define B1001_0001 0x91
#define B1001_0010 0x92
#define B1001_0011 0x93
#define B1001_0100 0x94
#define B1001_0101 0x95
#define B1001_0110 0x96
#define B1001_0111 0x97
#define B1001_1000 0x98
#define B1001_1001 0x99
#define B1001_1010 0x9A
#define B1001_1011 0x9B
#define B1001_1100 0x9C
#define B1001_1101 0x9D
#define B1001_1110 0x9E
#define B1001_1111 0x9F
#define B1010_0000 0xA0
#define B1010_0001 0xA1
#define B1010_0010 0xA2
#define B1010_0011 0xA3
#define B1010_0100 0xA4
#define B1010_0101 0xA5
#define B1010_0110 0xA6
#define B1010_0111 0xA7
#define B1010_1000 0xA8
#define B1010_1001 0xA9
#define B1010_1010 0xAA
#define B1010_1011 0xAB
#define B1010_1100 0xAC
#define B1010_1101 0xAD
#define B1010_1110 0xAE
#define B1010_1111 0xAF
#define B1011_0000 0xB0
#define B1011_0001 0xB1
#define B1011_0010 0xB2
#define B1011_0011 0xB3
#define B1011_0100 0xB4
#define B1011_0101 0xB5
#define B1011_0110 0xB6
#define B1011_0111 0xB7
#define B1011_1000 0xB8
#define B1011_1001 0xB9
#define B1011_1010 0xBA
#define B1011_1011 0xBB
#define B1011_1100 0xBC
#define B1011_1101 0xBD
#define B1011_1110 0xBE
#define B1011_1111 0xBF
#define B1100_0000 0xC0
#define B1100_0001 0xC1
#define B1100_0010 0xC2
#define B1100_0011 0xC3
#define B1100_0100 0xC4
#define B1100_0101 0xC5
#define B1100_0110 0xC6
#define B1100_0111 0xC7
#define B1100_1000 0xC8
#define B1100_1001 0xC9
#define B1100_1010 0xCA
#define B1100_1011 0xCB
#define B1100_1100 0xCC
#define B1100_1101 0xCD
#define B1100_1110 0xCE
#define B1100_1111 0xCF
#define B1101_0000 0xD0
#define B1101_0001 0xD1
#define B1101_0010 0xD2
#define B1101_0011 0xD3
#define B1101_0100 0xD4
#define B1101_0101 0xD5
#define B1101_0110 0xD6
#define B1101_0111 0xD7
#define B1101_1000 0xD8
#define B1101_1001 0xD9
#define B1101_1010 0xDA
#define B1101_1011 0xDB
#define B1101_1100 0xDC
#define B1101_1101 0xDD
#define B1101_1110 0xDE
#define B1101_1111 0xDF
#define B1110_0000 0xE0
#define B1110_0001 0xE1
#define B1110_0010 0xE2
#define B1110_0011 0xE3
#define B1110_0100 0xE4
#define B1110_0101 0xE5
#define B1110_0110 0xE6
#define B1110_0111 0xE7
#define B1110_1000 0xE8
#define B1110_1001 0xE9
#define B1110_1010 0xEA
#define B1110_1011 0xEB
#define B1110_1100 0xEC
#define B1110_1101 0xED
#define B1110_1110 0xEE
#define B1110_1111 0xEF
#define B1111_0000 0xF0
#define B1111_0001 0xF1
#define B1111_0010 0xF2
#define B1111_0011 0xF3
#define B1111_0100 0xF4
#define B1111_0101 0xF5
#define B1111_0110 0xF6
#define B1111_0111 0xF7
#define B1111_1000 0xF8
#define B1111_1001 0xF9
#define B1111_1010 0xFA
#define B1111_1011 0xFB
#define B1111_1100 0xFC
#define B1111_1101 0xFD
#define B1111_1110 0xFE
#define B1111_1111 0xFF
/*************************************************
*************************************************/
#define BIT0 0
#define BIT1 1
#define BIT2 2
#define BIT3 3
#define BIT4 4
#define BIT5 5
#define BIT6 6
#define BIT7 7
///--------------------------------------
#define BITN0 0X01
#define BITN1 0X02
#define BITN2 0X04
#define BITN3 0X08
#define BITN4 0X10
#define BITN5 0X20
#define BITN6 0X40
#define BITN7 0X80
/// BITNx = { 0x40 0x80}
#define BITN_1(X,BITNx) (X)|= (BITNx)
#define BITN_0(X,BITNx) (X)&=~(BITNx)
#define BITN_G(X,BITNx) ((X)&(BITNx))
//BITN_1(reg,BITN0)
#define BITS_1(X,BITx) (X)|= (BITx)
#define BITS_0(X,BITx) (X)&=~(BITx)
#define BITC_1 0X01
#define BITC_2 0X03
#define BITC_3 0X07
#define BITC_4 0X0F
#define BITC_5 0X1F
#define BITC_6 0X3F
#define BITC_7 0X7F
#define BITC_8 0XFF
//// 多位配置,一定要配对使用,先清除再设置。
/// 对REG的 从BITx开始 清除 N位
#define BITS_CLR(REG,BITC_N,BITx) (REG)&= ~((BITC_N)<<(BITx))
////对REG的 从BITx开始 放入值,小心溢出 一定要配对使用,先清除再设置。
#define BITS_SET(REG,VAL) (REG) |= (VAL) //直接操作 之前必须清零
///BITS_CLR(REG,BITC_2,BIT0)/// reg.0 reg.1 两位被清零
///BITS_CLR(REG,BITC_3,BIT5)/// reg.5 reg.6 reg.7 3位被清零
#define BITS_SET_SHIFT(REG,VAL,BITx) (REG)|= ((VAL)<<(BITx))///需要移位 兼容一部分程序
#if 0
/// b = {0,1,2,3,4,5,6,7}
#define BIT_1(X,b) (X)|= (1<<(b))
#define BIT_0(X,b) (X)&=~(1<<(b))
#define BIT_G(X,b) ((X)&(1<<(b)))
#define SETBIT(regVal, bitN) ((regVal) |= (1<<(bitN))) // 置位
#define CLRBIT(regVal, bitN) ((regVal) &= ~(1<<(bitN))) // 清位
#define GETBIT(regVal, bitN) ((regVal) & (1<<(bitN)) ) // 取位值
// 原来的意思是双位进行移位和赋值 0b0000 0011 // fixme
#define BITD_CLR(regVal,D,bitN) (regVal)&=~((D)<<(bitN))
#define BITD_SET(regVal,D,bitN) BITD_CLR((regVal),3,(bitN));(regVal)|= ((D)<<(bitN))
///-----------------------------------
#define IO_OUT_HIGH(PORT, PIN) SETBIT(PORT, PIN)
#define IO_OUT_LOW(PORT, PIN) CLRBIT(PORT, PIN)
#endif
#endif /* __BIT_H__ */

1140
source/clib/新建文件夹/c_printf - 复杂待待调试.c

File diff suppressed because it is too large

29
source/clib/新建文件夹/c_printf - 复杂待待调试.h

@ -1,29 +0,0 @@
/*****************************************************************************
* c_printf: Header file for NXP LPC17xx Family Microprocessors
*
* Copyright (c) 2023 CCSENS
* All rights reserved.
*
* History
* 20230205 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#ifndef _c_printf_H_
#define _c_printf_H_
#include <stdarg.h>
#include <stdlib.h>
#include "c_type51.h"
//
#include "c_delay.h"
#include "c_crc.h"
#endif /* end _c_printf_H_ */
/*****************************************************************************
** End Of File
******************************************************************************/

64
source/clib/新建文件夹/c_printf.c

@ -1,64 +0,0 @@
#include "c_type51.h"
#include "c_lib.h"
///#include "../msp/msp_uart0.h"
////#include "../msp/time.h"
#include <stdarg.h>
#if 0
///int print_withoutbuf(const char *format, ...);
//va_start(arg,format),初始化参数指针arg,将函数参数format右边第一个参数地址赋值给arg
//format必须是一个参数的指针,所以,此种类型函数至少要有一个普通的参数,
//从而提供给va_start ,这样va_start才能找到可变参数在栈上的位置。
//va_arg(arg,char),获得arg指向参数的值,同时使arg指向下一个参数,char用来指名当前参数型
//va_end 在有些实现中可能会把arg改成无效值,这里,是把arg指针指向了 NULL,避免出现野指针
void print_withoutbuf(const char *format, ...)
{
va_listcc arg;
va_start(arg, format);
while (*format)
{
char ret = *format;
if (ret == '%')
{
switch (*++format)
{
case 'c':
{
char ch = va_arg(arg, char);
/// putchar(ch);
break;
}
case 's':
{
char *pc = va_arg(arg, char *);
while (*pc)
{
/// putchar(*pc);
pc++;
}
break;
}
default:
break;
}
}
else
{
putchar(*format);
}
format++;
}
va_end(arg);
}
#endif

29
source/clib/新建文件夹/c_printf.h

@ -1,29 +0,0 @@
/*****************************************************************************
* c_printf: Header file for NXP LPC17xx Family Microprocessors
*
* Copyright (c) 2023 CCSENS
* All rights reserved.
*
* History
* 20230205 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#ifndef _c_printf_H_
#define _c_printf_H_
#include <stdarg.h>
#include <stdlib.h>
#include "c_type51.h"
//
#include "c_delay.h"
#include "c_crc.h"
#endif /* end _c_printf_H_ */
/*****************************************************************************
** End Of File
******************************************************************************/

323
source/clib/新建文件夹/c_type.h

@ -1,323 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2020, 传控科技
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版本
/// Modified by: cc
/// Modified date: 20200531
/// Version:
/// Descriptions: add u8
//////////////////////////////////////////////////////////////////////////
//#include <stdint.h>
#ifndef __TYPE_H__
#define __TYPE_H__
#ifndef NULL
#define NULL ((void *)0)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef D_stop
#define D_stop (1)
#endif
#ifndef D_run
#define D_run (0)
#endif
#ifndef D_ready
#define D_ready (1)
#endif
#ifndef D_ready2
#define D_ready2 (2)
#endif
#ifndef D_max
#define D_max (3)
#endif
#ifndef D_diff
#define D_diff (4)
#endif
#ifndef D_set
#define D_set (1)
#endif
#ifndef D_clear
#define D_clear (0)
#endif
#define D_ON 1
#define D_OFF 0
#define D_sleep_wakeup 3
#define D_sleep 1
#define D_wakeup 0
#ifndef TRUE
#define TRUE (1)
#endif
/*********************************************************************************************************
*********************************************************************************************************/
typedef unsigned char U8;
typedef unsigned char u8;
typedef volatile U8 vU8;
typedef U8 uint8_t;
typedef U8 BOOLEAN; /* 布尔变量 */
typedef U8 *PU8;
typedef U8 BYTE;
typedef signed char S8;
typedef volatile signed char vS8;
typedef signed char *PS8;
#define bit char
//#define code
typedef unsigned short u16;
typedef unsigned short U16; /* 无符号16位整型变量 */
typedef volatile U16 vU16; /* 无符号16位整型变量 */
typedef signed short S16;
typedef volatile S16 vS16; /* 有符号16位整型变量 */
typedef signed long S32;
typedef unsigned int U32; /* 无符号32位整型变量 */
typedef volatile U32 vU32; /* 有符号32位整型变量 */
typedef volatile signed long vS32;
typedef float FP32; /* 单精度浮点数(32位长度) */
typedef double FP64; /* 双精度浮点数(64位长度) */
typedef U32 uint32_t;
//typedef unsigned char BOOLEAN; // 布尔变量
typedef unsigned char INT8U; // 无符号8位整型变量
typedef signed char INT8S; // 有符号8位整型变量
typedef unsigned short INT16U; // 无符号16位整型变量
typedef signed short INT16S; // 有符号16位整型变量
typedef unsigned long INT32U; // 无符号32位整型变量
typedef signed long INT32S; // 有符号32位整型变量
//typedef float FP32; // 单精度浮点数(32位长度)
//typedef double FP64; // 双精度浮点数(64位长度)
typedef unsigned int FLAG_P; // 标准类变量
//typedef unsigned char INTU; // 标准类变量8BIT MCU
typedef unsigned int INTU; // 标准类变量32BIT MCU
/******************
**************************/
/*********************************************************************************************************
*********************************************************************************************************/
#define ZY_OK 0 /* 操作成功 */
#define ZY_NOT_OK 1 /* 操作失败 */
#define ZY_PARAMETER_ERR 2 /* 参数错误 */
#define ZY_NO_FIND_FUNCTION 6 /* 没有发现指定函数 */
#define ZY_NO_MEMORY 12 /* 内存不足 */
#define ZY_TIME_OUT 13 /* 超时 */
#define ZY_NO_FIND_OBJECT 16 /* 没有发现对象 */
/*********************************************************************************************************
realView编译器需要添加的头文件
*********************************************************************************************************/
#include <ctype.h>
#include <stdlib.h>
#include <setjmp.h>
//#include <rt_misc.h>
#define D_flag_lock 2
#define D_flag_clear 0
#define D_flag_CanUse 1
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
typedef U8 UN_TYPE;
typedef U8 vtype;
/*************
******************/
//>>>>>
typedef union
{
vU32 ui;
vU16 s[2];
vU8 d[4];
}tu_ui4uc;
typedef union
{
vU16 word;
struct
{
vU8 h;
vU8 l;
}BYTE2;
}U_U16;
typedef union
{
vU32 dWord;
///High 0123 Low
struct
{
vU8 byte0;
vU8 byte1;
vU8 byte2;
vU8 byte3;
}BYTE4;
}U_U32;
typedef union
{
vU16 us;
vU8 uc[2];
struct
{
vU8 H;
vU8 L;
}BYTE2;
}U_F16;
/**********
k.us = 0x1234
uc
[0]=0x12
[1]=0x34
byte2
H=0x12
L=0x34
**********/
typedef union
{
float fl;
vU8 uc[4];
}U_F32;
typedef struct
{
vU8 *buffer;
vU8 wpt;
vU8 rpt;
vU8 cnt;
}byte_len_fifo_struct;
typedef struct
{
vU16 *buffer;
vU16 wpt;
vU16 rpt;
vU16 cnt;
}word_len_fifo_struct;
typedef struct
{
vU16 x;
vU16 y;
}point_struct;
typedef struct
{
vU16 x;
vU16 y;
vU16 width;
vU16 height;
}rect_struct;
#define HIGHT 1
#define LOW 0
#if 0
#ifndef MIN
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#endif
#ifndef ABS
#define ABS(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
#endif
#define F_FINSIH 1
#define F_WORKING 0
#define F_WAITINGKEY 2
#define DF_var_up(v,step,max,init) (v) += (step);if((v) > (max)) (v) = (init);
//if step > 1 bug warning!!
#define DF_var_down(v,step,min,init) \
if((v) < ((min) + (step))) \
{ \
(v) = (init); \
}else \
{ \
(v) -= (step); \
}
#define D_us2uc_H(x) (U8)(0x00ff&((x)>>8))
#define D_us2uc_L(x) (U8)(0x00ff&(x))
#define D_ul2uc_0(xx) (U8)(0x000000ff&(xx))
#define D_uc_high(ww) ((ww)>>4)
#define D_uc_low(ww) ((ww)&0x0f)
#define D_2uc_u16(H,L) (((U16)H<<8)|L)
#define L0_type_byte(x) ((U8 *) &(x))
//#define _nop_ __NOP
// #define _nop_
extern void L3_us_big(U16 *d);
extern void L3_ui_big(vU32 *d);
#endif /* __TYPE_H__ */

340
source/clib/新建文件夹/c_typeArm.h

@ -1,340 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2020, 传控科技
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版本
/// Modified by: cc
/// Modified date: 20200531
/// Version:
/// Descriptions: add u8
//////////////////////////////////////////////////////////////////////////
//#include <stdint.h>
#ifndef __TYPE51_H__
#define __TYPE51_H__
typedef signed long S32;
typedef unsigned long U32; /* 无符号32位整型变量 */
typedef unsigned int FLAG_P; // 标准类变量
//typedef unsigned char INTU; // 标准类变量8BIT MCU
typedef unsigned int INTU; // 标准类变量32BIT MCU
#ifndef NULL
#define NULL ((void *)0)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef D_stop
#define D_stop (1)
#endif
#ifndef D_run
#define D_run (0)
#endif
#ifndef D_ready
#define D_ready (1)
#endif
#ifndef D_ready2
#define D_ready2 (2)
#endif
#ifndef D_max
#define D_max (3)
#endif
#ifndef D_diff
#define D_diff (4)
#endif
#ifndef D_set
#define D_set (1)
#endif
#ifndef D_clear
#define D_clear (0)
#endif
#define D_ON 1
#define D_OFF 0
#define D_sleep_wakeup 3
#define D_sleep 1
#define D_wakeup 0
#ifndef TRUE
#define TRUE (1)
#endif
/*********************************************************************************************************
*********************************************************************************************************/
typedef unsigned char U8;
typedef unsigned char u8;
typedef volatile U8 vU8;
typedef U8 uint8_t;
typedef U8 BOOLEAN; /* 布尔变量 */
typedef U8 *PU8;
typedef U8 BYTE;
typedef signed char S8;
typedef volatile signed char vS8;
typedef signed char *PS8;
#define bit char
//#define code
typedef unsigned short u16;
typedef unsigned short U16; /* 无符号16位整型变量 */
typedef volatile U16 vU16; /* 无符号16位整型变量 */
typedef signed short S16;
typedef volatile S16 vS16; /* 有符号16位整型变量 */
typedef volatile S32 vS32;
typedef U32 INT32U; // 无符号32位整型变量
typedef S32 INT32S; // 有符号32位整型变量
typedef volatile U32 vU32; /* 有符号32位整型变量 */
typedef float FP32; /* 单精度浮点数(32位长度) */
typedef double FP64; /* 双精度浮点数(64位长度) */
typedef U32 uint32_t;
//typedef unsigned char BOOLEAN; // 布尔变量
typedef unsigned char INT8U; // 无符号8位整型变量
typedef signed char INT8S; // 有符号8位整型变量
typedef unsigned short INT16U; // 无符号16位整型变量
typedef signed short INT16S; // 有符号16位整型变量
//typedef float FP32; // 单精度浮点数(32位长度)
//typedef double FP64; // 双精度浮点数(64位长度)
/******************
**************************/
/*********************************************************************************************************
*********************************************************************************************************/
#define ZY_OK 0 /* 操作成功 */
#define ZY_NOT_OK 1 /* 操作失败 */
#define ZY_PARAMETER_ERR 2 /* 参数错误 */
#define ZY_NO_FIND_FUNCTION 6 /* 没有发现指定函数 */
#define ZY_NO_MEMORY 12 /* 内存不足 */
#define ZY_TIME_OUT 13 /* 超时 */
#define ZY_NO_FIND_OBJECT 16 /* 没有发现对象 */
/*********************************************************************************************************
realView编译器需要添加的头文件
*********************************************************************************************************/
#include <ctype.h>
#include <stdlib.h>
#include <setjmp.h>
//#include <rt_misc.h>
#define D_flag_lock 2
#define D_flag_clear 0
#define D_flag_CanUse 1
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
typedef U8 UN_TYPE;
typedef U8 vtype;
/*************
******************/
//>>>>>
typedef union
{
vU32 ui;
vU16 s[2];
vU8 d[4];
}tu_ui4uc;
typedef union
{
vU16 word;
struct
{
vU8 h;
vU8 l;
}BYTE2;
}U_U16;
typedef union
{
vU32 dWord;
///High 0123 Low
struct
{
vU8 byte0;
vU8 byte1;
vU8 byte2;
vU8 byte3;
}BYTE4;
vU16 us[2];
}U_U32;
typedef union
{
vU16 us;
vU8 uc[2];
struct
{
vU8 H;
vU8 L;
}BYTE2;
}U_F16;
/**********
k.us = 0x1234
uc
[0]=0x12
[1]=0x34
byte2
H=0x12
L=0x34
**********/
typedef union
{
float fl;
vU8 uc[4];
}U_F32;
typedef struct
{
vU8 *buffer;
vU8 wpt;
vU8 rpt;
vU8 cnt;
}byte_len_fifo_struct;
typedef struct
{
vU16 *buffer;
vU16 wpt;
vU16 rpt;
vU16 cnt;
}word_len_fifo_struct;
typedef struct
{
vU16 x;
vU16 y;
}point_struct;
typedef struct
{
vU16 x;
vU16 y;
vU16 width;
vU16 height;
}rect_struct;
#define HIGHT 1
#define LOW 0
#if 0
#ifndef MIN
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#endif
#ifndef ABS
#define ABS(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
#endif
#define F_FINSIH 1
#define F_WORKING 0
#define F_WAITINGKEY 2
#define DF_var_up(v,step,max,init) (v) += (step);if((v) > (max)) (v) = (init);
//if step > 1 bug warning!!
#define DF_var_down(v,step,min,init) \
if((v) < ((min) + (step))) \
{ \
(v) = (init); \
}else \
{ \
(v) -= (step); \
}
#define D_us2uc_H(x) (U8)(0x00ff&((x)>>8))
#define D_us2uc_L(x) (U8)(0x00ff&(x))
#define D_ul2uc_0(xx) (U8)(0x000000ff&(xx))
#define D_uc_high(ww) ((ww)>>4)
#define D_uc_low(ww) ((ww)&0x0f)
#define L0_type_byte(x) ((U8 *) &(x))
//#define _nop_ __NOP
// #define _nop_
extern void L3_us_big(U16 *d);
extern void L3_ui_big(vU32 *d);
#endif /* __TYPE_H__ */

1851
source/clib/新建文件夹/clib.c

File diff suppressed because it is too large

121
source/clib/新建文件夹/clib.h

@ -1,121 +0,0 @@
/*****************************************************************************
* uart.h: Header file for NXP LPC17xx Family Microprocessors
*
* Copyright(C) 2009, NXP Semiconductor
* All rights reserved.
*
* History
* 2009.05.27 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#ifndef _CLIB_H_
#define _CLIB_H_
#include <stdarg.h>
#include <stdlib.h>
#include "../clib/type.h"
//#include "../clib/Clib.h"
//#include "../debug/debug_drv.h"
//extern char guc_send[128];
extern unsigned char code cguHex2Char[16][2];
typedef struct
{
vU16 up_point;
vU16 down_point;
}TS_up_down_p_;
extern U8 Lc_Hex2Char(U8 CharStr);
//extern void Lc_int2str(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d);
// input: 123456d
// output: '1' '2' '3'....
//对应的点阵 为 0123456789. ,最后为空格,专为显示点阵类的数值使用
//extern void Lc_int2number(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d);
//extern U32 L2_fun_number_show(int i,char str[4]);
#if 0
struct _s_temp_
{
U8 d[16];
};
extern struct _s_temp_ s_temp22;
extern U8 s_temp[16];
extern U32 ul2fun2[10];
extern void Lc_Byte_cp(BYTE *src,BYTE *dis, int len);
extern void L1_buf22ui(volatile BYTE in[],vU32 *ui_t2,vU32 *ui_t3);
extern void Lc_2ui2buf(vU32 ui_t2,vU32 ui_t3,volatile BYTE out[]);
extern void Lc_int2str_3(U32 ui_in,char *d);
extern U32 Lc_abs(vU32 a,vU32 b,vU32 *diff);
extern void Lc_int2str_4(U32 ui_in,char *d);
extern void Lc_sint2str_3(int i_in,char *d);
#define Lc_WEI(WEIx,WEIn) (U8)((WEIx/ul2fun2[WEIn])%10);
#define Lc_eee(WEIn) ul2fun2[WEIn]
#endif
extern char *Lc_int2a(vS32 value, char *string, UN_TYPE radix);
extern void Lc_int2D(vS16 value, char *string,char bits);
extern char *strstr(const char *str1, const char *str2);
extern unsigned char catch_protocol (const char d_src[],char d_protocol[]) ;
#define Lc_delay_1us() L0_delay_1us()
extern void Lc_delay_us(vU16 i);
extern void Lc_delay_ms(vU16 i);
extern void Lc_delay_nop(U8 i);
////////////////
extern void Lc_uc_hex(char ww);
extern void Lc_us_hex(U16 ww);
//extern void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...);
extern void Lc_print(char *dat4,...);
extern void Lc_print_NC(char *dat,...);
extern void Lc_print_buf(char *dat4,...);
extern void L3_us_big(U16 *d);
extern void L3_ui_big(vU32 *d);
extern void Lc_buf_copy_uc(U8 *d,const U8 *s,U16 num);
///void L2_line_algo_media(U8 *buf,vU16 len);
extern vU8 Lc_U8_media3(vU8 a,vU8 b,vU8 c);
extern vS32 Lc_S32_media3(vS32 a,vS32 b,vS32 c);
extern vS32 Lc_S32_media(vS32 val[],S16 num);
extern void Lc_array_sort(S32 arr[],int n);
/// 0x11 0x22 ---> 0x31 0x31 0x32 0x32 '1' '1' '2' '2'
extern void Lc_hex2ascii(U8 *buf,U16 len,U8 *ascii);
extern void crc16(unsigned char *CRC,void *dat,unsigned int len) /*reentrant*/;
//extern void crc16_irq(unsigned char *CRC,void *dat,unsigned int len);
extern void crc16qq(unsigned char *CRC,void *dat,unsigned int len) /*reentrant*/;
extern int isBigEndianOrder(void);
extern U32 ntohl(U32 dat);
extern U32 htonl(U32 dat);
extern U16 ntohs(U16 dat);
extern U16 htons(U16 dat);
extern U32 Lc_abs(vS32 a,vS32 b);
extern void Lc_encrypt_id(U8 *enc_dst, U8 *enc_src, U32 enc_key, U8 src_len);
extern int libc_strlen(char *str);
extern S32 Lc_vS32_avg(vS32 *d, U8 n);
extern vS32 Lc_vS32_media(vS32 *d, U8 n);
extern void Lc_U16_shift_media3(vU16 *m);
extern void Lc_despiking_shift3_U16(vU16 *m);
#endif /* end __UART_H */
/*****************************************************************************
** End Of File
******************************************************************************/

317
source/clib/新建文件夹/type.h

@ -1,317 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2020, 传控科技
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版本
/// Modified by: cc
/// Modified date: 20200531
/// Version:
/// Descriptions: add u8
//////////////////////////////////////////////////////////////////////////
//#include <stdint.h>
#ifndef __TYPE_H__
#define __TYPE_H__
#ifndef NULL
#define NULL ((void *)0)
#endif
#ifndef FALSE
#define FALSE (0)
#endif
#ifndef D_stop
#define D_stop (1)
#endif
#ifndef D_run
#define D_run (0)
#endif
#ifndef D_ready
#define D_ready (1)
#endif
#ifndef D_ready2
#define D_ready2 (2)
#endif
#ifndef D_max
#define D_max (3)
#endif
#ifndef D_diff
#define D_diff (4)
#endif
#ifndef D_set
#define D_set (1)
#endif
#ifndef D_clear
#define D_clear (0)
#endif
#define D_ON 1
#define D_OFF 0
#define D_sleep_wakeup 3
#define D_sleep 1
#define D_wakeup 0
#ifndef TRUE
#define TRUE (1)
#endif
/*********************************************************************************************************
*********************************************************************************************************/
typedef unsigned char U8;
typedef unsigned char u8;
typedef volatile U8 vU8;
typedef U8 BOOLEAN; /* 布尔变量 */
typedef U8 *PU8;
typedef U8 BYTE;
typedef signed char S8;
typedef volatile signed char vS8;
typedef signed char *PS8;
#define bit char
//#define code
typedef unsigned short u16;
typedef unsigned short U16; /* 无符号16位整型变量 */
typedef volatile U16 vU16; /* 无符号16位整型变量 */
typedef signed short S16;
typedef volatile S16 vS16; /* 有符号16位整型变量 */
typedef signed long S32;
typedef unsigned long U32; /* 无符号32位整型变量 */
typedef volatile U32 vU32; /* 有符号32位整型变量 */
typedef volatile signed long vS32;
typedef float FP32; /* 单精度浮点数(32位长度) */
typedef double FP64; /* 双精度浮点数(64位长度) */
//typedef unsigned char BOOLEAN; // 布尔变量
typedef unsigned char INT8U; // 无符号8位整型变量
typedef signed char INT8S; // 有符号8位整型变量
typedef unsigned short INT16U; // 无符号16位整型变量
typedef signed short INT16S; // 有符号16位整型变量
typedef unsigned long INT32U; // 无符号32位整型变量
typedef signed long INT32S; // 有符号32位整型变量
//typedef float FP32; // 单精度浮点数(32位长度)
//typedef double FP64; // 双精度浮点数(64位长度)
typedef unsigned int FLAG_P; // 标准类变量
//typedef unsigned char INTU; // 标准类变量8BIT MCU
typedef unsigned int INTU; // 标准类变量32BIT MCU
/******************
**************************/
/*********************************************************************************************************
*********************************************************************************************************/
#define ZY_OK 0 /* 操作成功 */
#define ZY_NOT_OK 1 /* 操作失败 */
#define ZY_PARAMETER_ERR 2 /* 参数错误 */
#define ZY_NO_FIND_FUNCTION 6 /* 没有发现指定函数 */
#define ZY_NO_MEMORY 12 /* 内存不足 */
#define ZY_TIME_OUT 13 /* 超时 */
#define ZY_NO_FIND_OBJECT 16 /* 没有发现对象 */
/*********************************************************************************************************
realView编译器需要添加的头文件
*********************************************************************************************************/
#include <ctype.h>
#include <stdlib.h>
#include <setjmp.h>
//#include <rt_misc.h>
#define D_flag_lock 2
#define D_flag_clear 0
#define D_flag_CanUse 1
typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
typedef U8 UN_TYPE;
typedef U8 vtype;
/*************
******************/
//>>>>>
typedef union
{
vU32 ui;
vU16 s[2];
vU8 d[4];
}tu_ui4uc;
typedef union
{
vU16 word;
struct
{
vU8 h;
vU8 l;
}BYTE2;
}U_U16;
typedef union
{
vU32 dWord;
///High 0123 Low
struct
{
vU8 byte0;
vU8 byte1;
vU8 byte2;
vU8 byte3;
}BYTE4;
}U_U32;
typedef union
{
vU16 us;
vU8 uc[2];
struct
{
vU8 H;
vU8 L;
}BYTE2;
}U_F16;
/**********
k.us = 0x1234
uc
[0]=0x12
[1]=0x34
byte2
H=0x12
L=0x34
**********/
typedef union
{
float fl;
vU8 uc[4];
}U_F32;
typedef struct
{
vU8 *buffer;
vU8 wpt;
vU8 rpt;
vU8 cnt;
}byte_len_fifo_struct;
typedef struct
{
vU16 *buffer;
vU16 wpt;
vU16 rpt;
vU16 cnt;
}word_len_fifo_struct;
typedef struct
{
vU16 x;
vU16 y;
}point_struct;
typedef struct
{
vU16 x;
vU16 y;
vU16 width;
vU16 height;
}rect_struct;
#define HIGHT 1
#define LOW 0
#if 0
#ifndef MIN
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#endif
#ifndef ABS
#define ABS(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
#endif
#define F_FINSIH 1
#define F_WORKING 0
#define F_WAITINGKEY 2
#define DF_var_up(v,step,max,init) (v) += (step);if((v) > (max)) (v) = (init);
//if step > 1 bug warning!!
#define DF_var_down(v,step,min,init) \
if((v) < ((min) + (step))) \
{ \
(v) = (init); \
}else \
{ \
(v) -= (step); \
}
#define D_us2uc_H(x) (U8)(0x00ff&((x)>>8))
#define D_us2uc_L(x) (U8)(0x00ff&(x))
#define D_ul2uc_0(xx) (U8)(0x000000ff&(xx))
#define D_uc_high(ww) ((ww)>>4)
#define D_uc_low(ww) ((ww)&0x0f)
#define L0_type_byte(x) ((U8 *) &(x))
//#define _nop_ __NOP
// #define _nop_
extern void L3_us_big(U16 *d);
extern void L3_ui_big(vU32 *d);
#endif /* __TYPE_H__ */

384
source/cpu/111/stc_macro.H

@ -1,384 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file __C51_MACRO_H_
/// @brief macro define 和cpu相关,可以和同一个系列的cpu共享
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef __STC_MACRO_H_
#define __STC_MACRO_H_
#include<intrins.h>
#include "../clib/bit.h"
#define NOP() _nop_()
#define D_P07_ON() P07 = 1
#define D_P06_ON() P06 = 1
#define D_P05_ON() P05 = 1
#define D_P04_ON() P04 = 1
#define D_P03_ON() P03 = 1
#define D_P02_ON() P02 = 1
#define D_P01_ON() P01 = 1
#define D_P00_ON() P00 = 1
#define D_P07_OFF() P07 = 0
#define D_P06_OFF() P06 = 0
#define D_P05_OFF() P05 = 0
#define D_P04_OFF() P04 = 0
#define D_P03_OFF() P03 = 0
#define D_P02_OFF() P02 = 0
#define D_P01_OFF() P01 = 0
#define D_P00_OFF() P00 = 0
#define D_P07_AT() (P07)
#define D_P06_AT() (P06)
#define D_P05_AT() (P05)
#define D_P04_AT() (P04)
#define D_P03_AT() (P03)
#define D_P02_AT() (P02)
#define D_P01_AT() (P01)
#define D_P00_AT() (P00)
#define D_P07_REV() P07 = ~P07
#define D_P06_REV() P06 = ~P06
#define D_P05_REV() P05 = ~P05
#define D_P04_REV() P04 = ~P04
#define D_P03_REV() P03 = ~P03
#define D_P02_REV() P02 = ~P02
#define D_P01_REV() P01 = ~P01
#define D_P00_REV() P00 = ~P00
#define D_P17_ON() P17 = 1
#define D_P16_ON() P16 = 1
#define D_P15_ON() P15 = 1
#define D_P14_ON() P14 = 1
#define D_P13_ON() P13 = 1
#define D_P12_ON() P12 = 1
#define D_P11_ON() P11 = 1
#define D_P10_ON() P10 = 1
#define D_P17_OFF() P17 = 0
#define D_P16_OFF() P16 = 0
#define D_P15_OFF() P15 = 0
#define D_P14_OFF() P14 = 0
#define D_P13_OFF() P13 = 0
#define D_P12_OFF() P12 = 0
#define D_P11_OFF() P11 = 0
#define D_P10_OFF() P10 = 0
#define D_P17_AT() (P17)
#define D_P16_AT() (P16)
#define D_P15_AT() (P15)
#define D_P14_AT() (P14)
#define D_P13_AT() (P13)
#define D_P12_AT() (P12)
#define D_P11_AT() (P11)
#define D_P10_AT() (P10)
#define D_P17_REV() P17 = ~P17
#define D_P16_REV() P16 = ~P16
#define D_P15_REV() P15 = ~P15
#define D_P14_REV() P14 = ~P14
#define D_P13_REV() P13 = ~P13
#define D_P12_REV() P12 = ~P12
#define D_P11_REV() P11 = ~P11
#define D_P10_REV() P10 = ~P10
#define D_P27_ON() P27 = 1
#define D_P26_ON() P26 = 1
#define D_P25_ON() P25 = 1
#define D_P24_ON() P24 = 1
#define D_P23_ON() P23 = 1
#define D_P22_ON() P22 = 1
#define D_P21_ON() P21 = 1
#define D_P20_ON() P20 = 1
#define D_P27_OFF() P27 = 0
#define D_P26_OFF() P26 = 0
#define D_P25_OFF() P25 = 0
#define D_P24_OFF() P24 = 0
#define D_P23_OFF() P23 = 0
#define D_P22_OFF() P22 = 0
#define D_P21_OFF() P21 = 0
#define D_P20_OFF() P20 = 0
#define D_P27_AT() (P27)
#define D_P26_AT() (P26)
#define D_P25_AT() (P25)
#define D_P24_AT() (P24)
#define D_P23_AT() (P23)
#define D_P22_AT() (P22)
#define D_P21_AT() (P21)
#define D_P20_AT() (P20)
#define D_P27_REV() P27 = ~P27
#define D_P26_REV() P26 = ~P26
#define D_P25_REV() P25 = ~P25
#define D_P24_REV() P24 = ~P24
#define D_P23_REV() P23 = ~P23
#define D_P22_REV() P22 = ~P22
#define D_P21_REV() P21 = ~P21
#define D_P20_REV() P20 = ~P20
#define D_P37_ON() P37 = 1
#define D_P36_ON() P36 = 1
#define D_P35_ON() P35 = 1
#define D_P34_ON() P34 = 1
#define D_P33_ON() P33 = 1
#define D_P32_ON() P32 = 1
#define D_P31_ON() P31 = 1
#define D_P30_ON() P30 = 1
#define D_P37_OFF() P37 = 0
#define D_P36_OFF() P36 = 0
#define D_P35_OFF() P35 = 0
#define D_P34_OFF() P34 = 0
#define D_P33_OFF() P33 = 0
#define D_P32_OFF() P32 = 0
#define D_P31_OFF() P31 = 0
#define D_P30_OFF() P30 = 0
#define D_P37_AT() (P37)
#define D_P36_AT() (P36)
#define D_P35_AT() (P35)
#define D_P34_AT() (P34)
#define D_P33_AT() (P33)
#define D_P32_AT() (P32)
#define D_P31_AT() (P31)
#define D_P30_AT() (P30)
#define D_P37_REV() P37 = ~P37
#define D_P36_REV() P36 = ~P36
#define D_P35_REV() P35 = ~P35
#define D_P34_REV() P34 = ~P34
#define D_P33_REV() P33 = ~P33
#define D_P32_REV() P32 = ~P32
#define D_P31_REV() P31 = ~P31
#define D_P30_REV() P30 = ~P30
#define D_P47_ON() P47 = 1
#define D_P46_ON() P46 = 1
#define D_P45_ON() P45 = 1
#define D_P44_ON() P44 = 1
#define D_P43_ON() P43 = 1
#define D_P42_ON() P42 = 1
#define D_P41_ON() P41 = 1
#define D_P40_ON() P40 = 1
#define D_P47_OFF() P47 = 0
#define D_P46_OFF() P46 = 0
#define D_P45_OFF() P45 = 0
#define D_P44_OFF() P44 = 0
#define D_P43_OFF() P43 = 0
#define D_P42_OFF() P42 = 0
#define D_P41_OFF() P41 = 0
#define D_P40_OFF() P40 = 0
#define D_P47_AT() (P47)
#define D_P46_AT() (P46)
#define D_P45_AT() (P45)
#define D_P44_AT() (P44)
#define D_P43_AT() (P43)
#define D_P42_AT() (P42)
#define D_P41_AT() (P41)
#define D_P40_AT() (P40)
#define D_P47_REV() P47 = ~P47
#define D_P46_REV() P46 = ~P46
#define D_P45_REV() P45 = ~P45
#define D_P44_REV() P44 = ~P44
#define D_P43_REV() P43 = ~P43
#define D_P42_REV() P42 = ~P42
#define D_P41_REV() P41 = ~P41
#define D_P40_REV() P40 = ~P40
#define D_P57_ON() P57 = 1
#define D_P56_ON() P56 = 1
#define D_P55_ON() P55 = 1
#define D_P54_ON() P54 = 1
#define D_P53_ON() P53 = 1
#define D_P52_ON() P52 = 1
#define D_P51_ON() P51 = 1
#define D_P50_ON() P50 = 1
#define D_P57_OFF() P57 = 0
#define D_P56_OFF() P56 = 0
#define D_P55_OFF() P55 = 0
#define D_P54_OFF() P54 = 0
#define D_P53_OFF() P53 = 0
#define D_P52_OFF() P52 = 0
#define D_P51_OFF() P51 = 0
#define D_P50_OFF() P50 = 0
#define D_P57_AT() (P57)
#define D_P56_AT() (P56)
#define D_P55_AT() (P55)
#define D_P54_AT() (P54)
#define D_P53_AT() (P53)
#define D_P52_AT() (P52)
#define D_P51_AT() (P51)
#define D_P50_AT() (P50)
#define D_P57_REV() P57 = ~P57
#define D_P56_REV() P56 = ~P56
#define D_P55_REV() P55 = ~P55
#define D_P54_REV() P54 = ~P54
#define D_P53_REV() P53 = ~P53
#define D_P52_REV() P52 = ~P52
#define D_P51_REV() P51 = ~P51
#define D_P50_REV() P50 = ~P50
#define D_P67_ON() P67 = 1
#define D_P66_ON() P66 = 1
#define D_P65_ON() P65 = 1
#define D_P64_ON() P64 = 1
#define D_P63_ON() P63 = 1
#define D_P62_ON() P62 = 1
#define D_P61_ON() P61 = 1
#define D_P60_ON() P60 = 1
#define D_P67_OFF() P67 = 0
#define D_P66_OFF() P66 = 0
#define D_P65_OFF() P65 = 0
#define D_P64_OFF() P64 = 0
#define D_P63_OFF() P63 = 0
#define D_P62_OFF() P62 = 0
#define D_P61_OFF() P61 = 0
#define D_P60_OFF() P60 = 0
#define D_P67_AT() (P67)
#define D_P66_AT() (P66)
#define D_P65_AT() (P65)
#define D_P64_AT() (P64)
#define D_P63_AT() (P63)
#define D_P62_AT() (P62)
#define D_P61_AT() (P61)
#define D_P60_AT() (P60)
#define D_P67_REV() P67 = ~P67
#define D_P66_REV() P66 = ~P66
#define D_P65_REV() P65 = ~P65
#define D_P64_REV() P64 = ~P64
#define D_P63_REV() P63 = ~P63
#define D_P62_REV() P62 = ~P62
#define D_P61_REV() P61 = ~P61
#define D_P60_REV() P60 = ~P60
#define D_P77_ON() P77 = 1
#define D_P76_ON() P76 = 1
#define D_P75_ON() P75 = 1
#define D_P74_ON() P74 = 1
#define D_P73_ON() P73 = 1
#define D_P72_ON() P72 = 1
#define D_P71_ON() P71 = 1
#define D_P70_ON() P70 = 1
#define D_P77_OFF() P77 = 0
#define D_P76_OFF() P76 = 0
#define D_P75_OFF() P75 = 0
#define D_P74_OFF() P74 = 0
#define D_P73_OFF() P73 = 0
#define D_P72_OFF() P72 = 0
#define D_P71_OFF() P71 = 0
#define D_P70_OFF() P70 = 0
#define D_P77_AT() (P77)
#define D_P76_AT() (P76)
#define D_P75_AT() (P75)
#define D_P74_AT() (P74)
#define D_P73_AT() (P73)
#define D_P72_AT() (P72)
#define D_P71_AT() (P71)
#define D_P70_AT() (P70)
#define D_P77_REV() P77 = ~P77
#define D_P76_REV() P76 = ~P76
#define D_P75_REV() P75 = ~P75
#define D_P74_REV() P74 = ~P74
#define D_P73_REV() P73 = ~P73
#define D_P72_REV() P72 = ~P72
#define D_P71_REV() P71 = ~P71
#define D_P70_REV() P70 = ~P70
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
#define D_stdIO_P2_ALL() P2M1=0;P2M0=0;
#define D_HighI_P2_ALL() P2M1=0;P2M0=0XFF;
#define D_HighR_P2_ALL() P2M1=0XFF;P2M0=0;
#define D_OpenD_P2_ALL() P2M1=0XFF;P2M0=0XFF;
#define D_stdIO_P3_ALL() P3M1=0;P3M0=0;
#define D_HighI_P3_ALL() P3M1=0;P3M0=0XFF;
#define D_HighR_P3_ALL() P3M1=0XFF;P3M0=0;
#define D_OpenD_P3_ALL() P3M1=0XFF;P3M0=0XFF;
#define D_stdIO_P4_ALL() P4M1=0;P4M0=0;
#define D_HighI_P4_ALL() P4M1=0;P4M0=0XFF;
#define D_HighR_P4_ALL() P4M1=0XFF;P4M0=0;
#define D_OpenD_P4_ALL() P4M1=0XFF;P4M0=0XFF;
#define D_stdIO_P5_ALL() P5M1=0;P5M0=0;
#define D_HighI_P5_ALL() P5M1=0;P5M0=0XFF;
#define D_HighR_P5_ALL() P5M1=0XFF;P5M0=0;
#define D_OpenD_P5_ALL() P5M1=0XFF;P5M0=0XFF;
#define D_stdIO_P6_ALL() P6M1=0;P6M0=0;
#define D_HighI_P6_ALL() P6M1=0;P6M0=0XFF;
#define D_HighR_P6_ALL() P6M1=0XFF;P6M0=0;
#define D_OpenD_P6_ALL() P6M1=0XFF;P6M0=0XFF;
#define D_stdIO_P7_ALL() P7M1=0;P7M0=0;
#define D_HighI_P7_ALL() P7M1=0;P7M0=0XFF;
#define D_HighR_P7_ALL() P7M1=0XFF;P7M0=0;
#define D_OpenD_P7_ALL() P7M1=0XFF;P7M0=0XFF;
////Notice: n: BITN0---BITN7 不是0-7 eg:D_stdIO_P0(BITN0)
#define D_stdIO_P0(n) BITN_0(P0M1,n);BITN_0(P0M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(n) BITN_0(P0M1,n);BITN_1(P0M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(n) BITN_1(P0M1,n);BITN_0(P0M0,n); /////////10 高阻
#define D_OpenD_P0(n) BITN_1(P0M1,n);BITN_1(P0M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(n) BITN_0(P1M1,n);BITN_0(P1M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(n) BITN_0(P1M1,n);BITN_1(P1M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(n) BITN_1(P1M1,n);BITN_0(P1M0,n); /////////10 高阻
#define D_OpenD_P1(n) BITN_1(P1M1,n);BITN_1(P1M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(n) BITN_0(P2M1,n);BITN_0(P2M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(n) BITN_0(P2M1,n);BITN_1(P2M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(n) BITN_1(P2M1,n);BITN_0(P2M0,n); /////////10 高阻
#define D_OpenD_P2(n) BITN_1(P2M1,n);BITN_1(P2M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(n) BITN_0(P3M1,n);BITN_0(P3M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(n) BITN_0(P3M1,n);BITN_1(P3M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(n) BITN_1(P3M1,n);BITN_0(P3M0,n); /////////10 高阻
#define D_OpenD_P3(n) BITN_1(P3M1,n);BITN_1(P3M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(n) BITN_0(P4M1,n);BITN_0(P4M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(n) BITN_0(P4M1,n);BITN_1(P4M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(n) BITN_1(P4M1,n);BITN_0(P4M0,n); /////////10 高阻
#define D_OpenD_P4(n) BITN_1(P4M1,n);BITN_1(P4M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(n) BITN_0(P6M1,n);BITN_0(P6M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(n) BITN_0(P6M1,n);BITN_1(P6M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(n) BITN_1(P6M1,n);BITN_0(P6M0,n); /////////10 高阻
#define D_OpenD_P6(n) BITN_1(P6M1,n);BITN_1(P6M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(n) BITN_0(P7M1,n);BITN_0(P7M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(n) BITN_0(P7M1,n);BITN_1(P7M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(n) BITN_1(P7M1,n);BITN_0(P7M0,n); /////////10 高阻
#define D_OpenD_P7(n) BITN_1(P7M1,n);BITN_1(P7M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#endif //__STC_MACRO_H_

640
source/cpu/111/stc_stc8hxx.h

@ -1,640 +0,0 @@
#ifndef __STC8H_H__
#define __STC8H_H__
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr S4CON = 0x84;
sfr S4BUF = 0x85;
sfr PCON = 0x87;
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
sfr TL0 = 0x8a;
sfr TL1 = 0x8b;
sfr TH0 = 0x8c;
sfr TH1 = 0x8d;
sfr AUXR = 0x8e;
sfr INTCLKO = 0x8f;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sfr IRCBAND = 0x9d;
sfr LIRTRIM = 0x9e;
sfr IRTRIM = 0x9f;
sfr P2 = 0xa0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P_SW1 = 0xa2;
sfr IE = 0xa8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr SADDR = 0xa9;
sfr WKTCL = 0xaa;
sfr WKTCH = 0xab;
sfr S3CON = 0xac;
sfr S3BUF = 0xad;
sfr TA = 0xae;
sfr IE2 = 0xaf;
sfr P3 = 0xb0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr IP2 = 0xb5;
sfr IP2H = 0xb6;
sfr IPH = 0xb7;
sfr IP = 0xb8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr SADEN = 0xb9;
sfr P_SW2 = 0xba;
sfr ADC_CONTR = 0xbc;
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr P4 = 0xc0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr WDT_CONTR = 0xc1;
sfr IAP_DATA = 0xc2;
sfr IAP_ADDRH = 0xc3;
sfr IAP_ADDRL = 0xc4;
sfr IAP_CMD = 0xc5;
sfr IAP_TRIG = 0xc6;
sfr IAP_CONTR = 0xc7;
sfr P5 = 0xc8;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sfr P6M1 = 0xcb;
sfr P6M0 = 0xcc;
sfr SPSTAT = 0xcd;
sfr SPCTL = 0xce;
sfr SPDAT = 0xcf;
sfr PSW = 0xd0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit F1 = PSW^1;
sbit P = PSW^0;
sfr T4T3M = 0xd1;
sfr T4H = 0xd2;
sfr T4L = 0xd3;
sfr T3H = 0xd4;
sfr T3L = 0xd5;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr USBCLK = 0xdc;
sfr ADCCFG = 0xde;
sfr IP3 = 0xdf;
sfr ACC = 0xe0;
sfr P7M1 = 0xe1;
sfr P7M0 = 0xe2;
sfr DPS = 0xe3;
sfr DPL1 = 0xe4;
sfr DPH1 = 0xe5;
sfr CMPCR1 = 0xe6;
sfr CMPCR2 = 0xe7;
sfr P6 = 0xe8;
sfr USBDAT = 0xec;
sfr IP3H = 0xee;
sfr AUXINTIF = 0xef;
sfr B = 0xf0;
sfr USBCON = 0xf4;
sfr IAP_TPS = 0xf5;
sfr P7 = 0xf8;
sfr USBADR = 0xfc;
sfr RSTCFG = 0xff;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
/////////////////////////////////////////////////
//FF00H-FFFFH
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//FE00H-FEFFH
/////////////////////////////////////////////////
#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01)
#define HIRCCR (*(unsigned char volatile xdata *)0xfe02)
#define XOSCCR (*(unsigned char volatile xdata *)0xfe03)
#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04)
#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05)
#define IRCDB (*(unsigned char volatile xdata *)0xfe06)
#define X32KCR (*(unsigned char volatile xdata *)0xfe08)
#define P0PU (*(unsigned char volatile xdata *)0xfe10)
#define P1PU (*(unsigned char volatile xdata *)0xfe11)
#define P2PU (*(unsigned char volatile xdata *)0xfe12)
#define P3PU (*(unsigned char volatile xdata *)0xfe13)
#define P4PU (*(unsigned char volatile xdata *)0xfe14)
#define P5PU (*(unsigned char volatile xdata *)0xfe15)
#define P6PU (*(unsigned char volatile xdata *)0xfe16)
#define P7PU (*(unsigned char volatile xdata *)0xfe17)
#define P0NCS (*(unsigned char volatile xdata *)0xfe18)
#define P1NCS (*(unsigned char volatile xdata *)0xfe19)
#define P2NCS (*(unsigned char volatile xdata *)0xfe1a)
#define P3NCS (*(unsigned char volatile xdata *)0xfe1b)
#define P4NCS (*(unsigned char volatile xdata *)0xfe1c)
#define P5NCS (*(unsigned char volatile xdata *)0xfe1d)
#define P6NCS (*(unsigned char volatile xdata *)0xfe1e)
#define P7NCS (*(unsigned char volatile xdata *)0xfe1f)
#define P0SR (*(unsigned char volatile xdata *)0xfe20)
#define P1SR (*(unsigned char volatile xdata *)0xfe21)
#define P2SR (*(unsigned char volatile xdata *)0xfe22)
#define P3SR (*(unsigned char volatile xdata *)0xfe23)
#define P4SR (*(unsigned char volatile xdata *)0xfe24)
#define P5SR (*(unsigned char volatile xdata *)0xfe25)
#define P6SR (*(unsigned char volatile xdata *)0xfe26)
#define P7SR (*(unsigned char volatile xdata *)0xfe27)
#define P0DR (*(unsigned char volatile xdata *)0xfe28)
#define P1DR (*(unsigned char volatile xdata *)0xfe29)
#define P2DR (*(unsigned char volatile xdata *)0xfe2a)
#define P3DR (*(unsigned char volatile xdata *)0xfe2b)
#define P4DR (*(unsigned char volatile xdata *)0xfe2c)
#define P5DR (*(unsigned char volatile xdata *)0xfe2d)
#define P6DR (*(unsigned char volatile xdata *)0xfe2e)
#define P7DR (*(unsigned char volatile xdata *)0xfe2f)
#define P0IE (*(unsigned char volatile xdata *)0xfe30)
#define P1IE (*(unsigned char volatile xdata *)0xfe31)
#define P2IE (*(unsigned char volatile xdata *)0xfe32)
#define P3IE (*(unsigned char volatile xdata *)0xfe33)
#define P4IE (*(unsigned char volatile xdata *)0xfe34)
#define P5IE (*(unsigned char volatile xdata *)0xfe35)
#define P6IE (*(unsigned char volatile xdata *)0xfe36)
#define P7IE (*(unsigned char volatile xdata *)0xfe37)
#define RTCCR (*(unsigned char volatile xdata *)0xfe60)
#define RTCCFG (*(unsigned char volatile xdata *)0xfe61)
#define RTCIEN (*(unsigned char volatile xdata *)0xfe62)
#define RTCIF (*(unsigned char volatile xdata *)0xfe63)
#define ALAHOUR (*(unsigned char volatile xdata *)0xfe64)
#define ALAMIN (*(unsigned char volatile xdata *)0xfe65)
#define ALASEC (*(unsigned char volatile xdata *)0xfe66)
#define ALASSEC (*(unsigned char volatile xdata *)0xfe67)
#define INIYEAR (*(unsigned char volatile xdata *)0xfe68)
#define INIMONTH (*(unsigned char volatile xdata *)0xfe69)
#define INIDAY (*(unsigned char volatile xdata *)0xfe6a)
#define INIHOUR (*(unsigned char volatile xdata *)0xfe6b)
#define INIMIN (*(unsigned char volatile xdata *)0xfe6c)
#define INISEC (*(unsigned char volatile xdata *)0xfe6d)
#define INISSEC (*(unsigned char volatile xdata *)0xfe6e)
#define YEAR (*(unsigned char volatile xdata *)0xfe70)
#define MONTH (*(unsigned char volatile xdata *)0xfe71)
#define DAY (*(unsigned char volatile xdata *)0xfe72)
#define HOUR (*(unsigned char volatile xdata *)0xfe73)
#define MIN (*(unsigned char volatile xdata *)0xfe74)
#define SEC (*(unsigned char volatile xdata *)0xfe75)
#define SSEC (*(unsigned char volatile xdata *)0xfe76)
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)
#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88)
#define TM2PS (*(unsigned char volatile xdata *)0xfea2)
#define TM3PS (*(unsigned char volatile xdata *)0xfea3)
#define TM4PS (*(unsigned char volatile xdata *)0xfea4)
#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)
#define PWM1_ETRPS (*(unsigned char volatile xdata *)0xfeb0)
#define PWM1_ENO (*(unsigned char volatile xdata *)0xfeb1)
#define PWM1_PS (*(unsigned char volatile xdata *)0xfeb2)
#define PWM1_IOAUX (*(unsigned char volatile xdata *)0xfeb3)
#define PWM2_ETRPS (*(unsigned char volatile xdata *)0xfeb4)
#define PWM2_ENO (*(unsigned char volatile xdata *)0xfeb5)
#define PWM2_PS (*(unsigned char volatile xdata *)0xfeb6)
#define PWM2_IOAUX (*(unsigned char volatile xdata *)0xfeb7)
#define PWM1_CR1 (*(unsigned char volatile xdata *)0xfec0)
#define PWM1_CR2 (*(unsigned char volatile xdata *)0xfec1)
#define PWM1_SMCR (*(unsigned char volatile xdata *)0xfec2)
#define PWM1_ETR (*(unsigned char volatile xdata *)0xfec3)
#define PWM1_IER (*(unsigned char volatile xdata *)0xfec4)
#define PWM1_SR1 (*(unsigned char volatile xdata *)0xfec5)
#define PWM1_SR2 (*(unsigned char volatile xdata *)0xfec6)
#define PWM1_EGR (*(unsigned char volatile xdata *)0xfec7)
#define PWM1_CCMR1 (*(unsigned char volatile xdata *)0xfec8)
#define PWM1_CCMR2 (*(unsigned char volatile xdata *)0xfec9)
#define PWM1_CCMR3 (*(unsigned char volatile xdata *)0xfeca)
#define PWM1_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
#define PWM1_CCER1 (*(unsigned char volatile xdata *)0xfecc)
#define PWM1_CCER2 (*(unsigned char volatile xdata *)0xfecd)
#define PWM1_CNTR (*(unsigned int volatile xdata *)0xfece)
#define PWM1_CNTRH (*(unsigned char volatile xdata *)0xfece)
#define PWM1_CNTRL (*(unsigned char volatile xdata *)0xfecf)
#define PWM1_PSCR (*(unsigned int volatile xdata *)0xfed0)
#define PWM1_PSCRH (*(unsigned char volatile xdata *)0xfed0)
#define PWM1_PSCRL (*(unsigned char volatile xdata *)0xfed1)
#define PWM1_ARR (*(unsigned int volatile xdata *)0xfed2)
#define PWM1_ARRH (*(unsigned char volatile xdata *)0xfed2)
#define PWM1_ARRL (*(unsigned char volatile xdata *)0xfed3)
#define PWM1_RCR (*(unsigned char volatile xdata *)0xfed4)
#define PWM1_CCR1 (*(unsigned int volatile xdata *)0xfed5)
#define PWM1_CCR1H (*(unsigned char volatile xdata *)0xfed5)
#define PWM1_CCR1L (*(unsigned char volatile xdata *)0xfed6)
#define PWM1_CCR2 (*(unsigned int volatile xdata *)0xfed7)
#define PWM1_CCR2H (*(unsigned char volatile xdata *)0xfed7)
#define PWM1_CCR2L (*(unsigned char volatile xdata *)0xfed8)
#define PWM1_CCR3 (*(unsigned int volatile xdata *)0xfed9)
#define PWM1_CCR3H (*(unsigned char volatile xdata *)0xfed9)
#define PWM1_CCR3L (*(unsigned char volatile xdata *)0xfeda)
#define PWM1_CCR4 (*(unsigned int volatile xdata *)0xfedb)
#define PWM1_CCR4H (*(unsigned char volatile xdata *)0xfedb)
#define PWM1_CCR4L (*(unsigned char volatile xdata *)0xfedc)
#define PWM1_BKR (*(unsigned char volatile xdata *)0xfedd)
#define PWM1_DTR (*(unsigned char volatile xdata *)0xfede)
#define PWM1_OISR (*(unsigned char volatile xdata *)0xfedf)
#define PWM2_CR1 (*(unsigned char volatile xdata *)0xfee0)
#define PWM2_CR2 (*(unsigned char volatile xdata *)0xfee1)
#define PWM2_SMCR (*(unsigned char volatile xdata *)0xfee2)
#define PWM2_ETR (*(unsigned char volatile xdata *)0xfee3)
#define PWM2_IER (*(unsigned char volatile xdata *)0xfee4)
#define PWM2_SR1 (*(unsigned char volatile xdata *)0xfee5)
#define PWM2_SR2 (*(unsigned char volatile xdata *)0xfee6)
#define PWM2_EGR (*(unsigned char volatile xdata *)0xfee7)
#define PWM2_CCMR1 (*(unsigned char volatile xdata *)0xfee8)
#define PWM2_CCMR2 (*(unsigned char volatile xdata *)0xfee9)
#define PWM2_CCMR3 (*(unsigned char volatile xdata *)0xfeea)
#define PWM2_CCMR4 (*(unsigned char volatile xdata *)0xfeeb)
#define PWM2_CCER1 (*(unsigned char volatile xdata *)0xfeec)
#define PWM2_CCER2 (*(unsigned char volatile xdata *)0xfeed)
#define PWM2_CNTR (*(unsigned int volatile xdata *)0xfeee)
#define PWM2_CNTRH (*(unsigned char volatile xdata *)0xfeee)
#define PWM2_CNTRL (*(unsigned char volatile xdata *)0xfeef)
#define PWM2_PSCR (*(unsigned int volatile xdata *)0xfef0)
#define PWM2_PSCRH (*(unsigned char volatile xdata *)0xfef0)
#define PWM2_PSCRL (*(unsigned char volatile xdata *)0xfef1)
#define PWM2_ARR (*(unsigned int volatile xdata *)0xfef2)
#define PWM2_ARRH (*(unsigned char volatile xdata *)0xfef2)
#define PWM2_ARRL (*(unsigned char volatile xdata *)0xfef3)
#define PWM2_RCR (*(unsigned char volatile xdata *)0xfef4)
#define PWM2_CCR1 (*(unsigned int volatile xdata *)0xfef5)
#define PWM2_CCR1H (*(unsigned char volatile xdata *)0xfef5)
#define PWM2_CCR1L (*(unsigned char volatile xdata *)0xfef6)
#define PWM2_CCR2 (*(unsigned int volatile xdata *)0xfef7)
#define PWM2_CCR2H (*(unsigned char volatile xdata *)0xfef7)
#define PWM2_CCR2L (*(unsigned char volatile xdata *)0xfef8)
#define PWM2_CCR3 (*(unsigned int volatile xdata *)0xfef9)
#define PWM2_CCR3H (*(unsigned char volatile xdata *)0xfef9)
#define PWM2_CCR3L (*(unsigned char volatile xdata *)0xfefa)
#define PWM2_CCR4 (*(unsigned int volatile xdata *)0xfefb)
#define PWM2_CCR4H (*(unsigned char volatile xdata *)0xfefb)
#define PWM2_CCR4L (*(unsigned char volatile xdata *)0xfefc)
#define PWM2_BKR (*(unsigned char volatile xdata *)0xfefd)
#define PWM2_DTR (*(unsigned char volatile xdata *)0xfefe)
#define PWM2_OISR (*(unsigned char volatile xdata *)0xfeff)
#define PWMA_ETRPS (*(unsigned char volatile xdata *)0xfeb0)
#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1)
#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2)
#define PWMA_IOAUX (*(unsigned char volatile xdata *)0xfeb3)
#define PWMB_ETRPS (*(unsigned char volatile xdata *)0xfeb4)
#define PWMB_ENO (*(unsigned char volatile xdata *)0xfeb5)
#define PWMB_PS (*(unsigned char volatile xdata *)0xfeb6)
#define PWMB_IOAUX (*(unsigned char volatile xdata *)0xfeb7)
#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0)
#define PWMA_CR2 (*(unsigned char volatile xdata *)0xfec1)
#define PWMA_SMCR (*(unsigned char volatile xdata *)0xfec2)
#define PWMA_ETR (*(unsigned char volatile xdata *)0xfec3)
#define PWMA_IER (*(unsigned char volatile xdata *)0xfec4)
#define PWMA_SR1 (*(unsigned char volatile xdata *)0xfec5)
#define PWMA_SR2 (*(unsigned char volatile xdata *)0xfec6)
#define PWMA_EGR (*(unsigned char volatile xdata *)0xfec7)
#define PWMA_CCMR1 (*(unsigned char volatile xdata *)0xfec8)
#define PWMA_CCMR2 (*(unsigned char volatile xdata *)0xfec9)
#define PWMA_CCMR3 (*(unsigned char volatile xdata *)0xfeca)
#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
#define PWMA_CCER1 (*(unsigned char volatile xdata *)0xfecc)
#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd)
#define PWMA_CNTR (*(unsigned int volatile xdata *)0xfece)
#define PWMA_CNTRH (*(unsigned char volatile xdata *)0xfece)
#define PWMA_CNTRL (*(unsigned char volatile xdata *)0xfecf)
#define PWMA_PSCR (*(unsigned int volatile xdata *)0xfed0)
#define PWMA_PSCRH (*(unsigned char volatile xdata *)0xfed0)
#define PWMA_PSCRL (*(unsigned char volatile xdata *)0xfed1)
#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2)
#define PWMA_ARRH (*(unsigned char volatile xdata *)0xfed2)
#define PWMA_ARRL (*(unsigned char volatile xdata *)0xfed3)
#define PWMA_RCR (*(unsigned char volatile xdata *)0xfed4)
#define PWMA_CCR1 (*(unsigned int volatile xdata *)0xfed5)
#define PWMA_CCR1H (*(unsigned char volatile xdata *)0xfed5)
#define PWMA_CCR1L (*(unsigned char volatile xdata *)0xfed6)
#define PWMA_CCR2 (*(unsigned int volatile xdata *)0xfed7)
#define PWMA_CCR2H (*(unsigned char volatile xdata *)0xfed7)
#define PWMA_CCR2L (*(unsigned char volatile xdata *)0xfed8)
#define PWMA_CCR3 (*(unsigned int volatile xdata *)0xfed9)
#define PWMA_CCR3H (*(unsigned char volatile xdata *)0xfed9)
#define PWMA_CCR3L (*(unsigned char volatile xdata *)0xfeda)
#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb)
#define PWMA_CCR4H (*(unsigned char volatile xdata *)0xfedb)
#define PWMA_CCR4L (*(unsigned char volatile xdata *)0xfedc)
#define PWMA_BKR (*(unsigned char volatile xdata *)0xfedd)
#define PWMA_DTR (*(unsigned char volatile xdata *)0xfede)
#define PWMA_OISR (*(unsigned char volatile xdata *)0xfedf)
#define PWMB_CR1 (*(unsigned char volatile xdata *)0xfee0)
#define PWMB_CR2 (*(unsigned char volatile xdata *)0xfee1)
#define PWMB_SMCR (*(unsigned char volatile xdata *)0xfee2)
#define PWMB_ETR (*(unsigned char volatile xdata *)0xfee3)
#define PWMB_IER (*(unsigned char volatile xdata *)0xfee4)
#define PWMB_SR1 (*(unsigned char volatile xdata *)0xfee5)
#define PWMB_SR2 (*(unsigned char volatile xdata *)0xfee6)
#define PWMB_EGR (*(unsigned char volatile xdata *)0xfee7)
#define PWMB_CCMR1 (*(unsigned char volatile xdata *)0xfee8)
#define PWMB_CCMR2 (*(unsigned char volatile xdata *)0xfee9)
#define PWMB_CCMR3 (*(unsigned char volatile xdata *)0xfeea)
#define PWMB_CCMR4 (*(unsigned char volatile xdata *)0xfeeb)
#define PWMB_CCER1 (*(unsigned char volatile xdata *)0xfeec)
#define PWMB_CCER2 (*(unsigned char volatile xdata *)0xfeed)
#define PWMB_CNTR (*(unsigned int volatile xdata *)0xfeee)
#define PWMB_CNTRH (*(unsigned char volatile xdata *)0xfeee)
#define PWMB_CNTRL (*(unsigned char volatile xdata *)0xfeef)
#define PWMB_PSCR (*(unsigned int volatile xdata *)0xfef0)
#define PWMB_PSCRH (*(unsigned char volatile xdata *)0xfef0)
#define PWMB_PSCRL (*(unsigned char volatile xdata *)0xfef1)
#define PWMB_ARR (*(unsigned int volatile xdata *)0xfef2)
#define PWMB_ARRH (*(unsigned char volatile xdata *)0xfef2)
#define PWMB_ARRL (*(unsigned char volatile xdata *)0xfef3)
#define PWMB_RCR (*(unsigned char volatile xdata *)0xfef4)
#define PWMB_CCR5 (*(unsigned int volatile xdata *)0xfef5)
#define PWMB_CCR5H (*(unsigned char volatile xdata *)0xfef5)
#define PWMB_CCR5L (*(unsigned char volatile xdata *)0xfef6)
#define PWMB_CCR6 (*(unsigned int volatile xdata *)0xfef7)
#define PWMB_CCR6H (*(unsigned char volatile xdata *)0xfef7)
#define PWMB_CCR6L (*(unsigned char volatile xdata *)0xfef8)
#define PWMB_CCR7 (*(unsigned int volatile xdata *)0xfef9)
#define PWMB_CCR7H (*(unsigned char volatile xdata *)0xfef9)
#define PWMB_CCR7L (*(unsigned char volatile xdata *)0xfefa)
#define PWMB_CCR8 (*(unsigned int volatile xdata *)0xfefb)
#define PWMB_CCR8H (*(unsigned char volatile xdata *)0xfefb)
#define PWMB_CCR8L (*(unsigned char volatile xdata *)0xfefc)
#define PWMB_BKR (*(unsigned char volatile xdata *)0xfefd)
#define PWMB_DTR (*(unsigned char volatile xdata *)0xfefe)
#define PWMB_OISR (*(unsigned char volatile xdata *)0xfeff)
/////////////////////////////////////////////////
//FD00H-FDFFH
/////////////////////////////////////////////////
#define P0INTE (*(unsigned char volatile xdata *)0xfd00)
#define P1INTE (*(unsigned char volatile xdata *)0xfd01)
#define P2INTE (*(unsigned char volatile xdata *)0xfd02)
#define P3INTE (*(unsigned char volatile xdata *)0xfd03)
#define P4INTE (*(unsigned char volatile xdata *)0xfd04)
#define P5INTE (*(unsigned char volatile xdata *)0xfd05)
#define P6INTE (*(unsigned char volatile xdata *)0xfd06)
#define P7INTE (*(unsigned char volatile xdata *)0xfd07)
#define P0INTF (*(unsigned char volatile xdata *)0xfd10)
#define P1INTF (*(unsigned char volatile xdata *)0xfd11)
#define P2INTF (*(unsigned char volatile xdata *)0xfd12)
#define P3INTF (*(unsigned char volatile xdata *)0xfd13)
#define P4INTF (*(unsigned char volatile xdata *)0xfd14)
#define P5INTF (*(unsigned char volatile xdata *)0xfd15)
#define P6INTF (*(unsigned char volatile xdata *)0xfd16)
#define P7INTF (*(unsigned char volatile xdata *)0xfd17)
#define P0IM0 (*(unsigned char volatile xdata *)0xfd20)
#define P1IM0 (*(unsigned char volatile xdata *)0xfd21)
#define P2IM0 (*(unsigned char volatile xdata *)0xfd22)
#define P3IM0 (*(unsigned char volatile xdata *)0xfd23)
#define P4IM0 (*(unsigned char volatile xdata *)0xfd24)
#define P5IM0 (*(unsigned char volatile xdata *)0xfd25)
#define P6IM0 (*(unsigned char volatile xdata *)0xfd26)
#define P7IM0 (*(unsigned char volatile xdata *)0xfd27)
#define P0IM1 (*(unsigned char volatile xdata *)0xfd30)
#define P1IM1 (*(unsigned char volatile xdata *)0xfd31)
#define P2IM1 (*(unsigned char volatile xdata *)0xfd32)
#define P3IM1 (*(unsigned char volatile xdata *)0xfd33)
#define P4IM1 (*(unsigned char volatile xdata *)0xfd34)
#define P5IM1 (*(unsigned char volatile xdata *)0xfd35)
#define P6IM1 (*(unsigned char volatile xdata *)0xfd36)
#define P7IM1 (*(unsigned char volatile xdata *)0xfd37)
#define P0WKUE (*(unsigned char volatile xdata *)0xfd40)
#define P1WKUE (*(unsigned char volatile xdata *)0xfd41)
#define P2WKUE (*(unsigned char volatile xdata *)0xfd42)
#define P3WKUE (*(unsigned char volatile xdata *)0xfd43)
#define P4WKUE (*(unsigned char volatile xdata *)0xfd44)
#define P5WKUE (*(unsigned char volatile xdata *)0xfd45)
#define P6WKUE (*(unsigned char volatile xdata *)0xfd46)
#define P7WKUE (*(unsigned char volatile xdata *)0xfd47)
#define PIN_IP (*(unsigned char volatile xdata *)0xfd60)
#define PIN_IPH (*(unsigned char volatile xdata *)0xfd61)
/////////////////////////////////////////////////
//FC00H-FCFFH
/////////////////////////////////////////////////
#define MD3 (*(unsigned char volatile xdata *)0xfcf0)
#define MD2 (*(unsigned char volatile xdata *)0xfcf1)
#define MD1 (*(unsigned char volatile xdata *)0xfcf2)
#define MD0 (*(unsigned char volatile xdata *)0xfcf3)
#define MD5 (*(unsigned char volatile xdata *)0xfcf4)
#define MD4 (*(unsigned char volatile xdata *)0xfcf5)
#define ARCON (*(unsigned char volatile xdata *)0xfcf6)
#define OPCON (*(unsigned char volatile xdata *)0xfcf7)
/////////////////////////////////////////////////
//FB00H-FBFFH
/////////////////////////////////////////////////
#define COMEN (*(unsigned char volatile xdata *)0xfb00)
#define SEGENL (*(unsigned char volatile xdata *)0xfb01)
#define SEGENH (*(unsigned char volatile xdata *)0xfb02)
#define LEDCTRL (*(unsigned char volatile xdata *)0xfb03)
#define LEDCKS (*(unsigned char volatile xdata *)0xfb04)
#define COM0_DA_L (*(unsigned char volatile xdata *)0xfb10)
#define COM1_DA_L (*(unsigned char volatile xdata *)0xfb11)
#define COM2_DA_L (*(unsigned char volatile xdata *)0xfb12)
#define COM3_DA_L (*(unsigned char volatile xdata *)0xfb13)
#define COM4_DA_L (*(unsigned char volatile xdata *)0xfb14)
#define COM5_DA_L (*(unsigned char volatile xdata *)0xfb15)
#define COM6_DA_L (*(unsigned char volatile xdata *)0xfb16)
#define COM7_DA_L (*(unsigned char volatile xdata *)0xfb17)
#define COM0_DA_H (*(unsigned char volatile xdata *)0xfb18)
#define COM1_DA_H (*(unsigned char volatile xdata *)0xfb19)
#define COM2_DA_H (*(unsigned char volatile xdata *)0xfb1a)
#define COM3_DA_H (*(unsigned char volatile xdata *)0xfb1b)
#define COM4_DA_H (*(unsigned char volatile xdata *)0xfb1c)
#define COM5_DA_H (*(unsigned char volatile xdata *)0xfb1d)
#define COM6_DA_H (*(unsigned char volatile xdata *)0xfb1e)
#define COM7_DA_H (*(unsigned char volatile xdata *)0xfb1f)
#define COM0_DC_L (*(unsigned char volatile xdata *)0xfb20)
#define COM1_DC_L (*(unsigned char volatile xdata *)0xfb21)
#define COM2_DC_L (*(unsigned char volatile xdata *)0xfb22)
#define COM3_DC_L (*(unsigned char volatile xdata *)0xfb23)
#define COM4_DC_L (*(unsigned char volatile xdata *)0xfb24)
#define COM5_DC_L (*(unsigned char volatile xdata *)0xfb25)
#define COM6_DC_L (*(unsigned char volatile xdata *)0xfb26)
#define COM7_DC_L (*(unsigned char volatile xdata *)0xfb27)
#define COM0_DC_H (*(unsigned char volatile xdata *)0xfb28)
#define COM1_DC_H (*(unsigned char volatile xdata *)0xfb29)
#define COM2_DC_H (*(unsigned char volatile xdata *)0xfb2a)
#define COM3_DC_H (*(unsigned char volatile xdata *)0xfb2b)
#define COM4_DC_H (*(unsigned char volatile xdata *)0xfb2c)
#define COM5_DC_H (*(unsigned char volatile xdata *)0xfb2d)
#define COM6_DC_H (*(unsigned char volatile xdata *)0xfb2e)
#define COM7_DC_H (*(unsigned char volatile xdata *)0xfb2f)
#define TSCHEN1 (*(unsigned char volatile xdata *)0xfb40)
#define TSCHEN2 (*(unsigned char volatile xdata *)0xfb41)
#define TSCFG1 (*(unsigned char volatile xdata *)0xfb42)
#define TSCFG2 (*(unsigned char volatile xdata *)0xfb43)
#define TSWUTC (*(unsigned char volatile xdata *)0xfb44)
#define TSCTRL (*(unsigned char volatile xdata *)0xfb45)
#define TSSTA1 (*(unsigned char volatile xdata *)0xfb46)
#define TSSTA2 (*(unsigned char volatile xdata *)0xfb47)
#define TSRT (*(unsigned char volatile xdata *)0xfb48)
#define TSDAT (*(unsigned int volatile xdata *)0xfb49)
#define TSDATH (*(unsigned char volatile xdata *)0xfb49)
#define TSDATL (*(unsigned char volatile xdata *)0xfb4A)
#define TSTH00 (*(unsigned int volatile xdata *)0xfb50)
#define TSTH00H (*(unsigned char volatile xdata *)0xfb50)
#define TSTH00L (*(unsigned char volatile xdata *)0xfb51)
#define TSTH01 (*(unsigned int volatile xdata *)0xfb52)
#define TSTH01H (*(unsigned char volatile xdata *)0xfb52)
#define TSTH01L (*(unsigned char volatile xdata *)0xfb53)
#define TSTH02 (*(unsigned int volatile xdata *)0xfb54)
#define TSTH02H (*(unsigned char volatile xdata *)0xfb54)
#define TSTH02L (*(unsigned char volatile xdata *)0xfb55)
#define TSTH03 (*(unsigned int volatile xdata *)0xfb56)
#define TSTH03H (*(unsigned char volatile xdata *)0xfb56)
#define TSTH03L (*(unsigned char volatile xdata *)0xfb57)
#define TSTH04 (*(unsigned int volatile xdata *)0xfb58)
#define TSTH04H (*(unsigned char volatile xdata *)0xfb58)
#define TSTH04L (*(unsigned char volatile xdata *)0xfb59)
#define TSTH05 (*(unsigned int volatile xdata *)0xfb5a)
#define TSTH05H (*(unsigned char volatile xdata *)0xfb5a)
#define TSTH05L (*(unsigned char volatile xdata *)0xfb5b)
#define TSTH06 (*(unsigned int volatile xdata *)0xfb5c)
#define TSTH06H (*(unsigned char volatile xdata *)0xfb5c)
#define TSTH06L (*(unsigned char volatile xdata *)0xfb5d)
#define TSTH07 (*(unsigned int volatile xdata *)0xfb5e)
#define TSTH07H (*(unsigned char volatile xdata *)0xfb5e)
#define TSTH07L (*(unsigned char volatile xdata *)0xfb5f)
#define TSTH08 (*(unsigned int volatile xdata *)0xfb60)
#define TSTH08H (*(unsigned char volatile xdata *)0xfb60)
#define TSTH08L (*(unsigned char volatile xdata *)0xfb61)
#define TSTH09 (*(unsigned int volatile xdata *)0xfb62)
#define TSTH09H (*(unsigned char volatile xdata *)0xfb62)
#define TSTH09L (*(unsigned char volatile xdata *)0xfb63)
#define TSTH10 (*(unsigned int volatile xdata *)0xfb64)
#define TSTH10H (*(unsigned char volatile xdata *)0xfb64)
#define TSTH10L (*(unsigned char volatile xdata *)0xfb65)
#define TSTH11 (*(unsigned int volatile xdata *)0xfb66)
#define TSTH11H (*(unsigned char volatile xdata *)0xfb66)
#define TSTH11L (*(unsigned char volatile xdata *)0xfb67)
#define TSTH12 (*(unsigned int volatile xdata *)0xfb68)
#define TSTH12H (*(unsigned char volatile xdata *)0xfb68)
#define TSTH12L (*(unsigned char volatile xdata *)0xfb69)
#define TSTH13 (*(unsigned int volatile xdata *)0xfb6a)
#define TSTH13H (*(unsigned char volatile xdata *)0xfb6a)
#define TSTH13L (*(unsigned char volatile xdata *)0xfb6b)
#define TSTH14 (*(unsigned int volatile xdata *)0xfb6c)
#define TSTH14H (*(unsigned char volatile xdata *)0xfb6c)
#define TSTH14L (*(unsigned char volatile xdata *)0xfb6d)
#define TSTH15 (*(unsigned int volatile xdata *)0xfb6e)
#define TSTH15H (*(unsigned char volatile xdata *)0xfb6e)
#define TSTH15L (*(unsigned char volatile xdata *)0xfb6f)
/////////////////////////////////////////////////
//FA00H-FAFFH
/////////////////////////////////////////////////
/////////////////////////////////////////////////
#endif

589
source/cpu/nouse/STC_stc8a8k.H

@ -1,589 +0,0 @@
#ifndef __STC_stc8a8k_H_
#define __STC_stc8a8k_H_
// STC_stc8a8k.h
#include<intrins.h>
/////////////////////////////////////////////////
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
//内核特殊功能寄存器 // 复位值 描述
sfr ACC = 0xE0; //0000,0000 累加器Accumulator
sfr B = 0xF0; //0000,0000 B寄存器
sfr PSW = 0xD0; //0000,0000 程序状态字
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0;
sfr SP = 0x81; //0000,0111 堆栈指针
sfr DPL = 0x82; //0000,0000 数据指针低字节
sfr DPH = 0x83; //0000,0000 数据指针高字节
//I/O 口特殊功能寄存器
sfr P0 = 0x80; //1111,1111 端口0
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr P1 = 0x90; //1111,1111 端口1
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P2 = 0xA0; //1111,1111 端口2
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P3 = 0xB0; //1111,1111 端口3
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P4 = 0xC0; //1111,1111 端口4
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr P5 = 0xC8; //xxxx,1111 端口5
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P6 = 0xE8; //0000,0000 端口6
sbit P60 = P6^0;
sbit P61 = P6^1;
sbit P62 = P6^2;
sbit P63 = P6^3;
sbit P64 = P6^4;
sbit P65 = P6^5;
sbit P66 = P6^6;
sbit P67 = P6^7;
sfr P7 = 0xF8; //0000,0000 端口7
sbit P70 = P7^0;
sbit P71 = P7^1;
sbit P72 = P7^2;
sbit P73 = P7^3;
sbit P74 = P7^4;
sbit P75 = P7^5;
sbit P76 = P7^6;
sbit P77 = P7^7;
///00 准双向口 灌电流20mA 拉电流270-150uS
///01 推挽输出 20mA 加限流
///10 高阻
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0
sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1
sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0
sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1
sfr P2M0 = 0x96; //0000,0000 端口2模式寄存器0
sfr P2M1 = 0x95; //0000,0000 端口2模式寄存器1
sfr P3M0 = 0xB2; //0000,0000 端口3模式寄存器0
sfr P3M1 = 0xB1; //0000,0000 端口3模式寄存器1
sfr P4M0 = 0xB4; //0000,0000 端口4模式寄存器0
sfr P4M1 = 0xB3; //0000,0000 端口4模式寄存器1
sfr P5M0 = 0xCA; //0000,0000 端口5模式寄存器0
sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1
sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0
sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1
sfr P7M0 = 0xE2; //0000,0000 端口7模式寄存器0
sfr P7M1 = 0xE1; //0000,0000 端口7模式寄存器1
//系统管理特殊功能寄存器
sfr PCON = 0x87; //0001,0000 电源控制寄存器
sfr AUXR = 0x8E; //0000,0000 辅助寄存器
#define TOx12 BITN7
#define T1x12 BITN6
#define UART_M0x6 BITN5 //串口1模式0速度 =0 12倍 = 1 两倍
#define T2R BITN4 //定时器2 运行 =1
#define T2_C BITN3 //定时器/计数器选择
#define T2x12 BITN2
#define EXTRAM BITN1
#define S1ST2 BITN0 //串口1选择定时器1 =0 选择定时器2 =1
sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1
sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1
sfr CLK_DIV = 0x97; //0000,0000 时钟分频控制寄存器
sfr BUS_SPEED = 0xA1; //xx10,x011 总线速度控制寄存器
sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器
//-----------------------------------------------------------------
sfr P_SW2 = 0xBA; //0xxx,x000 外设端口切换寄存器
#define EAXFR BITN7
#define I2C_S1 BITN5
#define I2C_S2 BITN4
#define CMPO_S BITN3
#define S4_S BITN2
#define S3_S BITN1
#define S2_S BITN0
//-----------------------------------------------------------------
//中断特殊功能寄存器
sfr IE = 0xA8; //0000,0000 中断控制寄存器
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr IP = 0xB8; //0000,0000 中断优先级寄存器
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2
/// 不可位寻址
#define ET4 BITN6
#define ET3 BITN5
#define ES4 BITN4
#define ES3 BITN3
#define ET2 BITN2
#define ESPI BITN1
#define ES2 BITN0
sfr IP2 = 0xB5; //xxxx,xx00 中断优先级寄存器2
sfr INT_CLKO = 0x8F; //0000,0000 外部中断与时钟输出控制寄存器
//定时器特殊功能寄存器
sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89; //0000,0000 T0/T1模式寄存器
sfr TL0 = 0x8A; //0000,0000 T0低字节
sfr TL1 = 0x8B; //0000,0000 T1低字节
sfr TH0 = 0x8C; //0000,0000 T0高字节
sfr TH1 = 0x8D; //0000,0000 T1高字节
sfr T4T3M = 0xD1; //0000,0000 T3/T4模式寄存器
sfr T3T4M = 0xD1; //0000,0000 T3/T4模式寄存器
sfr T4H = 0xD2; //0000,0000 T4高字节
sfr T4L = 0xD3; //0000,0000 T4低字节
sfr T3H = 0xD4; //0000,0000 T3高字节
sfr T3L = 0xD5; //0000,0000 T3低字节
sfr T2H = 0xD6; //0000,0000 T2高字节
sfr T2L = 0xD7; //0000,0000 T2低字节
sfr WKTCL = 0xAA; //0000,0000 掉电唤醒定时器低字节
sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节
sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
//串行口特殊功能寄存器
sfr SCON = 0x98; //0000,0000 串口1控制寄存器
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
//sfr SBUF = 0x99; //xxxx,xxxx 串口1数据寄存器
//sfr S2CON = 0x9A; //0000,0000 串口2控制寄存器
//sfr S2BUF = 0x9B; //xxxx,xxxx 串口2数据寄存器
//sfr SADDR = 0xA9; //0000,0000 从机地址寄存器
//sfr SADEN = 0xB9; //0000,0000 从机地址屏蔽寄存器
sfr SBUF = 0x99; //Serial Data Buffer
sfr SBUF0 = 0x99; //Serial Data Buffer xxxx,xxxx
sfr SADEN = 0xB9; //Slave Address Mask 0000,0000
sfr SADDR = 0xA9; //Slave Address 0000,0000
//-----------------------------------
// 7 6 5 4 3 2 1 0 Reset Value
sfr S2CON = 0x9A; //S2 Control S2SM0 S2SM1 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B
#define S2SM0 BITN7
#define S2ST4 BITN6
#define S2SM2 BITN5
#define S2REN BITN4
#define S2TB8 BITN3
#define S2RB8 BITN2
#define S2TI BITN1
#define S2RI BITN0
sfr S2BUF = 0x9B; //S2 Serial Buffer xxxx,xxxx
//sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000
//---------------------------------------------------------------
sfr S3CON = 0xAC; //0000,0000 串口3控制寄存器
#define S3SM0 BITN7
#define S3ST4 BITN6
#define S3SM2 BITN5
#define S3REN BITN4
#define S3TB8 BITN3
#define S3RB8 BITN2
#define S3TI BITN1
#define S3RI BITN0
sfr S3BUF = 0xAD; //xxxx,xxxx 串口3数据寄存器
//---------------------------------------------------------------
sfr S4CON = 0x84; //0000,0000 串口4控制寄存器
#define S4SM0 BITN7
#define S4ST4 BITN6
#define S4SM2 BITN5
#define S4REN BITN4
#define S4TB8 BITN3
#define S4RB8 BITN2
#define S4TI BITN1
#define S4RI BITN0
sfr S4BUF = 0x85; //xxxx,xxxx 串口4数据寄存器
//ADC 特殊功能寄存器
sfr ADC_CONTR = 0xBC; //0000,0000 A/D转换控制寄存器
sfr ADC_RES = 0xBD; //0000,0000 A/D转换结果高8位
sfr ADC_RESL = 0xBE; //0000,0000 A/D转换结果低2位
//SPI 特殊功能寄存器
sfr SPSTAT = 0xCD; //00xx,xxxx SPI状态寄存器
sfr SPCTL = 0xCE; //0000,0100 SPI控制寄存器
sfr SPDAT = 0xCF; //0000,0000 SPI数据寄存器
//IAP/ISP 特殊功能寄存器
sfr IAP_DATA = 0xC2; //0000,0000 EEPROM数据寄存器
sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROM地址高字节
sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROM地址第字节
sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROM命令寄存器
sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPM命令触发寄存器
sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器
//PCA/PWM 特殊功能寄存器
sfr CCON = 0xD8; //00xx,xx00 PCA控制寄存器
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xD9; //0xxx,x000 PCA 工作模式寄存器
sfr CL = 0xE9; //0000,0000 PCA计数器低字节
sfr CH = 0xF9; //0000,0000 PCA计数器高字节
sfr CCAPM0 = 0xDA; //0000,0000 PCA模块0的PWM寄存器
sfr CCAPM1 = 0xDB; //0000,0000 PCA模块1的PWM寄存器
sfr CCAPM2 = 0xDC; //0000,0000 PCA模块2的PWM 寄存器
sfr CCAP0L = 0xEA; //0000,0000 PCA模块0的捕捉/比较寄存器低字节
sfr CCAP1L = 0xEB; //0000,0000 PCA模块1的捕捉/比较寄存器低字节
sfr CCAP2L = 0xEC; //0000,0000 PCA模块2的捕捉/比较寄存器低字节
sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCA模块0的PWM寄存器
sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCA模块1的PWM寄存器
sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCA模块1的PWM寄存器
sfr CCAP0H = 0xFA; //0000,0000 PCA模块0的捕捉/比较寄存器高字节
sfr CCAP1H = 0xFB; //0000,0000 PCA模块1的捕捉/比较寄存器高字节
sfr CCAP2H = 0xFC; //0000,0000 PCA模块2的捕捉/比较寄存器高字节
//比较器特殊功能寄存器
sfr CMPCR1 = 0xE6; //0000,0000 比较器控制寄存器1
sfr CMPCR2 = 0xE7; //0000,0000 比较器控制寄存器2
//sfr P_SW2 = 0xba;
sfr PWMCFG = 0xf1;
sfr PWMIF = 0xf6;
sfr PWMFDCR = 0xf7;
sfr PWMCR = 0xfe;
#define PWMC (*(unsigned int volatile xdata *)0xfff0)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define TADCP (*(unsigned int volatile xdata *)0xfff3)
#define PWM0T1 (*(unsigned int volatile xdata *)0xff00)
#define PWM0T2 (*(unsigned int volatile xdata *)0xff02)
#define PWM0CR (*(unsigned char volatile xdata *)0xff04)
#define PWM0HLD (*(unsigned char volatile xdata *)0xff05)
#define PWM1T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM1T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM1CR (*(unsigned char volatile xdata *)0xff14)
#define PWM1HLD (*(unsigned char volatile xdata *)0xff15)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM2CR (*(unsigned char volatile xdata *)0xff24)
#define PWM2HLD (*(unsigned char volatile xdata *)0xff25)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM3CR (*(unsigned char volatile xdata *)0xff34)
#define PWM3HLD (*(unsigned char volatile xdata *)0xff35)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM4CR (*(unsigned char volatile xdata *)0xff44)
#define PWM4HLD (*(unsigned char volatile xdata *)0xff45)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff50)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff52)
#define PWM5CR (*(unsigned char volatile xdata *)0xff54)
#define PWM5HLD (*(unsigned char volatile xdata *)0xff55)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff60)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff62)
#define PWM6CR (*(unsigned char volatile xdata *)0xff64)
#define PWM6HLD (*(unsigned char volatile xdata *)0xff65)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff70)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff72)
#define PWM7CR (*(unsigned char volatile xdata *)0xff74)
#define PWM7HLD (*(unsigned char volatile xdata *)0xff75)
#define CKSEL (*(unsigned char volatile xdata *)0xfE00)//108@ST8.PDF
#define MCLKODIV BIT4
#define MCLKO_S BITN3
#define MCLKSEL BIT0
#define CLKDIV (*(unsigned char volatile xdata *)0xfE01)//108@ST8.PDF
#define IRC24MCR (*(unsigned char volatile xdata *)0xfE02)//108@ST8.PDF
#define XOSCCR (*(unsigned char volatile xdata *)0xfE03)//108@ST8.PDF
#define IRC32KCR (*(unsigned char volatile xdata *)0xfE04)//108@ST8.PDF
/////////////////////////////////////////////////
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
#if 0
/// >>>>> add by cc
//sbit P34=P3^4; //定义SDA数据线
//sbit P35=P3^5; //定义SCL时钟线
#define mBIT_1(X,N) X|= (1<<N)
#define mBIT_0(X,N) X&=~(1<<N)
#define mBIT_G(X,N) (X&(1<<N))
/// add by cc 20181118
#define D_IO_normal_P0(n); mBIT_0(P0M1,n);mBIT_0(P0M0,n);
#define D_IO_normal_P1(n); mBIT_0(P1M1,n);mBIT_0(P1M0,n);
#define D_IO_normal_P2(n); mBIT_0(P2M1,n);mBIT_0(P2M0,n);
#define D_IO_normal_P3(n); mBIT_0(P3M1,n);mBIT_0(P3M0,n);
#define D_IO_HighOut_P0(n); mBIT_0(P0M1,n);mBIT_1(P0M0,n);
#define D_IO_HighOut_P1(n); mBIT_0(P1M1,n);mBIT_1(P1M0,n);
#define D_IO_HighOut_P2(n); mBIT_0(P2M1,n);mBIT_1(P2M0,n);
#define D_IO_HighOut_P3(n); mBIT_0(P3M1,n);mBIT_1(P3M0,n);
//高阻状态
#define D_IO_HighR_P0(n); mBIT_1(P0M1,n);mBIT_0(P0M0,n);
#define D_IO_HighR_P1(n); mBIT_1(P1M1,n);mBIT_0(P1M0,n);
#define D_IO_HighR_P2(n); mBIT_1(P2M1,n);mBIT_0(P2M0,n);
#define D_IO_HighR_P3(n); mBIT_1(P3M1,n);mBIT_0(P3M0,n);
#define D_IO_OpenDrain_P0(n); mBIT_1(P0M1,n);mBIT_1(P0M0,n);
#define D_IO_OpenDrain_P1(n); mBIT_1(P1M1,n);mBIT_1(P1M0,n);
#define D_IO_OpenDrain_P2(n); mBIT_1(P2M1,n);mBIT_1(P2M0,n);
#define D_IO_OpenDrain_P3(n); mBIT_1(P3M1,n);mBIT_1(P3M0,n);
//高阻状态
#define P0_conf_in(n) mBIT_1(P0M1,n);mBIT_0(P0M0,n);
#define P1_conf_in(n) mBIT_1(P1M1,n);mBIT_0(P1M0,n);
#define P2_conf_in(n) mBIT_1(P2M1,n);mBIT_0(P2M0,n);
#define P2_conf_port(n) mBIT_0(P2M1,n);mBIT_0(P2M0,n);
#define P3_conf_in(n) mBIT_1(P3M1,n);mBIT_0(P3M0,n);
#define P3_conf_port(n) mBIT_0(P3M1,n);mBIT_0(P3M0,n);
#define P4_conf_in(n) mBIT_1(P4M1,n);mBIT_0(P4M0,n);
#define P5_conf_in(n) mBIT_1(P5M1,n);mBIT_0(P5M0,n);
#define NOP() _nop_()
//added by cc
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
//// n: BITN0---BITN7
#define D_stdIO_P0(BITN) BITN_0(P0M1,BITN);BITN_0(P0M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(BITN) BITN_0(P0M1,BITN);BITN_1(P0M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(BITN) BITN_1(P0M1,BITN);BITN_0(P0M0,BITN); /////////10 高阻
#define D_OpenD_P0(BITN) BITN_1(P0M1,BITN);BITN_1(P0M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(BITN) BITN_0(P1M1,BITN);BITN_0(P1M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(BITN) BITN_0(P1M1,BITN);BITN_1(P1M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(BITN) BITN_1(P1M1,BITN);BITN_0(P1M0,BITN); /////////10 高阻
#define D_OpenD_P1(BITN) BITN_1(P1M1,BITN);BITN_1(P1M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(BITN) BITN_0(P2M1,BITN);BITN_0(P2M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(BITN) BITN_0(P2M1,BITN);BITN_1(P2M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(BITN) BITN_1(P2M1,BITN);BITN_0(P2M0,BITN); /////////10 高阻
#define D_OpenD_P2(BITN) BITN_1(P2M1,BITN);BITN_1(P2M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(BITN) BITN_0(P3M1,BITN);BITN_0(P3M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(BITN) BITN_0(P3M1,BITN);BITN_1(P3M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(BITN) BITN_1(P3M1,BITN);BITN_0(P3M0,BITN); /////////10 高阻
#define D_OpenD_P3(BITN) BITN_1(P3M1,BITN);BITN_1(P3M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(BITN) BITN_0(P4M1,BITN);BITN_0(P4M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(BITN) BITN_0(P4M1,BITN);BITN_1(P4M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(BITN) BITN_1(P4M1,BITN);BITN_0(P4M0,BITN); /////////10 高阻
#define D_OpenD_P4(BITN) BITN_1(P4M1,BITN);BITN_1(P4M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(BITN) BITN_0(P5M1,BITN);BITN_0(P5M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(BITN) BITN_0(P5M1,BITN);BITN_1(P5M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(BITN) BITN_1(P5M1,BITN);BITN_0(P5M0,BITN); /////////10 高阻
#define D_OpenD_P5(BITN) BITN_1(P5M1,BITN);BITN_1(P5M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(BITN) BITN_0(P6M1,BITN);BITN_0(P6M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(BITN) BITN_0(P6M1,BITN);BITN_1(P6M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(BITN) BITN_1(P6M1,BITN);BITN_0(P6M0,BITN); /////////10 高阻
#define D_OpenD_P6(BITN) BITN_1(P6M1,BITN);BITN_1(P6M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(BITN) BITN_0(P7M1,BITN);BITN_0(P7M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(BITN) BITN_0(P7M1,BITN);BITN_1(P7M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(BITN) BITN_1(P7M1,BITN);BITN_0(P7M0,BITN); /////////10 高阻
#define D_OpenD_P7(BITN) BITN_1(P7M1,BITN);BITN_1(P7M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#endif
/***
#define P0_conf_in(n) BITN_1(P0M1,n);BITN_0(P0M0,n);
#define P1_conf_in(n) BITN_1(P1M1,n);BITN_0(P1M0,n);
#define P2_conf_in(n) BITN_1(P2M1,n);BITN_0(P2M0,n);
#define P2_conf_port(n) BITN_0(P2M1,n);BITN_0(P2M0,n);
#define P3_conf_in(n) BITN_1(P3M1,n);BITN_0(P3M0,n);
#define P3_conf_port(n) BITN_0(P3M1,n);BITN_0(P3M0,n);
#define P4_conf_in(n) BITN_1(P4M1,n);BITN_0(P4M0,n);
#define P5_conf_in(n) BITN_1(P5M1,n);BITN_0(P5M0,n);
***/
#define L0_INT4_OPEN() BITN_1(INT_CLKO, INT_EX4)
#define L0_INT4_CLOSE() BITN_0(INT_CLKO, INT_EX4)
#define L0_INT4_AT() BITN_G(INT_CLKO, INT_EX4)
#define L0_INT4_CLEAR() BITN_0(AUXINTIF, INT4IF)
#define L0_INT3_CLEAR() BITN_0(AUXINTIF, INT3IF)
#define L0_INT2_CLEAR() BITN_0(AUXINTIF, INT2IF)
//////
#define L0_INT3_OPEN() BITN_1(INT_CLKO, INT_EX3);
#define L0_INT3_CLOSE() BITN_0(INT_CLKO, INT_EX3);
#define L0_INT2_OPEN() BITN_1(INT_CLKO, INT_EX2);
#define L0_INT2_CLOSE() BITN_0(INT_CLKO, INT_EX2);
#define L0_INT1_OPEN() EX1 = 1;
#define L0_INT1_CLOSE() EX1 = 0;
#define L0_INT0_OPEN() EX0 = 1;
#define L0_INT0_CLOSE() EX0 = 0;
#define D_ISR_int0 0 ///int0 下降沿触发 = 0 上下沿均可触发
#define D_ISR_timer0 1
#define D_ISR_int1 2 ///int1 下降沿触发 = 0 上下沿均可触发
#define D_ISR_timer1 3
#define D_ISR_int2 10 /////只有下降沿
#define D_ISR_int3 11 /////只有下降沿
#define D_SERVE_UART 4
#define D_ISR_int4 16 /////只有下降沿
#if 0
#define L0_TIMER1_start() TR1 = 1;
#define L0_TIMER1_end() TR1 = 0;
#define L0_TIMER1_isr_OPEN() ET1 = 1;
#define L0_TIMER1_isr_CLOSE() ET1 = 0;
#else
#define L0_TIMER1_start() ET1 = 1;
#define L0_TIMER1_end() ET1 = 0;
#define L0_TIMER1_isr_OPEN() TR1 = 1;
#define L0_TIMER1_isr_CLOSE() TR1 = 0;
#endif
/// fixme 颠倒定义会让c51锁死#define _nop_() NOP()
///#define L0_INT3_OPEN() BITN_1(INT_CLKO,INT_EX3); //使能INT3中断
///#define L0_INT3_CLOSE() BITN_0(INT_CLKO,INT_EX3);
#endif //STC_stc8a8k

1394
source/cpu/nouse/STC_stc8h3k.H

File diff suppressed because it is too large

653
source/cpu/nouse/stc_8A8K64D4.h

@ -1,653 +0,0 @@
#ifndef __STC8A8K64D4_H__
#define __STC8A8K64D4_H__
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr S4CON = 0x84;
sfr S4BUF = 0x85;
sfr PCON = 0x87;
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
sfr TL0 = 0x8a;
sfr TL1 = 0x8b;
sfr TH0 = 0x8c;
sfr TH1 = 0x8d;
sfr AUXR = 0x8e;
sfr INTCLKO = 0x8f;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sfr IRCBAND = 0x9d;
sfr LIRTRIM = 0x9e;
sfr IRTRIM = 0x9f;
sfr P2 = 0xa0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr BUS_SPEED = 0xa1;
sfr P_SW1 = 0xa2;
sfr IE = 0xa8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr SADDR = 0xa9;
sfr WKTCL = 0xaa;
sfr WKTCH = 0xab;
sfr S3CON = 0xac;
sfr S3BUF = 0xad;
sfr TA = 0xae;
sfr IE2 = 0xaf;
sfr P3 = 0xb0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr IP2 = 0xb5;
sfr IP2H = 0xb6;
sfr IPH = 0xb7;
sfr IP = 0xb8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr SADEN = 0xb9;
sfr P_SW2 = 0xba;
sfr ADC_CONTR = 0xbc;
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr P4 = 0xc0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr WDT_CONTR = 0xc1;
sfr IAP_DATA = 0xc2;
sfr IAP_ADDRH = 0xc3;
sfr IAP_ADDRL = 0xc4;
sfr IAP_CMD = 0xc5;
sfr IAP_TRIG = 0xc6;
sfr IAP_CONTR = 0xc7;
sfr P5 = 0xc8;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sfr P6M1 = 0xcb;
sfr P6M0 = 0xcc;
sfr SPSTAT = 0xcd;
sfr SPCTL = 0xce;
sfr SPDAT = 0xcf;
sfr PSW = 0xd0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0;
sfr T4T3M = 0xd1;
sfr T4H = 0xd2;
sfr T4L = 0xd3;
sfr T3H = 0xd4;
sfr T3L = 0xd5;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr CCON = 0xd8;
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF3 = CCON^3;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xd9;
sfr CCAPM0 = 0xda;
sfr CCAPM1 = 0xdb;
sfr CCAPM2 = 0xdc;
sfr ADCCFG = 0xde;
sfr IP3 = 0xdf;
sfr ACC = 0xe0;
sfr P7M1 = 0xe1;
sfr P7M0 = 0xe2;
sfr DPS = 0xe3;
sfr DPL1 = 0xe4;
sfr DPH1 = 0xe5;
sfr CMPCR1 = 0xe6;
sfr CMPCR2 = 0xe7;
sfr P6 = 0xe8;
sbit P60 = P6^0;
sbit P61 = P6^1;
sbit P62 = P6^2;
sbit P63 = P6^3;
sbit P64 = P6^4;
sbit P65 = P6^5;
sbit P66 = P6^6;
sbit P67 = P6^7;
sfr CL = 0xe9;
sfr CCAP0L = 0xea;
sfr CCAP1L = 0xeb;
sfr CCAP2L = 0xec;
sfr IP3H = 0xee;
sfr AUXINTIF = 0xef;
sfr B = 0xf0;
sfr PWMSET = 0xf1;
sfr PCA_PWM0 = 0xf2;
sfr PCA_PWM1 = 0xf3;
sfr PCA_PWM2 = 0xf4;
sfr IAP_TPS = 0xf5;
sfr PWMCFG = 0xf6;
sfr P7 = 0xf8;
sbit P70 = P7^0;
sbit P71 = P7^1;
sbit P72 = P7^2;
sbit P73 = P7^3;
sbit P74 = P7^4;
sbit P75 = P7^5;
sbit P76 = P7^6;
sbit P77 = P7^7;
sfr CH = 0xf9;
sfr CCAP0H = 0xfa;
sfr CCAP1H = 0xfb;
sfr CCAP2H = 0xfc;
sfr RSTCFG = 0xff;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
/////////////////////////////////////////////////
//FF00H-FFFFH
/////////////////////////////////////////////////
#define PWMC (*(unsigned int volatile xdata *)0xff00)
#define PWMCH (*(unsigned char volatile xdata *)0xff00)
#define PWMCL (*(unsigned char volatile xdata *)0xff01)
#define PWMCKS (*(unsigned char volatile xdata *)0xff02)
#define PWMTADC (*(unsigned int volatile xdata *)0xff03)
#define PWMTADCH (*(unsigned char volatile xdata *)0xff03)
#define PWMTADCL (*(unsigned char volatile xdata *)0xff04)
#define PWMIF (*(unsigned char volatile xdata *)0xff05)
#define PWMFDCR (*(unsigned char volatile xdata *)0xff06)
#define PWMDELSEL (*(unsigned char volatile xdata *)0xff07)
#define PWM0T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM0T1H (*(unsigned char volatile xdata *)0xff10)
#define PWM0T1L (*(unsigned char volatile xdata *)0xff11)
#define PWM0T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM0T2H (*(unsigned char volatile xdata *)0xff12)
#define PWM0T2L (*(unsigned char volatile xdata *)0xff13)
#define PWM0CR (*(unsigned char volatile xdata *)0xff14)
#define PWM0HLD (*(unsigned char volatile xdata *)0xff15)
#define PWM1T1 (*(unsigned int volatile xdata *)0xff18)
#define PWM1T1H (*(unsigned char volatile xdata *)0xff18)
#define PWM1T1L (*(unsigned char volatile xdata *)0xff19)
#define PWM1T2 (*(unsigned int volatile xdata *)0xff1a)
#define PWM1T2H (*(unsigned char volatile xdata *)0xff1a)
#define PWM1T2L (*(unsigned char volatile xdata *)0xff1b)
#define PWM1CR (*(unsigned char volatile xdata *)0xff1c)
#define PWM1HLD (*(unsigned char volatile xdata *)0xff1d)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM2T1H (*(unsigned char volatile xdata *)0xff20)
#define PWM2T1L (*(unsigned char volatile xdata *)0xff21)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM2T2H (*(unsigned char volatile xdata *)0xff22)
#define PWM2T2L (*(unsigned char volatile xdata *)0xff23)
#define PWM2CR (*(unsigned char volatile xdata *)0xff24)
#define PWM2HLD (*(unsigned char volatile xdata *)0xff25)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff28)
#define PWM3T1H (*(unsigned char volatile xdata *)0xff28)
#define PWM3T1L (*(unsigned char volatile xdata *)0xff29)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff2a)
#define PWM3T2H (*(unsigned char volatile xdata *)0xff2a)
#define PWM3T2L (*(unsigned char volatile xdata *)0xff2b)
#define PWM3CR (*(unsigned char volatile xdata *)0xff2c)
#define PWM3HLD (*(unsigned char volatile xdata *)0xff2d)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM4T1H (*(unsigned char volatile xdata *)0xff30)
#define PWM4T1L (*(unsigned char volatile xdata *)0xff31)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM4T2H (*(unsigned char volatile xdata *)0xff32)
#define PWM4T2L (*(unsigned char volatile xdata *)0xff33)
#define PWM4CR (*(unsigned char volatile xdata *)0xff34)
#define PWM4HLD (*(unsigned char volatile xdata *)0xff35)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff38)
#define PWM5T1H (*(unsigned char volatile xdata *)0xff38)
#define PWM5T1L (*(unsigned char volatile xdata *)0xff39)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff3a)
#define PWM5T2H (*(unsigned char volatile xdata *)0xff3a)
#define PWM5T2L (*(unsigned char volatile xdata *)0xff3b)
#define PWM5CR (*(unsigned char volatile xdata *)0xff3c)
#define PWM5HLD (*(unsigned char volatile xdata *)0xff3d)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM6T1H (*(unsigned char volatile xdata *)0xff40)
#define PWM6T1L (*(unsigned char volatile xdata *)0xff41)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM6T2H (*(unsigned char volatile xdata *)0xff42)
#define PWM6T2L (*(unsigned char volatile xdata *)0xff43)
#define PWM6CR (*(unsigned char volatile xdata *)0xff44)
#define PWM6HLD (*(unsigned char volatile xdata *)0xff45)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff48)
#define PWM7T1H (*(unsigned char volatile xdata *)0xff48)
#define PWM7T1L (*(unsigned char volatile xdata *)0xff49)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff4a)
#define PWM7T2H (*(unsigned char volatile xdata *)0xff4a)
#define PWM7T2L (*(unsigned char volatile xdata *)0xff4b)
#define PWM7CR (*(unsigned char volatile xdata *)0xff4c)
#define PWM7HLD (*(unsigned char volatile xdata *)0xff4d)
/////////////////////////////////////////////////
//FE00H-FEFFH
/////////////////////////////////////////////////
#define CLKSEL (*(unsigned char volatile xdata *)0xfe00)
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01)
#define IRC24MCR (*(unsigned char volatile xdata *)0xfe02)
#define XOSCCR (*(unsigned char volatile xdata *)0xfe03)
#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04)
#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05)
#define IRCDB (*(unsigned char volatile xdata *)0xfe06)
#define P0PU (*(unsigned char volatile xdata *)0xfe10)
#define P1PU (*(unsigned char volatile xdata *)0xfe11)
#define P2PU (*(unsigned char volatile xdata *)0xfe12)
#define P3PU (*(unsigned char volatile xdata *)0xfe13)
#define P4PU (*(unsigned char volatile xdata *)0xfe14)
#define P5PU (*(unsigned char volatile xdata *)0xfe15)
#define P6PU (*(unsigned char volatile xdata *)0xfe16)
#define P7PU (*(unsigned char volatile xdata *)0xfe17)
#define P0NCS (*(unsigned char volatile xdata *)0xfe18)
#define P1NCS (*(unsigned char volatile xdata *)0xfe19)
#define P2NCS (*(unsigned char volatile xdata *)0xfe1a)
#define P3NCS (*(unsigned char volatile xdata *)0xfe1b)
#define P4NCS (*(unsigned char volatile xdata *)0xfe1c)
#define P5NCS (*(unsigned char volatile xdata *)0xfe1d)
#define P6NCS (*(unsigned char volatile xdata *)0xfe1e)
#define P7NCS (*(unsigned char volatile xdata *)0xfe1f)
#define P0SR (*(unsigned char volatile xdata *)0xfe20)
#define P1SR (*(unsigned char volatile xdata *)0xfe21)
#define P2SR (*(unsigned char volatile xdata *)0xfe22)
#define P3SR (*(unsigned char volatile xdata *)0xfe23)
#define P4SR (*(unsigned char volatile xdata *)0xfe24)
#define P5SR (*(unsigned char volatile xdata *)0xfe25)
#define P6SR (*(unsigned char volatile xdata *)0xfe26)
#define P7SR (*(unsigned char volatile xdata *)0xfe27)
#define P0DR (*(unsigned char volatile xdata *)0xfe28)
#define P1DR (*(unsigned char volatile xdata *)0xfe29)
#define P2DR (*(unsigned char volatile xdata *)0xfe2a)
#define P3DR (*(unsigned char volatile xdata *)0xfe2b)
#define P4DR (*(unsigned char volatile xdata *)0xfe2c)
#define P5DR (*(unsigned char volatile xdata *)0xfe2d)
#define P6DR (*(unsigned char volatile xdata *)0xfe2e)
#define P7DR (*(unsigned char volatile xdata *)0xfe2f)
#define P0IE (*(unsigned char volatile xdata *)0xfe30)
#define P1IE (*(unsigned char volatile xdata *)0xfe31)
#define P2IE (*(unsigned char volatile xdata *)0xfe32)
#define P3IE (*(unsigned char volatile xdata *)0xfe33)
#define P4IE (*(unsigned char volatile xdata *)0xfe34)
#define P5IE (*(unsigned char volatile xdata *)0xfe35)
#define P6IE (*(unsigned char volatile xdata *)0xfe36)
#define P7IE (*(unsigned char volatile xdata *)0xfe37)
#define LCMIFCFG (*(unsigned char volatile xdata *)0xfe50)
#define LCMIFCFG2 (*(unsigned char volatile xdata *)0xfe51)
#define LCMIFCR (*(unsigned char volatile xdata *)0xfe52)
#define LCMIFSTA (*(unsigned char volatile xdata *)0xfe53)
#define LCMIFDATL (*(unsigned char volatile xdata *)0xfe54)
#define LCMIFDATH (*(unsigned char volatile xdata *)0xfe55)
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)
#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88)
#define TM2PS (*(unsigned char volatile xdata *)0xfea2)
#define TM3PS (*(unsigned char volatile xdata *)0xfea3)
#define TM4PS (*(unsigned char volatile xdata *)0xfea4)
#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)
#define ADCEXCFG (*(unsigned char volatile xdata *)0xfead)
#define CMPEXCFG (*(unsigned char volatile xdata *)0xfeae)
/////////////////////////////////////////////////
//FD00H-FDFFH
/////////////////////////////////////////////////
#define P0INTE (*(unsigned char volatile xdata *)0xfd00)
#define P1INTE (*(unsigned char volatile xdata *)0xfd01)
#define P2INTE (*(unsigned char volatile xdata *)0xfd02)
#define P3INTE (*(unsigned char volatile xdata *)0xfd03)
#define P4INTE (*(unsigned char volatile xdata *)0xfd04)
#define P5INTE (*(unsigned char volatile xdata *)0xfd05)
#define P6INTE (*(unsigned char volatile xdata *)0xfd06)
#define P7INTE (*(unsigned char volatile xdata *)0xfd07)
#define P0INTF (*(unsigned char volatile xdata *)0xfd10)
#define P1INTF (*(unsigned char volatile xdata *)0xfd11)
#define P2INTF (*(unsigned char volatile xdata *)0xfd12)
#define P3INTF (*(unsigned char volatile xdata *)0xfd13)
#define P4INTF (*(unsigned char volatile xdata *)0xfd14)
#define P5INTF (*(unsigned char volatile xdata *)0xfd15)
#define P6INTF (*(unsigned char volatile xdata *)0xfd16)
#define P7INTF (*(unsigned char volatile xdata *)0xfd17)
#define P0IM0 (*(unsigned char volatile xdata *)0xfd20)
#define P1IM0 (*(unsigned char volatile xdata *)0xfd21)
#define P2IM0 (*(unsigned char volatile xdata *)0xfd22)
#define P3IM0 (*(unsigned char volatile xdata *)0xfd23)
#define P4IM0 (*(unsigned char volatile xdata *)0xfd24)
#define P5IM0 (*(unsigned char volatile xdata *)0xfd25)
#define P6IM0 (*(unsigned char volatile xdata *)0xfd26)
#define P7IM0 (*(unsigned char volatile xdata *)0xfd27)
#define P0IM1 (*(unsigned char volatile xdata *)0xfd30)
#define P1IM1 (*(unsigned char volatile xdata *)0xfd31)
#define P2IM1 (*(unsigned char volatile xdata *)0xfd32)
#define P3IM1 (*(unsigned char volatile xdata *)0xfd33)
#define P4IM1 (*(unsigned char volatile xdata *)0xfd34)
#define P5IM1 (*(unsigned char volatile xdata *)0xfd35)
#define P6IM1 (*(unsigned char volatile xdata *)0xfd36)
#define P7IM1 (*(unsigned char volatile xdata *)0xfd37)
#define P0WKUE (*(unsigned char volatile xdata *)0xfd40)
#define P1WKUE (*(unsigned char volatile xdata *)0xfd41)
#define P2WKUE (*(unsigned char volatile xdata *)0xfd42)
#define P3WKUE (*(unsigned char volatile xdata *)0xfd43)
#define P4WKUE (*(unsigned char volatile xdata *)0xfd44)
#define P5WKUE (*(unsigned char volatile xdata *)0xfd45)
#define P6WKUE (*(unsigned char volatile xdata *)0xfd46)
#define P7WKUE (*(unsigned char volatile xdata *)0xfd47)
#define CCAPM3 (*(unsigned char volatile xdata *)0xfd54)
#define CCAP3L (*(unsigned char volatile xdata *)0xfd55)
#define CCAP3H (*(unsigned char volatile xdata *)0xfd56)
#define PCA_PWM3 (*(unsigned char volatile xdata *)0xfd57)
#define PIN_IP (*(unsigned char volatile xdata *)0xfd60)
#define PIN_IPH (*(unsigned char volatile xdata *)0xfd61)
#define CHIPID0 (*(unsigned char volatile xdata *)0xfde0)
#define CHIPID1 (*(unsigned char volatile xdata *)0xfde1)
#define CHIPID2 (*(unsigned char volatile xdata *)0xfde2)
#define CHIPID3 (*(unsigned char volatile xdata *)0xfde3)
#define CHIPID4 (*(unsigned char volatile xdata *)0xfde4)
#define CHIPID5 (*(unsigned char volatile xdata *)0xfde5)
#define CHIPID6 (*(unsigned char volatile xdata *)0xfde6)
#define CHIPID7 (*(unsigned char volatile xdata *)0xfde7)
#define CHIPID8 (*(unsigned char volatile xdata *)0xfde8)
#define CHIPID9 (*(unsigned char volatile xdata *)0xfde9)
#define CHIPID10 (*(unsigned char volatile xdata *)0xfdea)
#define CHIPID11 (*(unsigned char volatile xdata *)0xfdeb)
#define CHIPID12 (*(unsigned char volatile xdata *)0xfdec)
#define CHIPID13 (*(unsigned char volatile xdata *)0xfded)
#define CHIPID14 (*(unsigned char volatile xdata *)0xfdee)
#define CHIPID15 (*(unsigned char volatile xdata *)0xfdef)
#define CHIPID16 (*(unsigned char volatile xdata *)0xfdf0)
#define CHIPID17 (*(unsigned char volatile xdata *)0xfdf1)
#define CHIPID18 (*(unsigned char volatile xdata *)0xfdf2)
#define CHIPID19 (*(unsigned char volatile xdata *)0xfdf3)
#define CHIPID20 (*(unsigned char volatile xdata *)0xfdf4)
#define CHIPID21 (*(unsigned char volatile xdata *)0xfdf5)
#define CHIPID22 (*(unsigned char volatile xdata *)0xfdf6)
#define CHIPID23 (*(unsigned char volatile xdata *)0xfdf7)
#define CHIPID24 (*(unsigned char volatile xdata *)0xfdf8)
#define CHIPID25 (*(unsigned char volatile xdata *)0xfdf9)
#define CHIPID26 (*(unsigned char volatile xdata *)0xfdfa)
#define CHIPID27 (*(unsigned char volatile xdata *)0xfdfb)
#define CHIPID28 (*(unsigned char volatile xdata *)0xfdfc)
#define CHIPID29 (*(unsigned char volatile xdata *)0xfdfd)
#define CHIPID30 (*(unsigned char volatile xdata *)0xfdfe)
#define CHIPID31 (*(unsigned char volatile xdata *)0xfdff)
/////////////////////////////////////////////////
//FC00H-FCFFH
/////////////////////////////////////////////////
#define MD3 (*(unsigned char volatile xdata *)0xfcf0)
#define MD2 (*(unsigned char volatile xdata *)0xfcf1)
#define MD1 (*(unsigned char volatile xdata *)0xfcf2)
#define MD0 (*(unsigned char volatile xdata *)0xfcf3)
#define MD5 (*(unsigned char volatile xdata *)0xfcf4)
#define MD4 (*(unsigned char volatile xdata *)0xfcf5)
#define ARCON (*(unsigned char volatile xdata *)0xfcf6)
#define OPCON (*(unsigned char volatile xdata *)0xfcf7)
/////////////////////////////////////////////////
//FB00H-FBFFH
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//FA00H-FAFFH
/////////////////////////////////////////////////
#define DMA_ADC_CFG (*(unsigned char volatile xdata *)0xfa10)
#define DMA_ADC_CR (*(unsigned char volatile xdata *)0xfa11)
#define DMA_ADC_STA (*(unsigned char volatile xdata *)0xfa12)
#define DMA_ADC_RXA (*(unsigned int volatile xdata *)0xfa17)
#define DMA_ADC_RXAH (*(unsigned char volatile xdata *)0xfa17)
#define DMA_ADC_RXAL (*(unsigned char volatile xdata *)0xfa18)
#define DMA_ADC_CFG2 (*(unsigned char volatile xdata *)0xfa19)
#define DMA_ADC_CHSW0 (*(unsigned char volatile xdata *)0xfa1a)
#define DMA_ADC_CHSW1 (*(unsigned char volatile xdata *)0xfa1b)
#define DMA_SPI_CFG (*(unsigned char volatile xdata *)0xfa20)
#define DMA_SPI_CR (*(unsigned char volatile xdata *)0xfa21)
#define DMA_SPI_STA (*(unsigned char volatile xdata *)0xfa22)
#define DMA_SPI_AMT (*(unsigned char volatile xdata *)0xfa23)
#define DMA_SPI_DONE (*(unsigned char volatile xdata *)0xfa24)
#define DMA_SPI_TXA (*(unsigned int volatile xdata *)0xfa25)
#define DMA_SPI_TXAH (*(unsigned char volatile xdata *)0xfa25)
#define DMA_SPI_TXAL (*(unsigned char volatile xdata *)0xfa26)
#define DMA_SPI_RXA (*(unsigned int volatile xdata *)0xfa27)
#define DMA_SPI_RXAH (*(unsigned char volatile xdata *)0xfa27)
#define DMA_SPI_RXAL (*(unsigned char volatile xdata *)0xfa28)
#define DMA_SPI_CFG2 (*(unsigned char volatile xdata *)0xfa29)
#define DMA_UR1T_CFG (*(unsigned char volatile xdata *)0xfa30)
#define DMA_UR1T_CR (*(unsigned char volatile xdata *)0xfa31)
#define DMA_UR1T_STA (*(unsigned char volatile xdata *)0xfa32)
#define DMA_UR1T_AMT (*(unsigned char volatile xdata *)0xfa33)
#define DMA_UR1T_DONE (*(unsigned char volatile xdata *)0xfa34)
#define DMA_UR1T_TXA (*(unsigned int volatile xdata *)0xfa35)
#define DMA_UR1T_TXAH (*(unsigned char volatile xdata *)0xfa35)
#define DMA_UR1T_TXAL (*(unsigned char volatile xdata *)0xfa36)
#define DMA_UR1R_CFG (*(unsigned char volatile xdata *)0xfa38)
#define DMA_UR1R_CR (*(unsigned char volatile xdata *)0xfa39)
#define DMA_UR1R_STA (*(unsigned char volatile xdata *)0xfa3a)
#define DMA_UR1R_AMT (*(unsigned char volatile xdata *)0xfa3b)
#define DMA_UR1R_DONE (*(unsigned char volatile xdata *)0xfa3c)
#define DMA_UR1R_RXA (*(unsigned int volatile xdata *)0xfa3d)
#define DMA_UR1R_RXAH (*(unsigned char volatile xdata *)0xfa3d)
#define DMA_UR1R_RXAL (*(unsigned char volatile xdata *)0xfa3e)
#define DMA_UR2T_CFG (*(unsigned char volatile xdata *)0xfa40)
#define DMA_UR2T_CR (*(unsigned char volatile xdata *)0xfa41)
#define DMA_UR2T_STA (*(unsigned char volatile xdata *)0xfa42)
#define DMA_UR2T_AMT (*(unsigned char volatile xdata *)0xfa43)
#define DMA_UR2T_DONE (*(unsigned char volatile xdata *)0xfa44)
#define DMA_UR2T_TXA (*(unsigned int volatile xdata *)0xfa45)
#define DMA_UR2T_TXAH (*(unsigned char volatile xdata *)0xfa45)
#define DMA_UR2T_TXAL (*(unsigned char volatile xdata *)0xfa46)
#define DMA_UR2R_CFG (*(unsigned char volatile xdata *)0xfa48)
#define DMA_UR2R_CR (*(unsigned char volatile xdata *)0xfa49)
#define DMA_UR2R_STA (*(unsigned char volatile xdata *)0xfa4a)
#define DMA_UR2R_AMT (*(unsigned char volatile xdata *)0xfa4b)
#define DMA_UR2R_DONE (*(unsigned char volatile xdata *)0xfa4c)
#define DMA_UR2R_RXA (*(unsigned int volatile xdata *)0xfa4d)
#define DMA_UR2R_RXAH (*(unsigned char volatile xdata *)0xfa4d)
#define DMA_UR2R_RXAL (*(unsigned char volatile xdata *)0xfa4e)
#define DMA_UR3T_CFG (*(unsigned char volatile xdata *)0xfa50)
#define DMA_UR3T_CR (*(unsigned char volatile xdata *)0xfa51)
#define DMA_UR3T_STA (*(unsigned char volatile xdata *)0xfa52)
#define DMA_UR3T_AMT (*(unsigned char volatile xdata *)0xfa53)
#define DMA_UR3T_DONE (*(unsigned char volatile xdata *)0xfa54)
#define DMA_UR3T_TXA (*(unsigned int volatile xdata *)0xfa55)
#define DMA_UR3T_TXAH (*(unsigned char volatile xdata *)0xfa55)
#define DMA_UR3T_TXAL (*(unsigned char volatile xdata *)0xfa56)
#define DMA_UR3R_CFG (*(unsigned char volatile xdata *)0xfa58)
#define DMA_UR3R_CR (*(unsigned char volatile xdata *)0xfa59)
#define DMA_UR3R_STA (*(unsigned char volatile xdata *)0xfa5a)
#define DMA_UR3R_AMT (*(unsigned char volatile xdata *)0xfa5b)
#define DMA_UR3R_DONE (*(unsigned char volatile xdata *)0xfa5c)
#define DMA_UR3R_RXA (*(unsigned int volatile xdata *)0xfa5d)
#define DMA_UR3R_RXAH (*(unsigned char volatile xdata *)0xfa5d)
#define DMA_UR3R_RXAL (*(unsigned char volatile xdata *)0xfa5e)
#define DMA_UR4T_CFG (*(unsigned char volatile xdata *)0xfa60)
#define DMA_UR4T_CR (*(unsigned char volatile xdata *)0xfa61)
#define DMA_UR4T_STA (*(unsigned char volatile xdata *)0xfa62)
#define DMA_UR4T_AMT (*(unsigned char volatile xdata *)0xfa63)
#define DMA_UR4T_DONE (*(unsigned char volatile xdata *)0xfa64)
#define DMA_UR4T_TXA (*(unsigned int volatile xdata *)0xfa65)
#define DMA_UR4T_TXAH (*(unsigned char volatile xdata *)0xfa65)
#define DMA_UR4T_TXAL (*(unsigned char volatile xdata *)0xfa66)
#define DMA_UR4R_CFG (*(unsigned char volatile xdata *)0xfa68)
#define DMA_UR4R_CR (*(unsigned char volatile xdata *)0xfa69)
#define DMA_UR4R_STA (*(unsigned char volatile xdata *)0xfa6a)
#define DMA_UR4R_AMT (*(unsigned char volatile xdata *)0xfa6b)
#define DMA_UR4R_DONE (*(unsigned char volatile xdata *)0xfa6c)
#define DMA_UR4R_RXA (*(unsigned int volatile xdata *)0xfa6d)
#define DMA_UR4R_RXAH (*(unsigned char volatile xdata *)0xfa6d)
#define DMA_UR4R_RXAL (*(unsigned char volatile xdata *)0xfa6e)
#define DMA_LCM_CFG (*(unsigned char volatile xdata *)0xfa70)
#define DMA_LCM_CR (*(unsigned char volatile xdata *)0xfa71)
#define DMA_LCM_STA (*(unsigned char volatile xdata *)0xfa72)
#define DMA_LCM_AMT (*(unsigned char volatile xdata *)0xfa73)
#define DMA_LCM_DONE (*(unsigned char volatile xdata *)0xfa74)
#define DMA_LCM_TXA (*(unsigned int volatile xdata *)0xfa75)
#define DMA_LCM_TXAH (*(unsigned char volatile xdata *)0xfa75)
#define DMA_LCM_TXAL (*(unsigned char volatile xdata *)0xfa76)
#define DMA_LCM_RXA (*(unsigned int volatile xdata *)0xfa77)
#define DMA_LCM_RXAH (*(unsigned char volatile xdata *)0xfa77)
#define DMA_LCM_RXAL (*(unsigned char volatile xdata *)0xfa78)
/////////////////////////////////////////////////
#define INT0_VECTOR 0 //0003H
#define TMR0_VECTOR 1 //000BH
#define INT1_VECTOR 2 //0013H
#define TMR1_VECTOR 3 //001BH
#define UART1_VECTOR 4 //0023H
#define ADC_VECTOR 5 //002BH
#define LVD_VECTOR 6 //0033H
#define PCA_VECTOR 7 //003BH
#define UART2_VECTOR 8 //0043H
#define SPI_VECTOR 9 //004BH
#define INT2_VECTOR 10 //0053H
#define INT3_VECTOR 11 //005BH
#define TMR2_VECTOR 12 //0063H
#define USER_VECTOR 13 //006BH
#define INT4_VECTOR 16 //0083H
#define UART3_VECTOR 17 //008BH
#define UART4_VECTOR 18 //0093H
#define TMR3_VECTOR 19 //009BH
#define TMR4_VECTOR 20 //00A3H
#define CMP_VECTOR 21 //00ABH
#define PWM_VECTOR 22 //00B3H
#define PWMFD_VECTOR 23 //00BBH
#define I2C_VECTOR 24 //00C3H
#define P0INT_VECTOR 37 //012BH
#define P1INT_VECTOR 38 //0133H
#define P2INT_VECTOR 39 //013BH
#define P3INT_VECTOR 40 //0143H
#define P4INT_VECTOR 41 //014BH
#define P5INT_VECTOR 42 //0153H
#define P6INT_VECTOR 43 //015BH
#define P7INT_VECTOR 44 //0163H
#define M2MDMA_VECTOR 47 //017BH
#define ADCDMA_VECTOR 48 //0183H
#define SPIDMA_VECTOR 49 //018BH
#define U1TXDMA_VECTOR 50 //0193H
#define U1RXDMA_VECTOR 51 //019BH
#define U2TXDMA_VECTOR 52 //01A3H
#define U2RXDMA_VECTOR 53 //01ABH
#define U3TXDMA_VECTOR 54 //01B3H
#define U3RXDMA_VECTOR 55 //01BBH
#define U4TXDMA_VECTOR 56 //01C3H
#define U4RXDMA_VECTOR 57 //01CBH
#define LCMDMA_VECTOR 58 //01D3H
#define LCM_VECTOR 59 //01DBH
/////////////////////////////////////////////////
#endif

466
source/cpu/nouse/stc_stc15w.H

@ -1,466 +0,0 @@
#ifndef __STC15F2K60S2_H_
#define __STC15F2K60S2_H_
// stc_stc15w.h
#include<intrins.h>
/////////////////////////////////////////////////
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
//内核特殊功能寄存器 // 复位值 描述
sfr ACC = 0xE0; //0000,0000 累加器Accumulator
sfr B = 0xF0; //0000,0000 B寄存器
sfr PSW = 0xD0; //0000,0000 程序状态字
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0;
sfr SP = 0x81; //0000,0111 堆栈指针
sfr DPL = 0x82; //0000,0000 数据指针低字节
sfr DPH = 0x83; //0000,0000 数据指针高字节
//I/O 口特殊功能寄存器
sfr P0 = 0x80; //1111,1111 端口0
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr P1 = 0x90; //1111,1111 端口1
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P2 = 0xA0; //1111,1111 端口2
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P3 = 0xB0; //1111,1111 端口3
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P4 = 0xC0; //1111,1111 端口4
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr P5 = 0xC8; //xxxx,1111 端口5
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P6 = 0xE8; //0000,0000 端口6
sbit P60 = P6^0;
sbit P61 = P6^1;
sbit P62 = P6^2;
sbit P63 = P6^3;
sbit P64 = P6^4;
sbit P65 = P6^5;
sbit P66 = P6^6;
sbit P67 = P6^7;
sfr P7 = 0xF8; //0000,0000 端口7
sbit P70 = P7^0;
sbit P71 = P7^1;
sbit P72 = P7^2;
sbit P73 = P7^3;
sbit P74 = P7^4;
sbit P75 = P7^5;
sbit P76 = P7^6;
sbit P77 = P7^7;
sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0
sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1
sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0
sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1
sfr P2M0 = 0x96; //0000,0000 端口2模式寄存器0
sfr P2M1 = 0x95; //0000,0000 端口2模式寄存器1
sfr P3M0 = 0xB2; //0000,0000 端口3模式寄存器0
sfr P3M1 = 0xB1; //0000,0000 端口3模式寄存器1
sfr P4M0 = 0xB4; //0000,0000 端口4模式寄存器0
sfr P4M1 = 0xB3; //0000,0000 端口4模式寄存器1
sfr P5M0 = 0xCA; //0000,0000 端口5模式寄存器0
sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1
sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0
sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1
sfr P7M0 = 0xE2; //0000,0000 端口7模式寄存器0
sfr P7M1 = 0xE1; //0000,0000 端口7模式寄存器1
//系统管理特殊功能寄存器
sfr PCON = 0x87; //0001,0000 电源控制寄存器
sfr AUXR = 0x8E; //0000,0000 辅助寄存器
#define TOx12 BITN7
#define T1x12 BITN6
#define UART_M0x6 BITN5 //串口1模式0速度 =0 12倍 = 1 两倍
#define T2R BITN4 //定时器2 运行 =1
#define T2_C BITN3 //定时器/计数器选择
#define T2x12 BITN2
#define EXTRAM BITN1
#define S1ST2 BITN0 //串口1选择定时器1 =0 选择定时器2 =1
sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1
sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1
sfr CLK_DIV = 0x97; //0000,0000 时钟分频控制寄存器
sfr BUS_SPEED = 0xA1; //xx10,x011 总线速度控制寄存器
sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器
sfr P_SW2 = 0xBA; //0xxx,x000 外设端口切换寄存器
//中断特殊功能寄存器
sfr IE = 0xA8; //0000,0000 中断控制寄存器
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr IP = 0xB8; //0000,0000 中断优先级寄存器
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2
/// 不可位寻址
#define ET4 BITN6
#define ET3 BITN5
#define ES4 BITN4
#define ES3 BITN3
#define ET2 BITN2
#define ESPI BITN1
#define ES2 BITN0
sfr IP2 = 0xB5; //xxxx,xx00 中断优先级寄存器2
sfr INT_CLKO = 0x8F; //0000,0000 外部中断与时钟输出控制寄存器
//定时器特殊功能寄存器
sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89; //0000,0000 T0/T1模式寄存器
sfr TL0 = 0x8A; //0000,0000 T0低字节
sfr TL1 = 0x8B; //0000,0000 T1低字节
sfr TH0 = 0x8C; //0000,0000 T0高字节
sfr TH1 = 0x8D; //0000,0000 T1高字节
sfr T4T3M = 0xD1; //0000,0000 T3/T4模式寄存器
sfr T3T4M = 0xD1; //0000,0000 T3/T4模式寄存器
sfr T4H = 0xD2; //0000,0000 T4高字节
sfr T4L = 0xD3; //0000,0000 T4低字节
sfr T3H = 0xD4; //0000,0000 T3高字节
sfr T3L = 0xD5; //0000,0000 T3低字节
sfr T2H = 0xD6; //0000,0000 T2高字节
sfr T2L = 0xD7; //0000,0000 T2低字节
sfr WKTCL = 0xAA; //0000,0000 掉电唤醒定时器低字节
sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节
sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
//串行口特殊功能寄存器
sfr SCON = 0x98; //0000,0000 串口1控制寄存器
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
//sfr SBUF = 0x99; //xxxx,xxxx 串口1数据寄存器
//sfr S2CON = 0x9A; //0000,0000 串口2控制寄存器
//sfr S2BUF = 0x9B; //xxxx,xxxx 串口2数据寄存器
//sfr SADDR = 0xA9; //0000,0000 从机地址寄存器
//sfr SADEN = 0xB9; //0000,0000 从机地址屏蔽寄存器
sfr SBUF = 0x99; //Serial Data Buffer
sfr SBUF0 = 0x99; //Serial Data Buffer xxxx,xxxx
sfr SADEN = 0xB9; //Slave Address Mask 0000,0000
sfr SADDR = 0xA9; //Slave Address 0000,0000
//-----------------------------------
// 7 6 5 4 3 2 1 0 Reset Value
sfr S2CON = 0x9A; //S2 Control S2SM0 S2SM1 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B
#define S2SM0 BITN7
#define S2ST4 BITN6
#define S2SM2 BITN5
#define S2REN BITN4
#define S2TB8 BITN3
#define S2RB8 BITN2
#define S2TI BITN1
#define S2RI BITN0
sfr S2BUF = 0x9B; //S2 Serial Buffer xxxx,xxxx
//sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000
//---------------------------------------------------------------
sfr S3CON = 0xAC; //0000,0000 串口3控制寄存器
#define S3SM0 BITN7
#define S3ST4 BITN6
#define S3SM2 BITN5
#define S3REN BITN4
#define S3TB8 BITN3
#define S3RB8 BITN2
#define S3TI BITN1
#define S3RI BITN0
sfr S3BUF = 0xAD; //xxxx,xxxx 串口3数据寄存器
//---------------------------------------------------------------
sfr S4CON = 0x84; //0000,0000 串口4控制寄存器
#define S4SM0 BITN7
#define S4ST4 BITN6
#define S4SM2 BITN5
#define S4REN BITN4
#define S4TB8 BITN3
#define S4RB8 BITN2
#define S4TI BITN1
#define S4RI BITN0
sfr S4BUF = 0x85; //xxxx,xxxx 串口4数据寄存器
//ADC 特殊功能寄存器
sfr ADC_CONTR = 0xBC; //0000,0000 A/D转换控制寄存器
sfr ADC_RES = 0xBD; //0000,0000 A/D转换结果高8位
sfr ADC_RESL = 0xBE; //0000,0000 A/D转换结果低2位
//SPI 特殊功能寄存器
sfr SPSTAT = 0xCD; //00xx,xxxx SPI状态寄存器
sfr SPCTL = 0xCE; //0000,0100 SPI控制寄存器
sfr SPDAT = 0xCF; //0000,0000 SPI数据寄存器
//IAP/ISP 特殊功能寄存器
sfr IAP_DATA = 0xC2; //0000,0000 EEPROM数据寄存器
sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROM地址高字节
sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROM地址第字节
sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROM命令寄存器
sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPM命令触发寄存器
sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器
//PCA/PWM 特殊功能寄存器
sfr CCON = 0xD8; //00xx,xx00 PCA控制寄存器
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xD9; //0xxx,x000 PCA 工作模式寄存器
sfr CL = 0xE9; //0000,0000 PCA计数器低字节
sfr CH = 0xF9; //0000,0000 PCA计数器高字节
sfr CCAPM0 = 0xDA; //0000,0000 PCA模块0的PWM寄存器
sfr CCAPM1 = 0xDB; //0000,0000 PCA模块1的PWM寄存器
sfr CCAPM2 = 0xDC; //0000,0000 PCA模块2的PWM 寄存器
sfr CCAP0L = 0xEA; //0000,0000 PCA模块0的捕捉/比较寄存器低字节
sfr CCAP1L = 0xEB; //0000,0000 PCA模块1的捕捉/比较寄存器低字节
sfr CCAP2L = 0xEC; //0000,0000 PCA模块2的捕捉/比较寄存器低字节
sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCA模块0的PWM寄存器
sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCA模块1的PWM寄存器
sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCA模块1的PWM寄存器
sfr CCAP0H = 0xFA; //0000,0000 PCA模块0的捕捉/比较寄存器高字节
sfr CCAP1H = 0xFB; //0000,0000 PCA模块1的捕捉/比较寄存器高字节
sfr CCAP2H = 0xFC; //0000,0000 PCA模块2的捕捉/比较寄存器高字节
//比较器特殊功能寄存器
sfr CMPCR1 = 0xE6; //0000,0000 比较器控制寄存器1
sfr CMPCR2 = 0xE7; //0000,0000 比较器控制寄存器2
//增强型PWM波形发生器特殊功能寄存器
sfr PWMCFG = 0xf1; //x000,0000 PWM配置寄存器
sfr PWMCR = 0xf5; //0000,0000 PWM控制寄存器
sfr PWMIF = 0xf6; //x000,0000 PWM中断标志寄存器
sfr PWMFDCR = 0xf7; //xx00,0000 PWM外部异常检测控制寄存器
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define PWMC (*(unsigned int volatile xdata *)0xfff0)
#define PWMCH (*(unsigned char volatile xdata *)0xfff0)
#define PWMCL (*(unsigned char volatile xdata *)0xfff1)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff00)
#define PWM2T1H (*(unsigned char volatile xdata *)0xff00)
#define PWM2T1L (*(unsigned char volatile xdata *)0xff01)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff02)
#define PWM2T2H (*(unsigned char volatile xdata *)0xff02)
#define PWM2T2L (*(unsigned char volatile xdata *)0xff03)
#define PWM2CR (*(unsigned char volatile xdata *)0xff04)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM3T1H (*(unsigned char volatile xdata *)0xff10)
#define PWM3T1L (*(unsigned char volatile xdata *)0xff11)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM3T2H (*(unsigned char volatile xdata *)0xff12)
#define PWM3T2L (*(unsigned char volatile xdata *)0xff13)
#define PWM3CR (*(unsigned char volatile xdata *)0xff14)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM4T1H (*(unsigned char volatile xdata *)0xff20)
#define PWM4T1L (*(unsigned char volatile xdata *)0xff21)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM4T2H (*(unsigned char volatile xdata *)0xff22)
#define PWM4T2L (*(unsigned char volatile xdata *)0xff23)
#define PWM4CR (*(unsigned char volatile xdata *)0xff24)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM5T1H (*(unsigned char volatile xdata *)0xff30)
#define PWM5T1L (*(unsigned char volatile xdata *)0xff31)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM5T2H (*(unsigned char volatile xdata *)0xff32)
#define PWM5T2L (*(unsigned char volatile xdata *)0xff33)
#define PWM5CR (*(unsigned char volatile xdata *)0xff34)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM6T1H (*(unsigned char volatile xdata *)0xff40)
#define PWM6T1L (*(unsigned char volatile xdata *)0xff41)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM6T2H (*(unsigned char volatile xdata *)0xff42)
#define PWM6T2L (*(unsigned char volatile xdata *)0xff43)
#define PWM6CR (*(unsigned char volatile xdata *)0xff44)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff50)
#define PWM7T1H (*(unsigned char volatile xdata *)0xff50)
#define PWM7T1L (*(unsigned char volatile xdata *)0xff51)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff52)
#define PWM7T2H (*(unsigned char volatile xdata *)0xff52)
#define PWM7T2L (*(unsigned char volatile xdata *)0xff53)
#define PWM7CR (*(unsigned char volatile xdata *)0xff54)
/////////////////////////////////////////////////
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
/// >>>>> add by cc
//sbit P34=P3^4; //定义SDA数据线
//sbit P35=P3^5; //定义SCL时钟线
#define mBIT_1(X,N) X|= (1<<N)
#define mBIT_0(X,N) X&=~(1<<N)
#define mBIT_G(X,N) (X&(1<<N))
//高阻状态
#define P0_conf_in(n) mBIT_1(P0M1,n);mBIT_0(P0M0,n);
#define P1_conf_in(n) mBIT_1(P1M1,n);mBIT_0(P1M0,n);
#define P2_conf_in(n) mBIT_1(P2M1,n);mBIT_0(P2M0,n);
#define P2_conf_port(n) mBIT_0(P2M1,n);mBIT_0(P2M0,n);
#define P3_conf_in(n) mBIT_1(P3M1,n);mBIT_0(P3M0,n);
#define P3_conf_port(n) mBIT_0(P3M1,n);mBIT_0(P3M0,n);
#define P4_conf_in(n) mBIT_1(P4M1,n);mBIT_0(P4M0,n);
#define P5_conf_in(n) mBIT_1(P5M1,n);mBIT_0(P5M0,n);
#define NOP() _nop_()
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
//// n: BITN0---BITN7
#define D_stdIO_P0(BITN) BITN_0(P0M1,BITN);BITN_0(P0M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(BITN) BITN_0(P0M1,BITN);BITN_1(P0M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(BITN) BITN_1(P0M1,BITN);BITN_0(P0M0,BITN); /////////10 高阻
#define D_OpenD_P0(BITN) BITN_1(P0M1,BITN);BITN_1(P0M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(BITN) BITN_0(P1M1,BITN);BITN_0(P1M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(BITN) BITN_0(P1M1,BITN);BITN_1(P1M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(BITN) BITN_1(P1M1,BITN);BITN_0(P1M0,BITN); /////////10 高阻
#define D_OpenD_P1(BITN) BITN_1(P1M1,BITN);BITN_1(P1M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(BITN) BITN_0(P2M1,BITN);BITN_0(P2M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(BITN) BITN_0(P2M1,BITN);BITN_1(P2M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(BITN) BITN_1(P2M1,BITN);BITN_0(P2M0,BITN); /////////10 高阻
#define D_OpenD_P2(BITN) BITN_1(P2M1,BITN);BITN_1(P2M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(BITN) BITN_0(P3M1,BITN);BITN_0(P3M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(BITN) BITN_0(P3M1,BITN);BITN_1(P3M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(BITN) BITN_1(P3M1,BITN);BITN_0(P3M0,BITN); /////////10 高阻
#define D_OpenD_P3(BITN) BITN_1(P3M1,BITN);BITN_1(P3M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(BITN) BITN_0(P4M1,BITN);BITN_0(P4M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(BITN) BITN_0(P4M1,BITN);BITN_1(P4M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(BITN) BITN_1(P4M1,BITN);BITN_0(P4M0,BITN); /////////10 高阻
#define D_OpenD_P4(BITN) BITN_1(P4M1,BITN);BITN_1(P4M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(BITN) BITN_0(P5M1,BITN);BITN_0(P5M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(BITN) BITN_0(P5M1,BITN);BITN_1(P5M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(BITN) BITN_1(P5M1,BITN);BITN_0(P5M0,BITN); /////////10 高阻
#define D_OpenD_P5(BITN) BITN_1(P5M1,BITN);BITN_1(P5M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(BITN) BITN_0(P6M1,BITN);BITN_0(P6M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(BITN) BITN_0(P6M1,BITN);BITN_1(P6M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(BITN) BITN_1(P6M1,BITN);BITN_0(P6M0,BITN); /////////10 高阻
#define D_OpenD_P6(BITN) BITN_1(P6M1,BITN);BITN_1(P6M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(BITN) BITN_0(P7M1,BITN);BITN_0(P7M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(BITN) BITN_0(P7M1,BITN);BITN_1(P7M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(BITN) BITN_1(P7M1,BITN);BITN_0(P7M0,BITN); /////////10 高阻
#define D_OpenD_P7(BITN) BITN_1(P7M1,BITN);BITN_1(P7M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#endif

746
source/cpu/nouse/stc_stc8G1k.H

@ -1,746 +0,0 @@
#ifndef __STC8G_H_
#define __STC8G_H_
// STC_stc8a8k.h
#include<intrins.h>
/////////////////////////////////////////////////
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr S4CON = 0x84;
sfr S4BUF = 0x85;
sfr PCON = 0x87;
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr AUXR = 0x8E;
sfr INTCLKO = 0x8F;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9A;
sfr S2BUF = 0x9B;
sfr IRCBAND = 0x9D;
sfr LIRTRIM = 0x9E;
sfr IRTRIM = 0x9F;
sfr P2 = 0xA0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P_SW1 = 0xA2;
sfr IE = 0xA8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr SADDR = 0xA9;
sfr WKTCL = 0xAA;
sfr WKTCH = 0xAB;
sfr S3CON = 0xAC;
sfr S3BUF = 0xAD;
sfr TA = 0xAE;
sfr IE2 = 0xAF;
sfr P3 = 0xB0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P3M1 = 0xB1;
sfr P3M0 = 0xB2;
sfr P4M1 = 0xB3;
sfr P4M0 = 0xB4;
sfr IP2 = 0xB5;
sfr IP2H = 0xB6;
sfr IPH = 0xB7;
sfr IP = 0xB8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr SADEN = 0xB9;
sfr P_SW2 = 0xBA;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES = 0xBD;
sfr ADC_RESL = 0xBE;
sfr P4 = 0xC0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr WDT_CONTR = 0xC1;
sfr IAP_DATA = 0xC2;
sfr IAP_ADDRH = 0xC3;
sfr IAP_ADDRL = 0xC4;
sfr IAP_CMD = 0xC5;
sfr IAP_TRIG = 0xC6;
sfr IAP_CONTR = 0xC7;
sfr P5 = 0xC8;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr SPSTAT = 0xCD;
sfr SPCTL = 0xCE;
sfr SPDAT = 0xCF;
sfr PSW = 0xD0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0;
sfr T4T3M = 0xD1;
sfr T4H = 0xD2;
sfr T4L = 0xD3;
sfr T3H = 0xD4;
sfr T3L = 0xD5;
sfr T2H = 0xD6;
sfr T2L = 0xD7;
sfr CCON = 0xD8;
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xD9;
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sfr CCAPM2 = 0xDC;
sfr ADCCFG = 0xDE;
sfr IP3 = 0xDF;
sfr ACC = 0xE0;
sfr DPS = 0xE3;
sfr DPL1 = 0xE4;
sfr DPH1 = 0xE5;
sfr CMPCR1 = 0xE6;
sfr CMPCR2 = 0xE7;
sfr CL = 0xE9;
sfr CCAP0L = 0xEA;
sfr CCAP1L = 0xEB;
sfr CCAP2L = 0xEC;
sfr IP3H = 0xEE;
sfr AUXINTIF = 0xEF;
sfr B = 0xF0;
sfr PWMSET = 0xF1;
sfr PCA_PWM0 = 0xF2;
sfr PCA_PWM1 = 0xF3;
sfr PCA_PWM2 = 0xF4;
sfr IAP_TPS = 0xF5;
sfr PWMCFG01 = 0xF6;
sfr PWMCFG23 = 0xF7;
sfr CH = 0xF9;
sfr CCAP0H = 0xFA;
sfr CCAP1H = 0xFB;
sfr CCAP2H = 0xFC;
sfr PWMCFG45 = 0xFE;
sfr RSTCFG = 0xFF;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define CKSEL (*(unsigned char volatile xdata *)0xFE00)
#define CLKDIV (*(unsigned char volatile xdata *)0xFE01)
#define HIRCCR (*(unsigned char volatile xdata *)0xFE02)
#define XOSCCR (*(unsigned char volatile xdata *)0xFE03)
#define IRC32KCR (*(unsigned char volatile xdata *)0xFE04)
#define MCLKOCR (*(unsigned char volatile xdata *)0xFE05)
#define IRCDB (*(unsigned char volatile xdata *)0xFE06)
#define P0PU (*(unsigned char volatile xdata *)0xFE10)
#define P1PU (*(unsigned char volatile xdata *)0xFE11)
#define P2PU (*(unsigned char volatile xdata *)0xFE12)
#define P3PU (*(unsigned char volatile xdata *)0xFE13)
#define P4PU (*(unsigned char volatile xdata *)0xFE14)
#define P5PU (*(unsigned char volatile xdata *)0xFE15)
#define P0NCS (*(unsigned char volatile xdata *)0xFE18)
#define P1NCS (*(unsigned char volatile xdata *)0xFE19)
#define P2NCS (*(unsigned char volatile xdata *)0xFE1A)
#define P3NCS (*(unsigned char volatile xdata *)0xFE1B)
#define P4NCS (*(unsigned char volatile xdata *)0xFE1C)
#define P5NCS (*(unsigned char volatile xdata *)0xFE1D)
#define P0SR (*(unsigned char volatile xdata *)0xFE20)
#define P1SR (*(unsigned char volatile xdata *)0xFE21)
#define P2SR (*(unsigned char volatile xdata *)0xFE22)
#define P3SR (*(unsigned char volatile xdata *)0xFE23)
#define P4SR (*(unsigned char volatile xdata *)0xFE24)
#define P5SR (*(unsigned char volatile xdata *)0xFE25)
#define P0DR (*(unsigned char volatile xdata *)0xFE28)
#define P1DR (*(unsigned char volatile xdata *)0xFE29)
#define P2DR (*(unsigned char volatile xdata *)0xFE2A)
#define P3DR (*(unsigned char volatile xdata *)0xFE2B)
#define P4DR (*(unsigned char volatile xdata *)0xFE2C)
#define P5DR (*(unsigned char volatile xdata *)0xFE2D)
#define P0IE (*(unsigned char volatile xdata *)0xFE30)
#define P1IE (*(unsigned char volatile xdata *)0xFE31)
#define P3IE (*(unsigned char volatile xdata *)0xFE33)
#define I2CCFG (*(unsigned char volatile xdata *)0xFE80)
#define I2CMSCR (*(unsigned char volatile xdata *)0xFE81)
#define I2CMSST (*(unsigned char volatile xdata *)0xFE82)
#define I2CSLCR (*(unsigned char volatile xdata *)0xFE83)
#define I2CSLST (*(unsigned char volatile xdata *)0xFE84)
#define I2CSLADR (*(unsigned char volatile xdata *)0xFE85)
#define I2CTXD (*(unsigned char volatile xdata *)0xFE86)
#define I2CRXD (*(unsigned char volatile xdata *)0xFE87)
#define I2CMSAUX (*(unsigned char volatile xdata *)0xFE88)
#define TM2PS (*(unsigned char volatile xdata *)0xFEA2)
#define TM3PS (*(unsigned char volatile xdata *)0xFEA3)
#define TM4PS (*(unsigned char volatile xdata *)0xFEA4)
#define ADCTIM (*(unsigned char volatile xdata *)0xFEA8)
#define PWM0CH (*(unsigned char volatile xdata *)0xFF00)
#define PWM0CL (*(unsigned char volatile xdata *)0xFF01)
#define PWM0CKS (*(unsigned char volatile xdata *)0xFF02)
#define PWM0TADCH (*(unsigned char volatile xdata *)0xFF03)
#define PWM0TADCL (*(unsigned char volatile xdata *)0xFF04)
#define PWM0IF (*(unsigned char volatile xdata *)0xFF05)
#define PWM0FDCR (*(unsigned char volatile xdata *)0xFF06)
#define PWM00T1H (*(unsigned char volatile xdata *)0xFF10)
#define PWM00T1L (*(unsigned char volatile xdata *)0xFF11)
#define PWM00T2H (*(unsigned char volatile xdata *)0xFF12)
#define PWM00T2L (*(unsigned char volatile xdata *)0xFF13)
#define PWM00CR (*(unsigned char volatile xdata *)0xFF14)
#define PWM00HLD (*(unsigned char volatile xdata *)0xFF15)
#define PWM01T1H (*(unsigned char volatile xdata *)0xFF18)
#define PWM01T1L (*(unsigned char volatile xdata *)0xFF19)
#define PWM01T2H (*(unsigned char volatile xdata *)0xFF1A)
#define PWM01T2L (*(unsigned char volatile xdata *)0xFF1B)
#define PWM01CR (*(unsigned char volatile xdata *)0xFF1C)
#define PWM01HLD (*(unsigned char volatile xdata *)0xFF1D)
#define PWM02T1H (*(unsigned char volatile xdata *)0xFF20)
#define PWM02T1L (*(unsigned char volatile xdata *)0xFF21)
#define PWM02T2H (*(unsigned char volatile xdata *)0xFF22)
#define PWM02T2L (*(unsigned char volatile xdata *)0xFF23)
#define PWM02CR (*(unsigned char volatile xdata *)0xFF24)
#define PWM02HLD (*(unsigned char volatile xdata *)0xFF25)
#define PWM03T1H (*(unsigned char volatile xdata *)0xFF28)
#define PWM03T1L (*(unsigned char volatile xdata *)0xFF29)
#define PWM03T2H (*(unsigned char volatile xdata *)0xFF2A)
#define PWM03T2L (*(unsigned char volatile xdata *)0xFF2B)
#define PWM03CR (*(unsigned char volatile xdata *)0xFF2C)
#define PWM03HLD (*(unsigned char volatile xdata *)0xFF2D)
#define PWM04T1H (*(unsigned char volatile xdata *)0xFF30)
#define PWM04T1L (*(unsigned char volatile xdata *)0xFF31)
#define PWM04T2H (*(unsigned char volatile xdata *)0xFF32)
#define PWM04T2L (*(unsigned char volatile xdata *)0xFF33)
#define PWM04CR (*(unsigned char volatile xdata *)0xFF34)
#define PWM04HLD (*(unsigned char volatile xdata *)0xFF35)
#define PWM05T1H (*(unsigned char volatile xdata *)0xFF38)
#define PWM05T1L (*(unsigned char volatile xdata *)0xFF39)
#define PWM05T2H (*(unsigned char volatile xdata *)0xFF3A)
#define PWM05T2L (*(unsigned char volatile xdata *)0xFF3B)
#define PWM05CR (*(unsigned char volatile xdata *)0xFF3C)
#define PWM05HLD (*(unsigned char volatile xdata *)0xFF3D)
#define PWM06T1H (*(unsigned char volatile xdata *)0xFF40)
#define PWM06T1L (*(unsigned char volatile xdata *)0xFF41)
#define PWM06T2H (*(unsigned char volatile xdata *)0xFF42)
#define PWM06T2L (*(unsigned char volatile xdata *)0xFF43)
#define PWM06CR (*(unsigned char volatile xdata *)0xFF44)
#define PWM06HLD (*(unsigned char volatile xdata *)0xFF45)
#define PWM07T1H (*(unsigned char volatile xdata *)0xFF48)
#define PWM07T1L (*(unsigned char volatile xdata *)0xFF49)
#define PWM07T2H (*(unsigned char volatile xdata *)0xFF4A)
#define PWM07T2L (*(unsigned char volatile xdata *)0xFF4B)
#define PWM07CR (*(unsigned char volatile xdata *)0xFF4C)
#define PWM07HLD (*(unsigned char volatile xdata *)0xFF4D)
#define PWM1CH (*(unsigned char volatile xdata *)0xFF50)
#define PWM1CL (*(unsigned char volatile xdata *)0xFF51)
#define PWM1CKS (*(unsigned char volatile xdata *)0xFF52)
#define PWM1IF (*(unsigned char volatile xdata *)0xFF55)
#define PWM1FDCR (*(unsigned char volatile xdata *)0xFF56)
#define PWM10T1H (*(unsigned char volatile xdata *)0xFF60)
#define PWM10T1L (*(unsigned char volatile xdata *)0xFF61)
#define PWM10T2H (*(unsigned char volatile xdata *)0xFF62)
#define PWM10T2L (*(unsigned char volatile xdata *)0xFF63)
#define PWM10CR (*(unsigned char volatile xdata *)0xFF64)
#define PWM10HLD (*(unsigned char volatile xdata *)0xFF65)
#define PWM11T1H (*(unsigned char volatile xdata *)0xFF68)
#define PWM11T1L (*(unsigned char volatile xdata *)0xFF69)
#define PWM11T2H (*(unsigned char volatile xdata *)0xFF6A)
#define PWM11T2L (*(unsigned char volatile xdata *)0xFF6B)
#define PWM11CR (*(unsigned char volatile xdata *)0xFF6C)
#define PWM11HLD (*(unsigned char volatile xdata *)0xFF6D)
#define PWM12T1H (*(unsigned char volatile xdata *)0xFF70)
#define PWM12T1L (*(unsigned char volatile xdata *)0xFF71)
#define PWM12T2H (*(unsigned char volatile xdata *)0xFF72)
#define PWM12T2L (*(unsigned char volatile xdata *)0xFF73)
#define PWM12CR (*(unsigned char volatile xdata *)0xFF74)
#define PWM12HLD (*(unsigned char volatile xdata *)0xFF75)
#define PWM13T1H (*(unsigned char volatile xdata *)0xFF78)
#define PWM13T1L (*(unsigned char volatile xdata *)0xFF79)
#define PWM13T2H (*(unsigned char volatile xdata *)0xFF7A)
#define PWM13T2L (*(unsigned char volatile xdata *)0xFF7B)
#define PWM13CR (*(unsigned char volatile xdata *)0xFF7C)
#define PWM13HLD (*(unsigned char volatile xdata *)0xFF7D)
#define PWM14T1H (*(unsigned char volatile xdata *)0xFF80)
#define PWM14T1L (*(unsigned char volatile xdata *)0xFF81)
#define PWM14T2H (*(unsigned char volatile xdata *)0xFF82)
#define PWM14T2L (*(unsigned char volatile xdata *)0xFF83)
#define PWM14CR (*(unsigned char volatile xdata *)0xFF84)
#define PWM14HLD (*(unsigned char volatile xdata *)0xFF85)
#define PWM15T1H (*(unsigned char volatile xdata *)0xFF88)
#define PWM15T1L (*(unsigned char volatile xdata *)0xFF89)
#define PWM15T2H (*(unsigned char volatile xdata *)0xFF8A)
#define PWM15T2L (*(unsigned char volatile xdata *)0xFF8B)
#define PWM15CR (*(unsigned char volatile xdata *)0xFF8C)
#define PWM15HLD (*(unsigned char volatile xdata *)0xFF8D)
#define PWM16T1H (*(unsigned char volatile xdata *)0xFF90)
#define PWM16T1L (*(unsigned char volatile xdata *)0xFF91)
#define PWM16T2H (*(unsigned char volatile xdata *)0xFF92)
#define PWM16T2L (*(unsigned char volatile xdata *)0xFF93)
#define PWM16CR (*(unsigned char volatile xdata *)0xFF94)
#define PWM16HLD (*(unsigned char volatile xdata *)0xFF95)
#define PWM17T1H (*(unsigned char volatile xdata *)0xFF98)
#define PWM17T1L (*(unsigned char volatile xdata *)0xFF99)
#define PWM17T2H (*(unsigned char volatile xdata *)0xFF9A)
#define PWM17T2L (*(unsigned char volatile xdata *)0xFF9B)
#define PWM17CR (*(unsigned char volatile xdata *)0xFF9C)
#define PWM17HLD (*(unsigned char volatile xdata *)0xFF9D)
#define PWM2CH (*(unsigned char volatile xdata *)0xFFA0)
#define PWM2CL (*(unsigned char volatile xdata *)0xFFA1)
#define PWM2CKS (*(unsigned char volatile xdata *)0xFFA2)
#define PWM2TADCH (*(unsigned char volatile xdata *)0xFFA3)
#define PWM2TADCL (*(unsigned char volatile xdata *)0xFFA4)
#define PWM2IF (*(unsigned char volatile xdata *)0xFFA5)
#define PWM2FDCR (*(unsigned char volatile xdata *)0xFFA6)
#define PWM20T1H (*(unsigned char volatile xdata *)0xFFB0)
#define PWM20T1L (*(unsigned char volatile xdata *)0xFFB1)
#define PWM20T2H (*(unsigned char volatile xdata *)0xFFB2)
#define PWM20T2L (*(unsigned char volatile xdata *)0xFFB3)
#define PWM20CR (*(unsigned char volatile xdata *)0xFFB4)
#define PWM20HLD (*(unsigned char volatile xdata *)0xFFB5)
#define PWM21T1H (*(unsigned char volatile xdata *)0xFFB8)
#define PWM21T1L (*(unsigned char volatile xdata *)0xFFB9)
#define PWM21T2H (*(unsigned char volatile xdata *)0xFFBA)
#define PWM21T2L (*(unsigned char volatile xdata *)0xFFBB)
#define PWM21CR (*(unsigned char volatile xdata *)0xFFBC)
#define PWM21HLD (*(unsigned char volatile xdata *)0xFFBD)
#define PWM22T1H (*(unsigned char volatile xdata *)0xFFC0)
#define PWM22T1L (*(unsigned char volatile xdata *)0xFFC1)
#define PWM22T2H (*(unsigned char volatile xdata *)0xFFC2)
#define PWM22T2L (*(unsigned char volatile xdata *)0xFFC3)
#define PWM22CR (*(unsigned char volatile xdata *)0xFFC4)
#define PWM22HLD (*(unsigned char volatile xdata *)0xFFC5)
#define PWM23T1H (*(unsigned char volatile xdata *)0xFFC8)
#define PWM23T1L (*(unsigned char volatile xdata *)0xFFC9)
#define PWM23T2H (*(unsigned char volatile xdata *)0xFFCA)
#define PWM23T2L (*(unsigned char volatile xdata *)0xFFCB)
#define PWM23CR (*(unsigned char volatile xdata *)0xFFCC)
#define PWM23HLD (*(unsigned char volatile xdata *)0xFFCD)
#define PWM24T1H (*(unsigned char volatile xdata *)0xFFD0)
#define PWM24T1L (*(unsigned char volatile xdata *)0xFFD1)
#define PWM24T2H (*(unsigned char volatile xdata *)0xFFD2)
#define PWM24T2L (*(unsigned char volatile xdata *)0xFFD3)
#define PWM24CR (*(unsigned char volatile xdata *)0xFFD4)
#define PWM24HLD (*(unsigned char volatile xdata *)0xFFD5)
#define PWM25T1H (*(unsigned char volatile xdata *)0xFFD8)
#define PWM25T1L (*(unsigned char volatile xdata *)0xFFD9)
#define PWM25T2H (*(unsigned char volatile xdata *)0xFFDA)
#define PWM25T2L (*(unsigned char volatile xdata *)0xFFDB)
#define PWM25CR (*(unsigned char volatile xdata *)0xFFDC)
#define PWM25HLD (*(unsigned char volatile xdata *)0xFFDD)
#define PWM26T1H (*(unsigned char volatile xdata *)0xFFE0)
#define PWM26T1L (*(unsigned char volatile xdata *)0xFFE1)
#define PWM26T2H (*(unsigned char volatile xdata *)0xFFE2)
#define PWM26T2L (*(unsigned char volatile xdata *)0xFFE3)
#define PWM26CR (*(unsigned char volatile xdata *)0xFFE4)
#define PWM26HLD (*(unsigned char volatile xdata *)0xFFE5)
#define PWM27T1H (*(unsigned char volatile xdata *)0xFFE8)
#define PWM27T1L (*(unsigned char volatile xdata *)0xFFE9)
#define PWM27T2H (*(unsigned char volatile xdata *)0xFFEA)
#define PWM27T2L (*(unsigned char volatile xdata *)0xFFEB)
#define PWM27CR (*(unsigned char volatile xdata *)0xFFEC)
#define PWM27HLD (*(unsigned char volatile xdata *)0xFFED)
#define PWM3CH (*(unsigned char volatile xdata *)0xFC00)
#define PWM3CL (*(unsigned char volatile xdata *)0xFC01)
#define PWM3CKS (*(unsigned char volatile xdata *)0xFC02)
#define PWM3IF (*(unsigned char volatile xdata *)0xFC05)
#define PWM3FDCR (*(unsigned char volatile xdata *)0xFC06)
#define PWM30T1H (*(unsigned char volatile xdata *)0xFC10)
#define PWM30T1L (*(unsigned char volatile xdata *)0xFC11)
#define PWM30T2H (*(unsigned char volatile xdata *)0xFC12)
#define PWM30T2L (*(unsigned char volatile xdata *)0xFC13)
#define PWM30CR (*(unsigned char volatile xdata *)0xFC14)
#define PWM30HLD (*(unsigned char volatile xdata *)0xFC15)
#define PWM31T1H (*(unsigned char volatile xdata *)0xFC18)
#define PWM31T1L (*(unsigned char volatile xdata *)0xFC19)
#define PWM31T2H (*(unsigned char volatile xdata *)0xFC1A)
#define PWM31T2L (*(unsigned char volatile xdata *)0xFC1B)
#define PWM31CR (*(unsigned char volatile xdata *)0xFC1C)
#define PWM31HLD (*(unsigned char volatile xdata *)0xFC1D)
#define PWM32T1H (*(unsigned char volatile xdata *)0xFC20)
#define PWM32T1L (*(unsigned char volatile xdata *)0xFC21)
#define PWM32T2H (*(unsigned char volatile xdata *)0xFC22)
#define PWM32T2L (*(unsigned char volatile xdata *)0xFC23)
#define PWM32CR (*(unsigned char volatile xdata *)0xFC24)
#define PWM32HLD (*(unsigned char volatile xdata *)0xFC25)
#define PWM33T1H (*(unsigned char volatile xdata *)0xFC28)
#define PWM33T1L (*(unsigned char volatile xdata *)0xFC29)
#define PWM33T2H (*(unsigned char volatile xdata *)0xFC2A)
#define PWM33T2L (*(unsigned char volatile xdata *)0xFC2B)
#define PWM33CR (*(unsigned char volatile xdata *)0xFC2C)
#define PWM33HLD (*(unsigned char volatile xdata *)0xFC2D)
#define PWM34T1H (*(unsigned char volatile xdata *)0xFC30)
#define PWM34T1L (*(unsigned char volatile xdata *)0xFC31)
#define PWM34T2H (*(unsigned char volatile xdata *)0xFC32)
#define PWM34T2L (*(unsigned char volatile xdata *)0xFC33)
#define PWM34CR (*(unsigned char volatile xdata *)0xFC34)
#define PWM34HLD (*(unsigned char volatile xdata *)0xFC35)
#define PWM35T1H (*(unsigned char volatile xdata *)0xFC38)
#define PWM35T1L (*(unsigned char volatile xdata *)0xFC39)
#define PWM35T2H (*(unsigned char volatile xdata *)0xFC3A)
#define PWM35T2L (*(unsigned char volatile xdata *)0xFC3B)
#define PWM35CR (*(unsigned char volatile xdata *)0xFC3C)
#define PWM35HLD (*(unsigned char volatile xdata *)0xFC3D)
#define PWM36T1H (*(unsigned char volatile xdata *)0xFC40)
#define PWM36T1L (*(unsigned char volatile xdata *)0xFC41)
#define PWM36T2H (*(unsigned char volatile xdata *)0xFC42)
#define PWM36T2L (*(unsigned char volatile xdata *)0xFC43)
#define PWM36CR (*(unsigned char volatile xdata *)0xFC44)
#define PWM36HLD (*(unsigned char volatile xdata *)0xFC45)
#define PWM37T1H (*(unsigned char volatile xdata *)0xFC48)
#define PWM37T1L (*(unsigned char volatile xdata *)0xFC49)
#define PWM37T2H (*(unsigned char volatile xdata *)0xFC4A)
#define PWM37T2L (*(unsigned char volatile xdata *)0xFC4B)
#define PWM37CR (*(unsigned char volatile xdata *)0xFC4C)
#define PWM37HLD (*(unsigned char volatile xdata *)0xFC4D)
#define PWM4CH (*(unsigned char volatile xdata *)0xFC50)
#define PWM4CL (*(unsigned char volatile xdata *)0xFC51)
#define PWM4CKS (*(unsigned char volatile xdata *)0xFC52)
#define PWM4TADCH (*(unsigned char volatile xdata *)0xFC53)
#define PWM4TADCL (*(unsigned char volatile xdata *)0xFC54)
#define PWM4IF (*(unsigned char volatile xdata *)0xFC55)
#define PWM4FDCR (*(unsigned char volatile xdata *)0xFC56)
#define PWM40T1H (*(unsigned char volatile xdata *)0xFC60)
#define PWM40T1L (*(unsigned char volatile xdata *)0xFC61)
#define PWM40T2H (*(unsigned char volatile xdata *)0xFC62)
#define PWM40T2L (*(unsigned char volatile xdata *)0xFC63)
#define PWM40CR (*(unsigned char volatile xdata *)0xFC64)
#define PWM40HLD (*(unsigned char volatile xdata *)0xFC65)
#define PWM41T1H (*(unsigned char volatile xdata *)0xFC68)
#define PWM41T1L (*(unsigned char volatile xdata *)0xFC69)
#define PWM41T2H (*(unsigned char volatile xdata *)0xFC6A)
#define PWM41T2L (*(unsigned char volatile xdata *)0xFC6B)
#define PWM41CR (*(unsigned char volatile xdata *)0xFC6C)
#define PWM41HLD (*(unsigned char volatile xdata *)0xFC6D)
#define PWM42T1H (*(unsigned char volatile xdata *)0xFC70)
#define PWM42T1L (*(unsigned char volatile xdata *)0xFC71)
#define PWM42T2H (*(unsigned char volatile xdata *)0xFC72)
#define PWM42T2L (*(unsigned char volatile xdata *)0xFC73)
#define PWM42CR (*(unsigned char volatile xdata *)0xFC74)
#define PWM42HLD (*(unsigned char volatile xdata *)0xFC75)
#define PWM43T1H (*(unsigned char volatile xdata *)0xFC78)
#define PWM43T1L (*(unsigned char volatile xdata *)0xFC79)
#define PWM43T2H (*(unsigned char volatile xdata *)0xFC7A)
#define PWM43T2L (*(unsigned char volatile xdata *)0xFC7B)
#define PWM43CR (*(unsigned char volatile xdata *)0xFC7C)
#define PWM43HLD (*(unsigned char volatile xdata *)0xFC7D)
#define PWM44T1H (*(unsigned char volatile xdata *)0xFC80)
#define PWM44T1L (*(unsigned char volatile xdata *)0xFC81)
#define PWM44T2H (*(unsigned char volatile xdata *)0xFC82)
#define PWM44T2L (*(unsigned char volatile xdata *)0xFC83)
#define PWM44CR (*(unsigned char volatile xdata *)0xFC84)
#define PWM44HLD (*(unsigned char volatile xdata *)0xFC85)
#define PWM45T1H (*(unsigned char volatile xdata *)0xFC88)
#define PWM45T1L (*(unsigned char volatile xdata *)0xFC89)
#define PWM45T2H (*(unsigned char volatile xdata *)0xFC8A)
#define PWM45T2L (*(unsigned char volatile xdata *)0xFC8B)
#define PWM45CR (*(unsigned char volatile xdata *)0xFC8C)
#define PWM45HLD (*(unsigned char volatile xdata *)0xFC8D)
#define PWM46T1H (*(unsigned char volatile xdata *)0xFC90)
#define PWM46T1L (*(unsigned char volatile xdata *)0xFC91)
#define PWM46T2H (*(unsigned char volatile xdata *)0xFC92)
#define PWM46T2L (*(unsigned char volatile xdata *)0xFC93)
#define PWM46CR (*(unsigned char volatile xdata *)0xFC94)
#define PWM46HLD (*(unsigned char volatile xdata *)0xFC95)
#define PWM47T1H (*(unsigned char volatile xdata *)0xFC98)
#define PWM47T1L (*(unsigned char volatile xdata *)0xFC99)
#define PWM47T2H (*(unsigned char volatile xdata *)0xFC9A)
#define PWM47T2L (*(unsigned char volatile xdata *)0xFC9B)
#define PWM47CR (*(unsigned char volatile xdata *)0xFC9C)
#define PWM47HLD (*(unsigned char volatile xdata *)0xFC9D)
#define PWM5CH (*(unsigned char volatile xdata *)0xFCA0)
#define PWM5CL (*(unsigned char volatile xdata *)0xFCA1)
#define PWM5CKS (*(unsigned char volatile xdata *)0xFCA2)
#define PWM5IF (*(unsigned char volatile xdata *)0xFCA5)
#define PWM5FDCR (*(unsigned char volatile xdata *)0xFCA6)
#define PWM50T1H (*(unsigned char volatile xdata *)0xFCB0)
#define PWM50T1L (*(unsigned char volatile xdata *)0xFCB1)
#define PWM50T2H (*(unsigned char volatile xdata *)0xFCB2)
#define PWM50T2L (*(unsigned char volatile xdata *)0xFCB3)
#define PWM50CR (*(unsigned char volatile xdata *)0xFCB4)
#define PWM50HLD (*(unsigned char volatile xdata *)0xFCB5)
#define PWM51T1H (*(unsigned char volatile xdata *)0xFCB8)
#define PWM51T1L (*(unsigned char volatile xdata *)0xFCB9)
#define PWM51T2H (*(unsigned char volatile xdata *)0xFCBA)
#define PWM51T2L (*(unsigned char volatile xdata *)0xFCBB)
#define PWM51CR (*(unsigned char volatile xdata *)0xFCBC)
#define PWM51HLD (*(unsigned char volatile xdata *)0xFCBD)
#define PWM52T1H (*(unsigned char volatile xdata *)0xFCC0)
#define PWM52T1L (*(unsigned char volatile xdata *)0xFCC1)
#define PWM52T2H (*(unsigned char volatile xdata *)0xFCC2)
#define PWM52T2L (*(unsigned char volatile xdata *)0xFCC3)
#define PWM52CR (*(unsigned char volatile xdata *)0xFCC4)
#define PWM52HLD (*(unsigned char volatile xdata *)0xFCC5)
#define PWM53T1H (*(unsigned char volatile xdata *)0xFCC8)
#define PWM53T1L (*(unsigned char volatile xdata *)0xFCC9)
#define PWM53T2H (*(unsigned char volatile xdata *)0xFCCA)
#define PWM53T2L (*(unsigned char volatile xdata *)0xFCCB)
#define PWM53CR (*(unsigned char volatile xdata *)0xFCCC)
#define PWM53HLD (*(unsigned char volatile xdata *)0xFCCD)
#define PWM54T1H (*(unsigned char volatile xdata *)0xFCD0)
#define PWM54T1L (*(unsigned char volatile xdata *)0xFCD1)
#define PWM54T2H (*(unsigned char volatile xdata *)0xFCD2)
#define PWM54T2L (*(unsigned char volatile xdata *)0xFCD3)
#define PWM54CR (*(unsigned char volatile xdata *)0xFCD4)
#define PWM54HLD (*(unsigned char volatile xdata *)0xFCD5)
#define PWM55T1H (*(unsigned char volatile xdata *)0xFCD8)
#define PWM55T1L (*(unsigned char volatile xdata *)0xFCD9)
#define PWM55T2H (*(unsigned char volatile xdata *)0xFCDA)
#define PWM55T2L (*(unsigned char volatile xdata *)0xFCDB)
#define PWM55CR (*(unsigned char volatile xdata *)0xFCDC)
#define PWM55HLD (*(unsigned char volatile xdata *)0xFCDD)
#define PWM56T1H (*(unsigned char volatile xdata *)0xFCE0)
#define PWM56T1L (*(unsigned char volatile xdata *)0xFCE1)
#define PWM56T2H (*(unsigned char volatile xdata *)0xFCE2)
#define PWM56T2L (*(unsigned char volatile xdata *)0xFCE3)
#define PWM56CR (*(unsigned char volatile xdata *)0xFCE4)
#define PWM56HLD (*(unsigned char volatile xdata *)0xFCE5)
#define PWM57T1H (*(unsigned char volatile xdata *)0xFCE8)
#define PWM57T1L (*(unsigned char volatile xdata *)0xFCE9)
#define PWM57T2H (*(unsigned char volatile xdata *)0xFCEA)
#define PWM57T2L (*(unsigned char volatile xdata *)0xFCEB)
#define PWM57CR (*(unsigned char volatile xdata *)0xFCEC)
#define PWM57HLD (*(unsigned char volatile xdata *)0xFCED)
/////////////////////////////////////////////////
/// >>>>> add by cc
#include "../clib/bit.h"
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
#define D_stdIO_P0(n) BITN_0(P0M1,n);BITN_0(P0M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(n) BITN_0(P0M1,n);BITN_1(P0M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(n) BITN_1(P0M1,n);BITN_0(P0M0,n); /////////10 高阻
#define D_OpenD_P0(n) BITN_1(P0M1,n);BITN_1(P0M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(n) BITN_0(P1M1,n);BITN_0(P1M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(n) BITN_0(P1M1,n);BITN_1(P1M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(n) BITN_1(P1M1,n);BITN_0(P1M0,n); /////////10 高阻
#define D_OpenD_P1(n) BITN_1(P1M1,n);BITN_1(P1M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(n) BITN_0(P2M1,n);BITN_0(P2M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(n) BITN_0(P2M1,n);BITN_1(P2M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(n) BITN_1(P2M1,n);BITN_0(P2M0,n); /////////10 高阻
#define D_OpenD_P2(n) BITN_1(P2M1,n);BITN_1(P2M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(n) BITN_0(P3M1,n);BITN_0(P3M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(n) BITN_0(P3M1,n);BITN_1(P3M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(n) BITN_1(P3M1,n);BITN_0(P3M0,n); /////////10 高阻
#define D_OpenD_P3(n) BITN_1(P3M1,n);BITN_1(P3M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(n) BITN_0(P4M1,n);BITN_0(P4M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(n) BITN_0(P4M1,n);BITN_1(P4M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(n) BITN_1(P4M1,n);BITN_0(P4M0,n); /////////10 高阻
#define D_OpenD_P4(n) BITN_1(P4M1,n);BITN_1(P4M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(n) BITN_0(P6M1,n);BITN_0(P6M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(n) BITN_0(P6M1,n);BITN_1(P6M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(n) BITN_1(P6M1,n);BITN_0(P6M0,n); /////////10 高阻
#define D_OpenD_P6(n) BITN_1(P6M1,n);BITN_1(P6M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(n) BITN_0(P7M1,n);BITN_0(P7M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(n) BITN_0(P7M1,n);BITN_1(P7M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(n) BITN_1(P7M1,n);BITN_0(P7M0,n); /////////10 高阻
#define D_OpenD_P7(n) BITN_1(P7M1,n);BITN_1(P7M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
/***
#define P0_conf_in(n) BITN_1(P0M1,n);BITN_0(P0M0,n);
#define P1_conf_in(n) BITN_1(P1M1,n);BITN_0(P1M0,n);
#define P2_conf_in(n) BITN_1(P2M1,n);BITN_0(P2M0,n);
#define P2_conf_port(n) BITN_0(P2M1,n);BITN_0(P2M0,n);
#define P3_conf_in(n) BITN_1(P3M1,n);BITN_0(P3M0,n);
#define P3_conf_port(n) BITN_0(P3M1,n);BITN_0(P3M0,n);
#define P4_conf_in(n) BITN_1(P4M1,n);BITN_0(P4M0,n);
#define P5_conf_in(n) BITN_1(P5M1,n);BITN_0(P5M0,n);
***/
#define NOP() _nop_()
#define L0_INT4_OPEN() BITN_1(INT_CLKO, INT_EX4)
#define L0_INT4_CLOSE() BITN_0(INT_CLKO, INT_EX4)
#define L0_INT4_AT() BITN_G(INT_CLKO, INT_EX4)
#define L0_INT4_CLEAR() BITN_0(AUXINTIF, INT4IF)
#define L0_INT3_CLEAR() BITN_0(AUXINTIF, INT3IF)
#define L0_INT2_CLEAR() BITN_0(AUXINTIF, INT2IF)
//////
#define L0_INT3_OPEN() BITN_1(INT_CLKO, INT_EX3);
#define L0_INT3_CLOSE() BITN_0(INT_CLKO, INT_EX3);
#define L0_INT2_OPEN() BITN_1(INT_CLKO, INT_EX2);
#define L0_INT2_CLOSE() BITN_0(INT_CLKO, INT_EX2);
#define L0_INT1_OPEN() EX1 = 1;
#define L0_INT1_CLOSE() EX1 = 0;
#define L0_INT0_OPEN() EX0 = 1;
#define L0_INT0_CLOSE() EX0 = 0;
#define D_ISR_int0 0 ///int0 下降沿触发 = 0 上下沿均可触发
#define D_ISR_timer0 1
#define D_ISR_int1 2 ///int1 下降沿触发 = 0 上下沿均可触发
#define D_ISR_timer1 3
#define D_ISR_int2 10 /////只有下降沿
#define D_ISR_int3 11 /////只有下降沿
#define D_SERVE_UART 4
#define D_ISR_int4 16 /////只有下降沿
#if 0
#define L0_TIMER1_start() TR1 = 1;
#define L0_TIMER1_end() TR1 = 0;
#define L0_TIMER1_isr_OPEN() ET1 = 1;
#define L0_TIMER1_isr_CLOSE() ET1 = 0;
#else
#define L0_TIMER1_start() ET1 = 1;
#define L0_TIMER1_end() ET1 = 0;
#define L0_TIMER1_isr_OPEN() TR1 = 1;
#define L0_TIMER1_isr_CLOSE() TR1 = 0;
#endif
/// fixme 颠倒定义会让c51锁死#define _nop_() NOP()
///#define L0_INT3_OPEN() BITN_1(INT_CLKO,INT_EX3); //使能INT3中断
///#define L0_INT3_CLOSE() BITN_0(INT_CLKO,INT_EX3);
#endif //STC_stc8a8k

593
source/cpu/nouse/stc_stc8f.h

@ -1,593 +0,0 @@
#ifndef __STC8F_H_
#define __STC8F_H_
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
//内核特殊功能寄存器
sfr ACC = 0xe0;
sfr B = 0xf0;
sfr PSW = 0xd0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit F1 = PSW^1;
sbit P = PSW^0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr TA = 0xae;
sfr DPS = 0xe3;
sfr DPL1 = 0xe4;
sfr DPH1 = 0xe5;
//I/O 口特殊功能寄存器
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xa0;
sfr P3 = 0xb0;
sfr P4 = 0xc0;
sfr P5 = 0xc8;
sfr P6 = 0xe8;
sfr P7 = 0xf8;
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P1M0 = 0x92;
sfr P1M1 = 0x91;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
sfr P3M0 = 0xb2;
sfr P3M1 = 0xb1;
sfr P4M0 = 0xb4;
sfr P4M1 = 0xb3;
sfr P5M0 = 0xca;
sfr P5M1 = 0xc9;
sfr P6M0 = 0xcc;
sfr P6M1 = 0xcb;
sfr P7M0 = 0xe2;
sfr P7M1 = 0xe1;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sbit P60 = P6^0;
sbit P61 = P6^1;
sbit P62 = P6^2;
sbit P63 = P6^3;
sbit P64 = P6^4;
sbit P65 = P6^5;
sbit P66 = P6^6;
sbit P67 = P6^7;
sbit P70 = P7^0;
sbit P71 = P7^1;
sbit P72 = P7^2;
sbit P73 = P7^3;
sbit P74 = P7^4;
sbit P75 = P7^5;
sbit P76 = P7^6;
sbit P77 = P7^7;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define P0PU (*(unsigned char volatile xdata *)0xfe10)
#define P1PU (*(unsigned char volatile xdata *)0xfe11)
#define P2PU (*(unsigned char volatile xdata *)0xfe12)
#define P3PU (*(unsigned char volatile xdata *)0xfe13)
#define P4PU (*(unsigned char volatile xdata *)0xfe14)
#define P5PU (*(unsigned char volatile xdata *)0xfe15)
#define P6PU (*(unsigned char volatile xdata *)0xfe16)
#define P7PU (*(unsigned char volatile xdata *)0xfe17)
#define P0NCS (*(unsigned char volatile xdata *)0xfe18)
#define P1NCS (*(unsigned char volatile xdata *)0xfe19)
#define P2NCS (*(unsigned char volatile xdata *)0xfe1a)
#define P3NCS (*(unsigned char volatile xdata *)0xfe1b)
#define P4NCS (*(unsigned char volatile xdata *)0xfe1c)
#define P5NCS (*(unsigned char volatile xdata *)0xfe1d)
#define P6NCS (*(unsigned char volatile xdata *)0xfe1e)
#define P7NCS (*(unsigned char volatile xdata *)0xfe1f)
//系统管理特殊功能寄存器
sfr PCON = 0x87;
#define SMOD 0x80
#define SMOD0 0x40
#define LVDF 0x20
#define POF 0x10
#define GF1 0x08
#define GF0 0x04
#define PD 0x02
#define IDL 0x01
sfr AUXR = 0x8e;
#define T0x12 0x80
#define T1x12 0x40
#define UART_M0x6 0x20
#define T2R 0x10
#define T2_CT 0x08
#define T2x12 0x04
#define EXTRAM 0x02
#define S1ST2 0x01
sfr AUXR2 = 0x97;
#define TXLNRX 0x10
sfr BUS_SPEED = 0xa1;
sfr P_SW1 = 0xa2;
sfr P_SW2 = 0xba;
#define EAXFR 0x80
sfr VOCTRL = 0xbb;
sfr RSTCFG = 0xff;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01)
#define IRC24MCR (*(unsigned char volatile xdata *)0xfe02)
#define XOSCCR (*(unsigned char volatile xdata *)0xfe03)
#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04)
//中断特殊功能寄存器
sfr IE = 0xa8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr IE2 = 0xaf;
#define ET4 0x40
#define ET3 0x20
#define ES4 0x10
#define ES3 0x08
#define ET2 0x04
#define ESPI 0x02
#define ES2 0x01
sfr IP = 0xb8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr IP2 = 0xb5;
#define PI2C 0x40
#define PCMP 0x20
#define PX4 0x10
#define PPWMFD 0x08
#define PPWM 0x04
#define PSPI 0x02
#define PS2 0x01
sfr IPH = 0xb7;
#define PPCAH 0x80
#define PLVDH 0x40
#define PADCH 0x20
#define PSH 0x10
#define PT1H 0x08
#define PX1H 0x04
#define PT0H 0x02
#define PX0H 0x01
sfr IP2H = 0xb6;
#define PI2CH 0x40
#define PCMPH 0x20
#define PX4H 0x10
#define PPWMFDH 0x08
#define PPWMH 0x04
#define PSPIH 0x02
#define PS2H 0x01
sfr INTCLKO = 0x8f;
#define EX4 0x40
#define EX3 0x20
#define EX2 0x10
#define T2CLKO 0x04
#define T1CLKO 0x02
#define T0CLKO 0x01
sfr AUXINTIF = 0xef;
#define INT4IF 0x40
#define INT3IF 0x20
#define INT2IF 0x10
#define T4IF 0x04
#define T3IF 0x02
#define T2IF 0x01
//定时器特殊功能寄存器
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
#define T1_GATE 0x80
#define T1_CT 0x40
#define T1_M1 0x20
#define T1_M0 0x10
#define T0_GATE 0x08
#define T0_CT 0x04
#define T0_M1 0x02
#define T0_M0 0x01
sfr TL0 = 0x8a;
sfr TL1 = 0x8b;
sfr TH0 = 0x8c;
sfr TH1 = 0x8d;
sfr T4T3M = 0xd1;
#define T4R 0x80
#define T4_CT 0x40
#define T4x12 0x20
#define T4CLKO 0x10
#define T3R 0x08
#define T3_CT 0x04
#define T3x12 0x02
#define T3CLKO 0x01
sfr T4H = 0xd2;
sfr T4L = 0xd3;
sfr T3H = 0xd4;
sfr T3L = 0xd5;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr TH4 = 0xd2;
sfr TL4 = 0xd3;
sfr TH3 = 0xd4;
sfr TL3 = 0xd5;
sfr TH2 = 0xd6;
sfr TL2 = 0xd7;
sfr WKTCL = 0xaa;
sfr WKTCH = 0xab;
#define WKTEN 0x80
sfr WDT_CONTR = 0xc1;
#define WDT_FLAG 0x80
#define EN_WDT 0x20
#define CLR_WDT 0x10
#define IDL_WDT 0x08
//串行口特殊功能寄存器
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9a;
#define S2SM0 0x80
#define S2ST4 0x40
#define S2SM2 0x20
#define S2REN 0x10
#define S2TB8 0x08
#define S2RB8 0x04
#define S2TI 0x02
#define S2RI 0x01
sfr S2BUF = 0x9b;
sfr S3CON = 0xac;
#define S3SM0 0x80
#define S3ST4 0x40
#define S3SM2 0x20
#define S3REN 0x10
#define S3TB8 0x08
#define S3RB8 0x04
#define S3TI 0x02
#define S3RI 0x01
sfr S3BUF = 0xad;
sfr S4CON = 0x84;
#define S4SM0 0x80
#define S4ST4 0x40
#define S4SM2 0x20
#define S4REN 0x10
#define S4TB8 0x08
#define S4RB8 0x04
#define S4TI 0x02
#define S4RI 0x01
sfr S4BUF = 0x85;
sfr SADDR = 0xa9;
sfr SADEN = 0xb9;
//ADC 特殊功能寄存器
sfr ADC_CONTR = 0xbc;
#define ADC_POWER 0x80
#define ADC_START 0x40
#define ADC_FLAG 0x20
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr ADCCFG = 0xde;
#define ADC_RESFMT 0x20
//SPI 特殊功能寄存器
sfr SPSTAT = 0xcd;
#define SPIF 0x80
#define WCOL 0x40
sfr SPCTL = 0xce;
#define SSIG 0x80
#define SPEN 0x40
#define DORD 0x20
#define MSTR 0x10
#define CPOL 0x08
#define CPHA 0x04
sfr SPDAT = 0xcf;
//IAP/ISP 特殊功能寄存器
sfr IAP_DATA = 0xc2;
sfr IAP_ADDRH = 0xc3;
sfr IAP_ADDRL = 0xc4;
sfr IAP_CMD = 0xc5;
#define IAP_IDL 0x00
#define IAP_READ 0x01
#define IAP_WRITE 0x02
#define IAP_ERASE 0x03
sfr IAP_TRIG = 0xc6;
sfr IAP_CONTR = 0xc7;
#define IAPEN 0x80
#define SWBS 0x40
#define SWRST 0x20
#define CMD_FAIL 0x10
sfr ISP_DATA = 0xc2;
sfr ISP_ADDRH = 0xc3;
sfr ISP_ADDRL = 0xc4;
sfr ISP_CMD = 0xc5;
sfr ISP_TRIG = 0xc6;
sfr ISP_CONTR = 0xc7;
//比较器特殊功能寄存器
sfr CMPCR1 = 0xe6;
#define CMPEN 0x80
#define CMPIF 0x40
#define PIE 0x20
#define NIE 0x10
#define PIS 0x08
#define NIS 0x04
#define CMPOE 0x02
#define CMPRES 0x01
sfr CMPCR2 = 0xe7;
#define INVCMPO 0x80
#define DISFLT 0x40
//PCA/PWM 特殊功能寄存器
sfr CCON = 0xd8;
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF3 = CCON^3;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xd9;
#define CIDL 0x80
#define ECF 0x01
sfr CL = 0xe9;
sfr CH = 0xf9;
sfr CCAPM0 = 0xda;
#define ECOM0 0x40
#define CCAPP0 0x20
#define CCAPN0 0x10
#define MAT0 0x08
#define TOG0 0x04
#define PWM0 0x02
#define ECCF0 0x01
sfr CCAPM1 = 0xdb;
#define ECOM1 0x40
#define CCAPP1 0x20
#define CCAPN1 0x10
#define MAT1 0x08
#define TOG1 0x04
#define PWM1 0x02
#define ECCF1 0x01
sfr CCAPM2 = 0xdc;
#define ECOM2 0x40
#define CCAPP2 0x20
#define CCAPN2 0x10
#define MAT2 0x08
#define TOG2 0x04
#define PWM2 0x02
#define ECCF2 0x01
sfr CCAPM3 = 0xdd;
#define ECOM3 0x40
#define CCAPP3 0x20
#define CCAPN3 0x10
#define MAT3 0x08
#define TOG3 0x04
#define PWM3 0x02
#define ECCF3 0x01
sfr CCAP0L = 0xea;
sfr CCAP1L = 0xeb;
sfr CCAP2L = 0xec;
sfr CCAP3L = 0xed;
sfr CCAP0H = 0xfa;
sfr CCAP1H = 0xfb;
sfr CCAP2H = 0xfc;
sfr CCAP3H = 0xfd;
sfr PCA_PWM0 = 0xf2;
sfr PCA_PWM1 = 0xf3;
sfr PCA_PWM2 = 0xf4;
sfr PCA_PWM3 = 0xf5;
//增强型PWM波形发生器特殊功能寄存器
sfr PWMCFG = 0xf1;
#define CBIF 0x80
#define ETADC 0x40
sfr PWMIF = 0xf6;
#define C7IF 0x80
#define C6IF 0x40
#define C5IF 0x20
#define C4IF 0x10
#define C3IF 0x08
#define C2IF 0x04
#define C1IF 0x02
#define C0IF 0x01
sfr PWMFDCR = 0xf7;
#define INVCMP 0x80
#define INVIO 0x40
#define ENFD 0x20
#define FLTFLIO 0x10
#define EFDI 0x08
#define FDCMP 0x04
#define FDIO 0x02
#define FDIF 0x01
sfr PWMCR = 0xfe;
#define ENPWM 0x80
#define ECBI 0x40
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define PWMC (*(unsigned int volatile xdata *)0xfff0)
#define PWMCH (*(unsigned char volatile xdata *)0xfff0)
#define PWMCL (*(unsigned char volatile xdata *)0xfff1)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define TADCP (*(unsigned char volatile xdata *)0xfff3)
#define TADCPH (*(unsigned char volatile xdata *)0xfff3)
#define TADCPL (*(unsigned char volatile xdata *)0xfff4)
#define PWM0T1 (*(unsigned int volatile xdata *)0xff00)
#define PWM0T1H (*(unsigned char volatile xdata *)0xff00)
#define PWM0T1L (*(unsigned char volatile xdata *)0xff01)
#define PWM0T2 (*(unsigned int volatile xdata *)0xff02)
#define PWM0T2H (*(unsigned char volatile xdata *)0xff02)
#define PWM0T2L (*(unsigned char volatile xdata *)0xff03)
#define PWM0CR (*(unsigned char volatile xdata *)0xff04)
#define PWM0HLD (*(unsigned char volatile xdata *)0xff05)
#define PWM1T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM1T1H (*(unsigned char volatile xdata *)0xff10)
#define PWM1T1L (*(unsigned char volatile xdata *)0xff11)
#define PWM1T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM1T2H (*(unsigned char volatile xdata *)0xff12)
#define PWM1T2L (*(unsigned char volatile xdata *)0xff13)
#define PWM1CR (*(unsigned char volatile xdata *)0xff14)
#define PWM1HLD (*(unsigned char volatile xdata *)0xff15)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM2T1H (*(unsigned char volatile xdata *)0xff20)
#define PWM2T1L (*(unsigned char volatile xdata *)0xff21)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM2T2H (*(unsigned char volatile xdata *)0xff22)
#define PWM2T2L (*(unsigned char volatile xdata *)0xff23)
#define PWM2CR (*(unsigned char volatile xdata *)0xff24)
#define PWM2HLD (*(unsigned char volatile xdata *)0xff25)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM3T1H (*(unsigned char volatile xdata *)0xff30)
#define PWM3T1L (*(unsigned char volatile xdata *)0xff31)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM3T2H (*(unsigned char volatile xdata *)0xff32)
#define PWM3T2L (*(unsigned char volatile xdata *)0xff33)
#define PWM3CR (*(unsigned char volatile xdata *)0xff34)
#define PWM3HLD (*(unsigned char volatile xdata *)0xff35)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM4T1H (*(unsigned char volatile xdata *)0xff40)
#define PWM4T1L (*(unsigned char volatile xdata *)0xff41)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM4T2H (*(unsigned char volatile xdata *)0xff42)
#define PWM4T2L (*(unsigned char volatile xdata *)0xff43)
#define PWM4CR (*(unsigned char volatile xdata *)0xff44)
#define PWM4HLD (*(unsigned char volatile xdata *)0xff45)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff50)
#define PWM5T1H (*(unsigned char volatile xdata *)0xff50)
#define PWM5T1L (*(unsigned char volatile xdata *)0xff51)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff52)
#define PWM5T2H (*(unsigned char volatile xdata *)0xff52)
#define PWM5T2L (*(unsigned char volatile xdata *)0xff53)
#define PWM5CR (*(unsigned char volatile xdata *)0xff54)
#define PWM5HLD (*(unsigned char volatile xdata *)0xff55)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff60)
#define PWM6T1H (*(unsigned char volatile xdata *)0xff60)
#define PWM6T1L (*(unsigned char volatile xdata *)0xff61)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff62)
#define PWM6T2H (*(unsigned char volatile xdata *)0xff62)
#define PWM6T2L (*(unsigned char volatile xdata *)0xff63)
#define PWM6CR (*(unsigned char volatile xdata *)0xff64)
#define PWM6HLD (*(unsigned char volatile xdata *)0xff65)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff70)
#define PWM7T1H (*(unsigned char volatile xdata *)0xff70)
#define PWM7T1L (*(unsigned char volatile xdata *)0xff71)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff72)
#define PWM7T2H (*(unsigned char volatile xdata *)0xff72)
#define PWM7T2L (*(unsigned char volatile xdata *)0xff73)
#define PWM7CR (*(unsigned char volatile xdata *)0xff74)
#define PWM7HLD (*(unsigned char volatile xdata *)0xff75)
//I2C特殊功能寄存器
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
#define ENI2C 0x80
#define MSSL 0x40
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
#define EMSI 0x80
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
#define MSBUSY 0x80
#define MSIF 0x40
#define MSACKI 0x02
#define MSACKO 0x01
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
#define ESTAI 0x40
#define ERXI 0x20
#define ETXI 0x10
#define ESTOI 0x08
#define SLRST 0x01
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
#define SLBUSY 0x80
#define STAIF 0x40
#define RXIF 0x20
#define TXIF 0x10
#define STOIF 0x08
#define TXING 0x04
#define SLACKI 0x02
#define SLACKO 0x01
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)
/////////////////////////////////////////////////
#endif

278
source/ctask/TTSS_task.c.bak

@ -1,278 +0,0 @@
/*****************************************************
*============================================================================
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
20220830_23642 CCmodify task handdle
*============================================================================
****************************************************************************/
#include "TTSS_task.h"
//任务命名规则:
// 1:第一层
/// 0驱动芯片级 flash
/// 1芯片应用级 save
/// 2任务应用级 jilu_save
//
// 2:第二层/flash/i2c/7290/等各类芯片
// 3:任务序号/不同的芯片/
//
TS_task ts_task_init =
{
0, ///vU32 n;
/// volatile UN_TYPE en; //关闭任务,也可以理解为暂停,但是使用idelay的地方时间在后台计数任务在延时到了后才暂停,而的delay相当于暂停
0, ///volatile UN_TYPE sh; //当前任务段
0 ///volatile UN_TYPE sh_next; //下一个任务段,并不代表一定下一任务段一定是他,有可能中间插入延时等任务段
/// volatile UN_TYPE sh_pre; //前一个任务段,一般为调出缓存任务段使用
};
void L1_task_reg_clear(TS_task *s)
{
// s->en = 1;
// s->pfun = 0;
s->sh = 0;
s->sh_next= 0;
/// s->sh_pre= 0;
s->n= 0;
}
/////>>>>>>>>>>>>>>>>>>>>>>>>>>>>>供演示task 结构的使用 不可删除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define D_task_test_01 0x20
#define D_task_test_02 0x22
#define D_task_test_03 0x23
#ifdef D_debug_task_test
////>>>>>>>>>>>>>>>>>>>>>_s_task_test_>>>>>>>>>>>>>>>>>>>>>>
TS_task_test_ ts_task_test;
void L2_task_test_register(void)
{
ddd
L1_task_reg_clear(&ts_task_test.task);
L3_task_s_go(ts_task_test,D_task_init);
}
///L2_task_test_handle(&ts_task_test);
void L2_task_test_handle(TS_task_test_ *s)
{
unsigned char d = 0;
TTSS_Task_init():
L2_task_go(D_task_test_01);
TTSS_Task_step(D_task_test_01):
if(d > 8)
{
d = 0;
L2_task_go(D_task_test_02);
L1_task_Cdelay(D_Cdelay_200us);
}else
{
d ++;
}
TTSS_Task_step(D_task_test_02):
if(d > 4)
{
d = 0;
L2_task_go(D_task_test_01);
L1_task_Tdelay(D_Tdelay_100ms);
}else
{
d ++;
}
TTSS_Task_end();
}
#endif//#ifdef D_debug_task_test
////<<<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<
//example :
#if 0
//L2_task_voice_handle(&s_task_music.task);
//L1_task_go(D_task_close);
//if(L1_task_busy(s)){ L1_task_goout(s_task_music.task,D_task_voice_send_single) }
void L2_task_voice_handle(struct _s_task_music_ *s)
{ //s_task_music.task.sh
switch(s->task.sh)
{
case D_task_voice_init://
s->sector = 0;
break;
case D_task_voice_cuimian :
s->sector = D_voice_music_wantsleep;
L2_task_go_son(D_task_voice_play,D_task_voice_cuimian1);
break;
case D_task_voice_cuimian1://
L2_task_go(D_task_voice_cuimian2);
break;
case D_task_voice_cuimian2://
if(0 == s->volume_change)
{
//L3_voice_stop();
s->sector = D_voice_stop;
s->status = D_voice_status_stop;
//L2_task_go(D_task_voice_play);
L2_task_go_son(D_task_voice_play,0);
}else
{
s->volume_change --;
s->volume_temp = s->volume;
s->volume = s->volume_change*s->volume_shop/20;//
if (s->volume_temp != s->volume)
{
s->sector = D_voice_volume|s->volume;
//s->status = D_voice_status_stop;
//L2_task_go(D_task_voice_volume3);
L2_task_go_son(D_task_voice_play,D_task_voice_cuimian2);
}
//else
{
L2_task_delay(D_task_delay_1m);
}
}
break;
//>>>>>>>>>>>>>>>>>> son function
case D_task_voice_play://
if(L3_task_s_busy(s_task_wt558d))
{
}else
{
s_task_wt558d.reg = s_task_music.sector;
L3_task_s_go(s_task_wt558d,D_task_wt558d_fun);
L2_task_go(D_task_voice_ask);
}
break;
case D_task_voice_ask://
if(L3_task_s_busy(s_task_wt558d))
{
}else
{
L2_task_go_father();//回到
}
break;
//<<<<<<<<<<<<<<<<<<<<<< son function
//-----------------------task standerd code
case D_task_Tdelay://----
s->task.n--;
if (s->task.n == 0)
{
s->task.n = 0;
L2_task_delay_over();
}
break;
default :
break;
}
L2_task_wt558d_handle(&s_task_wt558d);
}
void L2_task_voice_handle(struct _s_task_music_ *s)
{ //s_task_music.task.sh
switch(s->task.sh)
{
case D_task_voice_init://
s->sector = 0;
break;
case D_task_voice_cuimian :
s->sector = D_voice_music_wantsleep;
L2_task_go_son(D_task_voice_play,D_task_voice_cuimian1);
break;
case D_task_voice_cuimian1://
L2_task_go(D_task_voice_cuimian2);
break;
//-----------------------task standerd code
case D_task_Tdelay://----
s->task.n--;
if (s->task.n == 0)
{
s->task.n = 0;
L2_task_delay_over();
}
break;
default :
break;
}
L2_task_wt558d_handle(&s_task_wt558d);
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//>>>>>>>>>>>>>>>>>>>>>记录task
struct _s_task_4ChuShengRiQi_
{
TS_task task;
unsigned char pic_id;//画面ID
};
extern struct _s_task_4ChuShengRiQi_ s_task_4ChuShengRiQi_;
#define D_task_4ChuShengRiQi_init 0x10
#define D_task_4ChuShengRiQi_key 0x11
extern void L2_task_4ChuShengRiQi_handle(struct _s_task_4ChuShengRiQi_ *s);
void L2_task_4ChuShengRiQi_handle(struct _s_task_4ChuShengRiQi_ *s)
{
switch(s->task.sh)
{
case D_task_4ChuShengRiQi_init://
s->pic_id= 0;
break;
case D_task_4ChuShengRiQi_key :
if(1 == s_task_keyx1.down )
{
s_task_keyx1.down = 0;
if(D_keyx_left == s_task_keyx1.key_value)
{}
}else if(1 == s_task_keyx_4.down)
{
s_task_keyx_4.down = 0;
}
else {}
//L2_task_go_son(D_task_4ChuShengRiQi_play,D_task_4ChuShengRiQi_cuimian1);
break;
L0_task_delay();
}
}
//<<<<<<<<<<<<<<<<<<<记录task
/////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<供演示task 结构的使用 不可删除<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#endif

411
source/ctask/TTSS_task.h.bak

@ -1,411 +0,0 @@
/********************************
2013.7.23 add dictionary and task step by cc
:task
:task step
:sh ( struct handle)
sh_next
,sh_next执行完后执行sh_pre
***************************/
/*****************************************************
*==============================================================
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
*==============================================================
20190217 and step01 delay_n添加括号保护
20190713 add TTSS_Cycle_every_init
202005103 add ; change :
20210102 add by cc
20210411 add by cc
////代码套路化,符合自然语言的拟人化,为将来自动生成代码做准备
#define TTSS_AreUok(overVal,timerx,printChar)
20220830_23642 CCmodify task handdle
****************************************************************************/
#ifndef _TTSS_TASK_H_
#define _TTSS_TASK_H_
#include "TTSS_tick.h"
typedef struct
{
vU32 n;
/// volatile UN_TYPE en; //关闭任务,也可以理解为暂停,但是使用idelay的地方时间在后台计数任务在延时到了后才暂停,而的delay相当于暂停
volatile UN_TYPE sh; //当前任务段
volatile UN_TYPE sh_next; //下一个任务段,并不代表一定下一任务段一定是他,有可能中间插入延时等任务段
/// volatile UN_TYPE sh_pre; //前一个任务段,一般为调出缓存任务段使用
}TS_task;
//extern TS_task ts_task_stcadc;
#define D_task_close 0
extern TS_task ts_task_init;
#if 0
#define D_task_Tdelay 0x01
#define D_task_stop 0x04
#define D_task_Cdelay 0x09
#define D_task_init 0x10
#define D_task_quit 0xf0
#else
#define D_task_Tdelay 0xe1
#define D_task_stop 0xe4
#define D_task_Cdelay 0xe9
#define D_task_init 0xe0
#define D_task_quit 0xf0
#endif
#define TTS_for_add(i,start,len) for((i) = (start); (i) < (len); (i) ++){
#define TTS_for_add_end() }
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>内部调用 s->task
#define L2_task_delay_over() s->task.sh = s->task.sh_next
#define L2_task_go(next) s->task.sh = next
#define L2_task_en(onf) s->task.en = onf
#define L2_task_exit(next) s->task.sh = 0
#define L2_task_busy(s) (D_task_close != s.task.sh)
#define L2_task_free(s) (D_task_close == s.task.sh)
#define L2_task_go_father() s->task.sh = s->task.sh_pre
#define L2_task_go_son(fun,pre) s->task.sh = fun;s->task.sh_pre = pre
//>task 定时>>>>>>>>>>>>>>TTSS
/// D_task_Tdelay == task timer delay 需要额外有个定时单元 和time0定时器设置相关
/// Delay_cycle适用于 时间短的,其一次循环取决于主循环的时间,和Tdelay比,Cdelay长时间计时误差大
#define L2_task_switch_default_idelay(); \
case D_task_Tdelay:\
if (TTSS_GetTick() >= s->task.n)\
{\
L2_task_delay_over();\
}\
break; \
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
} \
break;\
default : \
break;
#if 0
#define L2_task_switch_default_idelay2(); \
case D_task_Tdelay:\
if (TTSS_GetTick() >= s->task.n)\
{\
L2_task_delay_over();\
}else\
{\
L2_time_beat_heart(D_TBH_ch0,3,'i');\
}\
break; \
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
} \
break;\
default : \
break;
//在等待的过程中设置间隔时间,定时调用funxx
//这样在等待的空闲时间可以定时显示一些心跳信息和
//执行心跳功能
#define L2_task_switch_fun_idelay(invent,ch) L2_task_switch_default_idelay()
#define L2_task_switch_fun_idelay0000(chhh,invent,funxx); \
case D_task_Tdelay:\
if (TTSS_GetTick() >= s->task.n)\
{\
L2_task_delay_over();\
}else\
{\
L2_time_beat_heart_fun(chhh,invent,funxx);\
}\
break; \
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
} \
break;\
default : \
break;
//在等待的过程中设置间隔时间,定时显示字符ch
//这样在等待的空闲时间可以定时显示一些待机信息ch
// 通过ch表明目前运行的阶段和心跳信息
#define L2_task_switch_flag_idelay(invent,ch) L2_task_switch_default_idelay()
#define L2_task_switch_flag_idelay000(invent,ch); \
case D_task_Tdelay:\
if (TTSS_GetTick() >= s->task.n)\
{\
L2_task_delay_over();\
}else\
{\
L2_time_beat_heart(D_TBH_ch0,invent,ch);\
}\
break; \
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
} \
break;\
default : \
break;
TTSS_Task_init, Highlight
TTSS_Task_step, Highlight
TTSS_Task_end, Highlight
L2_task_go, Highlight
L1_task_Tdelay, Highlight
L1_task_Cdelay, Highlight
L2_task_go, Highlight
#endif
//if(delay_n+s_time0.t_10ms > 655340)
//{s_time0.t_10ms = 0;}
//fix 201312 防止s_time0.t_10ms 溢出
// 但是有风险
//>>L2_task_delay一定要放在L2_task_go之后
#define L1_task_Tdelay(delay_n) s->task.sh_next = s->task.sh;\
s->task.sh = D_task_Tdelay;\
s->task.n = (delay_n) + TTSS_GetTick();
//>>L2_task_delay一定要放在L2_task_go之后
#define L1_task_Cdelay(delay_n) s->task.sh_next = s->task.sh;\
s->task.sh = D_task_Cdelay;\
s->task.n = (delay_n)
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<内部调用 s->task
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 外部调用
#define L2_task_s_go_son(s,fun,pre) (s).task.sh = fun;(s).task.sh_pre = pre;
#define L3_task_s_time_start(s,delay) (s).task.n = delay+s_nos_tick.t_1s;
#define L3_task_s_go(s,next) (s).task.sh = next;
#define L3_task_s_en(s,onf) (s).task.en = onf;
//L1_task_goout(s_task_music.task,D_task_close);
#define L3_task_s_busy(s) (D_task_close != (s).task.sh)
#define L3_task_s_free(s) (D_task_close == (s).task.sh)
#define L3_task_s_step(s) ((s).task.sh)
#define D_task_uc unsigned char
#define D_task_ui unsigned int
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define TTSS_Task_init() switch(s->task.sh){\
case D_task_init
#define TTSS_Task_step(step) break;\
case (step)
#define TTSS_step01(step) break;case (step)
#define TTSS_step02(step) break;case (step)
#define TTSS_step03(step) break;case (step)
#define TTSS_step04(step) break;case (step)
#define TTSS_step05(step) break;case (step)
#define TTSS_step06(step) break;case (step)
#define TTSS_step07(step) break;case (step)
#define TTSS_step08(step) break;case (step)
#define TTSS_step09(step) break;case (step)
#define TTSS_step10(step) break;case (step)
#define TTSS_step11(step) break;case (step)
#define TTSS_step12(step) break;case (step)
#define TTSS_Task_end(); break;\
L2_task_switch_default_idelay();}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern void L1_task_reg_clear(TS_task *s);
#define L2_task_go_Tdelay(next,delay_n) do{ \
if(delay_n) \
{ \
s->task.sh_next = next;\
s->task.sh = D_task_Tdelay;\
s->task.n = (delay_n) + TTSS_GetTick(); \
} \
else \
{ \
s->task.sh = next; \
} \
}while(0)
#define L2_task_go_Cdelay(next,delay_n) do{ \
if(delay_n) \
{ \
s->task.sh_next = next;\
s->task.sh = D_task_Cdelay;\
s->task.n = (delay_n); \
} \
else \
{ \
s->task.sh = next; \
} \
}while(0)
#define L2_task_Tdelay_go(delay_n,next) do{ \
if(delay_n) \
{ \
s->task.sh_next = next;\
s->task.sh = D_task_Tdelay;\
s->task.n = (delay_n) + TTSS_GetTick(); \
} \
else \
{ \
s->task.sh = next; \
} \
}while(0)
#define L2_task_Cdelay_go(delay_n,next) do{ \
if(delay_n) \
{ \
s->task.sh_next = next;\
s->task.sh = D_task_Cdelay;\
s->task.n = (delay_n); \
} \
else \
{ \
s->task.sh = next; \
} \
}while(0)
////>>>>>>>>>>>>>>>>>>>_s_task_test_>>>>>>>>>>>>>>>>>>>>>>>>
#ifdef D_debug_task_test
typedef struct
{
TS_task task;
}TS_task_test_;
extern TS_task_test_ ts_task_test;
extern void L2_task_test_handle(TS_task_test_ *s);
extern void L2_task_test_init(void);
#else
#define L2_task_test_handle(x);
#define L2_task_test_init();
#endif//#ifdef D_debug_task_test
////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<<
////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<<
////设定溢出时间 如果到了就进行执行某个操作,
////和溢出时间到了就"一直"做事 适合中间任务需要间隔的情况 和wanttime有次数上的区别
#define TTSS_overtime_init(X,delay); (X) = TTSS_GetTick() + delay;
#define TTSS_overtime_get(X) if( (X) < TTSS_GetTick()) {
#define TTSS_overtime_end }
#define TTSS_overtime_daole(X) ( (X) <TTSS_GetTick() )
////设定闹钟,其特点是到了时间点执行一次即退出
////适合闹钟 以及特定动作时间溢出后执行一次的场景
//// 没有按键 超时1分钟 屏幕关闭
#define TTSS_wanttime_init(X,delay); TTSS_overtime_init(X,delay);
#define TTSS_wanttime_get(X) if(X)\
{\
if( (X) < TTSS_GetTick())\
{X = 0;\
#define TTSS_wanttime_end }\
}
/// 放在任务节点?每delay时间欿执行以下功能 x必须在对应的任务里是独一无二瘿
#define TTSS_run_every_init(X,delay); TTSS_overtime_init((X),delay);
#define TTSS_run_every(X,delay) if( (X) < TTSS_GetTick()) { TTSS_run_every_init(X,delay);
#define TTSS_run_every0(X,delay) if(0){
#define TTSS_run_every_end }
#define TTSS_Cycle_every_init(X); (X) = 0;
#define TTSS_Cycle_every(X,delay) if( X++ > delay) { TTSS_Cycle_every_init(X);
#define TTSS_Cycle_every0(X,delay) if(0){
#define TTSS_Cycle_every_end }
#define TTSS_run_times(X,n) for(X = 0;X < n;X ++)
#define TTSS_run_overflow(X,n) if(X++ > n)
//////are you ok ,使用任务变量 overVal(全局变量不可随意嵌套使用),
///// timerx: 问候的时间间隔
///// printChar 应答的内容(单字符,arccii字符可打印字符最佳)
////代码套路化,符合自然语言的拟人化,为将来自动生成代码做准备
#define TTSS_AreUok(overVal,timerx,printChar) \
TTSS_overtime_get(overVal) \
L0_uart0_uc(printChar); \
TTSS_overtime_init(overVal,timerx);\
TTSS_overtime_end
#endif//_TASK_H_
/*****************************************************
*==============================================================
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
*==============================================================
****************************************************************************/

228
source/ctask/TTSS_tick.h.bak

@ -1,228 +0,0 @@
/*****************************************************************************
* uart.h: Header file for NXP LPC17xx Family Microprocessors
*
* Copyright (c) 2023 CCSENS
* All rights reserved.
*
* History
* 2009.05.27 ver 1.00 Prelimnary version, first Release
*2017.01.10 ver 1.10 rename TTSS_tick.h tick.c
*2021.12.12 ver 2.10 detail
*2022.02.15 ver 2.20 stm32 version
******************************************************************************/
/*****************************************************
*============================================================================
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
*============================================================================
****************************************************************************/
#ifndef __tick_H
#define __tick_H
#include "bsp_config.h"
#define D_use_tick_fum
typedef struct
{
vU32 jiffies; // noos系统定时器最小技术单元
vU32 t_1s;
vU32 stamp;
vU8 t1s_heartbeat; //noos 系统定时器整秒时刻标志,需要软件清除
vtype print_heartbeat;
void (*uart1_overtime_callback)(void);///需要哪个注册哪个 必备步骤1(method step 1)
void (*uart2_overtime_callback)(void);///需要哪个注册哪个 必备步骤1(method step 1)
void (*uart3_overtime_callback)(void);///需要哪个注册哪个 必备步骤1(method step 1)
void (*uart4_overtime_callback)(void);///需要哪个注册哪个 必备步骤1(method step 1)
///vtype (*uart3_ overtime_fun)(void);///需要哪个注册哪个 必备步骤1(method step 1)
///vtype (*uart4_ overtime_fun)(void);///需要哪个注册哪个 必备步骤1(method step 1)
}TS_nos_tick_;
extern TS_nos_tick_ s_nos_tick;
#if(TYPE_JIFFIES_5MS == D_sys_Jiffies)
#define HZ 200L
#elif(TYPE_JIFFIES_10MS == D_sys_Jiffies)
#define HZ 100L
#elif(TYPE_JIFFIES_12MS == D_sys_Jiffies)
#define HZ 80L
#elif(TYPE_JIFFIES_25MS == D_sys_Jiffies)
#define HZ 50L
#endif
#define JIFFIES (1000L/HZ)
#define D_sys_now (s_nos_tick.jiffies)
//D_sys_delay_msec以jiffies为最小计时单位,jiffies是10ms为例,参数n=12ms时,最终延时了20ms
#define D_sys_delay_msec(n) do{ \
if(n>0) \
{ \
U32 mstmp = D_sys_now; \
while(D_sys_now - mstmp < (((n)-1)/JIFFIES) + 1); \
} \
}while(0)
///12.5ms 1000/12.5 = 80
#define D_Tdelay_Msec(n) (((n)-1) / JIFFIES + 1)
#define D_Tdelay_Sec(n) (((n)*1000-1) /JIFFIES + 1)
#define D_Tdelay_5ms ((5-1) / JIFFIES + 1)
#define D_Tdelay_10ms ((10-1) / JIFFIES + 1)
#define D_Tdelay_20ms ((20-1) / JIFFIES + 1)
#define D_Tdelay_30ms ((30-1) / JIFFIES + 1)
#define D_Tdelay_40ms ((40-1) / JIFFIES + 1)
#define D_Tdelay_50ms ((50-1) / JIFFIES + 1)
#define D_Tdelay_100ms ((100-1) / JIFFIES + 1)
#define D_Tdelay_200ms ((200-1) / JIFFIES+ 1)
#define D_Tdelay_300ms ((300-1) / JIFFIES + 1)
#define D_Tdelay_400ms ((400-1) / JIFFIES + 1)
#define D_Tdelay_500ms ((500-1) / JIFFIES + 1)
#define D_Tdelay_1s (1 * HZ)
#define D_Tdelay_2s (2 * HZ)
#define D_Tdelay_3s (3 * HZ)
#define D_Tdelay_4s (4 * HZ)
#define D_Tdelay_5s (5 * HZ)
#define D_Tdelay_10s (10 * HZ)
#define D_Tdelay_15s (15 * HZ)
#define D_Tdelay_1min (1 * 60 * HZ)
#define D_Tdelay_10min (10 * 60 * HZ)
#define D_Tdelay_1h (60 * 60 * HZ)
#define D_Tdelay_1day (24 * 60 * 60 * HZ)
#if (D_CPUfamily_32bits == D_CPUfamily_type)
#define TTSS_GetTick() HAL_GetTick()
#define TTSS_GetTick_1s() HAL_GetTick1S()///fixme
#else
#define TTSS_GetTick() (s_nos_tick.jiffies)
#define TTSS_GetTick_1s() (s_nos_tick.t_1s)
#endif
//>> 定时器: 初始化 间隔时间到
// L0_nos_tick10ms_start(s->times); 开始初始化s->times 以10ms为一个单位
// if( L0_nos_tick10ms_interval(s->times) < 20)// s->times 执行了20次后,也就是 定时20*10m到达
////使用是必须常数 + L 例如100L
//必须配对
#define L0_nos_tick10ms_start(start_n) start_n = TTSS_GetTick()
#define L0_nos_tick10ms_interval(start_n) (TTSS_GetTick() - start_n)
#define L0_nos_tick1s_start(start_n) start_n = HAL_GetTick1S()
#define L0_nos_tick1s_interval(start_n) (HAL_GetTick1S() - start_n)
#define L2_tick_time_space(times) (0 == (TTSS_GetTick()%times))////有bug 如果循环的间隔小于tick间隔,会重复执行
//>>>//必须配对
#define L2_tick_time_stamp(time_stamp) time_stamp = TTSS_GetTick();
#define L2_tick_time_interval(time_stamp,time_overflow) (( TTSS_GetTick() - time_stamp) > time_overflow)
////#define L3_tick_interval(x) L2_tick_time_interval(s_nos_tick.n_stamp,(U32)x)
///#define L3_tick_interval(x) (( TTSS_GetTick() - s_nos_tick.n_stamp) > x)////L2_tick_time_interval(s_nos_tick.n_stamp,(U32)x)
#define L2_tick_stamp() L2_tick_time_stamp(s_nos_tick.n_stamp);
#define L3_tick_interval(x) L2_tick_time_interval(s_nos_tick.n_stamp,x)////x的后面必须添加L,使用(u32)(vu32)均不可
#define D_print_heartbeat_nexttimes(); s_nos_tick.print_heartbeat = 1;//下一次再打印心跳
#define D_print_heartbeat_close(); s_nos_tick.print_heartbeat = 0;//停止打印心跳
#define D_print_heartbeat_ok() (1 == s_nos_tick.print_heartbeat)//允许打印心跳
#define D_print_heartbeat_disable() (0 == s_nos_tick.print_heartbeat)//允许打印心跳
#define D_print_heartbeat() \
if(D_print_heartbeat_disable()){\
D_print_heartbeat_nexttimes();\
}else
////L3_tick_interval(x)///计时时间到
////L2_tick_stamp() ///时间清零
//>>>示例如下:
#if 0
if(L3_tick_interval(10))
{
L2_tick_stamp();
}
{
case D_task_init://
Lc_print_buf(" \r\n YL_ init");
s->step = D_AT;
L0_esp_open();
L2_task_go(D_task_YL_ready);
s_uart0_rec.ok = 0;
L2_tick_time_stamp(s->t_stamp);
// L1_task_Tdelay(1*D_Tdelay_1s); //大约6s
break;
case D_task_YL_ready:
if(1 == s_uart0_rec.ok)
{
if(strstr(s_uart0_rec.array,"ready") != NULL)
{
Ldi_print("ready..\r\n");
s->step = D_AT;
L2_task_go(D_task_YL_ask);
}
s_uart0_rec.ok = 0;
}
if(L2_tick_time_stamp(s->t_stamp,1*D_Tdelay_1s))
{// 时间溢出
L0_esp_close();
Ldi_print("fail esp restart.\r\n");
L2_task_go(D_task_init);
L1_task_Tdelay(2*D_Tdelay_1s);
}
break;
}
#endif
// 他和t_10ms 关联,如果t_10ms递增为1时间隔为(D_TIMER0_10MS_COUNT*定时器间隔)
/// #define D_TIMER0_10MS_COUNT 1 //定时器为 10ms一中断
#ifdef D_use_tick_fum
extern void L1_task_tick_init(void);
extern void L1_task_tick_callback (void);
#else
#define L1_task_tick_init()
#define L1_task_tick_callback() s_nos_tick.t_10ms ++;
#endif
//L2_time_beat_heart(D_TBH_ch1,2,'t')
#define D_TBH_ch0 0
#define D_TBH_ch1 1
#define D_TBH_ch2 2
#define D_TBH_ch3 3
#define D_TBH_ch4 4
#define D_TBH_ch5 5
extern void L2_time_beat_heart(vU32 ch,U8 invent,U8 s);
//void L2_time_beat_heart_fun(INT32U ch,unsigned char invent,void *fun(void));
extern void L2_time_beat_heart_fun(vU32 ch,U8 invent,void (*fun)(void));
#endif /* end __tick_H */
/*****************************************************************************
** End Of File
******************************************************************************/

93
source/ctask/TTSS_time_stc.c.bak

@ -1,93 +0,0 @@
#include "ttss_time_stc.h"
#define D_TIMER_COUNT(t,clk,timeInUs) (U16)(65536 - (clk) / 1000 * timeInUs / 1000 / t)
/*************初始化定时器0由 stc-isp v6.86L定时器计算器生成******************/
#if(MainFre_5M == D_sys_MainFre)
#elif(MainFre_22M == D_sys_MainFre)
void L0_timer0_Init(void)//void Timer0Init(void) //12500微秒@22.1184MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0xA6; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
#elif(MainFre_27M == D_sys_MainFre)
#elif(MainFre_44M == D_sys_MainFre)
void L0_timer0_Init(void)/////void Timer0Init(void) //12.5m秒@44.0800MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xA3; //设置定时初始值
TH0 = 0x4C; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
void L0_timer4_Init(void)/////void Timer4_Init(void) //100微秒@44.2368MHz
{
T4T3M |= 0x20; //定时器时钟1T模式
T4L = 0xB8; //设置定时初始值
T4H = 0xEE; //设置定时初始值
T4T3M |= 0x80; //定时器4开始计时
}
#else ///MainFre_11M
////#warn
void L0_timer0_Init(void)
{
U16 val = D_TIMER_COUNT(12,D_sys_MainFre,D_sys_Jiffies * 1000);
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
//TL0 = 0x00; //设置定时初值
//TH0 = 0x4C; //设置定时初值
TL0 = val; //设置定时初值
TH0 = val >> 8; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
#endif//D_sys_MainFre)
#if 0
/// 65535*65535 /3600/24/365=139nian/s=1.39nian/10ms
///相当于1.39年后t_10ms 溢出,对于电池供电的系统而言 完全可以满足
// 4,294,836,225 = 65535*65535 ;3600*24*60*60 = 31,536,000秒/年
s_nos_tick.t_10ms ++;//D_led_D1_REV(); 20160522 验证
#endif
//10---87 10s
/********************** Timer0中断函数************************/
/// 和 L0_timer0_Init 关联,需要配置 bsp_config.h中的 D_sys_MainFre
/// 默认10ms 作为TTSS系统的定时引擎
void timer0_isrHandle (void) D_SERVE_TIMER0
{//
NOP(); NOP(); NOP();
TF0 = 0;
L1_task_tick_callback(); ///系统中的1sflag 和以10ms为颗粒的延时使用 为tdelay服务
/// BITN_1(DR_who_wakeup, DRB_who_wakeup_timer0);
NOP(); NOP(); NOP();
}
void L1_timer0_Init(void)
{
///step1:时钟
///step2:模块使能
///step3:启动
///step4:模块中断使能
///step5:全局中断使能
L0_timer0_Init();
ET0 = 1;///经常因为替换L0_timer0_Init(由stcisp例程生成) 改指令漏掉
}

23
source/ctask/TTSS_time_stc.h.bak

@ -1,23 +0,0 @@
#ifndef _TTSS_time_stc_
#define _TTSS_time_stc_
#include "../bsp/bsp_config.h"
#include "TTSS_tick.h"
extern void L0_timer0_Init(void);
extern void L0_timer0_Init_32k(void) ;
extern void L0_timer4_Init(void);
#define L0_timer0_open(x) TR0 = x //
// 他和t_10ms 关联,如果t_10ms递增为1时间隔为(D_TIMER0_10MS_COUNT*定时器间隔)
//#define D_TIMER0_10MS_COUNT 1 //定时器为 10ms一中断
#define D_TIMER0_10MS_COUNT 1 //定时器为 10ms一中断
#endif///_TTSS_time_

98
source/debug/debug_drv.c

@ -36,7 +36,8 @@ if(ts_s2b_debug.idle)
#include "msp_eeprom.h"
TS_P_debug *pd=NULL;
TS_P_debug *pd = NULL;
TS_P_rs485 *pd485 = NULL;
u8 L3_tpc_D2uart(u8 cmd,u8 num)
{
@ -65,30 +66,32 @@ u8 L3_tpc_D2uart(u8 cmd,u8 num)
}
////通过debug串口 透传协议
#if 0
u8 L3_tpc_hex(void)
{
u8 cmd=0,num=0;
u8 cmd=0, num=0;
cmd = D_uc_high(ts_Urec[D_UART1].sp[0]);////为485 调整 第一个
num = D_uc_low(ts_Urec[D_UART1].sp[0]);
printf(" 1->cmd=%X num=%X len = %d ",(int)cmd,(int)num, (int)ts_Urec[D_UART1].num);
////debug鍗忚�浣跨敤涓插彛1 鏁呰€屽啀娆$畝鍗曡В鏋� 瑕佹眰绗�竴涓�瓧绗﹀繀椤讳负Fx
////debug协议使用串口1 故而再次简单解析 要求第一个字符必须为Fx
if(0x0F == cmd)///fx r1 r2 r3 r4 ocr
{
///TS_P_debug
/// printfs("\r\n cmd = ");
///printfs("\r\n cmd = ");
////pd = (TS_P_debug*)ts_Urec[D_UART1].sp;
L0_uartN_Arrayhex_withoutbuf(D_UART1,&ts_Urec[D_UART1].sp[0], ts_Urec[D_UART1].num);////(U8 *)&pd,错误的表达方式 pd就是地址
if(num == 0x0e)
{
/// L3_tpc_FEdebug();return 0;
/// L3_tpc_FEdebug();return 0;
}
return 1;
}
if(L3_tpc_D2uart(cmd,num))
{
return 1;
}else
}
else
{
return 0;
}
@ -96,41 +99,67 @@ u8 L3_tpc_hex(void)
printfs("\r\n cmd error!!");
return 0;
}
#else
u8 L3_tpc_hex(void)
{
u8 filter = 0, slaveId = 0, cmd = 0;
filter = ts_Urec[D_UART1].sp[0];
slaveId = ts_Urec[D_UART1].sp[1];
cmd = ts_Urec[D_UART1].sp[2];
//printf(" 1->filter=%X slaveId=%X cmd=%X len = %d ",(int)filter,(int)slaveId, (int)cmd, (int)ts_Urec[D_UART1].num);
////debug协议使用串口1 故而再次简单解析 要求第一个字符必须为AA
///AA 02 10 00 02 A3 B4 6C
if(0xAA == filter)
{
//L0_uartN_Arrayhex_withoutbuf(D_UART1,&ts_Urec[D_UART1].sp[0], ts_Urec[D_UART1].num);
if(0x02 == slaveId)
{
// if(ocr)
return 1;
}
}
// printfs("\r\n cmd error!!");
return 0;
}
#endif
////启动透传指令 开关打开 可以模拟当前串口发送
vtype L2_debug_ONcomand(void)
{
if(1 == ts_Urec[D_UART1].debugok)
{ ts_Urec[D_UART1].debugok = 0;////瑙f瀽鍗忚�
/// printf("\r\nw ts_Urec[D_UART1].max = %d num = %d",(int)ts_Urec[D_UART1].rmax,(int)ts_Urec[D_UART1].num);
printf1("\r\ndebugok %2x",(int)ts_Urec[D_UART1].debugok);
{
ts_Urec[D_UART1].debugok = 0;////解析协议
/// printf("\r\nw ts_Urec[D_UART1].max = %d num = %d",(int)ts_Urec[D_UART1].rmax,(int)ts_Urec[D_UART1].num);
// printf1("\r\ndebugok %2x",(int)ts_Urec[D_UART1].debugok);
}
if(1 == ts_Urec[D_UART1].ok)
{ ts_Urec[D_UART1].ok = 0;////瑙f瀽鍗忚�
////printf1("\r\nD_UART1 ok %d ",(int) ts_Urec[D_UART1].num);
D_LED1_REV();
pd = (TS_P_debug *)ts_Urecbuf.r1;
/// L0_uartN_Arrayhex_withoutbuf(D_UART1,ts_Urecbuf.r1, ts_Urec[D_UART1].num);
///---------涓插彛1鐨勫崗璁�垎涓ょ被 1绫绘槸 Fx寮€澶寸殑閽堝�澶栬�x鐨勬爣鍑哾ebug鍗忚�锛涗緥濡侳D寮€澶存槸绯荤粺debug Fc鏄痠ic璋冭瘯璁惧�
////涓€绫绘槸Dx寮€澶寸殑瀵逛覆鍙�閫忎紶鍗忚� ////D2銆傘€傘€傘€� 閫忎紶缁欎覆鍙�2鐨勬暟鎹�
return L3_tpc_hex();///
{
ts_Urec[D_UART1].ok = 0;////解析协议
/// return 0;
//// printf1("\r\nD_UART1 ok %d ",(int) ts_Urec[D_UART1].num);
// D_LED1_REV();
pd485 = (TS_P_rs485 *)ts_Urecbuf.r1;
/// L0_uartN_Arrayhex_withoutbuf(D_UART1,ts_Urecbuf.r1, ts_Urec[D_UART1].num);
/// 串口1的协议分两类 1类是 Fx开头的针对外设x的标准debug协议;例如FD开头是系统debug Fc是iic调试设备
/// 一类是Dx开头的对串口x透传协议 ////D2。。。。 透传给串口2的数据
return L3_tpc_hex();///
/// return 0;
}
/*********
if(1 == ts_Urec[D_UART2].ok)
{ ts_Urec[D_UART2].ok = 0;////收到一帧数据
printf("\r\nUART2:rec: ");
/// sprintf(," %s ",ts_Urecbuf.r2);
//pd = (TS_P_debug*)ts_Urecbuf.r2;////
//L1_uartD_sendArrayhex((char *)pd, ts_Urec[D_UART2].num);
L1_uartD_Arrayhex(ts_Urecbuf.r2, ts_Urec[D_UART2].num);
Lc_buf_copy_uc(ts_Urecbuf.r5,ts_Urecbuf.r2,ts_Urec[D_UART2].num);
///sprintf(," %s ",ts_Urecbuf.r2);
//pd = (TS_P_debug*)ts_Urecbuf.r2;////
//L1_uartD_sendArrayhex((char *)pd, ts_Urec[D_UART2].num);
L1_uartD_Arrayhex(ts_Urecbuf.r2, ts_Urec[D_UART2].num);
Lc_buf_copy_uc(ts_Urecbuf.r5,ts_Urecbuf.r2,ts_Urec[D_UART2].num);
return L3_tpc_lora(ts_Urecbuf.r5);///
}
*********/
@ -149,7 +178,6 @@ vtype L2_debug_ONcomand(void)
#endif///D_USE_UART33
#ifdef D_USE_UART4
if(1 == ts_Urec[D_UART4].ok)
{ ts_Urec[D_UART4].ok = 0;////解析协议
@ -226,12 +254,12 @@ void L3_test_ONdebug(u8 filter)//// ON listen function
#ifdef D_keil_sim
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8浣嶆暟鎹?鍙�彉娉㈢壒鐜?
AUXR |= 0x01; //涓插彛1閫夋嫨瀹氭椂鍣?涓烘尝鐗圭巼鍙戠敓鍣?
AUXR |= 0x04; //瀹氭椂鍣?鏃堕挓涓篎osc,鍗?T
T2L = 0xE0; //璁惧畾瀹氭椂鍒濆 €?
T2H = 0xFE; //璁惧畾瀹氭椂鍒濆€?
AUXR |= 0x10; //鍚�姩瀹氭椂鍣?
SCON = 0x50; //8位数�?可变波特�?
AUXR |= 0x01; //串口1选择定时�?为波特率发生�?
AUXR |= 0x04; //定时�?时钟为Fosc,�?T
T2L = 0xE0; //设定定时初� �?
T2H = 0xFE; //设定定时初�?
AUXR |= 0x10; //启动定时�?
}
void L3_debug_drv_init(void)
@ -283,7 +311,7 @@ void L3_debug_drv_init(void)
{
L0pf_send_uc = L0_uart0_uc;
Lc_print("\r\n debug shell init:\t");
/// io 设置的标准写法
/// io ���õı�׼д��
Lc_print("Mode:");
#ifdef D_debug_time
@ -322,7 +350,7 @@ void L3_iicx_debug(u8 filter)
{
if(filter == Ts_debug.td->filter)
{
if(0x10 == Ts_debug.td->ocr)///read reg1 num 璇诲彇reg1鍦板潃涓�殑num涓�暟鎹?
if(0x10 == Ts_debug.td->ocr)///read reg1 num 读取reg1地址中的num个数�?
{
//NUM: 0 1 2 3 4

5
source/debug/debug_drv.h

@ -38,12 +38,13 @@
//#include "tpc_debug.h"
extern TS_P_debug *pd;
extern TS_P_rs485 *pd485;
#define D_cmd_filter_debug 0xfd
#define D_cmd_filter_gc032A 0xfc
#define D_cmd_filter_weight 0xFE
#define D_cmd_filter_weight 0xAA
#define D_cmd_filter_iicx 0xf1
@ -189,7 +190,7 @@ Lc_print(L0_uart_uc,__VA_ARGS__);
int main() {
int x = 3;
// 一些代码...
// һЩ����...
LOG("x = %d", x); // 2-1-5.cpp: Line 12: x = 3
}
#endif

203
source/debug/debug_drv.h.bak

@ -1,203 +0,0 @@
/*****************************************************************************
* DEBUG_DRV.h: Header file for DEBUY DRIVER FILES
*
*
* Copyright(C) 2013, cc
* All rights reserved.
*
* History
* 2013.05.24 ver 1.00 Prelimnary version, first Release
* 2020.02.22 ver 2.00 step 1 led鐐圭伅
step 2.1 uart debug send
step 2.2 uart debug rev with led
step 2.3 debug protocol test
step 3
step 4 timer test --> get tick
step 5 TTSS task test
step 6
******************************************************************************/
#ifndef __DEBUG_DRV_H
#define __DEBUG_DRV_H
#include "c_type51.h"
#include "c_lib.h"
#include "msp_uartN.h"
#include "msp_uart1.h"
//#include "msp_uart2.h"///
///#include "msp_uart3.h"
///#include "msp_uart4.h"///
#include "stdio.h"
//#include "msp_uart4.h"
#include "tpc_x.h"
//#include "tpc_debug.h"
extern TS_P_debug *pd;
#define D_cmd_filter_debug 0xfd
#define D_cmd_filter_gc032A 0xfc
#define D_cmd_filter_weight 0xFE
#define D_cmd_filter_iicx 0xf1
///鏍规嵁瀹為檯鐢佃矾杩涜�璋冩暣
#if 0
#define L1_uartD_senduc(x) L1_uart4_senduc((x)
#define L1_uartD_sendArray(x,len) L1_uart4_sendArray((x),(len))
#define L1_uartD_sendStr(x) L1_uart4_sendStr((x))
#define L1_uartD_waitFree() L1_uart4_waitFree()
#define D_ts_uartX_rev (&TP_Uart_RE_)
#define Uart_Send_Msg(X); L1_uartD_sendStr(X);
#else
#define L1_uartD_0d0a() L0_uartN_0d0a(D_UART1)
#define L1_uartD_uc(x) L0_uartN_uc(D_UART1,(x))
#define L1_uartD_us(x) L0_uartN_us(D_UART1,(x))
#define L1_uartD_uchex(x) L0_uartN_uchex(D_UART1,(x))
#define L1_uartD_ushex(x) L0_uartN_ushex(D_UART1,(x))
#define L1_uartD_ulhex(x) L0_uartN_ulhex(D_UART1,(x))
#define L1_uartD_Array(x,len) L0_uartN_Array(D_UART1,(x),(len))
#define L1_uartD_ArrayLong(x,start,end) L0_uartN_Arraylong(D_UART1,x,start,end)
////#define L1_uartD_Arrayhex(x,len) L0_uartN_uchexArray(D_UART1,(x),(len))
#define L1_uartD_Arrayhex(x,len) L0_uartN_Arrayhex_withoutbuf(D_UART1,(x),(len))
////#define L1_uartD_ushexArray(x,len) L0_uartN_ushexArray(D_UART1,(x),(len))
#define L1_uartD_Str(x) L0_uartN_str(D_UART1,(x))
#define L1_uartD_waitFree() L0_waitFree_uartN(D_UART1)
#define D_ts_uartX_rev (&ts_s2b1_road)
#define Uart__Msg(X); L1_uartD_Str(X);
#define uartSendByte(X) L0_uartN_ushex(D_UART1,(X))
#define Uart__Hex(x,u) L0_uartN_ushex(D_UART1,(x))
#endif
///#define xxxlog(format, ...) printf("[%s:%d->%s] ",format, __FILE__, __LINE__, __func__, ##__VA_ARGS__)
//////#define printfs_debug
#ifdef printfs_debug
#define printfs(str)
#define printf1(str,i1)
#define printf2(str,i1,i2)
#define printf3(str,i1,i2,i3)
#define printf4(str,i1,i2,i3,i4)
#else
#define printfs(str) L1_uartD_waitFree() ;printf(str)
#define printf1(str,i1) L1_uartD_waitFree() ;printf(str,i1)
#define printf2(str,i1,i2) L1_uartD_waitFree() ;printf(str,i1,i2)
#define printf3(str,i1,i2,i3) L1_uartD_waitFree() ;printf(str,i1,i2,i3)
#define printf4(str,i1,i2,i3,i4) L1_uartD_waitFree() ;printf(str,i1,i2,i3,i4)
#define printf5(str,i1,i2,i3,i4,i5) L1_uartD_waitFree() ;printf(str,i1,i2,i3,i4,i5)
/*
#define printfs(str) L1_uartD_Str(str);///L1_uartD_waitFree() ;printf(str)
#define printf1(str,i1) L1_uartD_Str(str);L1_uartD_ushex(i1);///L1_uartD_waitFree() ;printf(str,i1)
#define printf2(str,i1,i2) printf1(str,i1);L1_uartD_ushex(i2);///L1_uartD_waitFree() ;printf(str,i1,i2)
#define printf3(str,i1,i2,i3) printf2(str,i1,i2);L1_uartD_ushex(i3);///L1_uartD_Str(str);L1_uartD_ushex(i1);///L1_uartD_waitFree() ;printf(str,i1,i2,i3)
#define printf4(str,i1,i2,i3,i4) printf3(str,i1,i2,i3);L1_uartD_ushex(i4);///L1_uartD_Str(str);L1_uartD_ushex(i1);///L1_uartD_waitFree() ;printf(str,i1,i2,i3,i4)
#define printf5(str,i1,i2,i3,i4,i5) printf4(str,i1,i2,i3,i4);L1_uartD_ushex(i5);///L1_uartD_Str(str);L0_uartN_ushex(i1);/// L1_uartD_waitFree() ;printf(str,i1,i2,i3,i4,i5)
*/
#endif
///L0_waitFree_uartN
extern void L3_debug_drv_init(void);
extern void L3_test_ONdebug(u8 filter);
extern vtype L2_debug_ONcomand(void);
extern void L3_iicx_debug(u8 filter);
#if 0
if(1 == ts_uart4_rev.revok)
{ts_uart4_rev.revok= 0;
td = (TS_P_debug *)ts_uart4_rev.buf;
L1_uart4_sendArray(ts_uart4_rev.buf, 5);
if(D_sb_filter == td->filter)
{
if(0x04 == td->R1)///璁剧疆鍥涗釜浼犳劅鍣ㄧ殑娓呴浂
{ //// fd 04 33 44 55
void L3_debug_drv_init(void);
#define L3_debug_time() L0pf_send_uc = L0_uart0_uc; ///Lc_print("\r\n%s,-%sL:%d,",__DATE__,__TIME__,__LINE__);
extern void L3_debug_cycle(void);
#define UART_debug_reg ((LPC_UART1_TypeDef *) LPC_UART1_BASE )
//#define UART_debug ((LPC_UART1_TypeDef *) LPC_UART1_BASE )
//#define UART_debug ((LPC_UART_TypeDef *) LPC_UART_BASE )
//#define UART_debug ((LPC_UART_TypeDef *) LPC_UART_BASE )
#define UART_debug 1
#define L0_debugS_uc(x) //L0_Usend_uc(UART_debug,x)
#define L0_debugS_uc_hex(x) //L0_Usend_uc_hex(UART_debug,x)
#define L0_debug_uc_show(x,y); //L0_USART_print(UART_debug,x,y);
#define L0_debug_us_show(x,y); //L0_USART_print(UART_debug,x,y);
#define L0_debug_ul_show(x,y); //L0_USART_print(UART_debug,x,y);
//#define L2_debug_info(x) //L0_USART_print(UART_debug,x);
#define L2_debug_Au4B(x) // L0_Usend_Au4B(UART_debug,x)
#define L0_debug_Au4B_show(x,y); //L0_USART_print(UART_debug,x,y);
#define L0_debug_Aus_show(x,y); //L0_USART_print(UART_debug,x,y);
#define L0_debug_A4B_show(x,y); //L0_USART_print(UART_debug,x,y);
//#define debug22(format...) Lc_print("%s (%d): ",__FILE__,__LINE__);
//#define LOG(format, args...) Lc_print(format, ##args)
//#define RTA_printf(...) Lc_print(__VA_ARGS__)
//#define L2_debug_info Lc_print
//#define L3_debug_time() Lc_print(L0_uart0_uc,"\r\n%s,-%sL:%d,",__DATE__,__TIME__,__LINE__);
#define L2_debug_info(...) \
Lc_print(L0_uart_uc,__VA_ARGS__);
//do {
//Lc_print("%s (%d): ", __FILE__, __LINE__);
//Lc_print(format, __VA_ARGS__);
//} while (0)
#define CHECK1(x, ...) if (!(x)) { printf(__VA_ARGS__); }
#define LOG(...) {\
Lc_print(L0_uart_uc,"%s: Line %d:\t", __FILE__, __LINE__);\
Lc_print(L0_uart_uc, __VA_ARGS__);\
Lc_print(L0_uart_uc,"\n");\
}
int main() {
int x = 3;
// 一些代码...
LOG("x = %d", x); // 2-1-5.cpp: Line 12: x = 3
}
#endif
#endif /* end __DEBUG_DRV_H */
/*****************************************************************************
** End Of File
******************************************************************************/

378
source/debug/debug_drvdd.c

@ -1,378 +0,0 @@
/*****************************************************************************
* debug_drv.c: debug app
*
* Copyright(C) 2013, cc
* All rights reserved.
*
* History
* 2013.05.24 ver 1.00 Prelimnary version, first Release
*
if(ts_s2b_debug.idle)
{
ts_s2b_debug.idle = 0;
printf("\r\n O");
if(ts_s2b_debug.len > 0)
{
//// L1_uartD_sendArrayhex((U8 *)&ts_s2b_debug.t, 5);
/// xxxx///謠仙叙蜊剰ョョ
/// if(debgu) ts_s2b_debug.ok =1;
printf("\r\n len = %d",(int)ts_s2b_debug.len);
ts_s2b_debug.len = 0;
}
}
******************************************************************************/
#include "debug_drv.h"
///#include "msp_iicM1.h"
#include "c_type51.h"
///#include "msp_uart2.h"
#include "tpc_road.h"
TS_P_debug *pd=NULL;
////蜷ッ蜉ィ騾丈シ�謖�サ、 蠑€蜈ウ謇灘シ€ 蜿ッ莉・讓。諡溷ス灘燕荳イ蜿」蜿鷹€�
vtype L2_debug_comand(void)
{
u8 cmd=0,num=0;
if(1 == ts_Urec[D_UART1].debugok)
{ ts_Urec[D_UART1].debugok = 0;////隗」譫仙刻隶ョ
/// printf("\r\nw ts_Urec[D_UART1].max = %d num = %d",(int)ts_Urec[D_UART1].rmax,(int)ts_Urec[D_UART1].num);
printf("\r\ndebugok",(int)(int)ts_Urec[D_UART1].debugok);
}
if(1 == ts_Urec[D_UART1].ok)
{ ts_Urec[D_UART1].ok = 0;////隗」譫仙刻隶ョ
L1_uartD_sendArrayhex(ts_Urecbuf.r1, ts_Urec[D_UART1].num);L1_uartD_0d0a();
///---------荳イ蜿」1逧�刻隶ョ蛻�ク、邀サ 1邀サ譏ッ Fx蠑€螟エ逧�宙蟇ケ螟冶ョセx逧���㊥debug蜊剰ョョ�帑セ句ヲ�D蠑€螟エ譏ッ邉サ扈歸ebug Fc譏ッiic隹�ッ戊ョセ螟�
////荳€邀サ譏ッDx蠑€螟エ逧�ッケ荳イ蜿」x騾丈シ�蜊剰ョョ ////D2縲ゅ€ゅ€ゅ€� 騾丈シ�扈吩クイ蜿」2逧�焚謐ョ
cmd = D_uc_high(ts_Urecbuf.r1[0]);
num = D_uc_low(ts_Urecbuf.r1[0]);
printf(" 0->%X %X ",(int)cmd,(int)num );
if(cmd == 0x0D)
{////D2縲ゅ€ゅ€ゅ€� 騾丈シ�扈吩クイ蜿」2逧�焚謐ョ
L1_uartD_sendArrayhex(&ts_Urecbuf.r1[1], ts_Urec[D_UART1].num-1);
if(2 == num)
{ printf(" 2-> ");
L1_uart2_sendArray(&ts_Urecbuf.r1[1], ts_Urec[D_UART1].num-1);
}else if(3 == num)
{ printf(" 3-> ");
L1_uart3_sendArray(&ts_Urecbuf.r1[1], ts_Urec[D_UART1].num-1);
}else if(4 == num)
{ printf(" 4-> ");
L1_uart4_sendArray(&ts_Urecbuf.r1[1], ts_Urec[D_UART1].num-1);
}else
{
}
return 1;
}
////debug蜊剰ョョ菴ソ逕ィ荳イ蜿」1 謨�€悟�谺。邂€蜊戊ァ」譫� 隕∵アらャャ荳€荳ェ蟄礼ャヲ蠢�。サ荳コFx
if(0x0F == cmd)
{
///TS_P_debug
pd = (TS_P_debug*)ts_Urecbuf.r1;
L1_uartD_sendArrayhex((U8 *)pd, 5);////(U8 *)&pd,髞呵ッッ逧�。ィ霎セ譁ケ蠑� pd蟆ア譏ッ蝨ー蝮€
return 1;
}
printf("\r\n ok ");
}
if(1 == ts_Urec[D_UART2].ok)
{ ts_Urec[D_UART2].ok = 0;////謾カ蛻ー荳€蟶ァ謨ー謐ョ
//pd = (TS_P_debug*)ts_Urecbuf.r2;////
//L1_uartD_sendArrayhex((char *)pd, ts_Urec[D_UART2].num);
L1_uartD_sendArrayhex(ts_Urecbuf.r2, ts_Urec[D_UART2].num);
}
if(1 == ts_Urec[D_UART3].ok)
{ ts_Urec[D_UART3].ok = 0;////隗」譫仙刻隶ョ
//pd = (TS_P_debug*)ts_Urecbuf.r2;////
//L1_uartD_sendArrayhex((char *)pd, ts_Urec[D_UART2].num);
L1_uartD_sendArrayhex(ts_Urecbuf.r3, ts_Urec[D_UART3].num);
}
if(1 == ts_Urec[D_UART4].ok)
{ ts_Urec[D_UART4].ok = 0;////隗」譫仙刻隶ョ
//pd = (TS_P_debug*)ts_Urecbuf.r2;////
//L1_uartD_sendArrayhex((char *)pd, ts_Urec[D_UART2].num);
L1_uartD_sendArrayhex(ts_Urecbuf.r4, ts_Urec[D_UART4].num);
}
return 0;
}
////蜷ッ蜉ィ騾丈シ�謖�サ、 蠑€蜈ウ謇灘シ€ 蜿ッ莉・讓。諡溷ス灘燕荳イ蜿」蜿鷹€�
vtype L2_debug_comand333(void)
{
if(1 == ts_Urec[D_UART1].debugok)
{ ts_Urec[D_UART1].debugok = 0;////隗」譫仙刻隶ョ
/// printf("\r\nw ts_Urec[D_UART1].max = %d num = %d",(int)ts_Urec[D_UART1].rmax,(int)ts_Urec[D_UART1].num);
printf("\r\ndebugok",(int)(int)ts_Urec[D_UART1].debugok);
}
if(1 == ts_Urec[D_UART1].ok)
{ ts_Urec[D_UART1].ok = 0;////隗」譫仙刻隶ョ
L1_uartD_sendArrayhex(ts_Urecbuf.r1, ts_Urec[D_UART1].num);L1_uartD_0d0a();
///---------荳イ蜿」1逧�刻隶ョ蛻�ク、邀サ 1邀サ譏ッ Fx蠑€螟エ逧�宙蟇ケ螟冶ョセx逧���㊥debug蜊剰ョョ�帑セ句ヲ�D蠑€螟エ譏ッ邉サ扈歸ebug Fc譏ッiic隹�ッ戊ョセ螟�
////荳€邀サ譏ッDx蠑€螟エ逧�ッケ荳イ蜿」x騾丈シ�蜊剰ョョ ////D2縲ゅ€ゅ€ゅ€� 騾丈シ�扈吩クイ蜿」2逧�焚謐ョ
if((ts_Urecbuf.r1[0]&0xF0) == 0xD0)
{////D2縲ゅ€ゅ€ゅ€� 騾丈シ�扈吩クイ蜿」2逧�焚謐ョ
printf("\r\n Dn=%x :",(int)(ts_Urecbuf.r1[0]&0x0F));
L1_uartD_sendArrayhex(&ts_Urecbuf.r1[1], ts_Urec[D_UART1].num-1);
if(ts_Urecbuf.r1[0]&0x0f == 0x02)
{ printf(" 2-> ");
L1_uart2_sendArray(&ts_Urecbuf.r1[1], ts_Urec[D_UART1].num-1);
}else if(ts_Urecbuf.r1[0]&0x0f == 0x03)
{ printf(" 3-> ");
L1_uart3_sendArray(&ts_Urecbuf.r1[1], ts_Urec[D_UART1].num-1);
}else if(ts_Urecbuf.r1[0]&0x0f == 0x04)
{ printf(" 4-> ");
L1_uart4_sendArray(&ts_Urecbuf.r1[1], ts_Urec[D_UART1].num-1);
}else
{printf(" 4->%x %x ",(int)(ts_Urecbuf.r1[0]&0xF0), (int)(ts_Urecbuf.r1[0]&0x0f) );
}
return 1;
}
////debug蜊剰ョョ菴ソ逕ィ荳イ蜿」1 謨�€悟�谺。邂€蜊戊ァ」譫� 隕∵アらャャ荳€荳ェ蟄礼ャヲ蠢�。サ荳コFx
if(ts_Urecbuf.r1[0]&0xf0 == 0xf0)
{
///TS_P_debug
pd = (TS_P_debug*)ts_Urecbuf.r1;
L1_uartD_sendArrayhex((U8 *)pd, 5);////(U8 *)&pd,髞呵ッッ逧�。ィ霎セ譁ケ蠑� pd蟆ア譏ッ蝨ー蝮€
return 1;
}
printf("\r\n ok ");
}
if(1 == ts_Urec[D_UART2].ok)
{ ts_Urec[D_UART2].ok = 0;////謾カ蛻ー荳€蟶ァ謨ー謐ョ
//pd = (TS_P_debug*)ts_Urecbuf.r2;////
//L1_uartD_sendArrayhex((char *)pd, ts_Urec[D_UART2].num);
L1_uartD_sendArrayhex(ts_Urecbuf.r2, ts_Urec[D_UART2].num);
}
if(1 == ts_Urec[D_UART3].ok)
{ ts_Urec[D_UART3].ok = 0;////隗」譫仙刻隶ョ
//pd = (TS_P_debug*)ts_Urecbuf.r2;////
//L1_uartD_sendArrayhex((char *)pd, ts_Urec[D_UART2].num);
L1_uartD_sendArrayhex(ts_Urecbuf.r3, ts_Urec[D_UART3].num);
}
if(1 == ts_Urec[D_UART4].ok)
{ ts_Urec[D_UART4].ok = 0;////隗」譫仙刻隶ョ
//pd = (TS_P_debug*)ts_Urecbuf.r2;////
//L1_uartD_sendArrayhex((char *)pd, ts_Urec[D_UART2].num);
L1_uartD_sendArrayhex(ts_Urecbuf.r4, ts_Urec[D_UART4].num);
}
return 0;
}
void L3_test_debug(u8 filter)
{
if(filter == pd->filter)
{///filter num d1 d2 d3 ....dn
//// FD 08 11 22 33 44 55 66 77 88
printf("\r\n FD ok");
switch (pd->ocr)
{
case 0x11:
printf("11");
//// D_lora_wakeup(); L0_uart2_sendArray(test, 13);
printf(" lora send ");
/// L1_uartD_sendArrayhex(test, 13);
//1/ 2 3 4 5 6 7 8 9 10 11 12 13
break;
case 0x12:
printf("12");
/// D_lora_wakeup(); L0_uart2_sendArray(test2, 7);
printf(" lora send2 ");
/// L1_uartD_sendArrayhex(test2, 7);
//1 2 3 4 5 6 7 8 9 10 11 12 13
break;
default:
printf(" pp error\r\n ");
break;
};
printf("333");
}
}
///#define D_keil_sim
#ifdef D_keil_sim
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8菴肴焚謐?蜿ッ蜿俶ウ「迚ケ邇?
AUXR |= 0x01; //荳イ蜿」1騾画叫螳壽慮蝎?荳コ豕「迚ケ邇�書逕溷�?
AUXR |= 0x04; //螳壽慮蝎?譌カ髓滉クコFosc,蜊?T
T2L = 0xE0; //隶セ螳壼ョ壽慮蛻晏 €?
T2H = 0xFE; //隶セ螳壼ョ壽慮蛻晏€?
AUXR |= 0x10; //蜷ッ蜉ィ螳壽慮蝎?
}
void L3_debug_drv_init(void)
{
Ts_debug.uxrev = D_ts_uartX_rev;
Ts_debug.td = (TS_P_debug *)Ts_debug.uxrev->buf;
Ts_debug.ok = &Ts_debug.uxrev->debugok;
UartInit();
}
char putchar(char ch)
{
SBUF = ch;
while(TI == 0);
TI = 0;
return ch;
}
#else
void L3_debug_drv_init(void)
{
D_s2b_road1_init();
}
char putchar(char ch)
{
/* Place your implementation of fputc here */
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
/// HAL_UART_Transmit_IT(&huart4, (uint8_t *)&ch, 1);
L1_uartD_senduc(ch);
return ch;
///SBUF= ch;
/// while(t)
/// while(!TI);
// TI = 0;
/// return (SBUF = ch);
}
#endif ///#ifdef D_keil_sim
#if 0
void L3_debug_drv_init(void)
{
L0pf_send_uc = L0_uart0_uc;
Lc_print("\r\n debug shell init:\t");
/// io ノ靹テオトア�シミエキィ
Lc_print("Mode:");
#ifdef D_debug_time
Lc_print(" debug");
#else
//D_debug_time_using
Lc_print(" normal");
#endif
}
#ifdef D_debug_sim
fff
void L3_debug_cycle(void)
{
INTERRUPT_UART();
TIMER0_IRQHandler();
}
#else
#endif
void L3_test_debug(u8 filter)
{
if(filter == Ts_debug.td->filter)
{///filter num d1 d2 d3 ....dn
//// FD 08 11 22 33 44 55 66 77 88
L1_uartD_sendArrayhex(Ts_debug.td,Ts_debug.td->R1);
}
}
void L3_iicx_debug(u8 filter)
{
if(filter == Ts_debug.td->filter)
{
if(0x10 == Ts_debug.td->ocr)///read reg1 num 隸サ蜿睦eg1蝨ー蝮€荳ュ逧�um荳ェ謨ー謐?
{
//NUM: 0 1 2 3 4
// Fx R1 R2 R3 ocr
// sla reg1 num
/// f1 32 15 06 10
//NUM: 0 1 2 3 4
// Fx R1 R2 R3 ocr
// sla reg1 num
/// f1 32 0x28 06 10
/// f1 32 0x28 06 10
/// 28
/// 0010 1000 28
/// 1010 1000 a8
L2_IICM1_ReadReg(Ts_debug.td->R1,Ts_debug.td->R2,Ts_debug.d,Ts_debug.td->R3);
///printf("\r\n 0x%2x 0x%2x\r\n",(int)Ts_debug.d[0],(int)Ts_debug.d[1]);
L1_uartD_sendArrayhex(Ts_debug.d,Ts_debug.td->R3);
/// printf("\r\n 0x%2x\r\n",(int)Ts_debug.td->ocr);
}
else if(0x11 == Ts_debug.td->ocr)
{
L2_IICM1_ReadReg(Ts_debug.td->R1,Ts_debug.td->R2,Ts_debug.d,Ts_debug.td->R3);
//printf("\r\n 0x%2x 0x%2x\r\n",(int)Ts_debug.d[0],(int)Ts_debug.d[1]);
//L1_uartD_sendArrayhex(Ts_debug.d,Ts_debug.td->R3);
printf("\r\n 0x%2x 0x%2x\r\n",(int)Ts_debug.d[0],(int)Ts_debug.d[1]);
}
else if(0x12 == Ts_debug.td->ocr)
{
}
else
{
}
}
}
#else
#endif
/******************************************************************************
** End Of File
******************************************************************************/

BIN
source/debug/testiic.uvla

Binary file not shown.

BIN
source/msp/202204201431275395_202204201431274606.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 KiB

135
source/msp/nouse/msp_adc.c

@ -1,135 +0,0 @@
#include "msp_adc.h"
#include "debug_drv.h"
TS_task_adc_ ts_task_adc;
void L0_ADC_init (void)
{
ADCCFG = 0x20;
ADC_CONTR = 0x81; //??ADC??ADC1
}
U16 L1_ADC_Read_PT (u8 CHA)
{
U16 adc_data;
ADC_CONTR &=0xF8;
ADC_CONTR |=0x40;//??AD??
//ADC_CONTR |= CHA;
CHA &= 0x07; //??ADC?8???????(0000 0111 ?0?5?)
ADC_CONTR = (ADC_CONTR & 0xF0) | CHA;
NOP();
NOP();
while (!(ADC_CONTR & 0x20)); //??ADC????
ADC_CONTR &= ~0x20; //???
adc_data = ADC_RES;
//adc_data <<= 8;
//adc_data |= ADC_RESL;
//adc_data = adc_data<<2;
//adc_data = ADC_RESL & 0X03;
//adc_data = adc_data | adc_data;
// L0_uartN_ushex(adc_data);
//L0_uartN_0d0a();
/// L1_uartD_senduc('*');
return (adc_data);
}
#define D_ADC_SCH1 2
#define D_ADC_SCH2 3
////右列U3 adc2---pin12 adc3 p1.3
//adc数据初始化
void l2_task_adc_init()
{
L1_task_init(&ts_task_adc.task);
L3_task_s_go(ts_task_adc, D_task_init);
}
//adc采集
void L3_task_adc_handle(TS_task_adc_ *s)
{
TTSS_Task_init():
printf("\r\n adc1");
s->change = 0;
s->fn = 0;
s->chok1 = 0;s->sum1 = 0;s->avrage1 = 0;s->ch_now = 0;
L2_task_go(D_TASK_adc_read);
TTSS_Task_step(D_TASK_adc_read): //adc判断读取
if(1 == s->change)
{
s->change = 0;
s->fn = 0;
L2_task_go(D_TASK_adc_change_ch);
}else
{
}
TTSS_Task_step(D_TASK_adc_change_ch): //adc判断读取
if(0 == s->ch_now)
{
s->val = L1_ADC_Read_PT(D_ADC_SCH1);
}
else
{
s->val = L1_ADC_Read_PT(D_ADC_SCH2);
}
printf(" %d:%d-%d ",(int)s->ch_now,(int)s->fn,(int)s->val);
s->sum1 += s->val;
s->sum1 -= s->avrage1;
s->avrage1 = s->sum1 >> 3;
if(s->fn >= 12)
{
s->chok1 = 1;
L2_task_go(D_TASK_adc_read);
}else
{
s->fn ++;
///L2_task_Cdelay_go(10000,D_TASK_adc_change_ch);////100000--2s
L2_task_Cdelay_go(100,D_TASK_adc_change_ch);////100000--2s
}
TTSS_Task_end();
}
#if 0
///D_cmd_filter_adc L3_ADC_debug(D_cmd_filter_adc)
void L3_ADC_debug(u8 filter)
{
if(filter == Ts_debug.td->filter)
{///filter num d1 d2 d3 ....dn
//// FD 08 11 22 33 44 55 66 77 88
L1_uartD_uchexArray(Ts_debug.td,Ts_debug.td->R1);
if(0x10 == Ts_debug.td->ocr)///read 读
{
//NUM: 0 1 2 3 4
// Fx R1 R2 R3 ocr
// sla reg1 num
/// f1 32 15 06 10
printf("\r\n ch(%d)=",(int)Ts_debug.td->R1);
Ts_debug.au16 = L1_ADC_Read_PT(Ts_debug.td->R1);
printf(" %XH %d ",(int)Ts_debug.au16,(int)Ts_debug.au16);
}
else if(0x11 == Ts_debug.td->ocr)
{
}
else if(0x12 == Ts_debug.td->ocr)
{
}
else
{
}
}
}
#endif

66
source/msp/nouse/msp_adc.h

@ -1,66 +0,0 @@
#ifndef _msp_adc_H_
#define _msp_adc_H_
#include "stdio.h"
//#include "c_type51.h"
///#include "c_lib.h"
#include "bsp_config.h"
#include "msp_uart1.h"
///#include "msp_uartN.h"
#include "TTSS_task.h"
////#define L1_uartD_senduc(x) L0_uartN_uc(D_UART1,(x));
typedef struct
{
TS_task task;
vU8 ch_now;
vU8 chok1; ///当前通道的adc采样ok
vU8 chok2; ///当前通道的adc采样ok
vU8 change;
vU8 val;
vU8 fn;
vU32 sum1;
vU32 avrage1;
vU16 u16_out1;
vU8 u8_out1;
vU32 sum2;
vU32 avrage2;
vU16 u16_out2;
vU8 u8_out2;
vU32 sum3;
vU32 avrage3;
vU16 u16_out3;
vU8 u8_out3;
}TS_task_adc_;
extern TS_task_adc_ ts_task_adc;
#define D_TASK_adc_read 0x31
#define D_TASK_adc_change_ch 0x30
extern void L0_ADC_init(void);
extern U16 L1_ADC_Read_PT(u8 CHA);
#define D_cmd_filter_adc 0xfa
extern void L3_ADC_debug(u8 filter);
extern void L0_ADC_init(void);
extern U16 L1_ADC_Read_PT(u8 CHA);
extern void l2_task_adc_init();
extern void L3_task_adc_handle(TS_task_adc_ *s);
#endif //#ifndef _msp_iicM1_H_

52
source/msp/nouse/msp_id.c

@ -1,52 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file msp_eeprom.c
/// @brief msp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20190106
/// @note cc_AS_stc02 由stc-isp v6.0860
//////////////////////////////////////////////////////////////////////////////
#include "msp_id.h"
#define MSP_ID_LEN 7
void L0_id_get(U8 *id)
{
U8 i = 0;
char *ID = (char idata *)0xf1;
for(i=0;i<MSP_ID_LEN;i++)
{
id[i] = ID[i];
}
}
void L0_id_get_rom(U8 *id)
{
U8 i = 0;
char *ID = (char code *)0x3ff9;
for(i=0;i<MSP_ID_LEN;i++)
{
id[i] = ID[i];
}
}
#if 1
void L0_id_main(void)
{
U8 i,id[MSP_ID_LEN];
L0_id_get_rom(id);
for(i=0;i<MSP_ID_LEN;i++)
{
L0_uart0_uchex(id[i]);
}
while(1);
}
#endif

40
source/msp/nouse/msp_id.h

@ -1,40 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file msp_eeprom
/// @brief msp_eeprom
/// @info
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20190106
//
//////////////////////////////////////////////////////////////////////////
#ifndef _msp_id_H_
#define _msp_id_H_
#include "c_type51.h"
#include "../clib/c_lib.h"
#include "../ctask/TTSS_tick.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include "../bsp/bsp_config.h"
#include "msp_uart0.h"
extern void L0_id_get(U8 *id);
extern void L0_id_get_rom(U8 *id);
extern void L0_id_main(void);
#endif// #ifndef _msp_eeprom_H_

382
source/msp/nouse/msp_iicM1.c

@ -1,382 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#include "msp_iicM1.h"
/*------------------------------------------------
I2C总线传输数据过程中
SDA 线
使9
6
I2C总线标准规定 0 ACK
A 1 NACK
NALSB之后SDA线SDA
------------------------------------------------*/
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void L0_IICM1_SCL(unsigned char v)
{
if(v)
{
L0_IICM1_SCL_ON();/// L0_SCL_ON();
L0_slc_1_delay();
}
else
{
L0_IICM1_SCL_OFF();///L0_SCL_OFF();
L0_slc_0_delay();
}
}
void L0_IICM1_SDA(unsigned char v)
{
if(v)
{
L0_IICM1_SDA_ON();
L0_slc_1_delay();
}
else
{
L0_IICM1_SDA_OFF();
L0_slc_0_delay();
}
}
void L0_IICM1_INIT(unsigned char v)
{
if (v)
{
//L0_IIC_SIM_INIT();
L0_IICM1_SCL_init();
L0_IICM1_SDA_init();
L0_IICM1_SDA(1);
L0_IICM1_SCL(1);
}else
{
}
}
unsigned char L0_IICM1_SDA_ask(void)
{
return L0_IICM1_SDA_AT();
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/****************
void L0_I2C_Reset(void)
{
L0_I2C_SCL(1); L0_I2C_SDA(1); //确认释放总线
}
********************/
#define L0_IIC_SIM_INIT()
#define L0_IIC_SIM_close()
//**********************************************
//送起始位 IO_SDA=1->0
void L0_IICM1_Start(void)
{
///L0_IIC_SIM_INIT();
L0_IICM1_SDA(1);
L0_IICM1_SCL(1);
L0_IICM1_SDA(0);
L0_IICM1_SCL(0);
}
//************************************************
//送停止位 IO_SDA = 0->1
void L0_IICM1_Stop(void)
{
L0_IICM1_SDA(0);
L0_IICM1_SCL(1);
L0_IICM1_SDA(1);
L0_IIC_SIM_INIT();
L0_IIC_SIM_close();
}
//************************************************
//主应答(包含ack:IO_SDA = 0和no_ack:IO_SDA = 0)
void L0_IICM1_Ack(void)
{ //设置SDA 口为输出
L0_IICM1_SCL(0);
L0_IICM1_SDA(0);
L0_IICM1_SCL(1);
L0_IICM1_SCL(0);
L0_IICM1_SDA(1);
}
void L0_IICM1_NoAck(void)
{ //设置SDA 口为输出
L0_IICM1_SCL(0);
L0_IICM1_SDA(1);
L0_IICM1_SCL(1);
L0_IICM1_SCL(0);
}
/******
I2C总线标准规定 0 ACK A
1 NACK NA
LSB之后SDA线SDA
// 检测 SDA是否回ACK
bit L0_I2C_Test_Ack(void)
{ //设置SDA 口为输入
bit ACK_Flag = 0;
L0_I2C_SCL(0);
L0_I2C_SDA(1);
L0_I2C_SCL(1);
if(IO_SDA = 0)
ACK_Flag = 1;
else
ACK_Flag = 0;
L0_I2C_SCL(0);
return ACK_Flag;
// return 1;// debug
}
*******/
//*************************************************
//字节发送程序
//发送c(可以是数据也可是地址),送完后接收从应答
//不考虑从应答位
void L0_IICM1_SendData(unsigned char c)
{
unsigned char ack=8;
unsigned char BitCnt=8;//一字节8位
//设置SDA 口为输出
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((c << BitCnt ) & 0x80)
L0_IICM1_SDA(1); //判断发送位
else
L0_IICM1_SDA(0);
L0_IICM1_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_IICM1_SCL(0);
}//8clk
L0_IICM1_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_IICM1_SCL(1);
///gRccUs05 += L0_I2C_SDA_ask();
L0_IICM1_SCL(0);
L0_IICM1_delay();
}
//**************************************************
//字节接收程序
//接收器件传来的数据,此程序应配合|主应答函数|i2c_ack_main(void)使用
//return: uchar型1字节
unsigned char L0_IICM1_ReceiveData(void)
{
unsigned char BitCnt=8,IIC_RX_Data = 0;
L0_IICM1_SDA(1); //读入数据 设置SDA 口为输入
for(BitCnt = 0;BitCnt<8;BitCnt++)
{
L0_IICM1_delay(1);
L0_IICM1_SCL(0); //置时钟线为低,准备接收数据位
L0_IICM1_SCL(1); //置时钟线为高使数据线上数据有效
L0_IICM1_delay(1);
IIC_RX_Data = IIC_RX_Data << 1;
if(1 == L0_IICM1_SDA_ask())
IIC_RX_Data = IIC_RX_Data + 1; //读数据位,接收的数据位放入retc中
L0_IICM1_delay(1);
}// 8clk up
L0_IICM1_SCL(0);
return IIC_RX_Data;
}
/// 读取 n个数据 放入p中
void L1_IICM1_ReadNByte(unsigned char Sal, unsigned char *p,unsigned char n)
{
unsigned char i;
L0_IICM1_Start(); // 启动I2C
L0_IICM1_SendData((Sal)| 0x01); //发送器件地址
for(i = 0;i < n-1;i ++) //读取字节数据
{
*(p + i) = L0_IICM1_ReceiveData(); //读取数据
///printf("%x ",(int)(*(p + i)));
L0_IICM1_Ack(); //__/```\__
}
*(p + n - 1) = L0_IICM1_ReceiveData();
L0_IICM1_NoAck();
L0_IICM1_Stop();
}
#if 0
Master ST SAD+W SUB SR SAD+R MAK MAK NMAK SP
Slave SAK SAK SAK DATA DATA DATA
0x19
0001 1001
0011 001R
#endif
///////////////////////////////
///写入一个reg 为后续的写命令或者读取服务
void L1_IICM1_WriteReg(unsigned char sla,unsigned char reg)
{
L0_IICM1_Start(); //启动I2C
L0_IICM1_SendData(sla);//发送器件地址
L0_IICM1_SendData(reg);
}
// sla.(reg)=cmd
void L2_IICM1_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd)
{
L1_IICM1_WriteReg(sla,reg);
L0_IICM1_SendData(cmd);
L0_IICM1_Stop();
/*****************
if(gRccUs05 >0)///测试iic有效否 发现没有结果
{
L0_uart0_uc(gRccUs05);gRccUs05 = 0;
}
***************/
}
//读取reg地址的n个数据 sla.(reg) sla.(reg+1)................ sla.(reg+n)
void L2_IICM1_ReadReg(unsigned char sla,unsigned char reg,
unsigned char *r,unsigned char n)
{
// U8 d[1];
//S ADD W A REG A
L1_IICM1_WriteReg(sla,reg);
//S ADD R A D1 A D2 A.....DX N P
L1_IICM1_ReadNByte(sla,r,n);
}
//读取reg地址的n个数据 sla.(reg) sla.(reg+1)................ sla.(reg+n)
unsigned char L2_IICM1_Read1Reg1D(unsigned char sla,unsigned char reg)
{
U8 d;
// U8 d[1];
//S ADD W A REG A
L1_IICM1_WriteReg(sla,reg);
//S ADD R A D1 A D2 A.....DX N P
L1_IICM1_ReadNByte(sla,&d,1);
return d;
}
#if 0////不可删除
///S 80H A Register Address A S 81H A Data NA P
void L2_tws_ReadReg000(unsigned char sla,unsigned char reg,
unsigned char *v)
{
unsigned char ack=8;
unsigned char BitCnt=8;//一字节8位
// U8 d[1];
//S ADD W A REG A
//// L1_I2C_WriteReg(sla,reg);
//step 1----
L0_I2C_Start(); //启动I2C
//step 2----L0_I2C_SendData(sla);//发送器件地址
//设置SDA 口为输出
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((sla << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 3---L0_I2C_SendData(reg);
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((reg << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 4----
L0_I2C_Start(); //启动I2C
//step 5---
//设置SDA 口为输出
sla|=0x01;
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((sla << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 6---receive data
//设置SDA 口为输出
*v = L0_I2C_ReceiveData();
L0_I2C_SCL(1);
L0_I2C_SCL(0);/// send NA
//step 7--- P
L0_I2C_Stop();
}
///S 80H A Register Address A S 81H A Data NA P
#endif

63
source/msp/nouse/msp_iicM1.h

@ -1,63 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 除了io配置 ,其他地方如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef _msp_iicM1_H_
#define _msp_iicM1_H_
#include "c_lib.h"
#include "bsp_config.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#if 0
//// for stc 11.0M
#define delay10us() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(1) //根据cpu的速率进行相应的调整
#define L0_I2C_delay(x) NOP();NOP();///Lc_delay_us(x)
#else
///#define delay10us() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(1) //根据cpu的速率进行相应的调整
///#define L0_I2C_delay(x) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(x)
//#define delay10us() Lc_delay_us(3000) //根据cpu的速率进行相应的调整
//#define L0_I2C_delay(x) Lc_delay_us(10000)
///#define delay10us() Lc_delay_us(80) //20us
///#define L0_I2C_delay(x) Lc_delay_us(300) //25us
#define L0_slc_1_delay() Lc_delay_nop(4);
#define L0_slc_0_delay() Lc_delay_nop(1); // 4us
#define L0_IICM1_delay(x) ///Lc_delay_us(80)
#endif
//<<<<端口位定义,可修改!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern void L2_IICM1_ReadReg(unsigned char sla,unsigned char reg,unsigned char *r,unsigned char n);
extern void L2_IICM1_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd);
extern void L0_IICM1_INIT(unsigned char v);
////extern void L2_tws_ReadReg(unsigned char sla,unsigned char reg,
//// unsigned char *v);
#define L2_tws_ReadReg(x,y,z) L2_IICM1_ReadReg((x),(y),(z),1)
extern unsigned char L2_IICM1_Read1Reg1D(unsigned char sla,unsigned char reg);
#endif// #ifndef _IIC_H_

383
source/msp/nouse/msp_iicM2.c

@ -1,383 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
///#include "msp_iicM1.h"
#include "msp_iicM2.h"
/*------------------------------------------------
I2C总线传输数据过程中
SDA 线
使9
6
I2C总线标准规定 0 ACK
A 1 NACK
NALSB之后SDA线SDA
------------------------------------------------*/
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void L0_IICM2_SCL(unsigned char v)
{
if(v)
{
L0_IICM2_SCL_ON();/// L0_SCL_ON();
L0_slc2_1_delay();
}
else
{
L0_IICM2_SCL_OFF();///L0_SCL_OFF();
L0_slc2_0_delay();
}
}
void L0_IICM2_SDA(unsigned char v)
{
if(v)
{
L0_IICM2_SDA_ON();
L0_slc2_1_delay();
}
else
{
L0_IICM2_SDA_OFF();
L0_slc2_0_delay();
}
}
void L0_IICM2_INIT(unsigned char v)
{
if (v)
{
//L0_IIC_SIM2_INIT();
L0_IICM2_SCL_init();
L0_IICM2_SDA_init();
L0_IICM2_SDA(1);
L0_IICM2_SCL(1);
}else
{
}
}
unsigned char L0_IICM2_SDA_ask(void)
{
return L0_IICM2_SDA_AT();
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/****************
void L0_I2C_Reset(void)
{
L0_I2C_SCL(1); L0_I2C_SDA(1); //确认释放总线
}
********************/
#define L0_IIC_SIM2_INIT()
#define L0_IIC_SIM2_close()
//**********************************************
//送起始位 IO_SDA=1->0
void L0_IICM2_Start(void)
{
///L0_IIC_SIM2_INIT();
L0_IICM2_SDA(1);
L0_IICM2_SCL(1);
L0_IICM2_SDA(0);
L0_IICM2_SCL(0);
}
//************************************************
//送停止位 IO_SDA = 0->1
void L0_IICM2_Stop(void)
{
L0_IICM2_SDA(0);
L0_IICM2_SCL(1);
L0_IICM2_SDA(1);
L0_IIC_SIM2_INIT();
L0_IIC_SIM2_close();
}
//************************************************
//主应答(包含ack:IO_SDA = 0和no_ack:IO_SDA = 0)
void L0_IICM2_Ack(void)
{ //设置SDA 口为输出
L0_IICM2_SCL(0);
L0_IICM2_SDA(0);
L0_IICM2_SCL(1);
L0_IICM2_SCL(0);
L0_IICM2_SDA(1);
}
void L0_IICM2_NoAck(void)
{ //设置SDA 口为输出
L0_IICM2_SCL(0);
L0_IICM2_SDA(1);
L0_IICM2_SCL(1);
L0_IICM2_SCL(0);
}
/******
I2C总线标准规定 0 ACK A
1 NACK NA
LSB之后SDA线SDA
// 检测 SDA是否回ACK
bit L0_I2C_Test_Ack(void)
{ //设置SDA 口为输入
bit ACK_Flag = 0;
L0_I2C_SCL(0);
L0_I2C_SDA(1);
L0_I2C_SCL(1);
if(IO_SDA = 0)
ACK_Flag = 1;
else
ACK_Flag = 0;
L0_I2C_SCL(0);
return ACK_Flag;
// return 1;// debug
}
*******/
//*************************************************
//字节发送程序
//发送c(可以是数据也可是地址),送完后接收从应答
//不考虑从应答位
void L0_IICM2_SendData(unsigned char c)
{
unsigned char ack=8;
unsigned char BitCnt=8;//一字节8位
//设置SDA 口为输出
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((c << BitCnt ) & 0x80)
L0_IICM2_SDA(1); //判断发送位
else
L0_IICM2_SDA(0);
L0_IICM2_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_IICM2_SCL(0);
}//8clk
L0_IICM2_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_IICM2_SCL(1);
///gRccUs05 += L0_I2C_SDA_ask();
L0_IICM2_SCL(0);
L0_IICM2_delay();
}
//**************************************************
//字节接收程序
//接收器件传来的数据,此程序应配合|主应答函数|i2c_ack_main(void)使用
//return: uchar型1字节
unsigned char L0_IICM2_ReceiveData(void)
{
unsigned char BitCnt=8,IIC_RX_Data = 0;
L0_IICM2_SDA(1); //读入数据 设置SDA 口为输入
for(BitCnt = 0;BitCnt<8;BitCnt++)
{
L0_IICM2_delay(1);
L0_IICM2_SCL(0); //置时钟线为低,准备接收数据位
L0_IICM2_SCL(1); //置时钟线为高使数据线上数据有效
L0_IICM2_delay(1);
IIC_RX_Data = IIC_RX_Data << 1;
if(1 == L0_IICM2_SDA_ask())
IIC_RX_Data = IIC_RX_Data + 1; //读数据位,接收的数据位放入retc中
L0_IICM2_delay(1);
}// 8clk up
L0_IICM2_SCL(0);
return IIC_RX_Data;
}
/// 读取 n个数据 放入p中
void L1_IICM2_ReadNByte(unsigned char Sal, unsigned char *p,unsigned char n)
{
unsigned char i;
L0_IICM2_Start(); // 启动I2C
L0_IICM2_SendData((Sal)| 0x01); //发送器件地址
for(i = 0;i < n-1;i ++) //读取字节数据
{
*(p + i) = L0_IICM2_ReceiveData(); //读取数据
///printf("%x ",(int)(*(p + i)));
L0_IICM2_Ack(); //__/```\__
}
*(p + n - 1) = L0_IICM2_ReceiveData();
L0_IICM2_NoAck();
L0_IICM2_Stop();
}
#if 0
Master ST SAD+W SUB SR SAD+R MAK MAK NMAK SP
Slave SAK SAK SAK DATA DATA DATA
0x19
0001 1001
0011 001R
#endif
///////////////////////////////
///写入一个reg 为后续的写命令或者读取服务
void L1_IICM2_WriteReg(unsigned char sla,unsigned char reg)
{
L0_IICM2_Start(); //启动I2C
L0_IICM2_SendData(sla);//发送器件地址
L0_IICM2_SendData(reg);
}
// sla.(reg)=cmd
void L2_IICM2_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd)
{
L1_IICM2_WriteReg(sla,reg);
L0_IICM2_SendData(cmd);
L0_IICM2_Stop();
/*****************
if(gRccUs05 >0)///测试iic有效否 发现没有结果
{
L0_uart0_uc(gRccUs05);gRccUs05 = 0;
}
***************/
}
//读取reg地址的n个数据 sla.(reg) sla.(reg+1)................ sla.(reg+n)
void L2_IICM2_ReadReg(unsigned char sla,unsigned char reg,
unsigned char *r,unsigned char n)
{
// U8 d[1];
//S ADD W A REG A
L1_IICM2_WriteReg(sla,reg);
//S ADD R A D1 A D2 A.....DX N P
L1_IICM2_ReadNByte(sla,r,n);
}
//读取reg地址的n个数据 sla.(reg) sla.(reg+1)................ sla.(reg+n)
unsigned char L2_IICM2_Read1Reg1D(unsigned char sla,unsigned char reg)
{
U8 d;
// U8 d[1];
//S ADD W A REG A
L1_IICM2_WriteReg(sla,reg);
//S ADD R A D1 A D2 A.....DX N P
L1_IICM2_ReadNByte(sla,&d,1);
return d;
}
#if 0////不可删除
///S 80H A Register Address A S 81H A Data NA P
void L2_tws_ReadReg000(unsigned char sla,unsigned char reg,
unsigned char *v)
{
unsigned char ack=8;
unsigned char BitCnt=8;//一字节8位
// U8 d[1];
//S ADD W A REG A
//// L1_I2C_WriteReg(sla,reg);
//step 1----
L0_I2C_Start(); //启动I2C
//step 2----L0_I2C_SendData(sla);//发送器件地址
//设置SDA 口为输出
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((sla << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 3---L0_I2C_SendData(reg);
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((reg << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 4----
L0_I2C_Start(); //启动I2C
//step 5---
//设置SDA 口为输出
sla|=0x01;
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((sla << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 6---receive data
//设置SDA 口为输出
*v = L0_I2C_ReceiveData();
L0_I2C_SCL(1);
L0_I2C_SCL(0);/// send NA
//step 7--- P
L0_I2C_Stop();
}
///S 80H A Register Address A S 81H A Data NA P
#endif

63
source/msp/nouse/msp_iicM2.h

@ -1,63 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 除了io配置 ,其他地方如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef _msp_iicM2_H_
#define _msp_iicM2_H_
#include "c_lib.h"
#include "bsp_config.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#if 0
//// for stc 11.0M
#define delay10us() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(1) //根据cpu的速率进行相应的调整
#define L0_I2C_delay(x) NOP();NOP();///Lc_delay_us(x)
#else
///#define delay10us() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(1) //根据cpu的速率进行相应的调整
///#define L0_I2C_delay(x) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(x)
//#define delay10us() Lc_delay_us(3000) //根据cpu的速率进行相应的调整
//#define L0_I2C_delay(x) Lc_delay_us(10000)
///#define delay10us() Lc_delay_us(80) //20us
///#define L0_I2C_delay(x) Lc_delay_us(300) //25us
#define L0_slc2_1_delay() Lc_delay_nop(4);
#define L0_slc2_0_delay() Lc_delay_nop(1); // 4us
#define L0_IICM2_delay(x) ///Lc_delay_us(80)
#endif
//<<<<端口位定义,可修改!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern void L2_IICM2_ReadReg(unsigned char sla,unsigned char reg,unsigned char *r,unsigned char n);
extern void L2_IICM2_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd);
extern void L0_IICM2_INIT(unsigned char v);
////extern void L2_tws_ReadReg(unsigned char sla,unsigned char reg,
//// unsigned char *v);
#define L2_tws_ReadReg2(x,y,z) L2_IICM2_ReadReg((x),(y),(z),1)
extern unsigned char L2_IICM2_Read1Reg1D(unsigned char sla,unsigned char reg);
#endif// #ifndef _IIC_H_

447
source/msp/nouse/msp_iicMx c.c

@ -1,447 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#include "msp_iicM1.h"
/*------------------------------------------------
I2C总线传输数据过程中
SDA 线
使9
6
I2C总线标准规定 0 ACK
A 1 NACK
NALSB之后SDA线SDA
------------------------------------------------*/
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void L0_IICMx_SDA(vtype ch,vtype v)
{
}
vtype L0_IICMx_SDA_get(vtype ch,vtype v)
{
}
void L0_IICMx_SCL(vtype ch,vtype v)
{
if(v)
{
L0_IICM1_SCL_ON();/// L0_SCL_ON();
switch (ch)
{
case 0:
L0_IICM1_SCL_ON();
break;
case 1:
L0_IICM1_SCL_ON();
break;
case 2:
L0_IICM1_SCL_ON();
break;
}
L0_slc_1_delay();
}
else
{
switch (ch)
{
case 0:
L0_IICM1_SCL_Off();
break;
case 1:
L0_IICM1_SCL_Off();
break;
case 2:
L0_IICM1_SCL_ON();
break;
}
L0_slc_0_delay();
}
}
void L0_IICM1_SCL(unsigned char v)
{
if(v)
{
L0_IICM1_SCL_ON();/// L0_SCL_ON();
L0_slc_1_delay();
}
else
{
L0_IICM1_SCL_OFF();///L0_SCL_OFF();
L0_slc_0_delay();
}
}
void L0_IICM1_SDA(unsigned char v)
{
if(v)
{
L0_IICM1_SDA_ON();
L0_slc_1_delay();
}
else
{
L0_IICM1_SDA_OFF();
L0_slc_0_delay();
}
}
void L0_IICM1_INIT(unsigned char v)
{
if (v)
{
//L0_IIC_SIM_INIT();
L0_IICM1_SCL_init();
L0_IICM1_SDA_init();
L0_IICM1_SDA(1);
L0_IICM1_SCL(1);
}else
{
}
}
unsigned char L0_IICM1_SDA_ask(void)
{
return L0_IICM1_SDA_AT();
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/****************
void L0_I2C_Reset(void)
{
L0_I2C_SCL(1); L0_I2C_SDA(1); //确认释放总线
}
********************/
#define L0_IIC_SIM_INIT()
#define L0_IIC_SIM_close()
//**********************************************
//送起始位 IO_SDA=1->0
void L0_IICM1_Start(void)
{
///L0_IIC_SIM_INIT();
L0_IICM1_SDA(1);
L0_IICM1_SCL(1);
L0_IICM1_SDA(0);
L0_IICM1_SCL(0);
}
//************************************************
//送停止位 IO_SDA = 0->1
void L0_IICM1_Stop(void)
{
L0_IICM1_SDA(0);
L0_IICM1_SCL(1);
L0_IICM1_SDA(1);
L0_IIC_SIM_INIT();
L0_IIC_SIM_close();
}
//************************************************
//主应答(包含ack:IO_SDA = 0和no_ack:IO_SDA = 0)
void L0_IICM1_Ack(void)
{ //设置SDA 口为输出
L0_IICM1_SCL(0);
L0_IICM1_SDA(0);
L0_IICM1_SCL(1);
L0_IICM1_SCL(0);
L0_IICM1_SDA(1);
}
void L0_IICM1_NoAck(void)
{ //设置SDA 口为输出
L0_IICM1_SCL(0);
L0_IICM1_SDA(1);
L0_IICM1_SCL(1);
L0_IICM1_SCL(0);
}
/******
I2C总线标准规定 0 ACK A
1 NACK NA
LSB之后SDA线SDA
// 检测 SDA是否回ACK
bit L0_I2C_Test_Ack(void)
{ //设置SDA 口为输入
bit ACK_Flag = 0;
L0_I2C_SCL(0);
L0_I2C_SDA(1);
L0_I2C_SCL(1);
if(IO_SDA = 0)
ACK_Flag = 1;
else
ACK_Flag = 0;
L0_I2C_SCL(0);
return ACK_Flag;
// return 1;// debug
}
*******/
//*************************************************
//字节发送程序
//发送c(可以是数据也可是地址),送完后接收从应答
//不考虑从应答位
void L0_IICM1_SendData(unsigned char c)
{
unsigned char ack=8;
unsigned char BitCnt=8;//一字节8位
//设置SDA 口为输出
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((c << BitCnt ) & 0x80)
L0_IICM1_SDA(1); //判断发送位
else
L0_IICM1_SDA(0);
L0_IICM1_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_IICM1_SCL(0);
}//8clk
L0_IICM1_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_IICM1_SCL(1);
///gRccUs05 += L0_I2C_SDA_ask();
L0_IICM1_SCL(0);
L0_IICM1_delay();
}
//**************************************************
//字节接收程序
//接收器件传来的数据,此程序应配合|主应答函数|i2c_ack_main(void)使用
//return: uchar型1字节
unsigned char L0_IICM1_ReceiveData(void)
{
unsigned char BitCnt=8,IIC_RX_Data = 0;
L0_IICM1_SDA(1); //读入数据 设置SDA 口为输入
for(BitCnt = 0;BitCnt<8;BitCnt++)
{
L0_IICM1_delay(1);
L0_IICM1_SCL(0); //置时钟线为低,准备接收数据位
L0_IICM1_SCL(1); //置时钟线为高使数据线上数据有效
L0_IICM1_delay(1);
IIC_RX_Data = IIC_RX_Data << 1;
if(1 == L0_IICM1_SDA_ask())
IIC_RX_Data = IIC_RX_Data + 1; //读数据位,接收的数据位放入retc中
L0_IICM1_delay(1);
}// 8clk up
L0_IICM1_SCL(0);
return IIC_RX_Data;
}
/// 读取 n个数据 放入p中
void L1_IICM1_ReadNByte(unsigned char Sal, unsigned char *p,unsigned char n)
{
unsigned char i;
L0_IICM1_Start(); // 启动I2C
L0_IICM1_SendData((Sal)| 0x01); //发送器件地址
for(i = 0;i < n-1;i ++) //读取字节数据
{
*(p + i) = L0_IICM1_ReceiveData(); //读取数据
///printf("%x ",(int)(*(p + i)));
L0_IICM1_Ack(); //__/```\__
}
*(p + n - 1) = L0_IICM1_ReceiveData();
L0_IICM1_NoAck();
L0_IICM1_Stop();
}
#if 0
Master ST SAD+W SUB SR SAD+R MAK MAK NMAK SP
Slave SAK SAK SAK DATA DATA DATA
0x19
0001 1001
0011 001R
#endif
///////////////////////////////
///写入一个reg 为后续的写命令或者读取服务
void L1_IICM1_WriteReg(unsigned char sla,unsigned char reg)
{
L0_IICM1_Start(); //启动I2C
L0_IICM1_SendData(sla);//发送器件地址
L0_IICM1_SendData(reg);
}
// sla.(reg)=cmd
void L2_IICM1_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd)
{
L1_IICM1_WriteReg(sla,reg);
L0_IICM1_SendData(cmd);
L0_IICM1_Stop();
/*****************
if(gRccUs05 >0)///测试iic有效否 发现没有结果
{
L0_uart0_uc(gRccUs05);gRccUs05 = 0;
}
***************/
}
//读取reg地址的n个数据 sla.(reg) sla.(reg+1)................ sla.(reg+n)
void L2_IICM1_ReadReg(unsigned char sla,unsigned char reg,
unsigned char *r,unsigned char n)
{
// U8 d[1];
//S ADD W A REG A
L1_IICM1_WriteReg(sla,reg);
//S ADD R A D1 A D2 A.....DX N P
L1_IICM1_ReadNByte(sla,r,n);
}
//读取reg地址的n个数据 sla.(reg) sla.(reg+1)................ sla.(reg+n)
unsigned char L2_IICM1_Read1Reg1D(unsigned char sla,unsigned char reg)
{
U8 d;
// U8 d[1];
//S ADD W A REG A
L1_IICM1_WriteReg(sla,reg);
//S ADD R A D1 A D2 A.....DX N P
L1_IICM1_ReadNByte(sla,&d,1);
return d;
}
#if 0////不可删除
///S 80H A Register Address A S 81H A Data NA P
void L2_tws_ReadReg000(unsigned char sla,unsigned char reg,
unsigned char *v)
{
unsigned char ack=8;
unsigned char BitCnt=8;//一字节8位
// U8 d[1];
//S ADD W A REG A
//// L1_I2C_WriteReg(sla,reg);
//step 1----
L0_I2C_Start(); //启动I2C
//step 2----L0_I2C_SendData(sla);//发送器件地址
//设置SDA 口为输出
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((sla << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 3---L0_I2C_SendData(reg);
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((reg << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 4----
L0_I2C_Start(); //启动I2C
//step 5---
//设置SDA 口为输出
sla|=0x01;
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
if((sla << BitCnt ) & 0x80)
L0_I2C_SDA(1); //判断发送位
else
L0_I2C_SDA(0);
L0_I2C_SCL(1); //置时钟线为高,通知被控器开始接收数据位
L0_I2C_SCL(0);
}//8clk
L0_I2C_SDA(1); //8位发送完后释放数据线,准备接收应答位
L0_I2C_SCL(1);
L0_I2C_SCL(0);
//step 6---receive data
//设置SDA 口为输出
*v = L0_I2C_ReceiveData();
L0_I2C_SCL(1);
L0_I2C_SCL(0);/// send NA
//step 7--- P
L0_I2C_Stop();
}
///S 80H A Register Address A S 81H A Data NA P
#endif

63
source/msp/nouse/msp_iicMx f.h

@ -1,63 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 除了io配置 ,其他地方如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef _msp_iicM1_H_
#define _msp_iicM1_H_
#include "c_lib.h"
#include "bsp_config.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#if 0
//// for stc 11.0M
#define delay10us() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(1) //根据cpu的速率进行相应的调整
#define L0_I2C_delay(x) NOP();NOP();///Lc_delay_us(x)
#else
///#define delay10us() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(1) //根据cpu的速率进行相应的调整
///#define L0_I2C_delay(x) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(x)
//#define delay10us() Lc_delay_us(3000) //根据cpu的速率进行相应的调整
//#define L0_I2C_delay(x) Lc_delay_us(10000)
///#define delay10us() Lc_delay_us(80) //20us
///#define L0_I2C_delay(x) Lc_delay_us(300) //25us
#define L0_slc_1_delay() Lc_delay_nop(4);
#define L0_slc_0_delay() Lc_delay_nop(1); // 4us
#define L0_IICM1_delay(x) ///Lc_delay_us(80)
#endif
//<<<<端口位定义,可修改!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern void L2_IICM1_ReadReg(unsigned char sla,unsigned char reg,unsigned char *r,unsigned char n);
extern void L2_IICM1_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd);
extern void L0_IICM1_INIT(unsigned char v);
////extern void L2_tws_ReadReg(unsigned char sla,unsigned char reg,
//// unsigned char *v);
#define L2_tws_ReadReg(x,y,z) L2_IICM1_ReadReg((x),(y),(z),1)
extern unsigned char L2_IICM1_Read1Reg1D(unsigned char sla,unsigned char reg);
#endif// #ifndef _IIC_H_

62
source/msp/nouse/msp_iicN1.h

@ -1,62 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 除了io配置 ,其他地方如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef _IIC_M1_H_
#define _IIC_M1_H_
#include "c_lib.h"
#include "bsp_config.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#if 0
//// for stc 11.0M
#define delay10us() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(1) //根据cpu的速率进行相应的调整
#define L0_I2C_delay(x) NOP();NOP();///Lc_delay_us(x)
#else
///#define delay10us() NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(1) //根据cpu的速率进行相应的调整
///#define L0_I2C_delay(x) NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();///Lc_delay_us(x)
//#define delay10us() Lc_delay_us(3000) //根据cpu的速率进行相应的调整
//#define L0_I2C_delay(x) Lc_delay_us(10000)
///#define delay10us() Lc_delay_us(80) //20us
///#define L0_I2C_delay(x) Lc_delay_us(300) //25us
#define L0_slc_1_delay() Lc_delay_nop(4);
#define L0_slc_0_delay() Lc_delay_nop(1); // 4us
#define L0_I2C_delay(x) ///Lc_delay_us(80)
#endif
//<<<<端口位定义,可修改!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern void L2_I2C_ReadReg(unsigned char sla,unsigned char reg,unsigned char *r,unsigned char n);
extern void L2_I2C_WriteCmd(unsigned char sla,unsigned char reg,unsigned char cmd);
extern void L0_I2C_INIT(unsigned char v);
////extern void L2_tws_ReadReg(unsigned char sla,unsigned char reg,
//// unsigned char *v);
#define L2_tws_ReadReg(x,y,z) L2_I2C_ReadReg((x),(y),(z),1)
#endif// #ifndef _IIC_H_

204
source/msp/nouse/msp_time1.c

@ -1,204 +0,0 @@
#include "msp_Time1.h"
#define D_TIMER_COUNT(t,clk,timeInUs) (U16)(65536- 1.0 * (clk) / 1000 * (1.0 * timeInUs / 1000) / t)
_TS_timer1 ts_timer1;
#if 0
void L0_timer1_Init_7ms(void) //7毫秒@11.0592MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xCD; //设置定时初值
TH1 = 0xE6; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
}
void L0_timer1_Init_5ms(void) //5毫秒@11.0592MHz
{//0x7F示波器测试大约40ms,led闪烁 肉眼可见
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x00; //设置定时初值
TH1 = 0xEE; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
}
void L0_timer1_Init_1ms(void) //1毫秒@11.0592MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xCD; //设置定时初值
TH1 = 0xD4; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
}
void L0_timer1_Init(void) //600微秒@11.0592MHz
{
U16 val = D_TIMER_COUNT(1,D_sys_MainFre,TYPE_JIFFIES_600US);
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
//TL1 = 0x14; //设置定时初值
//TH1 = 0xE6; //设置定时初值
TL1 = val; //设置定时初值
TH1 = val >>8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
}
//0x7F示波器测试大约40ms,led闪烁 肉眼可见
void L0_timer1_reset(void)
{
U16 val = D_TIMER_COUNT(1,D_sys_MainFre,TYPE_JIFFIES_600US);
TR1 = 0;
//TL1 = 0x14; //设置定时初值
//TH1 = 0xE6; //设置定时初值
TL1 = val; //设置定时初值
TH1 = val >>8; //设置定时初值
TR1 = 1;
TF1 = 0;
}
void L0_timer1_start() //600微秒@11.0592MHz
{
#if 0
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x14; //设置定时初值
TH1 = 0xE6; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
#else
U16 val = D_TIMER_COUNT(1,D_sys_MainFre,TYPE_JIFFIES_600US);
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
//TL1 = 0xCD; //设置定时初始值
//TH1 = 0xD4; //设置定时初始值
TL1 = val; //设置定时初值
TH1 = val >>8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
#endif
}
void L0_timer1_restart() //600微秒@11.0592MHz
{
U16 val = D_TIMER_COUNT(1,D_sys_MainFre,TYPE_JIFFIES_600US);
TR1 = 0; //先关闭,否则会重复中断,起不到resetart效果
#if 1
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
//TL1 = 0x14; //设置定时初值
//TH1 = 0xE6; //设置定时初值
TL1 = val; //设置定时初值
TH1 = val >>8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
#else
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xCD; //设置定时初始值
TH1 = 0xD4; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
#endif
}
void L0_timer1_stop2222(void)
{
TR1 = 0;
TF1 = 0;
}
void L0_timer1_init6666(void) //TYPE_JIFFIES_25MS@11.0592MHz
{
U16 val = D_TIMER_COUNT(1,D_sys_MainFre,TYPE_JIFFIES_25MS);
TR1 = 0; //先关闭,否则会重复中断,起不到resetart效果
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
//TL1 = 0x14; //设置定时初值
//TH1 = 0xE6; //设置定时初值
TL1 = val; //设置定时初值
TH1 = val >>8; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
}
#endif
void L0_timer1_init(void)
///void Timer1Init(void) //20毫秒@22.1184MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x00; //设置定时初始值
TH1 = 0x70; //设置定时初始值
TF1 = 0; //清除TF1标志
// TR1 = 1; //定时器1开始计时
ET1 = 1; //add by cc
}
void timer1_isrHanddle(void) interrupt 3//// D_SERVE_TIMER1
{
TF1 = 0; //清除TF1标志
D_motor1_BI_rev();
#if 0
Ts_uart_rev_ *p = &s_uart0_rec;
#define D_s_modbus_min 4 //modbus协议的最小长度
if((p->head == 1) && (p->num >= D_s_modbus_min))
{
//LED1 ^= 1;
p->head = 0;
#ifdef D_use_crc
crc16qq(p->crc,p->buf,p->num - 2); ////fixme 20220311 ///crc16qq(p->crc,p->buf,p->num - 2); //校验CRC
#endif
// crc16(p->crc,p->buf,p->num - 2); //校验CRC
if(p->crc[0] == p->buf[p->num-2] && p->crc[1] == p->buf[p->num-1])
{
p->ok = 1;
LED0 ^= 1;
}
p->debugok = 1;
}
L0_timer1_stop();
#endif
/// L2_callback_uart0_free();
// ts_timer1.callback();
}
/******************************END*********************************/

42
source/msp/nouse/msp_time2.c

@ -1,42 +0,0 @@
#include "msp_Time2.h"
#include "msp_uart1.h"
_TS_timer2 ts_timer2;
#if 10
void L0_timer2_init(void)////void Timer2Init(void) //3毫秒@22.1184MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0x66; //设置定时初始值
T2H = 0xEA; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
}
#else
void L0_timer2_init10_22M(void)///void Timer2Init(void) //10毫秒@22.1184MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0x00; //设置定时初始值
T2H = 0xB8; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
}
void L0_timer2_init(void)///void Timer2Init(void) //35毫秒@22.1184MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0x00; //设置定时初始值
T2H = 0x04; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
}
#endif
void timer2_isrHanddle(void) D_SERVE_TIMER2
{
/// ts_timer2.callback(ts_timer2.p);
/// ts_timer2.callback(ts_timer2.p);
}
/******************************END*********************************/

28
source/msp/nouse/msp_time2.h

@ -1,28 +0,0 @@
#ifndef _MSP_TIMER2_H
#define _MSP_TIMER2_H
#include "c_type51.h"
#include "../bsp/bsp_config.h"
#include "../ctask/TTSS_tick.h"
#include "msp_uart1.h"
extern void L0_timer2_init(void);
#define L0_timer2_stop(); BITN_0(AUXR, T2R);///
#define L0_timer2_start(); BITN_1(AUXR, T2R);/////定时器2开始计时
#define L0_timer2_int_on(); BITN_1(IE2,ET2);
#define L0_timer2_int_off(); BITN_0(IE2,ET2);
typedef struct
{
/// void (*callback)(Ts_uart_rev_ *p);
// Ts_uart_rev_ *p;
int *p;
}_TS_timer2;
extern _TS_timer2 ts_timer2;
#endif

140
source/msp/simiic n/msp_siic1.c

@ -1,140 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2022, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
/// @info 如无必要请勿修改
/// @version 1.2 CCsens technology
/// @author CC
/// @date 20220404
/// @info 优化init函数
//
//////////////////////////////////////////////////////////////////////////
#include "msp_siic1.h"
void L0_siic1_SDA_out(vType v)
{
if(v)
{
L0_SDA1_OUT();
}else
{
L0_SDA1_IN();
}
}
void L0_siic1_SDA(vType v)
{
/// printf("sda\r\n");
if(v)
{
L0_SDA1_ON();
}else
{
L0_SDA1_OFF();
}
}
vType L0_siic1_SDA_get(void)
{
if( 0!= L0_SDA1_AT())
{
return 1;
}else
{
return 0;
}
}
void L0_siic1_SCL_out(vType v)
{
if(v)
{
L0_SCL1_OUT();
}else
{
L0_SCL1_IN();
}
}
void L0_siic1_SCL(vType v)
{
if(v)
{
L0_SCL1_ON();
}else
{
L0_SCL1_OFF();
}
Lc_delay_us(D_SIIC1_DELAY);
}
void L0_siic1_close(void)
{
///管教设置为高阻态
}
void L1_siic1_INIT(vtype openclose)
{
ts_siic[D_IIC_CH1].n = 0;
ts_siic[D_IIC_CH1].sh = D_IIC_CH1;
ts_siic[D_IIC_CH1].sal = D_iic1_addr;//unsigned char sal; //
ts_siic[D_IIC_CH1].pf_SDA_out = L0_siic1_SDA_out;//void (*pf_SDA_out)(vType x); //
ts_siic[D_IIC_CH1].pf_SDA_set = L0_siic1_SDA;//void (*pf_SDA_set)(vType x); //
ts_siic[D_IIC_CH1].pf_SDA_get = L0_siic1_SDA_get;//vType (*pf_SDA_get)(void); //
ts_siic[D_IIC_CH1].pf_SCL_out = L0_siic1_SCL_out;//void (*pf_SCL_out)(vType x); //
ts_siic[D_IIC_CH1].pf_SCL_set = L0_siic1_SCL;//void (*pf_SCL_set)(vType x); //
/// ts_siic[D_IIC_CH1].pf_init = L1_siic1_INIT;//void (*pf_init)(void); //
if (openclose)
{
}else
{
}
}
/***
TS_siic ts_siic1=
{
0,//vU32 n; //
1,//vType sh; //
D_iic1_addr,//unsigned char sal; //
L0_siic1_SDA_out,//void (*pf_SDA_out)(vType x); //
L0_siic1_SDA,//void (*pf_SDA_set)(vType x); //
L0_siic1_SDA_get,//vType (*pf_SDA_get)(void); //
L0_siic1_SCL_out,//void (*pf_SCL_out)(vType x); //
L0_siic1_SCL,//void (*pf_SCL_set)(vType x); //
L1_siic1_INIT//void (*pf_init)(void); //
};
**/

38
source/msp/simiic n/msp_siic1.h

@ -1,38 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 除了io配置 ,其他地方如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef _siic1_H_
#define _siic1_H_
#include "c_lib.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include "bsp_config.h"
#include "msp_siicx.h"
#define D_SIIC1_DELAY 100
//<<<<端口位定义,可修改!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#endif// #ifndef _IIC_H_

150
source/msp/simiic n/msp_siic2.c

@ -1,150 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#include "msp_siic2.h"
TS_siic ts_siic2;
/*------------------------------------------------
I2C总线传输数据过程中
SDA 线
使9
6
I2C总线标准规定 0 ACK
A 1 NACK
NALSB之后SDA线SDA
void (*pf_SDA_out)(vType x);
void (*pf_SDA_set)(vType x);
vType (*pf_SDA_get)(void);
void (*pf_SCL_out)(vType x);
void (*pf_SCL_set)(vType x);
/// void (*pf_init)(void);
void (*pf_close)(void);
------------------------------------------------*/
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void L0_siic2_SDA_out(vType v )
{
if(v)
{
L0_SDA2_OUT();
}else
{
L0_SDA2_IN();
}
}
void L0_siic2_SDA(vType v)
{
if(v)
{
L0_SDA2_ON();
}else
{
L0_SDA2_OFF();
}
}
vType L0_siic2_SDA_get(void)
{
if( 0!= L0_SDA2_AT())
{
return 1;
}else
{
return 0;
}
}
void L0_siic2_SCL_out(vType v)
{
if(v)
{
L0_SCL2_OUT();
}else
{
L0_SCL2_IN();
}
}
void L0_siic2_SCL(vType v)
{
if(v)
{
L0_SCL2_ON();
}else
{
L0_SCL2_OFF();
}
Lc_delay_us(D_SIIC2_DELAY);
}
void L0_siic2_close(void)
{
///管教设置为高阻态
}
void L1_siic2_INIT(void)
{
ts_siic2.pf_SDA_out = L0_siic2_SDA_out;
ts_siic2.pf_SDA_set = L0_siic2_SDA;
ts_siic2.pf_SDA_get = L0_siic2_SDA_get;
ts_siic2.pf_SCL_out = L0_siic2_SCL_out;
ts_siic2.pf_SCL_set = L0_siic2_SCL;
ts_siic2.pf_close = L0_siic2_close;
L0_iicx_SendData(&ts_siic2,0xaa);
ts_siic2.sal = D_iic2_addr;
}

55
source/msp/simiic n/msp_siic2.h

@ -1,55 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 除了io配置 ,其他地方如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef _SIIC2_H_
#define _SIIC2_H_
#include "../clib/type.h"
#include "../clib/clib.h"
#include "../ctask/tick.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include "../bsp/bsp_config.h"
#include "msp_siicx.h"
#define L0_SDA2_OUT() D_P47_OUT()
#define L0_SDA2_IN() D_P47_IN()
#define L0_SDA2_ON() D_P47_ON()
#define L0_SDA2_OFF() D_P47_OFF()
#define L0_SDA2_AT() D_P47_AT()
#define L0_SCL2_OUT() D_P46_OUT()
#define L0_SCL2_IN() D_P46_IN()
#define L0_SCL2_ON() D_P46_ON()
#define L0_SCL2_OFF() D_P46_OFF()
#define D_iic2_addr 0x44
#define D_SIIC2_DELAY 100
//<<<<端口位定义,可修改!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern TS_siic ts_siic2;
extern void L1_siic2_INIT(void);
#endif// #ifndef _IIC_H_

145
source/msp/simiic n/msp_siic3.c

@ -1,145 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#include "msp_siic3.h"
TS_siic ts_siic3;
/*------------------------------------------------
I2C总线传输数据过程中
SDA 线
使9
6
I2C总线标准规定 0 ACK
A 1 NACK
NALSB之后SDA线SDA
void (*pf_SDA_out)(vType x);
void (*pf_SDA_set)(vType x);
vType (*pf_SDA_get)(void);
void (*pf_SCL_out)(vType x);
void (*pf_SCL_set)(vType x);
/// void (*pf_init)(void);
void (*pf_close)(void);
------------------------------------------------*/
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void L0_siic3_SDA_out(vType v )
{
if(v)
{
L0_SDA3_OUT();
}else
{
L0_SDA3_IN();
}
}
void L0_siic3_SDA(vType v)
{
if(v)
{
L0_SDA3_ON();
}else
{
L0_SDA3_OFF();
}
}
vType L0_siic3_SDA_get(void)
{
if( 0!= L0_SDA3_AT())
{
return 1;
}else
{
return 0;
}
}
void L0_siic3_SCL_out(vType v)
{
if(v)
{
L0_SCL3_OUT();
}else
{
L0_SCL3_IN();
}
}
void L0_siic3_SCL(vType v)
{
if(v)
{
L0_SCL3_ON();
}else
{
L0_SCL3_OFF();
}
Lc_delay_us(D_SIIC3_DELAY);
}
void L0_siic3_close(void)
{
///管教设置为高阻态
}
void L1_siic3_INIT(void)
{
ts_siic3.pf_SDA_out = L0_siic3_SDA_out;
ts_siic3.pf_SDA_set = L0_siic3_SDA;
ts_siic3.pf_SDA_get = L0_siic3_SDA_get;
ts_siic3.pf_SCL_out = L0_siic3_SCL_out;
ts_siic3.pf_SCL_set = L0_siic3_SCL;
ts_siic3.pf_close = L0_siic3_close;
/// ts_siic3.sal = D_iic3_addr;
/// L0_iicx_SendData(&ts_siic3,0xaa);
}

53
source/msp/simiic n/msp_siic3.h

@ -1,53 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 除了io配置 ,其他地方如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef _SIIC3_H_
#define _SIIC3_H_
#include "../clib/type.h"
#include "../clib/clib.h"
#include "../ctask/tick.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include "../bsp/bsp_config.h"
#include "msp_siicx.h"
#define L0_SDA3_OUT() D_P85_OUT()
#define L0_SDA3_IN() D_P85_IN()
#define L0_SDA3_ON() D_P85_ON()
#define L0_SDA3_OFF() D_P85_OFF()
#define L0_SDA3_AT() D_P85_AT()
#define L0_SCL3_OUT() D_P84_OUT()
#define L0_SCL3_IN() D_P84_IN()
#define L0_SCL3_ON() D_P84_ON()
#define L0_SCL3_OFF() D_P84_OFF()
#define D_SIIC3_DELAY 100
//<<<<端口位定义,可修改!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern TS_siic ts_siic3;
extern void L1_siic3_INIT(void);
#endif// #ifndef _IIC_H_

483
source/msp/simiic n/msp_siicx.c

@ -1,483 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#include "msp_siicx.h"
#include "debug_drv.h"
TS_siic_ xdata ts_siic[D_IIC_NUM];
/*------------------------------------------------
I2C总线传输数据过程中
SDA 线
使9
6
;
I2C总线标准规定 0 ACK
A; 1 NACK
NALSB之后SDA线SDA
------------------------------------------------*/
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void L0_iicx_INIT(TS_siic_ *p,unsigned char v)
{
TS_siic_ *pp = p;
/// p->pf_init(1);
if (v)///正常工作
{
// p->pf_SDA_set(1);
// p->pf_SCL_set(1);
pp->pf_SDA_out(1);
pp->pf_SCL_out(1);
// //
}else
{
}
}
unsigned char L0_iicx_SDA_ask(TS_siic_ *p)
{
if(p->pf_SDA_get() != 0)
{
return 1;
}
else
{
return 0;
}
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
/****************
void L0_iicx_Reset(void)
{
p->pf_SCL_set(1); p->pf_SDA_set(1);//pf_SDA_set(1);; //确认释放总线
}
********************/
//**********************************************
//送起始位 IO_SDA=1->0
void L0_iicx_Start(TS_siic_ *p)
{
#if 0
TS_siic *pp = p;
pp->pf_SDA_set(1);//pf_SDA_set(1);;
pp->pf_SCL_set(1);
pp->pf_SDA_set(0);
pp->pf_SCL_set(0);
#else
p->pf_SDA_set(1);//pf_SDA_set(1);;
p->pf_SCL_set(1);
p->pf_SDA_set(0);
p->pf_SCL_set(0);
#endif
///fixme: cc
L0_slc_1_delay();
L0_slc_1_delay();
L0_slc_1_delay();
}
//************************************************
//送停止位 IO_SDA = 0->1
void L0_iicx_Stop(TS_siic_ *p)
{
p->pf_SDA_set(0);
p->pf_SCL_set(1);
p->pf_SDA_set(1);
/// p->pf_init(0);
}
//************************************************
//主应答(包含ack:IO_SDA = 0和no_ack:IO_SDA = 0)
///主机给从机的ACK
void L0_iicx_Ack(TS_siic_ *p)
{
p->pf_SDA_out(1);//设置SDA 口为输出
p->pf_SCL_set(0);
p->pf_SDA_set(0);
p->pf_SCL_set(1);
p->pf_SCL_set(0);
p->pf_SDA_out(0);
// Lc_delay_ms(2); ///for debug wave easy to see
}
///主机给从机的NOACK
void L0_iicx_NoAck(TS_siic_ *p)
{
p->pf_SDA_out(1);//设置SDA 口为输出
p->pf_SCL_set(0);
p->pf_SDA_set(1);
p->pf_SCL_set(1);
p->pf_SCL_set(0);
p->pf_SDA_out(0);
// Lc_delay_ms(2);
}
/// 从机返回的ack
void L0_iicx_WaitAck(TS_siic_ *p)
{
p->pf_SDA_out(0);
p->pf_SCL_set(1);
////
p->pf_SCL_set(0);
p->pf_SDA_out(1);
/// Lc_delay_ms(2);
}
/******
I2C总线标准规定 0 ACK A;
1 NACK NA
LSB之后SDA线SDA
// 检测 SDA是否回ACK
bit L0_iicx_Test_Ack(void)
{ //设置SDA 口为输入
bit ACK_Flag = 0;
p->pf_SCL_set(0);
p->pf_SDA_set(1);//pf_SDA_set(1);;
p->pf_SCL_set(1);
if(IO_SDA = 0)
ACK_Flag = 1;
else
ACK_Flag = 0;
p->pf_SCL_set(0);
return ACK_Flag;
// return 1;// debug
}
*******/
//*************************************************
//字节发送程序
//发送c(可以是数据也可是地址),送完后接收从应答
//不考虑从应答位
void L0_iicx_SendData(TS_siic_ *p,unsigned char c)
{
TS_siic_ *pp = p;
TS_siic_ *tt = p;
// unsigned char ack=8;
unsigned char BitCnt=8;//一字节8位
//设置SDA 口为输出
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
{
//printf("\r\nBitCnt=%d",(int)BitCnt);
if((c << BitCnt ) & 0x80)
pp->pf_SDA_set(1);//pf_SDA_set(1);; //判断发送位;/// ;//
else
pp->pf_SDA_set(0);
tt->pf_SCL_set(1); //置时钟线为高,通知被控器开始接收数据位
tt->pf_SCL_set(0);
/// printf("\r\nqq=%d",(int)BitCnt);
pp = p;
tt = p;
}//8clk
L0_iicx_WaitAck(tt);
}
//**************************************************
//字节接收程序
//接收器件传来的数据,此程序应配合|主应答函数|i2c_ack_main(void)使用
//return: uchar型1字节
unsigned char L0_iicx_ReceiveData(TS_siic_ *p)
{
unsigned char BitCnt=8,IIC_RX_Data = 0;
p->pf_SDA_out(0);// p->pf_SDA_set(1);//pf_SDA_set(1);; //读入数据 设置SDA 口为输入
for(BitCnt = 0;BitCnt<8;BitCnt++)
{
L0_I2C_delay(1);
p->pf_SCL_set(0); //置时钟线为低,准备接收数据位
p->pf_SCL_set(1); //置时钟线为高使数据线上数据有效
L0_I2C_delay(1);
IIC_RX_Data = IIC_RX_Data << 1;
if(0 != p->pf_SDA_get())//切记 非零和零的区别
IIC_RX_Data = IIC_RX_Data + 1; //读数据位,接收的数据位放入retc中
L0_I2C_delay(1);
}// 8clk up
p->pf_SCL_set(0);
return IIC_RX_Data;
}
/// 读取 n个数据 放入p中
void L0_iicx_ReadNByte(TS_siic_ *p, unsigned char *b,unsigned char n)
{
TS_siic_ *pp = p;
TS_siic_ *tt = p;
unsigned char i;
printf("111 3\r\n");
L0_iicx_Start(pp); // 启动I2C
printf("222 3\r\n");
L0_iicx_SendData(pp,(pp->sal)| 0x01); //发送器件地址
//p->pf_SDA_out(0);
for(i = 0;i<n-1;i++) //读取字节数据
{
*(b + i) = L0_iicx_ReceiveData(pp); //读取数据
L0_iicx_Ack(pp); //__/```\__
pp = p;
tt = p;
}
*(b + n - 1) = L0_iicx_ReceiveData(pp);
L0_iicx_NoAck(pp);
tt->pf_SDA_out(1);
L0_iicx_Stop(tt);
}
///////////////////////////////
///写入一个reg 为后续的写命令或者读取服务
void L1_iicx_Write1Reg(TS_siic_ *p,unsigned char reg)
{
//printf("L1_iicx_Write1Reg 3\r\n");
L0_iicx_Start(p); //启动I2C
//printf("L0_iicx_Start\r\n");
L0_iicx_SendData(p,p->sal);//发送器件地址
///printf("L0_iicx_SendData\r\n");
L0_iicx_SendData(p,reg);
}
void L1_iicx_Write2Reg(TS_siic_ *p,unsigned char reg,unsigned char reg2)
{
L0_iicx_Start(p); //启动I2C
L0_iicx_SendData(p,p->sal);//发送器件地址
L0_iicx_SendData(p,reg);
L0_iicx_SendData(p,reg2);
}
//读取reg地址(1Byte)的1个数据 sla.(reg) sla.(reg+1). 有返回值的 为了兼容
unsigned char L2_iicx_Read1Reg1DataR(TS_siic_ *p,unsigned char reg)
{
unsigned char d;
// U8 d[1];
//S ADD W A REG A
L1_iicx_Write1Reg(p,reg);
//S ADD R A D1 A D2 A.....DX N P
L0_iicx_ReadNByte(p,&d,1);
return d;
}
//读取reg地址(1Byte)的1个数据 sla.(reg) sla.(reg+1). 没有返回值的 为了兼容
void L2_iicx_Read1Reg1Data(TS_siic_ *p,unsigned char reg,unsigned char *r)
{
//S ADD W A REG A
L1_iicx_Write1Reg(p,reg);
//S ADD R A D1 A D2 A.....DX N P
L0_iicx_ReadNByte(p,r,1);
}
void L2_iicx_Read1RegNData(TS_siic_ *p,unsigned char reg,
unsigned char *r,unsigned char n)
{
#if 0
///printf("L2_iicx_Read1RegNData\r\n");
p->pf_SDA_set(1);//pf_SDA_set(1);;
///printf("pf_SDA_set\r\n");
p->pf_SCL_set(1);
///p->pf_SDA_set(0);
///p->pf_SCL_set(0);
printf("pf_SCL_set\r\n");
//L0_iicx_Start(p); //启动I2C
//L0_iicx_SendData(p,p->sal);//发送器件地址
//L0_iicx_SendData(p,reg);
#else
printf("L2_iicx_Read1RegNData\r\n");
//S ADD W A REG A
L1_iicx_Write1Reg(p,reg);
printf("L1_iicx_Write1Reg\r\n");
//S ADD R A D1 A D2 A.....DX N P
L0_iicx_ReadNByte(p,r,1);
printf("L0_iicx_ReadNByte\r\n");
#endif
}
void L2_iicx_Read2RegNdata(TS_siic_ *p,unsigned char H,unsigned char L,
unsigned char *r,unsigned char n)
{
// U8 d[1];
//S ADD W A REG A
/// L1_iicx_Write1Reg(p,H);
/// L0_iicx_SendData(p,L);
L1_iicx_Write2Reg(p,H,L);
//S ADD R A D1 A D2 A.....DX N P
L0_iicx_ReadNByte(p,r,n);
}
/******
// sla.(reg)=cmd
void L2_iicx_Write1Reg1Cmd(TS_siic *p, unsigned char reg,unsigned char cmd)
{
L1_iicx_Write1Reg(p,reg);
L0_iicx_SendData(p,cmd);
L0_iicx_Stop(p);
/*****************
if(gRccUs05 >0)///测试iic有效否 发现没有结果
{
L0_uart0_uc(gRccUs05);gRccUs05 = 0;
}
}
////// S slaW cmd cmd2 S slaR A A NACK P
////// A A A A MSB LSB CRC
void L2_iicx_Read2Cmd(TS_siic *p, unsigned char cmd,unsigned char cmd2,
unsigned char *buf,unsigned char n)
{
L1_iicx_Write1Reg(p,cmd);
L0_iicx_SendData(p,cmd2);
L1_iicx_ReadNByte(p,buf,n);
}
/// I2C设备地址为8bit,其中最低位为读写位,0为写,1为读
////读取两个字节的,先发送两个字节 然后再读取
void L1_iicx_Read2cmd(TS_siic *p, unsigned char *c,unsigned char *b,unsigned char n)
{
unsigned char i;
L0_iicx_Start(p); // 启动I2C
L0_iicx_SendData(p,(p->sal)| 0x01); //发送器件地址
L0_iicx_SendData(p,(*c)); //发送器件地址
L0_iicx_SendData(p,*(c+1));
//p->pf_SDA_out(0);
for(i = 0;i<n-1;i++) //读取字节数据
{
*(b + i) = L0_iicx_ReceiveData(p); //读取数据
L0_iicx_Ack(p); //__/```\__
}
*(b + n - 1) = L0_iicx_ReceiveData(p);
L0_iicx_NoAck(p);
p->pf_SDA_out(1);
L0_iicx_Stop(p);
}
void L2_iicx_Read1RegNData(TS_siic *p,unsigned char reg,
unsigned char *r,unsigned char n)
*********/
void L3_iicx_debug(u8 filter)
{
if(filter == Ts_debug.td->filter)
{
///while(9)
{
printf("\r\n 0x%2x\r\n",(int)Ts_debug.td->ocr);
}
// L0_uart0_uc("A");
// L0_uart0_0d0a();
if(0x10 == Ts_debug.td->ocr)///read reg1 num 读取reg1地址中的num个数据
{
//NUM: 0 1 2 3 4
// Fx R1 R2 R3 ocr
// TS_siic reg1 num
/// f1 00 0x28 06 10
/// f1 00 0x28 06 10
/// while(9)
{
L2_iicx_Read1RegNData(&ts_siic[Ts_debug.td->R1],Ts_debug.td->R2,Ts_debug.d,Ts_debug.td->R3);
L1_uartD_uchexArray(Ts_debug.d,Ts_debug.td->R3);
//
/// printf("\r\n 0x%2x\r\n",(int)Ts_debug.td->ocr);
}
}else if(0x11 == Ts_debug.td->ocr)//read reg1 reg2 num 读取reg1地址中的num个数据
{
}else if(0x12 == Ts_debug.td->ocr)//write
{///设置重量
/// printf("\r\n set[ %d].adc = 0x%04x\r\n",(int)Ts_debug.td->R1, (vU16)tst_weight.out6);
}
else
{
}
}
}

91
source/msp/simiic n/msp_siicx.h

@ -1,91 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2018, 传控科技
/// All rights reserved.
///
/// @file iic_sim
/// @brief iic 模拟io 版本, 和cpu无关,唯一需要修改的就是头函数中的管脚定义
/// @info 除了io配置 ,其他地方如无必要请勿修改
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20180102
//
//////////////////////////////////////////////////////////////////////////
#ifndef _SIICx_H_
#define _SIICx_H_
#include "c_lib.h"
#include "c_type51.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include "bsp_config.h"
#include "msp_siicx.h"
#define L0_slc_1_delay() Lc_delay_nop(4);
#define L0_slc_0_delay() Lc_delay_nop(1); // 4us
#define L0_I2C_delay(x) ///Lc_delay_us(80)
typedef struct
{
unsigned long n;
vType sh;
unsigned char sal;
void (*pf_SDA_out)(vType x);
void (*pf_SDA_set)(vType x);
vType (*pf_SDA_get)(void);
void (*pf_SCL_out)(vType x);
void (*pf_SCL_set)(vType x);
/// void (*pf_init)(vType x);
}TS_siic_;
#define D_IIC_NUM 2
#define D_IIC_CH1 0
#define D_IIC_CH2 1
#define D_IIC_CH3 2
#define D_IIC_CH4 3
extern TS_siic_ xdata ts_siic[D_IIC_NUM];
#define D_IIC_GSENSOR D_IIC_CH1
//<<<<端口位定义,可修改!!!!!!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern void L0_iicx_INIT(TS_siic_ *p,unsigned char v);
extern void L0_iicx_SendData(TS_siic_ *p,unsigned char c);
extern unsigned char L0_iicx_ReceiveData(TS_siic_ *p);
void L2_iicx_Read1Reg1Data(TS_siic_ *p,unsigned char reg,unsigned char *r);
extern void L0_iicx_ReadNByte(TS_siic_ *p,unsigned char *b,unsigned char n);
///////////////////////////////
///写入一个reg 为后续的写命令或者读取服务
extern void L1_iicx_Write1Reg(TS_siic_ *p,unsigned char reg);
// sla.(reg)=cmd
extern void L1_iicx_Write2Reg(TS_siic_ *p,unsigned char reg,unsigned char reg2);
extern void L2_iicx_Write1Reg1Cmd(TS_siic_ *p,unsigned char reg,unsigned char cmd);
//读取reg地址的n个数据 sla.(reg) sla.(reg+1)................ sla.(reg+n)
extern unsigned char L2_iicx_Read1Reg1DataR(TS_siic_ *p,unsigned char reg);
extern void L1_iicx_Read2cmd(TS_siic_ *p, unsigned char *c,unsigned char *b,unsigned char n);
extern void L2_iicx_Write2Cmd(TS_siic_ *p, unsigned char reg,unsigned char cmd,unsigned char cmd2);
extern void L2_iicx_Read2Cmd(TS_siic_ *p, unsigned char cmd,unsigned char cmd2,
unsigned char *buf,unsigned char n);
void L2_iicx_Read1RegNData(TS_siic_ *p,unsigned char reg,
unsigned char *r,unsigned char n);
#define D_cmd_filter_iicx 0xf1
extern void L3_iicx_debug(u8 filter);
extern void L1_siic1_INIT(vtype openclose);
#endif// #ifndef _IIC_H_

BIN
source/msp/simiic.zip

Binary file not shown.

BIN
source/msp/uart/msp_UART3.zip

Binary file not shown.

69
source/msp/uart/msp_uart1.c

@ -1,60 +1,3 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2023 CCSENS
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
// 20160413 CC-ACC-VH02
// 连接至 J22 RXD0 TXD0
//P5_DIR &= ~BITN1; //p5.1输出TXD
//P5_DIR |= BITN0; //p5.0输入RXD
//P5_SEL0 &= ~(BITN0 +BITN1); //设置P5.0 P5.1为uart1 RXD TXD
//P5_SEL1 |= BITN0 +BITN1;
/*****************************************************************************
update by cc @201700110
.
c_lib/c_lib.c:
(线),
(lcd等固屏输出的)使
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
-----------------------------------------------------------------------------------------
uartcom/Uprotocol2app
uart口来对应
typedef struct _ts_lcm_pro_; ? LCM的协议------------
L3_UARTcom0_exp_protocol
-----------------------------------------------------------------------------------------
uartcom/urec2protocol:
struct _s_uart_rec_ ()------struct _s_uart_rec_
void L1_uart_2buf(struct _s_uart_rec_ *p)
--------------------------------------------------------------------------------------------
msp/uartx.c cpu相关
L0_uart1_Init
uart1_IRQHandler
L0_Usend_uc------UserDef
-----------------------------------------------------------------------------------------
********************************************************************************/
#include "msp_uart1.h"
///#include "msp_time2.h"
#include "c_crc.h"
@ -105,6 +48,18 @@ msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面
#elif(BRT_19200 == D_UART1_BRT)
#elif(BRT_9600== D_UART1_BRT)
void L0_uart1_init(void) //9600bps@22.1184MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xC0; //设置定时初始值
TH1 = 0xFD; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
}
#warning "MainFre_22M BRT_115200"
#else///9600
#endif//)

403
source/msp/uart/msp_uartN.c.bak

@ -1,403 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2023 CCSENS
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
// 20160413 CC-ACC-VH02
/*****************************************************************************
update by cc @20220305
.
clib/clib.c:
(线),
(lcd等固屏输出的)使
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
-----------------------------------------------------------------------------------------
app
asp
bsp
debug debug协议的通讯
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
tpc/:
struct _s_uart_rec_ ()------struct _s_uart_rec_
void L1_uart_2buf(struct _s_uart_rec_ *p)
--------------------------------------------------------------------------------------------
msp/msp_uartx.c
--------------------------------------------------------------------------------------------
msp/msp_uart0.c cpu相关
L0_UART0_Init
UART0_IRQHandler
L0_Usend_uc------UserDef
-----------------------------------------------------------------------------------------
********************************************************************************/
#include "msp_uartN.h"
TS_Uart_Send_ ts_Usend[SERIAL_MAX_NUM]= {0};
TS_send_buf_ ts_Usendbuf;
TS_rec_road_ ts_Urec[SERIAL_MAX_NUM]= {0};
TS_rec_buf_ ts_Urecbuf;
code vU16 S_send_max[4]=
{
D_send1_max,
D_send2_max,
D_send3_max,
D_send4_max
};
void L0_uartN_set(U8 uartx,U8 x)
{
switch(uartx)
{
case 0:
SBUF = (x);
break;
case 1:
S2BUF = (x);///
break;
case 2:
S3BUF = (x);
break;
case 3:
S4BUF = (x);
break;
default:break;
}
}
/*
void L0_waitFree_uartN888(U8 uartx)
{
ts_Usend[uartx].over = 0;
while(ts_Usend[uartx].now != 0)
{
#if 10 //发送数据特别快时,某些情况下会导致数据发送出错
if(ts_Usend[uartx].over ++ > 600000)///这样写居然出错
{////ts_uart[uartx].p->ok = D_ready;
ts_Usend[uartx].now = 0;
break;
}
#endif
}
}
*/
void L0_waitFree_uartN(U8 uartx)
{
ts_Usend[uartx].over = 0;
while(ts_Usend[uartx].now != 0)
{
#if 10 //发送数据特别快时,某些情况下会导致数据发送出错
/// if(ts_uart[uartx].p->over ++ > 600000)///这样写居然出错(vU32)
ts_Usend[uartx].over ++;
if(ts_Usend[uartx].over > 20000)////600 000--4s
{////ts_uart[uartx].p->ok = D_ready;
ts_Usend[uartx].max = ts_Usend[uartx].now;
ts_Usend[uartx].ok = D_ready;
// ts_Usend[uartx].over = 0;
// ts_Usend[uartx].now = 1;
ts_Usend[uartx].now = 0;
break;
}
#endif
}
}
#define D_485R 0
#define D_485S 1
void L0_uartN_485(U8 uartx,U8 x)
{
if (D_485R == x)
{
switch(uartx)
{
case 0:
D_UART1_485_RX();
break;
case 1:
break;
case 2:
break;
case 3:
//// D_UART4_485_RX();
break;
default:break;
}
}else
{
switch(uartx)
{
case 0:
D_UART1_485_TX();
break;
case 1:
break;
case 2:
break;
case 3:
//// D_UART4_485_TX();
break;
default:break;
}
}
}
void L0_uartN_Array(U8 uartx,void *buf,U16 len)
{
u16 i;
L0_waitFree_uartN(uartx);
L0_uartN_485(uartx,D_485S);
ts_Usend[uartx].ok = D_ready;
ts_Usend[uartx].over = 0;
ts_Usend[uartx].now = 1;
if (len > ts_Usend[uartx].max_def)
{
len = ts_Usend[uartx].max_def - 1;
}
ts_Usend[uartx].max = len;
//将参数buf拷贝至内部buf
for(i = 0;i < len;i ++)
{
ts_Usend[uartx].sbuf[i] = ((U8*)buf)[i];
}
L0_uartN_set(uartx,ts_Usend[uartx].sbuf[0]);
}
void L0_uartN_Arraylong(U8 uartx,U8 *buf,U16 usStart,U16 usEnd)
{
//L0_uart0_sendbuf(str,strlen(str));
U16 t;
t = usEnd-usStart;
t ++;
L0_uartN_Array(uartx,&buf[usStart],t);
}
void L0_uartN_uc(U8 uartx,U8 ww)
{
L0_uartN_Array(uartx,&ww,1);
}
void L0_uartN_us(U8 uartx,vU16 ww)
{
U_U16 uStemp;
uStemp.word = ww;
ts_Usend[uartx].buf3[0] = uStemp.BYTE2.h;
ts_Usend[uartx].buf3[1] = uStemp.BYTE2.l;
L0_uartN_Array(uartx,ts_Usend[uartx].buf3,2);
}
void L0_uartN_ul(U8 uartx,vU32 ww)
{
U_U32 uStemp;
L0_waitFree_uartN(uartx);
uStemp.dWord = ww;
ts_Usend[uartx].buf3[0] = uStemp.BYTE4.byte0;
ts_Usend[uartx].buf3[1] = uStemp.BYTE4.byte1;
ts_Usend[uartx].buf3[2] = uStemp.BYTE4.byte2;
ts_Usend[uartx].buf3[3] = uStemp.BYTE4.byte3;
L0_uartN_Array(uartx,ts_Usend[uartx].buf3,4);
}
void L0_uartN_0d0a(U8 uartx)
{
L0_waitFree_uartN(uartx);
ts_Usend[uartx].buf3[0] = 0x0d;
ts_Usend[uartx].buf3[1] = 0x0a;
L0_uartN_Array(uartx,ts_Usend[uartx].buf3,2);
}
void L0_uartN_uchex(U8 uartx,U8 ww)
{
L0_waitFree_uartN(uartx);
ts_Usend[uartx].buf3[0] = cguHex2Char[D_uc_high(ww)][1];
ts_Usend[uartx].buf3[1] = cguHex2Char[D_uc_low (ww)][1];
L0_uartN_Array(uartx,ts_Usend[uartx].buf3,2);
}
void L0_uartN_ushex(U8 uartx,vU16 ww)
{
U_F16 k;
L0_waitFree_uartN(uartx);
k.us = ww;
ts_Usend[uartx].buf3[0] = cguHex2Char[D_uc_high(k.BYTE2.H)][1];
ts_Usend[uartx].buf3[1] = cguHex2Char[D_uc_low (k.BYTE2.H)][1];
ts_Usend[uartx].buf3[2] = cguHex2Char[D_uc_high(k.BYTE2.L)][1];
ts_Usend[uartx].buf3[3] = cguHex2Char[D_uc_low (k.BYTE2.L)][1];
L0_uartN_Array(uartx,ts_Usend[uartx].buf3,4);
}
void L0_uartN_ulhex(U8 uartx,U32 ww)
{
U_U32 k;
L0_waitFree_uartN(uartx);
k.dWord = ww;
ts_Usend[uartx].buf3[0] = cguHex2Char[D_uc_high(k.BYTE4.byte0)][1];
ts_Usend[uartx].buf3[1] = cguHex2Char[D_uc_low (k.BYTE4.byte0)][1];
ts_Usend[uartx].buf3[2] = cguHex2Char[D_uc_high(k.BYTE4.byte1)][1];
ts_Usend[uartx].buf3[3] = cguHex2Char[D_uc_low (k.BYTE4.byte1)][1];
ts_Usend[uartx].buf3[4] = cguHex2Char[D_uc_high(k.BYTE4.byte2)][1];
ts_Usend[uartx].buf3[5] = cguHex2Char[D_uc_low (k.BYTE4.byte2)][1];
ts_Usend[uartx].buf3[6] = cguHex2Char[D_uc_high(k.BYTE4.byte3)][1];
ts_Usend[uartx].buf3[7] = cguHex2Char[D_uc_low (k.BYTE4.byte3)][1];
L0_uartN_Array(uartx,ts_Usend[uartx].buf3,8);
}
void L0_uartN_str(U8 uartx,U8 *str)
{
L0_uartN_Array(uartx,str,Lc_strlen(str));
}
void L0_uartN_uchexArray(U8 uartx,vU8 *buf,U16 n)
{
int i;
for(i=0;i<n;i++)
{
L0_uartN_uchex(uartx,buf[i]);
L0_uartN_uc(uartx,' ');
}
/// L0_uartN_0d0a(uartx);
}
void L0_uartN_ushexArray(U8 uartx,vU16 *buf,U16 n)
{
int i;
for(i=0;i<n;i++)
{
L0_uartN_ushex(uartx,buf[i]);
L0_uartN_uc(uartx,' ');
}
/// L0_uartN_0d0a(uartx);
}
///////>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//withoutbuf>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void L0_uartN_sbuf(U8 uartx)/////cc 2023/04/23--4:23:19 修正bug 调用时放到ts_Usend[uartx].max 复制的前面
{
ts_Usend[uartx].max = 0;
ts_Usend[uartx].now = 0;
ts_Usend[uartx].ok = D_ready;
ts_Usend[uartx].max_def = S_send_max[uartx];
switch(uartx)
{
case 0:
ts_Usend[uartx].sbuf = ts_Usendbuf.s1;
break;
case 1:
ts_Usend[uartx].sbuf = ts_Usendbuf.s2;
break;
case 2:
ts_Usend[uartx].sbuf = ts_Usendbuf.s3;
break;
case 3:
ts_Usend[uartx].sbuf = ts_Usendbuf.s4;
break;
default:break;
}
}
////使用内置的usend buf的发送 cc 2023/04/23--4:25:8 调用的时候不可使用本通道的缓存
void L0_uartN_Array_withoutbuf(U8 uartx,U16 len)
{
/// u16 i;
L0_waitFree_uartN(uartx);
L0_uartN_485(uartx,D_485S);
L0_uartN_sbuf(uartx);
if (len > ts_Usend[uartx].max_def)
{
len = ts_Usend[uartx].max_def - 1;
}
ts_Usend[uartx].max = len;
L0_uartN_set(uartx,ts_Usend[uartx].sbuf[0]);
}
///cc 2023/04/23--4:25:8 调用的时候不可使用本通道的缓存
void L0_uartN_Arrayhex_withoutbuf(U8 uartx,vU8 *buf,U16 len)
{
vU16 i;vU16 t;
L0_waitFree_uartN(uartx);
if (len > (ts_Usend[uartx].max_def/3))
{
len = ts_Usend[uartx].max_def/3 - 1;
}
for(i = 0;i < len;i ++)
{
t = i * 3;
ts_Usend[uartx].sbuf[t] = cguHex2Char[D_uc_high(buf[i])][1];/// 34 '3'--33
t ++;
ts_Usend[uartx].sbuf[t] = cguHex2Char[D_uc_low (buf[i])][1];/// 34 '3'--33
t ++;
ts_Usend[uartx].sbuf[t] = ' ';
t ++;
}
// len 2 11x 22x \0
ts_Usend[uartx].sbuf[t] = ' ';
t++;
ts_Usend[uartx].sbuf[t] = 0x00;
L0_uartN_Array_withoutbuf(uartx,t-1);
}

173
source/msp/uart/新建文件夹/msp_UART2.c

@ -1,173 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2015, 传控科技
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版 本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
// 20160413 CC-ACC-VH02
// 连接至 J22 RXD0 TXD0
//P5_DIR &= ~BITN1; //p5.1输出TXD
//P5_DIR |= BITN0; //p5.0输入RXD
//P5_SEL0 &= ~(BITN0 +BITN1); //设置P5.0 P5.1为UART0 RXD TXD
//P5_SEL1 |= BITN0 +BITN1;
/*****************************************************************************
update by cc @201700110
.
clib/clib.c:
(线),
(lcd等固屏输出的)使
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
-----------------------------------------------------------------------------------------
uartcom/Uprotocol2app
uart口来对应
typedef struct _ts_lcm_pro_; ? LCM的协议------------
L3_UARTcom0_exp_protocol
-----------------------------------------------------------------------------------------
uartcom/urec2protocol:
struct _s_uart_rec_ ()------struct _s_uart_rec_
void L1_uart_2buf(struct _s_uart_rec_ *p)
--------------------------------------------------------------------------------------------
msp/uartx.c cpu相关
L0_UART0_Init
UART0_IRQHandler
L0_Usend_uc------UserDef
-----------------------------------------------------------------------------------------
********************************************************************************/
#include "msp_uart2.h"
///#include "tpc_wifi.h" ///本串口要使用的写意
static volatile TS_Uart_Send_ ts_uart2_send_shop;
///>>>>>>>>>>>>>>>>和cpu相关
#if(MainFre_5M == D_sys_MainFre)
#elif(MainFre_22M == D_sys_MainFre)
#elif(MainFre_27M == D_sys_MainFre)
#else ///MainFre_11M
#if(BRT_115200 == D_uart2_BRT)
void L0_uart2_init(void) /// void UartInit(void) //115200bps@11.0592MHz
{
S2CON = 0x50; //8位数据,可变波特率
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0xFE; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
}
#elif(BRT_19200 == D_UART1_BRT)
#elif(BRT_9600== D_UART1_BRT)
#else///9600
#endif//D_sys_MainFre)
#endif//D_sys_MainFre)
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>和cpu相关
void L0_uart2_buf_init(void)
{
/// L1_s2b_lora_init();
ts_uart[uNum2].now = 0;
ts_uart[uNum2].ok = D_ready;
L0_uart2_init();
D_uart2_ES_INT(1); //打开串口中断
#if (D_UART2_485_TYPE != TYPE_485_NONE)
D_UART2_485_RX() //默认处于接收状态
#endif
}
void L0_uart2_sendArray555555(U8 * buf, U16 len)
{
#if (D_UART2_485_TYPE != TYPE_485_NONE)
D_UART2_485_TX() //切换到输出状态
#endif
L0_uartN_sendArray(uNum2,buf,len);
}
/*************************************************
UART
*************************************************/
void INTERRUPT_uart2(void) D_SERVE_UART2// using 2
{
//NOP(); NOP(); NOP();
if(L0_uart2_IntRI()) //如果是U2接收中断
{
L0_uart2_IntRIClear(); //清除接收中断标志
///>>>>>>>>>>>>>接收协议 可以更改为其他协议>>>>>>>>>>>>>>>>>>>>>>>>
/// ts_s2b_lrdlora.reg = L0_uart2_get();
// L1_s2b_lora(&ts_s2b_lrdlora);
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (ts_uart[uNum2].t);
}
if(L0_uart2_IntTI()) //如果是U0发送中断
{
L0_uart2_IntTIClear(); //清除发送中断标志
if(ts_uart[uNum2].max != ts_uart[uNum2].now)
{
L0_uart2_set(ts_uart[uNum2].buf[ts_uart[uNum2].now]);
ts_uart[uNum2].now ++;
}
else
{
ts_uart[uNum2].ok = D_ready;
ts_uart[uNum2].max = 0;
ts_uart[uNum2].now = 0;//可以发送下一个数据
#if (D_UART2_485_TYPE != TYPE_485_NONE)
D_UART2_485_RX() //切换到接收状态
#endif
}
}
//NOP(); NOP(); NOP();
}

91
source/msp/uart/新建文件夹/msp_UART2.h

@ -1,91 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2015, 传控科技
/// All rights reserved.
///
/// @file main.c
/// @brief main app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20150102
///
///
/// 修订说明:最初版本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
//////////////////////////////////////////////////////////////////////////
/*****************************************************************************
update by cc @201700110
.
clib/clib.c:
(线),
(lcd等固屏输出的)使
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
-----------------------------------------------------------------------------------------
uartcom/Uprotocol2app
uart口来对应
typedef struct _ts_lcm_pro_; ? LCM的协议------------
L3_UARTcom0_exp_protocol
-----------------------------------------------------------------------------------------
uartcom/urec2protocol:
struct _s_uart_rec_ ()------struct _s_uart_rec_
void L1_uart_2buf(struct _s_uart_rec_ *p)
--------------------------------------------------------------------------------------------
msp/uartx.c cpu相关
L0_uart2_Init
uart2_IRQHandler
L0_Usend_uc------UserDef
-----------------------------------------------------------------------------------------
********************************************************************************/
#ifndef _uart2_H
#define _uart2_H
#include "bsp_config.h"
//#include "tpc_modbus.h"
#include "msp_uartN.h"
#define D_uart2_ES_INT(x) (x) ? (BITN_1(IE2,ES2)) : (BITN_0(IE2,ES2))
#define L0_uart2_IntRI() (S2CON & S2RI)//BITN_G(SCON,U0RI)
#define L0_uart2_IntTI() (S2CON & S2TI)//BITN_G(SCON,U0TI)
#define L0_uart2_IntRIClear(); BITN_0(S2CON,S2RI)
#define L0_uart2_IntTIClear(); BITN_0(S2CON,S2TI)
#define L0_uart2_get() (S2BUF)
#define L0_uart2_set(x) (S2BUF = x)
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
void L0_uart2_buf_init(void);
////void L0_uart2_sendArray(U8 * buf, U16 len);
#define L0_uart2_uc(X) L0_uartN_uc(uNum2,X)
#define L0_uart2_us(X) L0_uartN_us(uNum2,X)
#define L0_uart2_ul(X) L0_uartN_ul(uNum2,X)
#define L0_uart2_0d0a() L0_uartN_0d0a(0)
#define L0_uart2_uchex(X) L0_uartN_uchex(uNum2,X)
#define L0_uart2_ushex(X) L0_uartN_ushex(uNum2,X)
#define L0_uart2_ulhex(X) L0_uartN_ulhex(uNum2,X)
#define L0_uart2_sendstr(buf) L0_uartN_sendstr(uNum2,buf)
#define L0_uart2_sendArray(buf,len) L0_uartN_sendArray(uNum2,buf,len)
#define L1_uart2_isFree(); ///L0_timer2_start();
#define L1_uart2_isFree_over(); //L0_timer2_stop();
#define L1_uart2_timer_isFree_init(); //L0_timer2_init();L0_timer2_stop();\
//L0_timer2_int_on();\
//ts_timer2.callback = L2_callback_uart2_free;ts_timer2.p = &s_uart2_rec;
#endif //#ifndef _uart2_H

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save