From 9a13d65e168efc188c0817b937d93ef0b05eef46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E9=9D=92=E5=AE=87?= <10510612+xu-qingyuxx@user.noreply.gitee.com> Date: Mon, 10 Apr 2023 15:48:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0kill=E6=8C=89=E9=94=AE?= =?UTF-8?q?=E5=A4=96=E9=83=A8=E4=B8=AD=E6=96=AD=20=E5=AF=B9p10-p12?= =?UTF-8?q?=E7=9A=84=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/c_cpp_properties.json | 39 + .vscode/keil-assistant.log | 8 + .vscode/settings.json | 9 + .vscode/uv4.log | 10 + .vscode/uv4.log.lock | 1 + Listings/Exti.lst | 174 ++ Listings/GPIO.lst | 169 ++ Listings/STARTUP.lst | 253 +++ Listings/kill_control.m51 | 707 +++++++ Listings/main.lst | 52 + Listings/timer.lst | 210 +++ Objects/Exti.__i | 1 + Objects/Exti.obj | Bin 0 -> 109866 bytes Objects/GPIO.__i | 1 + Objects/GPIO.obj | Bin 0 -> 110035 bytes Objects/STARTUP.obj | Bin 0 -> 819 bytes Objects/kill_control | Bin 0 -> 435048 bytes Objects/kill_control.LIB | Bin 0 -> 11277 bytes Objects/kill_control.__b | 7 + Objects/kill_control.build_log.htm | 37 + Objects/kill_control.hex | 163 ++ Objects/kill_control.lnp | 7 + Objects/main.__i | 1 + Objects/main.obj | Bin 0 -> 105246 bytes Objects/timer.__i | 1 + Objects/timer.obj | Bin 0 -> 111985 bytes STARTUP.A51 | 198 ++ kill_control.uvgui.User | 1914 +++++++++++++++++++ kill_control.uvopt | 241 +++ kill_control.uvproj | 415 +++++ mycode/Exti.c | 143 ++ mycode/GPIO.c | 137 ++ mycode/main.c | 28 + mycode/timer.c | 176 ++ myinc/Exti.h | 38 + myinc/GPIO.h | 53 + myinc/STC8xxxx.H | 2747 ++++++++++++++++++++++++++++ myinc/config.h | 33 + myinc/timer.h | 47 + 39 files changed, 8020 insertions(+) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/keil-assistant.log create mode 100644 .vscode/settings.json create mode 100644 .vscode/uv4.log create mode 100644 .vscode/uv4.log.lock create mode 100644 Listings/Exti.lst create mode 100644 Listings/GPIO.lst create mode 100644 Listings/STARTUP.lst create mode 100644 Listings/kill_control.m51 create mode 100644 Listings/main.lst create mode 100644 Listings/timer.lst create mode 100644 Objects/Exti.__i create mode 100644 Objects/Exti.obj create mode 100644 Objects/GPIO.__i create mode 100644 Objects/GPIO.obj create mode 100644 Objects/STARTUP.obj create mode 100644 Objects/kill_control create mode 100644 Objects/kill_control.LIB create mode 100644 Objects/kill_control.__b create mode 100644 Objects/kill_control.build_log.htm create mode 100644 Objects/kill_control.hex create mode 100644 Objects/kill_control.lnp create mode 100644 Objects/main.__i create mode 100644 Objects/main.obj create mode 100644 Objects/timer.__i create mode 100644 Objects/timer.obj create mode 100644 STARTUP.A51 create mode 100644 kill_control.uvgui.User create mode 100644 kill_control.uvopt create mode 100644 kill_control.uvproj create mode 100644 mycode/Exti.c create mode 100644 mycode/GPIO.c create mode 100644 mycode/main.c create mode 100644 mycode/timer.c create mode 100644 myinc/Exti.h create mode 100644 myinc/GPIO.h create mode 100644 myinc/STC8xxxx.H create mode 100644 myinc/config.h create mode 100644 myinc/timer.h diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..b0a6341 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,39 @@ +{ + "configurations": [ + { + "name": "Target 1", + "includePath": [ + "d:\\Users\\User\\Documents\\peek250kill control\\myinc", + "D:\\Keil_v5\\C51\\INC", + "d:\\Users\\User\\Documents\\peek250kill control", + "d:\\Users\\User\\Documents\\peek250kill control\\mycode" + ], + "defines": [ + "__C51__", + "__VSCODE_C51__", + "reentrant=", + "compact=", + "small=", + "large=", + "data=", + "idata=", + "pdata=", + "bdata=", + "xdata=", + "code=", + "bit=char", + "sbit=char", + "sfr=char", + "sfr16=int", + "sfr32=int", + "interrupt=", + "using=", + "_at_=", + "_priority_=", + "_task_=" + ], + "intelliSenseMode": "${default}" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/keil-assistant.log b/.vscode/keil-assistant.log new file mode 100644 index 0000000..be2a400 --- /dev/null +++ b/.vscode/keil-assistant.log @@ -0,0 +1,8 @@ +[info] Log at : 2023/4/10|15:03:01|GMT+0800 + +[info] Log at : 2023/4/10|15:03:11|GMT+0800 + +[info] Log at : 2023/4/10|15:46:14|GMT+0800 + +[info] Log at : 2023/4/10|15:46:58|GMT+0800 + diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..26f6d05 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "C_Cpp.errorSquiggles": "disabled", + "files.associations": { + "timer.h": "c", + "exti.h": "c", + "gpio.h": "c", + "config.h": "c" + } +} \ No newline at end of file diff --git a/.vscode/uv4.log b/.vscode/uv4.log new file mode 100644 index 0000000..7c98c7b --- /dev/null +++ b/.vscode/uv4.log @@ -0,0 +1,10 @@ +Build target 'Target 1' +compiling Exti.c... +compiling GPIO.c... +compiling main.c... +compiling timer.c... +linking... +Program Size: data=18.0 xdata=0 code=2183 +creating hex file from ".\Objects\kill_control"... +".\Objects\kill_control" - 0 Error(s), 0 Warning(s). +Build Time Elapsed: 00:00:00 diff --git a/.vscode/uv4.log.lock b/.vscode/uv4.log.lock new file mode 100644 index 0000000..85095db --- /dev/null +++ b/.vscode/uv4.log.lock @@ -0,0 +1 @@ +2023/4/10 15:47:04 \ No newline at end of file diff --git a/Listings/Exti.lst b/Listings/Exti.lst new file mode 100644 index 0000000..d21a1f4 --- /dev/null +++ b/Listings/Exti.lst @@ -0,0 +1,174 @@ +C51 COMPILER V9.60.0.0 EXTI 04/10/2023 15:47:03 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE EXTI +OBJECT MODULE PLACED IN .\Objects\Exti.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\Exti.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEN + -D PRINT(.\Listings\Exti.lst) TABS(2) OBJECT(.\Objects\Exti.obj) + +line level source + + 1 /*---------------------------------------------------------------------*/ + 2 /* --- STC MCU Limited ------------------------------------------------*/ + 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ + 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ + 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ + 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ + 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ + 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ + 9 /* --- QQ: 800003751 -------------------------------------------------*/ + 10 /* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ + 11 /*---------------------------------------------------------------------*/ + 12 + 13 /************* ¹¦ÄÜ˵Ã÷ ************** + 14 + 15 ±¾ÎļþΪSTC8ϵÁеÄÍâÖжϳõʼ»¯ºÍÖжϳÌÐò,Óû§¿ÉÒÔÔÚÕâ¸öÎļþÖÐÐÞ¸Ä×Ô¼ºÐèÒªµÄÖжϳÌÐò. + 16 + 17 ******************************************/ + 18 + 19 #include "Exti.h" + 20 + 21 /************* Íⲿº¯ÊýºÍ±äÁ¿ÉùÃ÷ *****************/ + 22 + 23 /********************* INT0ÖжϺ¯Êý *************************/ + 24 void Ext_INT0(void) interrupt INT0_VECTOR // ½øÖжÏʱÒѾ­Çå³ý±êÖ¾ + 25 { + 26 1 if (kill_gpio) + 27 1 { + 28 2 if (KILL_time == 0) + 29 2 { + 30 3 power1_gpio = !power1_gpio; + 31 3 power2_gpio = !power2_gpio; + 32 3 power3_gpio = !power3_gpio; + 33 3 } + 34 2 } + 35 1 else + 36 1 { + 37 2 KILL_time = 50; + 38 2 } + 39 1 } + 40 + 41 /********************* INT1ÖжϺ¯Êý *************************/ + 42 void Ext_INT1(void) interrupt INT1_VECTOR // ½øÖжÏʱÒѾ­Çå³ý±êÖ¾ + 43 { + 44 1 } + 45 + 46 /********************* INT2ÖжϺ¯Êý *************************/ + 47 void Ext_INT2(void) interrupt INT2_VECTOR // + 48 { + 49 1 } + 50 + 51 /********************* INT3ÖжϺ¯Êý *************************/ + 52 void Ext_INT3(void) interrupt INT3_VECTOR + 53 { + 54 1 } + C51 COMPILER V9.60.0.0 EXTI 04/10/2023 15:47:03 PAGE 2 + + 55 + 56 /********************* INT4ÖжϺ¯Êý *************************/ + 57 void Ext_INT4(void) interrupt INT4_VECTOR + 58 { + 59 1 } + 60 + 61 //======================================================================== + 62 // º¯Êý: u8 Ext_Inilize(u8 EXT, EXTI_InitTypeDef *INTx) + 63 // ÃèÊö: ÍⲿÖжϳõʼ»¯³ÌÐò. + 64 // ²ÎÊý: INTx: ½á¹¹²ÎÊý,Çë²Î¿¼Exti.hÀïµÄ¶¨Òå. + 65 // ·µ»Ø: ³É¹¦·µ»Ø0, ¿Õ²Ù×÷·µ»Ø1,´íÎó·µ»Ø2. + 66 // °æ±¾: V1.0, 2012-10-22 + 67 //======================================================================== + 68 u8 Ext_Inilize(u8 EXT, EXTI_InitTypeDef *INTx) + 69 { + 70 1 if (EXT > EXT_INT4) + 71 1 return 1; // ¿Õ²Ù×÷ + 72 1 + 73 1 if (EXT == EXT_INT0) // ÍâÖжÏ0 + 74 1 { + 75 2 IE0 = 0; // ÍâÖжÏ0±ê־λ + 76 2 if (INTx->EXTI_Interrupt == ENABLE) + 77 2 EX0 = 1; // ÔÊÐíÖÐ¶Ï + 78 2 else + 79 2 EX0 = 0; // ½ûÖ¹ÖÐ¶Ï + 80 2 if (INTx->EXTI_Priority > Priority_3) + 81 2 return 2; // ´íÎó + 82 2 INT0_Priority(INTx->EXTI_Priority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Pri + -ority_3 + 83 2 if (INTx->EXTI_Mode == EXT_MODE_Fall) + 84 2 IT0 = 1; // ϽµÑØÖÐ¶Ï + 85 2 else + 86 2 IT0 = 0; // ÉÏÉý,ϽµÑØÖÐ¶Ï + 87 2 return 0; // ³É¹¦ + 88 2 } + 89 1 + 90 1 if (EXT == EXT_INT1) // ÍâÖжÏ1 + 91 1 { + 92 2 IE1 = 0; // ÍâÖжÏ1±ê־λ + 93 2 if (INTx->EXTI_Interrupt == ENABLE) + 94 2 EX1 = 1; // ÔÊÐíÖÐ¶Ï + 95 2 else + 96 2 EX1 = 0; // ½ûÖ¹ÖÐ¶Ï + 97 2 if (INTx->EXTI_Priority > Priority_3) + 98 2 return 2; // ´íÎó + 99 2 INT1_Priority(INTx->EXTI_Priority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Pri + -ority_3 + 100 2 if (INTx->EXTI_Mode == EXT_MODE_Fall) + 101 2 IT1 = 1; // ϽµÑØÖÐ¶Ï + 102 2 else + 103 2 IT1 = 0; // ÉÏÉý,ϽµÑØÖÐ¶Ï + 104 2 return 0; // ³É¹¦ + 105 2 } + 106 1 + 107 1 if (EXT == EXT_INT2) // ÍâÖжÏ2, ¹Ì¶¨ÎªÏ½µÑصÍÓÅÏȼ¶ÖÐ¶Ï + 108 1 { + 109 2 if (INTx->EXTI_Interrupt == ENABLE) + 110 2 INT_CLKO |= (1 << 4); // ÔÊÐíÖÐ¶Ï + 111 2 else + 112 2 INT_CLKO &= ~(1 << 4); // ½ûÖ¹ÖÐ¶Ï + 113 2 return 0; // ³É¹¦ + 114 2 } + C51 COMPILER V9.60.0.0 EXTI 04/10/2023 15:47:03 PAGE 3 + + 115 1 + 116 1 if (EXT == EXT_INT3) // ÍâÖжÏ3, ¹Ì¶¨ÎªÏ½µÑصÍÓÅÏȼ¶ÖÐ¶Ï + 117 1 { + 118 2 if (INTx->EXTI_Interrupt == ENABLE) + 119 2 INT_CLKO |= (1 << 5); // ÔÊÐíÖÐ¶Ï + 120 2 else + 121 2 INT_CLKO &= ~(1 << 5); // ½ûÖ¹ÖÐ¶Ï + 122 2 return 0; // ³É¹¦ + 123 2 } + 124 1 + 125 1 if (EXT == EXT_INT4) // ÍâÖжÏ4, ¹Ì¶¨ÎªÏ½µÑصÍÓÅÏȼ¶ÖÐ¶Ï + 126 1 { + 127 2 if (INTx->EXTI_Interrupt == ENABLE) + 128 2 INT_CLKO |= (1 << 6); // ÔÊÐíÖÐ¶Ï + 129 2 else + 130 2 INT_CLKO &= ~(1 << 6); // ½ûÖ¹ÖÐ¶Ï + 131 2 return 0; // ³É¹¦ + 132 2 } + 133 1 return 2; // ʧ°Ü + 134 1 } + 135 void Exti_config(void) + 136 { + 137 1 EXTI_InitTypeDef Exti_InitStructure; // ½á¹¹¶¨Òå + 138 1 + 139 1 Exti_InitStructure.EXTI_Interrupt = ENABLE; // ÖжÏʹÄÜ, ENABLE»òDISABLE + 140 1 Exti_InitStructure.EXTI_Mode = EXT_MODE_RiseFall; // ÖжÏģʽ, EXT_MODE_RiseFall,EXT_MODE_Fall + 141 1 Exti_InitStructure.EXTI_Priority = Priority_0; // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Prio + -rity_2,Priority_3 + 142 1 Ext_Inilize(EXT_INT0, &Exti_InitStructure); // ³õʼ»¯ + 143 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 340 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 3 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/GPIO.lst b/Listings/GPIO.lst new file mode 100644 index 0000000..37fa8d2 --- /dev/null +++ b/Listings/GPIO.lst @@ -0,0 +1,169 @@ +C51 COMPILER V9.60.0.0 GPIO 04/10/2023 15:47:03 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE GPIO +OBJECT MODULE PLACED IN .\Objects\GPIO.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\GPIO.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEN + -D PRINT(.\Listings\GPIO.lst) TABS(2) OBJECT(.\Objects\GPIO.obj) + +line level source + + 1 /*---------------------------------------------------------------------*/ + 2 /* --- STC MCU Limited ------------------------------------------------*/ + 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ + 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ + 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ + 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ + 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ + 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ + 9 /* --- QQ: 800003751 -------------------------------------------------*/ + 10 /* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ + 11 /*---------------------------------------------------------------------*/ + 12 + 13 /*************** ¹¦ÄÜ˵Ã÷ **************** + 14 + 15 ±¾ÎļþΪSTC8ϵÁеĶ˿ڳõʼ»¯³ÌÐò,Óû§¼¸ºõ¿ÉÒÔ²»ÐÞ¸ÄÕâ¸ö³ÌÐò. + 16 + 17 ******************************************/ + 18 + 19 #include "GPIO.h" + 20 + 21 //======================================================================== + 22 // º¯Êý: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) + 23 // ÃèÊö: ³õʼ»¯IO¿Ú. + 24 // ²ÎÊý: GPIOx: ½á¹¹²ÎÊý,Çë²Î¿¼timer.hÀïµÄ¶¨Òå. + 25 // ·µ»Ø: ³É¹¦·µ»Ø0, ¿Õ²Ù×÷·µ»Ø1,´íÎó·µ»Ø2. + 26 // °æ±¾: V1.0, 2012-10-22 + 27 //======================================================================== + 28 u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) + 29 { + 30 1 if (GPIO > GPIO_P7) + 31 1 return 1; // ¿Õ²Ù×÷ + 32 1 if (GPIOx->Mode > GPIO_OUT_PP) + 33 1 return 2; // ´íÎó + 34 1 if (GPIO == GPIO_P0) + 35 1 { + 36 2 if (GPIOx->Mode == GPIO_PullUp) + 37 2 P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + 38 2 if (GPIOx->Mode == GPIO_HighZ) + 39 2 P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + 40 2 if (GPIOx->Mode == GPIO_OUT_OD) + 41 2 P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + 42 2 if (GPIOx->Mode == GPIO_OUT_PP) + 43 2 P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + 44 2 } + 45 1 if (GPIO == GPIO_P1) + 46 1 { + 47 2 if (GPIOx->Mode == GPIO_PullUp) + 48 2 P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + 49 2 if (GPIOx->Mode == GPIO_HighZ) + 50 2 P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + 51 2 if (GPIOx->Mode == GPIO_OUT_OD) + 52 2 P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + 53 2 if (GPIOx->Mode == GPIO_OUT_PP) + 54 2 P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + C51 COMPILER V9.60.0.0 GPIO 04/10/2023 15:47:03 PAGE 2 + + 55 2 } + 56 1 if (GPIO == GPIO_P2) + 57 1 { + 58 2 if (GPIOx->Mode == GPIO_PullUp) + 59 2 P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + 60 2 if (GPIOx->Mode == GPIO_HighZ) + 61 2 P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + 62 2 if (GPIOx->Mode == GPIO_OUT_OD) + 63 2 P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + 64 2 if (GPIOx->Mode == GPIO_OUT_PP) + 65 2 P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + 66 2 } + 67 1 if (GPIO == GPIO_P3) + 68 1 { + 69 2 if (GPIOx->Mode == GPIO_PullUp) + 70 2 P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + 71 2 if (GPIOx->Mode == GPIO_HighZ) + 72 2 P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + 73 2 if (GPIOx->Mode == GPIO_OUT_OD) + 74 2 P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + 75 2 if (GPIOx->Mode == GPIO_OUT_PP) + 76 2 P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + 77 2 } + 78 1 if (GPIO == GPIO_P4) + 79 1 { + 80 2 if (GPIOx->Mode == GPIO_PullUp) + 81 2 P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + 82 2 if (GPIOx->Mode == GPIO_HighZ) + 83 2 P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + 84 2 if (GPIOx->Mode == GPIO_OUT_OD) + 85 2 P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + 86 2 if (GPIOx->Mode == GPIO_OUT_PP) + 87 2 P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + 88 2 } + 89 1 if (GPIO == GPIO_P5) + 90 1 { + 91 2 if (GPIOx->Mode == GPIO_PullUp) + 92 2 P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + 93 2 if (GPIOx->Mode == GPIO_HighZ) + 94 2 P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + 95 2 if (GPIOx->Mode == GPIO_OUT_OD) + 96 2 P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + 97 2 if (GPIOx->Mode == GPIO_OUT_PP) + 98 2 P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + 99 2 } + 100 1 if (GPIO == GPIO_P6) + 101 1 { + 102 2 if (GPIOx->Mode == GPIO_PullUp) + 103 2 P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + 104 2 if (GPIOx->Mode == GPIO_HighZ) + 105 2 P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + 106 2 if (GPIOx->Mode == GPIO_OUT_OD) + 107 2 P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + 108 2 if (GPIOx->Mode == GPIO_OUT_PP) + 109 2 P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + 110 2 } + 111 1 if (GPIO == GPIO_P7) + 112 1 { + 113 2 if (GPIOx->Mode == GPIO_PullUp) + 114 2 P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + 115 2 if (GPIOx->Mode == GPIO_HighZ) + 116 2 P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + C51 COMPILER V9.60.0.0 GPIO 04/10/2023 15:47:03 PAGE 3 + + 117 2 if (GPIOx->Mode == GPIO_OUT_OD) + 118 2 P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + 119 2 if (GPIOx->Mode == GPIO_OUT_PP) + 120 2 P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + 121 2 } + 122 1 return 0; // ³É¹¦ + 123 1 } + 124 void GPIO_config(void) + 125 { + 126 1 GPIO_InitTypeDef GPIO_InitStructure; // ½á¹¹¶¨Òå + 127 1 + 128 1 GPIO_InitStructure.Pin = GPIO_Pin_2; // Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_ + -Pin_7, »ò²Ù×÷ + 129 1 GPIO_InitStructure.Mode = GPIO_PullUp; // Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,G + -PIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + 130 1 GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); // ³õʼ»¯ + 131 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; // Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_ + -Pin_7, »ò²Ù×÷ + 132 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; // Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,G + -PIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + 133 1 GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // ³õʼ»¯ + 134 1 power1_gpio = 0; + 135 1 power2_gpio = 0; + 136 1 power3_gpio = 0; + 137 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 665 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 2 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/STARTUP.lst b/Listings/STARTUP.lst new file mode 100644 index 0000000..d72e3cc --- /dev/null +++ b/Listings/STARTUP.lst @@ -0,0 +1,253 @@ +A51 MACRO ASSEMBLER STARTUP 04/10/2023 14:45:02 PAGE 1 + + +MACRO ASSEMBLER A51 V8.2.7.0 +OBJECT MODULE PLACED IN .\Objects\STARTUP.obj +ASSEMBLER INVOKED BY: d:\Keil_v5\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Obj + ects\STARTUP.obj) EP + +LOC OBJ LINE SOURCE + + 1 $nomod51 + 2 ;------------------------------------------------------------------------------ + 3 ; This file is part of the C51 Compiler package + 4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. + 5 ; Version 8.01 + 6 ; + 7 ; *** <<< Use Configuration Wizard in Context Menu >>> *** + 8 ;------------------------------------------------------------------------------ + 9 ; STARTUP.A51: This code is executed after processor reset. + 10 ; + 11 ; To translate this file use A51 with the following invocation: + 12 ; + 13 ; A51 STARTUP.A51 + 14 ; + 15 ; To link the modified STARTUP.OBJ file to your application use the following + 16 ; Lx51 invocation: + 17 ; + 18 ; Lx51 your object file list, STARTUP.OBJ controls + 19 ; + 20 ;------------------------------------------------------------------------------ + 21 ; + 22 ; User-defined Power-On Initialization of Memory + 23 ; + 24 ; With the following EQU statements the initialization of memory + 25 ; at processor reset can be defined: + 26 ; + 27 ; IDATALEN: IDATA memory size <0x0-0x100> + 28 ; Note: The absolute start-address of IDATA memory is always 0 + 29 ; The IDATA space overlaps physically the DATA and BIT areas. + 0080 30 IDATALEN EQU 80H + 31 ; + 32 ; XDATASTART: XDATA memory start address <0x0-0xFFFF> + 33 ; The absolute start address of XDATA memory + 0000 34 XDATASTART EQU 0 + 35 ; + 36 ; XDATALEN: XDATA memory size <0x0-0xFFFF> + 37 ; The length of XDATA memory in bytes. + 0000 38 XDATALEN EQU 0 + 39 ; + 40 ; PDATASTART: PDATA memory start address <0x0-0xFFFF> + 41 ; The absolute start address of PDATA memory + 0000 42 PDATASTART EQU 0H + 43 ; + 44 ; PDATALEN: PDATA memory size <0x0-0xFF> + 45 ; The length of PDATA memory in bytes. + 0000 46 PDATALEN EQU 0H + 47 ; + 48 ; + 49 ;------------------------------------------------------------------------------ + 50 ; + 51 ; Reentrant Stack Initialization + 52 ; + 53 ; The following EQU statements define the stack pointer for reentrant + 54 ; functions and initialized it: + 55 ; + 56 ; Stack Space for reentrant functions in the SMALL model. + 57 ; IBPSTACK: Enable SMALL model reentrant stack + A51 MACRO ASSEMBLER STARTUP 04/10/2023 14:45:02 PAGE 2 + + 58 ; Stack space for reentrant functions in the SMALL model. + 0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used. + 60 ; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> + 61 ; Set the top of the stack to the highest location. + 0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 63 ; + 64 ; + 65 ; Stack Space for reentrant functions in the LARGE model. + 66 ; XBPSTACK: Enable LARGE model reentrant stack + 67 ; Stack space for reentrant functions in the LARGE model. + 0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used. + 69 ; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> + 70 ; Set the top of the stack to the highest location. + 0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 + 72 ; + 73 ; + 74 ; Stack Space for reentrant functions in the COMPACT model. + 75 ; PBPSTACK: Enable COMPACT model reentrant stack + 76 ; Stack space for reentrant functions in the COMPACT model. + 0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. + 78 ; + 79 ; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> + 80 ; Set the top of the stack to the highest location. + 0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 82 ; + 83 ; + 84 ;------------------------------------------------------------------------------ + 85 ; + 86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM + 87 ; Compact Model Page Definition + 88 ; + 89 ; Define the XDATA page used for PDATA variables. + 90 ; PPAGE must conform with the PPAGE set in the linker invocation. + 91 ; + 92 ; Enable pdata memory page initalization + 0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. + 94 ; + 95 ; PPAGE number <0x0-0xFF> + 96 ; uppermost 256-byte address of the page used for PDATA variables. + 0000 97 PPAGE EQU 0 + 98 ; + 99 ; SFR address which supplies uppermost address byte <0x0-0xFF> + 100 ; most 8051 variants use P2 as uppermost address byte + 00A0 101 PPAGE_SFR DATA 0A0H + 102 ; + 103 ; + 104 ;------------------------------------------------------------------------------ + 105 + 106 ; Standard SFR Symbols + 00E0 107 ACC DATA 0E0H + 00F0 108 B DATA 0F0H + 0081 109 SP DATA 81H + 0082 110 DPL DATA 82H + 0083 111 DPH DATA 83H + 112 + 113 NAME ?C_STARTUP + 114 + 115 + 116 ?C_C51STARTUP SEGMENT CODE + 117 ?STACK SEGMENT IDATA + 118 +---- 119 RSEG ?STACK +0000 120 DS 1 + 121 + 122 EXTRN CODE (?C_START) + 123 PUBLIC ?C_STARTUP + A51 MACRO ASSEMBLER STARTUP 04/10/2023 14:45:02 PAGE 3 + + 124 +---- 125 CSEG AT 0 +0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1 + 127 +---- 128 RSEG ?C_C51STARTUP + 129 +0000 130 STARTUP1: + 131 + 132 IF IDATALEN <> 0 +0000 787F 133 MOV R0,#IDATALEN - 1 +0002 E4 134 CLR A +0003 F6 135 IDATALOOP: MOV @R0,A +0004 D8FD 136 DJNZ R0,IDATALOOP + 137 ENDIF + 138 + 139 IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A + XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP + ENDIF + 153 + 154 IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE + ENDIF + 157 + 158 IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A + PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP + ENDIF + 166 + 167 IF IBPSTACK <> 0 + EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP + ENDIF + 172 + 173 IF XBPSTACK <> 0 + EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP + ENDIF + 179 + 180 IF PBPSTACK <> 0 + EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP + ENDIF + 184 +0006 758100 F 185 MOV SP,#?STACK-1 + 186 + 187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4 + 188 ; Code Banking + 189 ; Select Bank 0 for L51_BANK.A51 Mode 4 + A51 MACRO ASSEMBLER STARTUP 04/10/2023 14:45:02 PAGE 4 + + 190 + + + + + 195 ; +0009 020000 F 196 LJMP ?C_START + 197 + 198 END + A51 MACRO ASSEMBLER STARTUP 04/10/2023 14:45:02 PAGE 5 + +SYMBOL TABLE LISTING +------ ----- ------- + + +N A M E T Y P E V A L U E ATTRIBUTES + +?C_C51STARTUP. . . C SEG 000CH REL=UNIT +?C_START . . . . . C ADDR ----- EXT +?C_STARTUP . . . . C ADDR 0000H A +?STACK . . . . . . I SEG 0001H REL=UNIT +ACC. . . . . . . . D ADDR 00E0H A +B. . . . . . . . . D ADDR 00F0H A +DPH. . . . . . . . D ADDR 0083H A +DPL. . . . . . . . D ADDR 0082H A +IBPSTACK . . . . . N NUMB 0000H A +IBPSTACKTOP. . . . N NUMB 0100H A +IDATALEN . . . . . N NUMB 0080H A +IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP +PBPSTACK . . . . . N NUMB 0000H A +PBPSTACKTOP. . . . N NUMB 0100H A +PDATALEN . . . . . N NUMB 0000H A +PDATASTART . . . . N NUMB 0000H A +PPAGE. . . . . . . N NUMB 0000H A +PPAGEENABLE. . . . N NUMB 0000H A +PPAGE_SFR. . . . . D ADDR 00A0H A +SP . . . . . . . . D ADDR 0081H A +STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP +XBPSTACK . . . . . N NUMB 0000H A +XBPSTACKTOP. . . . N NUMB 0000H A +XDATALEN . . . . . N NUMB 0000H A +XDATASTART . . . . N NUMB 0000H A + + +REGISTER BANK(S) USED: 0 + + +ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/kill_control.m51 b/Listings/kill_control.m51 new file mode 100644 index 0000000..22471f6 --- /dev/null +++ b/Listings/kill_control.m51 @@ -0,0 +1,707 @@ +BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 1 + + +BL51 BANKED LINKER/LOCATER V6.22.2.0, INVOKED BY: +D:\KEIL_V5\C51\BIN\BL51.EXE .\Objects\STARTUP.obj, .\Objects\Exti.obj, .\Objects\GPIO.obj, .\Objects\main.obj, .\Objects +>> \timer.obj TO .\Objects\kill_control PRINT (.\Listings\kill_control.m51) RAMSIZE (256) + + +MEMORY MODEL: SMALL + + +INPUT MODULES INCLUDED: + .\Objects\STARTUP.obj (?C_STARTUP) + .\Objects\Exti.obj (EXTI) + .\Objects\GPIO.obj (GPIO) + .\Objects\main.obj (MAIN) + .\Objects\timer.obj (TIMER) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C_INIT) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDPTR) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDOPTR) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?ILDOPTR) + + +LINK MAP OF MODULE: .\Objects\kill_control (?C_STARTUP) + + + TYPE BASE LENGTH RELOCATION SEGMENT NAME + ----------------------------------------------------- + + * * * * * * * D A T A M E M O R Y * * * * * * * + REG 0000H 0008H ABSOLUTE "REG BANK 0" + DATA 0008H 0008H UNIT _DATA_GROUP_ + DATA 0010H 0001H UNIT ?DT?TIMER + IDATA 0011H 0001H UNIT ?STACK + + * * * * * * * C O D E M E M O R Y * * * * * * * + CODE 0000H 0003H ABSOLUTE + CODE 0003H 0003H ABSOLUTE + CODE 0006H 0004H UNIT ?C_INITSEG + CODE 000AH 0001H UNIT ?PR?EXT_INT1?EXTI + CODE 000BH 0003H ABSOLUTE + CODE 000EH 0001H UNIT ?PR?EXT_INT2?EXTI + CODE 000FH 0001H UNIT ?PR?EXT_INT3?EXTI + CODE 0010H 0001H UNIT ?PR?EXT_INT4?EXTI + CODE 0011H 0001H UNIT ?PR?TIMER1_INT?TIMER + CODE 0012H 0001H UNIT ?PR?TIMER2_INT?TIMER + CODE 0013H 0003H ABSOLUTE + CODE 0016H 0001H UNIT ?PR?TIMER3_INT?TIMER + CODE 0017H 0001H UNIT ?PR?TIMER4_INT?TIMER + 0018H 0003H *** GAP *** + CODE 001BH 0003H ABSOLUTE + CODE 001EH 0022H UNIT ?PR?GPIO_CONFIG?GPIO + CODE 0040H 0011H UNIT ?PR?EXTI_CONFIG?EXTI + 0051H 0002H *** GAP *** + CODE 0053H 0003H ABSOLUTE + 0056H 0005H *** GAP *** + CODE 005BH 0003H ABSOLUTE + 005EH 0005H *** GAP *** + CODE 0063H 0003H ABSOLUTE + CODE 0066H 0017H UNIT ?PR?EXT_INT0?EXTI + 007DH 0006H *** GAP *** + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 2 + + + CODE 0083H 0003H ABSOLUTE + CODE 0086H 000DH UNIT ?PR?MAIN?MAIN + 0093H 0008H *** GAP *** + CODE 009BH 0003H ABSOLUTE + 009EH 0005H *** GAP *** + CODE 00A3H 0003H ABSOLUTE + CODE 00A6H 0331H UNIT ?PR?_TIMER_INILIZE?TIMER + CODE 03D7H 0277H UNIT ?PR?_GPIO_INILIZE?GPIO + CODE 064EH 0128H UNIT ?PR?_EXT_INILIZE?EXTI + CODE 0776H 008CH UNIT ?C_C51STARTUP + CODE 0802H 007EH UNIT ?C?LIB_CODE + CODE 0880H 001EH UNIT ?PR?TIMER_CONFIG?TIMER + CODE 089EH 000BH UNIT ?PR?TIMER0_INT?TIMER + + + +OVERLAY MAP OF MODULE: .\Objects\kill_control (?C_STARTUP) + + +SEGMENT DATA_GROUP + +--> CALLED SEGMENT START LENGTH +------------------------------------------------ +?C_C51STARTUP ----- ----- + +--> ?PR?MAIN?MAIN + +--> ?C_INITSEG + +?PR?MAIN?MAIN ----- ----- + +--> ?PR?GPIO_CONFIG?GPIO + +--> ?PR?EXTI_CONFIG?EXTI + +--> ?PR?TIMER_CONFIG?TIMER + +?PR?GPIO_CONFIG?GPIO 0008H 0002H + +--> ?PR?_GPIO_INILIZE?GPIO + +?PR?EXTI_CONFIG?EXTI 0008H 0003H + +--> ?PR?_EXT_INILIZE?EXTI + +?PR?TIMER_CONFIG?TIMER 0008H 0008H + +--> ?PR?_TIMER_INILIZE?TIMER + + + +SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) + + VALUE TYPE NAME + ---------------------------------- + + ------- MODULE ?C_STARTUP + C:0776H SEGMENT ?C_C51STARTUP + I:0011H SEGMENT ?STACK + C:0000H PUBLIC ?C_STARTUP + D:00E0H SYMBOL ACC + D:00F0H SYMBOL B + D:0083H SYMBOL DPH + D:0082H SYMBOL DPL + N:0000H SYMBOL IBPSTACK + N:0100H SYMBOL IBPSTACKTOP + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 3 + + + N:0080H SYMBOL IDATALEN + C:0779H SYMBOL IDATALOOP + N:0000H SYMBOL PBPSTACK + N:0100H SYMBOL PBPSTACKTOP + N:0000H SYMBOL PDATALEN + N:0000H SYMBOL PDATASTART + N:0000H SYMBOL PPAGE + N:0000H SYMBOL PPAGEENABLE + D:00A0H SYMBOL PPAGE_SFR + D:0081H SYMBOL SP + C:0776H SYMBOL STARTUP1 + N:0000H SYMBOL XBPSTACK + N:0000H SYMBOL XBPSTACKTOP + N:0000H SYMBOL XDATALEN + N:0000H SYMBOL XDATASTART + C:0000H LINE# 126 + C:0776H LINE# 133 + C:0778H LINE# 134 + C:0779H LINE# 135 + C:077AH LINE# 136 + C:077CH LINE# 185 + C:077FH LINE# 196 + ------- ENDMOD ?C_STARTUP + + ------- MODULE EXTI + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + D:00C0H PUBLIC P4 + D:00C8H PUBLIC P5 + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + C:0066H PUBLIC Ext_INT0 + C:000AH PUBLIC Ext_INT1 + C:000EH PUBLIC Ext_INT2 + B:0090H.0 PUBLIC P10 + C:000FH PUBLIC Ext_INT3 + B:0090H.1 PUBLIC P11 + C:0010H PUBLIC Ext_INT4 + B:0090H.2 PUBLIC P12 + D:0098H PUBLIC SCON + B:00B0H.2 PUBLIC P32 + D:0088H PUBLIC TCON + B:0088H.1 PUBLIC IE0 + B:0088H.3 PUBLIC IE1 + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + B:00A8H.0 PUBLIC EX0 + B:0088H.0 PUBLIC IT0 + B:00A8H.2 PUBLIC EX1 + B:0088H.2 PUBLIC IT1 + B:00B8H.0 PUBLIC PX0 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 4 + + + B:00B8H.2 PUBLIC PX1 + D:00B7H PUBLIC IPH + C:064EH PUBLIC _Ext_Inilize + C:0040H PUBLIC Exti_config + D:008FH PUBLIC INT_CLKO + D:00D0H PUBLIC PSW + ------- PROC EXT_INT0 + C:0066H LINE# 24 + C:0068H LINE# 26 + C:006BH LINE# 27 + C:006BH LINE# 28 + C:006FH LINE# 29 + C:006FH LINE# 30 + C:0071H LINE# 31 + C:0073H LINE# 32 + C:0075H LINE# 33 + C:0075H LINE# 34 + C:0077H LINE# 36 + C:0077H LINE# 37 + C:007AH LINE# 38 + C:007AH LINE# 39 + ------- ENDPROC EXT_INT0 + ------- PROC EXT_INT1 + C:000AH LINE# 42 + C:000AH LINE# 44 + ------- ENDPROC EXT_INT1 + ------- PROC EXT_INT2 + C:000EH LINE# 47 + C:000EH LINE# 49 + ------- ENDPROC EXT_INT2 + ------- PROC EXT_INT3 + C:000FH LINE# 52 + C:000FH LINE# 54 + ------- ENDPROC EXT_INT3 + ------- PROC EXT_INT4 + C:0010H LINE# 57 + C:0010H LINE# 59 + ------- ENDPROC EXT_INT4 + ------- PROC _EXT_INILIZE + D:0007H SYMBOL EXT + D:0001H SYMBOL INTx + C:064EH LINE# 68 + C:064EH LINE# 69 + C:064EH LINE# 70 + C:0658H LINE# 71 + C:065BH LINE# 73 + C:065EH LINE# 74 + C:065EH LINE# 75 + C:0660H LINE# 76 + C:066AH LINE# 77 + C:066EH LINE# 79 + C:0670H LINE# 80 + C:0680H LINE# 81 + C:0683H LINE# 82 + C:06AFH LINE# 83 + C:06B6H LINE# 84 + C:06BAH LINE# 86 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 5 + + + C:06BCH LINE# 87 + C:06BFH LINE# 88 + C:06BFH LINE# 90 + C:06C4H LINE# 91 + C:06C4H LINE# 92 + C:06C6H LINE# 93 + C:06D0H LINE# 94 + C:06D4H LINE# 96 + C:06D6H LINE# 97 + C:06E6H LINE# 98 + C:06E9H LINE# 99 + C:0715H LINE# 100 + C:071CH LINE# 101 + C:0720H LINE# 103 + C:0722H LINE# 104 + C:0725H LINE# 105 + C:0725H LINE# 107 + C:072AH LINE# 108 + C:072AH LINE# 109 + C:0734H LINE# 110 + C:0739H LINE# 112 + C:073CH LINE# 113 + C:073FH LINE# 114 + C:073FH LINE# 116 + C:0744H LINE# 117 + C:0744H LINE# 118 + C:074EH LINE# 119 + C:0753H LINE# 121 + C:0756H LINE# 122 + C:0759H LINE# 123 + C:0759H LINE# 125 + C:075EH LINE# 126 + C:075EH LINE# 127 + C:0768H LINE# 128 + C:076DH LINE# 130 + C:0770H LINE# 131 + C:0773H LINE# 132 + C:0773H LINE# 133 + C:0775H LINE# 134 + ------- ENDPROC _EXT_INILIZE + ------- PROC EXTI_CONFIG + ------- DO + D:0008H SYMBOL Exti_InitStructure + ------- ENDDO + C:0040H LINE# 135 + C:0040H LINE# 136 + C:0040H LINE# 139 + C:0043H LINE# 140 + C:0046H LINE# 141 + C:0048H LINE# 142 + ------- ENDPROC EXTI_CONFIG + ------- ENDMOD EXTI + + ------- MODULE GPIO + C:0000H SYMBOL _ICE_DUMMY_ + D:0093H PUBLIC P0M1 + D:0092H PUBLIC P1M0 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 6 + + + D:0096H PUBLIC P2M0 + D:0091H PUBLIC P1M1 + D:0080H PUBLIC P0 + D:00B2H PUBLIC P3M0 + D:0095H PUBLIC P2M1 + D:0090H PUBLIC P1 + D:00B4H PUBLIC P4M0 + D:00B1H PUBLIC P3M1 + D:00A0H PUBLIC P2 + D:00CAH PUBLIC P5M0 + D:00B3H PUBLIC P4M1 + D:00B0H PUBLIC P3 + D:00CCH PUBLIC P6M0 + D:00C9H PUBLIC P5M1 + D:00C0H PUBLIC P4 + D:00E2H PUBLIC P7M0 + D:00CBH PUBLIC P6M1 + D:00C8H PUBLIC P5 + D:00E8H PUBLIC P6 + D:00E1H PUBLIC P7M1 + D:00F8H PUBLIC P7 + C:001EH PUBLIC GPIO_config + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + B:0090H.0 PUBLIC P10 + B:0090H.1 PUBLIC P11 + B:0090H.2 PUBLIC P12 + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + C:03D7H PUBLIC _GPIO_Inilize + D:00D0H PUBLIC PSW + D:0094H PUBLIC P0M0 + ------- PROC _GPIO_INILIZE + D:0007H SYMBOL GPIO + D:0001H SYMBOL GPIOx + C:03D7H LINE# 28 + C:03D7H LINE# 29 + C:03D7H LINE# 30 + C:03E1H LINE# 31 + C:03E4H LINE# 32 + C:03F1H LINE# 33 + C:03F4H LINE# 34 + C:03F7H LINE# 35 + C:03F7H LINE# 36 + C:03FAH LINE# 37 + C:0405H LINE# 38 + C:040CH LINE# 39 + C:0417H LINE# 40 + C:041FH LINE# 41 + C:0429H LINE# 42 + C:042EH LINE# 43 + C:043BH LINE# 44 + C:043BH LINE# 45 + C:0440H LINE# 46 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 7 + + + C:0440H LINE# 47 + C:0446H LINE# 48 + C:0451H LINE# 49 + C:0456H LINE# 50 + C:0461H LINE# 51 + C:0468H LINE# 52 + C:0472H LINE# 53 + C:0479H LINE# 54 + C:0486H LINE# 55 + C:0486H LINE# 56 + C:048BH LINE# 57 + C:048BH LINE# 58 + C:0491H LINE# 59 + C:049CH LINE# 60 + C:04A1H LINE# 61 + C:04ACH LINE# 62 + C:04B3H LINE# 63 + C:04BDH LINE# 64 + C:04C4H LINE# 65 + C:04D1H LINE# 66 + C:04D1H LINE# 67 + C:04D6H LINE# 68 + C:04D6H LINE# 69 + C:04DCH LINE# 70 + C:04E7H LINE# 71 + C:04ECH LINE# 72 + C:04F7H LINE# 73 + C:04FEH LINE# 74 + C:0508H LINE# 75 + C:050FH LINE# 76 + C:051CH LINE# 77 + C:051CH LINE# 78 + C:0521H LINE# 79 + C:0521H LINE# 80 + C:0527H LINE# 81 + C:0532H LINE# 82 + C:0537H LINE# 83 + C:0542H LINE# 84 + C:0549H LINE# 85 + C:0553H LINE# 86 + C:055AH LINE# 87 + C:0567H LINE# 88 + C:0567H LINE# 89 + C:056CH LINE# 90 + C:056CH LINE# 91 + C:0572H LINE# 92 + C:057DH LINE# 93 + C:0582H LINE# 94 + C:058DH LINE# 95 + C:0594H LINE# 96 + C:059EH LINE# 97 + C:05A5H LINE# 98 + C:05B2H LINE# 99 + C:05B2H LINE# 100 + C:05B7H LINE# 101 + C:05B7H LINE# 102 + C:05BDH LINE# 103 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 8 + + + C:05C8H LINE# 104 + C:05CDH LINE# 105 + C:05D8H LINE# 106 + C:05DFH LINE# 107 + C:05E9H LINE# 108 + C:05F0H LINE# 109 + C:05FDH LINE# 110 + C:05FDH LINE# 111 + C:0602H LINE# 112 + C:0602H LINE# 113 + C:060AH LINE# 114 + C:0615H LINE# 115 + C:061BH LINE# 116 + C:0626H LINE# 117 + C:062DH LINE# 118 + C:0637H LINE# 119 + C:063EH LINE# 120 + C:064BH LINE# 121 + C:064BH LINE# 122 + C:064DH LINE# 123 + ------- ENDPROC _GPIO_INILIZE + ------- PROC GPIO_CONFIG + ------- DO + D:0008H SYMBOL GPIO_InitStructure + ------- ENDDO + C:001EH LINE# 124 + C:001EH LINE# 125 + C:001EH LINE# 128 + C:0021H LINE# 129 + C:0024H LINE# 130 + C:002EH LINE# 131 + C:0031H LINE# 132 + C:0034H LINE# 133 + C:0039H LINE# 134 + C:003BH LINE# 135 + C:003DH LINE# 136 + C:003FH LINE# 137 + ------- ENDPROC GPIO_CONFIG + ------- ENDMOD GPIO + + ------- MODULE MAIN + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + D:00C0H PUBLIC P4 + D:00C8H PUBLIC P5 + B:00A8H.7 PUBLIC EA + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + C:0086H PUBLIC main + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 9 + + + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + D:00D0H PUBLIC PSW + ------- PROC MAIN + C:0086H LINE# 19 + C:0086H LINE# 20 + C:0086H LINE# 21 + C:0089H LINE# 22 + C:008CH LINE# 23 + C:008FH LINE# 24 + C:0091H LINE# 25 + C:0091H LINE# 26 + C:0091H LINE# 27 + ------- ENDPROC MAIN + ------- ENDMOD MAIN + + ------- MODULE TIMER + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + C:089EH PUBLIC timer0_int + D:00A0H PUBLIC P2 + C:0011H PUBLIC timer1_int + D:00B0H PUBLIC P3 + C:0012H PUBLIC timer2_int + D:00C0H PUBLIC P4 + C:0016H PUBLIC timer3_int + D:00C8H PUBLIC P5 + C:0017H PUBLIC timer4_int + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + D:0098H PUBLIC SCON + D:0089H PUBLIC TMOD + D:0088H PUBLIC TCON + C:00A6H PUBLIC _Timer_Inilize + D:0010H PUBLIC KILL_time + D:00AFH PUBLIC IE2 + D:00F0H PUBLIC B + D:008EH PUBLIC AUXR + D:00E0H PUBLIC ACC + B:00A8H.1 PUBLIC ET0 + B:00A8H.3 PUBLIC ET1 + D:008CH PUBLIC TH0 + D:008DH PUBLIC TH1 + D:00D6H PUBLIC TH2 + D:00D4H PUBLIC TH3 + D:00D2H PUBLIC TH4 + D:008AH PUBLIC TL0 + D:008BH PUBLIC TL1 + D:00D7H PUBLIC TL2 + D:00D5H PUBLIC TL3 + B:00B8H.1 PUBLIC PT0 + D:00D3H PUBLIC TL4 + B:00B8H.3 PUBLIC PT1 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 10 + + + B:0088H.4 PUBLIC TR0 + B:0088H.6 PUBLIC TR1 + D:00D1H PUBLIC T4T3M + C:0880H PUBLIC Timer_config + D:00B7H PUBLIC IPH + D:008FH PUBLIC INT_CLKO + D:00D0H PUBLIC PSW + ------- PROC TIMER0_INT + C:089EH LINE# 22 + C:08A0H LINE# 24 + C:08A4H LINE# 25 + C:08A4H LINE# 26 + C:08A6H LINE# 27 + C:08A6H LINE# 28 + ------- ENDPROC TIMER0_INT + ------- PROC TIMER1_INT + C:0011H LINE# 31 + C:0011H LINE# 34 + ------- ENDPROC TIMER1_INT + ------- PROC TIMER2_INT + C:0012H LINE# 37 + C:0012H LINE# 40 + ------- ENDPROC TIMER2_INT + ------- PROC TIMER3_INT + C:0016H LINE# 43 + C:0016H LINE# 46 + ------- ENDPROC TIMER3_INT + ------- PROC TIMER4_INT + C:0017H LINE# 49 + C:0017H LINE# 52 + ------- ENDPROC TIMER4_INT + ------- PROC _TIMER_INILIZE + D:0005H SYMBOL TIM + D:0001H SYMBOL TIMx + C:00A6H LINE# 62 + C:00A8H LINE# 63 + C:00A8H LINE# 64 + C:00B5H LINE# 66 + C:00BBH LINE# 67 + C:00BBH LINE# 68 + C:00BDH LINE# 69 + C:00CBH LINE# 70 + C:00CDH LINE# 71 + C:00E0H LINE# 72 + C:010CH LINE# 74 + C:011CH LINE# 75 + C:0123H LINE# 76 + C:0133H LINE# 77 + C:013AH LINE# 78 + C:0145H LINE# 79 + C:0148H LINE# 80 + C:0157H LINE# 81 + C:015AH LINE# 83 + C:016CH LINE# 84 + C:0178H LINE# 85 + C:017BH LINE# 86 + C:017BH LINE# 88 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 11 + + + C:0183H LINE# 89 + C:0183H LINE# 90 + C:0185H LINE# 91 + C:0193H LINE# 92 + C:0195H LINE# 93 + C:01A8H LINE# 94 + C:01D4H LINE# 95 + C:01E4H LINE# 96 + C:01F0H LINE# 97 + C:0200H LINE# 98 + C:0207H LINE# 99 + C:0212H LINE# 100 + C:0215H LINE# 101 + C:0224H LINE# 102 + C:0227H LINE# 104 + C:0239H LINE# 105 + C:0245H LINE# 106 + C:0248H LINE# 107 + C:0248H LINE# 109 + C:024DH LINE# 110 + C:024DH LINE# 111 + C:0250H LINE# 112 + C:025FH LINE# 113 + C:0262H LINE# 114 + C:0275H LINE# 115 + C:0280H LINE# 116 + C:0287H LINE# 117 + C:0292H LINE# 118 + C:0295H LINE# 119 + C:02A4H LINE# 120 + C:02A7H LINE# 122 + C:02B9H LINE# 123 + C:02C6H LINE# 124 + C:02C9H LINE# 125 + C:02C9H LINE# 127 + C:02CEH LINE# 128 + C:02CEH LINE# 129 + C:02D1H LINE# 130 + C:02E0H LINE# 131 + C:02E3H LINE# 132 + C:02F6H LINE# 133 + C:0301H LINE# 134 + C:0308H LINE# 135 + C:0313H LINE# 136 + C:0316H LINE# 137 + C:0325H LINE# 138 + C:0328H LINE# 140 + C:033AH LINE# 141 + C:0347H LINE# 142 + C:034AH LINE# 143 + C:034AH LINE# 145 + C:0352H LINE# 146 + C:0352H LINE# 147 + C:0355H LINE# 148 + C:0364H LINE# 149 + C:0367H LINE# 150 + C:037CH LINE# 151 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 12 + + + C:0385H LINE# 152 + C:0390H LINE# 153 + C:039FH LINE# 154 + C:03A2H LINE# 155 + C:03B1H LINE# 156 + C:03B4H LINE# 158 + C:03C4H LINE# 159 + C:03D1H LINE# 160 + C:03D4H LINE# 161 + C:03D4H LINE# 162 + C:03D6H LINE# 163 + ------- ENDPROC _TIMER_INILIZE + ------- PROC TIMER_CONFIG + ------- DO + D:0008H SYMBOL TIM_InitStructure + ------- ENDDO + C:0880H LINE# 165 + C:0880H LINE# 166 + C:0880H LINE# 168 + C:0883H LINE# 169 + C:0885H LINE# 170 + C:0888H LINE# 171 + C:088AH LINE# 172 + C:088CH LINE# 173 + C:0892H LINE# 174 + C:0895H LINE# 175 + ------- ENDPROC TIMER_CONFIG + ------- ENDMOD TIMER + + ------- MODULE ?C?CLDPTR + C:0802H PUBLIC ?C?CLDPTR + ------- ENDMOD ?C?CLDPTR + + ------- MODULE ?C?CLDOPTR + C:081BH PUBLIC ?C?CLDOPTR + ------- ENDMOD ?C?CLDOPTR + + ------- MODULE ?C?ILDOPTR + C:0848H PUBLIC ?C?ILDOPTR + ------- ENDMOD ?C?ILDOPTR + +Program Size: data=18.0 xdata=0 code=2183 +LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/main.lst b/Listings/main.lst new file mode 100644 index 0000000..56be677 --- /dev/null +++ b/Listings/main.lst @@ -0,0 +1,52 @@ +C51 COMPILER V9.60.0.0 MAIN 04/10/2023 15:47:03 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE MAIN +OBJECT MODULE PLACED IN .\Objects\main.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\main.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEN + -D PRINT(.\Listings\main.lst) TABS(2) OBJECT(.\Objects\main.obj) + +line level source + + 1 /*---------------------------------------------------------------------*/ + 2 /* --- STC MCU Limited ------------------------------------------------*/ + 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ + 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ + 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ + 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ + 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ + 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ + 9 /* --- QQ: 800003751 -------------------------------------------------*/ + 10 /* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ + 11 /*---------------------------------------------------------------------*/ + 12 + 13 #include "config.h" + 14 #include "GPIO.h" + 15 #include "Exti.h" + 16 #include "timer.h" + 17 + 18 /******************** Ö÷º¯Êý***********************/ + 19 void main(void) + 20 { + 21 1 GPIO_config(); + 22 1 Exti_config(); + 23 1 Timer_config(); + 24 1 EA = 1; + 25 1 while (1) + 26 1 { + 27 2 } + 28 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 13 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/timer.lst b/Listings/timer.lst new file mode 100644 index 0000000..04fb58e --- /dev/null +++ b/Listings/timer.lst @@ -0,0 +1,210 @@ +C51 COMPILER V9.60.0.0 TIMER 04/10/2023 15:47:03 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TIMER +OBJECT MODULE PLACED IN .\Objects\timer.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\timer.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTE + -ND PRINT(.\Listings\timer.lst) TABS(2) OBJECT(.\Objects\timer.obj) + +line level source + + 1 /*---------------------------------------------------------------------*/ + 2 /* --- STC MCU Limited ------------------------------------------------*/ + 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ + 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ + 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ + 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ + 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ + 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ + 9 /* --- QQ: 800003751 -------------------------------------------------*/ + 10 /* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ + 11 /*---------------------------------------------------------------------*/ + 12 + 13 /************* ¹¦ÄÜ˵Ã÷ ************** + 14 + 15 ±¾ÎļþΪSTC8ϵÁеĶ¨Ê±Æ÷³õʼ»¯ºÍÖжϳÌÐò,Óû§¿ÉÒÔÔÚÕâ¸öÎļþÖÐÐÞ¸Ä×Ô¼ºÐèÒªµÄÖжϳÌÐò. + 16 + 17 ******************************************/ + 18 + 19 #include "timer.h" + 20 u8 KILL_time = 0; + 21 /********************* Timer0ÖжϺ¯Êý************************/ + 22 void timer0_int (void) interrupt TIMER0_VECTOR + 23 { + 24 1 if (KILL_time) + 25 1 { + 26 2 KILL_time--; + 27 2 } + 28 1 } + 29 + 30 /********************* Timer1ÖжϺ¯Êý************************/ + 31 void timer1_int (void) interrupt TIMER1_VECTOR + 32 { + 33 1 + 34 1 } + 35 + 36 /********************* Timer2ÖжϺ¯Êý************************/ + 37 void timer2_int (void) interrupt TIMER2_VECTOR + 38 { + 39 1 + 40 1 } + 41 + 42 /********************* Timer3ÖжϺ¯Êý************************/ + 43 void timer3_int (void) interrupt TIMER3_VECTOR + 44 { + 45 1 + 46 1 } + 47 + 48 /********************* Timer4ÖжϺ¯Êý************************/ + 49 void timer4_int (void) interrupt TIMER4_VECTOR + 50 { + 51 1 + 52 1 } + 53 + 54 + C51 COMPILER V9.60.0.0 TIMER 04/10/2023 15:47:03 PAGE 2 + + 55 //======================================================================== + 56 // º¯Êý: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) + 57 // ÃèÊö: ¶¨Ê±Æ÷³õʼ»¯³ÌÐò. + 58 // ²ÎÊý: TIMx: ½á¹¹²ÎÊý,Çë²Î¿¼timer.hÀïµÄ¶¨Òå. + 59 // ·µ»Ø: ³É¹¦·µ»Ø0, ¿Õ²Ù×÷·µ»Ø1,´íÎó·µ»Ø2. + 60 // °æ±¾: V1.0, 2012-10-22 + 61 //======================================================================== + 62 u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) + 63 { + 64 1 if(TIM > Timer4) return 1; //¿Õ²Ù×÷ + 65 1 + 66 1 if(TIM == Timer0) + 67 1 { + 68 2 Timer0_Stop(); //Í£Ö¹¼ÆÊý + 69 2 if(TIMx->TIM_Interrupt == ENABLE) Timer0_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + 70 2 else Timer0_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + 71 2 if(TIMx->TIM_Priority > Priority_3) return 2; //´íÎó + 72 2 Timer0_Priority(TIMx->TIM_Priority); //Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_ + -3 + 73 2 + 74 2 if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //´íÎó + 75 2 TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°, 1: 16λ¶¨Ê±/¼ÆÊý, 2: 8λ×Ô¶¯ÖØ×°, 3: + - ²»¿ÉÆÁ±Î16λ×Ô¶¯ÖØ×° + 76 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer0_12T(); //12T + 77 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer0_1T(); //1T + 78 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer0_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + 79 2 else Timer0_AsTimer(); //¶¨Ê± + 80 2 if(TIMx->TIM_ClkOut == ENABLE) Timer0_CLKO_Enable(); //Êä³öʱÖÓ + 81 2 else Timer0_CLKO_Disable(); //²»Êä³öʱÖÓ + 82 2 + 83 2 T0_Load(TIMx->TIM_Value); + 84 2 if(TIMx->TIM_Run == ENABLE) Timer0_Run(); //¿ªÊ¼ÔËÐÐ + 85 2 return 0; //³É¹¦ + 86 2 } + 87 1 + 88 1 if(TIM == Timer1) + 89 1 { + 90 2 Timer1_Stop(); //Í£Ö¹¼ÆÊý + 91 2 if(TIMx->TIM_Interrupt == ENABLE) Timer1_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + 92 2 else Timer1_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + 93 2 if(TIMx->TIM_Priority > Priority_3) return 2; //´íÎó + 94 2 Timer1_Priority(TIMx->TIM_Priority); //Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_ + -3 + 95 2 if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //´íÎó + 96 2 TMOD = (TMOD & ~0x30) | (TIMx->TIM_Mode<<4); //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°, 1: 16λ¶¨Ê±/¼ÆÊý, 2: 8λ×Ô¶¯ÖØ× + -°, 3: Í£Ö¹¹¤×÷ + 97 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer1_12T(); //12T + 98 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer1_1T(); //1T + 99 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer1_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + 100 2 else Timer1_AsTimer(); //¶¨Ê± + 101 2 if(TIMx->TIM_ClkOut == ENABLE) Timer1_CLKO_Enable(); //Êä³öʱÖÓ + 102 2 else Timer1_CLKO_Disable(); //²»Êä³öʱÖÓ + 103 2 + 104 2 T1_Load(TIMx->TIM_Value); + 105 2 if(TIMx->TIM_Run == ENABLE) Timer1_Run(); //¿ªÊ¼ÔËÐÐ + 106 2 return 0; //³É¹¦ + 107 2 } + 108 1 + 109 1 if(TIM == Timer2) //Timer2,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + 110 1 { + 111 2 Timer2_Stop(); //Í£Ö¹¼ÆÊý + 112 2 if(TIMx->TIM_Interrupt == ENABLE) Timer2_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + C51 COMPILER V9.60.0.0 TIMER 04/10/2023 15:47:03 PAGE 3 + + 113 2 else Timer2_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + 114 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + 115 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer2_12T(); //12T + 116 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer2_1T(); //1T + 117 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer2_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + 118 2 else Timer2_AsTimer(); //¶¨Ê± + 119 2 if(TIMx->TIM_ClkOut == ENABLE) Timer2_CLKO_Enable(); //Êä³öʱÖÓ + 120 2 else Timer2_CLKO_Disable(); //²»Êä³öʱÖÓ + 121 2 + 122 2 T2_Load(TIMx->TIM_Value); + 123 2 if(TIMx->TIM_Run == ENABLE) Timer2_Run(); //¿ªÊ¼ÔËÐÐ + 124 2 return 0; //³É¹¦ + 125 2 } + 126 1 + 127 1 if(TIM == Timer3) //Timer3,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + 128 1 { + 129 2 Timer3_Stop(); //Í£Ö¹¼ÆÊý + 130 2 if(TIMx->TIM_Interrupt == ENABLE) Timer3_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + 131 2 else Timer3_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + 132 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + 133 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer3_12T(); //12T + 134 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer3_1T(); //1T + 135 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer3_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + 136 2 else Timer3_AsTimer(); //¶¨Ê± + 137 2 if(TIMx->TIM_ClkOut == ENABLE) Timer3_CLKO_Enable(); //Êä³öʱÖÓ + 138 2 else Timer3_CLKO_Disable(); //²»Êä³öʱÖÓ + 139 2 + 140 2 T3_Load(TIMx->TIM_Value); + 141 2 if(TIMx->TIM_Run == ENABLE) Timer3_Run(); //¿ªÊ¼ÔËÐÐ + 142 2 return 0; //³É¹¦ + 143 2 } + 144 1 + 145 1 if(TIM == Timer4) //Timer3,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + 146 1 { + 147 2 Timer4_Stop(); //Í£Ö¹¼ÆÊý + 148 2 if(TIMx->TIM_Interrupt == ENABLE) Timer4_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + 149 2 else Timer4_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + 150 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + 151 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer4_12T(); //12T + 152 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer4_1T(); //1T + 153 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer4_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + 154 2 else Timer4_AsTimer(); //¶¨Ê± + 155 2 if(TIMx->TIM_ClkOut == ENABLE) Timer4_CLKO_Enable(); //Êä³öʱÖÓ + 156 2 else Timer4_CLKO_Disable(); //²»Êä³öʱÖÓ + 157 2 + 158 2 T4_Load(TIMx->TIM_Value); + 159 2 if(TIMx->TIM_Run == ENABLE) Timer4_Run(); //¿ªÊ¼ÔËÐÐ + 160 2 return 0; //³É¹¦ + 161 2 } + 162 1 return 2; //´íÎó + 163 1 } + 164 /************************ ?¡§?¡À?¡Â???? ****************************/ + 165 void Timer_config(void) + 166 { + 167 1 TIM_InitTypeDef TIM_InitStructure; + 168 1 TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; + 169 1 TIM_InitStructure.TIM_Priority = Priority_0; + 170 1 TIM_InitStructure.TIM_Interrupt = ENABLE; + 171 1 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; + 172 1 TIM_InitStructure.TIM_ClkOut = DISABLE; + 173 1 TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 1000UL); + 174 1 TIM_InitStructure.TIM_Run = ENABLE; + C51 COMPILER V9.60.0.0 TIMER 04/10/2023 15:47:03 PAGE 4 + + 175 1 Timer_Inilize(Timer0,&TIM_InitStructure); + 176 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 862 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 1 8 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Objects/Exti.__i b/Objects/Exti.__i new file mode 100644 index 0000000..28e691a --- /dev/null +++ b/Objects/Exti.__i @@ -0,0 +1 @@ +"mycode\Exti.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\Exti.lst) TABS (2) OBJECT(.\Objects\Exti.obj) \ No newline at end of file diff --git a/Objects/Exti.obj b/Objects/Exti.obj new file mode 100644 index 0000000000000000000000000000000000000000..7572ce6e49c576f7586b57086470be748d9f5d8b GIT binary patch literal 109866 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

-kZxlCaYoWUM@m9riUgJ96Cu1a?5MK)Sm$ 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 z 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 Ut=x4j03T~?i8ZPTr{2ume_scIu>b%7 literal 0 HcmV?d00001 diff --git a/Objects/STARTUP.obj b/Objects/STARTUP.obj new file mode 100644 index 0000000000000000000000000000000000000000..e0c8321c8334061d9985582aebf855981d0a243f GIT binary patch literal 819 zcmZuvJ#5oJ7=5;r)=pZI6d}rjthz$YK-CC!u58DYfJsiVBXy`0(SlH`svspuOtb~@ zv$Ha=v#@4GFm^vl8ndh536w%YO1@@BX*81C#p9BgLcdxK%!?s&HYU%ES6yAQU9XWmC! zyLCGd!2ZV@_b>g|uVL={yWUJzkMfw;FQByM_fzf^Un^y#%K&~>=Al78n87UL{MAMp zs#R*xVMv#TsWr0xovT+Wfy@wQ)|ClH^jo z>&`{h8<|}B56+6r)PDem>-)6+ut$&I7i5~^7Om&X3V|Xc&6X!r{}O5_XE5$?oW(;K z&~#%r4BD(qc`Jb(<(BzkGCzY!z6wb56TOm8_y6= z*VL$=9{l?I?exi!Jm;2GgGpA$cw9n(3~=mROD@Gr<#@&2z-#UWyx~5D5qArpG3F&O Qa;NsGP|Y8ryj92l07&qk0RR91 literal 0 HcmV?d00001 diff --git a/Objects/kill_control b/Objects/kill_control new file mode 100644 index 0000000000000000000000000000000000000000..ddc36b2eaa1ff10e14d3e18da0a9f426728aa606 GIT binary patch literal 435048 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%0DqwHc2#D2RXUT3P$ojgI$i1gAYiIOSToBc%{oH? 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 Y3*>$uQNzt>%jPJb#JQBYw#@g@zuq1gvH$=8 literal 0 HcmV?d00001 diff --git a/Objects/kill_control.LIB b/Objects/kill_control.LIB new file mode 100644 index 0000000000000000000000000000000000000000..e8a0a17d58090cdee6619975f750bce3fedd2d42 GIT binary patch literal 11277 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 WpG=A-Wwtaa)99LCP0B@pJpT{tm`8a4 literal 0 HcmV?d00001 diff --git a/Objects/kill_control.__b b/Objects/kill_control.__b new file mode 100644 index 0000000..1c6452e --- /dev/null +++ b/Objects/kill_control.__b @@ -0,0 +1,7 @@ +TRANSFER +".\Objects\STARTUP.obj", +".\Objects\Exti.obj", +".\Objects\GPIO.obj", +".\Objects\main.obj", +".\Objects\timer.obj" +TO ".\Objects\kill_control.LIB" diff --git a/Objects/kill_control.build_log.htm b/Objects/kill_control.build_log.htm new file mode 100644 index 0000000..f4fa3cd --- /dev/null +++ b/Objects/kill_control.build_log.htm @@ -0,0 +1,37 @@ + + +

+

µVision Build Log

+

Tool Versions:

+IDE-Version: ¦ÌVision V5.27.1.0 +Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: xx xx, xx, LIC=WH7DL-0DZI4-3A0DP-MA9EC-R17VA-4MPD4 + +Tool Versions: +Toolchain: PK51 Prof. Developers Kit Version: 9.60.0.0 +Toolchain Path: d:\Keil_v5\C51\BIN +C Compiler: C51.exe V9.60.0.0 +Assembler: A51.exe V8.2.7.0 +Linker/Locator: BL51.exe V6.22.2.0 +Library Manager: LIB51.exe V4.30.1.0 +Hex Converter: OH51.exe V2.7.0.0 +CPU DLL: S8051.DLL V3.122.0.0 +Dialog DLL: DP51.DLL V2.67.0.0 +

Project:

+d:\Users\User\Documents\peek250kill control\kill_control.uvproj +Project File Date: 04/10/2023 + +

Output:

+Build target 'Target 1' +compiling Exti.c... +compiling GPIO.c... +compiling main.c... +compiling timer.c... +linking... +Program Size: data=18.0 xdata=0 code=2183 +creating hex file from ".\Objects\kill_control"... +".\Objects\kill_control" - 0 Error(s), 0 Warning(s). +Build Time Elapsed: 00:00:00 +
+ + diff --git a/Objects/kill_control.hex b/Objects/kill_control.hex new file mode 100644 index 0000000..7e28a31 --- /dev/null +++ b/Objects/kill_control.hex @@ -0,0 +1,163 @@ +:030000000207767E +:0C077600787FE4F6D8FD7581100207BD05 +:0300030002006692 +:10006600C0E030B20CE510700BB290B291B2928043 +:0700760003751032D0E032E7 +:0300130002000ADE +:01000A0032C3 +:0300530002000E9A +:01000E0032BF +:03005B0002000F91 +:01000F0032BE +:0300830002001068 +:0100100032BD +:10064E00EFD394047480948040037F0122EF706195 +:10065E00C28990000212081B64017004D2A88002A5 +:10066E00C2A890000112081BFED3940374809480DC +:10067E0040037F0222EEFD7C00700553B7FEC2B828 +:10068E00ED64014C700553B7FED2B8ED64024C70A8 +:10069E000543B701C2B8ED64034C700543B701D2F0 +:1006AE00B812080264017004D2888002C2887F00EA +:1006BE0022EF64017061C28B90000212081B64016C +:1006CE007004D2AA8002C2AA90000112081BFED3A7 +:1006DE0094037480948040037F0222EEFD7C0070B0 +:1006EE000553B7FBC2BAED64014C700553B7FBD28C +:1006FE00BAED64024C700543B704C2BAED64034C04 +:10070E00700543B704D2BA12080264017004D28A8B +:10071E008002C28A7F0022EF6402701590000212DE +:10072E00081B64017005438F108003538FEF7F0009 +:10073E0022EF6403701590000212081B640170050D +:10074E00438F208003538FDF7F0022EF64047015E8 +:10075E0090000212081B64017005438F4080035302 +:08076E008FBF7F00227F0222F1 +:10004000750A01E4F508F509FB7A007908FF020654 +:010050004E61 +:1003D700EFD394077480948040037F0122120802B0 +:1003E700FED394037480948040037F0222EF70440D +:1003F700EE700B90000112081BF4529352941208EE +:10040700026401700B90000112081B4293F452948E +:10041700120802FE6402700A90000112081B429340 +:100427004294EE6403700D90000112081BFEF45213 +:1004370093EE4294EF64017046120802FE700B902F +:10044700000112081BF452915292EE6401700B9056 +:10045700000112081B4291F45292120802640270C2 +:100467000A90000112081B4291429212080264038B +:10047700700D90000112081BFEF45291EE4292EFAC +:1004870064027046120802FE700B90000112081BEE +:10049700F452955296EE6401700B90000112081BFE +:1004A7004295F452961208026402700A90000112F3 +:1004B700081B429542961208026403700D900001D2 +:1004C70012081BFEF45295EE4296EF640370461233 +:1004D7000802FE700B90000112081BF452B152B2D1 +:1004E700EE6401700B90000112081B42B1F452B286 +:1004F7001208026402700A90000112081B42B142FE +:10050700B21208026403700D90000112081BFEF47A +:1005170052B1EE42B2EF64047046120802FE700B4D +:1005270090000112081BF452B352B4EE6401700B31 +:1005370090000112081B42B3F452B412080264027D +:10054700700A90000112081B42B342B412080264F9 +:1005570003700D90000112081BFEF452B3EE42B473 +:10056700EF64057046120802FE700B900001120836 +:100577001BF452C952CAEE6401700B9000011208B5 +:100587001B42C9F452CA1208026402700A900001A1 +:1005970012081B42C942CA1208026403700D900078 +:1005A7000112081BFEF452C9EE42CAEF64067046F8 +:1005B700120802FE700B90000112081BF452CB5276 +:1005C700CCEE6401700B90000112081B42CBF45271 +:1005D700CC1208026402700A90000112081B42CB79 +:1005E70042CC1208026403700D90000112081BFE32 +:1005F700F452CBEE42CCEF64077049120802FF7E3B +:1006070000700B90000112081BF452E152E2EF64F4 +:10061700014E700B90000112081B42E1F452E212E6 +:1006270008026402700A90000112081B42E142E2CC +:100637001208026403700D90000112081BFFF452A8 +:07064700E1EF42E27F002217 +:10001E00750904E4F508FB7A0079087F031203D70B +:10002E007509077508037F011203D7C290C291C2EA +:01003E00922F +:01003F00229E +:0D00860012001E120040120880D2AF80FE52 +:03000600011000E6 +:03000B0002089E4A +:0B089E00C0E0E51060021510D0E03251 +:03001B00020011CF +:0100110032BC +:0300630002001286 +:0100120032BB +:03009B000200164A +:0100160032B7 +:0300A30002001741 +:0100170032B6 +:1000A600AD07EDD394047480948040037F0122ED64 +:1000B600600302017BC28C90000212081B6401706F +:1000C60004D2A98002C2A990000112081BFED39493 +:1000D600037480948040037F0222EEFF7E00700549 +:1000E60053B7FDC2B9EF64014E700553B7FDD2B9DF +:1000F600EF64024E700543B702C2B9EF64034E7057 +:100106000543B702D2B9120802FEC3940374809461 +:100116008040037F0222E58954FC4EF58990000356 +:1001260012081BFF7E0064017003538E7FEF4E7032 +:1001360003438E80EF64024E7005438904800353A7 +:1001460089FB90000412081B64017005438F01802F +:1001560003538FFE900005120848E5F0F58C9000D9 +:1001660005120848F58A90000712081B6401700200 +:10017600D28C7F0022ED64016003020248C28E9099 +:10018600000212081B64017004D2AB8002C2AB905D +:10019600000112081BFED394037480948040037FF1 +:1001A6000222EEFF7E00700553B7F7C2BBEF640173 +:1001B6004E700553B7F7D2BBEF64024E700543B7D6 +:1001C60008C2BBEF64034E700543B708D2BB1208E2 +:1001D60002FEC394037480948040037F0222EEC41F +:1001E60054F0FFE58954CF4FF58990000312081BA0 +:1001F600FF7E0064017003538EBFEF4E7003438E83 +:1002060040EF64024E700543894080035389BF90D6 +:10021600000412081B64017005438F028003538F8C +:10022600FD900005120848E5F0F58D9000051208CE +:1002360048F58B90000712081B64017002D28E7F6E +:100246000022ED6402707C538EEF90000212081BB0 +:100256006401700543AF04800353AFFB90000312A3 +:10026600081BFED394027480948040037F0222EE22 +:10027600FF7E0064017003538EFBEF4E7003438EC6 +:1002860004EF64024E7005438E088003538EF79088 +:10029600000412081B64017005438F048003538F0A +:1002A600FB900005120848E5F0F5D6900005120807 +:1002B60048F5D790000712081B64017003438E109F +:1002C6007F0022ED6403707C53D1F7900002120880 +:1002D6001B6401700543AF20800353AFDF9000031A +:1002E60012081BFED394027480948040037F02227E +:1002F600EEFF7E006401700353D1FDEF4E700343A1 +:10030600D102EF64024E700543D104800353D1FB42 +:1003160090000412081B6401700543D10180035349 +:10032600D1FE900005120848E5F0F5D490000512BC +:100336000848F5D590000712081B6401700343D1E5 +:10034600087F0022ED640460030203D453D17F903A +:10035600000212081B6401700543AF40800353AFCF +:10036600BF90000312081BFD7C00D3940274809496 +:100376008040037F0222ED64014C700353D1DF906D +:10038600000312081B700343D12090000312081BC0 +:100396006402700543D140800353D1BF900004121C +:1003A600081B6401700543D110800353D1EF900000 +:1003B60005120848FDACF0ECF5D2AF058FD39000DE +:1003C6000712081B6401700343D1807F00227F025D +:0103D6002204 +:10088000E4F508F509750A01F50BF50C750DD4753D +:0E0890000ECD750F01FB7A007908FF0200A65D +:10078200020086E493A3F8E493A34003F68001F207 +:1007920008DFF48029E493A3F85407240CC8C33378 +:1007A200C4540F4420C8834004F456800146F6DF47 +:1007B200E4800B0102040810204080900006E47ED1 +:1007C200019360BCA3FF543F30E509541FFEE4933C +:1007D200A360010ECF54C025E060A840B8E493A303 +:1007E200FAE493A3F8E493A3C8C582C8CAC583CA2E +:1007F200F0A3C8C582C8CAC583CADFE9DEE780BEE6 +:0100090000F6 +:10080200BB010689828A83E0225002E722BBFE02F4 +:09081200E32289828A83E4932227 +:10081B00BB010CE58229F582E5833AF583E0225092 +:10082B0006E92582F8E622BBFE06E92582F8E222DC +:0D083B00E58229F582E5833AF583E49322F6 +:10084800BB0110E58229F582E5833AF583E0F5F0EE +:10085800A3E0225009E92582F886F008E622BBFECB +:100868000AE92582F8E2F5F008E222E5832AF58311 +:08087800E993F5F0A3E99322D6 +:00000001FF diff --git a/Objects/kill_control.lnp b/Objects/kill_control.lnp new file mode 100644 index 0000000..6310e39 --- /dev/null +++ b/Objects/kill_control.lnp @@ -0,0 +1,7 @@ +".\Objects\STARTUP.obj", +".\Objects\Exti.obj", +".\Objects\GPIO.obj", +".\Objects\main.obj", +".\Objects\timer.obj" +TO ".\Objects\kill_control" +PRINT(".\Listings\kill_control.m51") RAMSIZE(256) diff --git a/Objects/main.__i b/Objects/main.__i new file mode 100644 index 0000000..442891a --- /dev/null +++ b/Objects/main.__i @@ -0,0 +1 @@ +"mycode\main.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\main.lst) TABS (2) OBJECT(.\Objects\main.obj) \ No newline at end of file diff --git a/Objects/main.obj b/Objects/main.obj new file mode 100644 index 0000000000000000000000000000000000000000..5f0af087b8751698a48fb8983f67c8a6b99546f6 GIT binary patch literal 105246 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 literal 0 HcmV?d00001 diff --git a/Objects/timer.__i b/Objects/timer.__i new file mode 100644 index 0000000..695df70 --- /dev/null +++ b/Objects/timer.__i @@ -0,0 +1 @@ +"mycode\timer.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\timer.lst) TABS (2) OBJECT(.\Objects\timer.obj) \ No newline at end of file diff --git a/Objects/timer.obj b/Objects/timer.obj new file mode 100644 index 0000000000000000000000000000000000000000..f51be806cb8e2d3478389e77822d738adddc1212 GIT binary patch literal 111985 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 Z9kL0dme>0d0B@T#y=Jm;4DlAQ_Wuo6($4?@ literal 0 HcmV?d00001 diff --git a/STARTUP.A51 b/STARTUP.A51 new file mode 100644 index 0000000..ec99b9e --- /dev/null +++ b/STARTUP.A51 @@ -0,0 +1,198 @@ +$NOMOD51 +;------------------------------------------------------------------------------ +; This file is part of the C51 Compiler package +; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. +; Version 8.01 +; +; *** <<< Use Configuration Wizard in Context Menu >>> *** +;------------------------------------------------------------------------------ +; STARTUP.A51: This code is executed after processor reset. +; +; To translate this file use A51 with the following invocation: +; +; A51 STARTUP.A51 +; +; To link the modified STARTUP.OBJ file to your application use the following +; Lx51 invocation: +; +; Lx51 your object file list, STARTUP.OBJ controls +; +;------------------------------------------------------------------------------ +; +; User-defined Power-On Initialization of Memory +; +; With the following EQU statements the initialization of memory +; at processor reset can be defined: +; +; IDATALEN: IDATA memory size <0x0-0x100> +; Note: The absolute start-address of IDATA memory is always 0 +; The IDATA space overlaps physically the DATA and BIT areas. +IDATALEN EQU 80H +; +; XDATASTART: XDATA memory start address <0x0-0xFFFF> +; The absolute start address of XDATA memory +XDATASTART EQU 0 +; +; XDATALEN: XDATA memory size <0x0-0xFFFF> +; The length of XDATA memory in bytes. +XDATALEN EQU 0 +; +; PDATASTART: PDATA memory start address <0x0-0xFFFF> +; The absolute start address of PDATA memory +PDATASTART EQU 0H +; +; PDATALEN: PDATA memory size <0x0-0xFF> +; The length of PDATA memory in bytes. +PDATALEN EQU 0H +; +; +;------------------------------------------------------------------------------ +; +; Reentrant Stack Initialization +; +; The following EQU statements define the stack pointer for reentrant +; functions and initialized it: +; +; Stack Space for reentrant functions in the SMALL model. +; IBPSTACK: Enable SMALL model reentrant stack +; Stack space for reentrant functions in the SMALL model. +IBPSTACK EQU 0 ; set to 1 if small reentrant is used. +; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> +; Set the top of the stack to the highest location. +IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +; Stack Space for reentrant functions in the LARGE model. +; XBPSTACK: Enable LARGE model reentrant stack +; Stack space for reentrant functions in the LARGE model. +XBPSTACK EQU 0 ; set to 1 if large reentrant is used. +; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 +; +; +; Stack Space for reentrant functions in the COMPACT model. +; PBPSTACK: Enable COMPACT model reentrant stack +; Stack space for reentrant functions in the COMPACT model. +PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. +; +; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +;------------------------------------------------------------------------------ +; +; Memory Page for Using the Compact Model with 64 KByte xdata RAM +; Compact Model Page Definition +; +; Define the XDATA page used for PDATA variables. +; PPAGE must conform with the PPAGE set in the linker invocation. +; +; Enable pdata memory page initalization +PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. +; +; PPAGE number <0x0-0xFF> +; uppermost 256-byte address of the page used for PDATA variables. +PPAGE EQU 0 +; +; SFR address which supplies uppermost address byte <0x0-0xFF> +; most 8051 variants use P2 as uppermost address byte +PPAGE_SFR DATA 0A0H +; +; +;------------------------------------------------------------------------------ + +; Standard SFR Symbols +ACC DATA 0E0H +B DATA 0F0H +SP DATA 81H +DPL DATA 82H +DPH DATA 83H + + NAME ?C_STARTUP + + +?C_C51STARTUP SEGMENT CODE +?STACK SEGMENT IDATA + + RSEG ?STACK + DS 1 + + EXTRN CODE (?C_START) + PUBLIC ?C_STARTUP + + CSEG AT 0 +?C_STARTUP: LJMP STARTUP1 + + RSEG ?C_C51STARTUP + +STARTUP1: + +IF IDATALEN <> 0 + MOV R0,#IDATALEN - 1 + CLR A +IDATALOOP: MOV @R0,A + DJNZ R0,IDATALOOP +ENDIF + +IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A +XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP +ENDIF + +IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE +ENDIF + +IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A +PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP +ENDIF + +IF IBPSTACK <> 0 +EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP +ENDIF + +IF XBPSTACK <> 0 +EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP +ENDIF + +IF PBPSTACK <> 0 +EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP +ENDIF + + MOV SP,#?STACK-1 + +; This code is required if you use L51_BANK.A51 with Banking Mode 4 +; Code Banking +; Select Bank 0 for L51_BANK.A51 Mode 4 +#if 0 +; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4. +EXTRN CODE (?B_SWITCH0) + CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 +#endif +; + LJMP ?C_START + + END diff --git a/kill_control.uvgui.User b/kill_control.uvgui.User new file mode 100644 index 0000000..28b821c --- /dev/null +++ b/kill_control.uvgui.User @@ -0,0 +1,1914 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + + + + + + + + 38003 + Registers + 254 56 + + + 346 + Code Coverage + 1410 160 + + + 204 + Performance Analyzer + 1570 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 143 143 143 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 166 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 60 + 770 + 2513 + 1107 + + + + 0 + + 575 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000005000000030000000100000039443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF39443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C4750494F2E6300000000064750494F2E6300000000FFDC7800FFFFFFFF38443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79696E635C4750494F2E6800000000064750494F2E6800000000BECEA100FFFFFFFF39443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C457874692E630000000006457874692E6300000000F0A0A100FFFFFFFF38443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79696E635C457874692E680000000006457874692E6800000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000004E040000AA000000C90900009E020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 440100004F0000007007000013010000 + + + 16 + 4E040000AA0000007A0A00006E010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100002A020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100002A020000 + + + 16 + 3C00000053000000B801000067030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100002A020000 + + + 16 + 3C00000053000000B801000067030000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100002A020000 + + + 16 + 3C00000053000000B801000067030000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000005B020000BF060000DD030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000ED02000070070000C5030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E020000BC060000C4030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100002A020000 + + + 16 + 3C00000053000000B801000067030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E020000BC060000C4030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E020000BC060000C4030000 + + + 16 + 3C00000053000000B801000067030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E020000BC060000C4030000 + + + 16 + 3C00000053000000B801000067030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E020000BC060000C4030000 + + + 16 + 3C00000053000000B801000067030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0200000000000000D30300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000DD030000BF060000F0030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 3312 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000130100007007000017010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000004E040000AA0000007A0A00006E010000440100004F00000070070000130100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F00000030060000FD020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000003A090000AA0000007A0A000058030000300600004F00000070070000FD02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F0000004401000043020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000A030000AA0000004A0400009E020000000000004F00000040010000430200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000E902000070070000ED02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000000A030000480300007A0A00002004000000000000ED02000070070000C503000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000ED020000BC030000C503000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000043020000BF06000047020000010000000100001004000000010000006DFDFFFF59020000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000A030000A2020000C9090000380400000000000047020000BF060000DD0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2951 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000D54494D5F434C4F434B5F457874960000000000000014000D54494D5F434C4F434B5F4578740D54494D5F436C6B536F757263650954494D5F56616C75650A52585F54696D654F75740652585F436E7407425F52585F4F4B0D466C6173685F5265616441727261766F696420466C6173685F5265616441727228756E7369676E656420696E74206675695F416464726573732C756E7369676E65642063686172206675635F4C656E6774682C756E7369676E65642063686172202A667563705F5361766541727229062055415254320555415254320D4D61696E5F466F73635F4B485A1D48414C5F54494D5F506572696F64456C617073656443616C6C6261636B1148414C5F54494D5F49525148616E646C651148414C5F554152545F5472616E736D69741348414C5F554152545F5472616E736D69742829047561727404383030301077733238313253686F7754776F4C6564022D3E012E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 3440 + 1440 + + + + + + 1 + 0 + + 100 + 3 + + .\mycode\main.c + 15 + 1 + 21 + 1 + + 0 + + + .\mycode\GPIO.c + 0 + 76 + 100 + 1 + + 0 + + + \Users\User\Documents\peek250kill control\myinc\GPIO.h + 0 + 27 + 42 + 1 + + 0 + + + .\mycode\Exti.c + 20 + 19 + 30 + 1 + + 0 + + + .\myinc\Exti.h + 17 + 11 + 17 + 1 + + 0 + + + + +
diff --git a/kill_control.uvopt b/kill_control.uvopt new file mode 100644 index 0000000..77c4d96 --- /dev/null +++ b/kill_control.uvopt @@ -0,0 +1,241 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 35000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + 1 + 1 + 2 + 0 + 0 + 0 + .\STARTUP.A51 + STARTUP.A51 + 0 + 0 + + + + + mycode + 1 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + .\mycode\Exti.c + Exti.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + .\mycode\GPIO.c + GPIO.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + .\mycode\main.c + main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + .\mycode\timer.c + timer.c + 0 + 0 + + + +
diff --git a/kill_control.uvproj b/kill_control.uvproj new file mode 100644 index 0000000..8d02049 --- /dev/null +++ b/kill_control.uvproj @@ -0,0 +1,415 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + 0 + + + STC8H1K28 Series + STC + IRAM(0-0xFF) XRAM(0-0x03FF) IROM(0-0x6FF8) CLOCK(35000000) MODP2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 63268 + STC8.H + + + + + + + + + + + 0 + 0 + + + + STC\ + STC\ + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + kill_control + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -pDP8051 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + 0 + + + + + + + 0 + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x6ff9 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x400 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + .\myinc + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + + + mycode + + + Exti.c + 1 + .\mycode\Exti.c + + + GPIO.c + 1 + .\mycode\GPIO.c + + + main.c + 1 + .\mycode\main.c + + + timer.c + 1 + .\mycode\timer.c + + + + + + + +
diff --git a/mycode/Exti.c b/mycode/Exti.c new file mode 100644 index 0000000..2d6fc4b --- /dev/null +++ b/mycode/Exti.c @@ -0,0 +1,143 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ +/*---------------------------------------------------------------------*/ + +/************* ¹¦ÄÜ˵Ã÷ ************** + +±¾ÎļþΪSTC8ϵÁеÄÍâÖжϳõʼ»¯ºÍÖжϳÌÐò,Óû§¿ÉÒÔÔÚÕâ¸öÎļþÖÐÐÞ¸Ä×Ô¼ºÐèÒªµÄÖжϳÌÐò. + +******************************************/ + +#include "Exti.h" + +/************* Íⲿº¯ÊýºÍ±äÁ¿ÉùÃ÷ *****************/ + +/********************* INT0ÖжϺ¯Êý *************************/ +void Ext_INT0(void) interrupt INT0_VECTOR // ½øÖжÏʱÒѾ­Çå³ý±êÖ¾ +{ + if (kill_gpio) + { + if (KILL_time == 0) + { + power1_gpio = !power1_gpio; + power2_gpio = !power2_gpio; + power3_gpio = !power3_gpio; + } + } + else + { + KILL_time = 50; + } +} + +/********************* INT1ÖжϺ¯Êý *************************/ +void Ext_INT1(void) interrupt INT1_VECTOR // ½øÖжÏʱÒѾ­Çå³ý±êÖ¾ +{ +} + +/********************* INT2ÖжϺ¯Êý *************************/ +void Ext_INT2(void) interrupt INT2_VECTOR // +{ +} + +/********************* INT3ÖжϺ¯Êý *************************/ +void Ext_INT3(void) interrupt INT3_VECTOR +{ +} + +/********************* INT4ÖжϺ¯Êý *************************/ +void Ext_INT4(void) interrupt INT4_VECTOR +{ +} + +//======================================================================== +// º¯Êý: u8 Ext_Inilize(u8 EXT, EXTI_InitTypeDef *INTx) +// ÃèÊö: ÍⲿÖжϳõʼ»¯³ÌÐò. +// ²ÎÊý: INTx: ½á¹¹²ÎÊý,Çë²Î¿¼Exti.hÀïµÄ¶¨Òå. +// ·µ»Ø: ³É¹¦·µ»Ø0, ¿Õ²Ù×÷·µ»Ø1,´íÎó·µ»Ø2. +// °æ±¾: V1.0, 2012-10-22 +//======================================================================== +u8 Ext_Inilize(u8 EXT, EXTI_InitTypeDef *INTx) +{ + if (EXT > EXT_INT4) + return 1; // ¿Õ²Ù×÷ + + if (EXT == EXT_INT0) // ÍâÖжÏ0 + { + IE0 = 0; // ÍâÖжÏ0±ê־λ + if (INTx->EXTI_Interrupt == ENABLE) + EX0 = 1; // ÔÊÐíÖÐ¶Ï + else + EX0 = 0; // ½ûÖ¹ÖÐ¶Ï + if (INTx->EXTI_Priority > Priority_3) + return 2; // ´íÎó + INT0_Priority(INTx->EXTI_Priority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + if (INTx->EXTI_Mode == EXT_MODE_Fall) + IT0 = 1; // ϽµÑØÖÐ¶Ï + else + IT0 = 0; // ÉÏÉý,ϽµÑØÖÐ¶Ï + return 0; // ³É¹¦ + } + + if (EXT == EXT_INT1) // ÍâÖжÏ1 + { + IE1 = 0; // ÍâÖжÏ1±ê־λ + if (INTx->EXTI_Interrupt == ENABLE) + EX1 = 1; // ÔÊÐíÖÐ¶Ï + else + EX1 = 0; // ½ûÖ¹ÖÐ¶Ï + if (INTx->EXTI_Priority > Priority_3) + return 2; // ´íÎó + INT1_Priority(INTx->EXTI_Priority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + if (INTx->EXTI_Mode == EXT_MODE_Fall) + IT1 = 1; // ϽµÑØÖÐ¶Ï + else + IT1 = 0; // ÉÏÉý,ϽµÑØÖÐ¶Ï + return 0; // ³É¹¦ + } + + if (EXT == EXT_INT2) // ÍâÖжÏ2, ¹Ì¶¨ÎªÏ½µÑصÍÓÅÏȼ¶ÖÐ¶Ï + { + if (INTx->EXTI_Interrupt == ENABLE) + INT_CLKO |= (1 << 4); // ÔÊÐíÖÐ¶Ï + else + INT_CLKO &= ~(1 << 4); // ½ûÖ¹ÖÐ¶Ï + return 0; // ³É¹¦ + } + + if (EXT == EXT_INT3) // ÍâÖжÏ3, ¹Ì¶¨ÎªÏ½µÑصÍÓÅÏȼ¶ÖÐ¶Ï + { + if (INTx->EXTI_Interrupt == ENABLE) + INT_CLKO |= (1 << 5); // ÔÊÐíÖÐ¶Ï + else + INT_CLKO &= ~(1 << 5); // ½ûÖ¹ÖÐ¶Ï + return 0; // ³É¹¦ + } + + if (EXT == EXT_INT4) // ÍâÖжÏ4, ¹Ì¶¨ÎªÏ½µÑصÍÓÅÏȼ¶ÖÐ¶Ï + { + if (INTx->EXTI_Interrupt == ENABLE) + INT_CLKO |= (1 << 6); // ÔÊÐíÖÐ¶Ï + else + INT_CLKO &= ~(1 << 6); // ½ûÖ¹ÖÐ¶Ï + return 0; // ³É¹¦ + } + return 2; // ʧ°Ü +} +void Exti_config(void) +{ + EXTI_InitTypeDef Exti_InitStructure; // ½á¹¹¶¨Òå + + Exti_InitStructure.EXTI_Interrupt = ENABLE; // ÖжÏʹÄÜ, ENABLE»òDISABLE + Exti_InitStructure.EXTI_Mode = EXT_MODE_RiseFall; // ÖжÏģʽ, EXT_MODE_RiseFall,EXT_MODE_Fall + Exti_InitStructure.EXTI_Priority = Priority_0; // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + Ext_Inilize(EXT_INT0, &Exti_InitStructure); // ³õʼ»¯ +} \ No newline at end of file diff --git a/mycode/GPIO.c b/mycode/GPIO.c new file mode 100644 index 0000000..974229c --- /dev/null +++ b/mycode/GPIO.c @@ -0,0 +1,137 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ +/*---------------------------------------------------------------------*/ + +/*************** ¹¦ÄÜ˵Ã÷ **************** + +±¾ÎļþΪSTC8ϵÁеĶ˿ڳõʼ»¯³ÌÐò,Óû§¼¸ºõ¿ÉÒÔ²»ÐÞ¸ÄÕâ¸ö³ÌÐò. + +******************************************/ + +#include "GPIO.h" + +//======================================================================== +// º¯Êý: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) +// ÃèÊö: ³õʼ»¯IO¿Ú. +// ²ÎÊý: GPIOx: ½á¹¹²ÎÊý,Çë²Î¿¼timer.hÀïµÄ¶¨Òå. +// ·µ»Ø: ³É¹¦·µ»Ø0, ¿Õ²Ù×÷·µ»Ø1,´íÎó·µ»Ø2. +// °æ±¾: V1.0, 2012-10-22 +//======================================================================== +u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) +{ + if (GPIO > GPIO_P7) + return 1; // ¿Õ²Ù×÷ + if (GPIOx->Mode > GPIO_OUT_PP) + return 2; // ´íÎó + if (GPIO == GPIO_P0) + { + if (GPIOx->Mode == GPIO_PullUp) + P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + if (GPIOx->Mode == GPIO_HighZ) + P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + if (GPIOx->Mode == GPIO_OUT_OD) + P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + if (GPIOx->Mode == GPIO_OUT_PP) + P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + } + if (GPIO == GPIO_P1) + { + if (GPIOx->Mode == GPIO_PullUp) + P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + if (GPIOx->Mode == GPIO_HighZ) + P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + if (GPIOx->Mode == GPIO_OUT_OD) + P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + if (GPIOx->Mode == GPIO_OUT_PP) + P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + } + if (GPIO == GPIO_P2) + { + if (GPIOx->Mode == GPIO_PullUp) + P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + if (GPIOx->Mode == GPIO_HighZ) + P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + if (GPIOx->Mode == GPIO_OUT_OD) + P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + if (GPIOx->Mode == GPIO_OUT_PP) + P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + } + if (GPIO == GPIO_P3) + { + if (GPIOx->Mode == GPIO_PullUp) + P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + if (GPIOx->Mode == GPIO_HighZ) + P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + if (GPIOx->Mode == GPIO_OUT_OD) + P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + if (GPIOx->Mode == GPIO_OUT_PP) + P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + } + if (GPIO == GPIO_P4) + { + if (GPIOx->Mode == GPIO_PullUp) + P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + if (GPIOx->Mode == GPIO_HighZ) + P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + if (GPIOx->Mode == GPIO_OUT_OD) + P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + if (GPIOx->Mode == GPIO_OUT_PP) + P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + } + if (GPIO == GPIO_P5) + { + if (GPIOx->Mode == GPIO_PullUp) + P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + if (GPIOx->Mode == GPIO_HighZ) + P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + if (GPIOx->Mode == GPIO_OUT_OD) + P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + if (GPIOx->Mode == GPIO_OUT_PP) + P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + } + if (GPIO == GPIO_P6) + { + if (GPIOx->Mode == GPIO_PullUp) + P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + if (GPIOx->Mode == GPIO_HighZ) + P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + if (GPIOx->Mode == GPIO_OUT_OD) + P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + if (GPIOx->Mode == GPIO_OUT_PP) + P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + } + if (GPIO == GPIO_P7) + { + if (GPIOx->Mode == GPIO_PullUp) + P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // ÉÏÀ­×¼Ë«Ïò¿Ú + if (GPIOx->Mode == GPIO_HighZ) + P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // ¸¡¿ÕÊäÈë + if (GPIOx->Mode == GPIO_OUT_OD) + P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö + if (GPIOx->Mode == GPIO_OUT_PP) + P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; // ÍÆÍìÊä³ö + } + return 0; // ³É¹¦ +} +void GPIO_config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; // ½á¹¹¶¨Òå + + GPIO_InitStructure.Pin = GPIO_Pin_2; // Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_Pin_7, »ò²Ù×÷ + GPIO_InitStructure.Mode = GPIO_PullUp; // Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); // ³õʼ»¯ + GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; // Ö¸¶¨Òª³õʼ»¯µÄIO, GPIO_Pin_0 ~ GPIO_Pin_7, »ò²Ù×÷ + GPIO_InitStructure.Mode = GPIO_OUT_PP; // Ö¸¶¨IOµÄÊäÈë»òÊä³ö·½Ê½,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // ³õʼ»¯ + power1_gpio = 0; + power2_gpio = 0; + power3_gpio = 0; +} \ No newline at end of file diff --git a/mycode/main.c b/mycode/main.c new file mode 100644 index 0000000..a4d0816 --- /dev/null +++ b/mycode/main.c @@ -0,0 +1,28 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ +/*---------------------------------------------------------------------*/ + +#include "config.h" +#include "GPIO.h" +#include "Exti.h" +#include "timer.h" + +/******************** Ö÷º¯Êý***********************/ +void main(void) +{ + GPIO_config(); + Exti_config(); + Timer_config(); + EA = 1; + while (1) + { + } +} diff --git a/mycode/timer.c b/mycode/timer.c new file mode 100644 index 0000000..292aa47 --- /dev/null +++ b/mycode/timer.c @@ -0,0 +1,176 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ +/*---------------------------------------------------------------------*/ + +/************* ¹¦ÄÜ˵Ã÷ ************** + +±¾ÎļþΪSTC8ϵÁеĶ¨Ê±Æ÷³õʼ»¯ºÍÖжϳÌÐò,Óû§¿ÉÒÔÔÚÕâ¸öÎļþÖÐÐÞ¸Ä×Ô¼ºÐèÒªµÄÖжϳÌÐò. + +******************************************/ + +#include "timer.h" +u8 KILL_time = 0; +/********************* Timer0ÖжϺ¯Êý************************/ +void timer0_int (void) interrupt TIMER0_VECTOR +{ + if (KILL_time) + { + KILL_time--; + } +} + +/********************* Timer1ÖжϺ¯Êý************************/ +void timer1_int (void) interrupt TIMER1_VECTOR +{ + +} + +/********************* Timer2ÖжϺ¯Êý************************/ +void timer2_int (void) interrupt TIMER2_VECTOR +{ + +} + +/********************* Timer3ÖжϺ¯Êý************************/ +void timer3_int (void) interrupt TIMER3_VECTOR +{ + +} + +/********************* Timer4ÖжϺ¯Êý************************/ +void timer4_int (void) interrupt TIMER4_VECTOR +{ + +} + + +//======================================================================== +// º¯Êý: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) +// ÃèÊö: ¶¨Ê±Æ÷³õʼ»¯³ÌÐò. +// ²ÎÊý: TIMx: ½á¹¹²ÎÊý,Çë²Î¿¼timer.hÀïµÄ¶¨Òå. +// ·µ»Ø: ³É¹¦·µ»Ø0, ¿Õ²Ù×÷·µ»Ø1,´íÎó·µ»Ø2. +// °æ±¾: V1.0, 2012-10-22 +//======================================================================== +u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) +{ + if(TIM > Timer4) return 1; //¿Õ²Ù×÷ + + if(TIM == Timer0) + { + Timer0_Stop(); //Í£Ö¹¼ÆÊý + if(TIMx->TIM_Interrupt == ENABLE) Timer0_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + else Timer0_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + if(TIMx->TIM_Priority > Priority_3) return 2; //´íÎó + Timer0_Priority(TIMx->TIM_Priority); //Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + + if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //´íÎó + TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°, 1: 16λ¶¨Ê±/¼ÆÊý, 2: 8λ×Ô¶¯ÖØ×°, 3: ²»¿ÉÆÁ±Î16λ×Ô¶¯ÖØ×° + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer0_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer0_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer0_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + else Timer0_AsTimer(); //¶¨Ê± + if(TIMx->TIM_ClkOut == ENABLE) Timer0_CLKO_Enable(); //Êä³öʱÖÓ + else Timer0_CLKO_Disable(); //²»Êä³öʱÖÓ + + T0_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer0_Run(); //¿ªÊ¼ÔËÐÐ + return 0; //³É¹¦ + } + + if(TIM == Timer1) + { + Timer1_Stop(); //Í£Ö¹¼ÆÊý + if(TIMx->TIM_Interrupt == ENABLE) Timer1_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + else Timer1_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + if(TIMx->TIM_Priority > Priority_3) return 2; //´íÎó + Timer1_Priority(TIMx->TIM_Priority); //Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //´íÎó + TMOD = (TMOD & ~0x30) | (TIMx->TIM_Mode<<4); //¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°, 1: 16λ¶¨Ê±/¼ÆÊý, 2: 8λ×Ô¶¯ÖØ×°, 3: Í£Ö¹¹¤×÷ + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer1_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer1_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer1_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + else Timer1_AsTimer(); //¶¨Ê± + if(TIMx->TIM_ClkOut == ENABLE) Timer1_CLKO_Enable(); //Êä³öʱÖÓ + else Timer1_CLKO_Disable(); //²»Êä³öʱÖÓ + + T1_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer1_Run(); //¿ªÊ¼ÔËÐÐ + return 0; //³É¹¦ + } + + if(TIM == Timer2) //Timer2,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + { + Timer2_Stop(); //Í£Ö¹¼ÆÊý + if(TIMx->TIM_Interrupt == ENABLE) Timer2_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + else Timer2_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer2_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer2_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer2_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + else Timer2_AsTimer(); //¶¨Ê± + if(TIMx->TIM_ClkOut == ENABLE) Timer2_CLKO_Enable(); //Êä³öʱÖÓ + else Timer2_CLKO_Disable(); //²»Êä³öʱÖÓ + + T2_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer2_Run(); //¿ªÊ¼ÔËÐÐ + return 0; //³É¹¦ + } + + if(TIM == Timer3) //Timer3,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + { + Timer3_Stop(); //Í£Ö¹¼ÆÊý + if(TIMx->TIM_Interrupt == ENABLE) Timer3_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + else Timer3_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer3_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer3_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer3_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + else Timer3_AsTimer(); //¶¨Ê± + if(TIMx->TIM_ClkOut == ENABLE) Timer3_CLKO_Enable(); //Êä³öʱÖÓ + else Timer3_CLKO_Disable(); //²»Êä³öʱÖÓ + + T3_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer3_Run(); //¿ªÊ¼ÔËÐÐ + return 0; //³É¹¦ + } + + if(TIM == Timer4) //Timer3,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + { + Timer4_Stop(); //Í£Ö¹¼ÆÊý + if(TIMx->TIM_Interrupt == ENABLE) Timer4_InterruptEnable(); //ÔÊÐíÖÐ¶Ï + else Timer4_InterruptDisable(); //½ûÖ¹ÖÐ¶Ï + if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer4_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer4_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer4_AsCounter(); //¶ÔÍâ¼ÆÊý»ò·ÖƵ + else Timer4_AsTimer(); //¶¨Ê± + if(TIMx->TIM_ClkOut == ENABLE) Timer4_CLKO_Enable(); //Êä³öʱÖÓ + else Timer4_CLKO_Disable(); //²»Êä³öʱÖÓ + + T4_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer4_Run(); //¿ªÊ¼ÔËÐÐ + return 0; //³É¹¦ + } + return 2; //´íÎó +} +/************************ ?¡§?¡À?¡Â???? ****************************/ +void Timer_config(void) +{ + TIM_InitTypeDef TIM_InitStructure; + TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; + TIM_InitStructure.TIM_Priority = Priority_0; + TIM_InitStructure.TIM_Interrupt = ENABLE; + TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; + TIM_InitStructure.TIM_ClkOut = DISABLE; + TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 1000UL); + TIM_InitStructure.TIM_Run = ENABLE; + Timer_Inilize(Timer0,&TIM_InitStructure); +} \ No newline at end of file diff --git a/myinc/Exti.h b/myinc/Exti.h new file mode 100644 index 0000000..d660b79 --- /dev/null +++ b/myinc/Exti.h @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* ���Ҫ�ڳ�����ʹ�ô˴���,���ڳ�����ע��ʹ����STC�����ϼ����� */ +/*---------------------------------------------------------------------*/ + +#ifndef __EXTI_H +#define __EXTI_H + +#include "config.h" +#include "GPIO.h" +#include "timer.h" + +#define EXT_INT0 0 // ��ʼ�����ж�0 +#define EXT_INT1 1 // ��ʼ�����ж�1 +#define EXT_INT2 2 // ��ʼ�����ж�2 +#define EXT_INT3 3 // ��ʼ�����ж�3 +#define EXT_INT4 4 // ��ʼ�����ж�4 + +#define EXT_MODE_RiseFall 0 // ������/�½����ж� +#define EXT_MODE_Fall 1 // �½����ж� + +typedef struct +{ + u8 EXTI_Mode; // �ж�ģʽ, EXT_MODE_RiseFall, EXT_MODE_Fall + u8 EXTI_Priority; // ���ȼ����� Priority_0,Priority_1,Priority_2,Priority_3 + u8 EXTI_Interrupt; // ����� ENABLE,DISABLE +} EXTI_InitTypeDef; + +u8 Ext_Inilize(u8 EXT, EXTI_InitTypeDef *INTx); +void Exti_config(void); +#endif diff --git a/myinc/GPIO.h b/myinc/GPIO.h new file mode 100644 index 0000000..f1d9c72 --- /dev/null +++ b/myinc/GPIO.h @@ -0,0 +1,53 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ +/*---------------------------------------------------------------------*/ + +#ifndef __GPIO_H +#define __GPIO_H + +#include "config.h" + +#define GPIO_PullUp 0 //ÉÏÀ­×¼Ë«Ïò¿Ú +#define GPIO_HighZ 1 //¸¡¿ÕÊäÈë +#define GPIO_OUT_OD 2 //¿ªÂ©Êä³ö +#define GPIO_OUT_PP 3 //ÍÆÍìÊä³ö + +#define GPIO_Pin_0 0x01 //IOÒý½Å Px.0 +#define GPIO_Pin_1 0x02 //IOÒý½Å Px.1 +#define GPIO_Pin_2 0x04 //IOÒý½Å Px.2 +#define GPIO_Pin_3 0x08 //IOÒý½Å Px.3 +#define GPIO_Pin_4 0x10 //IOÒý½Å Px.4 +#define GPIO_Pin_5 0x20 //IOÒý½Å Px.5 +#define GPIO_Pin_6 0x40 //IOÒý½Å Px.6 +#define GPIO_Pin_7 0x80 //IOÒý½Å Px.7 +#define GPIO_Pin_All 0xFF //IOËùÓÐÒý½Å + +#define GPIO_P0 0 // +#define GPIO_P1 1 +#define GPIO_P2 2 +#define GPIO_P3 3 +#define GPIO_P4 4 +#define GPIO_P5 5 +#define GPIO_P6 6 +#define GPIO_P7 7 +#define kill_gpio P32 +#define power1_gpio P10 +#define power2_gpio P11 +#define power3_gpio P12 +typedef struct +{ + u8 Mode; //IOģʽ, GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + u8 Pin; //ÒªÉèÖÃµÄ¶Ë¿Ú +} GPIO_InitTypeDef; + +u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx); +void GPIO_config(void); +#endif diff --git a/myinc/STC8xxxx.H b/myinc/STC8xxxx.H new file mode 100644 index 0000000..18458c7 --- /dev/null +++ b/myinc/STC8xxxx.H @@ -0,0 +1,2747 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò */ +/*---------------------------------------------------------------------*/ + +#ifndef _STC8xxxx_H +#define _STC8xxxx_H + +#include + +/* BYTE Registers */ +sfr P0 = 0x80; +sfr SP = 0x81; +sfr DPL = 0x82; +sfr DPH = 0x83; +sfr S4CON = 0x84; +sfr S4BUF = 0x85; +sfr PCON = 0x87; + +sfr TCON = 0x88; +sfr TMOD = 0x89; +sfr TL0 = 0x8A; +sfr TL1 = 0x8B; +sfr TH0 = 0x8C; +sfr TH1 = 0x8D; +sfr AUXR = 0x8E; +sfr WAKE_CLKO = 0x8F; +sfr INT_CLKO = 0x8F; + +sfr P1 = 0x90; +sfr P1M1 = 0x91; //P1M1.n,P1M0.n =00--->Standard, 01--->push-pull ʵ¼ÊÉÏ1TµÄ¶¼Ò»Ñù +sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain +sfr P0M1 = 0x93; //P0M1.n,P0M0.n =00--->Standard, 01--->push-pull +sfr P0M0 = 0x94; // =10--->pure input, 11--->open drain +sfr P2M1 = 0x95; //P2M1.n,P2M0.n =00--->Standard, 01--->push-pull +sfr P2M0 = 0x96; // =10--->pure input, 11--->open drain +//sfr PCON2 = 0x97; +//sfr AUXR2 = 0x97; + +sfr SCON = 0x98; +sfr SBUF = 0x99; +sfr S2CON = 0x9A; // +sfr S2BUF = 0x9B; // + +sfr P2 = 0xA0; +sfr BUS_SPEED = 0xA1; +sfr P_SW1 = 0xA2; + +sfr IE = 0xA8; +sfr SADDR = 0xA9; +sfr WKTCL = 0xAA; //»½ÐѶ¨Ê±Æ÷µÍ×Ö½Ú +sfr WKTCH = 0xAB; //»½ÐѶ¨Ê±Æ÷¸ß×Ö½Ú +sfr S3CON = 0xAC; +sfr S3BUF = 0xAD; +sfr TA = 0xAE; +sfr IE2 = 0xAF; + +sfr P3 = 0xB0; +sfr P3M1 = 0xB1; //P3M1.n,P3M0.n =00--->Standard, 01--->push-pull +sfr P3M0 = 0xB2; // =10--->pure input, 11--->open drain +sfr P4M1 = 0xB3; //P4M1.n,P4M0.n =00--->Standard, 01--->push-pull +sfr P4M0 = 0xB4; // =10--->pure input, 11--->open drain +sfr IP2 = 0xB5; +sfr IP2H = 0xB6; +sfr IPH = 0xB7; + +sfr IP = 0xB8; +sfr SADEN = 0xB9; +sfr P_SW2 = 0xBA; +sfr VOCTRL = 0xBB; +sfr ADC_CONTR = 0xBC; //ADC¿ØÖƼĴæÆ÷ +sfr ADC_RES = 0xBD; //ADC½á¹û¸ß×Ö½Ú +sfr ADC_RESL = 0xBE; //ADC½á¹ûµÍ×Ö½Ú + +sfr P4 = 0xC0; +sfr WDT_CONTR = 0xC1; + +sfr IAP_DATA = 0xC2; +sfr IAP_ADDRH = 0xC3; +sfr IAP_ADDRL = 0xC4; +sfr IAP_CMD = 0xC5; +sfr IAP_TRIG = 0xC6; +sfr IAP_CONTR = 0xC7; + +sfr ISP_DATA = 0xC2; +sfr ISP_ADDRH = 0xC3; +sfr ISP_ADDRL = 0xC4; +sfr ISP_CMD = 0xC5; +sfr ISP_TRIG = 0xC6; +sfr ISP_CONTR = 0xC7; + +sfr P5 = 0xC8; // +sfr P5M1 = 0xC9; // P5M1.n,P5M0.n =00--->Standard, 01--->push-pull +sfr P5M0 = 0xCA; // =10--->pure input, 11--->open drain +sfr P6M1 = 0xCB; // P5M1.n,P5M0.n =00--->Standard, 01--->push-pull +sfr P6M0 = 0xCC; // =10--->pure input, 11--->open drain +sfr SPSTAT = 0xCD; // +sfr SPCTL = 0xCE; // +sfr SPDAT = 0xCF; // + +sfr PSW = 0xD0; +sfr T4T3M = 0xD1; +sfr T4H = 0xD2; +sfr T4L = 0xD3; +sfr T3H = 0xD4; +sfr T3L = 0xD5; +sfr T2H = 0xD6; +sfr T2L = 0xD7; + +sfr TH4 = 0xD2; +sfr TL4 = 0xD3; +sfr TH3 = 0xD4; +sfr TL3 = 0xD5; +sfr TH2 = 0xD6; +sfr TL2 = 0xD7; + +sfr CCON = 0xD8; // +sfr CMOD = 0xD9; // +sfr CCAPM0 = 0xDA; //PCAÄ£¿é0µÄ¹¤×÷ģʽ¼Ä´æÆ÷¡£ +sfr CCAPM1 = 0xDB; //PCAÄ£¿é1µÄ¹¤×÷ģʽ¼Ä´æÆ÷¡£ +sfr CCAPM2 = 0xDC; //PCAÄ£¿é2µÄ¹¤×÷ģʽ¼Ä´æÆ÷¡£ +//sfr CCAPM3 = 0xDD; //PCAÄ£¿é3µÄ¹¤×÷ģʽ¼Ä´æÆ÷¡£ +sfr USBCLK = 0xDC; +sfr ADCCFG = 0xDE; // +sfr IP3 = 0xDF; //ÖжÏÓÅÏȼ¶¼Ä´æÆ÷ + +sfr ACC = 0xE0; +sfr P7M1 = 0xE1; +sfr P7M0 = 0xE2; +sfr DPS = 0xE3; +sfr DPL1 = 0xE4; +sfr DPH1 = 0xE5; +sfr CMPCR1 = 0xE6; +sfr CMPCR2 = 0xE7; + +sfr P6 = 0xE8; +sfr CL = 0xE9; // +sfr CCAP0L = 0xEA; //PCAÄ£¿é0µÄ²¶×½/±È½Ï¼Ä´æÆ÷µÍ8λ¡£ +sfr CCAP1L = 0xEB; //PCAÄ£¿é1µÄ²¶×½/±È½Ï¼Ä´æÆ÷µÍ8λ¡£ +sfr CCAP2L = 0xEC; //PCAÄ£¿é2µÄ²¶×½/±È½Ï¼Ä´æÆ÷µÍ8λ¡£ +//sfr CCAP3L = 0xED; //PCAÄ£¿é3µÄ²¶×½/±È½Ï¼Ä´æÆ÷µÍ8λ¡£ +sfr USBDAT = 0xEC; +sfr IP3H = 0xEE; +sfr AUXINTIF = 0xEF; //¸¨ÖúÖжϱêÖ¾ B6-INT4IF, B5-INT3IF, B4-INT2IF, B2-T4IF, B1-T3IF, B0-T2IF + +sfr B = 0xF0; +sfr PWMSET = 0xF1; //ÔöÇ¿ÐÍPWMÈ«¾ÖÅäÖüĴæÆ÷ +sfr PCA_PWM0 = 0xF2; //PCAÄ£¿é0 PWM¼Ä´æÆ÷¡£ +sfr PCA_PWM1 = 0xF3; //PCAÄ£¿é1 PWM¼Ä´æÆ÷¡£ +sfr PCA_PWM2 = 0xF4; //PCAÄ£¿é2 PWM¼Ä´æÆ÷¡£ +//sfr PCA_PWM3 = 0xF5; //PCAÄ£¿é3 PWM¼Ä´æÆ÷¡£ +sfr PWMCFG01 = 0xF6; //ÔöÇ¿ÐÍPWMÅäÖüĴæÆ÷ +sfr PWMCFG23 = 0xF7; //ÔöÇ¿ÐÍPWMÅäÖüĴæÆ÷ +sfr USBCON = 0xF4; +sfr IAP_TPS = 0xF5; + +sfr P7 = 0xF8; +sfr CH = 0xF9; +sfr CCAP0H = 0xFA; //PCAÄ£¿é0µÄ²¶×½/±È½Ï¼Ä´æÆ÷¸ß8λ¡£ +sfr CCAP1H = 0xFB; //PCAÄ£¿é1µÄ²¶×½/±È½Ï¼Ä´æÆ÷¸ß8λ¡£ +sfr CCAP2H = 0xFC; //PCAÄ£¿é2µÄ²¶×½/±È½Ï¼Ä´æÆ÷¸ß8λ¡£ +//sfr CCAP3H = 0xFD; //PCAÄ£¿é3µÄ²¶×½/±È½Ï¼Ä´æÆ÷¸ß8λ¡£ +sfr PWMCFG45 = 0xFE; //ÔöÇ¿ÐÍPWMÅäÖüĴæÆ÷ +sfr USBADR = 0xFC; +sfr RSTCFG = 0xFF; // + + +// 7 6 5 4 3 2 1 0 Reset Value +//INT_CLKO: ÖжÏÓëʱÖÓÊä³ö¿ØÖƼĴæÆ÷ - EX4 EX3 EX2 - T2CLKO T1CLKO T0CLKO 0000,0000 +#define INT4_Enable() INT_CLKO |= (1 << 6) +#define INT3_Enable() INT_CLKO |= (1 << 5) +#define INT2_Enable() INT_CLKO |= (1 << 4) +#define INT1_Enable() EX1 = 1 +#define INT0_Enable() EX0 = 1 + +#define INT4_Disable() INT_CLKO &= ~(1 << 6) +#define INT3_Disable() INT_CLKO &= ~(1 << 5) +#define INT2_Disable() INT_CLKO &= ~(1 << 4) +#define INT1_Disable() EX1 = 0 +#define INT0_Disable() EX0 = 0 + +// 7 6 5 4 3 2 1 0 Reset Value +//AUXINTIF: ¸¨ÖúÖжϱêÖ¾¼Ä´æÆ÷ - INT4IF INT3IF INT2IF - T4IF T3IF T2IF 0000,0000 +#define INT4IF 0x40 +#define INT3IF 0x20 +#define INT2IF 0x10 +#define T4IF 0x04 +#define T3IF 0x02 +#define T2IF 0x01 + +#define INT4_Clear() AUXINTIF &= ~INT4IF /* Çå³ýÍâÖжÏ4±ê־λ */ +#define INT3_Clear() AUXINTIF &= ~INT3IF /* Çå³ýÍâÖжÏ3±ê־λ */ +#define INT2_Clear() AUXINTIF &= ~INT2IF /* Çå³ýÍâÖжÏ2±ê־λ */ +#define INT1_Clear() IE1 = 0 /* Çå³ýÍâÖжÏ1±ê־λ */ +#define INT0_Clear() IE0 = 0 /* Çå³ýÍâÖжÏ0±ê־λ */ + +#define INT0_Fall() IT0 = 1 /* INT0 ϽµÑØÖÐ¶Ï */ +#define INT0_RiseFall() IT0 = 0 /* INT0 ϽµÑØÉÏÉýÑØ¾ùÖÐ¶Ï */ +#define INT1_Fall() IT1 = 1 /* INT1 ϽµÑØÖÐ¶Ï */ +#define INT1_RiseFall() IT0 = 0 /* INT1 ϽµÑØÉÏÉýÑØ¾ùÖÐ¶Ï */ + + +//=============================================================== +#define EAXSFR() P_SW2 |= 0x80 /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹SFR(XSFR) */ +#define EAXRAM() P_SW2 &= ~0x80 /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹RAM(XRAM) */ + +#define I2C_USE_P14P15() P_SW2 &= ~0x30 /* ½«I2CÇл»µ½P1.4(SDA) P1.5(SCL)(ÉϵçĬÈÏ).*/ +#define I2C_USE_P24P25() P_SW2 = (P_SW2 & ~0x30) | 0x10 /* ½«I2CÇл»µ½P2.4(SDA) P2.5(SCL).*/ +#define I2C_USE_P76P77() P_SW2 = (P_SW2 & ~0x30) | 0x20 /* ½«I2CÇл»µ½P7.6(SDA) P7.7(SCL).*/ +#define I2C_USE_P33P32() P_SW2 |= 0x30 /* ½«I2CÇл»µ½P3.3(SDA) P3.2(SCL).*/ + +#define CLKSEL (*(unsigned char volatile xdata *)0xfe00) +#define CKSEL (*(unsigned char volatile xdata *)0xfe00) /* Ö÷ʱÖÓÔ´Ñ¡Ôñ */ +#define CLKDIV (*(unsigned char volatile xdata *)0xfe01) /* Ö÷ʱÖÓ·ÖÆµ */ +#define IRC24MCR (*(unsigned char volatile xdata *)0xfe02) /* IRC 24MHZ¿ØÖÆ */ +#define XOSCCR (*(unsigned char volatile xdata *)0xfe03) /* XOSC¿ØÖÆ */ +#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04) /* IRC 32KHZ¿ØÖÆ */ +#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05) +#define IRCDB (*(unsigned char volatile xdata *)0xfe06) +#define X32KCR (*(unsigned char volatile xdata *)0xfe08) + +#define MainFosc_IRC24M() CKSEL = (CKSEL & ~0x03) /* Ñ¡ÔñÄÚ²¿24MHZʱÖÓ */ +#define MainFosc_XTAL() CKSEL = (CKSEL & ~0x03) | 0x01 /* Ñ¡ÔñÍⲿ¾§Õñ»òʱÖÓ */ +#define MainFosc_IRC32K() CKSEL = CKSEL | 0x03 /* Ñ¡ÔñÄÚ²¿32KʱÖÓ */ +#define EXT_CLOCK() XOSCCR = 0x80 /* Ñ¡ÔñÍⲿʱÖÓ */ +#define EXT_CRYSTAL() XOSCCR = 0xC0 /* Ñ¡ÔñÍⲿ¾§Õñ */ + + +#define P0PU (*(unsigned char volatile xdata *)0xfe10) /* P0 4.1K Pull Up Enable */ +#define P1PU (*(unsigned char volatile xdata *)0xfe11) /* P1 4.1K Pull Up Enable */ +#define P2PU (*(unsigned char volatile xdata *)0xfe12) /* P2 4.1K Pull Up Enable */ +#define P3PU (*(unsigned char volatile xdata *)0xfe13) /* P3 4.1K Pull Up Enable */ +#define P4PU (*(unsigned char volatile xdata *)0xfe14) /* P4 4.1K Pull Up Enable */ +#define P5PU (*(unsigned char volatile xdata *)0xfe15) /* P5 4.1K Pull Up Enable */ +#define P6PU (*(unsigned char volatile xdata *)0xfe16) /* P6 4.1K Pull Up Enable */ +#define P7PU (*(unsigned char volatile xdata *)0xfe17) /* P7 4.1K Pull Up Enable */ + +#define P0NCS (*(unsigned char volatile xdata *)0xfe18) /* P0 Non Schmit Trigger 0: ʹÄܶ˿ÚÊ©ÃÜÌØ´¥·¢¹¦ÄÜ(ĬÈÏ), 1: ½ûÖ¹ */ +#define P1NCS (*(unsigned char volatile xdata *)0xfe19) /* P1 Non Schmit Trigger */ +#define P2NCS (*(unsigned char volatile xdata *)0xfe1a) /* P2 Non Schmit Trigger */ +#define P3NCS (*(unsigned char volatile xdata *)0xfe1b) /* P3 Non Schmit Trigger */ +#define P4NCS (*(unsigned char volatile xdata *)0xfe1c) /* P4 Non Schmit Trigger */ +#define P5NCS (*(unsigned char volatile xdata *)0xfe1d) /* P5 Non Schmit Trigger */ +#define P6NCS (*(unsigned char volatile xdata *)0xfe1e) /* P6 Non Schmit Trigger */ +#define P7NCS (*(unsigned char volatile xdata *)0xfe1f) /* P7 Non Schmit Trigger */ + +#define P0SR (*(unsigned char volatile xdata *)0xfe20) /* ¶Ë¿Úµçƽת»»ËÙ¶È 0: ¿ì, 1: Âý(ĬÈÏ) */ +#define P1SR (*(unsigned char volatile xdata *)0xfe21) +#define P2SR (*(unsigned char volatile xdata *)0xfe22) +#define P3SR (*(unsigned char volatile xdata *)0xfe23) +#define P4SR (*(unsigned char volatile xdata *)0xfe24) +#define P5SR (*(unsigned char volatile xdata *)0xfe25) +#define P6SR (*(unsigned char volatile xdata *)0xfe26) +#define P7SR (*(unsigned char volatile xdata *)0xfe27) + +#define P0DR (*(unsigned char volatile xdata *)0xfe28) /* ¶Ë¿ÚÇý¶¯µçÁ÷¿ØÖÆ 0: ÔöÇ¿Çý¶¯ÄÜÁ¦, 1: Ò»°ãÇý¶¯ÄÜÁ¦(ĬÈÏ) */ +#define P1DR (*(unsigned char volatile xdata *)0xfe29) +#define P2DR (*(unsigned char volatile xdata *)0xfe2a) +#define P3DR (*(unsigned char volatile xdata *)0xfe2b) +#define P4DR (*(unsigned char volatile xdata *)0xfe2c) +#define P5DR (*(unsigned char volatile xdata *)0xfe2d) +#define P6DR (*(unsigned char volatile xdata *)0xfe2e) +#define P7DR (*(unsigned char volatile xdata *)0xfe2f) + +#define P0IE (*(unsigned char volatile xdata *)0xfe30)/* ¶Ë¿ÚÊý×ÖÐźÅÊäÈëʹÄÜ 0: ½ûÖ¹Êý×ÖÐźÅÊäÈë, 1: ʹÄÜÊý×ÖÐźÅÊäÈë(ĬÈÏ) */ +#define P1IE (*(unsigned char volatile xdata *)0xfe31) +#define P2IE (*(unsigned char volatile xdata *)0xfe32) +#define P3IE (*(unsigned char volatile xdata *)0xfe33) +#define P4IE (*(unsigned char volatile xdata *)0xfe34) +#define P5IE (*(unsigned char volatile xdata *)0xfe35) +#define P6IE (*(unsigned char volatile xdata *)0xfe36) +#define P7IE (*(unsigned char volatile xdata *)0xfe37) + +#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) /* */ +#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) /* */ +#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) /* */ +#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) /* */ +#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) /* */ +#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) /* */ +#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) /* */ +#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) /* */ +#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88) + +#define TM2PS (*(unsigned char volatile xdata *)0xfea2) +#define TM3PS (*(unsigned char volatile xdata *)0xfea3) +#define TM4PS (*(unsigned char volatile xdata *)0xfea4) +#define ADCTIM (*(unsigned char volatile xdata *)0xfea8) +#define T3T4PIN (*(unsigned char volatile xdata *)0xfeac) + +#define PWMA_ETRPS (*(unsigned char volatile xdata *)0xfeb0) +#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1) +#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2) +#define PWMA_IOAUX (*(unsigned char volatile xdata *)0xfeb3) +#define PWMB_ETRPS (*(unsigned char volatile xdata *)0xfeb4) +#define PWMB_ENO (*(unsigned char volatile xdata *)0xfeb5) +#define PWMB_PS (*(unsigned char volatile xdata *)0xfeb6) +#define PWMB_IOAUX (*(unsigned char volatile xdata *)0xfeb7) +#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0) +#define PWMA_CR2 (*(unsigned char volatile xdata *)0xfec1) +#define PWMA_SMCR (*(unsigned char volatile xdata *)0xfec2) +#define PWMA_ETR (*(unsigned char volatile xdata *)0xfec3) +#define PWMA_IER (*(unsigned char volatile xdata *)0xfec4) +#define PWMA_SR1 (*(unsigned char volatile xdata *)0xfec5) +#define PWMA_SR2 (*(unsigned char volatile xdata *)0xfec6) +#define PWMA_EGR (*(unsigned char volatile xdata *)0xfec7) +#define PWMA_CCMR1 (*(unsigned char volatile xdata *)0xfec8) +#define PWMA_CCMR2 (*(unsigned char volatile xdata *)0xfec9) +#define PWMA_CCMR3 (*(unsigned char volatile xdata *)0xfeca) +#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb) +#define PWMA_CCER1 (*(unsigned char volatile xdata *)0xfecc) +#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd) +#define PWMA_CNTR (*(unsigned int volatile xdata *)0xfece) +#define PWMA_CNTRH (*(unsigned char volatile xdata *)0xfece) +#define PWMA_CNTRL (*(unsigned char volatile xdata *)0xfecf) +#define PWMA_PSCR (*(unsigned int volatile xdata *)0xfed0) +#define PWMA_PSCRH (*(unsigned char volatile xdata *)0xfed0) +#define PWMA_PSCRL (*(unsigned char volatile xdata *)0xfed1) +#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2) +#define PWMA_ARRH (*(unsigned char volatile xdata *)0xfed2) +#define PWMA_ARRL (*(unsigned char volatile xdata *)0xfed3) +#define PWMA_RCR (*(unsigned char volatile xdata *)0xfed4) +#define PWMA_CCR1 (*(unsigned int volatile xdata *)0xfed5) +#define PWMA_CCR1H (*(unsigned char volatile xdata *)0xfed5) +#define PWMA_CCR1L (*(unsigned char volatile xdata *)0xfed6) +#define PWMA_CCR2 (*(unsigned int volatile xdata *)0xfed7) +#define PWMA_CCR2H (*(unsigned char volatile xdata *)0xfed7) +#define PWMA_CCR2L (*(unsigned char volatile xdata *)0xfed8) +#define PWMA_CCR3 (*(unsigned int volatile xdata *)0xfed9) +#define PWMA_CCR3H (*(unsigned char volatile xdata *)0xfed9) +#define PWMA_CCR3L (*(unsigned char volatile xdata *)0xfeda) +#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb) +#define PWMA_CCR4H (*(unsigned char volatile xdata *)0xfedb) +#define PWMA_CCR4L (*(unsigned char volatile xdata *)0xfedc) +#define PWMA_BRK (*(unsigned char volatile xdata *)0xfedd) +#define PWMA_DTR (*(unsigned char volatile xdata *)0xfede) +#define PWMA_OISR (*(unsigned char volatile xdata *)0xfedf) + +#define PWMB_CR1 (*(unsigned char volatile xdata *)0xfee0) +#define PWMB_CR2 (*(unsigned char volatile xdata *)0xfee1) +#define PWMB_SMCR (*(unsigned char volatile xdata *)0xfee2) +#define PWMB_ETR (*(unsigned char volatile xdata *)0xfee3) +#define PWMB_IER (*(unsigned char volatile xdata *)0xfee4) +#define PWMB_SR1 (*(unsigned char volatile xdata *)0xfee5) +#define PWMB_SR2 (*(unsigned char volatile xdata *)0xfee6) +#define PWMB_EGR (*(unsigned char volatile xdata *)0xfee7) +#define PWMB_CCMR1 (*(unsigned char volatile xdata *)0xfee8) +#define PWMB_CCMR2 (*(unsigned char volatile xdata *)0xfee9) +#define PWMB_CCMR3 (*(unsigned char volatile xdata *)0xfeea) +#define PWMB_CCMR4 (*(unsigned char volatile xdata *)0xfeeb) +#define PWMB_CCER1 (*(unsigned char volatile xdata *)0xfeec) +#define PWMB_CCER2 (*(unsigned char volatile xdata *)0xfeed) +#define PWMB_CNTR (*(unsigned int volatile xdata *)0xfeee) +#define PWMB_CNTRH (*(unsigned char volatile xdata *)0xfeee) +#define PWMB_CNTRL (*(unsigned char volatile xdata *)0xfeef) +#define PWMB_PSCR (*(unsigned int volatile xdata *)0xfef0) +#define PWMB_PSCRH (*(unsigned char volatile xdata *)0xfef0) +#define PWMB_PSCRL (*(unsigned char volatile xdata *)0xfef1) +#define PWMB_ARR (*(unsigned int volatile xdata *)0xfef2) +#define PWMB_ARRH (*(unsigned char volatile xdata *)0xfef2) +#define PWMB_ARRL (*(unsigned char volatile xdata *)0xfef3) +#define PWMB_RCR (*(unsigned char volatile xdata *)0xfef4) +#define PWMB_CCR5 (*(unsigned int volatile xdata *)0xfef5) +#define PWMB_CCR5H (*(unsigned char volatile xdata *)0xfef5) +#define PWMB_CCR5L (*(unsigned char volatile xdata *)0xfef6) +#define PWMB_CCR6 (*(unsigned int volatile xdata *)0xfef7) +#define PWMB_CCR6H (*(unsigned char volatile xdata *)0xfef7) +#define PWMB_CCR6L (*(unsigned char volatile xdata *)0xfef8) +#define PWMB_CCR7 (*(unsigned int volatile xdata *)0xfef9) +#define PWMB_CCR7H (*(unsigned char volatile xdata *)0xfef9) +#define PWMB_CCR7L (*(unsigned char volatile xdata *)0xfefa) +#define PWMB_CCR8 (*(unsigned int volatile xdata *)0xfefb) +#define PWMB_CCR8H (*(unsigned char volatile xdata *)0xfefb) +#define PWMB_CCR8L (*(unsigned char volatile xdata *)0xfefc) +#define PWMB_BRK (*(unsigned char volatile xdata *)0xfefd) +#define PWMB_DTR (*(unsigned char volatile xdata *)0xfefe) +#define PWMB_OISR (*(unsigned char volatile xdata *)0xfeff) + +///////////////////////////////////////////////// +//FD00H-FDFFH +///////////////////////////////////////////////// + +#define PWM0C (*(unsigned int volatile xdata *)0xff00) +#define PWM0CH (*(unsigned char volatile xdata *)0xff00) +#define PWM0CL (*(unsigned char volatile xdata *)0xff01) +#define PWM0CKS (*(unsigned char volatile xdata *)0xff02) +#define PWM0TADC (*(unsigned int volatile xdata *)0xff03) +#define PWM0TADCH (*(unsigned char volatile xdata *)0xff03) +#define PWM0TADCL (*(unsigned char volatile xdata *)0xff04) +#define PWM0IF (*(unsigned char volatile xdata *)0xff05) +#define PWM0FDCR (*(unsigned char volatile xdata *)0xff06) +#define PWM00T1 (*(unsigned int volatile xdata *)0xff10) +#define PWM00T1H (*(unsigned char volatile xdata *)0xff10) +#define PWM00T1L (*(unsigned char volatile xdata *)0xff11) +#define PWM00T2 (*(unsigned int volatile xdata *)0xff12) +#define PWM00T2H (*(unsigned char volatile xdata *)0xff12) +#define PWM00T2L (*(unsigned char volatile xdata *)0xff13) +#define PWM00CR (*(unsigned char volatile xdata *)0xff14) +#define PWM00HLD (*(unsigned char volatile xdata *)0xff15) +#define PWM01T1 (*(unsigned int volatile xdata *)0xff18) +#define PWM01T1H (*(unsigned char volatile xdata *)0xff18) +#define PWM01T1L (*(unsigned char volatile xdata *)0xff19) +#define PWM01T2 (*(unsigned int volatile xdata *)0xff1a) +#define PWM01T2H (*(unsigned char volatile xdata *)0xff1a) +#define PWM01T2L (*(unsigned char volatile xdata *)0xff1b) +#define PWM01CR (*(unsigned char volatile xdata *)0xff1c) +#define PWM01HLD (*(unsigned char volatile xdata *)0xff1d) +#define PWM02T1 (*(unsigned int volatile xdata *)0xff20) +#define PWM02T1H (*(unsigned char volatile xdata *)0xff20) +#define PWM02T1L (*(unsigned char volatile xdata *)0xff21) +#define PWM02T2 (*(unsigned int volatile xdata *)0xff22) +#define PWM02T2H (*(unsigned char volatile xdata *)0xff22) +#define PWM02T2L (*(unsigned char volatile xdata *)0xff23) +#define PWM02CR (*(unsigned char volatile xdata *)0xff24) +#define PWM02HLD (*(unsigned char volatile xdata *)0xff25) +#define PWM03T1 (*(unsigned int volatile xdata *)0xff28) +#define PWM03T1H (*(unsigned char volatile xdata *)0xff28) +#define PWM03T1L (*(unsigned char volatile xdata *)0xff29) +#define PWM03T2 (*(unsigned int volatile xdata *)0xff2a) +#define PWM03T2H (*(unsigned char volatile xdata *)0xff2a) +#define PWM03T2L (*(unsigned char volatile xdata *)0xff2b) +#define PWM03CR (*(unsigned char volatile xdata *)0xff2c) +#define PWM03HLD (*(unsigned char volatile xdata *)0xff2d) +#define PWM04T1 (*(unsigned int volatile xdata *)0xff30) +#define PWM04T1H (*(unsigned char volatile xdata *)0xff30) +#define PWM04T1L (*(unsigned char volatile xdata *)0xff31) +#define PWM04T2 (*(unsigned int volatile xdata *)0xff32) +#define PWM04T2H (*(unsigned char volatile xdata *)0xff32) +#define PWM04T2L (*(unsigned char volatile xdata *)0xff33) +#define PWM04CR (*(unsigned char volatile xdata *)0xff34) +#define PWM04HLD (*(unsigned char volatile xdata *)0xff35) +#define PWM05T1 (*(unsigned int volatile xdata *)0xff38) +#define PWM05T1H (*(unsigned char volatile xdata *)0xff38) +#define PWM05T1L (*(unsigned char volatile xdata *)0xff39) +#define PWM05T2 (*(unsigned int volatile xdata *)0xff3a) +#define PWM05T2H (*(unsigned char volatile xdata *)0xff3a) +#define PWM05T2L (*(unsigned char volatile xdata *)0xff3b) +#define PWM05CR (*(unsigned char volatile xdata *)0xff3c) +#define PWM05HLD (*(unsigned char volatile xdata *)0xff3d) +#define PWM06T1 (*(unsigned int volatile xdata *)0xff40) +#define PWM06T1H (*(unsigned char volatile xdata *)0xff40) +#define PWM06T1L (*(unsigned char volatile xdata *)0xff41) +#define PWM06T2 (*(unsigned int volatile xdata *)0xff42) +#define PWM06T2H (*(unsigned char volatile xdata *)0xff42) +#define PWM06T2L (*(unsigned char volatile xdata *)0xff43) +#define PWM06CR (*(unsigned char volatile xdata *)0xff44) +#define PWM06HLD (*(unsigned char volatile xdata *)0xff45) +#define PWM07T1 (*(unsigned int volatile xdata *)0xff48) +#define PWM07T1H (*(unsigned char volatile xdata *)0xff48) +#define PWM07T1L (*(unsigned char volatile xdata *)0xff49) +#define PWM07T2 (*(unsigned int volatile xdata *)0xff4a) +#define PWM07T2H (*(unsigned char volatile xdata *)0xff4a) +#define PWM07T2L (*(unsigned char volatile xdata *)0xff4b) +#define PWM07CR (*(unsigned char volatile xdata *)0xff4c) +#define PWM07HLD (*(unsigned char volatile xdata *)0xff4d) +#define PWM1C (*(unsigned int volatile xdata *)0xff50) +#define PWM1CH (*(unsigned char volatile xdata *)0xff50) +#define PWM1CL (*(unsigned char volatile xdata *)0xff51) +#define PWM1CKS (*(unsigned char volatile xdata *)0xff52) +#define PWM1IF (*(unsigned char volatile xdata *)0xff55) +#define PWM1FDCR (*(unsigned char volatile xdata *)0xff56) +#define PWM10T1 (*(unsigned int volatile xdata *)0xff60) +#define PWM10T1H (*(unsigned char volatile xdata *)0xff60) +#define PWM10T1L (*(unsigned char volatile xdata *)0xff61) +#define PWM10T2 (*(unsigned int volatile xdata *)0xff62) +#define PWM10T2H (*(unsigned char volatile xdata *)0xff62) +#define PWM10T2L (*(unsigned char volatile xdata *)0xff63) +#define PWM10CR (*(unsigned char volatile xdata *)0xff64) +#define PWM10HLD (*(unsigned char volatile xdata *)0xff65) +#define PWM11T1 (*(unsigned int volatile xdata *)0xff68) +#define PWM11T1H (*(unsigned char volatile xdata *)0xff68) +#define PWM11T1L (*(unsigned char volatile xdata *)0xff69) +#define PWM11T2 (*(unsigned int volatile xdata *)0xff6a) +#define PWM11T2H (*(unsigned char volatile xdata *)0xff6a) +#define PWM11T2L (*(unsigned char volatile xdata *)0xff6b) +#define PWM11CR (*(unsigned char volatile xdata *)0xff6c) +#define PWM11HLD (*(unsigned char volatile xdata *)0xff6d) +#define PWM12T1 (*(unsigned int volatile xdata *)0xff70) +#define PWM12T1H (*(unsigned char volatile xdata *)0xff70) +#define PWM12T1L (*(unsigned char volatile xdata *)0xff71) +#define PWM12T2 (*(unsigned int volatile xdata *)0xff72) +#define PWM12T2H (*(unsigned char volatile xdata *)0xff72) +#define PWM12T2L (*(unsigned char volatile xdata *)0xff73) +#define PWM12CR (*(unsigned char volatile xdata *)0xff74) +#define PWM12HLD (*(unsigned char volatile xdata *)0xff75) +#define PWM13T1 (*(unsigned int volatile xdata *)0xff78) +#define PWM13T1H (*(unsigned char volatile xdata *)0xff78) +#define PWM13T1L (*(unsigned char volatile xdata *)0xff79) +#define PWM13T2 (*(unsigned int volatile xdata *)0xff7a) +#define PWM13T2H (*(unsigned char volatile xdata *)0xff7a) +#define PWM13T2L (*(unsigned char volatile xdata *)0xff7b) +#define PWM13CR (*(unsigned char volatile xdata *)0xff7c) +#define PWM13HLD (*(unsigned char volatile xdata *)0xff7d) +#define PWM14T1 (*(unsigned int volatile xdata *)0xff80) +#define PWM14T1H (*(unsigned char volatile xdata *)0xff80) +#define PWM14T1L (*(unsigned char volatile xdata *)0xff81) +#define PWM14T2 (*(unsigned int volatile xdata *)0xff82) +#define PWM14T2H (*(unsigned char volatile xdata *)0xff82) +#define PWM14T2L (*(unsigned char volatile xdata *)0xff83) +#define PWM14CR (*(unsigned char volatile xdata *)0xff84) +#define PWM14HLD (*(unsigned char volatile xdata *)0xff85) +#define PWM15T1 (*(unsigned int volatile xdata *)0xff88) +#define PWM15T1H (*(unsigned char volatile xdata *)0xff88) +#define PWM15T1L (*(unsigned char volatile xdata *)0xff89) +#define PWM15T2 (*(unsigned int volatile xdata *)0xff8a) +#define PWM15T2H (*(unsigned char volatile xdata *)0xff8a) +#define PWM15T2L (*(unsigned char volatile xdata *)0xff8b) +#define PWM15CR (*(unsigned char volatile xdata *)0xff8c) +#define PWM15HLD (*(unsigned char volatile xdata *)0xff8d) +#define PWM16T1 (*(unsigned int volatile xdata *)0xff90) +#define PWM16T1H (*(unsigned char volatile xdata *)0xff90) +#define PWM16T1L (*(unsigned char volatile xdata *)0xff91) +#define PWM16T2 (*(unsigned int volatile xdata *)0xff92) +#define PWM16T2H (*(unsigned char volatile xdata *)0xff92) +#define PWM16T2L (*(unsigned char volatile xdata *)0xff93) +#define PWM16CR (*(unsigned char volatile xdata *)0xff94) +#define PWM16HLD (*(unsigned char volatile xdata *)0xff95) +#define PWM17T1 (*(unsigned int volatile xdata *)0xff98) +#define PWM17T1H (*(unsigned char volatile xdata *)0xff98) +#define PWM17T1L (*(unsigned char volatile xdata *)0xff99) +#define PWM17T2 (*(unsigned int volatile xdata *)0xff9a) +#define PWM17T2H (*(unsigned char volatile xdata *)0xff9a) +#define PWM17T2L (*(unsigned char volatile xdata *)0xff9b) +#define PWM17CR (*(unsigned char volatile xdata *)0xff9c) +#define PWM17HLD (*(unsigned char volatile xdata *)0xff9d) +#define PWM2C (*(unsigned int volatile xdata *)0xffa0) +#define PWM2CH (*(unsigned char volatile xdata *)0xffa0) +#define PWM2CL (*(unsigned char volatile xdata *)0xffa1) +#define PWM2CKS (*(unsigned char volatile xdata *)0xffa2) +#define PWM2TADC (*(unsigned int volatile xdata *)0xffa3) +#define PWM2TADCH (*(unsigned char volatile xdata *)0xffa3) +#define PWM2TADCL (*(unsigned char volatile xdata *)0xffa4) +#define PWM2IF (*(unsigned char volatile xdata *)0xffa5) +#define PWM2FDCR (*(unsigned char volatile xdata *)0xffa6) +#define PWM20T1 (*(unsigned int volatile xdata *)0xffb0) +#define PWM20T1H (*(unsigned char volatile xdata *)0xffb0) +#define PWM20T1L (*(unsigned char volatile xdata *)0xffb1) +#define PWM20T2 (*(unsigned int volatile xdata *)0xffb2) +#define PWM20T2H (*(unsigned char volatile xdata *)0xffb2) +#define PWM20T2L (*(unsigned char volatile xdata *)0xffb3) +#define PWM20CR (*(unsigned char volatile xdata *)0xffb4) +#define PWM20HLD (*(unsigned char volatile xdata *)0xffb5) +#define PWM21T1 (*(unsigned int volatile xdata *)0xffb8) +#define PWM21T1H (*(unsigned char volatile xdata *)0xffb8) +#define PWM21T1L (*(unsigned char volatile xdata *)0xffb9) +#define PWM21T2 (*(unsigned int volatile xdata *)0xffba) +#define PWM21T2H (*(unsigned char volatile xdata *)0xffba) +#define PWM21T2L (*(unsigned char volatile xdata *)0xffbb) +#define PWM21CR (*(unsigned char volatile xdata *)0xffbc) +#define PWM21HLD (*(unsigned char volatile xdata *)0xffbd) +#define PWM22T1 (*(unsigned int volatile xdata *)0xffc0) +#define PWM22T1H (*(unsigned char volatile xdata *)0xffc0) +#define PWM22T1L (*(unsigned char volatile xdata *)0xffc1) +#define PWM22T2 (*(unsigned int volatile xdata *)0xffc2) +#define PWM22T2H (*(unsigned char volatile xdata *)0xffc2) +#define PWM22T2L (*(unsigned char volatile xdata *)0xffc3) +#define PWM22CR (*(unsigned char volatile xdata *)0xffc4) +#define PWM22HLD (*(unsigned char volatile xdata *)0xffc5) +#define PWM23T1 (*(unsigned int volatile xdata *)0xffc8) +#define PWM23T1H (*(unsigned char volatile xdata *)0xffc8) +#define PWM23T1L (*(unsigned char volatile xdata *)0xffc9) +#define PWM23T2 (*(unsigned int volatile xdata *)0xffca) +#define PWM23T2H (*(unsigned char volatile xdata *)0xffca) +#define PWM23T2L (*(unsigned char volatile xdata *)0xffcb) +#define PWM23CR (*(unsigned char volatile xdata *)0xffcc) +#define PWM23HLD (*(unsigned char volatile xdata *)0xffcd) +#define PWM24T1 (*(unsigned int volatile xdata *)0xffd0) +#define PWM24T1H (*(unsigned char volatile xdata *)0xffd0) +#define PWM24T1L (*(unsigned char volatile xdata *)0xffd1) +#define PWM24T2 (*(unsigned int volatile xdata *)0xffd2) +#define PWM24T2H (*(unsigned char volatile xdata *)0xffd2) +#define PWM24T2L (*(unsigned char volatile xdata *)0xffd3) +#define PWM24CR (*(unsigned char volatile xdata *)0xffd4) +#define PWM24HLD (*(unsigned char volatile xdata *)0xffd5) +#define PWM25T1 (*(unsigned int volatile xdata *)0xffd8) +#define PWM25T1H (*(unsigned char volatile xdata *)0xffd8) +#define PWM25T1L (*(unsigned char volatile xdata *)0xffd9) +#define PWM25T2 (*(unsigned int volatile xdata *)0xffda) +#define PWM25T2H (*(unsigned char volatile xdata *)0xffda) +#define PWM25T2L (*(unsigned char volatile xdata *)0xffdb) +#define PWM25CR (*(unsigned char volatile xdata *)0xffdc) +#define PWM25HLD (*(unsigned char volatile xdata *)0xffdd) +#define PWM26T1 (*(unsigned int volatile xdata *)0xffe0) +#define PWM26T1H (*(unsigned char volatile xdata *)0xffe0) +#define PWM26T1L (*(unsigned char volatile xdata *)0xffe1) +#define PWM26T2 (*(unsigned int volatile xdata *)0xffe2) +#define PWM26T2H (*(unsigned char volatile xdata *)0xffe2) +#define PWM26T2L (*(unsigned char volatile xdata *)0xffe3) +#define PWM26CR (*(unsigned char volatile xdata *)0xffe4) +#define PWM26HLD (*(unsigned char volatile xdata *)0xffe5) +#define PWM27T1 (*(unsigned int volatile xdata *)0xffe8) +#define PWM27T1H (*(unsigned char volatile xdata *)0xffe8) +#define PWM27T1L (*(unsigned char volatile xdata *)0xffe9) +#define PWM27T2 (*(unsigned int volatile xdata *)0xffea) +#define PWM27T2H (*(unsigned char volatile xdata *)0xffea) +#define PWM27T2L (*(unsigned char volatile xdata *)0xffeb) +#define PWM27CR (*(unsigned char volatile xdata *)0xffec) +#define PWM27HLD (*(unsigned char volatile xdata *)0xffed) + +///////////////////////////////////////////////// +//FC00H-FCFFH +///////////////////////////////////////////////// + +#define PWM3C (*(unsigned int volatile xdata *)0xfc00) +#define PWM3CH (*(unsigned char volatile xdata *)0xfc00) +#define PWM3CL (*(unsigned char volatile xdata *)0xfc01) +#define PWM3CKS (*(unsigned char volatile xdata *)0xfc02) +#define PWM3IF (*(unsigned char volatile xdata *)0xfc05) +#define PWM3FDCR (*(unsigned char volatile xdata *)0xfc06) +#define PWM30T1 (*(unsigned int volatile xdata *)0xfc10) +#define PWM30T1H (*(unsigned char volatile xdata *)0xfc10) +#define PWM30T1L (*(unsigned char volatile xdata *)0xfc11) +#define PWM30T2 (*(unsigned int volatile xdata *)0xfc12) +#define PWM30T2H (*(unsigned char volatile xdata *)0xfc12) +#define PWM30T2L (*(unsigned char volatile xdata *)0xfc13) +#define PWM30CR (*(unsigned char volatile xdata *)0xfc14) +#define PWM30HLD (*(unsigned char volatile xdata *)0xfc15) +#define PWM31T1 (*(unsigned int volatile xdata *)0xfc18) +#define PWM31T1H (*(unsigned char volatile xdata *)0xfc18) +#define PWM31T1L (*(unsigned char volatile xdata *)0xfc19) +#define PWM31T2 (*(unsigned int volatile xdata *)0xfc1a) +#define PWM31T2H (*(unsigned char volatile xdata *)0xfc1a) +#define PWM31T2L (*(unsigned char volatile xdata *)0xfc1b) +#define PWM31CR (*(unsigned char volatile xdata *)0xfc1c) +#define PWM31HLD (*(unsigned char volatile xdata *)0xfc1d) +#define PWM32T1 (*(unsigned int volatile xdata *)0xfc20) +#define PWM32T1H (*(unsigned char volatile xdata *)0xfc20) +#define PWM32T1L (*(unsigned char volatile xdata *)0xfc21) +#define PWM32T2 (*(unsigned int volatile xdata *)0xfc22) +#define PWM32T2H (*(unsigned char volatile xdata *)0xfc22) +#define PWM32T2L (*(unsigned char volatile xdata *)0xfc23) +#define PWM32CR (*(unsigned char volatile xdata *)0xfc24) +#define PWM32HLD (*(unsigned char volatile xdata *)0xfc25) +#define PWM33T1 (*(unsigned int volatile xdata *)0xfc28) +#define PWM33T1H (*(unsigned char volatile xdata *)0xfc28) +#define PWM33T1L (*(unsigned char volatile xdata *)0xfc29) +#define PWM33T2 (*(unsigned int volatile xdata *)0xfc2a) +#define PWM33T2H (*(unsigned char volatile xdata *)0xfc2a) +#define PWM33T2L (*(unsigned char volatile xdata *)0xfc2b) +#define PWM33CR (*(unsigned char volatile xdata *)0xfc2c) +#define PWM33HLD (*(unsigned char volatile xdata *)0xfc2d) +#define PWM34T1 (*(unsigned int volatile xdata *)0xfc30) +#define PWM34T1H (*(unsigned char volatile xdata *)0xfc30) +#define PWM34T1L (*(unsigned char volatile xdata *)0xfc31) +#define PWM34T2 (*(unsigned int volatile xdata *)0xfc32) +#define PWM34T2H (*(unsigned char volatile xdata *)0xfc32) +#define PWM34T2L (*(unsigned char volatile xdata *)0xfc33) +#define PWM34CR (*(unsigned char volatile xdata *)0xfc34) +#define PWM34HLD (*(unsigned char volatile xdata *)0xfc35) +#define PWM35T1 (*(unsigned int volatile xdata *)0xfc38) +#define PWM35T1H (*(unsigned char volatile xdata *)0xfc38) +#define PWM35T1L (*(unsigned char volatile xdata *)0xfc39) +#define PWM35T2 (*(unsigned int volatile xdata *)0xfc3a) +#define PWM35T2H (*(unsigned char volatile xdata *)0xfc3a) +#define PWM35T2L (*(unsigned char volatile xdata *)0xfc3b) +#define PWM35CR (*(unsigned char volatile xdata *)0xfc3c) +#define PWM35HLD (*(unsigned char volatile xdata *)0xfc3d) +#define PWM36T1 (*(unsigned int volatile xdata *)0xfc40) +#define PWM36T1H (*(unsigned char volatile xdata *)0xfc40) +#define PWM36T1L (*(unsigned char volatile xdata *)0xfc41) +#define PWM36T2 (*(unsigned int volatile xdata *)0xfc42) +#define PWM36T2H (*(unsigned char volatile xdata *)0xfc42) +#define PWM36T2L (*(unsigned char volatile xdata *)0xfc43) +#define PWM36CR (*(unsigned char volatile xdata *)0xfc44) +#define PWM36HLD (*(unsigned char volatile xdata *)0xfc45) +#define PWM37T1 (*(unsigned int volatile xdata *)0xfc48) +#define PWM37T1H (*(unsigned char volatile xdata *)0xfc48) +#define PWM37T1L (*(unsigned char volatile xdata *)0xfc49) +#define PWM37T2 (*(unsigned int volatile xdata *)0xfc4a) +#define PWM37T2H (*(unsigned char volatile xdata *)0xfc4a) +#define PWM37T2L (*(unsigned char volatile xdata *)0xfc4b) +#define PWM37CR (*(unsigned char volatile xdata *)0xfc4c) +#define PWM37HLD (*(unsigned char volatile xdata *)0xfc4d) +#define PWM4C (*(unsigned int volatile xdata *)0xfc50) +#define PWM4CH (*(unsigned char volatile xdata *)0xfc50) +#define PWM4CL (*(unsigned char volatile xdata *)0xfc51) +#define PWM4CKS (*(unsigned char volatile xdata *)0xfc52) +#define PWM4TADC (*(unsigned int volatile xdata *)0xfc53) +#define PWM4TADCH (*(unsigned char volatile xdata *)0xfc53) +#define PWM4TADCL (*(unsigned char volatile xdata *)0xfc54) +#define PWM4IF (*(unsigned char volatile xdata *)0xfc55) +#define PWM4FDCR (*(unsigned char volatile xdata *)0xfc56) +#define PWM40T1 (*(unsigned int volatile xdata *)0xfc60) +#define PWM40T1H (*(unsigned char volatile xdata *)0xfc60) +#define PWM40T1L (*(unsigned char volatile xdata *)0xfc61) +#define PWM40T2 (*(unsigned int volatile xdata *)0xfc62) +#define PWM40T2H (*(unsigned char volatile xdata *)0xfc62) +#define PWM40T2L (*(unsigned char volatile xdata *)0xfc63) +#define PWM40CR (*(unsigned char volatile xdata *)0xfc64) +#define PWM40HLD (*(unsigned char volatile xdata *)0xfc65) +#define PWM41T1 (*(unsigned int volatile xdata *)0xfc68) +#define PWM41T1H (*(unsigned char volatile xdata *)0xfc68) +#define PWM41T1L (*(unsigned char volatile xdata *)0xfc69) +#define PWM41T2 (*(unsigned int volatile xdata *)0xfc6a) +#define PWM41T2H (*(unsigned char volatile xdata *)0xfc6a) +#define PWM41T2L (*(unsigned char volatile xdata *)0xfc6b) +#define PWM41CR (*(unsigned char volatile xdata *)0xfc6c) +#define PWM41HLD (*(unsigned char volatile xdata *)0xfc6d) +#define PWM42T1 (*(unsigned int volatile xdata *)0xfc70) +#define PWM42T1H (*(unsigned char volatile xdata *)0xfc70) +#define PWM42T1L (*(unsigned char volatile xdata *)0xfc71) +#define PWM42T2 (*(unsigned int volatile xdata *)0xfc72) +#define PWM42T2H (*(unsigned char volatile xdata *)0xfc72) +#define PWM42T2L (*(unsigned char volatile xdata *)0xfc73) +#define PWM42CR (*(unsigned char volatile xdata *)0xfc74) +#define PWM42HLD (*(unsigned char volatile xdata *)0xfc75) +#define PWM43T1 (*(unsigned int volatile xdata *)0xfc78) +#define PWM43T1H (*(unsigned char volatile xdata *)0xfc78) +#define PWM43T1L (*(unsigned char volatile xdata *)0xfc79) +#define PWM43T2 (*(unsigned int volatile xdata *)0xfc7a) +#define PWM43T2H (*(unsigned char volatile xdata *)0xfc7a) +#define PWM43T2L (*(unsigned char volatile xdata *)0xfc7b) +#define PWM43CR (*(unsigned char volatile xdata *)0xfc7c) +#define PWM43HLD (*(unsigned char volatile xdata *)0xfc7d) +#define PWM44T1 (*(unsigned int volatile xdata *)0xfc80) +#define PWM44T1H (*(unsigned char volatile xdata *)0xfc80) +#define PWM44T1L (*(unsigned char volatile xdata *)0xfc81) +#define PWM44T2 (*(unsigned int volatile xdata *)0xfc82) +#define PWM44T2H (*(unsigned char volatile xdata *)0xfc82) +#define PWM44T2L (*(unsigned char volatile xdata *)0xfc83) +#define PWM44CR (*(unsigned char volatile xdata *)0xfc84) +#define PWM44HLD (*(unsigned char volatile xdata *)0xfc85) +#define PWM45T1 (*(unsigned int volatile xdata *)0xfc88) +#define PWM45T1H (*(unsigned char volatile xdata *)0xfc88) +#define PWM45T1L (*(unsigned char volatile xdata *)0xfc89) +#define PWM45T2 (*(unsigned int volatile xdata *)0xfc8a) +#define PWM45T2H (*(unsigned char volatile xdata *)0xfc8a) +#define PWM45T2L (*(unsigned char volatile xdata *)0xfc8b) +#define PWM45CR (*(unsigned char volatile xdata *)0xfc8c) +#define PWM45HLD (*(unsigned char volatile xdata *)0xfc8d) +#define PWM46T1 (*(unsigned int volatile xdata *)0xfc90) +#define PWM46T1H (*(unsigned char volatile xdata *)0xfc90) +#define PWM46T1L (*(unsigned char volatile xdata *)0xfc91) +#define PWM46T2 (*(unsigned int volatile xdata *)0xfc92) +#define PWM46T2H (*(unsigned char volatile xdata *)0xfc92) +#define PWM46T2L (*(unsigned char volatile xdata *)0xfc93) +#define PWM46CR (*(unsigned char volatile xdata *)0xfc94) +#define PWM46HLD (*(unsigned char volatile xdata *)0xfc95) +#define PWM47T1 (*(unsigned int volatile xdata *)0xfc98) +#define PWM47T1H (*(unsigned char volatile xdata *)0xfc98) +#define PWM47T1L (*(unsigned char volatile xdata *)0xfc99) +#define PWM47T2 (*(unsigned int volatile xdata *)0xfc9a) +#define PWM47T2H (*(unsigned char volatile xdata *)0xfc9a) +#define PWM47T2L (*(unsigned char volatile xdata *)0xfc9b) +#define PWM47CR (*(unsigned char volatile xdata *)0xfc9c) +#define PWM47HLD (*(unsigned char volatile xdata *)0xfc9d) +#define PWM5C (*(unsigned int volatile xdata *)0xfca0) +#define PWM5CH (*(unsigned char volatile xdata *)0xfca0) +#define PWM5CL (*(unsigned char volatile xdata *)0xfca1) +#define PWM5CKS (*(unsigned char volatile xdata *)0xfca2) +#define PWM5IF (*(unsigned char volatile xdata *)0xfca5) +#define PWM5FDCR (*(unsigned char volatile xdata *)0xfca6) +#define PWM50T1 (*(unsigned int volatile xdata *)0xfcb0) +#define PWM50T1H (*(unsigned char volatile xdata *)0xfcb0) +#define PWM50T1L (*(unsigned char volatile xdata *)0xfcb1) +#define PWM50T2 (*(unsigned int volatile xdata *)0xfcb2) +#define PWM50T2H (*(unsigned char volatile xdata *)0xfcb2) +#define PWM50T2L (*(unsigned char volatile xdata *)0xfcb3) +#define PWM50CR (*(unsigned char volatile xdata *)0xfcb4) +#define PWM50HLD (*(unsigned char volatile xdata *)0xfcb5) +#define PWM51T1 (*(unsigned int volatile xdata *)0xfcb8) +#define PWM51T1H (*(unsigned char volatile xdata *)0xfcb8) +#define PWM51T1L (*(unsigned char volatile xdata *)0xfcb9) +#define PWM51T2 (*(unsigned int volatile xdata *)0xfcba) +#define PWM51T2H (*(unsigned char volatile xdata *)0xfcba) +#define PWM51T2L (*(unsigned char volatile xdata *)0xfcbb) +#define PWM51CR (*(unsigned char volatile xdata *)0xfcbc) +#define PWM51HLD (*(unsigned char volatile xdata *)0xfcbd) +#define PWM52T1 (*(unsigned int volatile xdata *)0xfcc0) +#define PWM52T1H (*(unsigned char volatile xdata *)0xfcc0) +#define PWM52T1L (*(unsigned char volatile xdata *)0xfcc1) +#define PWM52T2 (*(unsigned int volatile xdata *)0xfcc2) +#define PWM52T2H (*(unsigned char volatile xdata *)0xfcc2) +#define PWM52T2L (*(unsigned char volatile xdata *)0xfcc3) +#define PWM52CR (*(unsigned char volatile xdata *)0xfcc4) +#define PWM52HLD (*(unsigned char volatile xdata *)0xfcc5) +#define PWM53T1 (*(unsigned int volatile xdata *)0xfcc8) +#define PWM53T1H (*(unsigned char volatile xdata *)0xfcc8) +#define PWM53T1L (*(unsigned char volatile xdata *)0xfcc9) +#define PWM53T2 (*(unsigned int volatile xdata *)0xfcca) +#define PWM53T2H (*(unsigned char volatile xdata *)0xfcca) +#define PWM53T2L (*(unsigned char volatile xdata *)0xfccb) +#define PWM53CR (*(unsigned char volatile xdata *)0xfccc) +#define PWM53HLD (*(unsigned char volatile xdata *)0xfccd) +#define PWM54T1 (*(unsigned int volatile xdata *)0xfcd0) +#define PWM54T1H (*(unsigned char volatile xdata *)0xfcd0) +#define PWM54T1L (*(unsigned char volatile xdata *)0xfcd1) +#define PWM54T2 (*(unsigned int volatile xdata *)0xfcd2) +#define PWM54T2H (*(unsigned char volatile xdata *)0xfcd2) +#define PWM54T2L (*(unsigned char volatile xdata *)0xfcd3) +#define PWM54CR (*(unsigned char volatile xdata *)0xfcd4) +#define PWM54HLD (*(unsigned char volatile xdata *)0xfcd5) +#define PWM55T1 (*(unsigned int volatile xdata *)0xfcd8) +#define PWM55T1H (*(unsigned char volatile xdata *)0xfcd8) +#define PWM55T1L (*(unsigned char volatile xdata *)0xfcd9) +#define PWM55T2 (*(unsigned int volatile xdata *)0xfcda) +#define PWM55T2H (*(unsigned char volatile xdata *)0xfcda) +#define PWM55T2L (*(unsigned char volatile xdata *)0xfcdb) +#define PWM55CR (*(unsigned char volatile xdata *)0xfcdc) +#define PWM55HLD (*(unsigned char volatile xdata *)0xfcdd) +#define PWM56T1 (*(unsigned int volatile xdata *)0xfce0) +#define PWM56T1H (*(unsigned char volatile xdata *)0xfce0) +#define PWM56T1L (*(unsigned char volatile xdata *)0xfce1) +#define PWM56T2 (*(unsigned int volatile xdata *)0xfce2) +#define PWM56T2H (*(unsigned char volatile xdata *)0xfce2) +#define PWM56T2L (*(unsigned char volatile xdata *)0xfce3) +#define PWM56CR (*(unsigned char volatile xdata *)0xfce4) +#define PWM56HLD (*(unsigned char volatile xdata *)0xfce5) +#define PWM57T1 (*(unsigned int volatile xdata *)0xfce8) +#define PWM57T1H (*(unsigned char volatile xdata *)0xfce8) +#define PWM57T1L (*(unsigned char volatile xdata *)0xfce9) +#define PWM57T2 (*(unsigned int volatile xdata *)0xfcea) +#define PWM57T2H (*(unsigned char volatile xdata *)0xfcea) +#define PWM57T2L (*(unsigned char volatile xdata *)0xfceb) +#define PWM57CR (*(unsigned char volatile xdata *)0xfcec) +#define PWM57HLD (*(unsigned char volatile xdata *)0xfced) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMSET = 0xF1H; ENGLBSET PWMRST ENPWM5 ENPWM4 ENPWM3 ENPWM2 ENPWM1 ENPWM0 0000,0000 /* ÔöÇ¿ÐÍPWMÈ«¾ÖÅäÖüĴæÆ÷ */ +#define PWM15_SET_Uniform() PWMSET |= 0x80 //1£º6×éPWM²ÉÓÃͳһµÄÉèÖ÷½Ê½ +#define PWM15_SET_Independent() PWMSET &= ~0x80 //0£º6×éPWM²ÉÓø÷×Ô¶ÀÁ¢µÄÉèÖ÷½Ê½ + +#define PWM15_Reset() PWMSET |= 0x40 //1£º¸´Î»ËùÓÐPWMµÄXFR¼Ä´æÆ÷£¬SFR²»±ä + +#define PWM15_PWM5_Enable() PWMSET |= 0x20 //1£ºÊ¹ÄÜPWM5£¨°üÀ¨ PWM50~PWM54£©¡£ +#define PWM15_PWM5_Disable() PWMSET &= ~0x20 //0£º¹Ø±ÕPWM5 + +#define PWM15_PWM4_Enable() PWMSET |= 0x10 //1£ºÊ¹ÄÜPWM4£¨°üÀ¨ PWM40~PWM47£©¡£ +#define PWM15_PWM4_Disable() PWMSET &= ~0x10 //0£º¹Ø±ÕPWM4 + +#define PWM15_PWM3_Enable() PWMSET |= 0x08 //1£ºÊ¹ÄÜPWM3£¨°üÀ¨ PWM30~PWM37£©¡£ +#define PWM15_PWM3_Disable() PWMSET &= ~0x08 //0£º¹Ø±ÕPWM3 + +#define PWM15_PWM2_Enable() PWMSET |= 0x04 //1£ºÊ¹ÄÜPWM2£¨°üÀ¨ PWM20~PWM27£©¡£ +#define PWM15_PWM2_Disable() PWMSET &= ~0x04 //0£º¹Ø±ÕPWM2 + +#define PWM15_PWM1_Enable() PWMSET |= 0x02 //1£ºÊ¹ÄÜPWM1£¨°üÀ¨ PWM10~PWM17£©¡£ +#define PWM15_PWM1_Disable() PWMSET &= ~0x02 //0£º¹Ø±ÕPWM1 + +#define PWM15_PWM0_Enable() PWMSET |= 0x01 //1£ºÊ¹ÄÜPWM0£¨°üÀ¨ PWM00~PWM07£©¡£ +#define PWM15_PWM0_Disable() PWMSET &= ~0x01 //0£º¹Ø±ÕPWM0 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMCFG01= 0xF6H; PWM1CBIF EPWM1CBI FLTPS0 PWM1CEN PWM0CBIF EPWM0CBI ENPWM0TA PWM0CEN 0000,0000 /* ÔöÇ¿ÐÍPWMÅäÖüĴæÆ÷ */ +//sfr PWMCFG23= 0xF7H; PWM3CBIF EPWM3CBI FLTPS1 PWM3CEN PWM2CBIF EPWM2CBI ENPWM2TA PWM2CEN 0000,0000 /* ÔöÇ¿ÐÍPWMÅäÖüĴæÆ÷ */ +//sfr PWMCFG45= 0xFEH; PWM5CBIF EPWM5CBI FLTPS2 PWM5CEN PWM4CBIF EPWM4CBI ENPWM4TA PWM4CEN 0000,0000 /* ÔöÇ¿ÐÍPWMÅäÖüĴæÆ÷ */ +#define PWM1CBIF 0x80 +#define PWM0CBIF 0x08 +#define FLTPSn 0x20 + +#define PWM15_Counter1Int_Enable() PWMCFG01 |= 0x40 //1£ºÊ¹ÄܼÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter1Int_Disable() PWMCFG01 &= ~0x40 //0£º¹Ø±Õ¼ÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter1_Enable() PWMCFG01 |= 0x10 //1£ºÊ¹ÄܼÆÊýÆ÷ +#define PWM15_Counter1_Disable() PWMCFG01 &= ~0x10 //0£º¹Ø±Õ¼ÆÊýÆ÷ +#define PWM15_Counter0Int_Enable() PWMCFG01 |= 0x04 //1£ºÊ¹ÄܼÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter0Int_Disable() PWMCFG01 &= ~0x04 //0£º¹Ø±Õ¼ÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter0_Enable() PWMCFG01 |= 0x01 //1£ºÊ¹ÄܼÆÊýÆ÷ +#define PWM15_Counter0_Disable() PWMCFG01 &= ~0x01 //0£º¹Ø±Õ¼ÆÊýÆ÷ +#define PWM15_PWM0_ADC_Enable() PWMCFG01 |= 0x02 //1£ºPWMÓëADCÏà¹ØÁª +#define PWM15_PWM0_ADC_Disable() PWMCFG01 &= ~0x02 //0£ºPWMÓëADC²»¹ØÁª + +#define PWM15_Counter3Int_Enable() PWMCFG23 |= 0x40 //1£ºÊ¹ÄܼÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter3Int_Disable() PWMCFG23 &= ~0x40 //0£º¹Ø±Õ¼ÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter3_Enable() PWMCFG23 |= 0x10 //1£ºÊ¹ÄܼÆÊýÆ÷ +#define PWM15_Counter3_Disable() PWMCFG23 &= ~0x10 //0£º¹Ø±Õ¼ÆÊýÆ÷ +#define PWM15_Counter2Int_Enable() PWMCFG23 |= 0x04 //1£ºÊ¹ÄܼÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter2Int_Disable() PWMCFG23 &= ~0x04 //0£º¹Ø±Õ¼ÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter2_Enable() PWMCFG23 |= 0x01 //1£ºÊ¹ÄܼÆÊýÆ÷ +#define PWM15_Counter2_Disable() PWMCFG23 &= ~0x01 //0£º¹Ø±Õ¼ÆÊýÆ÷ +#define PWM15_PWM2_ADC_Enable() PWMCFG23 |= 0x02 //1£ºPWMÓëADCÏà¹ØÁª +#define PWM15_PWM2_ADC_Disable() PWMCFG23 &= ~0x02 //0£ºPWMÓëADC²»¹ØÁª + +#define PWM15_Counter5Int_Enable() PWMCFG45 |= 0x40 //1£ºÊ¹ÄܼÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter5Int_Disable() PWMCFG45 &= ~0x40 //0£º¹Ø±Õ¼ÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter5_Enable() PWMCFG45 |= 0x10 //1£ºÊ¹ÄܼÆÊýÆ÷ +#define PWM15_Counter5_Disable() PWMCFG45 &= ~0x10 //0£º¹Ø±Õ¼ÆÊýÆ÷ +#define PWM15_Counter4Int_Enable() PWMCFG45 |= 0x04 //1£ºÊ¹ÄܼÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter4Int_Disable() PWMCFG45 &= ~0x04 //0£º¹Ø±Õ¼ÆÊýÆ÷¹éÁãÖÐ¶Ï +#define PWM15_Counter4_Enable() PWMCFG45 |= 0x01 //1£ºÊ¹ÄܼÆÊýÆ÷ +#define PWM15_Counter4_Disable() PWMCFG45 &= ~0x01 //0£º¹Ø±Õ¼ÆÊýÆ÷ +#define PWM15_PWM4_ADC_Enable() PWMCFG45 |= 0x02 //1£ºPWMÓëADCÏà¹ØÁª +#define PWM15_PWM4_ADC_Disable() PWMCFG45 &= ~0x02 //0£ºPWMÓëADC²»¹ØÁª + +/* PWMnIF */ +#define C7IF = (1<<7) +#define C6IF = (1<<6) +#define C5IF = (1<<5) +#define C4IF = (1<<4) +#define C3IF = (1<<3) +#define C2IF = (1<<2) +#define C1IF = (1<<1) +#define C0IF = 1 + +/* PWMnFDCR */ +#define INVCMP = (1<<7) +#define INVIO = (1<<6) +#define ENFD = (1<<5) +#define FLTFLIO = (1<<4) +#define EFDI = (1<<3) +#define FDCMP = (1<<2) +#define FDIO = (1<<1) +#define FDIF = 1 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWM0CKS = 0xFF02H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ÔöÇ¿ÐÍPWMʱÖÓÑ¡Ôñ´æÆ÷ */ +//sfr PWM1CKS = 0xFF52H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ÔöÇ¿ÐÍPWMʱÖÓÑ¡Ôñ´æÆ÷ */ +//sfr PWM2CKS = 0xFFA2H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ÔöÇ¿ÐÍPWMʱÖÓÑ¡Ôñ´æÆ÷ */ +//sfr PWM3CKS = 0xFC02H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ÔöÇ¿ÐÍPWMʱÖÓÑ¡Ôñ´æÆ÷ */ +//sfr PWM4CKS = 0xFC52H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ÔöÇ¿ÐÍPWMʱÖÓÑ¡Ôñ´æÆ÷ */ +//sfr PWM5CKS = 0xFCA2H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ÔöÇ¿ÐÍPWMʱÖÓÑ¡Ôñ´æÆ÷ */ +#define PWM0_PS_Clock() PWM0CKS &= ~0x10 //0£ºPWMnʱÖÓԴΪϵͳʱÖÓ·ÖÆµºóµÄʱÖÓ +#define PWM0_T2_Clock() PWM0CKS |= 0x10 //1£ºPWMnʱÖÓԴΪ¶¨Ê±Æ÷2µÄÒç³öÂö³å +#define PWM0_PS_Set(n) PWM0CKS = (PWM0CKS & ~0x0F) | (n & 0x0F) //ϵͳʱÖÓÔ¤·ÖƵ²ÎÊýÉèÖãºSYSclk / (PWM_PS+1) +#define PWM1_PS_Clock() PWM1CKS &= ~0x10 //0£ºPWMnʱÖÓԴΪϵͳʱÖÓ·ÖÆµºóµÄʱÖÓ +#define PWM1_T2_Clock() PWM1CKS |= 0x10 //1£ºPWMnʱÖÓԴΪ¶¨Ê±Æ÷2µÄÒç³öÂö³å +#define PWM1_PS_Set(n) PWM1CKS = (PWM1CKS & ~0x0F) | (n & 0x0F) //ϵͳʱÖÓÔ¤·ÖƵ²ÎÊýÉèÖãºSYSclk / (PWM_PS+1) +#define PWM2_PS_Clock() PWM2CKS &= ~0x10 //0£ºPWMnʱÖÓԴΪϵͳʱÖÓ·ÖÆµºóµÄʱÖÓ +#define PWM2_T2_Clock() PWM2CKS |= 0x10 //1£ºPWMnʱÖÓԴΪ¶¨Ê±Æ÷2µÄÒç³öÂö³å +#define PWM2_PS_Set(n) PWM2CKS = (PWM2CKS & ~0x0F) | (n & 0x0F) //ϵͳʱÖÓÔ¤·ÖƵ²ÎÊýÉèÖãºSYSclk / (PWM_PS+1) +#define PWM3_PS_Clock() PWM3CKS &= ~0x10 //0£ºPWMnʱÖÓԴΪϵͳʱÖÓ·ÖÆµºóµÄʱÖÓ +#define PWM3_T2_Clock() PWM3CKS |= 0x10 //1£ºPWMnʱÖÓԴΪ¶¨Ê±Æ÷2µÄÒç³öÂö³å +#define PWM3_PS_Set(n) PWM3CKS = (PWM3CKS & ~0x0F) | (n & 0x0F) //ϵͳʱÖÓÔ¤·ÖƵ²ÎÊýÉèÖãºSYSclk / (PWM_PS+1) +#define PWM4_PS_Clock() PWM4CKS &= ~0x10 //0£ºPWMnʱÖÓԴΪϵͳʱÖÓ·ÖÆµºóµÄʱÖÓ +#define PWM4_T2_Clock() PWM4CKS |= 0x10 //1£ºPWMnʱÖÓԴΪ¶¨Ê±Æ÷2µÄÒç³öÂö³å +#define PWM4_PS_Set(n) PWM4CKS = (PWM4CKS & ~0x0F) | (n & 0x0F) //ϵͳʱÖÓÔ¤·ÖƵ²ÎÊýÉèÖãºSYSclk / (PWM_PS+1) +#define PWM5_PS_Clock() PWM5CKS &= ~0x10 //0£ºPWMnʱÖÓԴΪϵͳʱÖÓ·ÖÆµºóµÄʱÖÓ +#define PWM5_T2_Clock() PWM5CKS |= 0x10 //1£ºPWMnʱÖÓԴΪ¶¨Ê±Æ÷2µÄÒç³öÂö³å +#define PWM5_PS_Set(n) PWM5CKS = (PWM5CKS & ~0x0F) | (n & 0x0F) //ϵͳʱÖÓÔ¤·ÖƵ²ÎÊýÉèÖãºSYSclk / (PWM_PS+1) + +/* PWMnTADC */ +#define PWM15_PWM0TADC(n) PWM0TADC = (n & 0x7fff) //PWM´¥·¢ADCʱ¼äµã +#define PWM15_PWM2TADC(n) PWM2TADC = (n & 0x7fff) //PWM´¥·¢ADCʱ¼äµã +#define PWM15_PWM4TADC(n) PWM4TADC = (n & 0x7fff) //PWM´¥·¢ADCʱ¼äµã + +/* PWMnTADC */ +#define PWM15_PWM0TADC(n) PWM0TADC = (n & 0x7fff) //PWM´¥·¢ADCʱ¼äµã + + +/* BIT Registers */ +/* PSW */ +sbit CY = PSW^7; +sbit AC = PSW^6; +sbit F0 = PSW^5; +sbit RS1 = PSW^4; +sbit RS0 = PSW^3; +sbit OV = PSW^2; +sbit F1 = PSW^1; +sbit P = PSW^0; + +/* TCON */ +sbit TF1 = TCON^7; //¶¨Ê±Æ÷1Òç³öÖжϱê־λ +sbit TR1 = TCON^6; //¶¨Ê±Æ÷1ÔËÐпØÖÆÎ» +sbit TF0 = TCON^5; //¶¨Ê±Æ÷0Òç³öÖжϱê־λ +sbit TR0 = TCON^4; //¶¨Ê±Æ÷0ÔËÐпØÖÆÎ» +sbit IE1 = TCON^3; //ÍâÖжÏ1±ê־λ +sbit IT1 = TCON^2; //ÍâÖжÏ1Ðźŷ½Ê½¿ØÖÆÎ»£¬1£ºÏ½µÑØÖжϣ¬0£ºÉÏÉýϽµ¾ùÖжϡ£ +sbit IE0 = TCON^1; //ÍâÖжÏ0±ê־λ +sbit IT0 = TCON^0; //ÍâÖжÏ0Ðźŷ½Ê½¿ØÖÆÎ»£¬1£ºÏ½µÑØÖжϣ¬0£ºÉÏÉýϽµ¾ùÖжϡ£ + +/* P0 */ +sbit P00 = P0^0; +sbit P01 = P0^1; +sbit P02 = P0^2; +sbit P03 = P0^3; +sbit P04 = P0^4; +sbit P05 = P0^5; +sbit P06 = P0^6; +sbit P07 = P0^7; + +/* P1 */ +sbit P10 = P1^0; +sbit P11 = P1^1; +sbit P12 = P1^2; +sbit P13 = P1^3; +sbit P14 = P1^4; +sbit P15 = P1^5; +sbit P16 = P1^6; +sbit P17 = P1^7; + +sbit RXD2 = P1^0; +sbit TXD2 = P1^1; +sbit CCP1 = P1^0; +sbit CCP0 = P1^1; +sbit SPI_SS = P1^2; +sbit SPI_MOSI = P1^3; +sbit SPI_MISO = P1^4; +sbit SPI_SCLK = P1^5; + +sbit SPI_SS_2 = P2^2; +sbit SPI_MOSI_2 = P2^3; +sbit SPI_MISO_2 = P2^4; +sbit SPI_SCLK_2 = P2^5; + +sbit SPI_SS_3 = P5^4; +sbit SPI_MOSI_3 = P4^0; +sbit SPI_MISO_3 = P4^1; +sbit SPI_SCLK_3 = P4^3; + +sbit SPI_SS_4 = P3^5; +sbit SPI_MOSI_4 = P3^4; +sbit SPI_MISO_4 = P3^3; +sbit SPI_SCLK_4 = P3^2; + +/* P2 */ +sbit P20 = P2^0; +sbit P21 = P2^1; +sbit P22 = P2^2; +sbit P23 = P2^3; +sbit P24 = P2^4; +sbit P25 = P2^5; +sbit P26 = P2^6; +sbit P27 = P2^7; + +/* P3 */ +sbit P30 = P3^0; +sbit P31 = P3^1; +sbit P32 = P3^2; +sbit P33 = P3^3; +sbit P34 = P3^4; +sbit P35 = P3^5; +sbit P36 = P3^6; +sbit P37 = P3^7; + +sbit RXD = P3^0; +sbit TXD = P3^1; +sbit INT0 = P3^2; +sbit INT1 = P3^3; +sbit T0 = P3^4; +sbit T1 = P3^5; +sbit WR = P3^6; +sbit RD = P3^7; + +sbit INT2 = P3^6; +sbit INT3 = P3^7; +sbit INT4 = P3^0; +sbit CCP2 = P3^7; + +sbit CLKOUT0 = P3^5; +sbit CLKOUT1 = P3^4; + +/* P4 */ +sbit P40 = P4^0; +sbit P41 = P4^1; +sbit P42 = P4^2; +sbit P43 = P4^3; +sbit P44 = P4^4; +sbit P45 = P4^5; +sbit P46 = P4^6; +sbit P47 = P4^7; + +/* P5 */ +sbit P50 = P5^0; +sbit P51 = P5^1; +sbit P52 = P5^2; +sbit P53 = P5^3; +sbit P54 = P5^4; +sbit P55 = P5^5; +sbit P56 = P5^6; +sbit P57 = P5^7; + +/* P6 */ +sbit P60 = P6^0; +sbit P61 = P6^1; +sbit P62 = P6^2; +sbit P63 = P6^3; +sbit P64 = P6^4; +sbit P65 = P6^5; +sbit P66 = P6^6; +sbit P67 = P6^7; + +/* P7 */ +sbit P70 = P7^0; +sbit P71 = P7^1; +sbit P72 = P7^2; +sbit P73 = P7^3; +sbit P74 = P7^4; +sbit P75 = P7^5; +sbit P76 = P7^6; +sbit P77 = P7^7; + + +/* SCON */ +sbit SM0 = SCON^7; //SM0/FE SM0 SM1 = 00 ~ 11: ·½Ê½0~3 +sbit SM1 = SCON^6; // +sbit SM2 = SCON^5; //¶à»úͨѶ +sbit REN = SCON^4; //½ÓÊÕÔÊÐí +sbit TB8 = SCON^3; //·¢ËÍÊý¾ÝµÚ8λ +sbit RB8 = SCON^2; //½ÓÊÕÊý¾ÝµÚ8λ +sbit TI = SCON^1; //·¢ËÍÖжϱê־λ +sbit RI = SCON^0; //½ÓÊÕÖжϱê־λ + +/* IE */ +sbit EA = IE^7; //ÖжÏÔÊÐí×Ü¿ØÖÆÎ» +sbit ELVD = IE^6; //µÍѹ¼à²âÖжÏÔÊÐíλ +sbit EADC = IE^5; //ADC ÖÐ¶Ï ÔÊÐíλ +sbit ES = IE^4; //´®ÐÐÖÐ¶Ï ÔÊÐí¿ØÖÆÎ» +sbit ET1 = IE^3; //¶¨Ê±ÖжÏ1ÔÊÐí¿ØÖÆÎ» +sbit EX1 = IE^2; //ÍⲿÖжÏ1ÔÊÐí¿ØÖÆÎ» +sbit ET0 = IE^1; //¶¨Ê±ÖжÏ0ÔÊÐí¿ØÖÆÎ» +sbit EX0 = IE^0; //ÍⲿÖжÏ0ÔÊÐí¿ØÖÆÎ» + +sbit ACC0 = ACC^0; +sbit ACC1 = ACC^1; +sbit ACC2 = ACC^2; +sbit ACC3 = ACC^3; +sbit ACC4 = ACC^4; +sbit ACC5 = ACC^5; +sbit ACC6 = ACC^6; +sbit ACC7 = ACC^7; + +sbit B0 = B^0; +sbit B1 = B^1; +sbit B2 = B^2; +sbit B3 = B^3; +sbit B4 = B^4; +sbit B5 = B^5; +sbit B6 = B^6; +sbit B7 = B^7; + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IE2 = 0xAF; ETKSUI ET4 ET3 ES4 ES3 ET2 ESPI ES2 x000,0000B //Auxiliary Interrupt +#define SPI_INT_ENABLE() IE2 |= 2 /* ÔÊÐíSPIÖÐ¶Ï */ +#define SPI_INT_DISABLE() IE2 &= ~2 /* ÔÊÐíSPIÖÐ¶Ï */ +#define UART2_INT_ENABLE() IE2 |= 1 /* ÔÊÐí´®¿Ú2ÖÐ¶Ï */ +#define UART2_INT_DISABLE() IE2 &= ~1 /* ÔÊÐí´®¿Ú2ÖÐ¶Ï */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP2 = 0xB5; // PPWM2FD PI2C PCMP PX4 PPWM0FD PPWM0 PSPI PS2 0000,0000 +#define PUSB 0x80 +#define PPWM2FD 0x80 +#define PTKSU 0x80 +#define PI2C 0x40 +#define PCMP 0x20 +#define PX4 0x10 +#define PPWM0FD 0x08 +#define PPWM0 0x04 +#define PSPI 0x02 +#define PS2 0x01 +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP2H = 0xB6; // PPWM2FDH PI2CH PCMPH PX4H PPWM0FDH PPWM0H PSPIH PS2H 0000,0000 +#define PUSBH 0x80 +#define PPWM2FDH 0x80 +#define PTKSUH 0x80 +#define PI2CH 0x40 +#define PCMPH 0x20 +#define PX4H 0x10 +#define PPWM0FDH 0x08 +#define PPWM0H 0x04 +#define PSPIH 0x02 +#define PS2H 0x01 + +//´®¿Ú2ÖжÏÓÅÏȼ¶¿ØÖÆ +#define UART2_Priority(n) do{if(n == 0) IP2H &= ~PS2H, IP2 &= ~PS2; \ + if(n == 1) IP2H &= ~PS2H, IP2 |= PS2; \ + if(n == 2) IP2H |= PS2H, IP2 &= ~PS2; \ + if(n == 3) IP2H |= PS2H, IP2 |= PS2; \ + }while(0) +//SPIÖжÏÓÅÏȼ¶¿ØÖÆ +#define SPI_Priority(n) do{if(n == 0) IP2H &= ~PSPIH, IP2 &= ~PSPI; \ + if(n == 1) IP2H &= ~PSPIH, IP2 |= PSPI; \ + if(n == 2) IP2H |= PSPIH, IP2 &= ~PSPI; \ + if(n == 3) IP2H |= PSPIH, IP2 |= PSPI; \ + }while(0) +//ÍⲿÖжÏ4ÖжÏÓÅÏȼ¶¿ØÖÆ +#define INT4_Priority(n) do{if(n == 0) IP2H &= ~PX4H, IP2 &= ~PX4; \ + if(n == 1) IP2H &= ~PX4H, IP2 |= PX4; \ + if(n == 2) IP2H |= PX4H, IP2 &= ~PX4; \ + if(n == 3) IP2H |= PX4H, IP2 |= PX4; \ + }while(0) +//±È½ÏÆ÷ÖжÏÓÅÏȼ¶¿ØÖÆ +#define CMP_Priority(n) do{if(n == 0) IP2H &= ~PCMPH, IP2 &= ~PCMP; \ + if(n == 1) IP2H &= ~PCMPH, IP2 |= PCMP; \ + if(n == 2) IP2H |= PCMPH, IP2 &= ~PCMP; \ + if(n == 3) IP2H |= PCMPH, IP2 |= PCMP; \ + }while(0) +//I2CÖжÏÓÅÏȼ¶¿ØÖÆ +#define I2C_Priority(n) do{if(n == 0) IP2H &= ~PI2CH, IP2 &= ~PI2C; \ + if(n == 1) IP2H &= ~PI2CH, IP2 |= PI2C; \ + if(n == 2) IP2H |= PI2CH, IP2 &= ~PI2C; \ + if(n == 3) IP2H |= PI2CH, IP2 |= PI2C; \ + }while(0) +//ÔöÇ¿ÐÍPWM0ÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM0_Priority(n) do{if(n == 0) IP2H &= ~PPWM0H, IP2 &= ~PPWM0; \ + if(n == 1) IP2H &= ~PPWM0H, IP2 |= PPWM0; \ + if(n == 2) IP2H |= PPWM0H, IP2 &= ~PPWM0; \ + if(n == 3) IP2H |= PPWM0H, IP2 |= PPWM0; \ + }while(0) +//ÔöÇ¿ÐÍPWM0Òì³£¼ì²âÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM0FD_Priority(n) do{if(n == 0) IP2H &= ~PPWM0FDH, IP2 &= ~PPWM0FD; \ + if(n == 1) IP2H &= ~PPWM0FDH, IP2 |= PPWM0FD; \ + if(n == 2) IP2H |= PPWM0FDH, IP2 &= ~PPWM0FD; \ + if(n == 3) IP2H |= PPWM0FDH, IP2 |= PPWM0FD; \ + }while(0) +//ÔöÇ¿ÐÍPWM2Òì³£¼ì²âÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM2FD_Priority(n) do{if(n == 0) IP2H &= ~PPWM2FDH, IP2 &= ~PPWM2FD; \ + if(n == 1) IP2H &= ~PPWM2FDH, IP2 |= PPWM2FD; \ + if(n == 2) IP2H |= PPWM2FDH, IP2 &= ~PPWM2FD; \ + if(n == 3) IP2H |= PPWM2FDH, IP2 |= PPWM2FD; \ + }while(0) +//´¥Ãþ°´¼üÖжÏÓÅÏȼ¶¿ØÖÆ +#define PTKSU_Priority(n) do{if(n == 0) IP2H &= ~PTKSUH, IP2 &= ~PTKSU; \ + if(n == 1) IP2H &= ~PTKSUH, IP2 |= PTKSU; \ + if(n == 2) IP2H |= PTKSUH, IP2 &= ~PTKSU; \ + if(n == 3) IP2H |= PTKSUH, IP2 |= PTKSU; \ + }while(0) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP3 = 0xDF; // PPWM4FD PPWM5 PPWM4 PPWM3 PPWM2 PPWM1 PS4 PS3 0000,0000 +#define PPWM4FD 0x80 +#define PPWM5 0x40 +#define PPWM4 0x20 +#define PPWM3 0x10 +#define PPWM2 0x08 +#define PPWM1 0x04 +#define PRTC 0x04 +#define PS4 0x02 +#define PS3 0x01 +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP3H = 0xEE; // PPWM4FDH PPWM5H PPWM4H PPWM3H PPWM2H PPWM1H PS4H PS3H 0000,0000 +#define PPWM4FDH 0x80 +#define PPWM5H 0x40 +#define PPWM4H 0x20 +#define PPWM3H 0x10 +#define PPWM2H 0x08 +#define PPWM1H 0x04 +#define PRTCH 0x04 +#define PS4H 0x02 +#define PS3H 0x01 + +#ifdef STC8Hxx + +//ÔöÇ¿ÐÍPWM1ÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM1_Priority(n) do{if(n == 0) IP2H &= ~PPWM1H, IP2 &= ~PPWM1; \ + if(n == 1) IP2H &= ~PPWM1H, IP2 |= PPWM1; \ + if(n == 2) IP2H |= PPWM1H, IP2 &= ~PPWM1; \ + if(n == 3) IP2H |= PPWM1H, IP2 |= PPWM1; \ + }while(0) +//ÔöÇ¿ÐÍPWM2ÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM2_Priority(n) do{if(n == 0) IP2H &= ~PPWM2H, IP2 &= ~PPWM2; \ + if(n == 1) IP2H &= ~PPWM2H, IP2 |= PPWM2; \ + if(n == 2) IP2H |= PPWM2H, IP2 &= ~PPWM2; \ + if(n == 3) IP2H |= PPWM2H, IP2 |= PPWM2; \ + }while(0) +//USBÖжÏÓÅÏȼ¶¿ØÖÆ +#define USB_Priority(n) do{if(n == 0) IP2H &= ~PUSBH, IP2 &= ~PUSB; \ + if(n == 1) IP2H &= ~PUSBH, IP2 |= PUSB; \ + if(n == 2) IP2H |= PUSBH, IP2 &= ~PUSB; \ + if(n == 3) IP2H |= PUSBH, IP2 |= PUSB; \ + }while(0) +//RTCÖжÏÓÅÏȼ¶¿ØÖÆ +#define RTC_Priority(n) do{if(n == 0) IP3H &= ~PRTCH, IP3 &= ~PRTC; \ + if(n == 1) IP3H &= ~PRTCH, IP3 |= PRTC; \ + if(n == 2) IP3H |= PRTCH, IP3 &= ~PRTC; \ + if(n == 3) IP3H |= PRTCH, IP3 |= PRTC; \ + }while(0) +#else + +//ÔöÇ¿ÐÍPWM1ÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM1_Priority(n) do{if(n == 0) IP3H &= ~PPWM1H, IP3 &= ~PPWM1; \ + if(n == 1) IP3H &= ~PPWM1H, IP3 |= PPWM1; \ + if(n == 2) IP3H |= PPWM1H, IP3 &= ~PPWM1; \ + if(n == 3) IP3H |= PPWM1H, IP3 |= PPWM1; \ + }while(0) +//ÔöÇ¿ÐÍPWM2ÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM2_Priority(n) do{if(n == 0) IP3H &= ~PPWM2H, IP3 &= ~PPWM2; \ + if(n == 1) IP3H &= ~PPWM2H, IP3 |= PPWM2; \ + if(n == 2) IP3H |= PPWM2H, IP3 &= ~PPWM2; \ + if(n == 3) IP3H |= PPWM2H, IP3 |= PPWM2; \ + }while(0) + +#endif + +//ÔöÇ¿ÐÍPWM3ÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM3_Priority(n) do{if(n == 0) IP3H &= ~PPWM3H, IP3 &= ~PPWM3; \ + if(n == 1) IP3H &= ~PPWM3H, IP3 |= PPWM3; \ + if(n == 2) IP3H |= PPWM3H, IP3 &= ~PPWM3; \ + if(n == 3) IP3H |= PPWM3H, IP3 |= PPWM3; \ + }while(0) +//ÔöÇ¿ÐÍPWM4ÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM4_Priority(n) do{if(n == 0) IP3H &= ~PPWM4H, IP3 &= ~PPWM4; \ + if(n == 1) IP3H &= ~PPWM4H, IP3 |= PPWM4; \ + if(n == 2) IP3H |= PPWM4H, IP3 &= ~PPWM4; \ + if(n == 3) IP3H |= PPWM4H, IP3 |= PPWM4; \ + }while(0) +//ÔöÇ¿ÐÍPWM5ÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM5_Priority(n) do{if(n == 0) IP3H &= ~PPWM5H, IP3 &= ~PPWM5; \ + if(n == 1) IP3H &= ~PPWM5H, IP3 |= PPWM5; \ + if(n == 2) IP3H |= PPWM5H, IP3 &= ~PPWM5; \ + if(n == 3) IP3H |= PPWM5H, IP3 |= PPWM5; \ + }while(0) +//ÔöÇ¿ÐÍPWM4Òì³£¼ì²âÖжÏÓÅÏȼ¶¿ØÖÆ +#define PWM4FD_Priority(n) do{if(n == 0) IP3H &= ~PPWM4FDH, IP3 &= ~PPWM4FD; \ + if(n == 1) IP3H &= ~PPWM4FDH, IP3 |= PPWM4FD; \ + if(n == 2) IP3H |= PPWM4FDH, IP3 &= ~PPWM4FD; \ + if(n == 3) IP3H |= PPWM4FDH, IP3 |= PPWM4FD; \ + }while(0) +//´®¿Ú3ÖжÏÓÅÏȼ¶¿ØÖÆ +#define UART3_Priority(n) do{if(n == 0) IP3H &= ~PS3H, IP3 &= ~PS3; \ + if(n == 1) IP3H &= ~PS3H, IP3 |= PS3; \ + if(n == 2) IP3H |= PS3H, IP3 &= ~PS3; \ + if(n == 3) IP3H |= PS3H, IP3 |= PS3; \ + }while(0) +//´®¿Ú4ÖжÏÓÅÏȼ¶¿ØÖÆ +#define UART4_Priority(n) do{if(n == 0) IP3H &= ~PS4H, IP3 &= ~PS4; \ + if(n == 1) IP3H &= ~PS4H, IP3 |= PS4; \ + if(n == 2) IP3H |= PS4H, IP3 &= ~PS4; \ + if(n == 3) IP3H |= PS4H, IP3 |= PS4; \ + }while(0) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP = 0xB8; //ÖжÏÓÅÏȼ¶µÍλ PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000,0000 +//-------- +sbit PPCA = IP^7; //PCA Ä£¿éÖжÏÓÅÏȼ¶ +sbit PLVD = IP^6; //µÍѹ¼à²âÖжÏÓÅÏȼ¶ +sbit PADC = IP^5; //ADC ÖжÏÓÅÏȼ¶ +sbit PS = IP^4; //´®ÐÐÖжÏ0ÓÅÏȼ¶É趨λ +sbit PT1 = IP^3; //¶¨Ê±ÖжÏ1ÓÅÏȼ¶É趨λ +sbit PX1 = IP^2; //ÍⲿÖжÏ1ÓÅÏȼ¶É趨λ +sbit PT0 = IP^1; //¶¨Ê±ÖжÏ0ÓÅÏȼ¶É趨λ +sbit PX0 = IP^0; //ÍⲿÖжÏ0ÓÅÏȼ¶É趨λ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IPH = 0xB7; //ÖжÏÓÅÏȼ¶¸ßλ PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H 0000,0000 +#define PPCAH 0x80 +#define PLVDH 0x40 +#define PADCH 0x20 +#define PSH 0x10 +#define PT1H 0x08 +#define PX1H 0x04 +#define PT0H 0x02 +#define PX0H 0x01 + +//ÍⲿÖжÏ0ÖжÏÓÅÏȼ¶¿ØÖÆ +#define INT0_Priority(n) do{if(n == 0) IPH &= ~PX0H, PX0 = 0; \ + if(n == 1) IPH &= ~PX0H, PX0 = 1; \ + if(n == 2) IPH |= PX0H, PX0 = 0; \ + if(n == 3) IPH |= PX0H, PX0 = 1; \ + }while(0) +//ÍⲿÖжÏ1ÖжÏÓÅÏȼ¶¿ØÖÆ +#define INT1_Priority(n) do{if(n == 0) IPH &= ~PX1H, PX1 = 0; \ + if(n == 1) IPH &= ~PX1H, PX1 = 1; \ + if(n == 2) IPH |= PX1H, PX1 = 0; \ + if(n == 3) IPH |= PX1H, PX1 = 1; \ + }while(0) +//¶¨Ê±Æ÷0ÖжÏÓÅÏȼ¶¿ØÖÆ +#define Timer0_Priority(n) do{if(n == 0) IPH &= ~PT0H, PT0 = 0; \ + if(n == 1) IPH &= ~PT0H, PT0 = 1; \ + if(n == 2) IPH |= PT0H, PT0 = 0; \ + if(n == 3) IPH |= PT0H, PT0 = 1; \ + }while(0) +//¶¨Ê±Æ÷1ÖжÏÓÅÏȼ¶¿ØÖÆ +#define Timer1_Priority(n) do{if(n == 0) IPH &= ~PT1H, PT1 = 0; \ + if(n == 1) IPH &= ~PT1H, PT1 = 1; \ + if(n == 2) IPH |= PT1H, PT1 = 0; \ + if(n == 3) IPH |= PT1H, PT1 = 1; \ + }while(0) +//´®¿Ú1ÖжÏÓÅÏȼ¶¿ØÖÆ +#define UART1_Priority(n) do{if(n == 0) IPH &= ~PSH, PS = 0; \ + if(n == 1) IPH &= ~PSH, PS = 1; \ + if(n == 2) IPH |= PSH, PS = 0; \ + if(n == 3) IPH |= PSH, PS = 1; \ + }while(0) +//ADCÖжÏÓÅÏȼ¶¿ØÖÆ +#define ADC_Priority(n) do{if(n == 0) IPH &= ~PADCH, PADC = 0; \ + if(n == 1) IPH &= ~PADCH, PADC = 1; \ + if(n == 2) IPH |= PADCH, PADC = 0; \ + if(n == 3) IPH |= PADCH, PADC = 1; \ + }while(0) +//µÍѹ¼ì²âÖжÏÓÅÏȼ¶¿ØÖÆ +#define LVD_Priority(n) do{if(n == 0) IPH &= ~PLVDH, PADC = 0; \ + if(n == 1) IPH &= ~PLVDH, PADC = 1; \ + if(n == 2) IPH |= PLVDH, PADC = 0; \ + if(n == 3) IPH |= PLVDH, PADC = 1; \ + }while(0) +//CCP/PCA/PWMÖжÏÓÅÏȼ¶¿ØÖÆ +#define PCA_Priority(n) do{if(n == 0) IPH &= ~PPCAH, PPCA = 0; \ + if(n == 1) IPH &= ~PPCAH, PPCA = 1; \ + if(n == 2) IPH |= PPCAH, PPCA = 0; \ + if(n == 3) IPH |= PPCAH, PPCA = 1; \ + }while(0) + +//#define PCA_InterruptFirst() PPCA = 1 +//#define LVD_InterruptFirst() PLVD = 1 +//#define ADC_InterruptFirst() PADC = 1 +//#define UART1_InterruptFirst() PS = 1 +//#define Timer1_InterruptFirst() PT1 = 1 +//#define INT1_InterruptFirst() PX1 = 1 +//#define Timer0_InterruptFirst() PT0 = 1 +//#define INT0_InterruptFirst() PX0 = 1 + + +/*************************************************************************************************/ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMPCR1 = 0xE6; CMPEN CMPIF PIE NIE PIS NIS CMPOE CMPRES 00000000B +#define CMPEN 0x80 //1: ÔÊÐí±È½ÏÆ÷, 0: ½ûÖ¹,¹Ø±Õ±È½ÏÆ÷µçÔ´ +#define CMPIF 0x40 //±È½ÏÆ÷ÖжϱêÖ¾, °üÀ¨ÉÏÉýÑØ»òϽµÑØÖжÏ, Èí¼þÇå0 +#define PIE 0x20 //1: ±È½Ï½á¹ûÓÉ0±ä1, ²úÉúÉÏÉýÑØÖÐ¶Ï +#define NIE 0x10 //1: ±È½Ï½á¹ûÓÉ1±ä0, ²úÉúϽµÑØÖÐ¶Ï +#define PIS 0x08 //ÊäÈëÕý¼«ÐÔÑ¡Ôñ, 0: Ñ¡ÔñÄÚ²¿P3.7×öÕýÊäÈë, 1: ÓÉADC_CHS[3:0]ËùÑ¡ÔñµÄADCÊäÈë¶Ë×öÕýÊäÈë. +#define NIS 0x04 //ÊäÈ븺¼«ÐÔÑ¡Ôñ, 0: Ñ¡ÔñÄÚ²¿BandGapµçѹBGv×ö¸ºÊäÈë, 1: Ñ¡ÔñÍⲿP3.6×öÊäÈë. +#define CMPOE 0x02 //1: ÔÊÐí±È½Ï½á¹ûÊä³ö, 0: ½ûÖ¹. +#define CMPRES 0x01 //±È½Ï½á¹û, 1: CMP+µçƽ¸ßÓÚCMP-, 0: CMP+µçƽµÍÓÚCMP-, Ö»¶Á + +#define CMP_P_P37 0x00 //ÊäÈëÕý¼«ÐÔÑ¡Ôñ, 0: Ñ¡ÔñÄÚ²¿P3.7×öÕýÊäÈë +#define CMP_P_ADC 0x08 //ÊäÈëÕý¼«ÐÔÑ¡Ôñ, 1: ÓÉADC_CHS[3:0]ËùÑ¡ÔñµÄADCÊäÈë¶Ë×öÕýÊäÈë. +#define CMP_N_GAP 0x00 //ÊäÈ븺¼«ÐÔÑ¡Ôñ, 0: Ñ¡ÔñÄÚ²¿BandGapµçѹBGv×ö¸ºÊäÈë. +#define CMP_N_P36 0x04 //ÊäÈ븺¼«ÐÔÑ¡Ôñ, 1: Ñ¡ÔñÍⲿP3.6×öÊäÈë. + +#define CMPO_P34() P_SW2 &= ~0x08 //½á¹ûÊä³öµ½P3.4. +#define CMPO_P41() P_SW2 |= 0x08 //½á¹ûÊä³öµ½P4.1. + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMPCR2 = 0xE7; INVCMPO DISFLT LCDTY[5:0] 00001001B +#define INVCMPO 0x80 //1: ±È½ÏÆ÷Êä³öIOÈ¡·´, 0: ²»È¡·´ +#define DISFLT 0x40 //1: ¹Ø±Õ0.1uFÂ˲¨, 0: ÔÊÐí +#define LCDTY 0x00 //0~63, ±È½Ï½á¹û±ä»¯ÑÓʱÖÜÆÚÊý + + + +/*************************************************************************************************/ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr SCON = 0x98; SM0 SM1 SM2 REN TB8 RB8 TI RI 00000000B //S1 Control + +#define S1_DoubleRate() PCON |= 0x80 +#define S1_SHIFT() SCON &= 0x3f + +#define S1_8bit() SCON = (SCON & 0x3f) | 0x40 +#define S1_9bit() SCON = (SCON & 0x3f) | 0xc0 +#define S1_RX_Enable() SCON |= 0x10 +#define S1_RX_Disable() SCON &= ~0x10 +#define TI1 TI /* ÅжÏTI1ÊÇ·ñ·¢ËÍÍê³É */ +#define RI1 RI /* ÅжÏRI1ÊÇ·ñ½ÓÊÕÍê³É */ +#define SET_TI1() TI = 1 /* ÉèÖÃTI1(ÒýÆðÖжÏ) */ +#define CLR_TI1() TI = 0 /* Çå³ýTI1 */ +#define CLR_RI1() RI = 0 /* Çå³ýRI1 */ +#define S1TB8_SET() TB8 = 1 /* ÉèÖÃTB8 */ +#define S1TB8_CLR() TB8 = 0 /* Çå³ýTB8 */ +#define S1_Int_Enable() ES = 1 /* ´®¿Ú1ÔÊÐíÖÐ¶Ï */ +#define S1_Int_Disable() ES = 0 /* ´®¿Ú1½ûÖ¹ÖÐ¶Ï */ +#define S1_BRT_UseTimer1() AUXR &= ~1 +#define S1_BRT_UseTimer2() AUXR |= 1 +#define S1_USE_P30P31() P_SW1 &= ~0xc0 //UART1 ʹÓÃP30 P31¿Ú ĬÈÏ +#define S1_USE_P36P37() P_SW1 = (P_SW1 & ~0xc0) | 0x40 //UART1 ʹÓÃP36 P37¿Ú +#define S1_USE_P16P17() P_SW1 = (P_SW1 & ~0xc0) | 0x80 //UART1 ʹÓÃP16 P17¿Ú +#define S1_USE_P43P44() P_SW1 |= 0xc0 //UART1 ʹÓÃP43 P44¿Ú +//#define S1_TXD_RXD_SHORT() PCON2 |= (1<<4) //½«TXDÓëRXDÁ¬½ÓÖмÌÊä³ö +//#define S1_TXD_RXD_OPEN() PCON2 &= ~(1<<4) //½«TXDÓëRXDÁ¬½ÓÖм̶Ͽª ĬÈÏ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S2CON = 0x9A; S2SM0 - S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B //S2 Control + +#define S2_MODE0() S2CON &= ~(1<<7) /* ´®¿Ú2ģʽ0£¬8λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷2µÄÒç³öÂÊ / 4 */ +#define S2_MODE1() S2CON |= (1<<7) /* ´®¿Ú2ģʽ1£¬9λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷2µÄÒç³öÂÊ / 4 */ +#define S2_8bit() S2CON &= ~(1<<7) /* ´®¿Ú2ģʽ0£¬8λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷2µÄÒç³öÂÊ / 4 */ +#define S2_9bit() S2CON |= (1<<7) /* ´®¿Ú2ģʽ1£¬9λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷2µÄÒç³öÂÊ / 4 */ +#define S2_RX_Enable() S2CON |= (1<<4) /* ÔÊÐí´®2½ÓÊÕ */ +#define S2_RX_Disable() S2CON &= ~(1<<4) /* ½ûÖ¹´®2½ÓÊÕ */ +#define TI2 (S2CON & 2) /* ÅжÏTI2ÊÇ·ñ·¢ËÍÍê³É */ +#define RI2 (S2CON & 1) /* ÅжÏRI2ÊÇ·ñ½ÓÊÕÍê³É */ +#define SET_TI2() S2CON |= (1<<1) /* ÉèÖÃTI2(ÒýÆðÖжÏ) */ +#define CLR_TI2() S2CON &= ~(1<<1) /* Çå³ýTI2 */ +#define CLR_RI2() S2CON &= ~1 /* Çå³ýRI2 */ +#define S2TB8_SET() S2CON |= (1<<3) /* ÉèÖÃTB8 */ +#define S2TB8_CLR() S2CON &= ~(1<<3) /* Çå³ýTB8 */ +#define S2_Int_Enable() IE2 |= 1 /* ´®¿Ú2ÔÊÐíÖÐ¶Ï */ +#define S2_Int_Disable() IE2 &= ~1 /* ´®¿Ú2½ûÖ¹ÖÐ¶Ï */ +#define S2_USE_P10P11() P_SW2 &= ~1 /* UART2 ʹÓÃP1¿Ú ĬÈÏ */ +#define S2_USE_P46P47() P_SW2 |= 1 /* UART2 ʹÓÃP4¿Ú */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S3CON = 0xAC; S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI 00000000B //S3 Control + +#define S3_MODE0() S3CON &= ~(1<<7) /* ´®¿Ú3ģʽ0£¬8λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷µÄÒç³öÂÊ / 4 */ +#define S3_MODE1() S3CON |= (1<<7) /* ´®¿Ú3ģʽ1£¬9λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷µÄÒç³öÂÊ / 4 */ +#define S3_8bit() S3CON &= ~(1<<7) /* ´®¿Ú3ģʽ0£¬8λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷µÄÒç³öÂÊ / 4 */ +#define S3_9bit() S3CON |= (1<<7) /* ´®¿Ú3ģʽ1£¬9λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷µÄÒç³öÂÊ / 4 */ +#define S3_RX_Enable() S3CON |= (1<<4) /* ÔÊÐí´®3½ÓÊÕ */ +#define S3_RX_Disable() S3CON &= ~(1<<4) /* ½ûÖ¹´®3½ÓÊÕ */ +#define TI3 (S3CON & 2) != 0 /* ÅжÏTI3ÊÇ·ñ·¢ËÍÍê³É */ +#define RI3 (S3CON & 1) != 0 /* ÅжÏRI3ÊÇ·ñ½ÓÊÕÍê³É */ +#define SET_TI3() S3CON |= (1<<1) /* ÉèÖÃTI3(ÒýÆðÖжÏ) */ +#define CLR_TI3() S3CON &= ~(1<<1) /* Çå³ýTI3 */ +#define CLR_RI3() S3CON &= ~1 /* Çå³ýRI3 */ +#define S3TB8_SET() S3CON |= (1<<3) /* ÉèÖÃTB8 */ +#define S3TB8_CLR() S3CON &= ~(1<<3) /* Çå³ýTB8 */ +#define S3_Int_Enable() IE2 |= (1<<3) /* ´®¿Ú3ÔÊÐíÖÐ¶Ï */ +#define S3_Int_Disable() IE2 &= ~(1<<3) /* ´®¿Ú3½ûÖ¹ÖÐ¶Ï */ +#define S3_BRT_UseTimer3() S3CON |= (1<<6) /* BRT select Timer3 */ +#define S3_BRT_UseTimer2() S3CON &= ~(1<<6) /* BRT select Timer2 */ +#define S3_USE_P00P01() P_SW2 &= ~2 /* UART3 ʹÓÃP0¿Ú ĬÈÏ */ +#define S3_USE_P50P51() P_SW2 |= 2 /* UART3 ʹÓÃP5¿Ú */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S4CON = 0x84; S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI 00000000B //S4 Control + +#define S4_MODE0() S4CON &= ~(1<<7) /* ´®¿Ú4ģʽ0£¬8λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷µÄÒç³öÂÊ / 4 */ +#define S4_MODE1() S4CON |= (1<<7) /* ´®¿Ú4ģʽ1£¬9λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷µÄÒç³öÂÊ / 4 */ +#define S4_8bit() S4CON &= ~(1<<7) /* ´®¿Ú4ģʽ0£¬8λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷µÄÒç³öÂÊ / 4 */ +#define S4_9bit() S4CON |= (1<<7) /* ´®¿Ú4ģʽ1£¬9λUART£¬²¨ÌØÂÊ = ¶¨Ê±Æ÷µÄÒç³öÂÊ / 4 */ +#define S4_RX_Enable() S4CON |= (1<<4) /* ÔÊÐí´®4½ÓÊÕ */ +#define S4_RX_Disable() S4CON &= ~(1<<4) /* ½ûÖ¹´®4½ÓÊÕ */ +#define TI4 (S4CON & 2) != 0 /* ÅжÏTI3ÊÇ·ñ·¢ËÍÍê³É */ +#define RI4 (S4CON & 1) != 0 /* ÅжÏRI3ÊÇ·ñ½ÓÊÕÍê³É */ +#define SET_TI4() S4CON |= 2 /* ÉèÖÃTI3(ÒýÆðÖжÏ) */ +#define CLR_TI4() S4CON &= ~2 /* Çå³ýTI3 */ +#define CLR_RI4() S4CON &= ~1 /* Çå³ýRI3 */ +#define S4TB8_SET() S4CON |= 8 /* ÉèÖÃTB8 */ +#define S4TB8_CLR() S4CON &= ~8 /* Çå³ýTB8 */ +#define S4_Int_Enable() IE2 |= (1<<4) /* ´®¿Ú4ÔÊÐíÖÐ¶Ï */ +#define S4_Int_Disable() IE2 &= ~(1<<4) /* ´®¿Ú4½ûÖ¹ÖÐ¶Ï */ +#define S4_BRT_UseTimer4() S4CON |= (1<<6) /* BRT select Timer4 */ +#define S4_BRT_UseTimer2() S4CON &= ~(1<<6) /* BRT select Timer2 */ +#define S4_USE_P02P03() P_SW2 &= ~4 /* UART4 ʹÓÃP0¿Ú ĬÈÏ */ +#define S4_USE_P52P53() P_SW2 |= 4 /* UART4 ʹÓÃP5¿Ú */ + + + +/**********************************************************/ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr AUXR = 0x8E; T0x12 T1x12 UART_M0x6 T2R T2_C/T T2x12 EXTRAM S1ST2 0000,0000 //Auxiliary Register + +#define InternalXdata_Disable() AUXR |= 2 /* ½ûֹʹÓÃÄÚ²¿xdata, ËùÓзÃÎÊxdata¶¼ÊÇ·ÃÎÊÍⲿxdata */ +#define InternalXdata_Enable() AUXR &= ~2 /* ÔÊÐíʹÓÃÄÚ²¿xdata, µ±·ÃÎʵĵØÖ·ÔÚÄÚ²¿xdata·¶Î§Ê±, ·ÃÎÊÄÚ²¿µÄxadta, µ±µØÖ·³¬¹ýÄÚ²¿xdataʱ, ·ÃÎÊÍⲿxdata */ +#define S1_M0x6() AUXR |= (1<<5) /* UART Mode0 Speed is 6x Standard */ +#define S1_M0x1() AUXR &= ~(1<<5) /* default, UART Mode0 Speed is Standard */ + +//==================================== +#define Timer0_16bitAutoReload() TMOD &= ~0x03 /* 16λ×Ô¶¯ÖØ×° */ +#define Timer0_16bit() TMOD = (TMOD & ~0x03) | 0x01 /* 16λ */ +#define Timer0_8bitAutoReload() TMOD = (TMOD & ~0x03) | 0x02 /* 8λ×Ô¶¯ÖØ×° */ +#define Timer0_16bitAutoRL_NoMask() TMOD |= 0x03 /* 16λ×Ô¶¯ÖØ×°²»¿ÉÆÁ±ÎÖÐ¶Ï */ +#define Timer0_Run() TR0 = 1 /* ÔÊÐí¶¨Ê±Æ÷0¼ÆÊý */ +#define Timer0_Stop() TR0 = 0 /* ½ûÖ¹¶¨Ê±Æ÷0¼ÆÊý */ +#define Timer0_Gate_INT0_P32() TMOD |= (1<<3) /* ʱÆ÷0ÓÉÍⲿINT0¸ßµçƽÔÊÐí¶¨Ê±¼ÆÊý */ +#define Timer0_AsTimer() TMOD &= ~(1<<2) /* ʱÆ÷0ÓÃ×ö¶¨Ê±Æ÷ */ +#define Timer0_AsCounter() TMOD |= (1<<2) /* ʱÆ÷0ÓÃ×ö¼ÆÊýÆ÷ */ +#define Timer0_AsCounterP34() TMOD |= (1<<2) /* ʱÆ÷0ÓÃ×ö¼ÆÊýÆ÷ */ +#define Timer0_1T() AUXR |= (1<<7) /* Timer0 clodk = fo */ +#define Timer0_12T() AUXR &= ~(1<<7) /* Timer0 clodk = fo/12 12·ÖƵ, default */ +#define Timer0_CLKO_Enable() INT_CLKO |= 1 /* ÔÊÐí T0 Òç³öÂö³åÔÚT0(P3.5)½ÅÊä³ö£¬Fck0 = 1/2 T0 Òç³öÂÊ£¬T0¿ÉÒÔ1T»ò12T¡£ */ +#define Timer0_CLKO_Disable() INT_CLKO &= ~1 +#define Timer0_CLKO_Enable_P34() INT_CLKO |= 1 /* ÔÊÐí T0 Òç³öÂö³åÔÚT0(P3.5)½ÅÊä³ö£¬Fck0 = 1/2 T0 Òç³öÂÊ£¬T0¿ÉÒÔ1T»ò12T¡£ */ +#define Timer0_CLKO_Disable_P34() INT_CLKO &= ~1 +#define Timer0_InterruptEnable() ET0 = 1 /* ÔÊÐíTimer1ÖжÏ.*/ +#define Timer0_InterruptDisable() ET0 = 0 /* ½ûÖ¹Timer1ÖжÏ.*/ + +#define T0_Load(n) TH0 = (n) / 256, TL0 = (n) % 256 +#define T0_Load_us_1T(n) Timer0_AsTimer(),Timer0_1T(), Timer0_16bitAutoReload(),TH0=(65536-((MAIN_Fosc/1000)*(n))/1000)/256, TL0=(65536-((MAIN_Fosc/1000)*(n))/1000)%256 +#define T0_Load_us_12T(n) Timer0_AsTimer(),Timer0_12T(),Timer0_16bitAutoReload(),TH0=(65536-((MAIN_Fosc/12000)*(n))/1000)/256,TL0=(65536-((MAIN_Fosc/12000)*(n))/1000)%256 +#define T0_Frequency_1T_P35(n) ET0=0,Timer0_AsTimer(),Timer0_1T(),Timer0_16bitAutoReload(),TH0=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL0=(65536-(n/2+MAIN_Fosc/2)/(n))%256,INT_CLKO |= bit0,TR0=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T0_Frequency_12T_P35(n) ET0=0,Timer0_AsTimer(),Timer0_12T(),Timer0_16bitAutoReload(),TH0=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL0=(65536-(n/2+MAIN_Fosc/24)/(n))%256,INT_CLKO |= bit0,TR0=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer1_16bitAutoReload() TMOD &= ~0x30 /* 16λ×Ô¶¯ÖØ×° */ +#define Timer1_16bit() TMOD = (TMOD & ~0x30) | 0x10 /* 16λ */ +#define Timer1_8bitAutoReload() TMOD = (TMOD & ~0x30) | 0x20 /* 8λ×Ô¶¯ÖØ×° */ +#define Timer1_Run() TR1 = 1 /* ÔÊÐí¶¨Ê±Æ÷1¼ÆÊý */ +#define Timer1_Stop() TR1 = 0 /* ½ûÖ¹¶¨Ê±Æ÷1¼ÆÊý */ +#define Timer1_Gate_INT1_P33() TMOD |= (1<<7) /* ʱÆ÷1ÓÉÍⲿINT1¸ßµçƽÔÊÐí¶¨Ê±¼ÆÊý */ +#define Timer1_AsTimer() TMOD &= ~(1<<6) /* ʱÆ÷1ÓÃ×ö¶¨Ê±Æ÷ */ +#define Timer1_AsCounter() TMOD |= (1<<6) /* ʱÆ÷1ÓÃ×ö¼ÆÊýÆ÷ */ +#define Timer1_AsCounterP35() TMOD |= (1<<6) /* ʱÆ÷1ÓÃ×ö¼ÆÊýÆ÷ */ +#define Timer1_1T() AUXR |= (1<<6) /* Timer1 clodk = fo */ +#define Timer1_12T() AUXR &= ~(1<<6) /* Timer1 clodk = fo/12 12·ÖƵ, default */ +#define Timer1_CLKO_Enable() INT_CLKO |= 2 /* ÔÊÐí T1 Òç³öÂö³åÔÚT1(P3.4)½ÅÊä³ö£¬Fck1 = 1/2 T1 Òç³öÂÊ£¬T1¿ÉÒÔ1T»ò12T¡£ */ +#define Timer1_CLKO_Disable() INT_CLKO &= ~2 +#define Timer1_CLKO_Enable_P35() INT_CLKO |= 2 /* ÔÊÐí T1 Òç³öÂö³åÔÚT1(P3.4)½ÅÊä³ö£¬Fck1 = 1/2 T1 Òç³öÂÊ£¬T1¿ÉÒÔ1T»ò12T¡£ */ +#define Timer1_CLKO_Disable_P35() INT_CLKO &= ~2 +#define Timer1_InterruptEnable() ET1 = 1 /* ÔÊÐíTimer1ÖжÏ. */ +#define Timer1_InterruptDisable() ET1 = 0 /* ½ûÖ¹Timer1ÖжÏ. */ + +#define T1_Load(n) TH1 = (n) / 256, TL1 = (n) % 256 +#define T1_Load_us_1T(n) Timer1_AsTimer(),Timer1_1T(), Timer1_16bitAutoReload(),TH1=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL1=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T1_Load_us_12T(n) Timer1_AsTimer(),Timer1_12T(),Timer1_16bitAutoReload(),TH1=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL1=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T1_Frequency_1T_P34(n) ET1=0,Timer1_AsTimer(),Timer1_1T(),Timer1_16bitAutoReload(),TH1=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL1=(65536-(n/2+MAIN_Fosc/2)/(n))%256,INT_CLKO |= bit1,TR1=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T1_Frequency_12T_P34(n) ET1=0,Timer1_AsTimer(),Timer1_12T(),Timer1_16bitAutoReload(),TH1=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL1=(65536-(n/2+MAIN_Fosc/24)/(n))%256,INT_CLKO |= bit1,TR1=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer2_Run() AUXR |= (1<<4) /* ÔÊÐí¶¨Ê±Æ÷2¼ÆÊý */ +#define Timer2_Stop() AUXR &= ~(1<<4) /* ½ûÖ¹¶¨Ê±Æ÷2¼ÆÊý */ +#define Timer2_AsTimer() AUXR &= ~(1<<3) /* ʱÆ÷2ÓÃ×ö¶¨Ê±Æ÷ */ +#define Timer2_AsCounter() AUXR |= (1<<3) /* ʱÆ÷2ÓÃ×ö¼ÆÊýÆ÷ */ +#define Timer2_AsCounterP31() AUXR |= (1<<3) /* ʱÆ÷2ÓÃ×ö¼ÆÊýÆ÷ */ +#define Timer2_1T() AUXR |= (1<<2) /* Timer0 clock = fo */ +#define Timer2_12T() AUXR &= ~(1<<2) /* Timer0 clock = fo/12 12·ÖƵ, default */ +#define Timer2_CLKO_Enable() INT_CLKO |= 4 /* ÔÊÐí T2 Òç³öÂö³åÔÚP1.3½ÅÊä³ö£¬Fck2 = 1/2 T2 Òç³öÂÊ£¬T2¿ÉÒÔ1T»ò12T¡£ */ +#define Timer2_CLKO_Disable() INT_CLKO &= ~4 +#define Timer2_CLKO_Enable_P13() INT_CLKO |= 4 /* ÔÊÐí T2 Òç³öÂö³åÔÚP1.3½ÅÊä³ö£¬Fck2 = 1/2 T2 Òç³öÂÊ£¬T2¿ÉÒÔ1T»ò12T¡£ */ +#define Timer2_CLKO_Disable_P13() INT_CLKO &= ~4 +#define Timer2_InterruptEnable() IE2 |= (1<<2) /* ÔÊÐíTimer2ÖжÏ. */ +#define Timer2_InterruptDisable() IE2 &= ~(1<<2) /* ½ûÖ¹Timer2ÖжÏ. */ + +#define T2_Load(n) TH2 = (n) / 256, TL2 = (n) % 256 +#define T2_Load_us_1T(n) Timer2_AsTimer(),Timer2_1T(), TH2=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL2=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T2_Load_us_12T(n) Timer2_AsTimer(),Timer2_12T(),TH2=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL2=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T2_Frequency_1T_P30(n) Timer2_InterruptDisable(),Timer2_AsTimer(),Timer2_1T(), TH2=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL2=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer2_CLKO_Enable_P30(),Timer2_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T2_Frequency_12T_P30(n) Timer2_InterruptDisable(),Timer2_AsTimer(),Timer2_12T(),TH2=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL2=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer2_CLKO_Enable_P30(),Timer2_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer3_Run() T4T3M |= (1<<3) /* ÔÊÐí¶¨Ê±Æ÷3¼ÆÊý */ +#define Timer3_Stop() T4T3M &= ~(1<<3) /* ½ûÖ¹¶¨Ê±Æ÷3¼ÆÊý */ +#define Timer3_AsTimer() T4T3M &= ~(1<<2) /* ʱÆ÷3ÓÃ×ö¶¨Ê±Æ÷ */ +#define Timer3_AsCounter() T4T3M |= (1<<2) /* ʱÆ÷3ÓÃ×ö¼ÆÊýÆ÷, P0.5ΪÍⲿÂö³å */ +#define Timer3_AsCounterP05() T4T3M |= (1<<2) /* ʱÆ÷3ÓÃ×ö¼ÆÊýÆ÷, P0.5ΪÍⲿÂö³å */ +#define Timer3_1T() T4T3M |= (1<<1) /* 1Tģʽ */ +#define Timer3_12T() T4T3M &= ~(1<<1) /* 12Tģʽ, default */ +#define Timer3_CLKO_Enable() T4T3M |= 1 /* ÔÊÐíT3Òç³öÂö³åÔÚT3(P0.4)½ÅÊä³ö£¬Fck = 1/2 T2 Òç³öÂÊ£¬T2¿ÉÒÔ1T»ò12T¡£ */ +#define Timer3_CLKO_Disable() T4T3M &= ~1 /* ½ûÖ¹T3Òç³öÂö³åÔÚT3(P0.4)½ÅÊä³ö */ +#define Timer3_CLKO_Enable_P04() T4T3M |= 1 /* ÔÊÐíT3Òç³öÂö³åÔÚT3(P0.4)½ÅÊä³ö£¬Fck = 1/2 T2 Òç³öÂÊ£¬T2¿ÉÒÔ1T»ò12T¡£ */ +#define Timer3_CLKO_Disable_P04() T4T3M &= ~1 /* ½ûÖ¹T3Òç³öÂö³åÔÚT3(P0.4)½ÅÊä³ö */ +#define Timer3_InterruptEnable() IE2 |= (1<<5) /* ÔÊÐíTimer3ÖжÏ. */ +#define Timer3_InterruptDisable() IE2 &= ~(1<<5) /* ½ûÖ¹Timer3ÖжÏ. */ + +#define T3_Load(n) TH3 = (n) / 256, TL3 = (n) % 256 +#define T3_Load_us_1T(n) Timer3_AsTimer(),Timer3_1T(), TH3=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL3=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T3_Load_us_12T(n) Timer3_AsTimer(),Timer3_12T(),TH3=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL3=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T3_Frequency_1T_P04(n) Timer3_InterruptDisable(),Timer3_AsTimer(),Timer3_1T(), TH3=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL3=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer3_CLKO_P04_Enable,Timer3_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T3_Frequency_12T_P04(n) Timer3_InterruptDisable(),Timer3_AsTimer(),Timer3_12T(),TH3=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL3=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer3_CLKO_P04_Enable,Timer3_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer4_Run() T4T3M |= (1<<7) /* ÔÊÐí¶¨Ê±Æ÷4¼ÆÊý */ +#define Timer4_Stop() T4T3M &= ~(1<<7) /* ½ûÖ¹¶¨Ê±Æ÷4¼ÆÊý */ +#define Timer4_AsTimer() T4T3M &= ~(1<<6) /* ʱÆ÷4ÓÃ×ö¶¨Ê±Æ÷ */ +#define Timer4_AsCounter() T4T3M |= (1<<6) /* ʱÆ÷4ÓÃ×ö¼ÆÊýÆ÷, P0.7ΪÍⲿÂö³å */ +#define Timer4_AsCounterP07() T4T3M |= (1<<6) /* ʱÆ÷4ÓÃ×ö¼ÆÊýÆ÷, P0.7ΪÍⲿÂö³å */ +#define Timer4_1T() T4T3M |= (1<<5) /* 1Tģʽ */ +#define Timer4_12T() T4T3M &= ~(1<<5) /* 12Tģʽ, default */ +#define Timer4_CLKO_Enable() T4T3M |= (1<<4) /* ÔÊÐíT4Òç³öÂö³åÔÚT4(P0.6)½ÅÊä³ö£¬Fck = 1/2 T2 Òç³öÂÊ£¬T2¿ÉÒÔ1T»ò12T¡£ */ +#define Timer4_CLKO_Disable() T4T3M &= ~(1<<4) /* ½ûÖ¹T4Òç³öÂö³åÔÚT4(P0.6)½ÅÊä³ö */ +#define Timer4_CLKO_Enable_P06() T4T3M |= (1<<4) /* ÔÊÐíT4Òç³öÂö³åÔÚT4(P0.6)½ÅÊä³ö£¬Fck = 1/2 T2 Òç³öÂÊ£¬T2¿ÉÒÔ1T»ò12T¡£ */ +#define Timer4_CLKO_Disable_P06() T4T3M &= ~(1<<4) /* ½ûÖ¹T4Òç³öÂö³åÔÚT4(P0.6)½ÅÊä³ö */ +#define Timer4_InterruptEnable() IE2 |= (1<<6) /* ÔÊÐíTimer4ÖжÏ. */ +#define Timer4_InterruptDisable() IE2 &= ~(1<<6) /* ½ûÖ¹Timer4ÖжÏ. */ + +#define T4_Load(n) TH4 = (n) / 256, TL4 = (n) % 256 +#define T4_Load_us_1T(n) Timer4_AsTimer(),Timer4_1T(), TH4=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL4=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T4_Load_us_12T(n) Timer4_AsTimer(),Timer4_12T(),TH4=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL4=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T4_Frequency_1T_P06(n) Timer4_InterruptDisable(),Timer4_AsTimer(),Timer4_1T(), TH4=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL4=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer4_CLKO_P06_Enable(),Timer4_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T4_Frequency_12T_P06(n) Timer4_InterruptDisable(),Timer4_AsTimer(),Timer4_12T(),TH4=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL4=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer4_CLKO_P06_Enable(),Timer4_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +//==================================================================================================================== + +//sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register +// 7 6 5 4 3 2 1 0 Reset Value +// WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0 xx00,0000 +#define D_WDT_FLAG (1<<7) +#define D_EN_WDT (1<<5) +#define D_CLR_WDT (1<<4) /* auto clear */ +#define D_IDLE_WDT (1<<3) /* WDT counter when Idle */ +#define D_WDT_SCALE_2 0 +#define D_WDT_SCALE_4 1 +#define D_WDT_SCALE_8 2 /* T=393216*N/fo */ +#define D_WDT_SCALE_16 3 +#define D_WDT_SCALE_32 4 +#define D_WDT_SCALE_64 5 +#define D_WDT_SCALE_128 6 +#define D_WDT_SCALE_256 7 + +#define WDT_PS_Set(n) WDT_CONTR = (WDT_CONTR & ~0x07) | (n & 0x07) /* ¿´ÃŹ·¶¨Ê±Æ÷ʱÖÓ·ÖÆµÏµÊýÉèÖà */ +#define WDT_reset(n) WDT_CONTR = D_EN_WDT + D_CLR_WDT + D_IDLE_WDT + (n) /* ³õʼ»¯WDT£¬Î¹¹· */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PCON = 0x87; SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000 //Power Control +//SMOD //´®¿ÚË«±¶ËÙ +//SMOD0 +#define LVDF (1<<5) /* P4.6µÍѹ¼ì²â±êÖ¾ */ +//POF +//GF1 +//GF0 +//#define D_PD 2 /* set 1, power down mode */ +//#define D_IDLE 1 /* set 1, idle mode */ +#define MCU_IDLE() PCON |= 1 /* MCU ½øÈë IDLE ģʽ */ +#define MCU_POWER_DOWN() PCON |= 2 /* MCU ½øÈë ˯Ãß Ä£Ê½ */ + + +//sfr IAP_CMD = 0xC5; +#define IAP_STANDBY() IAP_CMD = 0 //IAP¿ÕÏÐÃüÁ½ûÖ¹£© +#define IAP_READ() IAP_CMD = 1 //IAP¶Á³öÃüÁî +#define IAP_WRITE() IAP_CMD = 2 //IAPдÈëÃüÁî +#define IAP_ERASE() IAP_CMD = 3 //IAP²Á³ýÃüÁî + +//sfr IAP_TRIG = 0xC6; +#define IAP_TRIG() IAP_TRIG = 0x5A, IAP_TRIG = 0xA5 /* IAP´¥·¢ÃüÁî */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IAP_CONTR = 0xC7; IAPEN SWBS SWRST CFAIL - - - - 0000,x000 //IAP Control Register + +#define IAP_EN (1<<7) +#define IAP_SWBS (1<<6) +#define IAP_SWRST (1<<5) +#define IAP_CMD_FAIL (1<<4) + +#define IAP_ENABLE() IAP_CONTR = IAP_EN; IAP_TPS = MAIN_Fosc / 1000000 +#define IAP_DISABLE() IAP_CONTR = 0; IAP_CMD = 0; IAP_TRIG = 0; IAP_ADDRH = 0xff; IAP_ADDRL = 0xff + + +/* ADC Register */ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr ADC_CONTR = 0xBC; ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000 /* AD ת»»¿ØÖƼĴæÆ÷ */ +//sfr ADC_RES = 0xBD; ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000 /* A/D ת»»½á¹û¸ß8λ */ +//sfr ADC_RESL = 0xBE; ADCV.1 ADCV.0 0000,0000 /* A/D ת»»½á¹ûµÍ2λ */ +//sfr ADC_CONTR = 0xBC; //Ö±½ÓÓÃMOV²Ù×÷£¬²»ÒªÓÃÓë»ò + + +//sfr SPCTL = 0xCE; SPI¿ØÖƼĴæÆ÷ +// 7 6 5 4 3 2 1 0 Reset Value +// SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 0x00 + +#define SPI_SSIG_None() SPCTL |= (1<<7) /* 1: ºöÂÔSS½Å */ +#define SPI_SSIG_Enable() SPCTL &= ~(1<<7) /* 0: SS½ÅÓÃÓÚ¾ö¶¨Ö÷´Ó»ú */ +#define SPI_Enable() SPCTL |= (1<<6) /* 1: ÔÊÐíSPI */ +#define SPI_Disable() SPCTL &= ~(1<<6) /* 0: ½ûÖ¹SPI */ +#define SPI_LSB_First() SPCTL |= (1<<5) /* 1: LSBÏÈ·¢ */ +#define SPI_MSB_First() SPCTL &= ~(1<<5) /* 0: MSBÏÈ·¢ */ +#define SPI_Master() SPCTL |= (1<<4) /* 1: ÉèΪÖ÷»ú */ +#define SPI_Slave() SPCTL &= ~(1<<4) /* 0: ÉèΪ´Ó»ú */ +#define SPI_SCLK_NormalH() SPCTL |= (1<<3) /* 1: ¿ÕÏÐʱSCLKΪ¸ßµçƽ */ +#define SPI_SCLK_NormalL() SPCTL &= ~(1<<3) /* 0: ¿ÕÏÐʱSCLKΪµÍµçƽ */ +#define SPI_PhaseH() SPCTL |= (1<<2) /* 1: */ +#define SPI_PhaseL() SPCTL &= ~(1<<2) /* 0: */ +#define SPI_Speed(n) SPCTL = (SPCTL & ~3) | (n) /*ÉèÖÃËÙ¶È, 0 -- fosc/4, 1 -- fosc/8, 2 -- fosc/16, 3 -- fosc/32 */ + +//sfr SPDAT = 0xCF; //SPI Data Register 0000,0000 +//sfr SPSTAT = 0xCD; //SPI״̬¼Ä´æÆ÷ +// 7 6 5 4 3 2 1 0 Reset Value +// SPIF WCOL - - - - - - +#define SPIF 0x80 /* SPI´«ÊäÍê³É±êÖ¾¡£Ð´Èë1Çå0¡£*/ +#define WCOL 0x40 /* SPIд³åÍ»±êÖ¾¡£Ð´Èë1Çå0¡£ */ + +#define SPI_USE_P12P13P14P15() P_SW1 &= ~0x0c /* ½«SPIÇл»µ½P12(SS) P13(MOSI) P14(MISO) P15(SCLK)(ÉϵçĬÈÏ)¡£*/ +#define SPI_USE_P22P23P24P25() P_SW1 = (P_SW1 & ~0x0c) | 0x04 /* ½«SPIÇл»µ½P22(SS) P23(MOSI) P24(MISO) P25(SCLK)¡£*/ +#define SPI_USE_P74P75P76P77() P_SW1 = (P_SW1 & ~0x0c) | 0x08 /* ½«SPIÇл»µ½P74(SS) P75(MOSI) P76(MISO) P77(SCLK)¡£*/ +#define SPI_USE_P35P34P33P32() P_SW1 = P_SW1 | 0x0C /* ½«SPIÇл»µ½P35(SS) P34(MOSI) P33(MISO) P32(SCLK)¡£*/ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CCFG = 0xFE80H; ENI2C MSSL MSSPEED[5:0] 0000,0000 /* I2CÅäÖüĴæÆ÷ */ +#define I2C_Function(n) (n==0?(I2CCFG &= ~0x80):(I2CCFG |= 0x80)) //0£º½ûÖ¹ I2C ¹¦ÄÜ£»1£ºÊ¹ÄÜ I2C ¹¦ÄÜ +#define I2C_ENABLE() I2CCFG |= 0x80 /* ʹÄÜ I2C ¹¦ÄÜ */ +#define I2C_DISABLE() I2CCFG &= ~0x80 /* ½ûÖ¹ I2C ¹¦ÄÜ */ +#define I2C_Master() I2CCFG |= 0x40 /* 1: ÉèΪÖ÷»ú */ +#define I2C_Slave() I2CCFG &= ~0x40 /* 0: ÉèΪ´Ó»ú */ +#define I2C_SetSpeed(n) I2CCFG = (I2CCFG & ~0x3f) | (n & 0x3f) /* ×ÜÏßËÙ¶È=Fosc/2/(Speed*2+4) */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSCR = 0xFE81H; EMSI - - - MSCMD[3:0] 0000,0000 /* I2CÅäÖüĴæÆ÷ */ +#define I2C_Master_Inturrupt(n) (n==0?(I2CMSCR &= ~0x80):(I2CMSCR |= 0x80)) //0£º½ûÖ¹ I2C ¹¦ÄÜ£»1£ºÊ¹ÄÜ I2C ¹¦ÄÜ + +#define I2C_CMD_None 0 +#define I2C_CMD_Start 1 +#define I2C_CMD_Send 2 +#define I2C_CMD_RACK 3 +#define I2C_CMD_Read 4 +#define I2C_CMD_SACK 5 +#define I2C_CMD_Stop 6 +#define I2C_CMD_RFU1 7 +#define I2C_CMD_RFU2 8 +#define I2C_CMD_Start_Send_RACK 9 +#define I2C_CMD_Send_RACK 10 +#define I2C_CMD_Read_SACK 11 +#define I2C_CMD_Read_SNAK 12 + +#define I2C_Command(n) I2CMSCR = (I2CMSCR & ~0x0f) | (n & 0x0f) /* Ö÷»úÃüÁî */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSST = 0xFE82H; MSBUSY MSIF - - - - MSACKI MSACKO 0000,0000 /* I2CÖ÷»ú״̬¼Ä´æÆ÷ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSAUX = 0xFE88H; - - - - - - - WDTA 0000,0000 /* I2CÖ÷»ú¸¨Öú¿ØÖƼĴæÆ÷ */ +#define I2C_WDTA_EN() I2CMSAUX |= 0x01 /* ʹÄÜ×Ô¶¯·¢ËÍ */ +#define I2C_WDTA_DIS() I2CMSAUX &= ~0x01 /* ½ûÖ¹×Ô¶¯·¢ËÍ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLCR = 0xFE83H; - ESTAI ERXI ETXI ESTOI - - SLRET 0000,0000 /* I2C´Ó»ú¿ØÖƼĴæÆ÷ */ +#define I2C_ESTAI_EN() I2CSLCR |= 0x40 /* ʹÄÜ´Ó»ú½ÓÊÕSTARTÐźÅÖÐ¶Ï */ +#define I2C_ESTAI_DIS() I2CSLCR &= ~0x40 /* ½ûÖ¹´Ó»ú½ÓÊÕSTARTÐźÅÖÐ¶Ï */ +#define I2C_ERXI_EN() I2CSLCR |= 0x20 /* ʹÄÜ´Ó»ú½ÓÊÕ1×Ö½ÚÊý¾ÝÖÐ¶Ï */ +#define I2C_ERXI_DIS() I2CSLCR &= ~0x20 /* ½ûÖ¹´Ó»ú½ÓÊÕ1×Ö½ÚÊý¾ÝÖÐ¶Ï */ +#define I2C_ETXI_EN() I2CSLCR |= 0x10 /* ʹÄÜ´Ó»ú·¢ËÍ1×Ö½ÚÊý¾ÝÖÐ¶Ï */ +#define I2C_ETXI_DIS() I2CSLCR &= ~0x10 /* ½ûÖ¹´Ó»ú·¢ËÍ1×Ö½ÚÊý¾ÝÖÐ¶Ï */ +#define I2C_ESTOI_EN() I2CSLCR |= 0x08 /* ʹÄÜ´Ó»ú½ÓÊÕSTOPÐźÅÖÐ¶Ï */ +#define I2C_ESTOI_DIS() I2CSLCR &= ~0x08 /* ½ûÖ¹´Ó»ú½ÓÊÕSTOPÐźÅÖÐ¶Ï */ +#define I2C_SLRET() I2CSLCR |= 0x01 /* ¸´Î»´Ó»úģʽ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLST = 0xFE84H; SLBUSY STAIF RXIF TXIF STOIF - SLACKI SLACKO 0000,0000 /* I2C´Ó»ú״̬¼Ä´æÆ÷ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLADR = 0xFE85H; I2CSLADR[7:1] MA 0000,0000 /* I2C´Ó»úµØÖ·¼Ä´æÆ÷ */ +#define I2C_Address(n) I2CSLADR = (I2CSLADR & 0x01) | (n << 1) /* ´Ó»úµØÖ· */ +#define I2C_MATCH_EN() I2CSLADR &= ~0x01 /* ʹÄÜ´Ó»úµØÖ·±È½Ï¹¦ÄÜ£¬Ö»½ÓÊÜÏàÆ¥Å䵨ַ */ +#define I2C_MATCH_DIS() I2CSLADR |= 0x01 /* ½ûÖ¹´Ó»úµØÖ·±È½Ï¹¦ÄÜ£¬½ÓÊÜËùÓÐÉ豸µØÖ· */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ENO = 0xFEB1H; ENO4N ENO4P ENO3N ENO3P ENO2N ENO2P ENO1N ENO1P 0000,0000 /* Êä³öʹÄܼĴæÆ÷ */ +//sfr PWMB_ENO = 0xFEB5H; - ENO8P - ENO7P - ENO6P - ENO5P 0000,0000 /* Êä³öʹÄܼĴæÆ÷ */ +#define PWM1P_OUT_EN() PWMA_ENO |= 0x01 /* ʹÄÜ PWM1P Êä³ö */ +#define PWM1P_OUT_DIS() PWMA_ENO &= ~0x01 /* ½ûÖ¹ PWM1P Êä³ö */ +#define PWM1N_OUT_EN() PWMA_ENO |= 0x02 /* ʹÄÜ PWM1N Êä³ö */ +#define PWM1N_OUT_DIS() PWMA_ENO &= ~0x02 /* ½ûÖ¹ PWM1N Êä³ö */ +#define PWM2P_OUT_EN() PWMA_ENO |= 0x04 /* ʹÄÜ PWM2P Êä³ö */ +#define PWM2P_OUT_DIS() PWMA_ENO &= ~0x04 /* ½ûÖ¹ PWM2P Êä³ö */ +#define PWM2N_OUT_EN() PWMA_ENO |= 0x08 /* ʹÄÜ PWM2N Êä³ö */ +#define PWM2N_OUT_DIS() PWMA_ENO &= ~0x08 /* ½ûÖ¹ PWM2N Êä³ö */ +#define PWM3P_OUT_EN() PWMA_ENO |= 0x10 /* ʹÄÜ PWM3P Êä³ö */ +#define PWM3P_OUT_DIS() PWMA_ENO &= ~0x10 /* ½ûÖ¹ PWM3P Êä³ö */ +#define PWM3N_OUT_EN() PWMA_ENO |= 0x20 /* ʹÄÜ PWM3N Êä³ö */ +#define PWM3N_OUT_DIS() PWMA_ENO &= ~0x20 /* ½ûÖ¹ PWM3N Êä³ö */ +#define PWM4P_OUT_EN() PWMA_ENO |= 0x40 /* ʹÄÜ PWM3P Êä³ö */ +#define PWM4P_OUT_DIS() PWMA_ENO &= ~0x40 /* ½ûÖ¹ PWM3P Êä³ö */ +#define PWM4N_OUT_EN() PWMA_ENO |= 0x80 /* ʹÄÜ PWM3N Êä³ö */ +#define PWM4N_OUT_DIS() PWMA_ENO &= ~0x80 /* ½ûÖ¹ PWM3N Êä³ö */ + +#define PWM5P_OUT_EN() PWMB_ENO |= 0x01 /* ʹÄÜ PWM5P Êä³ö */ +#define PWM5P_OUT_DIS() PWMB_ENO &= ~0x01 /* ½ûÖ¹ PWM5P Êä³ö */ +#define PWM6P_OUT_EN() PWMB_ENO |= 0x04 /* ʹÄÜ PWM6P Êä³ö */ +#define PWM6P_OUT_DIS() PWMB_ENO &= ~0x04 /* ½ûÖ¹ PWM6P Êä³ö */ +#define PWM7P_OUT_EN() PWMB_ENO |= 0x10 /* ʹÄÜ PWM7P Êä³ö */ +#define PWM7P_OUT_DIS() PWMB_ENO &= ~0x10 /* ½ûÖ¹ PWM7P Êä³ö */ +#define PWM8P_OUT_EN() PWMB_ENO |= 0x40 /* ʹÄÜ PWM8P Êä³ö */ +#define PWM8P_OUT_DIS() PWMB_ENO &= ~0x40 /* ½ûÖ¹ PWM8P Êä³ö */ + +#define PWMA_OutChannelSel(n) PWMA_ENO = n //Ñ¡ÔñÊä³öͨµÀ +#define PWMB_OutChannelSel(n) PWMB_ENO = n //Ñ¡ÔñÊä³öͨµÀ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_PS = 0xFEB2H; C4PS1 C4PS0 C3PS1 C3PS0 C2PS1 C2PS0 C1PS1 C1PS0 0000,0000 /* Êä³öʹÄܼĴæÆ÷ */ +//sfr PWMB_PS = 0xFEB6H; C8PS1 C8PS0 C7PS1 C7PS0 C6PS1 C6PS0 C5PS1 C5PS0 0000,0000 /* Êä³öʹÄܼĴæÆ÷ */ + +#define PWM1_USE_P10P11() PWMA_PS = (PWMA_PS & ~0x03) /* PWM ͨµÀ 1 Êä³ö½ÅÇл»µ½P10(PWM1P) P11(PWM1N) */ +#define PWM1_USE_P20P21() PWMA_PS = (PWMA_PS & ~0x03) | 0x01 /* PWM ͨµÀ 1 Êä³ö½ÅÇл»µ½P20(PWM1P) P21(PWM1N) */ +#define PWM1_USE_P60P61() PWMA_PS = (PWMA_PS & ~0x03) | 0x02 /* PWM ͨµÀ 1 Êä³ö½ÅÇл»µ½P60(PWM1P) P61(PWM1N) */ + +#define PWM2_USE_P12P13() PWMA_PS = (PWMA_PS & ~0x0C) /* PWM ͨµÀ 2 Êä³ö½ÅÇл»µ½P12/P54(PWM2P) P13(PWM2N) */ +#define PWM2_USE_P22P23() PWMA_PS = (PWMA_PS & ~0x0C) | 0x04 /* PWM ͨµÀ 2 Êä³ö½ÅÇл»µ½P22(PWM2P) P23(PWM2N) */ +#define PWM2_USE_P62P63() PWMA_PS = (PWMA_PS & ~0x0C) | 0x08 /* PWM ͨµÀ 2 Êä³ö½ÅÇл»µ½P62(PWM2P) P63(PWM2N) */ + +#define PWM3_USE_P14P15() PWMA_PS = (PWMA_PS & ~0x30) /* PWM ͨµÀ 3 Êä³ö½ÅÇл»µ½P14(PWM3P) P15(PWM3N) */ +#define PWM3_USE_P24P25() PWMA_PS = (PWMA_PS & ~0x30) | 0x10 /* PWM ͨµÀ 3 Êä³ö½ÅÇл»µ½P24(PWM3P) P25(PWM3N) */ +#define PWM3_USE_P64P65() PWMA_PS = (PWMA_PS & ~0x30) | 0x20 /* PWM ͨµÀ 3 Êä³ö½ÅÇл»µ½P64(PWM3P) P65(PWM3N) */ + +#define PWM4_USE_P16P17() PWMA_PS = (PWMA_PS & ~0xC0) /* PWM ͨµÀ 4 Êä³ö½ÅÇл»µ½P16(PWM4P) P17(PWM4N) */ +#define PWM4_USE_P26P27() PWMA_PS = (PWMA_PS & ~0xC0) | 0x40 /* PWM ͨµÀ 4 Êä³ö½ÅÇл»µ½P26(PWM4P) P27(PWM4N) */ +#define PWM4_USE_P66P67() PWMA_PS = (PWMA_PS & ~0xC0) | 0x80 /* PWM ͨµÀ 4 Êä³ö½ÅÇл»µ½P66(PWM4P) P67(PWM4N) */ +#define PWM4_USE_P34P33() PWMA_PS = (PWMA_PS | 0xC0) /* PWM ͨµÀ 4 Êä³ö½ÅÇл»µ½P34(PWM4P) P33(PWM4N) */ + +#define PWM5_USE_P20() PWMB_PS = (PWMB_PS & ~0x03) /* PWM ͨµÀ 5 Êä³ö½ÅÇл»µ½P20(PWM5) */ +#define PWM5_USE_P17() PWMB_PS = (PWMB_PS & ~0x03) | 0x01 /* PWM ͨµÀ 5 Êä³ö½ÅÇл»µ½P17(PWM5) */ +#define PWM5_USE_P00() PWMB_PS = (PWMB_PS & ~0x03) | 0x02 /* PWM ͨµÀ 5 Êä³ö½ÅÇл»µ½P00(PWM5) */ +#define PWM5_USE_P74() PWMB_PS = (PWMB_PS | 0x03) /* PWM ͨµÀ 5 Êä³ö½ÅÇл»µ½P74(PWM5) */ + +#define PWM6_USE_P21() PWMB_PS = (PWMB_PS & ~0x0C) /* PWM ͨµÀ 6 Êä³ö½ÅÇл»µ½P21(PWM6) */ +#define PWM6_USE_P54() PWMB_PS = (PWMB_PS & ~0x0C) | 0x04 /* PWM ͨµÀ 6 Êä³ö½ÅÇл»µ½P54(PWM6) */ +#define PWM6_USE_P01() PWMB_PS = (PWMB_PS & ~0x0C) | 0x08 /* PWM ͨµÀ 6 Êä³ö½ÅÇл»µ½P01(PWM6) */ +#define PWM6_USE_P75() PWMB_PS = (PWMB_PS | 0x0C) /* PWM ͨµÀ 6 Êä³ö½ÅÇл»µ½P75(PWM6) */ + +#define PWM7_USE_P22() PWMB_PS = (PWMB_PS & ~0x30) /* PWM ͨµÀ 7 Êä³ö½ÅÇл»µ½P22(PWM7) */ +#define PWM7_USE_P33() PWMB_PS = (PWMB_PS & ~0x30) | 0x10 /* PWM ͨµÀ 7 Êä³ö½ÅÇл»µ½P33(PWM7) */ +#define PWM7_USE_P02() PWMB_PS = (PWMB_PS & ~0x30) | 0x20 /* PWM ͨµÀ 7 Êä³ö½ÅÇл»µ½P02(PWM7) */ +#define PWM7_USE_P76() PWMB_PS = (PWMB_PS | 0x30) /* PWM ͨµÀ 7 Êä³ö½ÅÇл»µ½P76(PWM7) */ + +#define PWM8_USE_P23() PWMB_PS = (PWMB_PS & ~0xC0) /* PWM ͨµÀ 8 Êä³ö½ÅÇл»µ½P23(PWM8) */ +#define PWM8_USE_P34() PWMB_PS = (PWMB_PS & ~0xC0) | 0x40 /* PWM ͨµÀ 8 Êä³ö½ÅÇл»µ½P34(PWM8) */ +#define PWM8_USE_P03() PWMB_PS = (PWMB_PS & ~0xC0) | 0x80 /* PWM ͨµÀ 8 Êä³ö½ÅÇл»µ½P03(PWM8) */ +#define PWM8_USE_P77() PWMB_PS = (PWMB_PS | 0xC0) /* PWM ͨµÀ 8 Êä³ö½ÅÇл»µ½P77(PWM8) */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_IOAUX = 0xFEB3H; AUX4N AUX4P AUX3N AUX3P AUX2N AUX2P AUX1N AUX1P 0000,0000 /* Êä³ö¸½¼ÓʹÄܼĴæÆ÷ */ +//sfr PWMB_IOAUX = 0xFEB7H; - AUX8P - AUX7P - AUX6P - AUX5P 0000,0000 /* Êä³ö¸½¼ÓʹÄܼĴæÆ÷ */ +#define AUX4N (1<<7) +#define AUX4P (1<<6) +#define AUX3N (1<<5) +#define AUX3P (1<<4) +#define AUX2N (1<<3) +#define AUX2P (1<<2) +#define AUX1N (1<<1) +#define AUX1P (1) + +#define AUX8P (1<<6) +#define AUX7P (1<<4) +#define AUX6P (1<<2) +#define AUX5P (1) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CR1 = 0xFEC0H; ARPEA CMSA1 CMSA0 DIRA OPMA URSA UDISA CENA 0000,0000 /* ¿ØÖƼĴæÆ÷ 1 */ +//sfr PWMB_CR1 = 0xFEE0H; ARPEB CMSB1 CMSB0 DIRB OPMB URSB UDISB CENB 0000,0000 /* ¿ØÖƼĴæÆ÷ 1 */ +#define ARPE1 (1<<7) +#define ARPE2 (1<<7) +#define PWMA_AlignMode_Edge() PWMA_CR1 = (PWMA_CR1 & ~0x60) +#define PWMA_AlignMode_Mid1() PWMA_CR1 = (PWMA_CR1 & ~0x60) | 0x20 +#define PWMA_AlignMode_Mid2() PWMA_CR1 = (PWMA_CR1 & ~0x60) | 0x40 +#define PWMA_AlignMode_Mid3() PWMA_CR1 = (PWMA_CR1 | 0x60) +#define PWMA_DIR_UP() PWMA_CR1 &= ~0x10 +#define PWMA_DIR_DN() PWMA_CR1 |= 0x10 +#define PWMA_OPMA(n) (n==0?(PWMA_CR1 &= ~0x08):(PWMA_CR1 |= 0x08)) //µ¥Âö³åģʽ 0£ºÔÚ·¢Éú¸üÐÂʼþʱ£¬¼ÆÊýÆ÷²»Í£Ö¹£»1£ºÔÚ·¢ÉúÏÂÒ»´Î¸üÐÂʼþʱ£¬Çå³ý CEN 룬¼ÆÊýÆ÷Í£Ö¹ +#define PWMA_URSA(n) (n==0?(PWMA_CR1 &= ~0x04):(PWMA_CR1 |= 0x04)) //¸üÐÂÇëÇóÔ´ +#define PWMA_UDISA(n) (n==0?(PWMA_CR1 &= ~0x02):(PWMA_CR1 |= 0x02)) //½ûÖ¹¸üР0£º²úÉú¸üУ¨UEV£©Ê¼þ£»1£º²»²úÉú¸üÐÂʼþ +#define PWMA_CEN_Enable() PWMA_CR1 |= 0x01 //1£ºÊ¹ÄܼÆÊýÆ÷ +#define PWMA_CEN_Disable() PWMA_CR1 &= ~0x01 //0£º½ûÖ¹¼ÆÊýÆ÷ + +#define PWMB_AlignMode_Edge() PWMB_CR1 = (PWMB_CR1 & ~0x60) +#define PWMB_AlignMode_Mid1() PWMB_CR1 = (PWMB_CR1 & ~0x60) | 0x20 +#define PWMB_AlignMode_Mid2() PWMB_CR1 = (PWMB_CR1 & ~0x60) | 0x40 +#define PWMB_AlignMode_Mid3() PWMB_CR1 = (PWMB_CR1 | 0x60) +#define PWMB_DIR_UP() PWMB_CR1 &= ~0x10 +#define PWMB_DIR_DN() PWMB_CR1 |= 0x10 +#define PWMB_OPMB(n) (n==0?(PWMB_CR1 &= ~0x08):(PWMB_CR1 |= 0x08)) //µ¥Âö³åģʽ 0£ºÔÚ·¢Éú¸üÐÂʼþʱ£¬¼ÆÊýÆ÷²»Í£Ö¹£»1£ºÔÚ·¢ÉúÏÂÒ»´Î¸üÐÂʼþʱ£¬Çå³ý CEN 룬¼ÆÊýÆ÷Í£Ö¹ +#define PWMB_URSB(n) (n==0?(PWMB_CR1 &= ~0x04):(PWMB_CR1 |= 0x04)) //¸üÐÂÇëÇóÔ´ +#define PWMB_UDISB(n) (n==0?(PWMB_CR1 &= ~0x02):(PWMB_CR1 |= 0x02)) //½ûÖ¹¸üР0£º²úÉú¸üУ¨UEV£©Ê¼þ£»1£º²»²úÉú¸üÐÂʼþ +#define PWMB_CEN_Enable() PWMB_CR1 |= 0x01 //1£ºÊ¹ÄܼÆÊýÆ÷ +#define PWMB_CEN_Disable() PWMB_CR1 &= ~0x01 //0£º½ûÖ¹¼ÆÊýÆ÷ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CR2 = 0xFEC1H; TI1S MMSA2 MMSA1 MMSA0 - COMSA - CCPCA 0000,x0x0 /* ¿ØÖƼĴæÆ÷ 2 */ +//sfr PWMB_CR2 = 0xFEE1H; TI5S MMSB2 MMSB1 MMSB0 - COMSB - CCPCB 0000,x0xx /* ¿ØÖƼĴæÆ÷ 2 */ +#define PWM1P_TI1() PWMA_CR2 &= ~0x80 +#define PWM1P2P3P_XOR_TI1() PWMA_CR2 |= 0x80 +#define PWM5P_TI2() PWMB_CR2 &= ~0x80 +#define PWM5P6P7P_XOR_TI2() PWMB_CR2 |= 0x80 + +#define MMSn_RESET 0 //¸´Î» +#define MMSn_ENABLE 1 //ʹÄÜ +#define MMSn_UPDATE 2 //¸üР+#define MMSn_COMP_TRGO 3 //±È½ÏÂö³å +#define MMSn_OC1REF_TRGO 4 //±È½Ï +#define MMSn_OC2REF_TRGO 5 //±È½Ï +#define MMSn_OC3REF_TRGO 6 //±È½Ï +#define MMSn_OC4REF_TRGO 7 //±È½Ï + +#define PWMA_MainModeSel(n) PWMA_CR2 = (PWMA_CR2 & ~0x70) | (n<<4) //Ö÷ģʽѡÔñ +#define PWMB_MainModeSel(n) PWMB_CR2 = (PWMB_CR2 & ~0x70) | (n<<4) //Ö÷ģʽѡÔñ + +//0£ºµ± CCPC=1 ʱ£¬Ö»ÓÐÔÚ COMG λÖà 1 µÄʱºòÕâЩ¿ØÖÆÎ»²Å±»¸üР+//1£ºµ± CCPC=1 ʱ£¬Ö»ÓÐÔÚ COMG λÖà 1 »ò TRGI ·¢ÉúÉÏÉýÑØµÄʱºòÕâЩ¿ØÖÆÎ»²Å±»¸üР+#define PWMA_COMSUpdateCtrl(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x04):(PWMA_CR2 |= 0x04)) //²¶»ñ/±È½Ï¿ØÖÆÎ»µÄ¸üпØÖÆÑ¡Ôñ +#define PWMB_COMSUpdateCtrl(n) PWMB_CR2 = (n==0?(PWMB_CR2 &= ~0x04):(PWMB_CR2 |= 0x04)) //²¶»ñ/±È½Ï¿ØÖÆÎ»µÄ¸üпØÖÆÑ¡Ôñ +//0£º CCIE£¬ CCINE£¬ CCiP£¬ CCiNP ºÍ OCIM λ²»ÊÇÔ¤×°ÔØµÄ +//1£º CCIE£¬ CCINE£¬ CCiP£¬ CCiNP ºÍ OCIM λÊÇÔ¤×°ÔØµÄ£»ÉèÖøÃλºó£¬ËüÃÇÖ»ÔÚÉèÖÃÁË COMGλºó±»¸üС£ +#define PWMA_CCPCAPreloaded(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x01):(PWMA_CR2 |= 0x01)) //²¶»ñ/±È½ÏÔ¤×°ÔØ¿ØÖÆÎ»(¸Ãλֻ¶Ô¾ßÓл¥²¹Êä³öµÄͨµÀÆð×÷ÓÃ) +#define PWMB_CCPCBPreloaded(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x01):(PWMA_CR2 |= 0x01)) //²¶»ñ/±È½ÏÔ¤×°ÔØ¿ØÖÆÎ»(¸Ãλֻ¶Ô¾ßÓл¥²¹Êä³öµÄͨµÀÆð×÷ÓÃ) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SMCR = 0xFEC2H; MSMA TSA2 TSA1 TSA0 - SMSA2 SMSA1 SMSA0 0000,x000 /* ´Óģʽ¿ØÖƼĴæÆ÷ */ +//sfr PWMB_SMCR = 0xFEE2H; MSMB TSB2 TSB1 TSB0 - SMSB2 SMSB1 SMSB0 0000,x000 /* ´Óģʽ¿ØÖƼĴæÆ÷ */ +#define SMCR_TSn_ITR2 2 +#define SMCR_TSn_EDGE 4 +#define SMCR_TSn_TIMER1 5 +#define SMCR_TSn_TIMER2 6 +#define SMCR_TSn_ETRF 7 + +#define PWMA_SMCR_Source(n) PWMA_SMCR = (PWMA_SMCR & ~0x70) | (n<<4) //´¥·¢Ô´Ñ¡Ôñ +#define PWMB_SMCR_Source(n) PWMB_SMCR = (PWMB_SMCR & ~0x70) | (n<<4) //´¥·¢Ô´Ñ¡Ôñ + +#define SMCR_SMSA_INSIDE_CLK 0 +#define SMCR_SMSA_ENCODER_M1 1 +#define SMCR_SMSA_ENCODER_M2 2 +#define SMCR_SMSA_ENCODER_M3 3 +#define SMCR_SMSA_RESET 4 +#define SMCR_SMSA_GATE 5 +#define SMCR_SMSA_TRIG 6 +#define SMCR_SMSA_EXT_CLK 7 + +#define PWMA_SMCR_SMS(n) PWMA_SMCR = (PWMA_SMCR & ~0x07) | (n & 7) //ʱÖÓ/´¥·¢/´ÓģʽѡÔñ +#define PWMB_SMCR_SMS(n) PWMB_SMCR = (PWMB_SMCR & ~0x07) | (n & 7) //ʱÖÓ/´¥·¢/´ÓģʽѡÔñ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ETR = 0xFEC3H; ETP1 ECE1 ETPS11 ETPS10 ETF13 ETF12 ETF11 ETF10 0000,0000 /* Íⲿ´¥·¢¼Ä´æÆ÷ */ +//sfr PWMB_ETR = 0xFEE3H; ETP2 ECE2 ETPS21 ETPS20 ETF23 ETF22 ETF21 ETF20 0000,0000 /* Íⲿ´¥·¢¼Ä´æÆ÷ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_IER = 0xFEC4H; BIEA TIEA COMIEA CC4IE CC3IE CC2IE CC1IE UIEA 0000,0000 /* ÖжÏʹÄܼĴæÆ÷ */ +//sfr PWMB_IER = 0xFEE4H; BIEB TIEB COMIEB CC8IE CC7IE CC6IE CC5IE UIEB 0000,0000 /* ÖжÏʹÄܼĴæÆ÷ */ +#define PWMA_UIEA_Enable() PWMA_IER |= 0x01 //1£ºÔÊÐí¸üÐÂÖÐ¶Ï +#define PWMA_UIEA_Disable() PWMA_IER &= ~0x01 //0£º½ûÖ¹¸üÐÂÖÐ¶Ï +#define PWMA_CC1IE_Enable() PWMA_IER |= 0x02 //1£ºÔÊÐí²¶»ñ/±È½ÏÖÐ¶Ï +#define PWMA_CC1IE_Disable() PWMA_IER &= ~0x02 //0£º½ûÖ¹²¶»ñ/±È½ÏÖÐ¶Ï +#define PWMA_CC2IE_Enable() PWMA_IER |= 0x04 //1£ºÔÊÐí²¶»ñ/±È½ÏÖÐ¶Ï +#define PWMA_CC2IE_Disable() PWMA_IER &= ~0x04 //0£º½ûÖ¹²¶»ñ/±È½ÏÖÐ¶Ï +#define PWMA_CC3IE_Enable() PWMA_IER |= 0x08 //1£ºÔÊÐí²¶»ñ/±È½ÏÖÐ¶Ï +#define PWMA_CC3IE_Disable() PWMA_IER &= ~0x08 //0£º½ûÖ¹²¶»ñ/±È½ÏÖÐ¶Ï +#define PWMA_CC4IE_Enable() PWMA_IER |= 0x10 //1£ºÔÊÐí²¶»ñ/±È½ÏÖÐ¶Ï +#define PWMA_CC4IE_Disable() PWMA_IER &= ~0x10 //0£º½ûÖ¹²¶»ñ/±È½ÏÖÐ¶Ï +#define PWMA_COMIEA_Enable() PWMA_IER |= 0x20 //1£ºÔÊÐíCOMÖÐ¶Ï +#define PWMA_COMIEA_Disable() PWMA_IER &= ~0x20 //0£º½ûÖ¹COMÖÐ¶Ï +#define PWMA_TIEA_Enable() PWMA_IER |= 0x40 //1£ºÔÊÐí´¥·¢ÖÐ¶Ï +#define PWMA_TIEA_Disable() PWMA_IER &= ~0x40 //0£º½ûÖ¹´¥·¢ÖÐ¶Ï +#define PWMA_BIEA_Enable() PWMA_IER |= 0x80 //1£ºÔÊÐíɲ³µÖÐ¶Ï +#define PWMA_BIEA_Disable() PWMA_IER &= ~0x80 //0£º½ûֹɲ³µÖÐ¶Ï + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SR1 = 0xFEC5H; BIF1 TIF1 COMIF1 CC4IF CC3IF CC2IF CC1IF UIF1 0000,0000 /* ״̬¼Ä´æÆ÷ 1 */ +//sfr PWMB_SR1 = 0xFEE5H; BIF2 TIF2 COMIF2 CC8IF CC7IF CC6IF CC5IF UIF2 0000,0000 /* ״̬¼Ä´æÆ÷ 1 */ +#define UIF1 1 +#define CC1IF (1<<1) +#define CC2IF (1<<2) +#define CC3IF (1<<3) +#define CC4IF (1<<4) +#define COMIF1 (1<<5) +#define TIF1 (1<<6) +#define BIF1 (1<<7) + +#define UIF2 1 +#define CC5IF (1<<1) +#define CC6IF (1<<2) +#define CC7IF (1<<3) +#define CC8IF (1<<4) +#define COMIF2 (1<<5) +#define TIF2 (1<<6) +#define BIF2 (1<<7) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SR2 = 0xFEC6H; - - - CC4OF CC3OF CC2OF CC1OF - xxx0,000x /* ״̬¼Ä´æÆ÷ 2 */ +//sfr PWMB_SR2 = 0xFEE6H; - - - CC8OF CC7OF CC6OF CC5OF - xxx0,000x /* ״̬¼Ä´æÆ÷ 2 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_EGR = 0xFEC7H; BG1 TG1 COMG1 CC4G CC3G CC2G CC1G UG1 0000,0000 /* ʼþ²úÉú¼Ä´æÆ÷ */ +//sfr PWMB_EGR = 0xFEE7H; BG2 TG2 COMG2 CC8G CC7G CC6G CC5G UG2 0000,0000 /* ʼþ²úÉú¼Ä´æÆ÷ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR1 = 0xFEC8H; OC1CE OC1M2 OC1M1 OC1M0 OC1PE OC1FE CC1S1 CC1S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 1 - ͨµÀÅäÖÃΪ±È½ÏÊä³öģʽ */ +//sfr PWMB_CCMR1 = 0xFEE8H; OC5CE OC5M2 OC5M1 OC5M0 OC5PE OC5FE CC5S1 CC5S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 1 - ͨµÀÅäÖÃΪ±È½ÏÊä³öģʽ */ +#define OCnCE (1<<7) + +#define CCMRn_FREEZE 0x00 //¶³½á +#define CCMRn_MATCH_VALID 0x10 //Æ¥ÅäʱÉèÖÃͨµÀ n µÄÊä³öΪÓÐЧµçƽ +#define CCMRn_MATCH_INVALID 0x20 //Æ¥ÅäʱÉèÖÃͨµÀ n µÄÊä³öΪÎÞЧµçƽ +#define CCMRn_ROLLOVER 0x30 //·­×ª +#define CCMRn_FORCE_INVALID 0x40 //Ç¿ÖÆÎªÎÞЧµçƽ +#define CCMRn_FORCE_VALID 0x50 //Ç¿ÖÆÎªÓÐЧµçƽ +#define CCMRn_PWM_MODE1 0x60 //PWM ģʽ 1 +#define CCMRn_PWM_MODE2 0x70 //PWM ģʽ 2 + +#define PWMA_OC1ModeSet(n) PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | (n) //Êä³ö±È½ÏģʽÉèÖà +#define PWMB_OC5ModeSet(n) PWMB_CCMR1 = (PWMB_CCMR1 & ~0x70) | (n) //Êä³ö±È½ÏģʽÉèÖà + +#define PWMA_OC1_ReloadEnable() PWMA_CCMR1 |= 0x08 //1£º¿ªÆô OC1PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMA_OC1_RelosdDisable() PWMA_CCMR1 &= ~0x08 //0£º½ûÖ¹ OC1PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMB_OC5_ReloadEnable() PWMB_CCMR1 |= 0x08 //1£º¿ªÆô OC5PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMB_OC5_RelosdDisable() PWMB_CCMR1 &= ~0x08 //0£º½ûÖ¹ OC5PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ + +#define PWMA_OC1_FastEnable() PWMA_CCMR1 |= 0x04 //1£º¿ªÆô OC1FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMA_OC1_FastDisable() PWMA_CCMR1 &= ~0x04 //0£º½ûÖ¹ OC1FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMB_OC5_FastEnable() PWMB_CCMR1 |= 0x04 //1£º¿ªÆô OC5FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMB_OC5_FastDisable() PWMB_CCMR1 &= ~0x04 //0£º½ûÖ¹ OC5FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ + +#define CCAS_OUTPUT 0x00 //Êä³ö +#define CCAS_IUTPUT_TI1FP1 0x01 //ÊäÈ룬IC1/IC2/IC3/IC4 Ó³ÉäÔÚ TI1FP1 ÉÏ +#define CCAS_IUTPUT_TI2FP1 0x02 //ÊäÈ룬IC1/IC2/IC3/IC4 Ó³ÉäÔÚ TI2FP1 ÉÏ +#define CCAS_IUTPUT_TRC 0x03 //ÊäÈ룬IC1/IC2/IC3/IC4 Ó³ÉäÔÚ TRC ÉÏ +#define CCBS_OUTPUT 0x00 //Êä³ö +#define CCBS_IUTPUT_TI5FP5 0x01 //ÊäÈ룬IC5/IC6/IC7/IC8 Ó³ÉäÔÚ TI5FP5 ÉÏ +#define CCBS_IUTPUT_TI6FP5 0x02 //ÊäÈ룬IC5/IC6/IC7/IC8 Ó³ÉäÔÚ TI6FP5 ÉÏ +#define CCBS_IUTPUT_TRC 0x03 //ÊäÈ룬IC5/IC6/IC7/IC8 Ó³ÉäÔÚ TRC ÉÏ + +#define PWMA_CC1S_Direction(n) PWMA_CCMR1 = (PWMA_CCMR1 & ~0x03) | (n) //²¶»ñ/±È½Ï 1 Ñ¡Ôñ¡£ÕâÁ½Î»¶¨ÒåͨµÀµÄ·½Ïò£¨ÊäÈë/Êä³ö£©£¬¼°ÊäÈë½ÅµÄÑ¡Ôñ +#define PWMB_CC5S_Direction(n) PWMB_CCMR1 = (PWMB_CCMR1 & ~0x03) | (n) //²¶»ñ/±È½Ï 5 Ñ¡Ôñ¡£ÕâÁ½Î»¶¨ÒåͨµÀµÄ·½Ïò£¨ÊäÈë/Êä³ö£©£¬¼°ÊäÈë½ÅµÄÑ¡Ôñ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR1 = 0xFEC8H; IC1F3 IC1F2 IC1F1 IC1F0 IC1PSC1 IC1PSC0 CC1S1 CC1S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 1 - ͨµÀÅäÖÃΪ²¶»ñÊäÈëģʽ */ +//sfr PWMB_CCMR1 = 0xFEE8H; IC5F3 IC5F2 IC5F1 IC5F0 IC5PSC1 IC5PSC0 CC5S1 CC5S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 1 - ͨµÀÅäÖÃΪ²¶»ñÊäÈëģʽ */ + +#define ICnF_01_Clock 0 +#define ICnF_02_Clock 1 +#define ICnF_04_Clock 2 +#define ICnF_08_Clock 3 +#define ICnF_12_Clock 4 +#define ICnF_16_Clock 5 +#define ICnF_24_Clock 6 +#define ICnF_32_Clock 7 +#define ICnF_48_Clock 8 +#define ICnF_64_Clock 9 +#define ICnF_80_Clock 10 +#define ICnF_96_Clock 11 +#define ICnF_128_Clock 12 +#define ICnF_160_Clock 13 +#define ICnF_192_Clock 14 +#define ICnF_256_Clock 15 + +#define PWMA_IC1F_FilterClock(n) PWMA_CCMR1 = (PWMA_CCMR1 & 0x0F) | (n<<4) //ÊäÈë²¶»ñ 1 Â˲¨Æ÷Ñ¡Ôñ£¬¸ÃλÓò¶¨ÒåÁË TIn µÄ²ÉÑùƵÂʼ°Êý×ÖÂ˲¨Æ÷³¤¶È +#define PWMB_IC5F_FilterClock(n) PWMB_CCMR1 = (PWMB_CCMR1 & 0x0F) | (n<<4) //ÊäÈë²¶»ñ 5 Â˲¨Æ÷Ñ¡Ôñ£¬¸ÃλÓò¶¨ÒåÁË TIn µÄ²ÉÑùƵÂʼ°Êý×ÖÂ˲¨Æ÷³¤¶È + +#define PWMA_IC1PSC_PrescalerSet(n) PWMA_CCMR1 = (PWMA_CCMR1 & 0xF3) | ((n&3)<<2) //ÊäÈë/²¶»ñ 1 Ô¤·ÖƵÆ÷£¬0~3 +#define PWMB_IC5PSC_PrescalerSet(n) PWMB_CCMR1 = (PWMB_CCMR1 & 0xF3) | ((n&3)<<2) //ÊäÈë/²¶»ñ 5 Ô¤·ÖƵÆ÷£¬0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR2 = 0xFEC9H; OC2CE OC2M2 OC2M1 OC2M0 OC2PE OC2FE CC2S1 CC2S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 2 - ͨµÀÅäÖÃΪ±È½ÏÊä³öģʽ */ +//sfr PWMB_CCMR2 = 0xFEE9H; OC6CE OC6M2 OC6M1 OC6M0 OC6PE OC6FE CC6S1 CC6S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 2 - ͨµÀÅäÖÃΪ±È½ÏÊä³öģʽ */ + +#define PWMA_OC2ModeSet(n) PWMA_CCMR2 = (PWMA_CCMR2 & ~0x70) | (n) //Êä³ö±È½ÏģʽÉèÖà +#define PWMB_OC6ModeSet(n) PWMB_CCMR2 = (PWMB_CCMR2 & ~0x70) | (n) //Êä³ö±È½ÏģʽÉèÖà + +#define PWMA_OC2_ReloadEnable() PWMA_CCMR2 |= 0x08 //1£º¿ªÆô OC2PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMA_OC2_RelosdDisable() PWMA_CCMR2 &= ~0x08 //0£º½ûÖ¹ OC2PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMB_OC6_ReloadEnable() PWMB_CCMR2 |= 0x08 //1£º¿ªÆô OC6PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMB_OC6_RelosdDisable() PWMB_CCMR2 &= ~0x08 //0£º½ûÖ¹ OC6PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ + +#define PWMA_OC2_FastEnable() PWMA_CCMR2 |= 0x04 //1£º¿ªÆô OC2FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMA_OC2_FastDisable() PWMA_CCMR2 &= ~0x04 //0£º½ûÖ¹ OC2FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMB_OC6_FastEnable() PWMB_CCMR2 |= 0x04 //1£º¿ªÆô OC6FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMB_OC6_FastDisable() PWMB_CCMR2 &= ~0x04 //0£º½ûÖ¹ OC6FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ + +#define PWMA_CC2S_Direction(n) PWMA_CCMR2 = (PWMA_CCMR2 & ~0x03) | (n) //²¶»ñ/±È½Ï 2 Ñ¡Ôñ¡£ÕâÁ½Î»¶¨ÒåͨµÀµÄ·½Ïò£¨ÊäÈë/Êä³ö£©£¬¼°ÊäÈë½ÅµÄÑ¡Ôñ +#define PWMB_CC6S_Direction(n) PWMB_CCMR2 = (PWMB_CCMR2 & ~0x03) | (n) //²¶»ñ/±È½Ï 6 Ñ¡Ôñ¡£ÕâÁ½Î»¶¨ÒåͨµÀµÄ·½Ïò£¨ÊäÈë/Êä³ö£©£¬¼°ÊäÈë½ÅµÄÑ¡Ôñ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR2 = 0xFEC9H; IC2F3 IC2F2 IC2F1 IC2F0 IC2PSC1 IC2PSC0 CC2S1 CC2S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 2 - ͨµÀÅäÖÃΪ²¶»ñÊäÈëģʽ */ +//sfr PWMB_CCMR2 = 0xFEE9H; IC6F3 IC6F2 IC6F1 IC6F0 IC6PSC1 IC6PSC0 CC6S1 CC6S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 2 - ͨµÀÅäÖÃΪ²¶»ñÊäÈëģʽ */ + +#define PWMA_IC2F_FilterClock(n) PWMA_CCMR2 = (PWMA_CCMR2 & 0x0F) | (n<<4) //ÊäÈë²¶»ñ 2 Â˲¨Æ÷Ñ¡Ôñ£¬¸ÃλÓò¶¨ÒåÁË TIn µÄ²ÉÑùƵÂʼ°Êý×ÖÂ˲¨Æ÷³¤¶È +#define PWMB_IC6F_FilterClock(n) PWMB_CCMR2 = (PWMB_CCMR2 & 0x0F) | (n<<4) //ÊäÈë²¶»ñ 6 Â˲¨Æ÷Ñ¡Ôñ£¬¸ÃλÓò¶¨ÒåÁË TIn µÄ²ÉÑùƵÂʼ°Êý×ÖÂ˲¨Æ÷³¤¶È + +#define PWMA_IC2PSC_PrescalerSet(n) PWMA_CCMR2 = (PWMA_CCMR2 & 0xF3) | ((n&3)<<2) //ÊäÈë/²¶»ñ 2 Ô¤·ÖƵÆ÷£¬0~3 +#define PWMB_IC6PSC_PrescalerSet(n) PWMB_CCMR2 = (PWMB_CCMR2 & 0xF3) | ((n&3)<<2) //ÊäÈë/²¶»ñ 6 Ô¤·ÖƵÆ÷£¬0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR3 = 0xFECAH; OC3CE OC3M2 OC3M1 OC3M0 OC3PE OC3FE CC3S1 CC3S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 3 - ͨµÀÅäÖÃΪ±È½ÏÊä³öģʽ */ +//sfr PWMB_CCMR3 = 0xFEEAH; OC7CE OC7M2 OC7M1 OC7M0 OC7PE OC7FE CC7S1 CC7S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 3 - ͨµÀÅäÖÃΪ±È½ÏÊä³öģʽ */ + +#define PWMA_OC3ModeSet(n) PWMA_CCMR3 = (PWMA_CCMR3 & ~0x70) | (n) //Êä³ö±È½ÏģʽÉèÖà +#define PWMB_OC7ModeSet(n) PWMB_CCMR3 = (PWMB_CCMR3 & ~0x70) | (n) //Êä³ö±È½ÏģʽÉèÖà + +#define PWMA_OC3_ReloadEnable() PWMA_CCMR3 |= 0x08 //1£º¿ªÆô OC3PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMA_OC3_RelosdDisable() PWMA_CCMR3 &= ~0x08 //0£º½ûÖ¹ OC3PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMB_OC7_ReloadEnable() PWMB_CCMR3 |= 0x08 //1£º¿ªÆô OC7PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMB_OC7_RelosdDisable() PWMB_CCMR3 &= ~0x08 //0£º½ûÖ¹ OC7PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ + +#define PWMA_OC3_FastEnable() PWMA_CCMR3 |= 0x04 //1£º¿ªÆô OC3FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMA_OC3_FastDisable() PWMA_CCMR3 &= ~0x04 //0£º½ûÖ¹ OC3FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMB_OC7_FastEnable() PWMB_CCMR3 |= 0x04 //1£º¿ªÆô OC7FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMB_OC7_FastDisable() PWMB_CCMR3 &= ~0x04 //0£º½ûÖ¹ OC7FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ + +#define PWMA_CC3S_Direction(n) PWMA_CCMR3 = (PWMA_CCMR3 & ~0x03) | (n) //²¶»ñ/±È½Ï 3 Ñ¡Ôñ¡£ÕâÁ½Î»¶¨ÒåͨµÀµÄ·½Ïò£¨ÊäÈë/Êä³ö£©£¬¼°ÊäÈë½ÅµÄÑ¡Ôñ +#define PWMB_CC7S_Direction(n) PWMB_CCMR3 = (PWMB_CCMR3 & ~0x03) | (n) //²¶»ñ/±È½Ï 7 Ñ¡Ôñ¡£ÕâÁ½Î»¶¨ÒåͨµÀµÄ·½Ïò£¨ÊäÈë/Êä³ö£©£¬¼°ÊäÈë½ÅµÄÑ¡Ôñ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR3 = 0xFECAH; IC3F3 IC3F2 IC3F1 IC3F0 IC3PSC1 IC3PSC0 CC3S1 CC3S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 3 - ͨµÀÅäÖÃΪ²¶»ñÊäÈëģʽ */ +//sfr PWMB_CCMR3 = 0xFEEAH; IC7F3 IC7F2 IC7F1 IC7F0 IC7PSC1 IC7PSC0 CC7S1 CC7S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 3 - ͨµÀÅäÖÃΪ²¶»ñÊäÈëģʽ */ + +#define PWMA_IC3F_FilterClock(n) PWMA_CCMR3 = (PWMA_CCMR3 & 0x0F) | (n<<4) //ÊäÈë²¶»ñ 3 Â˲¨Æ÷Ñ¡Ôñ£¬¸ÃλÓò¶¨ÒåÁË TIn µÄ²ÉÑùƵÂʼ°Êý×ÖÂ˲¨Æ÷³¤¶È +#define PWMB_IC7F_FilterClock(n) PWMB_CCMR3 = (PWMB_CCMR3 & 0x0F) | (n<<4) //ÊäÈë²¶»ñ 7 Â˲¨Æ÷Ñ¡Ôñ£¬¸ÃλÓò¶¨ÒåÁË TIn µÄ²ÉÑùƵÂʼ°Êý×ÖÂ˲¨Æ÷³¤¶È + +#define PWMA_IC3PSC_PrescalerSet(n) PWMA_CCMR3 = (PWMA_CCMR3 & 0xF3) | ((n&3)<<2) //ÊäÈë/²¶»ñ 3 Ô¤·ÖƵÆ÷£¬0~3 +#define PWMB_IC7PSC_PrescalerSet(n) PWMB_CCMR3 = (PWMB_CCMR3 & 0xF3) | ((n&3)<<2) //ÊäÈë/²¶»ñ 7 Ô¤·ÖƵÆ÷£¬0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR4 = 0xFECBH; OC4CE OC4M2 OC4M1 OC4M0 OC4PE OC4FE CC4S1 CC4S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 4 - ͨµÀÅäÖÃΪ±È½ÏÊä³öģʽ */ +//sfr PWMB_CCMR4 = 0xFEEBH; OC8CE OC8M2 OC8M1 OC8M0 OC8PE OC8FE CC8S1 CC8S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 4 - ͨµÀÅäÖÃΪ±È½ÏÊä³öģʽ */ + +#define PWMA_OC4ModeSet(n) PWMA_CCMR4 = (PWMA_CCMR4 & ~0x70) | (n) //Êä³ö±È½ÏģʽÉèÖà +#define PWMB_OC8ModeSet(n) PWMB_CCMR4 = (PWMB_CCMR4 & ~0x70) | (n) //Êä³ö±È½ÏģʽÉèÖà + +#define PWMA_OC4_ReloadEnable() PWMA_CCMR4 |= 0x08 //1£º¿ªÆô OC4PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMA_OC4_RelosdDisable() PWMA_CCMR4 &= ~0x08 //0£º½ûÖ¹ OC4PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMB_OC8_ReloadEnable() PWMB_CCMR4 |= 0x08 //1£º¿ªÆô OC8PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ +#define PWMB_OC8_RelosdDisable() PWMB_CCMR4 &= ~0x08 //0£º½ûÖ¹ OC8PE Êä³ö±È½ÏµÄÔ¤×°ÔØ¹¦ÄÜ + +#define PWMA_OC4_FastEnable() PWMA_CCMR4 |= 0x04 //1£º¿ªÆô OC4FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMA_OC4_FastDisable() PWMA_CCMR4 &= ~0x04 //0£º½ûÖ¹ OC4FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMB_OC8_FastEnable() PWMB_CCMR4 |= 0x04 //1£º¿ªÆô OC8FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ +#define PWMB_OC8_FastDisable() PWMB_CCMR4 &= ~0x04 //0£º½ûÖ¹ OC8FE Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ + +#define PWMA_CC4S_Direction(n) PWMA_CCMR4 = (PWMA_CCMR4 & ~0x03) | (n) //²¶»ñ/±È½Ï 4 Ñ¡Ôñ¡£ÕâÁ½Î»¶¨ÒåͨµÀµÄ·½Ïò£¨ÊäÈë/Êä³ö£©£¬¼°ÊäÈë½ÅµÄÑ¡Ôñ +#define PWMB_CC8S_Direction(n) PWMB_CCMR4 = (PWMB_CCMR4 & ~0x03) | (n) //²¶»ñ/±È½Ï 8 Ñ¡Ôñ¡£ÕâÁ½Î»¶¨ÒåͨµÀµÄ·½Ïò£¨ÊäÈë/Êä³ö£©£¬¼°ÊäÈë½ÅµÄÑ¡Ôñ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR4 = 0xFECBH; IC4F3 IC4F2 IC4F1 IC4F0 IC4PSC1 IC4PSC0 CC4S1 CC4S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 4 - ͨµÀÅäÖÃΪ²¶»ñÊäÈëģʽ */ +//sfr PWMB_CCMR4 = 0xFEEBH; IC8F3 IC8F2 IC8F1 IC8F0 IC8PSC1 IC8PSC0 CC8S1 CC8S0 0000,0000 /* ²¶»ñ/±È½Ïģʽ¼Ä´æÆ÷ 4 - ͨµÀÅäÖÃΪ²¶»ñÊäÈëģʽ */ + +#define PWMA_IC4F_FilterClock(n) PWMA_CCMR4 = (PWMA_CCMR4 & 0x0F) | (n<<4) //ÊäÈë²¶»ñ 4 Â˲¨Æ÷Ñ¡Ôñ£¬¸ÃλÓò¶¨ÒåÁË TIn µÄ²ÉÑùƵÂʼ°Êý×ÖÂ˲¨Æ÷³¤¶È +#define PWMB_IC8F_FilterClock(n) PWMB_CCMR4 = (PWMB_CCMR4 & 0x0F) | (n<<4) //ÊäÈë²¶»ñ 8 Â˲¨Æ÷Ñ¡Ôñ£¬¸ÃλÓò¶¨ÒåÁË TIn µÄ²ÉÑùƵÂʼ°Êý×ÖÂ˲¨Æ÷³¤¶È + +#define PWMA_IC4PSC_PrescalerSet(n) PWMA_CCMR4 = (PWMA_CCMR4 & 0xF3) | ((n&3)<<2) //ÊäÈë/²¶»ñ 4 Ô¤·ÖƵÆ÷£¬0~3 +#define PWMB_IC8PSC_PrescalerSet(n) PWMB_CCMR4 = (PWMB_CCMR4 & 0xF3) | ((n&3)<<2) //ÊäÈë/²¶»ñ 8 Ô¤·ÖƵÆ÷£¬0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCER1 = 0xFECCH; CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E 0000,0000 /* ²¶»ñ/±È½ÏʹÄܼĴæÆ÷ 1 */ +//sfr PWMB_CCER1 = 0xFEECH; - - CC6P CC6E - - CC5P CC5E 0000,0000 /* ²¶»ñ/±È½ÏʹÄܼĴæÆ÷ 1 */ + +#define PWMA_CCER1_Disable() PWMA_CCER1 = 0x00 //¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC1E_Enable() PWMA_CCER1 |= 0x01 //1£º¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC1E_Disable() PWMA_CCER1 &= ~0x01 //0£º¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC1P_LowValid() PWMA_CCER1 |= 0x02 //1£ºµÍµçƽÓÐЧ +#define PWMA_CC1P_HighValid() PWMA_CCER1 &= ~0x02 //0£º¸ßµçƽÓÐЧ +#define PWMA_CC1P_CaptureRise() PWMA_CCER1 |= 0x02 //1£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄϽµÑØ +#define PWMA_CC1P_CaptureFall() PWMA_CCER1 &= ~0x02 //0£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄÉÏÉýÑØ +#define PWMA_CC1NE_Enable() PWMA_CCER1 |= 0x04 //1£º¿ªÆô±È½ÏÊä³ö +#define PWMA_CC1NE_Disable() PWMA_CCER1 &= ~0x04 //0£º¹Ø±Õ±È½ÏÊä³ö +#define PWMA_CC1NP_LowValid() PWMA_CCER1 |= 0x08 //1£ºµÍµçƽÓÐЧ +#define PWMA_CC1NP_HighValid() PWMA_CCER1 &= ~0x08 //0£º¸ßµçƽÓÐЧ + +#define PWMA_CC2E_Enable() PWMA_CCER1 |= 0x10 //1£º¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC2E_Disable() PWMA_CCER1 &= ~0x10 //0£º¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC2P_LowValid() PWMA_CCER1 |= 0x20 //1£ºµÍµçƽÓÐЧ +#define PWMA_CC2P_HighValid() PWMA_CCER1 &= ~0x20 //0£º¸ßµçƽÓÐЧ +#define PWMA_CC2P_CaptureRise() PWMA_CCER1 |= 0x20 //1£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄϽµÑØ +#define PWMA_CC2P_CaptureFall() PWMA_CCER1 &= ~0x20 //0£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄÉÏÉýÑØ +#define PWMA_CC2NE_Enable() PWMA_CCER1 |= 0x40 //1£º¿ªÆô±È½ÏÊä³ö +#define PWMA_CC2NE_Disable() PWMA_CCER1 &= ~0x40 //0£º¹Ø±Õ±È½ÏÊä³ö +#define PWMA_CC2NP_LowValid() PWMA_CCER1 |= 0x80 //1£ºµÍµçƽÓÐЧ +#define PWMA_CC2NP_HighValid() PWMA_CCER1 &= ~0x80 //0£º¸ßµçƽÓÐЧ + +#define PWMB_CCER1_Disable() PWMB_CCER1 = 0x00 //¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC5E_Enable() PWMB_CCER1 |= 0x01 //1£º¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC5E_Disable() PWMB_CCER1 &= ~0x01 //0£º¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC5P_LowValid() PWMB_CCER1 |= 0x02 //1£ºµÍµçƽÓÐЧ +#define PWMB_CC5P_HighValid() PWMB_CCER1 &= ~0x02 //0£º¸ßµçƽÓÐЧ +#define PWMB_CC5P_CaptureRise() PWMB_CCER1 |= 0x02 //1£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄϽµÑØ +#define PWMB_CC5P_CaptureFall() PWMB_CCER1 &= ~0x02 //0£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄÉÏÉýÑØ + +#define PWMB_CC6E_Enable() PWMB_CCER1 |= 0x10 //1£º¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC6E_Disable() PWMB_CCER1 &= ~0x10 //0£º¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC6P_LowValid() PWMB_CCER1 |= 0x20 //1£ºµÍµçƽÓÐЧ +#define PWMB_CC6P_HighValid() PWMB_CCER1 &= ~0x20 //0£º¸ßµçƽÓÐЧ +#define PWMB_CC6P_CaptureRise() PWMB_CCER1 |= 0x20 //1£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄϽµÑØ +#define PWMB_CC6P_CaptureFall() PWMB_CCER1 &= ~0x20 //0£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄÉÏÉýÑØ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCER2 = 0xFECDH; CC4NP CC4NE CC4P CC4E CC3NP CC3NE CC3P CC3E 0000,0000 /* ²¶»ñ/±È½ÏʹÄܼĴæÆ÷ 2 */ +//sfr PWMB_CCER2 = 0xFEEDH; - - CC8P CC8E - - CC7P CC7E 0000,0000 /* ²¶»ñ/±È½ÏʹÄܼĴæÆ÷ 2 */ + +#define PWMA_CCER2_Disable() PWMA_CCER2 = 0x00 //¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC3E_Enable() PWMA_CCER2 |= 0x01 //1£º¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC3E_Disable() PWMA_CCER2 &= ~0x01 //0£º¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC3P_LowValid() PWMA_CCER2 |= 0x02 //1£ºµÍµçƽÓÐЧ +#define PWMA_CC3P_HighValid() PWMA_CCER2 &= ~0x02 //0£º¸ßµçƽÓÐЧ +#define PWMA_CC3P_CaptureRise() PWMA_CCER2 |= 0x02 //1£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄϽµÑØ +#define PWMA_CC3P_CaptureFall() PWMA_CCER2 &= ~0x02 //0£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄÉÏÉýÑØ +#define PWMA_CC3NE_Enable() PWMA_CCER2 |= 0x04 //1£º¿ªÆô±È½ÏÊä³ö +#define PWMA_CC3NE_Disable() PWMA_CCER2 &= ~0x04 //0£º¹Ø±Õ±È½ÏÊä³ö +#define PWMA_CC3NP_LowValid() PWMA_CCER2 |= 0x08 //1£ºµÍµçƽÓÐЧ +#define PWMA_CC3NP_HighValid() PWMA_CCER2 &= ~0x08 //0£º¸ßµçƽÓÐЧ + +#define PWMA_CC4E_Enable() PWMA_CCER2 |= 0x10 //1£º¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC4E_Disable() PWMA_CCER2 &= ~0x10 //0£º¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMA_CC4P_LowValid() PWMA_CCER2 |= 0x20 //1£ºµÍµçƽÓÐЧ +#define PWMA_CC4P_HighValid() PWMA_CCER2 &= ~0x20 //0£º¸ßµçƽÓÐЧ +#define PWMA_CC4P_CaptureRise() PWMA_CCER2 |= 0x20 //1£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄϽµÑØ +#define PWMA_CC4P_CaptureFall() PWMA_CCER2 &= ~0x20 //0£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄÉÏÉýÑØ +#define PWMA_CC4NE_Enable() PWMA_CCER2 |= 0x40 //1£º¿ªÆô±È½ÏÊä³ö +#define PWMA_CC4NE_Disable() PWMA_CCER2 &= ~0x40 //0£º¹Ø±Õ±È½ÏÊä³ö +#define PWMA_CC4NP_LowValid() PWMA_CCER2 |= 0x80 //1£ºµÍµçƽÓÐЧ +#define PWMA_CC4NP_HighValid() PWMA_CCER2 &= ~0x80 //0£º¸ßµçƽÓÐЧ + +#define PWMB_CCER2_Disable() PWMB_CCER2 = 0x00 //¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC7E_Enable() PWMB_CCER2 |= 0x01 //1£º¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC7E_Disable() PWMB_CCER2 &= ~0x01 //0£º¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC7P_LowValid() PWMB_CCER2 |= 0x02 //1£ºµÍµçƽÓÐЧ +#define PWMB_CC7P_HighValid() PWMB_CCER2 &= ~0x02 //0£º¸ßµçƽÓÐЧ +#define PWMB_CC7P_CaptureRise() PWMB_CCER2 |= 0x02 //1£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄϽµÑØ +#define PWMB_CC7P_CaptureFall() PWMB_CCER2 &= ~0x02 //0£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄÉÏÉýÑØ + +#define PWMB_CC8E_Enable() PWMB_CCER2 |= 0x10 //1£º¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC8E_Disable() PWMB_CCER2 &= ~0x10 //0£º¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö +#define PWMB_CC8P_LowValid() PWMB_CCER2 |= 0x20 //1£ºµÍµçƽÓÐЧ +#define PWMB_CC8P_HighValid() PWMB_CCER2 &= ~0x20 //0£º¸ßµçƽÓÐЧ +#define PWMB_CC8P_CaptureRise() PWMB_CCER2 |= 0x20 //1£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄϽµÑØ +#define PWMB_CC8P_CaptureFall() PWMB_CCER2 &= ~0x20 //0£º²¶»ñ·¢ÉúÔÚ TI1F »ò TI2F µÄÉÏÉýÑØ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CNTRH = 0xFECEH; CNT1[15:8] 0000,0000 /* ¼ÆÊýÆ÷¸ß 8 λ */ +//sfr PWMB_CNTRH = 0xFEEEH; CNT2[15:8] 0000,0000 /* ¼ÆÊýÆ÷¸ß 8 λ */ +//sfr PWMA_CNTRL = 0xFECFH; CNT1[7:0] 0000,0000 /* ¼ÆÊýÆ÷µÍ 8 λ */ +//sfr PWMB_CNTRL = 0xFEEFH; CNT2[7:0] 0000,0000 /* ¼ÆÊýÆ÷µÍ 8 λ */ + +#define PWMA_Counter(n) PWMA_CNTR = n //¼ÆÊýÆ÷ÉèÖà +#define PWMB_Counter(n) PWMB_CNTR = n //¼ÆÊýÆ÷ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_PSCRH = 0xFED0H; PSC1[15:8] 0000,0000 /* Ô¤·ÖƵÆ÷¸ß 8 λ */ +//sfr PWMB_PSCRH = 0xFEF0H; PSC2[15:8] 0000,0000 /* Ô¤·ÖƵÆ÷¸ß 8 λ */ +//sfr PWMA_PSCRL = 0xFED1H; PSC1[7:0] 0000,0000 /* Ô¤·ÖƵÆ÷µÍ 8 λ */ +//sfr PWMB_PSCRL = 0xFEF1H; PSC2[7:0] 0000,0000 /* Ô¤·ÖƵÆ÷µÍ 8 λ */ + +#define PWMA_Prescaler(n) PWMA_PSCR = n //Ô¤·ÖƵÆ÷ÉèÖà +#define PWMB_Prescaler(n) PWMB_PSCR = n //Ô¤·ÖƵÆ÷ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ARRH = 0xFED2H; ARR1[15:8] 0000,0000 /* ×Ô¶¯ÖØ×°ÔؼĴæÆ÷¸ß 8 λ */ +//sfr PWMB_ARRH = 0xFEF2H; ARR2[15:8] 0000,0000 /* ×Ô¶¯ÖØ×°ÔؼĴæÆ÷¸ß 8 λ */ +//sfr PWMA_ARRL = 0xFED3H; ARR1[7:0] 0000,0000 /* ×Ô¶¯ÖØ×°ÔؼĴæÆ÷µÍ 8 λ */ +//sfr PWMB_ARRL = 0xFEF3H; ARR2[7:0] 0000,0000 /* ×Ô¶¯ÖØ×°ÔؼĴæÆ÷µÍ 8 λ */ + +#define PWMA_AutoReload(n) PWMA_ARR = n //×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÉèÖà +#define PWMB_AutoReload(n) PWMB_ARR = n //×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_RCR = 0xFED4H; REP1[7:0] 0000,0000 /* ÖØ¸´¼ÆÊýÆ÷¼Ä´æÆ÷ */ +//sfr PWMB_RCR = 0xFEF4H; REP2[7:0] 0000,0000 /* ÖØ¸´¼ÆÊýÆ÷¼Ä´æÆ÷ */ + +#define PWMA_ReCounter(n) PWMA_RCR = n //ÖØ¸´¼ÆÊýÆ÷¼Ä´æÆ÷ÉèÖà +#define PWMB_ReCounter(n) PWMB_RCR = n //ÖØ¸´¼ÆÊýÆ÷¼Ä´æÆ÷ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR1H = 0xFED5H; CCR1[15:8] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 1 ¸ß 8 λ */ +//sfr PWMB_CCR5H = 0xFEF5H; CCR5[15:8] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 1 ¸ß 8 λ */ +//sfr PWMA_CCR1L = 0xFED6H; CCR1[7:0] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 1 µÍ 8 λ */ +//sfr PWMB_CCR5L = 0xFEF6H; CCR5[7:0] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 1 µÍ 8 λ */ + +#define PWMA_Duty1(n) PWMA_CCR1 = n //²¶»ñ/±È½Ï¼Ä´æÆ÷ 1 ÉèÖà +#define PWMB_Duty5(n) PWMB_CCR5 = n //²¶»ñ/±È½Ï¼Ä´æÆ÷ 1 ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR2H = 0xFED7H; CCR2[15:8] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 2 ¸ß 8 λ */ +//sfr PWMB_CCR6H = 0xFEF7H; CCR6[15:8] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 2 ¸ß 8 λ */ +//sfr PWMA_CCR2L = 0xFED8H; CCR2[7:0] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 2 µÍ 8 λ */ +//sfr PWMB_CCR6L = 0xFEF8H; CCR6[7:0] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 2 µÍ 8 λ */ + +#define PWMA_Duty2(n) PWMA_CCR2 = n //²¶»ñ/±È½Ï¼Ä´æÆ÷ 2 ÉèÖà +#define PWMB_Duty6(n) PWMB_CCR6 = n //²¶»ñ/±È½Ï¼Ä´æÆ÷ 2 ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR3H = 0xFED9H; CCR3[15:8] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 3 ¸ß 8 λ */ +//sfr PWMB_CCR7H = 0xFEF9H; CCR7[15:8] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 3 ¸ß 8 λ */ +//sfr PWMA_CCR3L = 0xFEDAH; CCR3[7:0] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 3 µÍ 8 λ */ +//sfr PWMB_CCR7L = 0xFEFAH; CCR7[7:0] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 3 µÍ 8 λ */ + +#define PWMA_Duty3(n) PWMA_CCR3 = n //²¶»ñ/±È½Ï¼Ä´æÆ÷ 3 ÉèÖà +#define PWMB_Duty7(n) PWMB_CCR7 = n //²¶»ñ/±È½Ï¼Ä´æÆ÷ 3 ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR4H = 0xFEDBH; CCR4[15:8] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 4 ¸ß 8 λ */ +//sfr PWMB_CCR8H = 0xFEFBH; CCR8[15:8] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 4 ¸ß 8 λ */ +//sfr PWMA_CCR4L = 0xFEDCH; CCR4[7:0] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 4 µÍ 8 λ */ +//sfr PWMB_CCR8L = 0xFEFCH; CCR8[7:0] 0000,0000 /* ²¶»ñ/±È½Ï¼Ä´æÆ÷ 4 µÍ 8 λ */ + +#define PWMA_Duty4(n) PWMA_CCR4 = n //²¶»ñ/±È½Ï¼Ä´æÆ÷ 4 ÉèÖà +#define PWMB_Duty8(n) PWMB_CCR8 = n //²¶»ñ/±È½Ï¼Ä´æÆ÷ 4 ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_BRK = 0xFEDDH; MOE1 AOE1 BKP1 BKE1 OSSR1 OSSI1 LOCK11 LOCK10 0000,0000 /* ɲ³µ¼Ä´æÆ÷ */ +//sfr PWMB_BRK = 0xFEFDH; MOE2 AOE2 BKP2 BKE2 OSSR2 OSSI2 LOCK21 LOCK20 0000,0000 /* ɲ³µ¼Ä´æÆ÷ */ + +#define PWMA_BrakeOutputEnable() PWMA_BRK |= 0x80 //1£ºÖ÷Êä³öʹÄÜ +#define PWMA_BrakeOutputDisable() PWMA_BRK &= ~0x80 //0£ºÖ÷Êä³ö½ûÖ¹ +#define PWMB_BrakeOutputEnable() PWMB_BRK |= 0x80 //1£ºÖ÷Êä³öʹÄÜ +#define PWMB_BrakeOutputDisable() PWMB_BRK &= ~0x80 //0£ºÖ÷Êä³ö½ûÖ¹ + +#define PWMA_BrakeAutoOutputEnable() PWMA_BRK |= 0x40 //1£º×Ô¶¯Êä³öʹÄÜ +#define PWMA_BrakeAutoOutputDisable() PWMA_BRK &= ~0x40 //0£º×Ô¶¯Êä³ö½ûÖ¹ +#define PWMB_BrakeAutoOutputEnable() PWMB_BRK |= 0x40 //1£º×Ô¶¯Êä³öʹÄÜ +#define PWMB_BrakeAutoOutputDisable() PWMB_BRK &= ~0x40 //0£º×Ô¶¯Êä³ö½ûÖ¹ + +#define PWMA_BrakeHighValid() PWMA_BRK |= 0x20 //1£ºÉ²³µÊäÈë¸ßµçƽÓÐЧ +#define PWMA_BrakeLowValid() PWMA_BRK &= ~0x20 //0£ºÉ²³µÊäÈëµÍµçƽÓÐЧ +#define PWMB_BrakeHighValid() PWMB_BRK |= 0x20 //1£ºÉ²³µÊäÈë¸ßµçƽÓÐЧ +#define PWMB_BrakeLowValid() PWMB_BRK &= ~0x20 //0£ºÉ²³µÊäÈëµÍµçƽÓÐЧ + +#define PWMA_BrakeEnable() PWMA_BRK |= 0x10 //1£º¿ªÆôɲ³µÊäÈë +#define PWMA_BrakeDisable() PWMA_BRK &= ~0x10 //0£º½ûֹɲ³µÊäÈë +#define PWMB_BrakeEnable() PWMB_BRK |= 0x10 //1£º¿ªÆôɲ³µÊäÈë +#define PWMB_BrakeDisable() PWMB_BRK &= ~0x10 //0£º½ûֹɲ³µÊäÈë + +//ÔËÐÐģʽÏ¡°¹Ø±Õ״̬¡±Ñ¡Ôñ +#define PWMA_OSSRnEnable() PWMA_BRK |= 0x08 //1£ºµ± PWM ²»¹¤×÷ʱ£¬Ò»µ© CCiE=1 »ò CCiNE=1£¬Ê×ÏÈ¿ªÆô OC/OCN ²¢Êä³öÎÞЧµçƽ£¬È»ºóÖÃOC/OCN ʹÄÜÊä³öÐźÅ=1 +#define PWMA_OSSRnDisable() PWMA_BRK &= ~0x08 //0£ºµ± PWM ²»¹¤×÷ʱ£¬½ûÖ¹ OC/OCN Êä³ö£¨OC/OCN ʹÄÜÊä³öÐźÅ=0£© +#define PWMB_OSSRnEnable() PWMB_BRK |= 0x08 //1£ºµ± PWM ²»¹¤×÷ʱ£¬Ò»µ© CCiE=1 »ò CCiNE=1£¬Ê×ÏÈ¿ªÆô OC/OCN ²¢Êä³öÎÞЧµçƽ£¬È»ºóÖÃOC/OCN ʹÄÜÊä³öÐźÅ=1 +#define PWMB_OSSRnDisable() PWMB_BRK &= ~0x08 //0£ºµ± PWM ²»¹¤×÷ʱ£¬½ûÖ¹ OC/OCN Êä³ö£¨OC/OCN ʹÄÜÊä³öÐźÅ=0£© +//¿ÕÏÐģʽÏ¡°¹Ø±Õ״̬¡±Ñ¡Ôñ +#define PWMA_OSSInEnable() PWMA_BRK |= 0x04 //1£ºµ± PWM ²»¹¤×÷ʱ£¬Ò»µ© CCiE=1 »ò CCiNE=1£¬OC/OCN Ê×ÏÈÊä³öÆä¿ÕÏÐµçÆ½£¬È»ºó OC/OCNʹÄÜÊä³öÐźÅ=1 +#define PWMA_OSSInDisable() PWMA_BRK &= ~0x04 //0£ºµ± PWM ²»¹¤×÷ʱ£¬½ûÖ¹ OC/OCN Êä³ö£¨OC/OCN ʹÄÜÊä³öÐźÅ=0£© +#define PWMB_OSSInEnable() PWMB_BRK |= 0x04 //1£ºµ± PWM ²»¹¤×÷ʱ£¬Ò»µ© CCiE=1 »ò CCiNE=1£¬OC/OCN Ê×ÏÈÊä³öÆä¿ÕÏÐµçÆ½£¬È»ºó OC/OCNʹÄÜÊä³öÐźÅ=1 +#define PWMB_OSSInDisable() PWMB_BRK &= ~0x04 //0£ºµ± PWM ²»¹¤×÷ʱ£¬½ûÖ¹ OC/OCN Êä³ö£¨OC/OCN ʹÄÜÊä³öÐźÅ=0£© + +#define PWMn_lock_L0 0 //¼Ä´æÆ÷ÎÞд±£»¤ +#define PWMn_lock_L1 1 //Ëø¶¨¼¶±ð 1£º²»ÄÜдÈë PWMn_BKR ¼Ä´æÆ÷µÄ BKE¡¢BKP¡¢AOE λºÍPWMn_OISR ¼Ä´æÆ÷µÄ OISI λ +#define PWMn_lock_L2 2 //Ëø¶¨¼¶±ð 2£º²»ÄÜдÈëËø¶¨¼¶±ð 1 Öеĸ÷룬Ҳ²»ÄÜдÈë CC ¼«ÐÔλÒÔ¼° OSSR/OSSI λ +#define PWMn_lock_L3 3 //Ëø¶¨¼¶±ð 3£º²»ÄÜдÈëËø¶¨¼¶±ð 2 Öеĸ÷룬Ҳ²»ÄÜдÈë CC ¿ØÖÆÎ» + +#define PWMA_LockLevelSet(n) PWMA_BRK = (PWMA_BRK & ~0x03) | (n&3) //Ëø¶¨ÉèÖ᣸ÃλΪ·ÀÖ¹Èí¼þ´íÎó¶øÌṩµÄд±£»¤´ëÊ© +#define PWMB_LockLevelSet(n) PWMB_BRK = (PWMB_BRK & ~0x03) | (n&3) //Ëø¶¨ÉèÖ᣸ÃλΪ·ÀÖ¹Èí¼þ´íÎó¶øÌṩµÄд±£»¤´ëÊ© + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_DTR = 0xFEDEH; DTG1[7:0] 0000,0000 /* ËÀÇø¼Ä´æÆ÷ */ +//sfr PWMB_DTR = 0xFEFEH; DTG2[7:0] 0000,0000 /* ËÀÇø¼Ä´æÆ÷ */ + +//DTGn[7:5] = 000~011: ËÀÇøÊ±¼ä = DTGn[7:0] * tCK_PSC +//DTGn[7:5] = 100~101: ËÀÇøÊ±¼ä = (64 + DTGn[6:0]) * 2 * tCK_PSC +//DTGn[7:5] = 110: ËÀÇøÊ±¼ä = (32 + DTGn[5:0]) * 8 * tCK_PSC +//DTGn[7:5] = 111: ËÀÇøÊ±¼ä = (32 + DTGn[4:0]) * 16 * tCK_PSC + +#define PWMA_DeadTime(n) PWMA_DTR = n //ËÀÇø·¢ÉúÆ÷ÉèÖà +#define PWMB_DeadTime(n) PWMB_DTR = n //ËÀÇø·¢ÉúÆ÷ÉèÖà + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_OISR = 0xFEDFH; OIS4N OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 0000,0000 /* Êä³ö¿ÕÏÐ״̬¼Ä´æÆ÷ */ +//sfr PWMB_OISR = 0xFEFFH; - OIS8 - OIS7 - OIS6 - OIS5 x0x0,x0x0 /* Êä³ö¿ÕÏÐ״̬¼Ä´æÆ÷ */ + +#define PWMA_OC1_OUT_0() PWMA_OISR &= ~0x01 /* µ± MOE=0 ʱ£¬Èç¹û OC1N ʹÄÜ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC1=0 */ +#define PWMA_OC1_OUT_1() PWMA_OISR |= 0x01 /* µ± MOE=0 ʱ£¬Èç¹û OC1N ʹÄÜ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC1=1 */ +#define PWMA_OC1N_OUT_0() PWMA_OISR &= ~0x02 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC1N=0 */ +#define PWMA_OC1N_OUT_1() PWMA_OISR |= 0x02 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC1N=1 */ +#define PWMA_OC2_OUT_0() PWMA_OISR &= ~0x04 /* µ± MOE=0 ʱ£¬Èç¹û OC2N ʹÄÜ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC2=0 */ +#define PWMA_OC2_OUT_1() PWMA_OISR |= 0x04 /* µ± MOE=0 ʱ£¬Èç¹û OC2N ʹÄÜ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC2=1 */ +#define PWMA_OC2N_OUT_0() PWMA_OISR &= ~0x08 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC2N=0 */ +#define PWMA_OC2N_OUT_1() PWMA_OISR |= 0x08 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC2N=1 */ +#define PWMA_OC3_OUT_0() PWMA_OISR &= ~0x10 /* µ± MOE=0 ʱ£¬Èç¹û OC3N ʹÄÜ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC3=0 */ +#define PWMA_OC3_OUT_1() PWMA_OISR |= 0x10 /* µ± MOE=0 ʱ£¬Èç¹û OC3N ʹÄÜ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC3=1 */ +#define PWMA_OC3N_OUT_0() PWMA_OISR &= ~0x20 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC3N=0 */ +#define PWMA_OC3N_OUT_1() PWMA_OISR |= 0x20 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC3N=1 */ +#define PWMA_OC4_OUT_0() PWMA_OISR &= ~0x40 /* µ± MOE=0 ʱ£¬Èç¹û OC4N ʹÄÜ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC4=0 */ +#define PWMA_OC4_OUT_1() PWMA_OISR |= 0x40 /* µ± MOE=0 ʱ£¬Èç¹û OC4N ʹÄÜ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC4=1 */ +#define PWMA_OC4N_OUT_0() PWMA_OISR &= ~0x80 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC4N=0 */ +#define PWMA_OC4N_OUT_1() PWMA_OISR |= 0x80 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC4N=1 */ + +#define PWMB_OC5_OUT_0() PWMB_OISR &= ~0x01 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC5=0 */ +#define PWMB_OC5_OUT_1() PWMB_OISR |= 0x01 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC5=1 */ +#define PWMB_OC6_OUT_0() PWMB_OISR &= ~0x04 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC6=0 */ +#define PWMB_OC6_OUT_1() PWMB_OISR |= 0x04 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC6=1 */ +#define PWMB_OC7_OUT_0() PWMB_OISR &= ~0x10 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC7=0 */ +#define PWMB_OC7_OUT_1() PWMB_OISR |= 0x10 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC7=1 */ +#define PWMB_OC8_OUT_0() PWMB_OISR &= ~0x40 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC8=0 */ +#define PWMB_OC8_OUT_1() PWMB_OISR |= 0x40 /* µ± MOE=0 ʱ£¬ÔòÔÚÒ»¸öËÀÇøºó£¬OC8=1 */ + + + + +/* +;PCA_PWMn: 7 6 5 4 3 2 1 0 +; EBSn_1 EBSn_0 - - - - EPCnH EPCnL +;B5-B2: ±£Áô +;B1(EPCnH): ÔÚPWMģʽÏ£¬ÓëCCAPnH×é³É9λÊý¡£ +;B0(EPCnL): ÔÚPWMģʽÏ£¬ÓëCCAPnL×é³É9λÊý¡£ +*/ +#define PWM0_NORMAL() PCA_PWM0 &= ~3 /* PWM0Õý³£Êä³ö(ĬÈÏ) */ +#define PWM0_OUT_0() PCA_PWM0 |= 3, CCAP0H = 0xff /* PWM0Ò»Ö±Êä³ö0 */ +#define PWM0_OUT_1() PCA_PWM0 &= 0xc0, CCAP0H = 0 /* PWM0Ò»Ö±Êä³ö1 */ + +#define PWM1_NORMAL() PCA_PWM1 &= ~3 /* PWM1Õý³£Êä³ö(ĬÈÏ) */ +#define PWM1_OUT_0() PCA_PWM1 |= 3, CCAP1H = 0xff /* PWM1Ò»Ö±Êä³ö0 */ +#define PWM1_OUT_1() PCA_PWM1 &= 0xc0, CCAP1H = 0 /* PWM1Ò»Ö±Êä³ö1 */ + +#define PWM2_NORMAL() PCA_PWM2 &= ~3 /* PWM2Õý³£Êä³ö(ĬÈÏ) */ +#define PWM2_OUT_0() PCA_PWM2 |= 3, CCAP2H = 0xff /* PWM2Ò»Ö±Êä³ö0 */ +#define PWM2_OUT_1() PCA_PWM2 &= 0xc0, CCAP2H = 0 /* PWM2Ò»Ö±Êä³ö1 */ + +//#define PWM3_NORMAL() PCA_PWM3 &= ~3 /* PWM3Õý³£Êä³ö(ĬÈÏ) */ +//#define PWM3_OUT_0() PCA_PWM3 |= 3, CCAP3H = 0xff /* PWM3Ò»Ö±Êä³ö0 */ +//#define PWM3_OUT_1() PCA_PWM3 &= 0xc0, CCAP3H = 0 /* PWM3Ò»Ö±Êä³ö1 */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CCON = 0xD8; CF CR - - CCF3 CCF2 CCF1 CCF0 00xx,xx00 //PCA ¿ØÖƼĴæÆ÷¡£ +sbit CCF0 = CCON^0; /* PCA Ä£¿é0ÖжϱêÖ¾£¬ÓÉÓ²¼þÖÃ룬±ØÐëÓÉÈí¼þÇå0¡£ */ +sbit CCF1 = CCON^1; /* PCA Ä£¿é1ÖжϱêÖ¾£¬ÓÉÓ²¼þÖÃ룬±ØÐëÓÉÈí¼þÇå0¡£ */ +sbit CCF2 = CCON^2; /* PCA Ä£¿é2ÖжϱêÖ¾£¬ÓÉÓ²¼þÖÃ룬±ØÐëÓÉÈí¼þÇå0¡£ */ +//sbit CCF3 = CCON^3; /* PCA Ä£¿é3ÖжϱêÖ¾£¬ÓÉÓ²¼þÖÃ룬±ØÐëÓÉÈí¼þÇå0¡£ */ +sbit CR = CCON^6; /* 1: ÔÊÐíPCA¼ÆÊýÆ÷¼ÆÊý£¬±ØÐëÓÉÈí¼þÇå0¡£*/ +sbit CF = CCON^7; /* PCA¼ÆÊýÆ÷Òç³ö£¨CH£¬CLÓÉFFFFH±äΪ0000H£©±êÖ¾¡£PCA¼ÆÊýÆ÷Òç³öºóÓÉÓ²¼þÖÃ룬±ØÐëÓÉÈí¼þÇå0¡£*/ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMOD = 0xD9; CIDL - - - CPS2 CPS1 CPS0 ECF 0xxx,0000 //PCA ¹¤×÷ģʽ¼Ä´æÆ÷¡£ +#define PCA_IDLE_OFF() CMOD |= (1<<7) /* IDLE״̬PCAÍ£Ö¹¼ÆÊý¡£ */ +#define PCA_IDLE_ON() CMOD &= ~(1<<7) /* IDLE״̬PCA¼ÌÐø¼ÆÊý¡£ */ +#define PCA_CLK_12T() CMOD &= ~0x0E /* PCA¼ÆÊýÂö³åÑ¡Ôñ fosc/12 */ +#define PCA_CLK_2T() CMOD = (CMOD & ~0x0E) + 2 /* PCA¼ÆÊýÂö³åÑ¡Ôñ fosc/2 */ +#define PCA_CLK_T0() CMOD = (CMOD & ~0x0E) + 4 /* PCA¼ÆÊýÂö³åÑ¡ÔñTimer0Öжϣ¬Timer0¿Éͨ¹ýAUXR¼Ä´æÆ÷ÉèÖóɹ¤×÷ÔÚ12T»ò1Tģʽ¡£ */ +#define PCA_CLK_ECI() CMOD = (CMOD & ~0x0E) + 6 /* PCA¼ÆÊýÂö³åÑ¡Ôñ´ÓECI/P3.4½ÅÊäÈëµÄÍⲿʱÖÓ£¬×î´ó fosc/2¡£ */ +#define PCA_CLK_1T() CMOD = (CMOD & ~0x0E) + 8 /* PCA¼ÆÊýÂö³åÑ¡Ôñ Fosc */ +#define PCA_CLK_4T() CMOD = (CMOD & ~0x0E) + 10 /* PCA¼ÆÊýÂö³åÑ¡Ôñ Fosc/4 */ +#define PCA_CLK_6T() CMOD = (CMOD & ~0x0E) + 12 /* PCA¼ÆÊýÂö³åÑ¡Ôñ Fosc/6 */ +#define PCA_CLK_8T() CMOD = (CMOD & ~0x0E) + 14 /* PCA¼ÆÊýÂö³åÑ¡Ôñ Fosc/8 */ +#define PCA_INT_ENABLE() CMOD |= 1 /* PCA¼ÆÊýÆ÷Òç³öÖжÏÔÊÐí룬1---ÔÊÐíCF£¨CCON.7£©²úÉúÖжϡ£ */ +#define PCA_INT_DISABLE() CMOD &= ~1 /* PCA¼ÆÊýÆ÷Òç³öÖжϽûÖ¹¡£ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr P_SW1 = 0xA2; S1_S1 S1_S0 CCP_S1 CCP_S0 SPI_S1 SPI_S0 0 - nn00,000x //Auxiliary Register 1 +#define PCA_USE_P12P11P10P37() P_SW1 &= ~0x30 /* ½«PCA/PWMÇл»µ½P12(ECI) P11(CCP0) P10(CCP1) P37(CCP2)(ÉϵçĬÈÏ) */ +#define PCA_USE_P34P35P36P37() P_SW1 = (P_SW1 & ~0x30) | 0x10 /* ½«PCA/PWMÇл»µ½P34(ECI) P35(CCP0) P36(CCP1) P37(CCP2) */ +#define PCA_USE_P24P25P26P27() P_SW1 = (P_SW1 & ~0x30) | 0x20 /* ½«PCA/PWMÇл»µ½P24(ECI) P25(CCP0) P26(CCP1) P27(CCP2) */ + + +/* 7 6 5 4 3 2 1 0 Reset Value +//sfr CCAPM0 = 0xDA; PWM ¼Ä´æÆ÷ - ECOM0 CCAPP0 CCAPN0 MAT0 TOG0 PWM0 ECCF0 x000,0000 //PCA Ä£¿é0 +//sfr CCAPM1 = 0xDB; PWM ¼Ä´æÆ÷ - ECOM1 CCAPP1 CCAPN1 MAT1 TOG1 PWM1 ECCF1 x000,0000 //PCA Ä£¿é1 +//sfr CCAPM2 = 0xDC; PWM ¼Ä´æÆ÷ - ECOM2 CCAPP2 CCAPN2 MAT2 TOG2 PWM2 ECCF2 x000,0000 //PCA Ä£¿é2 +//sfr CCAPM3 = 0xDD; PWM ¼Ä´æÆ÷ - ECOM3 CCAPP3 CCAPN3 MAT3 TOG3 PWM3 ECCF3 x000,0000 //PCA Ä£¿é3 +;ECOMn = 1: ÔÊÐí±È½Ï¹¦ÄÜ¡£ +;CAPPn = 1: ÔÊÐíÉÏÉýÑØ´¥·¢²¶×½¹¦ÄÜ¡£ +;CAPNn = 1: ÔÊÐíϽµÑØ´¥·¢²¶×½¹¦ÄÜ¡£ +;MATn = 1: µ±Æ¥ÅäÇé¿ö·¢Éúʱ£¬ÔÊÐíCCONÖеÄCCFnÖÃλ¡£ +;TOGn = 1: µ±Æ¥ÅäÇé¿ö·¢Éúʱ£¬CEXn½«·­×ª¡£(CEX0/PCA0/PWM0/P3.7,CEX1/PCA1/PWM1/P3.5) +;PWMn = 1: ½«CEXnÉèÖÃΪPWMÊä³ö¡£ +;ECCFn = 1: ÔÊÐíCCONÖеÄCCFn´¥·¢Öжϡ£ +;ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn +; 0 0 0 0 0 0 0 00H δÆôÓÃÈκι¦ÄÜ¡£ +; x 1 0 0 0 0 x 20H 16λCEXnÉÏÉýÑØ´¥·¢²¶×½¹¦ÄÜ¡£ +; x 0 1 0 0 0 x 10H 16λCEXnϽµÑØ´¥·¢²¶×½¹¦ÄÜ¡£ +; x 1 1 0 0 0 x 30H 16λCEXn/PCAn±ßÑØ£¨ÉÏ¡¢ÏÂÑØ£©´¥·¢²¶×½¹¦ÄÜ¡£ +; 1 0 0 1 0 0 x 48H 16λÈí¼þ¶¨Ê±Æ÷¡£ +; 1 0 0 1 1 0 x 4CH 16λ¸ßËÙÂö³åÊä³ö¡£ +; 1 0 0 0 0 1 0 42H 8λPWM¡£ÎÞÖÐ¶Ï +; 1 1 0 0 0 1 1 63H 8λPWM¡£µÍ±ä¸ß¿É²úÉúÖÐ¶Ï +; 1 0 1 0 0 1 1 53H 8λPWM¡£¸ß±äµÍ¿É²úÉúÖÐ¶Ï +; 1 1 1 0 0 1 1 73H 8λPWM¡£µÍ±ä¸ß»ò¸ß±äµÍ¾ù¿É²úÉúÖÐ¶Ï +;******************************************************************* +;*******************************************************************/ + +#define PCA0_none() CCAPM0 = 0 +#define PCA0_PWM(nbit) CCAPM0 = 0x42,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_rise_int(nbit) CCAPM0 = 0x63,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_fall_int(nbit) CCAPM0 = 0x53,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_edge_int(nbit) CCAPM0 = 0x73,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_capture_rise() CCAPM0 = (0x20 + 1) +#define PCA0_capture_fall() CCAPM0 = (0x10 + 1) +#define PCA0_capture_edge() CCAPM0 = (0x30 + 1) +#define PCA0_16bit_Timer() CCAPM0 = (0x48 + 1) +#define PCA0_High_PulseEnable() CCAPM0 |= 0x04 + +#define PCA1_none() CCAPM1 = 0 +#define PCA1_PWM(nbit) CCAPM1 = 0x42,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_rise_int(nbit) CCAPM1 = 0x63,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_fall_int(nbit) CCAPM1 = 0x53,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_edge_int(nbit) CCAPM1 = 0x73,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_capture_rise() CCAPM1 = (0x20 + 1) +#define PCA1_capture_fall() CCAPM1 = (0x10 + 1) +#define PCA1_capture_edge() CCAPM1 = (0x30 + 1) +#define PCA1_16bit_Timer() CCAPM1 = (0x48 + 1) +#define PCA1_High_PulseEnable() CCAPM1 |= 0x04 + +#define PCA2_none() CCAPM2 = 0 +#define PCA2_PWM(nbit) CCAPM2 = 0x42,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_rise_int(nbit) CCAPM2 = 0x63,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_fall_int(nbit) CCAPM2 = 0x53,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_edge_int(nbit) CCAPM2 = 0x73,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_capture_rise() CCAPM2 = (0x20 + 1) +#define PCA2_capture_fall() CCAPM2 = (0x10 + 1) +#define PCA2_capture_edge() CCAPM2 = (0x30 + 1) +#define PCA2_16bit_Timer() CCAPM2 = (0x48 + 1) +#define PCA2_High_PulseEnable() CCAPM2 |= 0x04 + +//#define PCA3_none() CCAPM3 = 0 +//#define PCA3_PWM(nbit) CCAPM3 = 0x42,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_rise_int(nbit) CCAPM3 = 0x63,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_fall_int(nbit) CCAPM3 = 0x53,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_edge_int(nbit) CCAPM3 = 0x73,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_capture_rise() CCAPM3 = (0x20 + 1) +//#define PCA3_capture_fall() CCAPM3 = (0x10 + 1) +//#define PCA3_capture_edge() CCAPM3 = (0x30 + 1) +//#define PCA3_16bit_Timer() CCAPM3 = (0x48 + 1) +//#define PCA3_High_PulseEnable() CCAPM3 |= 0x04 + +/**********************************************************/ +typedef unsigned char u8; +typedef unsigned int u16; +typedef unsigned long u32; + +/**********************************************************/ +#define NOP1() _nop_() +#define NOP2() NOP1(),NOP1() +#define NOP3() NOP2(),NOP1() +#define NOP4() NOP3(),NOP1() +#define NOP5() NOP4(),NOP1() +#define NOP6() NOP5(),NOP1() +#define NOP7() NOP6(),NOP1() +#define NOP8() NOP7(),NOP1() +#define NOP9() NOP8(),NOP1() +#define NOP10() NOP9(),NOP1() +#define NOP11() NOP10(),NOP1() +#define NOP12() NOP11(),NOP1() +#define NOP13() NOP12(),NOP1() +#define NOP14() NOP13(),NOP1() +#define NOP15() NOP14(),NOP1() +#define NOP16() NOP15(),NOP1() +#define NOP17() NOP16(),NOP1() +#define NOP18() NOP17(),NOP1() +#define NOP19() NOP18(),NOP1() +#define NOP20() NOP19(),NOP1() +#define NOP21() NOP20(),NOP1() +#define NOP22() NOP21(),NOP1() +#define NOP23() NOP22(),NOP1() +#define NOP24() NOP23(),NOP1() +#define NOP25() NOP24(),NOP1() +#define NOP26() NOP25(),NOP1() +#define NOP27() NOP26(),NOP1() +#define NOP28() NOP27(),NOP1() +#define NOP29() NOP28(),NOP1() +#define NOP30() NOP29(),NOP1() +#define NOP31() NOP30(),NOP1() +#define NOP32() NOP31(),NOP1() +#define NOP33() NOP32(),NOP1() +#define NOP34() NOP33(),NOP1() +#define NOP35() NOP34(),NOP1() +#define NOP36() NOP35(),NOP1() +#define NOP37() NOP36(),NOP1() +#define NOP38() NOP37(),NOP1() +#define NOP39() NOP38(),NOP1() +#define NOP40() NOP39(),NOP1() +#define NOP(N) NOP##N() + + +/**********************************************/ +#define Pin0 0x01 //IOÒý½Å Px.0 +#define Pin1 0x02 //IOÒý½Å Px.1 +#define Pin2 0x04 //IOÒý½Å Px.2 +#define Pin3 0x08 //IOÒý½Å Px.3 +#define Pin4 0x10 //IOÒý½Å Px.4 +#define Pin5 0x20 //IOÒý½Å Px.5 +#define Pin6 0x40 //IOÒý½Å Px.6 +#define Pin7 0x80 //IOÒý½Å Px.7 +#define PinAll 0xFF //IOËùÓÐÒý½Å + +#define P0n_standard(bitn) P0M1 &= ~(bitn), P0M0 &= ~(bitn) /* 00 */ +#define P0n_push_pull(bitn) P0M1 &= ~(bitn), P0M0 |= (bitn) /* 01 */ +#define P0n_pure_input(bitn) P0M1 |= (bitn), P0M0 &= ~(bitn) /* 10 */ +#define P0n_open_drain(bitn) P0M1 |= (bitn), P0M0 |= (bitn) /* 11 */ + +#define P1n_standard(bitn) P1M1 &= ~(bitn), P1M0 &= ~(bitn) +#define P1n_push_pull(bitn) P1M1 &= ~(bitn), P1M0 |= (bitn) +#define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= ~(bitn) +#define P1n_open_drain(bitn) P1M1 |= (bitn), P1M0 |= (bitn) + +#define P2n_standard(bitn) P2M1 &= ~(bitn), P2M0 &= ~(bitn) +#define P2n_push_pull(bitn) P2M1 &= ~(bitn), P2M0 |= (bitn) +#define P2n_pure_input(bitn) P2M1 |= (bitn), P2M0 &= ~(bitn) +#define P2n_open_drain(bitn) P2M1 |= (bitn), P2M0 |= (bitn) + +#define P3n_standard(bitn) P3M1 &= ~(bitn), P3M0 &= ~(bitn) +#define P3n_push_pull(bitn) P3M1 &= ~(bitn), P3M0 |= (bitn) +#define P3n_pure_input(bitn) P3M1 |= (bitn), P3M0 &= ~(bitn) +#define P3n_open_drain(bitn) P3M1 |= (bitn), P3M0 |= (bitn) + +#define P4n_standard(bitn) P4M1 &= ~(bitn), P4M0 &= ~(bitn) +#define P4n_push_pull(bitn) P4M1 &= ~(bitn), P4M0 |= (bitn) +#define P4n_pure_input(bitn) P4M1 |= (bitn), P4M0 &= ~(bitn) +#define P4n_open_drain(bitn) P4M1 |= (bitn), P4M0 |= (bitn) + +#define P5n_standard(bitn) P5M1 &= ~(bitn), P5M0 &= ~(bitn) +#define P5n_push_pull(bitn) P5M1 &= ~(bitn), P5M0 |= (bitn) +#define P5n_pure_input(bitn) P5M1 |= (bitn), P5M0 &= ~(bitn) +#define P5n_open_drain(bitn) P5M1 |= (bitn), P5M0 |= (bitn) + +#define P6n_standard(bitn) P6M1 &= ~(bitn), P6M0 &= ~(bitn) +#define P6n_push_pull(bitn) P6M1 &= ~(bitn), P6M0 |= (bitn) +#define P6n_pure_input(bitn) P6M1 |= (bitn), P6M0 &= ~(bitn) +#define P6n_open_drain(bitn) P6M1 |= (bitn), P6M0 |= (bitn) + +#define P7n_standard(bitn) P7M1 &= ~(bitn), P7M0 &= ~(bitn) +#define P7n_push_pull(bitn) P7M1 &= ~(bitn), P7M0 |= (bitn) +#define P7n_pure_input(bitn) P7M1 |= (bitn), P7M0 &= ~(bitn) +#define P7n_open_drain(bitn) P7M1 |= (bitn), P7M0 |= (bitn) + + +/****************************************************************/ + + +//sfr INT_CLKO = 0x8F; //¸½¼ÓµÄ SFR WAKE_CLKO (µØÖ·£º0x8F) +/* + 7 6 5 4 3 2 1 0 Reset Value + - EX4 EX3 EX2 - T2CLKO T1CLKO T0CLKO 0000,0000B +b6 - EX4 : ÍâÖжÏINT4ÔÊÐí +b5 - EX3 : ÍâÖжÏINT3ÔÊÐí +b4 - EX2 : ÍâÖжÏINT2ÔÊÐí +b2 - T1CLKO : ÔÊÐí T2 Òç³öÂö³åÔÚP3.0½ÅÊä³ö£¬Fck1 = 1/2 T1 Òç³öÂÊ +b1 - T1CLKO : ÔÊÐí T1 Òç³öÂö³åÔÚP3.4½ÅÊä³ö£¬Fck1 = 1/2 T1 Òç³öÂÊ +b0 - T0CLKO : ÔÊÐí T0 Òç³öÂö³åÔÚP3.5½ÅÊä³ö£¬Fck0 = 1/2 T0 Òç³öÂÊ +*/ + +#define LVD_InterruptEnable() ELVD = 1 +#define LVD_InterruptDisable() ELVD = 0 + + +//sfr WKTCL = 0xAA; //»½ÐѶ¨Ê±Æ÷µÍ×Ö½Ú +//sfr WKTCH = 0xAB; //»½ÐѶ¨Ê±Æ÷¸ß×Ö½Ú +// B7 B6 B5 B4 B3 B2 B1 B0 B7 B6 B5 B4 B3 B2 B1 B0 +// WKTEN S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0 n * 560us +#define WakeTimerDisable() WKTCH &= 0x7f /* WKTEN = 0 ½ûֹ˯Ãß»½ÐѶ¨Ê±Æ÷ */ +#define WakeTimerSet(scale) WKTCL = (scale) % 256,WKTCH = (scale) / 256 | 0x80 /* WKTEN = 1 ÔÊÐí˯Ãß»½ÐѶ¨Ê±Æ÷ */ + + + +//sfr BUS_SPEED = 0xA1; //Stretch register - - - - - - EXRTS1 EXRTSS0 xxxx,xx10 +#define BUS_SPEED_1T() BUS_SPEED = BUS_SPEED & ~3 +#define BUS_SPEED_2T() BUS_SPEED = (BUS_SPEED & ~3) | 1 +#define BUS_SPEED_4T() BUS_SPEED = (BUS_SPEED & ~3) | 2 +#define BUS_SPEED_8T() BUS_SPEED = (BUS_SPEED & ~3) | 3 + +#define BUS_RD_WR_P44_P43() BUS_SPEED = BUS_SPEED & 0x3f +#define BUS_RD_WR_P37_P36() BUS_SPEED = (BUS_SPEED & 0x3f) | 0x40 +#define BUS_RD_WR_P42_P40() BUS_SPEED = (BUS_SPEED & 0x3f) | 0x80 + + +/* interrupt vector */ +#define INT0_VECTOR 0 +#define TIMER0_VECTOR 1 +#define INT1_VECTOR 2 +#define TIMER1_VECTOR 3 +#define UART1_VECTOR 4 +#define ADC_VECTOR 5 +#define LVD_VECTOR 6 +#define PCA_VECTOR 7 +#define UART2_VECTOR 8 +#define SPI_VECTOR 9 +#define INT2_VECTOR 10 +#define INT3_VECTOR 11 +#define TIMER2_VECTOR 12 +#define INT4_VECTOR 16 +#define UART3_VECTOR 17 +#define UART4_VECTOR 18 +#define TIMER3_VECTOR 19 +#define TIMER4_VECTOR 20 +#define CMP_VECTOR 21 +#define PWM0_VECTOR 22 +#define PWMFD_VECTOR 23 +#define I2C_VECTOR 24 +#define USB_VECTOR 25 +#define PWMA_VECTOR 26 +#define PWMB_VECTOR 27 +#define PWM1_VECTOR 28 +#define PWM2_VECTOR 29 +#define PWM3_VECTOR 30 +#define PWM4_VECTOR 31 +#define PWM5_VECTOR 32 + + +#define TRUE 1 +#define FALSE 0 + +//============================================================= + +//======================================== + +#define Priority_0 0 //ÖжÏÓÅÏȼ¶Îª 0 ¼¶£¨×îµÍ¼¶£© +#define Priority_1 1 //ÖжÏÓÅÏȼ¶Îª 1 ¼¶£¨½ÏµÍ¼¶£© +#define Priority_2 2 //ÖжÏÓÅÏȼ¶Îª 2 ¼¶£¨½Ï¸ß¼¶£© +#define Priority_3 3 //ÖжÏÓÅÏȼ¶Îª 3 ¼¶£¨×î¸ß¼¶£© + +//======================================== + +#define ENABLE 1 +#define DISABLE 0 + +#endif diff --git a/myinc/config.h b/myinc/config.h new file mode 100644 index 0000000..1518746 --- /dev/null +++ b/myinc/config.h @@ -0,0 +1,33 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* ���Ҫ�ڳ�����ʹ�ô˴���,���ڳ�����ע��ʹ����STC�����ϼ����� */ +/*---------------------------------------------------------------------*/ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/*********************************************************/ + +//#define MAIN_Fosc 22118400L //������ʱ�� +//#define MAIN_Fosc 12000000L //������ʱ�� +#define MAIN_Fosc 11059200L //������ʱ�� +//#define MAIN_Fosc 5529600L //������ʱ�� +// #define MAIN_Fosc 24000000L //������ʱ�� + + +#define STC8Hxx //STC8Hϵ�� +//#define STC8Gxx //STC8Gϵ�� + +/*********************************************************/ + +#include "STC8xxxx.H" + + +#endif diff --git a/myinc/timer.h b/myinc/timer.h new file mode 100644 index 0000000..d7909b3 --- /dev/null +++ b/myinc/timer.h @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* ���Ҫ�ڳ�����ʹ�ô˴���,���ڳ�����ע��ʹ����STC�����ϼ����� */ +/*---------------------------------------------------------------------*/ + +#ifndef __TIMER_H +#define __TIMER_H + +#include "config.h" + +#define Timer0 0 +#define Timer1 1 +#define Timer2 2 +#define Timer3 3 +#define Timer4 4 + +#define TIM_16BitAutoReload 0 +#define TIM_16Bit 1 +#define TIM_8BitAutoReload 2 +#define TIM_16BitAutoReloadNoMask 3 + +#define TIM_CLOCK_1T 0 +#define TIM_CLOCK_12T 1 +#define TIM_CLOCK_Ext 2 + +typedef struct +{ + u8 TIM_Mode; // ����ģʽ, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask + u8 TIM_Priority; // ���ȼ����� Priority_0,Priority_1,Priority_2,Priority_3 + u8 TIM_Interrupt; // ����� ENABLE,DISABLE + u8 TIM_ClkSource; // ʱ��Դ TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext + u8 TIM_ClkOut; // �ɱ��ʱ�����, ENABLE,DISABLE + u16 TIM_Value; // װ�س�ֵ + u8 TIM_Run; // �Ƿ����� ENABLE,DISABLE +} TIM_InitTypeDef; + +u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx); +extern u8 KILL_time; +void Timer_config(void); +#endif