DESKTOP-34DQRNR\TJK před 4 měsíci
revize
df4eddb814
63 změnil soubory, kde provedl 26431 přidání a 0 odebrání
  1. 1594 0
      Backup (2) of STM8.ewp
  2. 1594 0
      Backup (3) of STM8.ewp
  3. 1594 0
      Backup (4) of STM8.ewp
  4. 1594 0
      Backup (5) of STM8.ewp
  5. 1594 0
      Backup (6) of STM8.ewp
  6. 1594 0
      Backup (7) of STM8.ewp
  7. 1594 0
      Backup (8) of STM8.ewp
  8. 1594 0
      Backup (9) of STM8.ewp
  9. 1594 0
      Backup of STM8.ewp
  10. binární
      Debug/Exe/templproj.out
  11. binární
      Debug/Exe/vssver.scc
  12. binární
      Debug/Obj/GPIO_LED.o
  13. 273 0
      Debug/Obj/GPIO_LED.pbi.cout
  14. binární
      Debug/Obj/STM8.pbd
  15. binární
      Debug/Obj/STM8.pbd.browse
  16. binární
      Debug/Obj/main.o
  17. binární
      Debug/Obj/main.pbi
  18. 273 0
      Debug/Obj/main.pbi.cout
  19. binární
      Debug/Obj/vssver.scc
  20. 227 0
      README.md
  21. 149 0
      Release/Exe/STM8.hex
  22. binární
      Release/Exe/STM8.out
  23. binární
      Release/Exe/vssver.scc
  24. 1985 0
      Release/List/main.lst
  25. 2208 0
      Release/List/main.s
  26. binární
      Release/List/vssver.scc
  27. binární
      Release/Obj/STM8.pbd
  28. binární
      Release/Obj/STM8.pbd.browse
  29. 2 0
      Release/Obj/STM8.pbd.linf
  30. binární
      Release/Obj/main.o
  31. binární
      Release/Obj/main.pbi
  32. 281 0
      Release/Obj/main.pbi.cout
  33. binární
      Release/Obj/vssver.scc
  34. 155 0
      STM8.dep
  35. 465 0
      STM8.ewd
  36. 1594 0
      STM8.ewp
  37. 24 0
      STM8.ewt
  38. 10 0
      STM8S003.eww
  39. 676 0
      main.b.c
  40. 675 0
      main.c
  41. 676 0
      main.c.bak
  42. 813 0
      main.cb2
  43. 678 0
      main.no.c
  44. 24 0
      settings/STM8.Debug.cspy.bat
  45. 24 0
      settings/STM8.Release.cspy.bat
  46. 31 0
      settings/STM8.Release.cspy.ps1
  47. 11 0
      settings/STM8.Release.driver.xcl
  48. 11 0
      settings/STM8.Release.general.xcl
  49. 87 0
      settings/STM8.dbgdt
  50. 91 0
      settings/STM8.dni
  51. 121 0
      settings/STM8.dnx
  52. 49 0
      settings/STM8S003.wsdt
  53. 2 0
      settings/STM8S003.wspos
  54. binární
      settings/vssver.scc
  55. 142 0
      tool/MCU_STM8_WDFS_V1_19072601.hex
  56. 7 0
      tool/MCU_STM8_WDFS_V1_19080201.cfg
  57. 139 0
      tool/MCU_STM8_WDFS_V1_19080201.hex
  58. 150 0
      tool/MCU_STM8_WDFS_V1_25012001.hex
  59. 4 0
      tool/hexConvert.bat
  60. 28 0
      tool/readme_MCU_STM8_WDFS_V1.txt
  61. binární
      tool/vssver.scc
  62. binární
      tool/转换盒与子机两线通讯协议V1.9-增加紧急按钮取消.docx
  63. binární
      vssver.scc

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup (2) of STM8.ewp


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup (3) of STM8.ewp


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup (4) of STM8.ewp


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup (5) of STM8.ewp


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup (6) of STM8.ewp


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup (7) of STM8.ewp


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup (8) of STM8.ewp


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup (9) of STM8.ewp


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
Backup of STM8.ewp


binární
Debug/Exe/templproj.out


binární
Debug/Exe/vssver.scc


binární
Debug/Obj/GPIO_LED.o


+ 273 - 0
Debug/Obj/GPIO_LED.pbi.cout

@@ -0,0 +1,273 @@
+"D:\ά¶¦\Ä£Äâ·Ö»ú\GPIO_LED.c"
+-std=iarc89
+-ferror-limit=100
+-I
+D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\inc
+-I
+D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\inc\c
+-D__CHAR_BITS__=8
+-D__CHAR_MAX__=0xff
+-D__CHAR_MIN__=0
+-D__CHAR_SIZE__=1
+-D__UNSIGNED_CHAR_MAX__=0xff
+-D__SIGNED_CHAR_MAX__=127
+-D__SIGNED_CHAR_MIN__=(-__SIGNED_CHAR_MAX__-1)
+-D__CHAR_ALIGN__=1
+-D__SHORT_SIZE__=2
+-D__UNSIGNED_SHORT_MAX__=0xffffU
+-D__SIGNED_SHORT_MAX__=32767
+-D__SIGNED_SHORT_MIN__=(-__SIGNED_SHORT_MAX__-1)
+-D__SHORT_ALIGN__=1
+-D__INT_SIZE__=2
+-D__UNSIGNED_INT_MAX__=0xffffU
+-D__SIGNED_INT_MAX__=32767
+-D__SIGNED_INT_MIN__=(-__SIGNED_INT_MAX__-1)
+-D__INT_ALIGN__=1
+-D__LONG_SIZE__=4
+-D__UNSIGNED_LONG_MAX__=0xffffffffUL
+-D__SIGNED_LONG_MAX__=2147483647L
+-D__SIGNED_LONG_MIN__=(-__SIGNED_LONG_MAX__-1)
+-D__LONG_ALIGN__=1
+-D__LONG_LONG_SIZE__=4
+-D__UNSIGNED_LONG_LONG_MAX__=0xffffffffULL
+-D__SIGNED_LONG_LONG_MAX__=2147483647LL
+-D__SIGNED_LONG_LONG_MIN__=(-__SIGNED_LONG_LONG_MAX__-1)
+-D__LONG_LONG_ALIGN__=1
+-D__INT8_T_TYPE__=signed char
+-D__INT8_T_MAX__=127
+-D__INT8_T_MIN__=(-__INT8_T_MAX__-1)
+-D__UINT8_T_TYPE__=unsigned char
+-D__UINT8_T_MAX__=0xff
+-D__INT8_SIZE_PREFIX__="hh"
+-D__INT16_T_TYPE__=signed int
+-D__INT16_T_MAX__=32767
+-D__INT16_T_MIN__=(-__INT16_T_MAX__-1)
+-D__UINT16_T_TYPE__=unsigned int
+-D__UINT16_T_MAX__=0xffffU
+-D__INT16_SIZE_PREFIX__=""
+-D__INT32_T_TYPE__=signed long int
+-D__INT32_T_MAX__=2147483647L
+-D__INT32_T_MIN__=(-__INT32_T_MAX__-1)
+-D__UINT32_T_TYPE__=unsigned long int
+-D__UINT32_T_MAX__=0xffffffffUL
+-D__INT32_SIZE_PREFIX__="l"
+-D__INT_LEAST8_T_TYPE__=signed char
+-D__INT_LEAST8_T_MAX__=127
+-D__INT_LEAST8_T_MIN__=(-__INT_LEAST8_T_MAX__-1)
+-D__UINT_LEAST8_T_TYPE__=unsigned char
+-D__UINT_LEAST8_T_MAX__=0xff
+-D__INT8_C_SUFFIX__=
+-D__UINT8_C_SUFFIX__=
+-D__INT_LEAST8_SIZE_PREFIX__="hh"
+-D__INT_LEAST16_T_TYPE__=signed int
+-D__INT_LEAST16_T_MAX__=32767
+-D__INT_LEAST16_T_MIN__=(-__INT_LEAST16_T_MAX__-1)
+-D__UINT_LEAST16_T_TYPE__=unsigned int
+-D__UINT_LEAST16_T_MAX__=0xffffU
+-D__INT16_C_SUFFIX__=
+-D__UINT16_C_SUFFIX__=U
+-D__INT_LEAST16_SIZE_PREFIX__=""
+-D__INT_LEAST32_T_TYPE__=signed long int
+-D__INT_LEAST32_T_MAX__=2147483647L
+-D__INT_LEAST32_T_MIN__=(-__INT_LEAST32_T_MAX__-1)
+-D__UINT_LEAST32_T_TYPE__=unsigned long int
+-D__UINT_LEAST32_T_MAX__=0xffffffffUL
+-D__INT32_C_SUFFIX__=L
+-D__UINT32_C_SUFFIX__=UL
+-D__INT_LEAST32_SIZE_PREFIX__="l"
+-D__INT_FAST8_T_TYPE__=signed char
+-D__INT_FAST8_T_MAX__=127
+-D__INT_FAST8_T_MIN__=(-__INT_FAST8_T_MAX__-1)
+-D__UINT_FAST8_T_TYPE__=unsigned char
+-D__UINT_FAST8_T_MAX__=0xff
+-D__INT_FAST8_SIZE_PREFIX__="hh"
+-D__INT_FAST16_T_TYPE__=signed int
+-D__INT_FAST16_T_MAX__=32767
+-D__INT_FAST16_T_MIN__=(-__INT_FAST16_T_MAX__-1)
+-D__UINT_FAST16_T_TYPE__=unsigned int
+-D__UINT_FAST16_T_MAX__=0xffffU
+-D__INT_FAST16_SIZE_PREFIX__=""
+-D__INT_FAST32_T_TYPE__=signed long int
+-D__INT_FAST32_T_MAX__=2147483647L
+-D__INT_FAST32_T_MIN__=(-__INT_FAST32_T_MAX__-1)
+-D__UINT_FAST32_T_TYPE__=unsigned long int
+-D__UINT_FAST32_T_MAX__=0xffffffffUL
+-D__INT_FAST32_SIZE_PREFIX__="l"
+-D__INTMAX_T_TYPE__=signed long int
+-D__INTMAX_T_MAX__=2147483647L
+-D__INTMAX_T_MIN__=(-__INTMAX_T_MAX__-1)
+-D__UINTMAX_T_TYPE__=unsigned long int
+-D__UINTMAX_T_MAX__=0xffffffffUL
+-D__INTMAX_C_SUFFIX__=L
+-D__UINTMAX_C_SUFFIX__=UL
+-D__INTMAX_SIZE_PREFIX__="l"
+-D__FLOAT_SIZE__=4
+-D__FLOAT_ALIGN__=1
+-D__DOUBLE_SIZE__=4
+-D__DOUBLE_ALIGN__=1
+-D__LONG_DOUBLE_SIZE__=4
+-D__LONG_DOUBLE_ALIGN__=1
+-D__NAN_HAS_HIGH_MANTISSA_BIT_SET__=0
+-D__SUBNORMAL_FLOATING_POINTS__=1
+-D__SIZE_T_TYPE__=unsigned short int
+-D__SIZE_T_MAX__=0xffffU
+-D__PTRDIFF_T_TYPE__=signed short int
+-D__PTRDIFF_T_MAX__=32767
+-D__PTRDIFF_T_MIN__=(-__PTRDIFF_T_MAX__-1)
+-D__INTPTR_T_TYPE__=signed short int
+-D__INTPTR_T_MAX__=32767
+-D__INTPTR_T_MIN__=(-__INTPTR_T_MAX__-1)
+-D__UINTPTR_T_TYPE__=unsigned short int
+-D__UINTPTR_T_MAX__=0xffffU
+-D__INTPTR_SIZE_PREFIX__="h"
+-D__JMP_BUF_ELEMENT_TYPE__=unsigned char
+-D__JMP_BUF_NUM_ELEMENTS__=28
+-D__TID__=0x3800
+-D__VER__=210
+-D__SUBVERSION__=2
+-D__BUILD_NUMBER__=149
+-D__IAR_SYSTEMS_ICC__=8
+-D__VA_STACK_DECREASING__=1
+-D__VA_STACK_ALIGN__=1
+-D__VA_STACK_ALIGN_EXTRA_BEFORE__=1
+-D__LITTLE_ENDIAN__=0
+-D__BOOL_TYPE__=unsigned char
+-D__WCHAR_T_TYPE__=unsigned short int
+-D__WCHAR_T_SIZE__=2
+-D__WCHAR_T_MAX__=0xffffU
+-D__DEF_PTR_MEM__=__near
+-D__CODE_MEM0__=__near_func
+-D__CODE_MEM0_POINTER_OK__=1
+-D__CODE_MEM0_UNIQUE_POINTER__=1
+-D__CODE_MEM0_VAR_OK__=1
+-D__DATA_MEM0__=__tiny
+-D__DATA_MEM0_POINTER_OK__=1
+-D__DATA_MEM0_UNIQUE_POINTER__=1
+-D__DATA_MEM0_VAR_OK__=1
+-D__DATA_MEM0_INTPTR_TYPE__=signed char
+-D__DATA_MEM0_UINTPTR_TYPE__=unsigned char
+-D__DATA_MEM0_INTPTR_SIZE_PREFIX__="hh"
+-D__DATA_MEM0_MAX_SIZE__=0xff
+-D__DATA_MEM1__=__near
+-D__DATA_MEM1_POINTER_OK__=1
+-D__DATA_MEM1_UNIQUE_POINTER__=1
+-D__DATA_MEM1_VAR_OK__=1
+-D__DATA_MEM1_INDEX_TYPE__=short
+-D__DATA_MEM1_SIZE_TYPE__=unsigned short
+-D__DATA_MEM1_INTPTR_TYPE__=short int
+-D__DATA_MEM1_UINTPTR_TYPE__=unsigned short int
+-D__DATA_MEM1_INTPTR_SIZE_PREFIX__="h"
+-D__DATA_MEM1_MAX_SIZE__=0xffff
+-D__DATA_MEM1_HEAP_SEGMENT__="HEAP"
+-D__DATA_MEM1_PAGE_SIZE__=0
+-D__DATA_MEM1_HEAP__=1
+-D__DATA_MEM2__=__far
+-D__DATA_MEM2_POINTER_OK__=1
+-D__DATA_MEM2_UNIQUE_POINTER__=1
+-D__DATA_MEM2_VAR_OK__=1
+-D__DATA_MEM2_INDEX_TYPE__=short
+-D__DATA_MEM2_SIZE_TYPE__=unsigned short
+-D__DATA_MEM2_INTPTR_TYPE__=long int
+-D__DATA_MEM2_UINTPTR_TYPE__=unsigned long int
+-D__DATA_MEM2_INTPTR_SIZE_PREFIX__="l"
+-D__DATA_MEM2_MAX_SIZE__=0xffff
+-D__DATA_MEM3__=__huge
+-D__DATA_MEM3_POINTER_OK__=1
+-D__DATA_MEM3_UNIQUE_POINTER__=1
+-D__DATA_MEM3_VAR_OK__=1
+-D__DATA_MEM3_INDEX_TYPE__=long
+-D__DATA_MEM3_SIZE_TYPE__=unsigned long
+-D__DATA_MEM3_INTPTR_TYPE__=long int
+-D__DATA_MEM3_UINTPTR_TYPE__=unsigned long int
+-D__DATA_MEM3_INTPTR_SIZE_PREFIX__="l"
+-D__DATA_MEM3_MAX_SIZE__=0xffffffff
+-D__DATA_MEM4__=__eeprom
+-D__DATA_MEM4_POINTER_OK__=1
+-D__DATA_MEM4_UNIQUE_POINTER__=1
+-D__DATA_MEM4_VAR_OK__=1
+-D__DATA_MEM4_INDEX_TYPE__=short
+-D__DATA_MEM4_SIZE_TYPE__=unsigned short
+-D__DATA_MEM4_INTPTR_TYPE__=short int
+-D__DATA_MEM4_UINTPTR_TYPE__=unsigned short int
+-D__DATA_MEM4_INTPTR_SIZE_PREFIX__="h"
+-D__DATA_MEM4_MAX_SIZE__=0xffff
+-D__HEAP_MEM0__=1
+-D__MULTIPLE_HEAPS__=0
+-D__DEF_HEAP_MEM__=__near
+-D__MULTIPLE_INHERITANCE__=1
+-D_RTSL_COMPARE_T=unsigned char
+-D__CODE_MODEL__=__SMALL_CODE_MODEL__
+-D__CORE__=__STM8__
+-D__DATA_MODEL__=__MEDIUM_DATA_MODEL__
+-D__ICCSTM8__=1
+-D__LARGE_CODE_MODEL__=3
+-D__LARGE_DATA_MODEL__=3
+-D__MEDIUM_CODE_MODEL__=2
+-D__MEDIUM_DATA_MODEL__=2
+-D__SMALL_CODE_MODEL__=1
+-D__SMALL_DATA_MODEL__=1
+-D__STM8__=1
+-D__PLAIN_INT_BITFIELD_IS_SIGNED__=1
+-D__HAS_WEAK__=1
+-D__HAS_LOCATED_DECLARATION__=1
+-D__HAS_LOCATED_WITH_INIT__=1
+-D__IAR_COMPILERBASE__=594179
+-D_GOANNA=1
+-D__DATE__="Jan 10 2018"
+-D__TIME__="16:21:31"
+-D__STDC__=1
+-D__STDC_VERSION__=199409L
+-D__EDG_IA64_ABI=1
+-D__EDG_IA64_ABI_VARIANT_CTORS_AND_DTORS_RETURN_THIS=1
+-D__EDG_IA64_ABI_USE_INT_STATIC_INIT_GUARD=1
+-D__EDG_TYPE_TRAITS_ENABLED=1
+-D__EDG__=1
+-D__EDG_VERSION__=409
+-D__EDG_SIZE_TYPE__=unsigned short
+-D__EDG_PTRDIFF_TYPE__=short
+-D__EDG_DELTA_TYPE=short
+-D__EDG_IA64_VTABLE_ENTRY_TYPE=short
+-D__EDG_VIRTUAL_FUNCTION_INDEX_TYPE=unsigned short
+-D__EDG_LOWER_VARIABLE_LENGTH_ARRAYS=1
+-D__EDG_IA64_ABI_USE_VARIANT_ARRAY_COOKIES=1
+-D__EDG_ABI_COMPATIBILITY_VERSION=9999
+-D__EDG_ABI_CHANGES_FOR_RTTI=1
+-D__EDG_ABI_CHANGES_FOR_ARRAY_NEW_AND_DELETE=1
+-D__EDG_ABI_CHANGES_FOR_PLACEMENT_DELETE=1
+-D__EDG_BSD=0
+-D__EDG_SYSV=0
+-D__EDG_ANSIC=1
+-D__EDG_CPP11_IL_EXTENSIONS_SUPPORTED=1
+-D_DLIB_CONFIG_FILE_HEADER_NAME="D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\LIB\dlstm8smn.h"
+-D_DLIB_CONFIG_FILE_STRING="D:\\Program Files (x86)\\IAR Systems\\Embedded Workbench 7.0\\stm8\\LIB\\dlstm8smn.h"
+-D__VERSION__="IAR C/C++ Compiler V2.10.2.149 for STM8"
+-D__CODE_MEMORY_LIST1__()=__CODE_MEM_HELPER1__(__code, 0 )
+-D__CODE_MEMORY_LIST2__(_P1)=__CODE_MEM_HELPER2__(__code, 0 ,  _P1 )
+-D__CODE_MEMORY_LIST3__(_P1, _P2)=__CODE_MEM_HELPER3__(__code, 0 ,  _P1 ,  _P2 )
+-D__DATA_MEMORY_LIST1__()=__DATA_MEM_HELPER1__(__data, 0 )
+-D__DATA_MEMORY_LIST2__(_P1)=__DATA_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__DATA_MEMORY_LIST3__(_P1, _P2)=__DATA_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__CODE_PTR_MEMORY_LIST1__()=__CODE_PTR_MEM_HELPER1__(__code, 0 )
+-D__CODE_PTR_MEMORY_LIST2__(_P1)=__CODE_PTR_MEM_HELPER2__(__code, 0 ,  _P1 )
+-D__CODE_PTR_MEMORY_LIST3__(_P1, _P2)=__CODE_PTR_MEM_HELPER3__(__code, 0 ,  _P1 ,  _P2 )
+-D__DATA_PTR_MEMORY_LIST1__()=__DATA_PTR_MEM_HELPER1__(__data, 0 )
+-D__DATA_PTR_MEMORY_LIST2__(_P1)=__DATA_PTR_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__DATA_PTR_MEMORY_LIST3__(_P1, _P2)=__DATA_PTR_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__VAR_MEMORY_LIST1__()=__VAR_MEM_HELPER1__(__data, 0 )
+-D__VAR_MEMORY_LIST2__(_P1)=__VAR_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__VAR_MEMORY_LIST3__(_P1, _P2)=__VAR_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__VARD_MEMORY_LIST1__()=__VARD_MEM_HELPER1__(__data, 0, _ )
+-D__HEAP_MEMORY_LIST1__()=__HEAP_MEM_HELPER1__(__data, 0 )
+-D__HEAP_MEMORY_LIST2__(_P1)=__HEAP_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__HEAP_MEMORY_LIST3__(_P1, _P2)=__HEAP_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__HVAR_MEMORY_LIST1__()=__HVAR_MEM_HELPER1__(__data, 0 )
+-D__HEAPD_MEMORY_LIST1__()=__HEAPD_MEM_HELPER1__(__data, 0, _ )
+-D__HEAPU_MEMORY_LIST1__()=__HEAPU_MEM_HELPER1__(__data, 0 )
+-D__TOPM_DATA_MEMORY_LIST1__()=
+-D__TOPM_DATA_MEMORY_LIST2__(_P1)=
+-D__TOPM_DATA_MEMORY_LIST3__(_P1, _P2)=
+-D__TOPP_DATA_MEMORY_LIST1__()=__TOPP_DATA_MEM_HELPER1__(__data, 0 )
+-D__TOPP_DATA_MEMORY_LIST2__(_P1)=__TOPP_DATA_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__TOPP_DATA_MEMORY_LIST3__(_P1, _P2)=__TOPP_DATA_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__DATA_MEM0_SIZE_TYPE__=unsigned int
+-D__DATA_MEM0_INDEX_TYPE__=signed int

binární
Debug/Obj/STM8.pbd


binární
Debug/Obj/STM8.pbd.browse


binární
Debug/Obj/main.o


binární
Debug/Obj/main.pbi


+ 273 - 0
Debug/Obj/main.pbi.cout

@@ -0,0 +1,273 @@
+"D:\MCU¹¤×÷ÒÆ½»\Ä£Äâ½ô¼±°´Å¥V1_STM8\main.c"
+-std=iarc89
+-ferror-limit=100
+-I
+C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\inc
+-I
+C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\inc\c
+-D__CHAR_BITS__=8
+-D__CHAR_MAX__=0xff
+-D__CHAR_MIN__=0
+-D__CHAR_SIZE__=1
+-D__UNSIGNED_CHAR_MAX__=0xff
+-D__SIGNED_CHAR_MAX__=127
+-D__SIGNED_CHAR_MIN__=(-__SIGNED_CHAR_MAX__-1)
+-D__CHAR_ALIGN__=1
+-D__SHORT_SIZE__=2
+-D__UNSIGNED_SHORT_MAX__=0xffffU
+-D__SIGNED_SHORT_MAX__=32767
+-D__SIGNED_SHORT_MIN__=(-__SIGNED_SHORT_MAX__-1)
+-D__SHORT_ALIGN__=1
+-D__INT_SIZE__=2
+-D__UNSIGNED_INT_MAX__=0xffffU
+-D__SIGNED_INT_MAX__=32767
+-D__SIGNED_INT_MIN__=(-__SIGNED_INT_MAX__-1)
+-D__INT_ALIGN__=1
+-D__LONG_SIZE__=4
+-D__UNSIGNED_LONG_MAX__=0xffffffffUL
+-D__SIGNED_LONG_MAX__=2147483647L
+-D__SIGNED_LONG_MIN__=(-__SIGNED_LONG_MAX__-1)
+-D__LONG_ALIGN__=1
+-D__LONG_LONG_SIZE__=4
+-D__UNSIGNED_LONG_LONG_MAX__=0xffffffffULL
+-D__SIGNED_LONG_LONG_MAX__=2147483647LL
+-D__SIGNED_LONG_LONG_MIN__=(-__SIGNED_LONG_LONG_MAX__-1)
+-D__LONG_LONG_ALIGN__=1
+-D__INT8_T_TYPE__=signed char
+-D__INT8_T_MAX__=127
+-D__INT8_T_MIN__=(-__INT8_T_MAX__-1)
+-D__UINT8_T_TYPE__=unsigned char
+-D__UINT8_T_MAX__=0xff
+-D__INT8_SIZE_PREFIX__="hh"
+-D__INT16_T_TYPE__=signed int
+-D__INT16_T_MAX__=32767
+-D__INT16_T_MIN__=(-__INT16_T_MAX__-1)
+-D__UINT16_T_TYPE__=unsigned int
+-D__UINT16_T_MAX__=0xffffU
+-D__INT16_SIZE_PREFIX__=""
+-D__INT32_T_TYPE__=signed long int
+-D__INT32_T_MAX__=2147483647L
+-D__INT32_T_MIN__=(-__INT32_T_MAX__-1)
+-D__UINT32_T_TYPE__=unsigned long int
+-D__UINT32_T_MAX__=0xffffffffUL
+-D__INT32_SIZE_PREFIX__="l"
+-D__INT_LEAST8_T_TYPE__=signed char
+-D__INT_LEAST8_T_MAX__=127
+-D__INT_LEAST8_T_MIN__=(-__INT_LEAST8_T_MAX__-1)
+-D__UINT_LEAST8_T_TYPE__=unsigned char
+-D__UINT_LEAST8_T_MAX__=0xff
+-D__INT8_C_SUFFIX__=
+-D__UINT8_C_SUFFIX__=
+-D__INT_LEAST8_SIZE_PREFIX__="hh"
+-D__INT_LEAST16_T_TYPE__=signed int
+-D__INT_LEAST16_T_MAX__=32767
+-D__INT_LEAST16_T_MIN__=(-__INT_LEAST16_T_MAX__-1)
+-D__UINT_LEAST16_T_TYPE__=unsigned int
+-D__UINT_LEAST16_T_MAX__=0xffffU
+-D__INT16_C_SUFFIX__=
+-D__UINT16_C_SUFFIX__=U
+-D__INT_LEAST16_SIZE_PREFIX__=""
+-D__INT_LEAST32_T_TYPE__=signed long int
+-D__INT_LEAST32_T_MAX__=2147483647L
+-D__INT_LEAST32_T_MIN__=(-__INT_LEAST32_T_MAX__-1)
+-D__UINT_LEAST32_T_TYPE__=unsigned long int
+-D__UINT_LEAST32_T_MAX__=0xffffffffUL
+-D__INT32_C_SUFFIX__=L
+-D__UINT32_C_SUFFIX__=UL
+-D__INT_LEAST32_SIZE_PREFIX__="l"
+-D__INT_FAST8_T_TYPE__=signed char
+-D__INT_FAST8_T_MAX__=127
+-D__INT_FAST8_T_MIN__=(-__INT_FAST8_T_MAX__-1)
+-D__UINT_FAST8_T_TYPE__=unsigned char
+-D__UINT_FAST8_T_MAX__=0xff
+-D__INT_FAST8_SIZE_PREFIX__="hh"
+-D__INT_FAST16_T_TYPE__=signed int
+-D__INT_FAST16_T_MAX__=32767
+-D__INT_FAST16_T_MIN__=(-__INT_FAST16_T_MAX__-1)
+-D__UINT_FAST16_T_TYPE__=unsigned int
+-D__UINT_FAST16_T_MAX__=0xffffU
+-D__INT_FAST16_SIZE_PREFIX__=""
+-D__INT_FAST32_T_TYPE__=signed long int
+-D__INT_FAST32_T_MAX__=2147483647L
+-D__INT_FAST32_T_MIN__=(-__INT_FAST32_T_MAX__-1)
+-D__UINT_FAST32_T_TYPE__=unsigned long int
+-D__UINT_FAST32_T_MAX__=0xffffffffUL
+-D__INT_FAST32_SIZE_PREFIX__="l"
+-D__INTMAX_T_TYPE__=signed long int
+-D__INTMAX_T_MAX__=2147483647L
+-D__INTMAX_T_MIN__=(-__INTMAX_T_MAX__-1)
+-D__UINTMAX_T_TYPE__=unsigned long int
+-D__UINTMAX_T_MAX__=0xffffffffUL
+-D__INTMAX_C_SUFFIX__=L
+-D__UINTMAX_C_SUFFIX__=UL
+-D__INTMAX_SIZE_PREFIX__="l"
+-D__FLOAT_SIZE__=4
+-D__FLOAT_ALIGN__=1
+-D__DOUBLE_SIZE__=4
+-D__DOUBLE_ALIGN__=1
+-D__LONG_DOUBLE_SIZE__=4
+-D__LONG_DOUBLE_ALIGN__=1
+-D__NAN_HAS_HIGH_MANTISSA_BIT_SET__=0
+-D__SUBNORMAL_FLOATING_POINTS__=1
+-D__SIZE_T_TYPE__=unsigned short int
+-D__SIZE_T_MAX__=0xffffU
+-D__PTRDIFF_T_TYPE__=signed short int
+-D__PTRDIFF_T_MAX__=32767
+-D__PTRDIFF_T_MIN__=(-__PTRDIFF_T_MAX__-1)
+-D__INTPTR_T_TYPE__=signed short int
+-D__INTPTR_T_MAX__=32767
+-D__INTPTR_T_MIN__=(-__INTPTR_T_MAX__-1)
+-D__UINTPTR_T_TYPE__=unsigned short int
+-D__UINTPTR_T_MAX__=0xffffU
+-D__INTPTR_SIZE_PREFIX__="h"
+-D__JMP_BUF_ELEMENT_TYPE__=unsigned char
+-D__JMP_BUF_NUM_ELEMENTS__=28
+-D__TID__=0x3800
+-D__VER__=210
+-D__SUBVERSION__=2
+-D__BUILD_NUMBER__=149
+-D__IAR_SYSTEMS_ICC__=8
+-D__VA_STACK_DECREASING__=1
+-D__VA_STACK_ALIGN__=1
+-D__VA_STACK_ALIGN_EXTRA_BEFORE__=1
+-D__LITTLE_ENDIAN__=0
+-D__BOOL_TYPE__=unsigned char
+-D__WCHAR_T_TYPE__=unsigned short int
+-D__WCHAR_T_SIZE__=2
+-D__WCHAR_T_MAX__=0xffffU
+-D__DEF_PTR_MEM__=__near
+-D__CODE_MEM0__=__near_func
+-D__CODE_MEM0_POINTER_OK__=1
+-D__CODE_MEM0_UNIQUE_POINTER__=1
+-D__CODE_MEM0_VAR_OK__=1
+-D__DATA_MEM0__=__tiny
+-D__DATA_MEM0_POINTER_OK__=1
+-D__DATA_MEM0_UNIQUE_POINTER__=1
+-D__DATA_MEM0_VAR_OK__=1
+-D__DATA_MEM0_INTPTR_TYPE__=signed char
+-D__DATA_MEM0_UINTPTR_TYPE__=unsigned char
+-D__DATA_MEM0_INTPTR_SIZE_PREFIX__="hh"
+-D__DATA_MEM0_MAX_SIZE__=0xff
+-D__DATA_MEM1__=__near
+-D__DATA_MEM1_POINTER_OK__=1
+-D__DATA_MEM1_UNIQUE_POINTER__=1
+-D__DATA_MEM1_VAR_OK__=1
+-D__DATA_MEM1_INDEX_TYPE__=short
+-D__DATA_MEM1_SIZE_TYPE__=unsigned short
+-D__DATA_MEM1_INTPTR_TYPE__=short int
+-D__DATA_MEM1_UINTPTR_TYPE__=unsigned short int
+-D__DATA_MEM1_INTPTR_SIZE_PREFIX__="h"
+-D__DATA_MEM1_MAX_SIZE__=0xffff
+-D__DATA_MEM1_HEAP_SEGMENT__="HEAP"
+-D__DATA_MEM1_PAGE_SIZE__=0
+-D__DATA_MEM1_HEAP__=1
+-D__DATA_MEM2__=__far
+-D__DATA_MEM2_POINTER_OK__=1
+-D__DATA_MEM2_UNIQUE_POINTER__=1
+-D__DATA_MEM2_VAR_OK__=1
+-D__DATA_MEM2_INDEX_TYPE__=short
+-D__DATA_MEM2_SIZE_TYPE__=unsigned short
+-D__DATA_MEM2_INTPTR_TYPE__=long int
+-D__DATA_MEM2_UINTPTR_TYPE__=unsigned long int
+-D__DATA_MEM2_INTPTR_SIZE_PREFIX__="l"
+-D__DATA_MEM2_MAX_SIZE__=0xffff
+-D__DATA_MEM3__=__huge
+-D__DATA_MEM3_POINTER_OK__=1
+-D__DATA_MEM3_UNIQUE_POINTER__=1
+-D__DATA_MEM3_VAR_OK__=1
+-D__DATA_MEM3_INDEX_TYPE__=long
+-D__DATA_MEM3_SIZE_TYPE__=unsigned long
+-D__DATA_MEM3_INTPTR_TYPE__=long int
+-D__DATA_MEM3_UINTPTR_TYPE__=unsigned long int
+-D__DATA_MEM3_INTPTR_SIZE_PREFIX__="l"
+-D__DATA_MEM3_MAX_SIZE__=0xffffffff
+-D__DATA_MEM4__=__eeprom
+-D__DATA_MEM4_POINTER_OK__=1
+-D__DATA_MEM4_UNIQUE_POINTER__=1
+-D__DATA_MEM4_VAR_OK__=1
+-D__DATA_MEM4_INDEX_TYPE__=short
+-D__DATA_MEM4_SIZE_TYPE__=unsigned short
+-D__DATA_MEM4_INTPTR_TYPE__=short int
+-D__DATA_MEM4_UINTPTR_TYPE__=unsigned short int
+-D__DATA_MEM4_INTPTR_SIZE_PREFIX__="h"
+-D__DATA_MEM4_MAX_SIZE__=0xffff
+-D__HEAP_MEM0__=1
+-D__MULTIPLE_HEAPS__=0
+-D__DEF_HEAP_MEM__=__near
+-D__MULTIPLE_INHERITANCE__=1
+-D_RTSL_COMPARE_T=unsigned char
+-D__CODE_MODEL__=__SMALL_CODE_MODEL__
+-D__CORE__=__STM8__
+-D__DATA_MODEL__=__MEDIUM_DATA_MODEL__
+-D__ICCSTM8__=1
+-D__LARGE_CODE_MODEL__=3
+-D__LARGE_DATA_MODEL__=3
+-D__MEDIUM_CODE_MODEL__=2
+-D__MEDIUM_DATA_MODEL__=2
+-D__SMALL_CODE_MODEL__=1
+-D__SMALL_DATA_MODEL__=1
+-D__STM8__=1
+-D__PLAIN_INT_BITFIELD_IS_SIGNED__=1
+-D__HAS_WEAK__=1
+-D__HAS_LOCATED_DECLARATION__=1
+-D__HAS_LOCATED_WITH_INIT__=1
+-D__IAR_COMPILERBASE__=594179
+-D_GOANNA=1
+-D__DATE__="Jul 26 2019"
+-D__TIME__="10:05:41"
+-D__STDC__=1
+-D__STDC_VERSION__=199409L
+-D__EDG_IA64_ABI=1
+-D__EDG_IA64_ABI_VARIANT_CTORS_AND_DTORS_RETURN_THIS=1
+-D__EDG_IA64_ABI_USE_INT_STATIC_INIT_GUARD=1
+-D__EDG_TYPE_TRAITS_ENABLED=1
+-D__EDG__=1
+-D__EDG_VERSION__=409
+-D__EDG_SIZE_TYPE__=unsigned short
+-D__EDG_PTRDIFF_TYPE__=short
+-D__EDG_DELTA_TYPE=short
+-D__EDG_IA64_VTABLE_ENTRY_TYPE=short
+-D__EDG_VIRTUAL_FUNCTION_INDEX_TYPE=unsigned short
+-D__EDG_LOWER_VARIABLE_LENGTH_ARRAYS=1
+-D__EDG_IA64_ABI_USE_VARIANT_ARRAY_COOKIES=1
+-D__EDG_ABI_COMPATIBILITY_VERSION=9999
+-D__EDG_ABI_CHANGES_FOR_RTTI=1
+-D__EDG_ABI_CHANGES_FOR_ARRAY_NEW_AND_DELETE=1
+-D__EDG_ABI_CHANGES_FOR_PLACEMENT_DELETE=1
+-D__EDG_BSD=0
+-D__EDG_SYSV=0
+-D__EDG_ANSIC=1
+-D__EDG_CPP11_IL_EXTENSIONS_SUPPORTED=1
+-D_DLIB_CONFIG_FILE_HEADER_NAME="C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\LIB\dlstm8smn.h"
+-D_DLIB_CONFIG_FILE_STRING="C:\\Program Files (x86)\\IAR Systems\\Embedded Workbench 7.0\\stm8\\LIB\\dlstm8smn.h"
+-D__VERSION__="IAR C/C++ Compiler V2.10.2.149 for STM8"
+-D__CODE_MEMORY_LIST1__()=__CODE_MEM_HELPER1__(__code, 0 )
+-D__CODE_MEMORY_LIST2__(_P1)=__CODE_MEM_HELPER2__(__code, 0 ,  _P1 )
+-D__CODE_MEMORY_LIST3__(_P1, _P2)=__CODE_MEM_HELPER3__(__code, 0 ,  _P1 ,  _P2 )
+-D__DATA_MEMORY_LIST1__()=__DATA_MEM_HELPER1__(__data, 0 )
+-D__DATA_MEMORY_LIST2__(_P1)=__DATA_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__DATA_MEMORY_LIST3__(_P1, _P2)=__DATA_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__CODE_PTR_MEMORY_LIST1__()=__CODE_PTR_MEM_HELPER1__(__code, 0 )
+-D__CODE_PTR_MEMORY_LIST2__(_P1)=__CODE_PTR_MEM_HELPER2__(__code, 0 ,  _P1 )
+-D__CODE_PTR_MEMORY_LIST3__(_P1, _P2)=__CODE_PTR_MEM_HELPER3__(__code, 0 ,  _P1 ,  _P2 )
+-D__DATA_PTR_MEMORY_LIST1__()=__DATA_PTR_MEM_HELPER1__(__data, 0 )
+-D__DATA_PTR_MEMORY_LIST2__(_P1)=__DATA_PTR_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__DATA_PTR_MEMORY_LIST3__(_P1, _P2)=__DATA_PTR_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__VAR_MEMORY_LIST1__()=__VAR_MEM_HELPER1__(__data, 0 )
+-D__VAR_MEMORY_LIST2__(_P1)=__VAR_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__VAR_MEMORY_LIST3__(_P1, _P2)=__VAR_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__VARD_MEMORY_LIST1__()=__VARD_MEM_HELPER1__(__data, 0, _ )
+-D__HEAP_MEMORY_LIST1__()=__HEAP_MEM_HELPER1__(__data, 0 )
+-D__HEAP_MEMORY_LIST2__(_P1)=__HEAP_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__HEAP_MEMORY_LIST3__(_P1, _P2)=__HEAP_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__HVAR_MEMORY_LIST1__()=__HVAR_MEM_HELPER1__(__data, 0 )
+-D__HEAPD_MEMORY_LIST1__()=__HEAPD_MEM_HELPER1__(__data, 0, _ )
+-D__HEAPU_MEMORY_LIST1__()=__HEAPU_MEM_HELPER1__(__data, 0 )
+-D__TOPM_DATA_MEMORY_LIST1__()=
+-D__TOPM_DATA_MEMORY_LIST2__(_P1)=
+-D__TOPM_DATA_MEMORY_LIST3__(_P1, _P2)=
+-D__TOPP_DATA_MEMORY_LIST1__()=__TOPP_DATA_MEM_HELPER1__(__data, 0 )
+-D__TOPP_DATA_MEMORY_LIST2__(_P1)=__TOPP_DATA_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__TOPP_DATA_MEMORY_LIST3__(_P1, _P2)=__TOPP_DATA_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__DATA_MEM0_SIZE_TYPE__=unsigned int
+-D__DATA_MEM0_INDEX_TYPE__=signed int

binární
Debug/Obj/vssver.scc


+ 227 - 0
README.md

@@ -0,0 +1,227 @@
+# 转换盒MCU代码
+
+## 更新日志
+- 适配了模拟紧急按钮的取消协议。
+
+## MCU协议
+
+转换盒Android与MCU串口通讯协议(V2.2)
+
+### 通信参数
+- 接  口:UART(二线制)
+- 波特率:115200
+- 数  据:8位
+- 校  验:无
+- 格  式:ASCII,采用报文头($)+数据体+校验符+报文结束符(#)
+
+### 下发(Android→MCU)
+
+#### 1. 心跳信号
+要求Android每5秒内发送1次。若MCU在50秒内没有收到信号,将自动重启Android。
+
+| 报文头 | 命令 | 分隔符 | 随机数 | 校验符 | 报文结束符 |
+|--------|------|---------|---------|---------|------------|
+| $ | 1 | , | 1-F | F-动态字符 | # |
+
+响应:`Y#`
+
+#### 2. 系统重启
+
+| 报文头 | 命令 | 分隔符 | 数据 | 校验符 | 报文结束符 |
+|--------|------|---------|------|---------|------------|
+| $ | 2 | , | 状态值 | F-动态字符 | # |
+
+注:状态值 0:核心板复位 1:断电
+
+#### 3. SIP注册状态
+
+| 报文头 | 命令 | 分隔符 | 数据 | 校验符 | 报文结束符 |
+|--------|------|---------|------|---------|------------|
+| $ | 3 | , | 状态值 | 1 | # |
+
+说明:状态值 0:表示注册中,1表示注册成功,2表示注册失败!
+
+#### 4. SIP呼入(主机呼叫分机、主机应答分机)
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | 4 | , | AABB | F-数据字符 | # |
+
+说明:每个模拟分机都有一个2Bytes的地址码(0x0001-0xFFFE)
+
+#### 5. SIP挂断(关闭广播模式时地址FFFF)
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | 5 | , | AABB | F-数据字符 | # |
+
+#### 6. 开启广播模式
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | 6 | , | FFFF | F-数据字符 | # |
+
+#### 7. 打开指定门灯
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | 7,G,W | , | AABB | F-数据字符 | # |
+
+注:
+- 命令"7"表示打开红色灯
+- 命令"G"表示打开绿色灯
+- 命令"W"表示打开白灯
+
+#### 8. 关闭指定门灯
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | 8 | , | AABB | F-数据字符 | # |
+
+#### 9. 取消紧急呼叫
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | 9 | , | AABB | F-数据字符 | # |
+
+#### 10. 设备注册请求命令
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | D | , | AABB | F-数据字符 | # |
+
+#### 11. 当前转换盒注册状态
+
+| 报文头 | 命令 | 分隔符 | 地址(固定) | 数据 | 校验符 | 报文结束符 |
+|--------|------|---------|------------|------|---------|------------|
+| $ | E | , | FFFF | Y or N | 1 | # |
+
+说明:
+1. 数据Y:表示转换盒已在系统中注册(通过Web请求判别),N表示转换盒未在当前系统中注册!
+2. 所有分机在上电之后默认为非注册状态,只有主动发送Y之后才进入呼叫准备状态。
+
+#### 12. 通话双工模式选择
+
+| 报文头 | 命令 | 分隔符 | 地址(固定) | 数据 | 校验符 | 报文结束符 |
+|--------|------|---------|------------|------|---------|------------|
+| $ | F | , | FFFF | 0 or 1 | 1 | # |
+
+说明:
+- 默认为0:双工通话,分机和主机可以同时双向通话,双向接听
+- 1:单工通话,任一时刻分机和主机只有一方可以讲话,另一方接听
+
+#### 13. RALAY
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | O/P | , | AABB | F-数据字符 | # |
+
+注:O-打开,P-关闭
+
+### 上传(MCU→Android)
+
+#### 14. 分机呼叫主机
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | A | , | AABB | F-数据字符 | # |
+
+#### 15. 分机挂断主机
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | B | , | AABB | F-数据字符 | # |
+
+#### 16. 卫生间紧急呼叫
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | C | , | AABB | F-数据字符 | # |
+
+#### 17. 设备注册回复命令
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | D | , | AABB | F-数据字符 | # |
+
+#### 18. 设备请求注册命令
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 设备序列号(15) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|----------------|---------|------------|
+| $ | E | , | AABB | CSMNI1806120001 | @ | # |
+
+#### 19. 设备版本号
+
+发送时机:收到心跳包后MCU上报Android。
+
+| 报文头 | 命令 | 分隔符 | 版本号(15字节) | 校验符 | 报文结束符 |
+|--------|------|---------|----------------|---------|------------|
+| $ | V | , | XXXX | F-数据字符 | # |
+
+版本号规划:
+- 硬件版本(4个字节,例如HV10)
+- 软件版本(4个字节,例如SV10)
+- 软件更新日期(190705,6个字节)
+- 序列号(1个字节)
+
+#### 20. 设备请求签到命令
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | Q | , | AABB | F-数据字符 | # |
+
+#### 21. 设备收到反馈
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | S | , | AABB | F-数据字符 | # |
+
+#### 22. 增援
+
+发送时机:MCU上报Android。
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | Z | , | AABB | F-数据字符 | # |
+
+#### 23. 护理
+
+发送时机:MCU上报Android。
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | H | , | AABB | F-数据字符 | # |
+
+#### 24. 换药
+
+发送时机:MCU上报Android。
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | Y | , | AABB | F-数据字符 | # |
+
+#### 25. 清除所有事件
+
+发送时机:MCU上报Android。
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | R | , | AABB | F-数据字符 | # |
+
+#### 26. 拔针
+
+发送时机:MCU上报Android。
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | ? | , | AABB | F-数据字符 | # |
+
+#### 27. 紧急按钮取消按键
+
+发送时机:MCU上报Android。
+
+| 报文头 | 命令 | 分隔符 | 设备地址(4) | 校验符 | 报文结束符 |
+|--------|------|---------|-------------|---------|------------|
+| $ | P | , | AABB | F-数据字符 | # |
+
+注:Android收21到24的指令,如需反馈,同样格式发回数据。 

+ 149 - 0
Release/Exe/STM8.hex

@@ -0,0 +1,149 @@
+:10800000820088BA8200891B8200891B8200891B3A
+:108010008200891B8200891B8200891B8200858C5B
+:108020008200891B8200891B8200891B8200891BB8
+:108030008200891B8200891B8200891B8200891BA8
+:108040008200891B8200891B8200891B8200891B98
+:108050008200891B8200891B8200891B8200891B88
+:108060008200891B820082888200891B8200891B12
+:108070008200891B8200891B8200891B8200891B68
+:10808000008831009D001200000087EB000280CACA
+:108090000010000035353535353535353535353554
+:1080A00000000000000000000000000000000000D0
+:1080B000535A46533230323530313230303031005D
+:0C80C000310800000000000000000292E7
+:1080CC008D0086423B000CAEEE80BF0AAE0036BF80
+:1080DC00083F0C8D0089168D0088A38D00884F8D6C
+:1080EC000088E68D0088D18D0087BA8D0087098DB8
+:1080FC000089059A200435020010AE008A8D008696
+:10810C007F8D00877124143D0C2610350100A73596
+:10811C001A001135FF000C350000108D00844A8DBB
+:10812C0000886C8D008386C600A7A1002654C6006B
+:10813C009FA10226C572C600A1C7004ECE00A15C4D
+:10814C00F6C7004F3F0020195F41B600411C00509C
+:10815C00905F61B6006190D680B0F7B600AB01B706
+:10816C0000B600A10F25E1350E005FA6128D00862A
+:10817C008CC60010A1002603CC810235000010CC67
+:10818C008106C600A8A100274E90AE008AAE0096CC
+:10819C008D008889938D008771243CAE03E8BF0263
+:1081AC005FBF00AE008A8D008759AE00968D0088A7
+:1081BC0095C600A8ABFFC700A872C600A1C7004EA9
+:1081CC00CE00A15CF6C7004FC600A5C70050A603A1
+:1081DC008D00868CCC8106C6009FA102263E72C6FD
+:1081EC0000A1C7004ECE00A15CF6C7004F350C00B5
+:1081FC0050A6038D00868C35020010350900A8AE00
+:10820C0003E8BF025FBF00AE008A8D008759AE0045
+:10821C00968D008895350C00A5CC8106C6009FA1D3
+:10822C0003260735000010CC8106C600A0A102274A
+:10823C0003CC8106C600A5A10C2703CC810672C60F
+:10824C0000A1C7004ECE00A15CF6C7004F35070059
+:10825C0050A6038D00868C35000010350900A8AEA1
+:10826C0003E8BF025FBF00AE008A8D008759AE00E5
+:10827C00968D008895350700A5CC81068A84A4BF0D
+:10828C0088868D00863D35005344AE008A8D00886B
+:10829C00898D008746AE008A8D008895C600AEA1F8
+:1082AC0002250F7218525DC600AEABFFC700AECCF4
+:1082BC008381C600AEA101260B7219525D350000F8
+:1082CC00AECC8381C600A6A1002603CC8381C60058
+:1082DC00AEA1002703CC8381C600A6A101261335CD
+:1082EC000500AE7218525DC600A6AB01C700A6CC45
+:1082FC008381C600A6C100112455C600A65F975AFB
+:10830C005A90AE00088D00878141B70141C600A686
+:10831C005F975A5A90AE00088D00879A61B700613A
+:10832C005F41B60141D6006C5F97B6008D0087B2F5
+:10833C009FA401A1012506350200AE2004350100E1
+:10834C00AE7218525DC600A6AB01C700A62026C6A9
+:10835C000011C100A62612350000AE7218525DC67F
+:10836C0000A6AB01C700A6200C7219525D350000A7
+:10837C00A6350000AE8D00866880C6500144A4016D
+:10838C00A1002738C6009FA1012615C600A9AB0184
+:10839C00C700A9C600A9A1C8250A3502009F200460
+:1083AC003500009FAE0078BF025FBF00AE008A8D23
+:1083BC00008759AE008E8D008895202090AE008AE3
+:1083CC00AE008E8D008889938D008771240A35014B
+:1083DC00009F350000A92004350000A9C650104E9E
+:1083EC00A40FA401A1002736C600A0A1012615C622
+:1083FC0000AAAB01C700AAC600AAA1C8250A35026B
+:10840C0000A02004350000A0AE0078BF025FBF00C2
+:10841C00AE008A8D008759AE0092AC00889590AE64
+:10842C00008AAE00928D008889938D008771240993
+:10843C00350100A0350000AA87350000AA87C600C8
+:10844C00A3A11A2703CC84ED3500009A3500009BBC
+:10845C003500009C350000AD2059C600AD35080034
+:10846C00005F97B600629FC700ABC600AD35080031
+:10847C00005F97B60062C700ACC600AD5F9758DED0
+:10848C0000121D0119A300772421C600AB905F9048
+:10849C0097C600AC5F5C8D0087AA9F93DA009AB7F1
+:1084AC0000C600AB5F97B600D7009AC600ADAB0113
+:1084BC00C700ADC600ADA11825A0350000A3C600AD
+:1084CC009BCB009ACB009CA40FC700ABC6009C4E64
+:1084DC00A40FC700ACC6009CA40FC7009C8D0084E1
+:1084EC00EE8772C600A1C1009A260ACE00A15CF6E6
+:1084FC00C1009B2716C6009CA10E270FC6009AA18F
+:10850C00FF2607C6009BA1FF270187C6009C4D27AD
+:10851C006A4A27674A27644A27614A275E4A275BCB
+:10852C004A27584A27554A27524A2709A004271395
+:10853C004A272B2046350100A735000010350000D6
+:10854C00A8203872C600A1C7004ECE00A15CF6C7A9
+:10855C00004F350D0050A6038D00868C201DC600E3
+:10856C009BA159260E35000010350100A7351A00C5
+:10857C00112008350000A73592001135FF00A487A3
+:10858C008D00860E5FC6530C905F9097934F02C67A
+:10859C00530D905F909790BF0072BB0000C600A374
+:1085AC00A1002618350000A41D0191A3015D24062D
+:1085BC00350200A3203F350000A32039C600A3A13B
+:1085CC000126141D0191A3015D2406350200A32090
+:1085DC0024350000A3201EC600A3A11A2417C60030
+:1085EC00A3905F9097905872A9000E90FFC600A3BD
+:1085FC00AB01C700A33500530C3500530D8D00861D
+:10860C002A8088A6002000887B02887B02891E06AF
+:10861C001F045F977B086B06FE1F07858487891EE6
+:10862C0006BF0020001E041F061E021F04855B02ED
+:10863C008788A600200588A608200088897B0488E6
+:10864C007B04891E081F045F977B0A6B061F09FEBB
+:10865C001F071E095C5CFE1F09858487891E06BFE7
+:10866C00001E08BF0220001E031F071E041F0885E2
+:10867C005B0487450800450901450A02450B038741
+:10868C00B702C600A6A10026733F003F014FB701F9
+:10869C005F41B602411C004DF6A40F5F41B602418A
+:1086AC001C004DF74FB70020125F41B60041D600B9
+:1086BC004EBB01B701B600AB01B700B600B1022545
+:1086CC00E85F41B602411C004DB6014EA4F0FA5FC2
+:1086DC0041B602411C004DF73F0020165F41B60029
+:1086EC0041D6004E5F41B60041D7006CB600AB01DD
+:1086FC00B700B600B10225E4350100A68772185008
+:10870C000C350052603500526135005262351352FF
+:10871C0063C65250A48FC752503500526B350A5263
+:10872C006C3560525BC6525DA41FC7525D721D5200
+:10873C006F721052503580526D87AE000020006C65
+:10874C000326096C0226056C0126017C87B603EB17
+:10875C0003B703B602E902B702B601E901B701B6E5
+:10876C0000F9B70087908990BE00F3260590BE02F1
+:10877C00E3029085875D2B06905D2B0A65875090F0
+:10878C005D2B07655087905020F9905020EE905D3E
+:10879C002A0290505D2B02658750659050874D27BB
+:1087AC0004584A26FC874D2704574A26FC87721327
+:1087BC00500272155002721250037214500372134D
+:1087CC00500472155004721950117218501272190B
+:1087DC0050133500009F350000A0350000A8878994
+:1087EC00FE9093855C5C905D271C89FEBF00855CC8
+:1087FC005C89FEBF02855C5C515A92D60092D7020E
+:10880C005A2AF75120D98790AE80802011931C00F2
+:10881C000389938D0088F785928D0005909390A322
+:10882C00809426E98789FE9093855C5C905D271285
+:10883C0089FEBF00855C5C515A926F005A2AFA512E
+:10884C0020E387350053033504530E35FF530F35A2
+:10885C00FF53103500530C3500530D721053008725
+:10886C00C60010A10126057216500F87C60010A174
+:10887C000226057216500F877217500F8789FEBF9C
+:10888C00001E01EE02BF028587908990BE00FF900A
+:10889C00BE02EF02908587C650A0A4CFAA10C75085
+:1088AC00A0721F500C721E500D721E500E87AE031C
+:1088BC00FF948D0089235D27048D0088138D008023
+:1088CC00CCAC00891F3503534735F9534835015358
+:1088DC004335F95346721053408772165011721675
+:1088EC0050127217500F350200108788F6B705E644
+:1088FC0001B706E602B7078487AE80C0CF00A1356A
+:10890C000000A78789858D008929351850C687AC4A
+:0F891C00008926AC0089105F5C879D20FD20FE3E
+:04000005000088BAB5
+:00000001FF

binární
Release/Exe/STM8.out


binární
Release/Exe/vssver.scc


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1985 - 0
Release/List/main.lst


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2208 - 0
Release/List/main.s


binární
Release/List/vssver.scc


binární
Release/Obj/STM8.pbd


binární
Release/Obj/STM8.pbd.browse


+ 2 - 0
Release/Obj/STM8.pbd.linf

@@ -0,0 +1,2 @@
+D:\MCU工作移交\模拟紧急按钮V1_STM8\Release\Obj\STM8.pbd
+D:\MCU工作移交\模拟紧急按钮V1_STM8\Release\Obj\main.pbi

binární
Release/Obj/main.o


binární
Release/Obj/main.pbi


+ 281 - 0
Release/Obj/main.pbi.cout

@@ -0,0 +1,281 @@
+"D:\紧急按钮更新取消按键-2025-0120\紧急按钮更新取消按键-2025-0120\源代码\模拟紧急按钮V1_STM8(250120)\main.c"
+-std=c99
+-ferror-limit=100
+-I
+D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\inc
+-I
+D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\inc\c
+-DNDEBUG=1
+-D__CHAR_BITS__=8
+-D__CHAR_MAX__=0xff
+-D__CHAR_MIN__=0
+-D__CHAR_SIZE__=1
+-D__UNSIGNED_CHAR_MAX__=0xff
+-D__SIGNED_CHAR_MAX__=127
+-D__SIGNED_CHAR_MIN__=(-__SIGNED_CHAR_MAX__-1)
+-D__CHAR_ALIGN__=1
+-D__SHORT_SIZE__=2
+-D__UNSIGNED_SHORT_MAX__=0xffffU
+-D__SIGNED_SHORT_MAX__=32767
+-D__SIGNED_SHORT_MIN__=(-__SIGNED_SHORT_MAX__-1)
+-D__SHORT_ALIGN__=1
+-D__INT_SIZE__=2
+-D__UNSIGNED_INT_MAX__=0xffffU
+-D__SIGNED_INT_MAX__=32767
+-D__SIGNED_INT_MIN__=(-__SIGNED_INT_MAX__-1)
+-D__INT_ALIGN__=1
+-D__LONG_SIZE__=4
+-D__UNSIGNED_LONG_MAX__=0xffffffffUL
+-D__SIGNED_LONG_MAX__=2147483647L
+-D__SIGNED_LONG_MIN__=(-__SIGNED_LONG_MAX__-1)
+-D__LONG_ALIGN__=1
+-D__LONG_LONG_SIZE__=4
+-D__UNSIGNED_LONG_LONG_MAX__=0xffffffffULL
+-D__SIGNED_LONG_LONG_MAX__=2147483647LL
+-D__SIGNED_LONG_LONG_MIN__=(-__SIGNED_LONG_LONG_MAX__-1)
+-D__LONG_LONG_ALIGN__=1
+-D__INT8_T_TYPE__=signed char
+-D__INT8_T_MAX__=127
+-D__INT8_T_MIN__=(-__INT8_T_MAX__-1)
+-D__UINT8_T_TYPE__=unsigned char
+-D__UINT8_T_MAX__=0xff
+-D__INT8_SIZE_PREFIX__="hh"
+-D__INT16_T_TYPE__=signed int
+-D__INT16_T_MAX__=32767
+-D__INT16_T_MIN__=(-__INT16_T_MAX__-1)
+-D__UINT16_T_TYPE__=unsigned int
+-D__UINT16_T_MAX__=0xffffU
+-D__INT16_SIZE_PREFIX__=""
+-D__INT32_T_TYPE__=signed long int
+-D__INT32_T_MAX__=2147483647L
+-D__INT32_T_MIN__=(-__INT32_T_MAX__-1)
+-D__UINT32_T_TYPE__=unsigned long int
+-D__UINT32_T_MAX__=0xffffffffUL
+-D__INT32_SIZE_PREFIX__="l"
+-D__INT_LEAST8_T_TYPE__=signed char
+-D__INT_LEAST8_T_MAX__=127
+-D__INT_LEAST8_T_MIN__=(-__INT_LEAST8_T_MAX__-1)
+-D__UINT_LEAST8_T_TYPE__=unsigned char
+-D__UINT_LEAST8_T_MAX__=0xff
+-D__INT8_C_SUFFIX__=
+-D__UINT8_C_SUFFIX__=
+-D__INT_LEAST8_SIZE_PREFIX__="hh"
+-D__INT_LEAST16_T_TYPE__=signed int
+-D__INT_LEAST16_T_MAX__=32767
+-D__INT_LEAST16_T_MIN__=(-__INT_LEAST16_T_MAX__-1)
+-D__UINT_LEAST16_T_TYPE__=unsigned int
+-D__UINT_LEAST16_T_MAX__=0xffffU
+-D__INT16_C_SUFFIX__=
+-D__UINT16_C_SUFFIX__=U
+-D__INT_LEAST16_SIZE_PREFIX__=""
+-D__INT_LEAST32_T_TYPE__=signed long int
+-D__INT_LEAST32_T_MAX__=2147483647L
+-D__INT_LEAST32_T_MIN__=(-__INT_LEAST32_T_MAX__-1)
+-D__UINT_LEAST32_T_TYPE__=unsigned long int
+-D__UINT_LEAST32_T_MAX__=0xffffffffUL
+-D__INT32_C_SUFFIX__=L
+-D__UINT32_C_SUFFIX__=UL
+-D__INT_LEAST32_SIZE_PREFIX__="l"
+-D__INT_FAST8_T_TYPE__=signed char
+-D__INT_FAST8_T_MAX__=127
+-D__INT_FAST8_T_MIN__=(-__INT_FAST8_T_MAX__-1)
+-D__UINT_FAST8_T_TYPE__=unsigned char
+-D__UINT_FAST8_T_MAX__=0xff
+-D__INT_FAST8_SIZE_PREFIX__="hh"
+-D__INT_FAST16_T_TYPE__=signed int
+-D__INT_FAST16_T_MAX__=32767
+-D__INT_FAST16_T_MIN__=(-__INT_FAST16_T_MAX__-1)
+-D__UINT_FAST16_T_TYPE__=unsigned int
+-D__UINT_FAST16_T_MAX__=0xffffU
+-D__INT_FAST16_SIZE_PREFIX__=""
+-D__INT_FAST32_T_TYPE__=signed long int
+-D__INT_FAST32_T_MAX__=2147483647L
+-D__INT_FAST32_T_MIN__=(-__INT_FAST32_T_MAX__-1)
+-D__UINT_FAST32_T_TYPE__=unsigned long int
+-D__UINT_FAST32_T_MAX__=0xffffffffUL
+-D__INT_FAST32_SIZE_PREFIX__="l"
+-D__INTMAX_T_TYPE__=signed long int
+-D__INTMAX_T_MAX__=2147483647L
+-D__INTMAX_T_MIN__=(-__INTMAX_T_MAX__-1)
+-D__UINTMAX_T_TYPE__=unsigned long int
+-D__UINTMAX_T_MAX__=0xffffffffUL
+-D__INTMAX_C_SUFFIX__=L
+-D__UINTMAX_C_SUFFIX__=UL
+-D__INTMAX_SIZE_PREFIX__="l"
+-D__FLOAT_SIZE__=4
+-D__FLOAT_ALIGN__=1
+-D__DOUBLE_SIZE__=4
+-D__DOUBLE_ALIGN__=1
+-D__LONG_DOUBLE_SIZE__=4
+-D__LONG_DOUBLE_ALIGN__=1
+-D__NAN_HAS_HIGH_MANTISSA_BIT_SET__=0
+-D__SUBNORMAL_FLOATING_POINTS__=1
+-D__SIZE_T_TYPE__=unsigned short int
+-D__SIZE_T_MAX__=0xffffU
+-D__PTRDIFF_T_TYPE__=signed short int
+-D__PTRDIFF_T_MAX__=32767
+-D__PTRDIFF_T_MIN__=(-__PTRDIFF_T_MAX__-1)
+-D__INTPTR_T_TYPE__=signed short int
+-D__INTPTR_T_MAX__=32767
+-D__INTPTR_T_MIN__=(-__INTPTR_T_MAX__-1)
+-D__UINTPTR_T_TYPE__=unsigned short int
+-D__UINTPTR_T_MAX__=0xffffU
+-D__INTPTR_SIZE_PREFIX__="h"
+-D__JMP_BUF_ELEMENT_TYPE__=unsigned char
+-D__JMP_BUF_NUM_ELEMENTS__=29
+-D__TID__=0x3800
+-D__VER__=210
+-D__SUBVERSION__=4
+-D__BUILD_NUMBER__=157
+-D__IAR_SYSTEMS_ICC__=8
+-D__VA_STACK_DECREASING__=1
+-D__VA_STACK_ALIGN__=1
+-D__VA_STACK_ALIGN_EXTRA_BEFORE__=1
+-D__LITTLE_ENDIAN__=0
+-D__BOOL_TYPE__=unsigned char
+-D__WCHAR_T_TYPE__=unsigned short int
+-D__WCHAR_T_SIZE__=2
+-D__WCHAR_T_MAX__=0xffffU
+-D__DEF_PTR_MEM__=__near
+-D__CODE_MEM0__=__far_func
+-D__CODE_MEM0_POINTER_OK__=1
+-D__CODE_MEM0_UNIQUE_POINTER__=0
+-D__CODE_MEM0_VAR_OK__=1
+-D__CODE_MEM1__=__huge_func
+-D__CODE_MEM1_POINTER_OK__=1
+-D__CODE_MEM1_UNIQUE_POINTER__=1
+-D__CODE_MEM1_VAR_OK__=1
+-D__DATA_MEM0__=__tiny
+-D__DATA_MEM0_POINTER_OK__=1
+-D__DATA_MEM0_UNIQUE_POINTER__=1
+-D__DATA_MEM0_VAR_OK__=1
+-D__DATA_MEM0_INTPTR_TYPE__=signed char
+-D__DATA_MEM0_UINTPTR_TYPE__=unsigned char
+-D__DATA_MEM0_INTPTR_SIZE_PREFIX__="hh"
+-D__DATA_MEM0_MAX_SIZE__=0xff
+-D__DATA_MEM1__=__near
+-D__DATA_MEM1_POINTER_OK__=1
+-D__DATA_MEM1_UNIQUE_POINTER__=1
+-D__DATA_MEM1_VAR_OK__=1
+-D__DATA_MEM1_INDEX_TYPE__=short
+-D__DATA_MEM1_SIZE_TYPE__=unsigned short
+-D__DATA_MEM1_INTPTR_TYPE__=short int
+-D__DATA_MEM1_UINTPTR_TYPE__=unsigned short int
+-D__DATA_MEM1_INTPTR_SIZE_PREFIX__="h"
+-D__DATA_MEM1_MAX_SIZE__=0xffff
+-D__DATA_MEM1_HEAP_SEGMENT__="HEAP"
+-D__DATA_MEM1_PAGE_SIZE__=0
+-D__DATA_MEM1_HEAP__=1
+-D__DATA_MEM2__=__far
+-D__DATA_MEM2_POINTER_OK__=1
+-D__DATA_MEM2_UNIQUE_POINTER__=1
+-D__DATA_MEM2_VAR_OK__=1
+-D__DATA_MEM2_INDEX_TYPE__=short
+-D__DATA_MEM2_SIZE_TYPE__=unsigned short
+-D__DATA_MEM2_INTPTR_TYPE__=long int
+-D__DATA_MEM2_UINTPTR_TYPE__=unsigned long int
+-D__DATA_MEM2_INTPTR_SIZE_PREFIX__="l"
+-D__DATA_MEM2_MAX_SIZE__=0xffff
+-D__DATA_MEM3__=__huge
+-D__DATA_MEM3_POINTER_OK__=1
+-D__DATA_MEM3_UNIQUE_POINTER__=1
+-D__DATA_MEM3_VAR_OK__=1
+-D__DATA_MEM3_INDEX_TYPE__=long
+-D__DATA_MEM3_SIZE_TYPE__=unsigned long
+-D__DATA_MEM3_INTPTR_TYPE__=long int
+-D__DATA_MEM3_UINTPTR_TYPE__=unsigned long int
+-D__DATA_MEM3_INTPTR_SIZE_PREFIX__="l"
+-D__DATA_MEM3_MAX_SIZE__=0xffffffff
+-D__DATA_MEM4__=__eeprom
+-D__DATA_MEM4_POINTER_OK__=1
+-D__DATA_MEM4_UNIQUE_POINTER__=1
+-D__DATA_MEM4_VAR_OK__=1
+-D__DATA_MEM4_INDEX_TYPE__=short
+-D__DATA_MEM4_SIZE_TYPE__=unsigned short
+-D__DATA_MEM4_INTPTR_TYPE__=short int
+-D__DATA_MEM4_UINTPTR_TYPE__=unsigned short int
+-D__DATA_MEM4_INTPTR_SIZE_PREFIX__="h"
+-D__DATA_MEM4_MAX_SIZE__=0xffff
+-D__HEAP_MEM0__=1
+-D__MULTIPLE_HEAPS__=0
+-D__DEF_HEAP_MEM__=__near
+-D__MULTIPLE_INHERITANCE__=1
+-D_RTSL_COMPARE_T=unsigned char
+-D__CODE_MODEL__=__MEDIUM_CODE_MODEL__
+-D__CORE__=__STM8__
+-D__DATA_MODEL__=__MEDIUM_DATA_MODEL__
+-D__ICCSTM8__=1
+-D__LARGE_CODE_MODEL__=3
+-D__LARGE_DATA_MODEL__=3
+-D__MEDIUM_CODE_MODEL__=2
+-D__MEDIUM_DATA_MODEL__=2
+-D__SMALL_CODE_MODEL__=1
+-D__SMALL_DATA_MODEL__=1
+-D__STM8__=1
+-D__PLAIN_INT_BITFIELD_IS_SIGNED__=1
+-D__HAS_WEAK__=1
+-D__HAS_LOCATED_DECLARATION__=1
+-D__HAS_LOCATED_WITH_INIT__=1
+-D__IAR_COMPILERBASE__=594189
+-D_GOANNA=1
+-D__DATE__="Feb 23 2025"
+-D__TIME__="18:40:38"
+-D__STDC__=1
+-D__STDC_VERSION__=199901L
+-D__STDC_HOSTED__=1
+-D__STDC_NO_VLA__=1
+-D__STDC_NO_ATOMICS__=1
+-D__EDG_IA64_ABI=1
+-D__EDG_IA64_ABI_VARIANT_CTORS_AND_DTORS_RETURN_THIS=1
+-D__EDG_IA64_ABI_USE_INT_STATIC_INIT_GUARD=1
+-D__EDG_TYPE_TRAITS_ENABLED=1
+-D__EDG__=1
+-D__EDG_VERSION__=409
+-D__EDG_SIZE_TYPE__=unsigned short
+-D__EDG_PTRDIFF_TYPE__=short
+-D__EDG_DELTA_TYPE=short
+-D__EDG_IA64_VTABLE_ENTRY_TYPE=short
+-D__EDG_VIRTUAL_FUNCTION_INDEX_TYPE=unsigned short
+-D__EDG_LOWER_VARIABLE_LENGTH_ARRAYS=1
+-D__EDG_IA64_ABI_USE_VARIANT_ARRAY_COOKIES=1
+-D__EDG_ABI_COMPATIBILITY_VERSION=9999
+-D__EDG_ABI_CHANGES_FOR_RTTI=1
+-D__EDG_ABI_CHANGES_FOR_ARRAY_NEW_AND_DELETE=1
+-D__EDG_ABI_CHANGES_FOR_PLACEMENT_DELETE=1
+-D__EDG_BSD=0
+-D__EDG_SYSV=0
+-D__EDG_ANSIC=1
+-D__EDG_CPP11_IL_EXTENSIONS_SUPPORTED=1
+-D_DLIB_CONFIG_FILE_HEADER_NAME="D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\LIB\dlstm8mmn.h"
+-D_DLIB_CONFIG_FILE_STRING="D:\\Program Files (x86)\\IAR Systems\\Embedded Workbench 7.0\\stm8\\LIB\\dlstm8mmn.h"
+-D__VERSION__="IAR C/C++ Compiler V2.10.4.157 for STM8"
+-D__CODE_MEMORY_LIST1__()=__CODE_MEM_HELPER1__(__code, 0 )
+-D__CODE_MEMORY_LIST2__(_P1)=__CODE_MEM_HELPER2__(__code, 0 ,  _P1 )
+-D__CODE_MEMORY_LIST3__(_P1, _P2)=__CODE_MEM_HELPER3__(__code, 0 ,  _P1 ,  _P2 )
+-D__DATA_MEMORY_LIST1__()=__DATA_MEM_HELPER1__(__data, 0 )
+-D__DATA_MEMORY_LIST2__(_P1)=__DATA_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__DATA_MEMORY_LIST3__(_P1, _P2)=__DATA_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__CODE_PTR_MEMORY_LIST1__()=__CODE_PTR_MEM_HELPER1__(__code, 0 )
+-D__CODE_PTR_MEMORY_LIST2__(_P1)=__CODE_PTR_MEM_HELPER2__(__code, 0 ,  _P1 )
+-D__CODE_PTR_MEMORY_LIST3__(_P1, _P2)=__CODE_PTR_MEM_HELPER3__(__code, 0 ,  _P1 ,  _P2 )
+-D__DATA_PTR_MEMORY_LIST1__()=__DATA_PTR_MEM_HELPER1__(__data, 0 )
+-D__DATA_PTR_MEMORY_LIST2__(_P1)=__DATA_PTR_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__DATA_PTR_MEMORY_LIST3__(_P1, _P2)=__DATA_PTR_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__VAR_MEMORY_LIST1__()=__VAR_MEM_HELPER1__(__data, 0 )
+-D__VAR_MEMORY_LIST2__(_P1)=__VAR_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__VAR_MEMORY_LIST3__(_P1, _P2)=__VAR_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__VARD_MEMORY_LIST1__()=__VARD_MEM_HELPER1__(__data, 0, _ )
+-D__HEAP_MEMORY_LIST1__()=__HEAP_MEM_HELPER1__(__data, 0 )
+-D__HEAP_MEMORY_LIST2__(_P1)=__HEAP_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__HEAP_MEMORY_LIST3__(_P1, _P2)=__HEAP_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__HVAR_MEMORY_LIST1__()=__HVAR_MEM_HELPER1__(__data, 0 )
+-D__HEAPD_MEMORY_LIST1__()=__HEAPD_MEM_HELPER1__(__data, 0, _ )
+-D__HEAPU_MEMORY_LIST1__()=__HEAPU_MEM_HELPER1__(__data, 0 )
+-D__TOPM_DATA_MEMORY_LIST1__()=
+-D__TOPM_DATA_MEMORY_LIST2__(_P1)=
+-D__TOPM_DATA_MEMORY_LIST3__(_P1, _P2)=
+-D__TOPP_DATA_MEMORY_LIST1__()=__TOPP_DATA_MEM_HELPER1__(__data, 0 )
+-D__TOPP_DATA_MEMORY_LIST2__(_P1)=__TOPP_DATA_MEM_HELPER2__(__data, 0 ,  _P1 )
+-D__TOPP_DATA_MEMORY_LIST3__(_P1, _P2)=__TOPP_DATA_MEM_HELPER3__(__data, 0 ,  _P1 ,  _P2 )
+-D__DATA_MEM0_SIZE_TYPE__=unsigned int
+-D__DATA_MEM0_INDEX_TYPE__=signed int

binární
Release/Obj/vssver.scc


+ 155 - 0
STM8.dep

@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project>
+  <fileVersion>2</fileVersion>
+  <fileChecksum>4212816555</fileChecksum>
+  <configuration>
+    <name>Debug</name>
+    <outputs>
+      <file>$PROJ_DIR$\Debug\Exe\templproj.out</file>
+      <file>$PROJ_DIR$\GPIO_LED.c</file>
+      <file>$TOOLKIT_DIR$\lib\dlstm8smn.a</file>
+      <file>$TOOLKIT_DIR$\inc\io_macros.h</file>
+      <file>$PROJ_DIR$\main.c</file>
+      <file>$PROJ_DIR$\Debug\Obj\main.o</file>
+      <file>$PROJ_DIR$\Debug\Obj\main.pbi</file>
+      <file>$PROJ_DIR$\Debug\Obj\GPIO_LED.o</file>
+      <file>$TOOLKIT_DIR$\lib\dbgstm8smd.a</file>
+      <file>$PROJ_DIR$\Debug\Obj\GPIO_LED.pbi</file>
+      <file>$TOOLKIT_DIR$\inc\iostm8s003f3.h</file>
+      <file>$PROJ_DIR$\GPIO_LED.h</file>
+      <file>$TOOLKIT_DIR$\config\lnkstm8s003f3.icf</file>
+    </outputs>
+    <file>
+      <name>[ROOT_NODE]</name>
+      <outputs>
+        <tool>
+          <name>ILINK</name>
+          <file> 0</file>
+        </tool>
+      </outputs>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\Debug\Exe\templproj.out</name>
+      <inputs>
+        <tool>
+          <name>ILINK</name>
+          <file> 12 5 2 8</file>
+        </tool>
+      </inputs>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\GPIO_LED.c</name>
+      <outputs>
+        <tool>
+          <name>BICOMP</name>
+          <file> 9</file>
+        </tool>
+        <tool>
+          <name>ICCSTM8</name>
+          <file> 7</file>
+        </tool>
+      </outputs>
+      <inputs>
+        <tool>
+          <name>BICOMP</name>
+          <file> 10 3 11</file>
+        </tool>
+        <tool>
+          <name>ICCSTM8</name>
+          <file> 11 10 3</file>
+        </tool>
+      </inputs>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\main.c</name>
+      <outputs>
+        <tool>
+          <name>BICOMP</name>
+          <file> 6</file>
+        </tool>
+        <tool>
+          <name>ICCSTM8</name>
+          <file> 5</file>
+        </tool>
+      </outputs>
+      <inputs>
+        <tool>
+          <name>BICOMP</name>
+          <file> 10 3</file>
+        </tool>
+        <tool>
+          <name>ICCSTM8</name>
+          <file> 10 3</file>
+        </tool>
+      </inputs>
+    </file>
+  </configuration>
+  <configuration>
+    <name>Release</name>
+    <outputs>
+      <file>$PROJ_DIR$\Release\Obj\main.o</file>
+      <file>$TOOLKIT_DIR$\lib\dbgstm8mmn.a</file>
+      <file>$PROJ_DIR$\Release\Obj\main.pbi</file>
+      <file>$PROJ_DIR$\Release\List\main.s</file>
+      <file>$TOOLKIT_DIR$\lib\dlstm8mmn.a</file>
+      <file>$PROJ_DIR$\Release\Exe\STM8.out</file>
+      <file>$PROJ_DIR$\Release\Exe\STM8.hex</file>
+      <file>$TOOLKIT_DIR$\inc\io_macros.h</file>
+      <file>$PROJ_DIR$\Release\List\main.lst</file>
+      <file>$PROJ_DIR$\Release\Obj\STM8.pbd</file>
+      <file>$PROJ_DIR$\main.c</file>
+      <file>$TOOLKIT_DIR$\inc\iostm8s003f3.h</file>
+      <file>$TOOLKIT_DIR$\config\lnkstm8s003f3.icf</file>
+    </outputs>
+    <file>
+      <name>[ROOT_NODE]</name>
+      <outputs>
+        <tool>
+          <name>ILINK</name>
+          <file> 5</file>
+        </tool>
+      </outputs>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\Release\Exe\STM8.out</name>
+      <outputs>
+        <tool>
+          <name>OBJCOPY</name>
+          <file> 6</file>
+        </tool>
+      </outputs>
+      <inputs>
+        <tool>
+          <name>ILINK</name>
+          <file> 12 0 4 1</file>
+        </tool>
+      </inputs>
+    </file>
+    <file>
+      <name>$PROJ_DIR$\main.c</name>
+      <outputs>
+        <tool>
+          <name>BICOMP</name>
+          <file> 2</file>
+        </tool>
+        <tool>
+          <name>ICCSTM8</name>
+          <file> 3 8 0</file>
+        </tool>
+      </outputs>
+      <inputs>
+        <tool>
+          <name>BICOMP</name>
+          <file> 11 7</file>
+        </tool>
+        <tool>
+          <name>ICCSTM8</name>
+          <file> 11 7</file>
+        </tool>
+      </inputs>
+    </file>
+  </configuration>
+</project>
+
+

+ 465 - 0
STM8.ewd

@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project>
+  <fileVersion>2</fileVersion>
+  <configuration>
+    <name>Debug</name>
+    <toolchain>
+      <name>STM8</name>
+    </toolchain>
+    <debug>1</debug>
+    <settings>
+      <name>C-SPY</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <version>1</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>CSpyMandatory</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CSpyInput</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CSpyRunToEnable</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CSpyRunToName</name>
+          <state>main</state>
+        </option>
+        <option>
+          <name>CSpyMacOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyMacFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>DynDriver</name>
+          <state>STLINK_STM8</state>
+        </option>
+        <option>
+          <name>CSpyDDFOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyDDFFile</name>
+          <state>$TOOLKIT_DIR$\config\ddf\iostm8s003f3.ddf</state>
+        </option>
+        <option>
+          <name>CSpyEnableExtraOptions</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesSuppressCheck1</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesPath1</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesSuppressCheck2</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesPath2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesSuppressCheck3</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesPath3</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesOffset1</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesOffset2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesOffset3</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesUse1</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesUse2</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesUse3</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>SIMULATOR_STM8</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <version>0</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>SimMandatory</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>STICE_STM8</name>
+      <archiveVersion>3</archiveVersion>
+      <data>
+        <version>2</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>STiceMandatory</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceSuppressLoad</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceVerifyLoad</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceLogFileOver</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceLogFile</name>
+          <state>$PROJ_DIR$\cspycomm.log</state>
+        </option>
+        <option>
+          <name>STiceUseSwim</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceOptionBytesSetupFileOver</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceOptionBytesSetupFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>STiceEraseMemory</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>STLINK_STM8</name>
+      <archiveVersion>3</archiveVersion>
+      <data>
+        <version>2</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>1</debug>
+        <option>
+          <name>STlinkMandatory</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkSuppressLoad</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkVerifyLoad</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkLogFileOver</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkLogFile</name>
+          <state>$PROJ_DIR$\cspycomm.log</state>
+        </option>
+        <option>
+          <name>STlinkOptionBytesSetupFileOver</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkOptionBytesSetupFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>STlinkEraseMemory</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <debuggerPlugins>
+      <plugin>
+        <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+        <loadFlag>0</loadFlag>
+      </plugin>
+      <plugin>
+        <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+        <loadFlag>1</loadFlag>
+      </plugin>
+      <plugin>
+        <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+        <loadFlag>0</loadFlag>
+      </plugin>
+      <plugin>
+        <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
+        <loadFlag>1</loadFlag>
+      </plugin>
+      <plugin>
+        <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+        <loadFlag>0</loadFlag>
+      </plugin>
+    </debuggerPlugins>
+  </configuration>
+  <configuration>
+    <name>Release</name>
+    <toolchain>
+      <name>STM8</name>
+    </toolchain>
+    <debug>0</debug>
+    <settings>
+      <name>C-SPY</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <version>1</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>CSpyMandatory</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CSpyInput</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CSpyRunToEnable</name>
+          <state>1</state>
+        </option>
+        <option>
+          <name>CSpyRunToName</name>
+          <state>main</state>
+        </option>
+        <option>
+          <name>CSpyMacOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyMacFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>DynDriver</name>
+          <state>STLINK_STM8</state>
+        </option>
+        <option>
+          <name>CSpyDDFOverride</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyDDFFile</name>
+          <state>$TOOLKIT_DIR$\config\ddf\iostm8s003f3.ddf</state>
+        </option>
+        <option>
+          <name>CSpyEnableExtraOptions</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyExtraOptions</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesSuppressCheck1</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesPath1</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesSuppressCheck2</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesPath2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesSuppressCheck3</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesPath3</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesOffset1</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesOffset2</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesOffset3</name>
+          <state></state>
+        </option>
+        <option>
+          <name>CSpyImagesUse1</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesUse2</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>CSpyImagesUse3</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>SIMULATOR_STM8</name>
+      <archiveVersion>1</archiveVersion>
+      <data>
+        <version>0</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>SimMandatory</name>
+          <state>1</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>STICE_STM8</name>
+      <archiveVersion>3</archiveVersion>
+      <data>
+        <version>2</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>STiceMandatory</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceSuppressLoad</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceVerifyLoad</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceLogFileOver</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceLogFile</name>
+          <state>$PROJ_DIR$\cspycomm.log</state>
+        </option>
+        <option>
+          <name>STiceUseSwim</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceOptionBytesSetupFileOver</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STiceOptionBytesSetupFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>STiceEraseMemory</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <settings>
+      <name>STLINK_STM8</name>
+      <archiveVersion>3</archiveVersion>
+      <data>
+        <version>2</version>
+        <wantNonLocal>1</wantNonLocal>
+        <debug>0</debug>
+        <option>
+          <name>STlinkMandatory</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkSuppressLoad</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkVerifyLoad</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkLogFileOver</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkLogFile</name>
+          <state>$PROJ_DIR$\cspycomm.log</state>
+        </option>
+        <option>
+          <name>STlinkOptionBytesSetupFileOver</name>
+          <state>0</state>
+        </option>
+        <option>
+          <name>STlinkOptionBytesSetupFile</name>
+          <state></state>
+        </option>
+        <option>
+          <name>STlinkEraseMemory</name>
+          <state>0</state>
+        </option>
+      </data>
+    </settings>
+    <debuggerPlugins>
+      <plugin>
+        <file>$TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin</file>
+        <loadFlag>0</loadFlag>
+      </plugin>
+      <plugin>
+        <file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
+        <loadFlag>0</loadFlag>
+      </plugin>
+      <plugin>
+        <file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
+        <loadFlag>0</loadFlag>
+      </plugin>
+      <plugin>
+        <file>$EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin</file>
+        <loadFlag>0</loadFlag>
+      </plugin>
+      <plugin>
+        <file>$EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin</file>
+        <loadFlag>0</loadFlag>
+      </plugin>
+    </debuggerPlugins>
+  </configuration>
+</project>
+
+

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1594 - 0
STM8.ewp


+ 24 - 0
STM8.ewt

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project>
+  <fileVersion>2</fileVersion>
+  <configuration>
+    <name>Debug</name>
+    <toolchain>
+      <name>STM8</name>
+    </toolchain>
+    <debug>1</debug>
+  </configuration>
+  <configuration>
+    <name>Release</name>
+    <toolchain>
+      <name>STM8</name>
+    </toolchain>
+    <debug>0</debug>
+  </configuration>
+  <file>
+    <name>$PROJ_DIR$\main.c</name>
+  </file>
+</project>
+
+

+ 10 - 0
STM8S003.eww

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<workspace>
+  <project>
+    <path>$WS_DIR$\STM8.ewp</path>
+  </project>
+  <batchBuild/>
+</workspace>
+
+

+ 676 - 0
main.b.c

@@ -0,0 +1,676 @@
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+//#define     IsDebug
+//#define     tim2Led
+
+//#define     RxTestDebug
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+#include <iostm8s003f3.h>
+
+
+
+
+
+#define KEY0            KEY[0]                  //按键
+#define KEY1            KEY[1]                  //紧急按钮取消按键
+
+//==============================================================
+  __root unsigned int     BUS_RevBuf[30];
+  __root unsigned char    BUS_RevIndex=0;
+  __root unsigned char    BUS_Rev_Cmd[3];              //总线接收
+  
+  __root unsigned int     BUS_RevOverTime=0;           //总线接收超时,200
+  __root unsigned char    Bus_RevFlag=0;               //总线接收成功
+//==============================================================
+
+  __root unsigned char    Ledswitch=2;                    //RedLED开关
+  __root unsigned char    KEY[2]={0};                     //按键
+
+//============================================    
+  __root unsigned char    BUS_SendInex=0;
+  __root unsigned char    BUS_SendCmd[30];              //应用层发送数据
+  __root unsigned char    BUS_SendingCmd[30];           //定时器正在处理数据
+//==============================================================
+
+  __root unsigned long    LocalTime=0;
+  __root unsigned char  RunMode=0;               //0:表示注册模式,>0表示正常工作模式
+  __root unsigned char  Bus_SendLength=146;      //总线发送长度,在注册模式时长度为
+
+//==============================================================
+  
+    __root unsigned char    BUS_SendCnt = 0;                    //重发计数
+    
+
+    __root const unsigned char BlankStr[28]="555555555555";
+    __root const unsigned char DeviceSN[16]="SZFS20250120001";
+    __root const unsigned char DeviceAddr[10]={0x31,0x08};
+    __root const unsigned char *Addrp=0; 
+  
+  
+  
+  
+  
+  
+void SysVar_Init(void);
+void BUS_RevData(void);
+void GPIO_KEY_Tick(void);
+void BUS_Rev_Tick(void);
+void BUS_SendData(unsigned char Length);
+void GPIO_MIC_SW(unsigned char status);
+//============================================
+
+#ifdef RxTestDebug
+unsigned long rxtestDebugcnt=0;
+#endif
+
+//==============================================================
+  void SysVar_Init(void)
+  {
+      
+      Addrp=DeviceAddr;
+      RunMode=0;
+  }
+//==============================================================
+  void STM8_Init(void)
+  {
+      CLK_CKDIVR    =0x18;        //16M/8=2M
+  }
+//==============================================================
+void GPIO_EXTI_Init(void)
+{
+    EXTI_CR1_PCIS=1;            //PC口为下降沿中断
+    
+    PC_DDR_DDR7=0;
+    PC_CR1_C17=1;
+    PC_CR2_C27=1; 
+}
+void TIM2_Init(void)
+{
+    TIM2_IER  = 0x00;           //禁止中断
+    TIM2_PSCR = 0x04;          //设置预分频寄存器数
+                               
+    TIM2_ARRH =0xFF;
+    TIM2_ARRL =0xFF;
+    
+    TIM2_CNTRH=0x00;            //初值
+    TIM2_CNTRL=0x00;
+    TIM2_CR1 |= 0x01;           //开启定时器
+}
+void GPIO_KEY_Init(void)
+{
+    //==============================================
+    PA_DDR_DDR1=0;
+    PA_DDR_DDR2=0;    
+    PA_CR1_C11=1;
+    PA_CR1_C12=1;    
+    PA_CR2_C21=0;               
+    PA_CR2_C22=0;    
+    //==============================================
+    
+    //==============================================
+    PD_DDR_DDR4=0;
+ 
+    PD_CR1_C14=1;   //带上拉电阻输入
+    PD_CR2_C24=0;    
+
+    //==============================================
+     
+    
+    KEY0=0;
+    KEY1=0;
+    BUS_SendCnt =0;
+}
+void GPIO_LED_Init(void)
+{
+    PD_DDR_DDR3   =1;           //输出引脚
+    PD_CR1_C13    =1;           //推挽输出模式
+    PD_ODR_ODR3   =0;           //输出低电平,LED灭  
+    
+    Ledswitch=2;
+}
+void TIM4_1ms_Init(void)
+{
+  TIM4_PSCR = 0x03;         //设置预分频寄存器数
+                            //共8种分频比例1(0),2(1),4(2),8(3),16(4),32(5),64(6),128(7)
+  TIM4_ARR = 0xF9;         //设置自动重装载寄存器
+  
+  TIM4_IER = 0x01;         //开启TIM4更新事件中断使能
+  TIM4_CNTR = 0xF9;        //配置TIM4定时器初值,使得开始计数时发生第一次溢出
+  
+  TIM4_CR1_CEN= 0x01;      //使能计数器功能TIM4_CR1寄存器CEN位为“1”
+}
+void TIM1_PWM_Init(void)
+{
+    PC_DDR_DDR4 =1;     
+    //=============================================
+    TIM1_PSCRH  =0;
+    TIM1_PSCRL  =0;                     //定时器1 时钟不分频
+    
+    TIM1_ARRH   =0;
+    TIM1_ARRL   =19;                    //定时器1的PWM输出频率:2000 000/20=100K
+    
+    TIM1_CR1    &=0x8F;                 //向上计数,边沿对齐模式
+    //=============================================
+    TIM1_CCR4H  =0;
+    TIM1_CCR4L  =10;
+    TIM1_CCMR4  =0x60;                  //配置CH4为PWM模式1
+    TIM1_CCER2  &=0x1F;                //配置CH4高电平有效
+    //TIM1_CCER2  |=0x10;                //使能CH4输出
+    TIM1_OISR   &=0xBF;                //空闲输出低电平
+    //通道4:100K_50% PWM输出
+    //=============================================
+    TIM1_CR1    |=0x01;
+    TIM1_BKR    =0x80;
+
+}
+
+
+
+void TIM2_PWM_Init(void)
+{
+   // TIM2_IER  = 0x04; 
+  //  PD_DDR_DDR3 =1;     
+    //=============================================
+
+   
+        
+    TIM2_CCMR2  = TIM2_CCMR2 | 0x70;                  //配置CH2为PWM模式1
+  //  TIM2_CCER1  &=0x1F;                //配置CH2高电平有效
+    TIM2_CCER1 = TIM2_CCER1 | 0x30;                //使能CH2输出
+    
+    TIM2_ARRH   =0;
+    TIM2_ARRL   = 19;                    //定时器1的PWM输出频率:2000 000/100=20K
+    
+   // TIM2_CR1    &=0x8F;                 //向上计数,边沿对齐模式
+    //=============================================
+    TIM2_CCR2H  =0x0;
+    TIM2_CCR2L  =0x00;
+
+        TIM2_PSCR  =0;  //0x03
+   // TIM2_OISR   &=0xBF;                //空闲输出低电平
+    //通道2:1K_50% PWM输出
+    //=============================================
+    TIM2_CR1   = TIM2_CR1 |0x01;
+  //  TIM2_BKR    =0x80;
+
+}
+
+void GPIO_LED_Tick(void)
+{
+  static unsigned long flashTime=0;
+    static unsigned char ledflag=0;
+   static unsigned char ledflagbak=0;
+#ifdef tim2Led
+    
+  if(Ledswitch==1)
+  {
+      //PD_ODR_ODR3=1;
+      TIM2_CCR2H  =0;
+      TIM2_CCR2L  =19;
+      ledflag =0;
+  }
+  else if (Ledswitch==2)
+  {
+     if(LocalTime>flashTime)
+      {
+          flashTime=LocalTime+100;
+          ledflag ++;
+         
+      }
+     if (ledflagbak == ledflag ) {
+        return;
+       
+     }
+      ledflagbak = ledflag ;
+      if(ledflag >39 ) {
+           ledflag =0;
+       }
+         TIM2_CCR2H  =0x0;
+     if (ledflag > 19 ) {
+         TIM2_CCR2L  = (ledflag-19) ;
+     } else  if (ledflag > 15 ) {
+          TIM2_CCR2L  = (19-ledflag) ;
+          ledflag = 20;
+     }
+     else {
+        TIM2_CCR2L  = (19-ledflag) ;
+     }
+     
+  }
+  else
+  {
+      TIM2_CCR2H  =0x0;
+      TIM2_CCR2L  =0x0;
+       ledflag =0;
+     // PD_ODR_ODR3=0;
+  }
+#else
+  
+  if(Ledswitch==1)
+  {
+      PD_ODR_ODR3=1;
+   
+  }
+  else if (Ledswitch==2)
+  {
+    PD_ODR_ODR3=1;
+  }
+  else
+  {
+    PD_ODR_ODR3=0;
+  }
+
+  
+  
+  
+#endif
+}
+
+void GPIO_KEY_Tick(void)
+{
+    static unsigned long keyTime1=0;
+    static unsigned char  keyResTime =0; //dwd190706
+    static unsigned long keyTime2=0;
+    static unsigned char  keyResTime2 =0; //dwd190706
+
+    if(PA_IDR_IDR1==1)          //没有按下
+    {
+      if(KEY0==1)
+      {
+        keyResTime ++;
+      
+         if (   keyResTime < 200) {    
+              return;
+          }
+        if(LocalTime>(keyTime1+2000))
+            KEY0=2;  //dwd20190723
+        else
+            KEY0=2;
+      }
+      else
+      { 
+        KEY0=0;
+      }
+      keyTime1=LocalTime+120;
+    }
+    else if(LocalTime>keyTime1)
+    {
+       KEY0=1; 
+       keyResTime = 0;   
+    } else {
+         keyResTime = 0;   
+      }
+    //=======================================   
+    if(PD_IDR_IDR4==1)          //没有按下
+    {
+      if(KEY1==1)
+      {
+        keyResTime2 ++;
+      
+         if (   keyResTime2 < 200) {    
+              return;
+          }
+        if(LocalTime>(keyTime2+2000))
+            KEY1=2;  
+        else
+            KEY1=2;
+      }
+      else
+      { 
+        KEY1=0;
+      }
+      keyTime2=LocalTime+120;
+    }
+    else if(LocalTime>keyTime2)
+    {
+       KEY1=1; 
+       keyResTime2 = 0;   
+    } else {
+         keyResTime2 = 0;   
+      }
+}
+void BUS_RevData(void)
+{
+  //=======================================
+     if(((BUS_Rev_Cmd[0]!=Addrp[0])||(BUS_Rev_Cmd[1]!=Addrp[1]))&&(BUS_Rev_Cmd[2]!=0x0E))
+     {
+        if((BUS_Rev_Cmd[0]!=0xFF)||(BUS_Rev_Cmd[1]!=0xFF))
+          return;
+     }
+ 
+  //=======================================
+   switch(BUS_Rev_Cmd[2])
+   {
+       case 0:
+          break;
+       case 1:
+          break;
+       case 2:
+          break;
+       case 3:
+          break;
+       case 4:                           //主机呼叫分机,或主机应答分机
+          break;
+       case 5:                          //主机挂断分机
+          break;
+       case 6:                          //广播模式      
+          break;
+       case 7:                          //打开门灯
+          break;
+       case 8:                          //关闭门灯
+          break;
+       case 9:                          //取消紧急呼叫
+          RunMode=1; 
+          Ledswitch=0;
+          BUS_SendCnt =0;
+          break;
+       case 13:                        //注册命令
+          BUS_SendCmd[0]=Addrp[0];
+          BUS_SendCmd[1]=Addrp[1];
+          BUS_SendCmd[2]=0x0D; 
+          BUS_SendData(3); 
+          break;
+        case 14:
+          if(BUS_Rev_Cmd[1]=='Y')       //转换盒已经注册过
+          {
+              Ledswitch=0;
+              RunMode=1; 
+              Bus_SendLength=26;        //总线发送长度,在正常工作模式时,为26   (3byes*8+2)
+  
+          }
+          else
+          {
+              RunMode=0;                 //0:表示注册模式,>0表示正常工作模式
+              Bus_SendLength=146;                 
+          }
+          break;
+   }
+    Bus_RevFlag=0xFF;
+}
+void BUS_Rev_Tick(void)
+{
+      static unsigned char i=0,j=0,k=0;
+      if(BUS_RevIndex==26)
+      {
+        BUS_Rev_Cmd[0]=0;
+        BUS_Rev_Cmd[1]=0;
+        BUS_Rev_Cmd[2]=0;
+        for(k=0;k<24;k++)
+        {
+          i=k / 8;
+          j=k % 8;
+          if ((BUS_RevBuf[k]>250)&&(BUS_RevBuf[k]<450))
+          {
+            BUS_Rev_Cmd[i]|=(1<<j);
+          }
+        }
+        BUS_RevIndex=0;
+        i=(BUS_Rev_Cmd[0]+ BUS_Rev_Cmd[1]+(BUS_Rev_Cmd[2]&0x0F))&0x0F;
+        j=(BUS_Rev_Cmd[2]>>4)&0x0F;
+  
+#ifdef RxTestDebug
+        if(i==j)  
+        {
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+        } else {
+            rxtestDebugcnt ++;
+             if (rxtestDebugcnt > 10) //200ms,100s
+             {
+               Ledswitch=1; 
+            } 
+          
+        }
+#else
+
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+    #endif
+        
+        
+        
+      }
+}
+//===================TIM4计数溢出更新事件中断响应函数======================
+#pragma vector=0x19            
+__interrupt void TIM4_UPD_OVF_IRQHandler(void)
+{
+      __root static unsigned char flag=0;
+      unsigned char i,j;
+      
+      TIM4_SR = 0;              //清除更新事件中断标志位UIF
+      LocalTime++;
+    //  if(BUS_RevOverTime>0)BUS_RevOverTime--;
+      //===================================
+      if(flag>1)
+      {
+           TIM1_CCER2_CC4E=1;                           //GPIOA->BSRR = GPIO_Pin_9;           //总线为低电平
+           flag--;
+           return;    
+      }
+      else if(flag==1)
+      {
+           TIM1_CCER2_CC4E=0;                           //GPIOA->BRR = GPIO_Pin_9;            //总线为高电平
+           flag=0;
+           return;             
+      }
+      //===================================
+      if((BUS_SendInex>0)&&(flag==0))
+      {      
+           if(BUS_SendInex==1)                          //起始位:总线5ms低电平
+           {
+               flag=5;
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex<Bus_SendLength)
+           {
+               i=(BUS_SendInex-2)/8;
+               j=(BUS_SendInex-2)%8;
+               if(((BUS_SendingCmd[i]>>j)&0x01)>0)     //数据位1:2ms低电平 
+               {
+                   flag=2;   
+               }
+               else                                    //数据位0:1ms低电平
+               {
+                   flag=1;
+               }
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex==Bus_SendLength)
+           {
+               flag=0; 
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;         
+           }
+           else
+           {
+               TIM1_CCER2_CC4E=0; 
+               BUS_SendInex=0;
+               flag=0;
+          }
+      }     
+      
+}
+//===================外部IO下降沿中断事件中断响应函数=====================
+#pragma vector=0x07           
+__interrupt void EXTI_PORTC_IRQHandler(void)
+{
+     unsigned int i=0;
+      //===========================================
+      i=TIM2_CNTRH;
+      i=(i<<8)+TIM2_CNTRL;
+      //===========================================
+      if(BUS_RevIndex==0)
+      {
+           //===========================================
+        //   BUS_RevOverTime=200;         //接收200ms超时
+           Bus_RevFlag=0;              //清除接收标志位
+           //===========================================
+           if((i>350)&&(i<800))
+           {
+              BUS_RevIndex=2;
+              
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex==1)
+      {
+           if((i>350)&&(i<800))
+           {
+              BUS_RevIndex=2;
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex<26)
+      {
+            BUS_RevBuf[BUS_RevIndex-2]=i;
+            BUS_RevIndex++;
+      }
+      //===========================================
+      TIM2_CNTRH=0x00;            //初值
+      TIM2_CNTRL=0x00;
+}
+
+
+void BUS_SendData(unsigned char Length)
+{
+    unsigned char i=0,checksum=0;
+    //======================================================
+    checksum=0;
+    BUS_SendCmd[Length-1]&=0x0F;
+    for(i=0;i<Length;i++)
+    {
+        checksum+=BUS_SendCmd[i];
+    }
+    BUS_SendCmd[Length-1]|=((checksum&0x0F)<<4);
+    //计算校验值
+    //======================================================
+    while(BUS_SendInex>0);
+    
+    for(i=0;i<Length;i++)
+    {
+        BUS_SendingCmd[i]=BUS_SendCmd[i];
+    }
+    BUS_SendInex=1;
+}
+
+
+int main( void )
+{
+   static unsigned long KeySentTime=0;
+   unsigned char i;
+   unsigned long  TurnOnDelay=3600000;                    //上电延时60分钟,自动进入工作模式
+   unsigned char TurnOnMode=0;
+  //========================================================
+  STM8_Init();
+  GPIO_EXTI_Init();
+  #ifndef   tim2Led
+  TIM2_Init();
+#endif
+  GPIO_LED_Init();
+  TIM4_1ms_Init();
+  GPIO_KEY_Init();
+  TIM1_PWM_Init();
+#ifdef   tim2Led
+   TIM2_PWM_Init();
+#endif
+
+  SysVar_Init();
+  
+  //========================================================
+  asm("rim");                   //改变主程序软件优先级“开启中断”
+  while(1)
+  {
+    if ((TurnOnDelay<LocalTime)&&(TurnOnMode==0))
+    {
+        RunMode=1; 
+        Bus_SendLength=26;        //总线发送长度,在正常工作模式时,为26   (3byes*8+2) 
+        TurnOnMode=0xFF;
+          Ledswitch=0;
+    }
+    //====================================================         
+      BUS_Rev_Tick();
+      GPIO_LED_Tick();
+      GPIO_KEY_Tick();
+    //===================================================
+    if(RunMode==0)
+    {
+         if(KEY0==2)
+         {
+              BUS_SendCmd[0]=Addrp[0];
+              BUS_SendCmd[1]=Addrp[1]; 
+              for(i=0;i<15;i++)
+              {
+                BUS_SendCmd[2+i]=DeviceSN[i];
+              }
+              BUS_SendCmd[17]=0x0E;
+              BUS_SendData(18);
+              
+             //在注册模式下,用户按键,则发送注册码!
+             if(Ledswitch==0)
+             {
+                Ledswitch=2;
+             }
+             else
+             {
+                Ledswitch=0;
+             }
+         }
+    }
+    else
+    {
+        if(KEY0==2)              //紧急呼叫
+        {
+             BUS_SendCmd[0]=Addrp[0];
+             BUS_SendCmd[1]=Addrp[1];
+             BUS_SendCmd[2]=0x0C; 
+             BUS_SendData(3);
+             Ledswitch=2;
+             BUS_SendCnt = 9;
+             KeySentTime = LocalTime +1000;
+        } else if(KEY0==3)              //长按关闭指示灯
+        {
+               Ledswitch=0; //dwd190802
+        }else {
+          if ((BUS_SendCnt ) && (LocalTime> KeySentTime)) {  //dwd190723
+                KeySentTime = LocalTime +1000;
+                BUS_SendCnt --;
+                BUS_SendCmd[0]=Addrp[0];
+                BUS_SendCmd[1]=Addrp[1];
+                BUS_SendCmd[2]=0x0C; 
+                BUS_SendData(3); 
+          }
+          else {
+             if(KEY1==2)             //紧急呼叫取消
+                {
+                     BUS_SendCmd[0]=Addrp[0];
+                     BUS_SendCmd[1]=Addrp[1];
+                     BUS_SendCmd[2]=0x07; 
+                     BUS_SendData(3);
+                     BUS_SendCnt = 9;
+                } 
+            
+          }
+          
+        }
+        
+       
+        
+    }
+  }
+}

+ 675 - 0
main.c

@@ -0,0 +1,675 @@
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+//#define     IsDebug
+//#define     tim2Led
+
+//#define     RxTestDebug
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+#include <iostm8s003f3.h>
+
+
+
+
+
+#define KEY0            KEY[0]                  //按键
+#define KEY1            KEY[1]                  //紧急按钮取消按键
+
+//==============================================================
+  __root unsigned int     BUS_RevBuf[30];
+  __root unsigned char    BUS_RevIndex=0;
+  __root unsigned char    BUS_Rev_Cmd[3];              //总线接收
+  
+  __root unsigned int     BUS_RevOverTime=0;           //总线接收超时,200
+  __root unsigned char    Bus_RevFlag=0;               //总线接收成功
+//==============================================================
+
+  __root unsigned char    Ledswitch=2;                    //RedLED开关
+  __root unsigned char    KEY[2]={0};                     //按键
+  __root unsigned char    CurrentCmd = 0;                 //当前命令类型
+
+//============================================    
+  __root unsigned char    BUS_SendInex=0;
+  __root unsigned char    BUS_SendCmd[30];              //应用层发送数据
+  __root unsigned char    BUS_SendingCmd[30];           //定时器正在处理数据
+//==============================================================
+
+  __root unsigned long    LocalTime=0;
+  __root unsigned char  RunMode=0;               //0:表示注册模式,>0表示正常工作模式
+  __root unsigned char  Bus_SendLength=146;      //总线发送长度,在注册模式时长度为
+
+//==============================================================
+  
+    __root unsigned char    BUS_SendCnt = 0;                    //重发计数
+    
+
+    __root const unsigned char BlankStr[28]="555555555555";
+    __root const unsigned char DeviceSN[16]="SZFS20250120001";
+    __root const unsigned char DeviceAddr[10]={0x31,0x08};
+    __root const unsigned char *Addrp=0; 
+  
+  
+  
+  
+  
+  
+void SysVar_Init(void);
+void BUS_RevData(void);
+void GPIO_KEY_Tick(void);
+void BUS_Rev_Tick(void);
+void BUS_SendData(unsigned char Length);
+void GPIO_MIC_SW(unsigned char status);
+//============================================
+
+#ifdef RxTestDebug
+unsigned long rxtestDebugcnt=0;
+#endif
+
+//==============================================================
+  void SysVar_Init(void)
+  {
+      
+      Addrp=DeviceAddr;
+      RunMode=0;
+  }
+//==============================================================
+  void STM8_Init(void)
+  {
+      CLK_CKDIVR    =0x18;        //16M/8=2M
+  }
+//==============================================================
+void GPIO_EXTI_Init(void)
+{
+    EXTI_CR1_PCIS=1;            //PC口为下降沿中断
+    
+    PC_DDR_DDR7=0;
+    PC_CR1_C17=1;
+    PC_CR2_C27=1; 
+}
+void TIM2_Init(void)
+{
+    TIM2_IER  = 0x00;           //禁止中断
+    TIM2_PSCR = 0x04;          //设置预分频寄存器数
+                               
+    TIM2_ARRH =0xFF;
+    TIM2_ARRL =0xFF;
+    
+    TIM2_CNTRH=0x00;            //初值
+    TIM2_CNTRL=0x00;
+    TIM2_CR1 |= 0x01;           //开启定时器
+}
+void GPIO_KEY_Init(void)
+{
+    //==============================================
+    PA_DDR_DDR1=0;
+    PA_DDR_DDR2=0;    
+    PA_CR1_C11=1;
+    PA_CR1_C12=1;    
+    PA_CR2_C21=0;               
+    PA_CR2_C22=0;    
+    //==============================================
+    
+    //==============================================
+    PD_DDR_DDR4=0;        // 设置为输入模式
+    PD_CR1_C14=1;         // 带上拉电阻输入
+    PD_CR2_C24=0;         // 禁用外部中断,只用查询方式
+
+    //==============================================
+     
+    
+    KEY0=0;
+    KEY1=0;
+    BUS_SendCnt =0;
+}
+void GPIO_LED_Init(void)
+{
+    PD_DDR_DDR3   =1;           //输出引脚
+    PD_CR1_C13    =1;           //推挽输出模式
+    PD_ODR_ODR3   =0;           //输出低电平,LED灭  
+    
+    Ledswitch=2;
+}
+void TIM4_1ms_Init(void)
+{
+  TIM4_PSCR = 0x03;         //设置预分频寄存器数
+                            //共8种分频比例1(0),2(1),4(2),8(3),16(4),32(5),64(6),128(7)
+  TIM4_ARR = 0xF9;         //设置自动重装载寄存器
+  
+  TIM4_IER = 0x01;         //开启TIM4更新事件中断使能
+  TIM4_CNTR = 0xF9;        //配置TIM4定时器初值,使得开始计数时发生第一次溢出
+  
+  TIM4_CR1_CEN= 0x01;      //使能计数器功能TIM4_CR1寄存器CEN位为"1"
+}
+void TIM1_PWM_Init(void)
+{
+    PC_DDR_DDR4 =1;     
+    //=============================================
+    TIM1_PSCRH  =0;
+    TIM1_PSCRL  =0;                     //定时器1 时钟不分频
+    
+    TIM1_ARRH   =0;
+    TIM1_ARRL   =19;                    //定时器1的PWM输出频率:2000 000/20=100K
+    
+    TIM1_CR1    &=0x8F;                 //向上计数,边沿对齐模式
+    //=============================================
+    TIM1_CCR4H  =0;
+    TIM1_CCR4L  =10;
+    TIM1_CCMR4  =0x60;                  //配置CH4为PWM模式1
+    TIM1_CCER2  &=0x1F;                //配置CH4高电平有效
+    //TIM1_CCER2  |=0x10;                //使能CH4输出
+    TIM1_OISR   &=0xBF;                //空闲输出低电平
+    //通道4:100K_50% PWM输出
+    //=============================================
+    TIM1_CR1    |=0x01;
+    TIM1_BKR    =0x80;
+
+}
+
+
+
+void TIM2_PWM_Init(void)
+{
+   // TIM2_IER  = 0x04; 
+  //  PD_DDR_DDR3 =1;     
+    //=============================================
+
+   
+        
+    TIM2_CCMR2  = TIM2_CCMR2 | 0x70;                  //配置CH2为PWM模式1
+  //  TIM2_CCER1  &=0x1F;                //配置CH2高电平有效
+    TIM2_CCER1 = TIM2_CCER1 | 0x30;                //使能CH2输出
+    
+    TIM2_ARRH   =0;
+    TIM2_ARRL   = 19;                    //定时器1的PWM输出频率:2000 000/100=20K
+    
+   // TIM2_CR1    &=0x8F;                 //向上计数,边沿对齐模式
+    //=============================================
+    TIM2_CCR2H  =0x0;
+    TIM2_CCR2L  =0x00;
+
+        TIM2_PSCR  =0;  //0x03
+   // TIM2_OISR   &=0xBF;                //空闲输出低电平
+    //通道2:1K_50% PWM输出
+    //=============================================
+    TIM2_CR1   = TIM2_CR1 |0x01;
+  //  TIM2_BKR    =0x80;
+
+}
+
+void GPIO_LED_Tick(void)
+{
+  static unsigned long flashTime=0;
+    static unsigned char ledflag=0;
+   static unsigned char ledflagbak=0;
+#ifdef tim2Led
+    
+  if(Ledswitch==1)
+  {
+      //PD_ODR_ODR3=1;
+      TIM2_CCR2H  =0;
+      TIM2_CCR2L  =19;
+      ledflag =0;
+  }
+  else if (Ledswitch==2)
+  {
+     if(LocalTime>flashTime)
+      {
+          flashTime=LocalTime+100;
+          ledflag ++;
+         
+      }
+     if (ledflagbak == ledflag ) {
+        return;
+       
+     }
+      ledflagbak = ledflag ;
+      if(ledflag >39 ) {
+           ledflag =0;
+       }
+         TIM2_CCR2H  =0x0;
+     if (ledflag > 19 ) {
+         TIM2_CCR2L  = (ledflag-19) ;
+     } else  if (ledflag > 15 ) {
+          TIM2_CCR2L  = (19-ledflag) ;
+          ledflag = 20;
+     }
+     else {
+        TIM2_CCR2L  = (19-ledflag) ;
+     }
+     
+  }
+  else
+  {
+      TIM2_CCR2H  =0x0;
+      TIM2_CCR2L  =0x0;
+       ledflag =0;
+     // PD_ODR_ODR3=0;
+  }
+#else
+  
+  if(Ledswitch==1)
+  {
+      PD_ODR_ODR3=1;
+   
+  }
+  else if (Ledswitch==2)
+  {
+    PD_ODR_ODR3=1;
+  }
+  else
+  {
+    PD_ODR_ODR3=0;
+  }
+
+  
+  
+  
+#endif
+}
+
+void GPIO_KEY_Tick(void)
+{
+    static unsigned long keyTime1=0;
+    static unsigned char keyResTime =0;
+    static unsigned long keyTime2=0;
+    static unsigned char keyResTime2 =0;
+    
+    // KEY0 处理
+    if(PA_IDR_IDR1==1)          //没有按下
+    {
+        if(KEY0==1)
+        {
+            keyResTime ++;
+            if (keyResTime >= 200) {
+                KEY0=2;
+            }
+        }
+        else
+        { 
+            KEY0=0;
+        }
+        keyTime1=LocalTime+120;
+    }
+    else if(LocalTime>keyTime1)
+    {
+        KEY0=1; 
+        keyResTime = 0;   
+    }
+    else {
+        keyResTime = 0;
+    }
+    
+    // KEY1 处理
+    if(PD_IDR_IDR4==1)          //没有按下
+    {
+        if(KEY1==1)
+        {
+            keyResTime2 ++;
+            if (keyResTime2 >= 200) {
+                KEY1=2;
+            }
+        }
+        else
+        { 
+            KEY1=0;
+        }
+        keyTime2=LocalTime+120;
+    }
+    else if(LocalTime>keyTime2)
+    {
+        KEY1=1; 
+        keyResTime2 = 0;   
+    }
+    else {
+        keyResTime2 = 0;
+    }
+}
+void BUS_RevData(void)
+{
+  //=======================================
+     if(((BUS_Rev_Cmd[0]!=Addrp[0])||(BUS_Rev_Cmd[1]!=Addrp[1]))&&(BUS_Rev_Cmd[2]!=0x0E))
+     {
+        if((BUS_Rev_Cmd[0]!=0xFF)||(BUS_Rev_Cmd[1]!=0xFF))
+          return;
+     }
+ 
+  //=======================================
+   switch(BUS_Rev_Cmd[2])
+   {
+       case 0:
+          break;
+       case 1:
+          break;
+       case 2:
+          break;
+       case 3:
+          break;
+       case 4:                           //主机呼叫分机,或主机应答分机
+          break;
+       case 5:                          //主机挂断分机
+          break;
+       case 6:                          //广播模式      
+          break;
+       case 7:                          //打开门灯
+          break;
+       case 8:                          //关闭门灯
+          break;
+       case 9:                          //取消紧急呼叫
+          RunMode=1; 
+          Ledswitch=0;
+          BUS_SendCnt =0;
+          break;
+       case 13:                        //注册命令
+          BUS_SendCmd[0]=Addrp[0];
+          BUS_SendCmd[1]=Addrp[1];
+          BUS_SendCmd[2]=0x0D; 
+          BUS_SendData(3); 
+          break;
+        case 14:
+          if(BUS_Rev_Cmd[1]=='Y')       //转换盒已经注册过
+          {
+              Ledswitch=0;
+              RunMode=1; 
+              Bus_SendLength=26;        //总线发送长度,在正常工作模式时,为26   (3byes*8+2)
+  
+          }
+          else
+          {
+              RunMode=0;                 //0:表示注册模式,>0表示正常工作模式
+              Bus_SendLength=146;                 
+          }
+          break;
+   }
+    Bus_RevFlag=0xFF;
+}
+void BUS_Rev_Tick(void)
+{
+      static unsigned char i=0,j=0,k=0;
+      if(BUS_RevIndex==26)
+      {
+        BUS_Rev_Cmd[0]=0;
+        BUS_Rev_Cmd[1]=0;
+        BUS_Rev_Cmd[2]=0;
+        for(k=0;k<24;k++)
+        {
+          i=k / 8;
+          j=k % 8;
+          if ((BUS_RevBuf[k]>280)&&(BUS_RevBuf[k]<400))
+          {
+            BUS_Rev_Cmd[i]|=(1<<j);
+          }
+        }
+        BUS_RevIndex=0;
+        i=(BUS_Rev_Cmd[0]+ BUS_Rev_Cmd[1]+(BUS_Rev_Cmd[2]&0x0F))&0x0F;
+        j=(BUS_Rev_Cmd[2]>>4)&0x0F;
+  
+#ifdef RxTestDebug
+        if(i==j)  
+        {
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+        } else {
+            rxtestDebugcnt ++;
+             if (rxtestDebugcnt > 10) //200ms,100s
+             {
+               Ledswitch=1; 
+            } 
+          
+        }
+#else
+
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+    #endif
+        
+        
+        
+      }
+}
+//===================TIM4计数溢出更新事件中断响应函数======================
+#pragma vector=0x19            
+__interrupt void TIM4_UPD_OVF_IRQHandler(void)
+{
+      __root static unsigned char flag=0;
+      unsigned char i,j;
+      
+      TIM4_SR = 0;              //清除更新事件中断标志位UIF
+      LocalTime++;
+    //  if(BUS_RevOverTime>0)BUS_RevOverTime--;
+      //===================================
+      if(flag>1)
+      {
+           TIM1_CCER2_CC4E=1;                           //GPIOA->BSRR = GPIO_Pin_9;           //总线为低电平
+           flag--;
+           return;    
+      }
+      else if(flag==1)
+      {
+           TIM1_CCER2_CC4E=0;                           //GPIOA->BRR = GPIO_Pin_9;            //总线为高电平
+           flag=0;
+           return;             
+      }
+      //===================================
+      if((BUS_SendInex>0)&&(flag==0))
+      {      
+           if(BUS_SendInex==1)                          //起始位:总线5ms低电平
+           {
+               flag=5;
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex<Bus_SendLength)
+           {
+               i=(BUS_SendInex-2)/8;
+               j=(BUS_SendInex-2)%8;
+               if(((BUS_SendingCmd[i]>>j)&0x01)>0)     //数据位1:2ms低电平 
+               {
+                   flag=2;   
+               }
+               else                                    //数据位0:1ms低电平
+               {
+                   flag=1;
+               }
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex==Bus_SendLength)
+           {
+               flag=0; 
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;         
+           }
+           else
+           {
+               TIM1_CCER2_CC4E=0; 
+               BUS_SendInex=0;
+               flag=0;
+          }
+      }     
+      
+}
+//===================外部IO下降沿中断事件中断响应函数=====================
+#pragma vector=0x07           
+__interrupt void EXTI_PORTC_IRQHandler(void)
+{
+     unsigned int i=0;
+      //===========================================
+      i=TIM2_CNTRH;
+      i=(i<<8)+TIM2_CNTRL;
+      //===========================================
+      if(BUS_RevIndex==0)
+      {
+           //===========================================
+        //   BUS_RevOverTime=200;         //接收200ms超时
+           Bus_RevFlag=0;              //清除接收标志位
+           //===========================================
+           if((i>400)&&(i<750))
+           {
+              BUS_RevIndex=2;
+              
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex==1)
+      {
+           if((i>400)&&(i<750))
+           {
+              BUS_RevIndex=2;
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex<26)
+      {
+            BUS_RevBuf[BUS_RevIndex-2]=i;
+            BUS_RevIndex++;
+      }
+      //===========================================
+      TIM2_CNTRH=0x00;            //初值
+      TIM2_CNTRL=0x00;
+}
+
+
+void BUS_SendData(unsigned char Length)
+{
+    // 添加发送前的状态检查
+    if(BUS_SendInex > 0) {
+        return;  // 如果上一次发送未完成,直接返回
+    }
+    
+    unsigned char i=0,checksum=0;
+    //======================================================
+    checksum=0;
+    BUS_SendCmd[Length-1]&=0x0F;
+    for(i=0;i<Length;i++)
+    {
+        checksum+=BUS_SendCmd[i];
+    }
+    BUS_SendCmd[Length-1]|=((checksum&0x0F)<<4);
+    //计算校验值
+    //======================================================
+    
+    for(i=0;i<Length;i++)
+    {
+        BUS_SendingCmd[i]=BUS_SendCmd[i];
+    }
+    BUS_SendInex=1;
+}
+
+
+int main( void )
+{
+   static unsigned long KeySentTime=0;
+   unsigned char i;
+   unsigned long  TurnOnDelay=3600000;                    //上电延时60分钟,自动进入工作模式
+   unsigned char TurnOnMode=0;
+  //========================================================
+  STM8_Init();
+  GPIO_EXTI_Init();
+  #ifndef   tim2Led
+  TIM2_Init();
+#endif
+  GPIO_LED_Init();
+  TIM4_1ms_Init();
+  GPIO_KEY_Init();
+  TIM1_PWM_Init();
+#ifdef   tim2Led
+   TIM2_PWM_Init();
+#endif
+
+  SysVar_Init();
+  
+  //========================================================
+  asm("rim");                   //改变主程序软件优先级"开启中断"
+  while(1)
+  {
+    if ((TurnOnDelay<LocalTime)&&(TurnOnMode==0))
+    {
+        RunMode=1; 
+        Bus_SendLength=26;        //总线发送长度,在正常工作模式时,为26   (3byes*8+2) 
+        TurnOnMode=0xFF;
+          Ledswitch=0;
+    }
+    //====================================================         
+      BUS_Rev_Tick();
+      GPIO_LED_Tick();
+      GPIO_KEY_Tick();
+    //===================================================
+    if(RunMode==0)
+    {
+         if(KEY0==2)
+         {
+              BUS_SendCmd[0]=Addrp[0];
+              BUS_SendCmd[1]=Addrp[1]; 
+              for(i=0;i<15;i++)
+              {
+                BUS_SendCmd[2+i]=DeviceSN[i];
+              }
+              BUS_SendCmd[17]=0x0E;
+              BUS_SendData(18);
+              
+             //在注册模式下,用户按键,则发送注册码!
+             if(Ledswitch==0)
+             {
+                Ledswitch=2;
+             }
+             else
+             {
+                Ledswitch=0;
+             }
+         }
+    }
+    else
+    {
+        // 重发逻辑放在最前面处理
+        if ((BUS_SendCnt) && (LocalTime> KeySentTime)) {  //重发逻辑
+             KeySentTime = LocalTime +1000;
+             BUS_SendCnt--;
+             BUS_SendCmd[0]=Addrp[0];
+             BUS_SendCmd[1]=Addrp[1];
+             BUS_SendCmd[2]=CurrentCmd;  // 使用记录的命令类型
+             BUS_SendData(3); 
+        }
+        // 按键处理
+        else if(KEY0==2)              //紧急呼叫
+        {
+             BUS_SendCmd[0]=Addrp[0];
+             BUS_SendCmd[1]=Addrp[1];
+             BUS_SendCmd[2]=0x0C; 
+             BUS_SendData(3);
+             Ledswitch=2;
+             BUS_SendCnt = 9;
+             KeySentTime = LocalTime +1000;
+             CurrentCmd = 0x0C;  // 记录当前命令类型
+        } 
+        else if(KEY0==3)              //长按关闭指示灯
+        {
+               Ledswitch=0; //dwd190802
+        }
+        else if(KEY1==2)             //紧急呼叫取消
+        {
+             if(CurrentCmd == 0x0C) {  // 只有在紧急呼叫状态下才能取消
+                 BUS_SendCmd[0]=Addrp[0];
+                 BUS_SendCmd[1]=Addrp[1];
+                 BUS_SendCmd[2]=0x07; 
+                 BUS_SendData(3);
+                 Ledswitch=0;
+                 BUS_SendCnt = 9;
+                 KeySentTime = LocalTime +1000;
+                 CurrentCmd = 0x07;  // 记录当前命令类型
+             }
+        }
+    }
+  }
+}

+ 676 - 0
main.c.bak

@@ -0,0 +1,676 @@
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+//#define     IsDebug
+//#define     tim2Led
+
+//#define     RxTestDebug
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+#include <iostm8s003f3.h>
+
+
+
+
+
+#define KEY0            KEY[0]                  //按键
+#define KEY1            KEY[1]                  //紧急按钮取消按键
+
+//==============================================================
+  __root unsigned int     BUS_RevBuf[30];
+  __root unsigned char    BUS_RevIndex=0;
+  __root unsigned char    BUS_Rev_Cmd[3];              //总线接收
+  
+  __root unsigned int     BUS_RevOverTime=0;           //总线接收超时,200
+  __root unsigned char    Bus_RevFlag=0;               //总线接收成功
+//==============================================================
+
+  __root unsigned char    Ledswitch=2;                    //RedLED开关
+  __root unsigned char    KEY[2]={0};                     //按键
+
+//============================================    
+  __root unsigned char    BUS_SendInex=0;
+  __root unsigned char    BUS_SendCmd[30];              //应用层发送数据
+  __root unsigned char    BUS_SendingCmd[30];           //定时器正在处理数据
+//==============================================================
+
+  __root unsigned long    LocalTime=0;
+  __root unsigned char  RunMode=0;               //0:表示注册模式,>0表示正常工作模式
+  __root unsigned char  Bus_SendLength=146;      //总线发送长度,在注册模式时长度为
+
+//==============================================================
+  
+    __root unsigned char    BUS_SendCnt = 0;                    //重发计数
+    
+
+    __root const unsigned char BlankStr[28]="555555555555";
+    __root const unsigned char DeviceSN[16]="SZFS20250120001";
+    __root const unsigned char DeviceAddr[10]={0x31,0x08};
+    __root const unsigned char *Addrp=0; 
+  
+  
+  
+  
+  
+  
+void SysVar_Init(void);
+void BUS_RevData(void);
+void GPIO_KEY_Tick(void);
+void BUS_Rev_Tick(void);
+void BUS_SendData(unsigned char Length);
+void GPIO_MIC_SW(unsigned char status);
+//============================================
+
+#ifdef RxTestDebug
+unsigned long rxtestDebugcnt=0;
+#endif
+
+//==============================================================
+  void SysVar_Init(void)
+  {
+      
+      Addrp=DeviceAddr;
+      RunMode=0;
+  }
+//==============================================================
+  void STM8_Init(void)
+  {
+      CLK_CKDIVR    =0x18;        //16M/8=2M
+  }
+//==============================================================
+void GPIO_EXTI_Init(void)
+{
+    EXTI_CR1_PCIS=1;            //PC口为下降沿中断
+    
+    PC_DDR_DDR7=0;
+    PC_CR1_C17=1;
+    PC_CR2_C27=1; 
+}
+void TIM2_Init(void)
+{
+    TIM2_IER  = 0x00;           //禁止中断
+    TIM2_PSCR = 0x04;          //设置预分频寄存器数
+                               
+    TIM2_ARRH =0xFF;
+    TIM2_ARRL =0xFF;
+    
+    TIM2_CNTRH=0x00;            //初值
+    TIM2_CNTRL=0x00;
+    TIM2_CR1 |= 0x01;           //开启定时器
+}
+void GPIO_KEY_Init(void)
+{
+    //==============================================
+    PA_DDR_DDR1=0;
+    PA_DDR_DDR2=0;    
+    PA_CR1_C11=1;
+    PA_CR1_C12=1;    
+    PA_CR2_C21=0;               
+    PA_CR2_C22=0;    
+    //==============================================
+    
+    //==============================================
+    PD_DDR_DDR4=0;
+ 
+    PD_CR1_C14=1;   //带上拉电阻输入
+    PD_CR2_C24=1;    
+
+    //==============================================
+     
+    
+    KEY0=0;
+    KEY1=0;
+    BUS_SendCnt =0;
+}
+void GPIO_LED_Init(void)
+{
+    PD_DDR_DDR3   =1;           //输出引脚
+    PD_CR1_C13    =1;           //推挽输出模式
+    PD_ODR_ODR3   =0;           //输出低电平,LED灭  
+    
+    Ledswitch=2;
+}
+void TIM4_1ms_Init(void)
+{
+  TIM4_PSCR = 0x03;         //设置预分频寄存器数
+                            //共8种分频比例1(0),2(1),4(2),8(3),16(4),32(5),64(6),128(7)
+  TIM4_ARR = 0xF9;         //设置自动重装载寄存器
+  
+  TIM4_IER = 0x01;         //开启TIM4更新事件中断使能
+  TIM4_CNTR = 0xF9;        //配置TIM4定时器初值,使得开始计数时发生第一次溢出
+  
+  TIM4_CR1_CEN= 0x01;      //使能计数器功能TIM4_CR1寄存器CEN位为“1”
+}
+void TIM1_PWM_Init(void)
+{
+    PC_DDR_DDR4 =1;     
+    //=============================================
+    TIM1_PSCRH  =0;
+    TIM1_PSCRL  =0;                     //定时器1 时钟不分频
+    
+    TIM1_ARRH   =0;
+    TIM1_ARRL   =19;                    //定时器1的PWM输出频率:2000 000/20=100K
+    
+    TIM1_CR1    &=0x8F;                 //向上计数,边沿对齐模式
+    //=============================================
+    TIM1_CCR4H  =0;
+    TIM1_CCR4L  =10;
+    TIM1_CCMR4  =0x60;                  //配置CH4为PWM模式1
+    TIM1_CCER2  &=0x1F;                //配置CH4高电平有效
+    //TIM1_CCER2  |=0x10;                //使能CH4输出
+    TIM1_OISR   &=0xBF;                //空闲输出低电平
+    //通道4:100K_50% PWM输出
+    //=============================================
+    TIM1_CR1    |=0x01;
+    TIM1_BKR    =0x80;
+
+}
+
+
+
+void TIM2_PWM_Init(void)
+{
+   // TIM2_IER  = 0x04; 
+  //  PD_DDR_DDR3 =1;     
+    //=============================================
+
+   
+        
+    TIM2_CCMR2  = TIM2_CCMR2 | 0x70;                  //配置CH2为PWM模式1
+  //  TIM2_CCER1  &=0x1F;                //配置CH2高电平有效
+    TIM2_CCER1 = TIM2_CCER1 | 0x30;                //使能CH2输出
+    
+    TIM2_ARRH   =0;
+    TIM2_ARRL   = 19;                    //定时器1的PWM输出频率:2000 000/100=20K
+    
+   // TIM2_CR1    &=0x8F;                 //向上计数,边沿对齐模式
+    //=============================================
+    TIM2_CCR2H  =0x0;
+    TIM2_CCR2L  =0x00;
+
+        TIM2_PSCR  =0;  //0x03
+   // TIM2_OISR   &=0xBF;                //空闲输出低电平
+    //通道2:1K_50% PWM输出
+    //=============================================
+    TIM2_CR1   = TIM2_CR1 |0x01;
+  //  TIM2_BKR    =0x80;
+
+}
+
+void GPIO_LED_Tick(void)
+{
+  static unsigned long flashTime=0;
+    static unsigned char ledflag=0;
+   static unsigned char ledflagbak=0;
+#ifdef tim2Led
+    
+  if(Ledswitch==1)
+  {
+      //PD_ODR_ODR3=1;
+      TIM2_CCR2H  =0;
+      TIM2_CCR2L  =19;
+      ledflag =0;
+  }
+  else if (Ledswitch==2)
+  {
+     if(LocalTime>flashTime)
+      {
+          flashTime=LocalTime+100;
+          ledflag ++;
+         
+      }
+     if (ledflagbak == ledflag ) {
+        return;
+       
+     }
+      ledflagbak = ledflag ;
+      if(ledflag >39 ) {
+           ledflag =0;
+       }
+         TIM2_CCR2H  =0x0;
+     if (ledflag > 19 ) {
+         TIM2_CCR2L  = (ledflag-19) ;
+     } else  if (ledflag > 15 ) {
+          TIM2_CCR2L  = (19-ledflag) ;
+          ledflag = 20;
+     }
+     else {
+        TIM2_CCR2L  = (19-ledflag) ;
+     }
+     
+  }
+  else
+  {
+      TIM2_CCR2H  =0x0;
+      TIM2_CCR2L  =0x0;
+       ledflag =0;
+     // PD_ODR_ODR3=0;
+  }
+#else
+  
+  if(Ledswitch==1)
+  {
+      PD_ODR_ODR3=1;
+   
+  }
+  else if (Ledswitch==2)
+  {
+    PD_ODR_ODR3=1;
+  }
+  else
+  {
+    PD_ODR_ODR3=0;
+  }
+
+  
+  
+  
+#endif
+}
+
+void GPIO_KEY_Tick(void)
+{
+    static unsigned long keyTime1=0;
+    static unsigned char  keyResTime =0; //dwd190706
+    static unsigned long keyTime2=0;
+    static unsigned char  keyResTime2 =0; //dwd190706
+
+    if(PA_IDR_IDR1==1)          //没有按下
+    {
+      if(KEY0==1)
+      {
+        keyResTime ++;
+      
+         if (   keyResTime < 200) {    
+              return;
+          }
+        if(LocalTime>(keyTime1+2000))
+            KEY0=2;  //dwd20190723
+        else
+            KEY0=2;
+      }
+      else
+      { 
+        KEY0=0;
+      }
+      keyTime1=LocalTime+120;
+    }
+    else if(LocalTime>keyTime1)
+    {
+       KEY0=1; 
+       keyResTime = 0;   
+    } else {
+         keyResTime = 0;   
+      }
+    //=======================================   
+    if(PD_IDR_IDR4==1)          //没有按下
+    {
+      if(KEY1==1)
+      {
+        keyResTime2 ++;
+      
+         if (   keyResTime2 < 200) {    
+              return;
+          }
+        if(LocalTime>(keyTime2+2000))
+            KEY1=2;  
+        else
+            KEY1=2;
+      }
+      else
+      { 
+        KEY1=0;
+      }
+      keyTime2=LocalTime+120;
+    }
+    else if(LocalTime>keyTime2)
+    {
+       KEY1=1; 
+       keyResTime2 = 0;   
+    } else {
+         keyResTime2 = 0;   
+      }
+}
+void BUS_RevData(void)
+{
+  //=======================================
+     if(((BUS_Rev_Cmd[0]!=Addrp[0])||(BUS_Rev_Cmd[1]!=Addrp[1]))&&(BUS_Rev_Cmd[2]!=0x0E))
+     {
+        if((BUS_Rev_Cmd[0]!=0xFF)||(BUS_Rev_Cmd[1]!=0xFF))
+          return;
+     }
+ 
+  //=======================================
+   switch(BUS_Rev_Cmd[2])
+   {
+       case 0:
+          break;
+       case 1:
+          break;
+       case 2:
+          break;
+       case 3:
+          break;
+       case 4:                           //主机呼叫分机,或主机应答分机
+          break;
+       case 5:                          //主机挂断分机
+          break;
+       case 6:                          //广播模式      
+          break;
+       case 7:                          //打开门灯
+          break;
+       case 8:                          //关闭门灯
+          break;
+       case 9:                          //取消紧急呼叫
+          RunMode=1; 
+          Ledswitch=0;
+          BUS_SendCnt =0;
+          break;
+       case 13:                        //注册命令
+          BUS_SendCmd[0]=Addrp[0];
+          BUS_SendCmd[1]=Addrp[1];
+          BUS_SendCmd[2]=0x0D; 
+          BUS_SendData(3); 
+          break;
+        case 14:
+          if(BUS_Rev_Cmd[1]=='Y')       //转换盒已经注册过
+          {
+              Ledswitch=0;
+              RunMode=1; 
+              Bus_SendLength=26;        //总线发送长度,在正常工作模式时,为26   (3byes*8+2)
+  
+          }
+          else
+          {
+              RunMode=0;                 //0:表示注册模式,>0表示正常工作模式
+              Bus_SendLength=146;                 
+          }
+          break;
+   }
+    Bus_RevFlag=0xFF;
+}
+void BUS_Rev_Tick(void)
+{
+      static unsigned char i=0,j=0,k=0;
+      if(BUS_RevIndex==26)
+      {
+        BUS_Rev_Cmd[0]=0;
+        BUS_Rev_Cmd[1]=0;
+        BUS_Rev_Cmd[2]=0;
+        for(k=0;k<24;k++)
+        {
+          i=k / 8;
+          j=k % 8;
+          if ((BUS_RevBuf[k]>280)&&(BUS_RevBuf[k]<400))
+          {
+            BUS_Rev_Cmd[i]|=(1<<j);
+          }
+        }
+        BUS_RevIndex=0;
+        i=(BUS_Rev_Cmd[0]+ BUS_Rev_Cmd[1]+(BUS_Rev_Cmd[2]&0x0F))&0x0F;
+        j=(BUS_Rev_Cmd[2]>>4)&0x0F;
+  
+#ifdef RxTestDebug
+        if(i==j)  
+        {
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+        } else {
+            rxtestDebugcnt ++;
+             if (rxtestDebugcnt > 10) //200ms,100s
+             {
+               Ledswitch=1; 
+            } 
+          
+        }
+#else
+
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+    #endif
+        
+        
+        
+      }
+}
+//===================TIM4计数溢出更新事件中断响应函数======================
+#pragma vector=0x19            
+__interrupt void TIM4_UPD_OVF_IRQHandler(void)
+{
+      __root static unsigned char flag=0;
+      unsigned char i,j;
+      
+      TIM4_SR = 0;              //清除更新事件中断标志位UIF
+      LocalTime++;
+    //  if(BUS_RevOverTime>0)BUS_RevOverTime--;
+      //===================================
+      if(flag>1)
+      {
+           TIM1_CCER2_CC4E=1;                           //GPIOA->BSRR = GPIO_Pin_9;           //总线为低电平
+           flag--;
+           return;    
+      }
+      else if(flag==1)
+      {
+           TIM1_CCER2_CC4E=0;                           //GPIOA->BRR = GPIO_Pin_9;            //总线为高电平
+           flag=0;
+           return;             
+      }
+      //===================================
+      if((BUS_SendInex>0)&&(flag==0))
+      {      
+           if(BUS_SendInex==1)                          //起始位:总线5ms低电平
+           {
+               flag=5;
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex<Bus_SendLength)
+           {
+               i=(BUS_SendInex-2)/8;
+               j=(BUS_SendInex-2)%8;
+               if(((BUS_SendingCmd[i]>>j)&0x01)>0)     //数据位1:2ms低电平 
+               {
+                   flag=2;   
+               }
+               else                                    //数据位0:1ms低电平
+               {
+                   flag=1;
+               }
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex==Bus_SendLength)
+           {
+               flag=0; 
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;         
+           }
+           else
+           {
+               TIM1_CCER2_CC4E=0; 
+               BUS_SendInex=0;
+               flag=0;
+          }
+      }     
+      
+}
+//===================外部IO下降沿中断事件中断响应函数=====================
+#pragma vector=0x07           
+__interrupt void EXTI_PORTC_IRQHandler(void)
+{
+     unsigned int i=0;
+      //===========================================
+      i=TIM2_CNTRH;
+      i=(i<<8)+TIM2_CNTRL;
+      //===========================================
+      if(BUS_RevIndex==0)
+      {
+           //===========================================
+        //   BUS_RevOverTime=200;         //接收200ms超时
+           Bus_RevFlag=0;              //清除接收标志位
+           //===========================================
+           if((i>400)&&(i<750))
+           {
+              BUS_RevIndex=2;
+              
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex==1)
+      {
+           if((i>400)&&(i<750))
+           {
+              BUS_RevIndex=2;
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex<26)
+      {
+            BUS_RevBuf[BUS_RevIndex-2]=i;
+            BUS_RevIndex++;
+      }
+      //===========================================
+      TIM2_CNTRH=0x00;            //初值
+      TIM2_CNTRL=0x00;
+}
+
+
+void BUS_SendData(unsigned char Length)
+{
+    unsigned char i=0,checksum=0;
+    //======================================================
+    checksum=0;
+    BUS_SendCmd[Length-1]&=0x0F;
+    for(i=0;i<Length;i++)
+    {
+        checksum+=BUS_SendCmd[i];
+    }
+    BUS_SendCmd[Length-1]|=((checksum&0x0F)<<4);
+    //计算校验值
+    //======================================================
+    while(BUS_SendInex>0);
+    
+    for(i=0;i<Length;i++)
+    {
+        BUS_SendingCmd[i]=BUS_SendCmd[i];
+    }
+    BUS_SendInex=1;
+}
+
+
+int main( void )
+{
+   static unsigned long KeySentTime=0;
+   unsigned char i;
+   unsigned long  TurnOnDelay=3600000;                    //上电延时60分钟,自动进入工作模式
+   unsigned char TurnOnMode=0;
+  //========================================================
+  STM8_Init();
+  GPIO_EXTI_Init();
+  #ifndef   tim2Led
+  TIM2_Init();
+#endif
+  GPIO_LED_Init();
+  TIM4_1ms_Init();
+  GPIO_KEY_Init();
+  TIM1_PWM_Init();
+#ifdef   tim2Led
+   TIM2_PWM_Init();
+#endif
+
+  SysVar_Init();
+  
+  //========================================================
+  asm("rim");                   //改变主程序软件优先级“开启中断”
+  while(1)
+  {
+    if ((TurnOnDelay<LocalTime)&&(TurnOnMode==0))
+    {
+        RunMode=1; 
+        Bus_SendLength=26;        //总线发送长度,在正常工作模式时,为26   (3byes*8+2) 
+        TurnOnMode=0xFF;
+          Ledswitch=0;
+    }
+    //====================================================         
+      BUS_Rev_Tick();
+      GPIO_LED_Tick();
+      GPIO_KEY_Tick();
+    //===================================================
+    if(RunMode==0)
+    {
+         if(KEY0==2)
+         {
+              BUS_SendCmd[0]=Addrp[0];
+              BUS_SendCmd[1]=Addrp[1]; 
+              for(i=0;i<15;i++)
+              {
+                BUS_SendCmd[2+i]=DeviceSN[i];
+              }
+              BUS_SendCmd[17]=0x0E;
+              BUS_SendData(18);
+              
+             //在注册模式下,用户按键,则发送注册码!
+             if(Ledswitch==0)
+             {
+                Ledswitch=2;
+             }
+             else
+             {
+                Ledswitch=0;
+             }
+         }
+    }
+    else
+    {
+        if(KEY0==2)              //紧急呼叫
+        {
+             BUS_SendCmd[0]=Addrp[0];
+             BUS_SendCmd[1]=Addrp[1];
+             BUS_SendCmd[2]=0x0C; 
+             BUS_SendData(3);
+             Ledswitch=2;
+             BUS_SendCnt = 9;
+             KeySentTime = LocalTime +1000;
+        } else if(KEY0==3)              //长按关闭指示灯
+        {
+               Ledswitch=0; //dwd190802
+        }else {
+          if ((BUS_SendCnt ) && (LocalTime> KeySentTime)) {  //dwd190723
+                KeySentTime = LocalTime +1000;
+                BUS_SendCnt --;
+                BUS_SendCmd[0]=Addrp[0];
+                BUS_SendCmd[1]=Addrp[1];
+                BUS_SendCmd[2]=0x0C; 
+                BUS_SendData(3); 
+          }
+          else {
+             if(KEY1==2)             //紧急呼叫取消
+                {
+                     BUS_SendCmd[0]=Addrp[0];
+                     BUS_SendCmd[1]=Addrp[1];
+                     BUS_SendCmd[2]=0x07; 
+                     BUS_SendData(3);
+                     BUS_SendCnt = 9;
+                } 
+            
+          }
+          
+        }
+        
+       
+        
+    }
+  }
+}

+ 813 - 0
main.cb2

@@ -0,0 +1,813 @@
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+//#define     IsDebug
+//#define     tim2Led
+
+//#define     RxTestDebug
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+#include <iostm8s003f3.h>
+
+
+
+
+
+#define KEY0            KEY[0]                  //����
+#define KEY1            KEY[1]                  //������ťȡ������
+
+//==============================================================
+  __root unsigned int     BUS_RevBuf[30];
+  __root unsigned char    BUS_RevIndex=0;
+  __root unsigned char    BUS_Rev_Cmd[3];              //���߽���
+  
+  __root unsigned int     BUS_RevOverTime=0;           //���߽��ճ�ʱ,200
+  __root unsigned char    Bus_RevFlag=0;               //���߽��ճɹ�
+//==============================================================
+
+  __root unsigned char    Ledswitch=2;                    //RedLED����
+  __root unsigned char    KEY[2]={0};                     //����
+
+//============================================    
+  __root unsigned char    BUS_SendInex=0;
+  __root unsigned char    BUS_SendCmd[30];              //Ӧ�ò㷢������
+  __root unsigned char    BUS_SendingCmd[30];           //��ʱ�����ڴ�������
+//==============================================================
+
+  __root unsigned long    LocalTime=0;
+  __root unsigned char  RunMode=0;               //0����ʾע��ģʽ��>0��ʾ��������ģʽ
+  __root unsigned char  Bus_SendLength=146;      //���߷��ͳ��ȣ���ע��ģʽʱ����Ϊ
+
+//==============================================================
+  
+    __root unsigned char    BUS_SendCnt = 0;                    //�ط�����
+    
+
+    __root const unsigned char BlankStr[28]="555555555555";
+    __root const unsigned char DeviceSN[16]="SZFS20250120001";
+    __root const unsigned char DeviceAddr[10]={0x31,0x08};
+    __root const unsigned char *Addrp=0; 
+  
+  
+  
+  
+  
+  
+void SysVar_Init(void);
+void BUS_RevData(void);
+void GPIO_KEY_Tick(void);
+void BUS_Rev_Tick(void);
+void BUS_SendData(unsigned char Length);
+void GPIO_MIC_SW(unsigned char status);
+//============================================
+
+#ifdef RxTestDebug
+unsigned long rxtestDebugcnt=0;
+#endif
+
+//==============================================================
+  void SysVar_Init(void)
+  {
+      
+      Addrp=DeviceAddr;
+      RunMode=0;
+      Ledswitch=2;
+  }
+//==============================================================
+  void STM8_Init(void)
+  {
+      CLK_CKDIVR    =0x18;        //16M/8=2M
+  }
+//==============================================================
+void GPIO_EXTI_Init(void)
+{
+    EXTI_CR1_PCIS=1;            //PC��Ϊ�½����ж�
+    
+    PC_DDR_DDR7=0;
+    PC_CR1_C17=1;
+    PC_CR2_C27=1; 
+}
+void TIM2_Init(void)
+{
+    TIM2_IER  = 0x00;           //��ֹ�ж�
+    TIM2_PSCR = 0x04;          //����Ԥ��Ƶ�Ĵ�����
+                               
+    TIM2_ARRH =0xFF;
+    TIM2_ARRL =0xFF;
+    
+    TIM2_CNTRH=0x00;            //��ֵ
+    TIM2_CNTRL=0x00;
+    TIM2_CR1 |= 0x01;           //������ʱ��
+}
+void GPIO_KEY_Init(void)
+{
+    //==============================================
+    PA_DDR_DDR1=0;
+    PA_DDR_DDR2=0;    
+    PA_CR1_C11=1;
+    PA_CR1_C12=1;    
+    PA_CR2_C21=0;               
+    PA_CR2_C22=0;    
+    //==============================================
+    
+    //==============================================
+    PD_DDR_DDR4=0;        // 配置为输入
+    PD_CR1_C14=1;         // 上拉输入
+    PD_CR2_C24=0;         // 禁用外部中断
+
+    //==============================================
+     
+    
+    KEY0=0;
+    KEY1=0;
+    BUS_SendCnt =0;
+}
+void GPIO_LED_Init(void)
+{
+    PD_DDR_DDR3   =1;           //配置为输出
+    PD_CR1_C13    =1;           //推挽输出模式
+    PD_ODR_ODR3   =1;           //输出高电平,LED亮  
+    
+    Ledswitch=2;                 // 初始化时LED常亮
+}
+void TIM4_1ms_Init(void)
+{
+  TIM4_PSCR = 0x03;         //����Ԥ��Ƶ�Ĵ�����
+                            //��8�ַ�Ƶ����1(0)��2(1)��4(2)��8(3)��16(4)��32(5)��64(6)��128(7)
+  TIM4_ARR = 0xF9;         //�����Զ���װ�ؼĴ���
+  
+  TIM4_IER = 0x01;         //����TIM4�����¼��ж�ʹ��
+  TIM4_CNTR = 0xF9;        //����TIM4��ʱ����ֵ��ʹ�ÿ�ʼ����ʱ������һ�����
+  
+  TIM4_CR1_CEN= 0x01;      //ʹ�ܼ���������TIM4_CR1�Ĵ���CENλΪ��1��
+}
+void TIM1_PWM_Init(void)
+{
+    PC_DDR_DDR4 =1;     
+    //=============================================
+    TIM1_PSCRH  =0;
+    TIM1_PSCRL  =0;                     //��ʱ��1 ʱ�Ӳ���Ƶ
+    
+    TIM1_ARRH   =0;
+    TIM1_ARRL   =19;                    //��ʱ��1��PWM���Ƶ�ʣ�2000 000/20=100K
+    
+    TIM1_CR1    &=0x8F;                 //���ϼ��������ض���ģʽ
+    //=============================================
+    TIM1_CCR4H  =0;
+    TIM1_CCR4L  =10;
+    TIM1_CCMR4  =0x60;                  //����CH4ΪPWMģʽ1
+    TIM1_CCER2  &=0x1F;                //����CH4�ߵ�ƽ��Ч
+    //TIM1_CCER2  |=0x10;                //ʹ��CH4���
+    TIM1_OISR   &=0xBF;                //��������͵�ƽ
+    //ͨ��4��100K_50% PWM���
+    //=============================================
+    TIM1_CR1    |=0x01;
+    TIM1_BKR    =0x80;
+
+}
+
+
+
+void TIM2_PWM_Init(void)
+{
+   // TIM2_IER  = 0x04; 
+  //  PD_DDR_DDR3 =1;     
+    //=============================================
+
+   
+        
+    TIM2_CCMR2  = TIM2_CCMR2 | 0x70;                  //����CH2ΪPWMģʽ1
+  //  TIM2_CCER1  &=0x1F;                //����CH2�ߵ�ƽ��Ч
+    TIM2_CCER1 = TIM2_CCER1 | 0x30;                //ʹ��CH2���
+    
+    TIM2_ARRH   =0;
+    TIM2_ARRL   = 19;                    //��ʱ��1��PWM���Ƶ�ʣ�2000 000/100=20K
+    
+   // TIM2_CR1    &=0x8F;                 //���ϼ��������ض���ģʽ
+    //=============================================
+    TIM2_CCR2H  =0x0;
+    TIM2_CCR2L  =0x00;
+
+        TIM2_PSCR  =0;  //0x03
+   // TIM2_OISR   &=0xBF;                //��������͵�ƽ
+    //ͨ��2��1K_50% PWM���
+    //=============================================
+    TIM2_CR1   = TIM2_CR1 |0x01;
+  //  TIM2_BKR    =0x80;
+
+}
+
+void GPIO_LED_Tick(void)
+{
+  static unsigned long flashTime=0;
+    static unsigned char ledflag=0;
+   static unsigned char ledflagbak=0;
+#ifdef tim2Led
+    
+  if(Ledswitch==1)
+  {
+      //PD_ODR_ODR3=1;
+      TIM2_CCR2H  =0;
+      TIM2_CCR2L  =19;
+      ledflag =0;
+  }
+  else if (Ledswitch==2)
+  {
+     if(LocalTime>flashTime)
+      {
+          flashTime=LocalTime+100;
+          ledflag ++;
+         
+      }
+     if (ledflagbak == ledflag ) {
+        return;
+       
+     }
+      ledflagbak = ledflag ;
+      if(ledflag >39 ) {
+           ledflag =0;
+       }
+         TIM2_CCR2H  =0x0;
+     if (ledflag > 19 ) {
+         TIM2_CCR2L  = (ledflag-19) ;
+     } else  if (ledflag > 15 ) {
+          TIM2_CCR2L  = (19-ledflag) ;
+          ledflag = 20;
+     }
+     else {
+        TIM2_CCR2L  = (19-ledflag) ;
+     }
+     
+  }
+  else
+  {
+      TIM2_CCR2H  =0x0;
+      TIM2_CCR2L  =0x0;
+       ledflag =0;
+     // PD_ODR_ODR3=0;
+  }
+#else
+  
+  if(Ledswitch==1)
+  {
+      PD_ODR_ODR3=1;
+   
+  }
+  else if (Ledswitch==2)
+  {
+    PD_ODR_ODR3=1;
+  }
+  else
+  {
+    PD_ODR_ODR3=0;
+  }
+
+  
+  
+  
+#endif
+}
+
+void GPIO_KEY_Tick(void)
+{
+    static unsigned long keyTime1=0;
+    static unsigned char keyResTime2 =0;
+    static unsigned long key_timeout = 0;
+
+    // KEY0(紧急按钮)处理
+    if(PA_IDR_IDR1==1)          // 没有按下
+    {
+        keyTime1=LocalTime+120;  // 重置延时
+    }
+    else if(LocalTime>keyTime1)  // 按下且延时到
+    {
+        if(KEY0 == 0)           // 未处理状态
+        {
+            KEY0 = 2;           // 设置触发状态
+            key_timeout = LocalTime + 100;
+        }
+    }
+
+    // KEY1(取消按钮)处理
+    if(PD_IDR_IDR4==0)          // 按下
+    {
+        if(keyResTime2 < 50)    // 消抖
+        {
+            keyResTime2++;
+            if(keyResTime2 >= 50 && KEY1 == 0)
+            {
+                KEY1 = 2;       // 设置触发状态
+            }
+        }
+    }
+    else                        // 松开
+    {
+        keyResTime2 = 0;       // 重置消抖计数
+    }
+}
+void BUS_RevData(void)
+{
+  //=======================================
+     if(((BUS_Rev_Cmd[0]!=Addrp[0])||(BUS_Rev_Cmd[1]!=Addrp[1]))&&(BUS_Rev_Cmd[2]!=0x0E))
+     {
+        if((BUS_Rev_Cmd[0]!=0xFF)||(BUS_Rev_Cmd[1]!=0xFF))
+          return;
+     }
+ 
+  //=======================================
+   switch(BUS_Rev_Cmd[2])
+   {
+       case 0:
+          break;
+       case 1:
+          break;
+       case 2:
+          break;
+       case 3:
+          break;
+       case 4:                           
+          break;
+       case 5:                          
+          break;
+       case 6:                                
+          break;
+       case 7:                          // 取消命令
+          Ledswitch=0;                  // 收到取消命令时关闭LED
+          KEY0 = 0;                     // 重置紧急按钮状态
+          break;
+       case 8:                          
+          break;
+       case 9:                          // 切换到工作模式
+          RunMode=1;                    // 设置为工作模式
+          BUS_SendCnt=0;               // 重置发送计数
+          Bus_SendLength=26;           // 设置发送长度
+          break;
+       case 13:                        
+          BUS_SendCmd[0]=Addrp[0];
+          BUS_SendCmd[1]=Addrp[1];
+          BUS_SendCmd[2]=0x0D; 
+          BUS_SendData(3); 
+          break;
+        case 14:
+          if(BUS_Rev_Cmd[1]=='Y')      
+          {
+              RunMode=1; 
+              Bus_SendLength=26;       
+          }
+          else
+          {
+              RunMode=0;                
+              Bus_SendLength=146;                 
+          }
+          break;
+   }
+    Bus_RevFlag=0xFF;
+}
+void BUS_Rev_Tick(void)
+{
+      static unsigned char i=0,j=0,k=0;
+      if(BUS_RevIndex==26)
+      {
+        BUS_Rev_Cmd[0]=0;
+        BUS_Rev_Cmd[1]=0;
+        BUS_Rev_Cmd[2]=0;
+        for(k=0;k<24;k++)
+        {
+          i=k / 8;
+          j=k % 8;
+          if ((BUS_RevBuf[k]>280)&&(BUS_RevBuf[k]<400))
+          {
+            BUS_Rev_Cmd[i]|=(1<<j);
+          }
+        }
+        BUS_RevIndex=0;
+        i=(BUS_Rev_Cmd[0]+ BUS_Rev_Cmd[1]+(BUS_Rev_Cmd[2]&0x0F))&0x0F;
+        j=(BUS_Rev_Cmd[2]>>4)&0x0F;
+  
+#ifdef RxTestDebug
+        if(i==j)  
+        {
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+        } else {
+            rxtestDebugcnt ++;
+             if (rxtestDebugcnt > 10) //200ms,100s
+             {
+               Ledswitch=1; 
+            } 
+          
+        }
+#else
+
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+    #endif
+        
+        
+        
+      }
+}
+//===================TIM4������������¼��ж���Ӧ����======================
+#pragma vector=0x19            
+__interrupt void TIM4_UPD_OVF_IRQHandler(void)
+{
+      __root static unsigned char flag=0;
+      unsigned char i,j;
+      
+      TIM4_SR = 0;              //��������¼��жϱ�־λUIF
+      LocalTime++;
+    //  if(BUS_RevOverTime>0)BUS_RevOverTime--;
+      //===================================
+      if(flag>1)
+      {
+           TIM1_CCER2_CC4E=1;                           //GPIOA->BSRR = GPIO_Pin_9;           //����Ϊ�͵�ƽ
+           flag--;
+           return;    
+      }
+      else if(flag==1)
+      {
+           TIM1_CCER2_CC4E=0;                           //GPIOA->BRR = GPIO_Pin_9;            //����Ϊ�ߵ�ƽ
+           flag=0;
+           return;             
+      }
+      //===================================
+      if((BUS_SendInex>0)&&(flag==0))
+      {      
+           if(BUS_SendInex==1)                          //��ʼλ������5ms�͵�ƽ
+           {
+               flag=5;
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex<Bus_SendLength)
+           {
+               i=(BUS_SendInex-2)/8;
+               j=(BUS_SendInex-2)%8;
+               if(((BUS_SendingCmd[i]>>j)&0x01)>0)     //����λ1��2ms�͵�ƽ 
+               {
+                   flag=2;   
+               }
+               else                                    //����λ0��1ms�͵�ƽ
+               {
+                   flag=1;
+               }
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex==Bus_SendLength)
+           {
+               flag=0; 
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;         
+           }
+           else
+           {
+               TIM1_CCER2_CC4E=0; 
+               BUS_SendInex=0;
+               flag=0;
+          }
+      }     
+      
+}
+//===================�ⲿIO�½����ж��¼��ж���Ӧ����=====================
+#pragma vector=0x07           
+__interrupt void EXTI_PORTC_IRQHandler(void)
+{
+     unsigned int i=0;
+      //===========================================
+      i=TIM2_CNTRH;
+      i=(i<<8)+TIM2_CNTRL;
+      //===========================================
+      if(BUS_RevIndex==0)
+      {
+           //===========================================
+        //   BUS_RevOverTime=200;         //����200ms��ʱ
+           Bus_RevFlag=0;              //������ձ�־λ
+           //===========================================
+           if((i>400)&&(i<750))
+           {
+              BUS_RevIndex=2;
+              
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex==1)
+      {
+           if((i>400)&&(i<750))
+           {
+              BUS_RevIndex=2;
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex<26)
+      {
+            BUS_RevBuf[BUS_RevIndex-2]=i;
+            BUS_RevIndex++;
+      }
+      //===========================================
+      TIM2_CNTRH=0x00;            //��ֵ
+      TIM2_CNTRL=0x00;
+}
+
+
+void BUS_SendData(unsigned char Length)
+{
+    unsigned char i=0,checksum=0;
+    unsigned long timeout = LocalTime + 100;  // 100ms超时
+    //======================================================
+    checksum=0;
+    BUS_SendCmd[Length-1]&=0x0F;
+    for(i=0;i<Length;i++)
+    {
+        checksum+=BUS_SendCmd[i];
+    }
+    BUS_SendCmd[Length-1]|=((checksum&0x0F)<<4);
+    //======================================================
+    // 等待之前的发送完成,带超时保护
+    while(BUS_SendInex>0)
+    {
+        if(LocalTime > timeout)
+        {
+            BUS_SendInex = 0;
+            break;
+        }
+    }
+    
+    // 只有在确保之前的发送已完成时才开始新的发送
+    if(BUS_SendInex == 0)
+    {
+        for(i=0;i<Length;i++)
+        {
+            BUS_SendingCmd[i]=BUS_SendCmd[i];
+        }
+        BUS_SendInex=1;
+    }
+}
+
+void TestCancelButtonWithMessage(void)
+{
+    // 初始化 LED 引脚 (PD3)
+    PD_DDR_DDR3 = 1;    // 配置为输出
+    PD_CR1_C13 = 1;     // 推挽输出
+    PD_ODR_ODR3 = 1;    // 初始状态LED点亮
+   
+    // 初始化变量
+    static unsigned long LedOnTime = 0;    // LED开启时间记录
+    
+    // 初始化取消按键引脚 (PD4)
+    PD_DDR_DDR4 = 0;    // 配置为输入
+    PD_CR1_C14 = 1;     // 上拉输入
+    PD_CR2_C24 = 0;     // 禁用外部中断
+
+    // 初始化通信相关变量
+    BUS_SendInex = 0;
+    unsigned char debounceCount = 0;
+    unsigned char buttonState = 0;
+    unsigned char messageSent = 0;
+    unsigned int i;
+
+    // 初始化时钟
+    CLK_CKDIVR = 0x18;        // 16M/8=2M
+    
+    // 初始化定时器4(用于LocalTime计数)
+    TIM4_PSCR = 0x03;         // 8分频
+    TIM4_ARR = 0xF9;          // 自动重装载值
+    TIM4_IER = 0x01;          // 使能更新中断
+    TIM4_CNTR = 0xF9;         // 计数器初值
+    TIM4_CR1_CEN = 0x01;      // 使能计数器
+    
+    // 初始化通信相关
+    TIM1_PWM_Init();          // 初始化PWM用于通信
+    
+    // 使能中断
+    asm("rim");
+
+    while(1)
+    {
+        if(PD_IDR_IDR4 == 0)  // 按键按下(低电平有效)
+        {
+            if(debounceCount < 50)  // 消抖计数
+            {
+                debounceCount++;
+                for(i=0; i<100; i++) // 简单延时
+                {
+                    __asm("nop");
+                }
+                
+                if(debounceCount >= 50 && !messageSent)  // 消抖完成且消息未发送
+                {
+                    // 1. 立即关闭LED
+                    PD_ODR_ODR3 = 0;
+                    
+                    // 2. 准备发送取消消息
+                    BUS_SendCmd[0] = 0x31;  // DeviceAddr[0]
+                    BUS_SendCmd[1] = 0x08;  // DeviceAddr[1]
+                    BUS_SendCmd[2] = 0x07;  // 取消命令
+                    
+                    // 3. 发送消息
+                    BUS_SendData(3);
+                    
+                    buttonState = 1;    // 记录按键已按下
+                    messageSent = 1;    // 标记消息已发送
+                }
+            }
+        }
+        else  // 按键松开
+        {
+            debounceCount = 0;
+            if(buttonState == 1)  // 如果之前按键是按下状态
+            {
+                buttonState = 0;   // 清除按键状态
+                messageSent = 0;   // 重置消息发送标志
+            }
+        }
+
+        // 处理取消按键
+        if(KEY1==2)             // 取消按键被按下且消抖完成
+        {
+            static unsigned long cancel_timeout = 0;
+            // 1. 先执行本地操作
+            Ledswitch = 0;      // 立即关闭LED
+            KEY1 = 1;           // 设置为等待发送状态
+            
+            // 2. 等待通信就绪并发送取消命令
+            if(BUS_SendInex == 0)
+            {
+                BUS_SendCmd[0]=Addrp[0];
+                BUS_SendCmd[1]=Addrp[1];
+                BUS_SendCmd[2]=0x07; 
+                BUS_SendData(3);
+                
+                // 3. 只有在成功发送后才重置状态
+                KEY1 = 0;           // 重置按键状态
+                BUS_SendCnt = 0;    // 清除发送计数
+                cancel_timeout = 0;  // 重置超时计数器
+            }
+            else
+            {
+                // 强制重置发送状态如果等待太久
+                if(cancel_timeout == 0)
+                {
+                    cancel_timeout = LocalTime + 50; // 50ms超时
+                }
+                else if(LocalTime > cancel_timeout)
+                {
+                    BUS_SendInex = 0;  // 强制重置发送状态
+                    cancel_timeout = 0; // 重置超时计数器
+                }
+            }
+        }
+
+        // 检查LED是否需要关闭(15秒后)
+        if(Ledswitch == 2)
+        {
+            if((LocalTime - LedOnTime) >= 15000)  // 15秒 = 15000ms
+            {
+                Ledswitch = 0;  // 关闭LED
+            }
+        }
+    }
+}
+
+int main(void)
+{
+   static unsigned long KeySentTime=0;
+   static unsigned long LedOnTime=0;    // LED开启时间记录
+   static unsigned char lastLedState = 0; // 记录LED上一次的状态
+   unsigned char i;
+   unsigned long TurnOnDelay=3600000;
+   unsigned char TurnOnMode=0;
+   //========================================================
+   STM8_Init();
+   GPIO_EXTI_Init();
+   #ifndef   tim2Led
+   TIM2_Init();
+   #endif
+   GPIO_LED_Init();
+   TIM4_1ms_Init();
+   GPIO_KEY_Init();
+   TIM1_PWM_Init();
+   #ifdef   tim2Led
+   TIM2_PWM_Init();
+   #endif
+
+   SysVar_Init();
+   
+   //========================================================
+   asm("rim");                   // 开启中断
+   while(1)
+   {
+       //====================================================         
+       BUS_Rev_Tick();
+       GPIO_LED_Tick();
+       GPIO_KEY_Tick();
+       //===================================================
+       if(RunMode==0)           // 注册模式
+       {
+           // 保持LED常亮,直到收到命令9
+           if(Ledswitch != 2)
+           {
+               Ledswitch = 2;
+           }
+           
+           // 处理按键等其他逻辑
+           if(KEY0==2)          // 按键触发,发送注册信息
+           {
+               if(BUS_SendInex == 0)  // 通信空闲
+               {
+                   BUS_SendCmd[0]=Addrp[0];
+                   BUS_SendCmd[1]=Addrp[1]; 
+                   for(i=0;i<15;i++)
+                   {
+                       BUS_SendCmd[2+i]=DeviceSN[i];
+                   }
+                   BUS_SendCmd[17]=0x0E;
+                   BUS_SendData(18);
+                   KEY0 = 1;        // 设置为等待确认状态
+               }
+           }
+       }
+       else
+       {
+           // 处理紧急按键
+           if(KEY0==2)              // 按键触发
+           {
+               // 立即设置LED状态(无论通信状态如何)
+               if(Ledswitch != 2)
+               {
+                   Ledswitch = 2;
+                   LedOnTime = LocalTime;
+               }
+               
+               // 尝试发送命令
+               if(BUS_SendInex == 0)  // 通信空闲
+               {
+                   // 发送紧急命令
+                   BUS_SendCmd[0]=Addrp[0];
+                   BUS_SendCmd[1]=Addrp[1];
+                   BUS_SendCmd[2]=0x0C;
+                   BUS_SendData(3);
+                   KEY0 = 1;            // 设置为等待确认状态
+               }
+           }
+           else if(KEY0 == 1)      // 等待确认状态
+           {
+               if(BUS_SendInex == 0)  // 如果发送完成
+               {
+                   KEY0 = 2;  // 继续保持触发状态,让LED持续亮
+               }
+           }
+           
+           // 处理取消按键
+           if(KEY1==2)             // 取消按键触发
+           {
+               static unsigned long cancel_timeout = 0;
+               
+               // 立即关闭LED
+               Ledswitch = 0;
+               KEY0 = 0;       // 同时重置紧急按钮状态
+               
+               if(BUS_SendInex == 0)  // 通信空闲
+               {
+                   // 发送取消命令
+                   BUS_SendCmd[0]=Addrp[0];
+                   BUS_SendCmd[1]=Addrp[1];
+                   BUS_SendCmd[2]=0x07;
+                   BUS_SendData(3);
+                   KEY1 = 0;       // 重置按键状态
+               }
+               else
+               {
+                   if(cancel_timeout == 0)
+                   {
+                       cancel_timeout = LocalTime + 50; // 50ms超时
+                   }
+                   else if(LocalTime > cancel_timeout)
+                   {
+                       BUS_SendInex = 0;  // 强制重置发送状态
+                       cancel_timeout = 0; // 重置超时计数器
+                   }
+               }
+           }
+           
+           // LED 15秒自动关闭
+           if(Ledswitch == 2 && (LocalTime - LedOnTime) >= 15000)
+           {
+               Ledswitch = 0;      // 关闭LED
+               KEY0 = 0;           // 重置按键状态
+           }
+       }
+   }
+   return 0;
+}

+ 678 - 0
main.no.c

@@ -0,0 +1,678 @@
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+//#define     IsDebug
+//#define     tim2Led
+
+//#define     RxTestDebug
+
+////////////////////////////////////////////////////////////////////////////////
+
+
+#include <iostm8s003f3.h>
+
+
+
+
+
+#define KEY0            KEY[0]                  //按键
+#define KEY1            KEY[1]                  //紧急按钮取消按键
+
+//==============================================================
+  __root unsigned int     BUS_RevBuf[30];
+  __root unsigned char    BUS_RevIndex=0;
+  __root unsigned char    BUS_Rev_Cmd[3];              //总线接收
+  
+  __root unsigned int     BUS_RevOverTime=0;           //总线接收超时,200
+  __root unsigned char    Bus_RevFlag=0;               //总线接收成功
+//==============================================================
+
+  __root unsigned char    Ledswitch=2;                    //RedLED开关
+  __root unsigned char    KEY[2]={0};                     //按键
+
+//============================================    
+  __root unsigned char    BUS_SendInex=0;
+  __root unsigned char    BUS_SendCmd[30];              //应用层发送数据
+  __root unsigned char    BUS_SendingCmd[30];           //定时器正在处理数据
+//==============================================================
+
+  __root unsigned long    LocalTime=0;
+  __root unsigned char  RunMode=0;               //0:表示注册模式,>0表示正常工作模式
+  __root unsigned char  Bus_SendLength=146;      //总线发送长度,在注册模式时长度为
+
+//==============================================================
+  
+    __root unsigned char    BUS_SendCnt = 0;                    //重发计数
+    
+
+    __root const unsigned char BlankStr[28]="555555555555";
+    __root const unsigned char DeviceSN[16]="SZFS20250120001";
+    __root const unsigned char DeviceAddr[10]={0x31,0x08};
+    __root const unsigned char *Addrp=0; 
+  
+  
+  
+  
+  
+  
+void SysVar_Init(void);
+void BUS_RevData(void);
+void GPIO_KEY_Tick(void);
+void BUS_Rev_Tick(void);
+void BUS_SendData(unsigned char Length);
+void GPIO_MIC_SW(unsigned char status);
+//============================================
+
+#ifdef RxTestDebug
+unsigned long rxtestDebugcnt=0;
+#endif
+
+//==============================================================
+  void SysVar_Init(void)
+  {
+      
+      Addrp=DeviceAddr;
+      RunMode=0;
+  }
+//==============================================================
+  void STM8_Init(void)
+  {
+      *((unsigned char*)0x50C6) = 0x18;        //16M/8=2M      //16M/8=2M
+  }
+//==============================================================
+void GPIO_EXTI_Init(void)
+{
+    EXTI_CR1_PCIS=1;            //PC口为下降沿中断
+    
+    PC_DDR_DDR7=0;
+    PC_CR1_C17=1;
+    PC_CR2_C27=1; 
+}
+void TIM2_Init(void)
+{
+    TIM2_IER  = 0x00;           //禁止中断
+    TIM2_PSCR = 0x04;          //设置预分频寄存器数
+                               
+    TIM2_ARRH =0xFF;
+    TIM2_ARRL =0xFF;
+    
+    TIM2_CNTRH=0x00;            //初值
+    TIM2_CNTRL=0x00;
+    TIM2_CR1 |= 0x01;           //开启定时器
+}
+void GPIO_KEY_Init(void)
+{
+    //==============================================
+    PA_DDR_DDR1=0;
+    PA_DDR_DDR2=0;    
+    PA_CR1_C11=1;
+    PA_CR1_C12=1;    
+    PA_CR2_C21=0;               
+    PA_CR2_C22=0;    
+    //==============================================
+    
+    //==============================================
+    PD_DDR_DDR4=0;
+ 
+    PD_CR1_C14=1;   //带上拉电阻输入
+    PD_CR2_C24=0;    
+
+    //==============================================
+     
+    
+    KEY0=0;
+    KEY1=0;
+    BUS_SendCnt =0;
+}
+void GPIO_LED_Init(void)
+{
+    PD_DDR_DDR3   =1;           //输出引脚
+    PD_CR1_C13    =1;           //推挽输出模式
+    PD_ODR_ODR3   =0;           //输出低电平,LED灭  
+    
+    Ledswitch=2;
+}
+void TIM4_1ms_Init(void)
+{
+  TIM4_PSCR = 0x03;         //设置预分频寄存器数
+                            //共8种分频比例1(0),2(1),4(2),8(3),16(4),32(5),64(6),128(7)
+  TIM4_ARR = 0xF9;         //设置自动重装载寄存器
+  
+  TIM4_IER = 0x01;         //开启TIM4更新事件中断使能
+  TIM4_CNTR = 0xF9;        //配置TIM4定时器初值,使得开始计数时发生第一次溢出
+  
+  TIM4_CR1_CEN= 0x01;      //使能计数器功能TIM4_CR1寄存器CEN位为“1”
+}
+void TIM1_PWM_Init(void)
+{
+    PC_DDR_DDR4 =1;     
+    //=============================================
+    TIM1_PSCRH  =0;
+    TIM1_PSCRL  =0;                     //定时器1 时钟不分频
+    
+    TIM1_ARRH   =0;
+    TIM1_ARRL   =19;                    //定时器1的PWM输出频率:2000 000/20=100K
+    
+    TIM1_CR1    &=0x8F;                 //向上计数,边沿对齐模式
+    //=============================================
+    TIM1_CCR4H  =0;
+    TIM1_CCR4L  =10;
+    TIM1_CCMR4  =0x60;                  //配置CH4为PWM模式1
+    TIM1_CCER2  &=0x1F;                //配置CH4高电平有效
+    //TIM1_CCER2  |=0x10;                //使能CH4输出
+    TIM1_OISR   &=0xBF;                //空闲输出低电平
+    //通道4:100K_50% PWM输出
+    //=============================================
+    TIM1_CR1    |=0x01;
+    TIM1_BKR    =0x80;
+
+}
+
+
+
+void TIM2_PWM_Init(void)
+{
+   // TIM2_IER  = 0x04; 
+  //  PD_DDR_DDR3 =1;     
+    //=============================================
+
+   
+        
+    TIM2_CCMR2  = TIM2_CCMR2 | 0x70;                  //配置CH2为PWM模式1
+  //  TIM2_CCER1  &=0x1F;                //配置CH2高电平有效
+    TIM2_CCER1 = TIM2_CCER1 | 0x30;                //使能CH2输出
+    
+    TIM2_ARRH   =0;
+    TIM2_ARRL   = 19;                    //定时器1的PWM输出频率:2000 000/100=20K
+    
+   // TIM2_CR1    &=0x8F;                 //向上计数,边沿对齐模式
+    //=============================================
+    TIM2_CCR2H  =0x0;
+    TIM2_CCR2L  =0x00;
+
+        TIM2_PSCR  =0;  //0x03
+   // TIM2_OISR   &=0xBF;                //空闲输出低电平
+    //通道2:1K_50% PWM输出
+    //=============================================
+    TIM2_CR1   = TIM2_CR1 |0x01;
+  //  TIM2_BKR    =0x80;
+
+}
+
+void GPIO_LED_Tick(void)
+{
+  static unsigned long flashTime=0;
+    static unsigned char ledflag=0;
+   static unsigned char ledflagbak=0;
+#ifdef tim2Led
+    
+  if(Ledswitch==1)
+  {
+      //PD_ODR_ODR3=1;
+      TIM2_CCR2H  =0;
+      TIM2_CCR2L  =19;
+      ledflag =0;
+  }
+  else if (Ledswitch==2)
+  {
+     if(LocalTime>flashTime)
+      {
+          flashTime=LocalTime+100;
+          ledflag ++;
+         
+      }
+     if (ledflagbak == ledflag ) {
+        return;
+       
+     }
+      ledflagbak = ledflag ;
+      if(ledflag >39 ) {
+           ledflag =0;
+       }
+         TIM2_CCR2H  =0x0;
+     if (ledflag > 19 ) {
+         TIM2_CCR2L  = (ledflag-19) ;
+     } else  if (ledflag > 15 ) {
+          TIM2_CCR2L  = (19-ledflag) ;
+          ledflag = 20;
+     }
+     else {
+        TIM2_CCR2L  = (19-ledflag) ;
+     }
+     
+  }
+  else
+  {
+      TIM2_CCR2H  =0x0;
+      TIM2_CCR2L  =0x0;
+       ledflag =0;
+     // PD_ODR_ODR3=0;
+  }
+#else
+  
+  if(Ledswitch==1)
+  {
+      PD_ODR_ODR3=1;
+   
+  }
+  else if (Ledswitch==2)
+  {
+    PD_ODR_ODR3=1;
+  }
+  else
+  {
+    PD_ODR_ODR3=0;
+  }
+
+  
+  
+  
+#endif
+}
+
+void GPIO_KEY_Tick(void)
+{
+    static unsigned long keyTime1=0;
+    static unsigned char  keyResTime =0; //dwd190706
+    static unsigned long keyTime2=0;
+    static unsigned char  keyResTime2 =0; //dwd190706
+
+    if(PA_IDR_IDR1==1)          //没有按下
+    {
+      if(KEY0==1)
+      {
+        keyResTime ++;
+      
+         if (   keyResTime < 200) {    
+              return;
+          }
+        if(LocalTime>(keyTime1+2000))
+            KEY0=2;  //dwd20190723
+        else
+            KEY0=2;
+      }
+      else
+      { 
+        KEY0=0;
+      }
+      keyTime1=LocalTime+120;
+    }
+    else if(LocalTime>keyTime1)
+    {
+       KEY0=1; 
+       keyResTime = 0;   
+    } else {
+         keyResTime = 0;   
+      }
+    //=======================================   
+    if(PD_IDR_IDR4==1)          //没有按下
+    {
+      if(KEY1==1)
+      {
+        keyResTime2 ++;
+      
+         if (   keyResTime2 < 200) {    
+              return;
+          }
+        if(LocalTime>(keyTime2+2000))
+            KEY1=2;  
+        else
+            KEY1=2;
+      }
+      else
+      { 
+        KEY1=0;
+      }
+      keyTime2=LocalTime+120;
+    }
+    else if(LocalTime>keyTime2)
+    {
+       KEY1=1; 
+       keyResTime2 = 0;   
+    } else {
+         keyResTime2 = 0;   
+      }
+}
+void BUS_RevData(void)
+{
+  //=======================================
+     if(((BUS_Rev_Cmd[0]!=Addrp[0])||(BUS_Rev_Cmd[1]!=Addrp[1]))&&(BUS_Rev_Cmd[2]!=0x0E))
+     {
+        if((BUS_Rev_Cmd[0]!=0xFF)||(BUS_Rev_Cmd[1]!=0xFF))
+          return;
+     }
+ 
+  //=======================================
+   switch(BUS_Rev_Cmd[2])
+   {
+       case 0:
+          break;
+       case 1:
+          break;
+       case 2:
+          break;
+       case 3:
+          break;
+       case 4:                           //主机呼叫分机,或主机应答分机
+          break;
+       case 5:                          //主机挂断分机
+          break;
+       case 6:                          //广播模式      
+          break;
+       case 7:                          //打开门灯
+          break;
+       case 8:                          //关闭门灯
+          break;
+       case 9:                          //取消紧急呼叫
+          RunMode=1; 
+          Ledswitch=0;
+          BUS_SendCnt =0;
+          break;
+       case 13:                        //注册命令
+          BUS_SendCmd[0]=Addrp[0];
+          BUS_SendCmd[1]=Addrp[1];
+          BUS_SendCmd[2]=0x0D; 
+          BUS_SendData(3); 
+          break;
+        case 14:
+          if(BUS_Rev_Cmd[1]=='Y')       //转换盒已经注册过
+          {
+              Ledswitch=0;
+              RunMode=1; 
+              Bus_SendLength=26;        //总线发送长度,在正常工作模式时,为26   (3byes*8+2)
+  
+          }
+          else
+          {
+              RunMode=0;                 //0:表示注册模式,>0表示正常工作模式
+              Bus_SendLength=146;                 
+          }
+          break;
+   }
+    Bus_RevFlag=0xFF;
+}
+void BUS_Rev_Tick(void)
+{
+      static unsigned char i=0,j=0,k=0;
+      if(BUS_RevIndex==26)
+      {
+        BUS_Rev_Cmd[0]=0;
+        BUS_Rev_Cmd[1]=0;
+        BUS_Rev_Cmd[2]=0;
+        for(k=0;k<24;k++)
+        {
+          i=k / 8;
+          j=k % 8;
+          if ((BUS_RevBuf[k]>250)&&(BUS_RevBuf[k]<450))
+          {
+            BUS_Rev_Cmd[i]|=(1<<j);
+          }
+        }
+        BUS_RevIndex=0;
+        i=(BUS_Rev_Cmd[0]+ BUS_Rev_Cmd[1]+(BUS_Rev_Cmd[2]&0x0F))&0x0F;
+        j=(BUS_Rev_Cmd[2]>>4)&0x0F;
+  
+#ifdef RxTestDebug
+        if(i==j)  
+        {
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+        } else {
+            rxtestDebugcnt ++;
+             if (rxtestDebugcnt > 10) //200ms,100s
+             {
+               Ledswitch=1; 
+            } 
+          
+        }
+#else
+
+          BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F;
+          BUS_RevData();  
+    #endif
+        
+        
+        
+      }
+}
+//===================TIM4计数溢出更新事件中断响应函数======================
+#pragma vector=0x19            
+__interrupt void TIM4_UPD_OVF_IRQHandler(void)
+{
+      __root static unsigned char flag=0;
+      unsigned char i,j;
+      
+      TIM4_SR = 0;              //清除更新事件中断标志位UIF
+      LocalTime++;
+    //  if(BUS_RevOverTime>0)BUS_RevOverTime--;
+      //===================================
+      if(flag>1)
+      {
+           TIM1_CCER2_CC4E=1;                           //GPIOA->BSRR = GPIO_Pin_9;           //总线为低电平
+           flag--;
+           return;    
+      }
+      else if(flag==1)
+      {
+           TIM1_CCER2_CC4E=0;                           //GPIOA->BRR = GPIO_Pin_9;            //总线为高电平
+           flag=0;
+           return;             
+      }
+      //===================================
+      if((BUS_SendInex>0)&&(flag==0))
+      {      
+           if(BUS_SendInex==1)                          //起始位:总线5ms低电平
+           {
+               flag=5;
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex<Bus_SendLength)
+           {
+               i=(BUS_SendInex-2)/8;
+               j=(BUS_SendInex-2)%8;
+               if(((BUS_SendingCmd[i]>>j)&0x01)>0)     //数据位1:2ms低电平 
+               {
+                   flag=2;   
+               }
+               else                                    //数据位0:1ms低电平
+               {
+                   flag=1;
+               }
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;
+           }
+           else if(BUS_SendInex==Bus_SendLength)
+           {
+               flag=0; 
+               TIM1_CCER2_CC4E=1;                       //GPIOA->BSRR = GPIO_Pin_9;
+               BUS_SendInex++;         
+           }
+           else
+           {
+               TIM1_CCER2_CC4E=0; 
+               BUS_SendInex=0;
+               flag=0;
+          }
+      }     
+      
+}
+//===================外部IO下降沿中断事件中断响应函数=====================
+#pragma vector=0x07           
+__interrupt void EXTI_PORTC_IRQHandler(void)
+{
+     unsigned int i=0;
+      //===========================================
+      i=TIM2_CNTRH;
+      i=(i<<8)+TIM2_CNTRL;
+      //===========================================
+      if(BUS_RevIndex==0)
+      {
+           //===========================================
+        //   BUS_RevOverTime=200;         //接收200ms超时
+           Bus_RevFlag=0;              //清除接收标志位
+           //===========================================
+           if((i>350)&&(i<800))
+           {
+              BUS_RevIndex=2;
+              
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex==1)
+      {
+           if((i>350)&&(i<800))
+           {
+              BUS_RevIndex=2;
+           }
+           else
+           {
+              BUS_RevIndex=0;
+           }
+      }
+      else if(BUS_RevIndex<26)
+      {
+            BUS_RevBuf[BUS_RevIndex-2]=i;
+            BUS_RevIndex++;
+      }
+      //===========================================
+      TIM2_CNTRH=0x00;            //初值
+      TIM2_CNTRL=0x00;
+}
+
+
+void BUS_SendData(unsigned char Length)
+{
+
+    unsigned char i=0,checksum=0;
+    //======================================================
+    checksum=0;
+       return ;
+    BUS_SendCmd[Length-1]&=0x0F;
+    for(i=0;i<Length;i++)
+    {
+        checksum+=BUS_SendCmd[i];
+    }
+    BUS_SendCmd[Length-1]|=((checksum&0x0F)<<4);
+    //计算校验值
+    //======================================================
+    while(BUS_SendInex>0);
+    
+    for(i=0;i<Length;i++)
+    {
+        BUS_SendingCmd[i]=BUS_SendCmd[i];
+    }
+    BUS_SendInex=1;
+}
+
+
+int main( void )
+{
+   static unsigned long KeySentTime=0;
+   unsigned char i;
+   unsigned long  TurnOnDelay=3600000;                    //上电延时60分钟,自动进入工作模式
+   unsigned char TurnOnMode=0;
+  //========================================================
+  STM8_Init();
+  GPIO_EXTI_Init();
+  #ifndef   tim2Led
+  TIM2_Init();
+#endif
+  GPIO_LED_Init();
+  TIM4_1ms_Init();
+  GPIO_KEY_Init();
+  TIM1_PWM_Init();
+#ifdef   tim2Led
+   TIM2_PWM_Init();
+#endif
+
+  SysVar_Init();
+  
+  //========================================================
+  asm("rim");                   //改变主程序软件优先级“开启中断”
+  while(1)
+  {
+    if ((TurnOnDelay<LocalTime)&&(TurnOnMode==0))
+    {
+        RunMode=1; 
+        Bus_SendLength=26;        //总线发送长度,在正常工作模式时,为26   (3byes*8+2) 
+        TurnOnMode=0xFF;
+          Ledswitch=0;
+    }
+    //====================================================         
+      BUS_Rev_Tick();
+      GPIO_LED_Tick();
+      GPIO_KEY_Tick();
+    //===================================================
+    if(RunMode==0)
+    {
+         if(KEY0==2)
+         {
+              BUS_SendCmd[0]=Addrp[0];
+              BUS_SendCmd[1]=Addrp[1]; 
+              for(i=0;i<15;i++)
+              {
+                BUS_SendCmd[2+i]=DeviceSN[i];
+              }
+              BUS_SendCmd[17]=0x0E;
+              BUS_SendData(18);
+              
+             //在注册模式下,用户按键,则发送注册码!
+             if(Ledswitch==0)
+             {
+                Ledswitch=2;
+             }
+             else
+             {
+                Ledswitch=0;
+             }
+         }
+    }
+    else
+    {
+        if(KEY0==2)              //紧急呼叫
+        {
+             BUS_SendCmd[0]=Addrp[0];
+             BUS_SendCmd[1]=Addrp[1];
+             BUS_SendCmd[2]=0x0C; 
+             BUS_SendData(3);
+             Ledswitch=2;
+             BUS_SendCnt = 9;
+             KeySentTime = LocalTime +1000;
+        } else if(KEY0==3)              //长按关闭指示灯
+        {
+               Ledswitch=0; //dwd190802
+        }else {
+          if ((BUS_SendCnt ) && (LocalTime> KeySentTime)) {  //dwd190723
+                KeySentTime = LocalTime +1000;
+                BUS_SendCnt --;
+                BUS_SendCmd[0]=Addrp[0];
+                BUS_SendCmd[1]=Addrp[1];
+                BUS_SendCmd[2]=0x0C; 
+                BUS_SendData(3); 
+          }
+          else {
+             if(KEY1==2)             //紧急呼叫取消
+                {
+                     BUS_SendCmd[0]=Addrp[0];
+                     BUS_SendCmd[1]=Addrp[1];
+                     BUS_SendCmd[2]=0x07; 
+                     BUS_SendData(3);
+                     BUS_SendCnt = 9;
+                } 
+            
+          }
+          
+        }
+        
+       
+        
+    }
+  }
+}

+ 24 - 0
settings/STM8.Debug.cspy.bat

@@ -0,0 +1,24 @@
+@REM This batch file has been generated by the IAR Embedded Workbench
+@REM C-SPY Debugger, as an aid to preparing a command line for running
+@REM the cspybat command line utility using the appropriate settings.
+@REM
+@REM Note that this file is generated every time a new debug session
+@REM is initialized, so you may want to move or rename the file before
+@REM making changes.
+@REM
+@REM You can launch cspybat by typing the name of this batch file followed
+@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
+@REM
+@REM Read about available command line parameters in the C-SPY Debugging
+@REM Guide. Hints about additional command line parameters that may be
+@REM useful in specific cases:
+@REM   --download_only   Downloads a code image without starting a debug
+@REM                     session afterwards.
+@REM   --silent          Omits the sign-on message.
+@REM   --timeout         Limits the maximum allowed execution time.
+@REM 
+
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\common\bin\cspybat" "C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\bin\stm8proc.dll" "C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\bin\stm8stlink.dll"  %1 --plugin "C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\bin\stm8bat.dll" --backend -B "-p" "C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\config\ddf\iostm8s003f3.ddf" "-d" "stlink" "--mcuname" "STM8S003F3" 
+
+

+ 24 - 0
settings/STM8.Release.cspy.bat

@@ -0,0 +1,24 @@
+@REM This batch file has been generated by the IAR Embedded Workbench
+@REM C-SPY Debugger, as an aid to preparing a command line for running
+@REM the cspybat command line utility using the appropriate settings.
+@REM
+@REM Note that this file is generated every time a new debug session
+@REM is initialized, so you may want to move or rename the file before
+@REM making changes.
+@REM
+@REM You can launch cspybat by typing the name of this batch file followed
+@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
+@REM
+@REM Read about available command line parameters in the C-SPY Debugging
+@REM Guide. Hints about additional command line parameters that may be
+@REM useful in specific cases:
+@REM   --download_only   Downloads a code image without starting a debug
+@REM                     session afterwards.
+@REM   --silent          Omits the sign-on message.
+@REM   --timeout         Limits the maximum allowed execution time.
+@REM 
+
+
+"D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\common\bin\cspybat" "D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\bin\stm8proc.dll" "D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\bin\stm8stlink.dll"  %1 --plugin "D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\bin\stm8bat.dll" --backend -B "-p" "D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\config\ddf\iostm8s003f3.ddf" "-d" "stlink" "--mcuname" "STM8S003F3" 
+
+

+ 31 - 0
settings/STM8.Release.cspy.ps1

@@ -0,0 +1,31 @@
+param([String]$debugfile = "");
+
+# This powershell file has been generated by the IAR Embedded Workbench
+# C - SPY Debugger, as an aid to preparing a command line for running
+# the cspybat command line utility using the appropriate settings.
+#
+# Note that this file is generated every time a new debug session
+# is initialized, so you may want to move or rename the file before
+# making changes.
+#
+# You can launch cspybat by typing Powershell.exe -File followed by the name of this batch file, followed
+# by the name of the debug file (usually an ELF / DWARF or UBROF file).
+#
+# Read about available command line parameters in the C - SPY Debugging
+# Guide. Hints about additional command line parameters that may be
+# useful in specific cases :
+#   --download_only   Downloads a code image without starting a debug
+#                     session afterwards.
+#   --silent          Omits the sign - on message.
+#   --timeout         Limits the maximum allowed execution time.
+#
+
+
+if ($debugfile -eq "")
+{
+& "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\common\bin\cspybat" -f "D:\MCU工作移交\模拟紧急按钮V1_STM8\settings\STM8.Release.general.xcl" --backend -f "D:\MCU工作移交\模拟紧急按钮V1_STM8\settings\STM8.Release.driver.xcl" 
+}
+else
+{
+& "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\common\bin\cspybat" -f "D:\MCU工作移交\模拟紧急按钮V1_STM8\settings\STM8.Release.general.xcl" --debug_file=$debugfile --backend -f "D:\MCU工作移交\模拟紧急按钮V1_STM8\settings\STM8.Release.driver.xcl" 
+}

+ 11 - 0
settings/STM8.Release.driver.xcl

@@ -0,0 +1,11 @@
+"-p" 
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\stm8\config\ddf\iostm8s003f3.ddf" 
+
+"--mcuname" 
+
+"STM8S003F3" 
+
+
+
+

+ 11 - 0
settings/STM8.Release.general.xcl

@@ -0,0 +1,11 @@
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\stm8\bin\stm8proc.dll" 
+
+"C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\stm8\bin\stm8stlink.dll" 
+
+"D:\MCU工作移交\模拟紧急按钮V1_STM8\Release\Exe\STM8.out" 
+
+--plugin "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\stm8\bin\stm8bat.dll" 
+
+
+
+

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 87 - 0
settings/STM8.dbgdt


+ 91 - 0
settings/STM8.dni

@@ -0,0 +1,91 @@
+[Stack]
+FillEnabled=0
+OverflowWarningsEnabled=1
+WarningThreshold=90
+SpWarningsEnabled=1
+WarnLogOnly=1
+UseTrigger=1
+TriggerName=main
+LimitSize=0
+ByteLimit=50
+[DebugChecksum]
+Checksum=-1581327425
+[CallStack]
+ShowArgs=0
+[Disassembly]
+MixedMode=1
+[SfrWindow]
+Show=0 1
+Sort=4 0
+[CodeCoverage]
+Enabled=_ 0
+[CallStackLog]
+Enabled=0
+[DriverProfiling]
+Enabled=0
+Mode=1
+Graph=0
+Symbiont=0
+Exclusions=
+[InterruptLog]
+LogEnabled=0
+SumEnabled=0
+GraphEnabled=0
+ShowTimeLog=1
+ShowTimeSum=1
+SumSortOrder=0
+[DataLog]
+LogEnabled=0
+SumEnabled=0
+GraphEnabled=0
+ShowTimeLog=1
+ShowTimeSum=1
+[Breakpoints2]
+Count=0
+[Interrupts]
+Enabled=1
+[MemoryMap]
+Enabled=0
+Base=0
+UseAuto=0
+TypeViolation=1
+UnspecRange=1
+ActionState=1
+[Trace1]
+Enabled=0
+ShowSource=1
+[Simulator]
+Freq=16000000
+[BreakpointUsageDialog]
+Placement=_ 738 379 1183 662
+[RegisterFilter]
+FilePath=_ ""
+UseFilter=_ 0
+[array_types]
+Fmt0=unsigned char[10]	4	0
+Fmt1=unsigned char[3]	4	0
+[watch_formats]
+Fmt0={W}1:BUS_Rev_Cmd	4	2
+Fmt1={W}1:BUS_SendInex	2	0
+Fmt2={W}1:Bus_SendLength	3	0
+Fmt3={W}1:Ledswitch	4	0
+Fmt4={W}1:i	4	0
+[DataSample]
+LogEnabled=0
+GraphEnabled=0
+ShowTimeLog=1
+ShowTimeSum=1
+[Log file]
+LoggingEnabled=_ 0
+LogFile=_ ""
+Category=_ 0
+[TermIOLog]
+LoggingEnabled=_ 0
+LogFile=_ ""
+[Breakpoints]
+Count=0
+[Aliases]
+Count=0
+SuppressDialog=0
+[DebuggerSettings]
+DisableInterruptsWhenStepping=0

+ 121 - 0
settings/STM8.dnx

@@ -0,0 +1,121 @@
+<?xml version="1.0"?>
+<settings>
+    <Stack>
+        <FillEnabled>0</FillEnabled>
+        <OverflowWarningsEnabled>1</OverflowWarningsEnabled>
+        <WarningThreshold>90</WarningThreshold>
+        <SpWarningsEnabled>1</SpWarningsEnabled>
+        <WarnLogOnly>1</WarnLogOnly>
+        <UseTrigger>1</UseTrigger>
+        <TriggerName>main</TriggerName>
+        <LimitSize>0</LimitSize>
+        <ByteLimit>50</ByteLimit>
+    </Stack>
+    <DebugChecksum>
+        <Checksum>1053309614</Checksum>
+    </DebugChecksum>
+    <CallStack>
+        <ShowArgs>0</ShowArgs>
+    </CallStack>
+    <Disassembly>
+        <MixedMode>1</MixedMode>
+    </Disassembly>
+    <SfrWindow>
+        <Show>0 1</Show>
+        <Sort>4 0</Sort>
+    </SfrWindow>
+    <CodeCoverage>
+        <Enabled>_ 0</Enabled>
+    </CodeCoverage>
+    <CallStackLog>
+        <Enabled>0</Enabled>
+    </CallStackLog>
+    <DriverProfiling>
+        <Enabled>0</Enabled>
+        <Mode>1</Mode>
+        <Graph>0</Graph>
+        <Symbiont>0</Symbiont>
+        <Exclusions />
+    </DriverProfiling>
+    <InterruptLog>
+        <LogEnabled>0</LogEnabled>
+        <SumEnabled>0</SumEnabled>
+        <GraphEnabled>0</GraphEnabled>
+        <ShowTimeLog>1</ShowTimeLog>
+        <ShowTimeSum>1</ShowTimeSum>
+        <SumSortOrder>0</SumSortOrder>
+    </InterruptLog>
+    <DataLog>
+        <LogEnabled>0</LogEnabled>
+        <SumEnabled>0</SumEnabled>
+        <GraphEnabled>0</GraphEnabled>
+        <ShowTimeLog>1</ShowTimeLog>
+        <ShowTimeSum>1</ShowTimeSum>
+    </DataLog>
+    <Breakpoints2>
+        <Count>0</Count>
+    </Breakpoints2>
+    <Interrupts>
+        <Enabled>1</Enabled>
+    </Interrupts>
+    <MemoryMap>
+        <Enabled>0</Enabled>
+        <Base>0</Base>
+        <UseAuto>0</UseAuto>
+        <TypeViolation>1</TypeViolation>
+        <UnspecRange>1</UnspecRange>
+        <ActionState>1</ActionState>
+    </MemoryMap>
+    <Trace1>
+        <Enabled>0</Enabled>
+        <ShowSource>1</ShowSource>
+    </Trace1>
+    <Simulator>
+        <Freq>16000000</Freq>
+    </Simulator>
+    <BreakpointUsageDialog>
+        <Placement>_ 738 379 1183 662</Placement>
+    </BreakpointUsageDialog>
+    <RegisterFilter>
+        <FilePath>_ ""</FilePath>
+        <UseFilter>_ 0</UseFilter>
+    </RegisterFilter>
+    <array_types>
+        <Fmt0>unsigned char[10]	4	0</Fmt0>
+        <Fmt1>unsigned char[3]	4	0</Fmt1>
+    </array_types>
+    <watch_formats>
+        <Fmt0>{W}1:BUS_Rev_Cmd	4	2</Fmt0>
+        <Fmt1>{W}1:BUS_SendInex	2	0</Fmt1>
+        <Fmt2>{W}1:Bus_SendLength	3	0</Fmt2>
+        <Fmt3>{W}1:Ledswitch	4	0</Fmt3>
+        <Fmt4>{W}1:i	4	0</Fmt4>
+    </watch_formats>
+    <DataSample>
+        <LogEnabled>0</LogEnabled>
+        <GraphEnabled>0</GraphEnabled>
+        <ShowTimeLog>1</ShowTimeLog>
+        <ShowTimeSum>1</ShowTimeSum>
+    </DataSample>
+    <Log_file>
+        <LoggingEnabled>_ 0</LoggingEnabled>
+        <LogFile>_ ""</LogFile>
+        <Category>_ 0</Category>
+    </Log_file>
+    <TermIOLog>
+        <LoggingEnabled>_ 0</LoggingEnabled>
+        <LogFile>_ ""</LogFile>
+    </TermIOLog>
+    <Breakpoints>
+        <Bp0>_ "STD_CODE" "{$PROJ_DIR$\main.c}.234.1" 1 0 0 0 "" 0 ""</Bp0>
+        <Count>1</Count>
+    </Breakpoints>
+    <Aliases>
+        <Count>0</Count>
+        <SuppressDialog>0</SuppressDialog>
+    </Aliases>
+    <DebuggerSettings>
+        <DisableInterruptsWhenStepping>0</DisableInterruptsWhenStepping>
+        <LeaveTargetRunning>0</LeaveTargetRunning>
+    </DebuggerSettings>
+</settings>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 49 - 0
settings/STM8S003.wsdt


+ 2 - 0
settings/STM8S003.wspos

@@ -0,0 +1,2 @@
+[MainWindow]
+WindowPlacement=_ 240 142 1680 909 3

binární
settings/vssver.scc


+ 142 - 0
tool/MCU_STM8_WDFS_V1_19072601.hex

@@ -0,0 +1,142 @@
+:108000008200884A820088AB820088AB820088ABFD
+:10801000820088AB820088AB820088AB8200846DCE
+:10802000820088AB820088AB820088AB820088AB7C
+:10803000820088AB820088AB820088AB820088AB6C
+:10804000820088AB820088AB820088AB820088AB5C
+:10805000820088AB820088AB820088AB820088AB4C
+:10806000820088AB82008220820088AB820088ABCD
+:10807000820088AB820088AB820088AB820088AB2C
+:108080000087DE009A00120000008777000280CA95
+:108090000010000035353535353535353535353554
+:1080A00000000000000000000000000000000000D0
+:1080B0004353465332313930373236303132330060
+:0C80C00031DF0000000000000000029210
+:1080CC008D0085A93B000CAE7740BF0AAE001BBFEC
+:1080DC00083F0C8D0088A68D0088338D0087FC8DA1
+:1080EC000088768D0088618D00879F8D0086C68DF7
+:1080FC000088959A200435020010AE008A8D008508
+:10810C00E68D00872E24103D0C260C350100A5357C
+:10811C001A001135FF000C8D00832B8D0086708D9D
+:10812C000084F7C600A5A1002650C600A3A1022614
+:10813C00C972C6009FC7004ECE009F5CF6C7004FA9
+:10814C003F0020195F41B600411C0050905F61B6A2
+:10815C00006190D680B0F7B600AB01B700B600A1B5
+:10816C000F25E1350E005FA6128D0085F3C60010B9
+:10817C00A1002782350000102080C600A3A1022692
+:10818C003A72C6009FC7004ECE009F5CF6C7004FE8
+:10819C00350C0050A6038D0085F335020010350A0E
+:1081AC0000A6AE03E8BF025FBF00AE008A8D008759
+:1081BC0016AE00968D008825CC8106C600A6A100BF
+:1081CC002603CC810690AE008AAE00968D008819ED
+:1081DC00938D00872E2503CC8106AE03E8BF025F8A
+:1081EC00BF00AE008A8D008716AE00968D008825E4
+:1081FC00C600A6ABFFC700A672C6009FC7004ECE36
+:10820C00009F5CF6C7004F350C0050A6038D00850F
+:10821C00F3CC81068A84A4BF88868D0085A43500A2
+:10822C005344AE008A8D0088198D008703AE008AF6
+:10823C008D008825CE009D5D2707CE009D5ACF006E
+:10824C009DC600ABA102250F7218525DC600ABABE8
+:10825C00FFC700ABCC8326C600ABA101260B72195D
+:10826C00525D350000ABCC8326C600A4A1002603CA
+:10827C00CC8326C600ABA1002703CC8326C600A462
+:10828C00A1012613350500AB7218525DC600A4ABD4
+:10829C0001C700A4CC8326C600A4C100112455C676
+:1082AC0000A45F975A5A90AE00088D00873E41B7E4
+:1082BC000141C600A45F975A5A90AE00088D008702
+:1082CC005761B700615F41B60141D6006C5F97B64C
+:1082DC00008D00876F9FA401A1012506350200AB1C
+:1082EC002004350100AB7218525DC600A4AB01C767
+:1082FC0000A42026C60011C100A42612350000AB34
+:10830C007218525DC600A4AB01C700A4200C7219F0
+:10831C00525D350000A4350000AB8D0085CF80C6C2
+:10832C0000A1A11A2703CC83CE3500009A3500009A
+:10833C009B3500009C350000AA2059C600AA3508C0
+:10834C0000005F97B600629FC700A8C600AA350858
+:10835C0000005F97B60062C700A9C600AA5F9758D5
+:10836C00DE00121D0119A300772421C600A8905F1E
+:10837C009097C600A95F5C8D0087679F93DA009A7F
+:10838C00B700C600A85F97B600D7009AC600AAAB84
+:10839C0001C700AAC600AAA11825A0350000A1C6D5
+:1083AC00009BCB009ACB009CA40FC700A8C6009CD6
+:1083BC004EA40FC700A9C6009CA40FC7009C8D003B
+:1083CC0083CF8772C6009FC1009A260ACE009F5C9D
+:1083DC00F6C1009B2716C6009CA10E270FC6009A5B
+:1083EC00A1FF2607C6009BA1FF270187C6009C4D55
+:1083FC00276A4A27674A27644A27614A275E4A2721
+:10840C005B4A27584A27554A27524A2709A004276E
+:10841C00134A272B2046350100A5350000103500E6
+:10842C0000A6203872C6009FC7004ECE009F5CF697
+:10843C00C7004F350D0050A6038D0085F3201DC6D7
+:10844C00009BA159260E35000010350100A5351AE8
+:10845C0000112008350000A53592001135FF00A24F
+:10846C00878D008575905FC6530C5F979093934FE3
+:10847C0002C6530D905F909790BF0072BB000090A6
+:10848C0093C600A1A1002620AE00C8CF009D3500E8
+:10849C0000A272A2019190A3015D2406350200A1F5
+:1084AC00203C350000A12036C600A1A10126167281
+:1084BC00A2019190A3015D2406350200A1201F3575
+:1084CC000000A12019C600A1A11A2412C600A15FA8
+:1084DC0097581C000EFFC600A1AB01C700A13500C8
+:1084EC00530C3500530D8D00859180C6500144A46A
+:1084FC0001A1002754C600A3A1012633C600A7ABD7
+:10850C0001C700A7C600A7A1C8255DAE05DCBF0248
+:10851C005FBF00AE00928D008716AE008A8D00877B
+:10852C002E2406350200A3200A350200A3200435B0
+:10853C000000A3AE0078BF025FBF00AE008A8D00C2
+:10854C008716AE0092AC00882590AE008AAE0092E1
+:10855C008D008819938D00872E2409350100A335D1
+:10856C000000A787350000A78788A6002000887B1D
+:10857C0002887B02891E061F045F977B086B06FE30
+:10858C001F07858487891E06BF0020001E041F0656
+:10859C001E021F04855B028788A600200588A6089A
+:1085AC00200088897B04887B04891E081F045F9740
+:1085BC007B0A6B061F09FE1F071E095C5CFE1F0968
+:1085CC00858487891E06BF001E08BF0220001E037B
+:1085DC001F071E041F08855B048745080045090119
+:1085EC00450A02450B0387B7023F003F014FB70115
+:1085FC005F41B602411C004DF6A40F5F41B602412B
+:10860C001C004DF74FB70020125F41B60041D60059
+:10861C004EBB01B701B600AB01B700B600B10225E5
+:10862C00E85F41B602411C004DB6014EA4F0FA5F62
+:10863C0041B602411C004DF7C600A4A10026F93F2B
+:10864C000020165F41B60041D6004E5F41B6004196
+:10865C00D7006CB600AB01B700B600B10225E4350B
+:10866C000100A487C60010A10126057216500F87C1
+:10867C00C60010A102263E90AE008AAE008E8D0080
+:10868C008819938D00872E2430AE01F4BF025FBF92
+:10869C0000AE008A8D008716AE008E8D008825C630
+:1086AC00500F444444A401A10027057217500F87B2
+:1086BC007216500F877217500F877218500C3500B6
+:1086CC005260350052613500526235135263C65206
+:1086DC0050A48FC752503500526B350A526C35601E
+:1086EC00525BC6525DA41FC7525D721D526F721051
+:1086FC0052503580526D87AE000020006C03260965
+:10870C006C0226056C0126017C87B603EB03B703CC
+:10871C00B602E902B702B601E901B701B600F9B732
+:10872C000087908990BE00F3260590BE02E302906C
+:10873C0085875D2B06905D2B0A658750905D2B0716
+:10874C00655087905020F9905020EE905D2A029051
+:10875C00505D2B02658750659050874D2704584A11
+:10876C0026FC874D2704574A26FC8789FE90938563
+:10877C005C5C905D271C89FEBF00855C5C89FEBF3C
+:10878C0002855C5C515A92D60092D7025A2AF75154
+:10879C0020D9877213500272155002721250037254
+:1087AC001450037213500472155004350000A33595
+:1087BC000000A68790AE80802011931C0003899343
+:1087CC008D00888785928D0005909390A3809426C8
+:1087DC00E98789FE9093855C5C905D271289FEBFCA
+:1087EC0000855C5C515A926F005A2AFA5120E3873B
+:1087FC00350053033504530E35FF530F35FF53101B
+:10880C003500530C3500530D721053008789FEBF91
+:10881C00001E01EE02BF028587908990BE00FF907A
+:10882C00BE02EF02908587C650A0A4CFAA10C750F5
+:10883C00A0721F500C721E500D721E500E87AE038C
+:10884C00FF948D0088B35D27048D0087C08D008058
+:10885C00CCAC0088AF3503534735F9534835015339
+:10886C004335F953467210534087721650117216E5
+:10887C0050127217500F350200108788F6B705E6B4
+:10888C0001B706E602B7078487AE80C0CF009F35DC
+:10889C000000A58789858D0088B9351850C687AC2E
+:0F88AC000088B6AC0088A05F5C879D20FD20FE91
+:040000050000884A25
+:00000001FF

+ 7 - 0
tool/MCU_STM8_WDFS_V1_19080201.cfg

@@ -0,0 +1,7 @@
+[System]
+HexLines=12
+HexRows=8
+HexLength=4
+HexLines2=11
+HexRows2=8
+HexLength2=30

+ 139 - 0
tool/MCU_STM8_WDFS_V1_19080201.hex

@@ -0,0 +1,139 @@
+:1080000082008812820088738200887382008873DD
+:10801000820088738200887382008873820084766D
+:10802000820088738200887382008873820088735C
+:10803000820088738200887382008873820088734C
+:10804000820088738200887382008873820088733C
+:10805000820088738200887382008873820088732C
+:10806000820088738200823682008873820088735F
+:10807000820088738200887382008873820088730C
+:10808000008789009600120000008722000280CA43
+:108090000010000035353535353535353535353554
+:1080A00000000000000000000000000000000000D0
+:1080B000535A46533231393038303230313233004E
+:0C80C00031DF0000000000000000029210
+:1080CC008D0085AA3B000CAE7740BF0AAE001BBFEB
+:1080DC00083F0C8D00886E8D0087FB8D0087A78D67
+:1080EC0000883E8D0088298D00874A8D0086718D11
+:1080FC0000885D9A200435020010AE008A8D008540
+:10810C00E78D0086D924143D0C2610350100A135CD
+:10811C001A001135FF000C350000108D0083348DD2
+:10812C000087C48D0084F8C600A1A1002654C600A7
+:10813C009FA10226C572C6009BC7004ECE009B5C59
+:10814C00F6C7004F3F0020195F41B600411C00509C
+:10815C00905F61B6006190D680B0F7B600AB01B706
+:10816C0000B600A10F25E1350E005FA6128D00852B
+:10817C00F4C60010A1002603CC810235000010CCFF
+:10818C008106C6009FA102263A72C6009BC7004E0C
+:10819C00CE009B5CF6C7004F350C0050A6038D003B
+:1081AC0085F435020010350900A2AE03E8BF025F6A
+:1081BC00BF00AE008A8D0086C1AE00928D0087EDA7
+:1081CC00CC8106C6009FA103260735000010CC8188
+:1081DC0006C600A2A1002603CC810690AE008AAE92
+:1081EC0000928D0087E1938D0086D92503CC810602
+:1081FC00AE03E8BF025FBF00AE008A8D0086C1AE41
+:10820C0000928D0087EDC600A2ABFFC700A272C61C
+:10821C00009BC7004ECE009B5CF6C7004F350C0090
+:10822C0050A6038D0085F4CC81068A84A4BF888671
+:10823C008D0085A535005344AE008A8D0087E18DF5
+:10824C000086AEAE008A8D0087EDC600A7A1022580
+:10825C000F7218525DC600A7ABFFC700A7CC832FC7
+:10826C00C600A7A101260B7219525D350000A7CCE0
+:10827C00832FC600A0A1002603CC832FC600A7A184
+:10828C00002703CC832FC600A0A1012613350500BF
+:10829C00A77218525DC600A0AB01C700A0CC832FFB
+:1082AC00C600A0C100112455C600A05F975A5A9071
+:1082BC00AE00088D0086E941B70141C600A05F976A
+:1082CC005A5A90AE00088D00870261B700615F4179
+:1082DC00B60141D6006C5F97B6008D00871A9FA43B
+:1082EC0001A1012506350200A72004350100A77263
+:1082FC0018525DC600A0AB01C700A02026C6001115
+:10830C00C100A02612350000A77218525DC600A04D
+:10831C00AB01C700A0200C7219525D350000A035CE
+:10832C000000A78D0085D080C6009DA11A2703CC24
+:10833C0083D735000096350000973500009835003E
+:10834C0000A62059C600A6350800005F97B600624B
+:10835C009FC700A4C600A6350800005F97B6006250
+:10836C00C700A5C600A65F9758DE00121D0119A311
+:10837C0000772421C600A4905F9097C600A55F5C8F
+:10838C008D0087129F93DA0096B700C600A45F9702
+:10839C00B600D70096C600A6AB01C700A6C600A6BD
+:1083AC00A11825A03500009DC60097CB0096CB00E8
+:1083BC0098A40FC700A4C600984EA40FC700A5C66A
+:1083CC000098A40FC700988D0083D88772C6009BB5
+:1083DC00C10096260ACE009B5CF6C100972716C6F4
+:1083EC000098A10E270FC60096A1FF2607C600977E
+:1083FC00A1FF270187C600984D276A4A27674A279D
+:10840C00644A27614A275E4A275B4A27584A275500
+:10841C004A27524A2709A00427134A272B204635FE
+:10842C000100A135000010350000A2203872C600F2
+:10843C009BC7004ECE009B5CF6C7004F350D00501D
+:10844C00A6038D0085F4201DC60097A159260E3574
+:10845C00000010350100A1351A001120083500006C
+:10846C00A13592001135FF009E878D0085765FC681
+:10847C00530C905F9097934F02C6530D905F90975B
+:10848C0090BF0072BB0000C6009DA10026183500ED
+:10849C00009E1D0191A3015D24063502009D203F25
+:1084AC003500009D2039C6009DA10126141D0191A7
+:1084BC00A3015D24063502009D20243500009D207B
+:1084CC001EC6009DA11A2417C6009D905F90979020
+:1084DC005872A9000E90FFC6009DAB01C7009D35D8
+:1084EC0000530C3500530D8D00859280C65001440D
+:1084FC00A401A1002754C6009FA1012633C600A3E6
+:10850C00AB01C700A3C600A3A1C8255DAE07D0BFB1
+:10851C00025FBF00AE008E8D0086C1AE008A8D005A
+:10852C0086D924063502009F200A3502009F2004BC
+:10853C003500009FAE0078BF025FBF00AE008A8D91
+:10854C000086C1AE008EAC0087ED90AE008AAE0006
+:10855C008E8D0087E1938D0086D924093501009F0B
+:10856C00350000A387350000A38788A6002000886B
+:10857C007B02887B02891E061F045F977B086B06B3
+:10858C00FE1F07858487891E06BF0020001E041F5E
+:10859C00061E021F04855B028788A600200588A69C
+:1085AC0008200088897B04887B04891E081F045FCF
+:1085BC00977B0A6B061F09FE1F071E095C5CFE1FDA
+:1085CC0009858487891E06BF001E08BF0220001E75
+:1085DC00031F071E041F08855B0487450800450917
+:1085EC0001450A02450B0387B7023F003F014FB715
+:1085FC00015F41B602411C004DF6A40F5F41B6026B
+:10860C00411C004DF74FB70020125F41B60041D618
+:10861C00004EBB01B701B600AB01B700B600B1020A
+:10862C0025E85F41B602411C004DB6014EA4F0FA9C
+:10863C005F41B602411C004DF7C600A0A10026F90F
+:10864C003F0020165F41B60041D6004E5F41B60098
+:10865C0041D7006CB600AB01B700B600B10225E4FF
+:10866C00350100A0877218500C350052603500524D
+:10867C00613500526235135263C65250A48FC752F3
+:10868C00503500526B350A526C3560525BC6525DE8
+:10869C00A41FC7525D721D526F721052503580521A
+:1086AC006D87AE000020006C0326096C0226056C59
+:1086BC000126017C87B603EB03B703B602E902B7C8
+:1086CC0002B601E901B701B600F9B70087908990AD
+:1086DC00BE00F3260590BE02E3029085875D2B0653
+:1086EC00905D2B0A658750905D2B076550879050E5
+:1086FC0020F9905020EE905D2A0290505D2B02657F
+:10870C008750659050874D2704584A26FC874D2783
+:10871C0004574A26FC8789FE9093855C5C905D2704
+:10872C001C89FEBF00855C5C89FEBF02855C5C51C8
+:10873C005A92D60092D7025A2AF75120D98772132F
+:10874C0050027215500272125003721450037213BD
+:10875C005004721550043500009F350000A287901C
+:10876C00AE80802011931C000389938D00884F8567
+:10877C00928D0005909390A3809426E98789FE90B2
+:10878C0093855C5C905D271289FEBF00855C5C5113
+:10879C005A926F005A2AFA5120E387350053033559
+:1087AC0004530E35FF530F35FF53103500530C3562
+:1087BC0000530D7210530087C60010A101260572DC
+:1087CC0016500F87C60010A10226057216500F878F
+:1087DC007217500F8789FEBF001E01EE02BF028583
+:1087EC0087908990BE00FF90BE02EF02908587C6ED
+:1087FC0050A0A4CFAA10C750A0721F500C721E50CC
+:10880C000D721E500E87AE03FF948D00887B5D2782
+:10881C00048D00876B8D0080CCAC008877350353BA
+:10882C004735F953483501534335F95346721053C4
+:10883C00408772165011721650127217500F350273
+:10884C0000108788F6B705E601B706E602B707847D
+:10885C0087AE80C0CF009B350000A18789858D0035
+:10886C008881351850C687AC00887EAC0088685F5C
+:07887C005C879D20FD20FE3A
+:04000005000088125D
+:00000001FF

+ 150 - 0
tool/MCU_STM8_WDFS_V1_25012001.hex

@@ -0,0 +1,150 @@
+:10800000820088CB8200892C8200892C8200892CF6
+:108010008200892C8200892C8200892C8200859D17
+:108020008200892C8200892C8200892C8200892C74
+:108030008200892C8200892C8200892C8200892C64
+:108040008200892C8200892C8200892C8200892C54
+:108050008200892C8200892C8200892C8200892C44
+:108060008200892C8200835D8200892C8200892C09
+:108070008200892C8200892C8200892C8200892C24
+:10808000008842009C001200000087FC000280CAA9
+:108090000010000035353535353535353535353554
+:1080A00000000000000000000000000000000000D0
+:1080B000535A46533230323530313230303031005D
+:0C80C000310800000000000000000292E7
+:1080CC008D0086533B000CAEEE80BF0AAE0036BF6F
+:1080DC00083F0C8D0089278D0088B48D0088608D39
+:1080EC000088F78D0088E28D0087CB8D00871A8D74
+:1080FC000089169A200435020010AE008A8D008685
+:10810C00908D00878224143D0C2610350100A63575
+:10811C001A001135FF000C350000108D00845B8DAA
+:10812C0000887D8D00825AC600A6A1002654C60088
+:10813C009FA10226C572C600A1C7004ECE00A15C4D
+:10814C00F6C7004F3F0020195F41B600411C00509C
+:10815C00905F61B6006190D680B0F7B600AB01B706
+:10816C0000B600A10F25E1350E005FA6128D00862A
+:10817C009DC60010A1002603CC810235000010CC56
+:10818C008106C6009FA102263A72C600A1C7004E06
+:10819C00CE00A15CF6C7004F350C0050A6038D0035
+:1081AC00869D35020010350900A7AE03E8BF025FBB
+:1081BC00BF00AE008A8D00876AAE00968D0088A63F
+:1081CC00CC8106C6009FA103260735000010CC8188
+:1081DC0006C600A7A100274C90AE008AAE00968D73
+:1081EC0000889A938D008782243AAE03E8BF025F21
+:1081FC00BF00AE008A8D00876AAE00968D0088A6FF
+:10820C00C600A7ABFFC700A772C600A1C7004ECE21
+:10821C0000A15CF6C7004F350C0050A6038D0086FC
+:10822C009DCC8106C600A0A1022703CC810672C694
+:10823C0000A1C7004ECE00A15CF6C7004F35070069
+:10824C0050A6038D00869D350900A7CC8106C6502B
+:10825C000144A401A1002759C6009FA1012636C6DE
+:10826C0000A8AB01C700A8C600A8A1C82403CC83F2
+:10827C005CAE07D0BF025FBF00AE008E8D00876A78
+:10828C00AE008A8D00878224063502009F200A35B5
+:10829C0002009F20043500009FAE0078BF025FBF34
+:1082AC0000AE008A8D00876AAE008E8D0088A620F5
+:1082BC002090AE008AAE008E8D00889A938D008738
+:1082CC0082240A3501009F350000A82004350000E7
+:1082DC00A8C650104EA40FA401A1002754C600A09C
+:1082EC00A1012633C600A9AB01C700A9C600A9A1EC
+:1082FC00C8255DAE07D0BF025FBF00AE00928D00F7
+:10830C00876AAE008A8D0087822406350200A02081
+:10831C000A350200A02004350000A0AE0078BF0290
+:10832C005FBF00AE008A8D00876AAE0092AC0088F9
+:10833C00A690AE008AAE00928D00889A938D00872D
+:10834C00822409350100A0350000A987350000A959
+:10835C00878A84A4BF88868D00864E35005344AE30
+:10836C00008A8D00889A8D008757AE008A8D008810
+:10837C00A6C600ADA102250F7218525DC600ADABAA
+:10838C00FFC700ADCC8456C600ADA101260B7219F7
+:10839C00525D350000ADCC8456C600A5A100260365
+:1083AC00CC8456C600ADA1002703CC8456C600A5CC
+:1083BC00A1012613350500AD7218525DC600A5ABA0
+:1083CC0001C700A5CC8456C600A5C100112455C612
+:1083DC0000A55F975A5A90AE00088D00879241B75E
+:1083EC000141C600A55F975A5A90AE00088D0087D0
+:1083FC00AB61B700615F41B60141D6006C5F97B6C7
+:10840C00008D0087C39FA401A1012506350200AD94
+:10841C002004350100AD7218525DC600A5AB01C732
+:10842C0000A52026C60011C100A52612350000ADFE
+:10843C007218525DC600A5AB01C700A5200C7219BD
+:10844C00525D350000A5350000AD8D00867980C6E3
+:10845C0000A3A11A2703CC84FE3500009A35000036
+:10846C009B3500009C350000AC2059C600AC35088B
+:10847C0000005F97B600629FC700AAC600AC350823
+:10848C0000005F97B60062C700ABC600AC5F9758A0
+:10849C00DE00121D0119A300772421C600AA905FEB
+:1084AC009097C600AB5F5C8D0087BB9F93DA009AF8
+:1084BC00B700C600AA5F97B600D7009AC600ACAB4F
+:1084CC0001C700ACC600ACA11825A0350000A3C69E
+:1084DC00009BCB009ACB009CA40FC700AAC6009CA3
+:1084EC004EA40FC700ABC6009CA40FC7009C8D0008
+:1084FC0084FF8772C600A1C1009A260ACE00A15C37
+:10850C00F6C1009B2716C6009CA10E270FC6009A29
+:10851C00A1FF2607C6009BA1FF270187C6009C4D23
+:10852C00276A4A27674A27644A27614A275E4A27EF
+:10853C005B4A27584A27554A27524A2709A004273D
+:10854C00134A272B2046350100A6350000103500B4
+:10855C0000A7203872C600A1C7004ECE00A15CF661
+:10856C00C7004F350D0050A6038D00869D201DC6FB
+:10857C00009BA159260E35000010350100A6351AB6
+:10858C0000112008350000A63592001135FF00A41B
+:10859C00878D00861F5FC6530C905F9097934F0298
+:1085AC00C6530D905F909790BF0072BB0000C60041
+:1085BC00A3A1002618350000A41D0191A3015D2480
+:1085CC0006350200A3203F350000A32039C600A3C6
+:1085DC00A10126141D0191A3015D2406350200A3FF
+:1085EC002024350000A3201EC600A3A11A2417C600
+:1085FC0000A3905F9097905872A9000E90FFC60050
+:10860C00A3AB01C700A33500530C3500530D8D00EF
+:10861C00863B8088A6002000887B02887B02891E0E
+:10862C00061F045F977B086B06FE1F0785848789EE
+:10863C001E06BF0020001E041F061E021F04855BC1
+:10864C00028788A600200588A608200088897B045C
+:10865C00887B04891E081F045F977B0A6B061F0921
+:10866C00FE1F071E095C5CFE1F09858487891E0698
+:10867C00BF001E08BF0220001E031F071E041F0898
+:10868C00855B0487450800450901450A02450B0333
+:10869C0087B7023F003F014FB7015F41B602411C53
+:1086AC00004DF6A40F5F41B602411C004DF74FB7C9
+:1086BC000020125F41B60041D6004EBB01B701B697
+:1086CC0000AB01B700B600B10225E85F41B602412C
+:1086DC001C004DB6014EA4F0FA5F41B602411C00DD
+:1086EC004DF7C600A5A10026F93F0020165F41B644
+:1086FC000041D6004E5F41B60041D7006CB600ABCE
+:10870C0001B700B600B10225E4350100A587721847
+:10871C00500C3500526035005261350052623513F1
+:10872C005263C65250A48FC752503500526B350A53
+:10873C00526C3560525BC6525DA41FC7525D721DF0
+:10874C00526F721052503580526D87AE000020006F
+:10875C006C0326096C0226056C0126017C87B60386
+:10876C00EB03B703B602E902B702B601E901B701A0
+:10877C00B600F9B70087908990BE00F3260590BE2D
+:10878C0002E3029085875D2B06905D2B0A6587506E
+:10879C00905D2B07655087905020F9905020EE90FB
+:1087AC005D2A0290505D2B02658750659050874D75
+:1087BC002704584A26FC874D2704574A26FC877203
+:1087CC00135002721550027212500372145003723D
+:1087DC001350047215500472195011721850127201
+:1087EC001850133500009F350000A0350000A787F6
+:1087FC0089FE9093855C5C905D271C89FEBF00858B
+:10880C005C5C89FEBF02855C5C515A92D60092D7A3
+:10881C00025A2AF75120D98790AE80802011931CE0
+:10882C00000389938D00890885928D0005909390A3
+:10883C00A3809426E98789FE9093855C5C905D27E4
+:10884C001289FEBF00855C5C515A926F005A2AFA5D
+:10885C005120E387350053033504530E35FF530F76
+:10886C0035FF53103500530C3500530D7210530067
+:10887C0087C60010A10126057216500F87C600107E
+:10888C00A10226057216500F877217500F8789FEAA
+:10889C00BF001E01EE02BF028587908990BE00FFCB
+:1088AC0090BE02EF02908587C650A0A4CFAA10C735
+:1088BC0050A0721F500C721E500D721E500E87AEBF
+:1088CC0003FF948D0089345D27048D0088248D006E
+:1088DC0080CCAC0089303503534735F9534835010A
+:1088EC00534335F953467210534087721650117228
+:1088FC001650127217500F350200108788F6B70504
+:10890C00E601B706E602B7078487AE80C0CF00A1A8
+:10891C00350000A68789858D00893A351850C687A1
+:10892C00AC008937AC0089215F5C879D20FD20FE5F
+:04000005000088CBA4
+:00000001FF

+ 4 - 0
tool/hexConvert.bat

@@ -0,0 +1,4 @@
+@echo off
+del STM8.hex
+copy ..\Release\Exe\STM8.hex
+pause

+ 28 - 0
tool/readme_MCU_STM8_WDFS_V1.txt

@@ -0,0 +1,28 @@
+呼叫系统模拟防水紧急按钮
+
+最后更新:
+
+烧录文件名称:MCU_STM8_WDFS_V2_25012001.hex
+更新人:dwd
+更新日期:25-01-20
+硬件版本:V2
+更新内容:
+1、增加紧急按钮的取消按键。
+
+烧录文件名称:MCU_STM8_WDFS_V1_19080201
+更新人:dwd
+更新日期:19-8-2
+硬件版本:V1
+更新内容:
+1、取消按钮指示灯闪烁,改为常亮。
+
+
+历史更新:
+
+烧录文件名称:MCU_STM8_WDFS_V1_19072601
+更新人:dwd
+更新日期:19-7-26
+硬件版本:V1
+更新内容:
+1、增加重发机制。按钮触发后,间隔1秒持续发送10次。
+2、修改BUS数据的接收范围。

binární
tool/vssver.scc


binární
tool/转换盒与子机两线通讯协议V1.9-增加紧急按钮取消.docx


binární
vssver.scc