From 180e46521daac240998f915003f1b9a16425d658 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: Tue, 11 Apr 2023 08:51:37 +0800 Subject: [PATCH] =?UTF-8?q?pwm=E8=BE=93=E5=87=BA=E5=91=BC=E5=90=B8?= =?UTF-8?q?=E7=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/keil-assistant.log | 10 + .vscode/settings.json | 4 +- .vscode/uv4.log | 6 +- .vscode/uv4.log.lock | 2 +- Listings/Exti.lst | 6 +- Listings/GPIO.lst | 6 +- Listings/PWM.lst | 252 +++++++ Listings/STARTUP.lst | 10 +- Listings/kill_control.m51 | 1095 ++++++++++++++++++---------- Listings/main.lst | 18 +- Listings/timer.lst | 405 +++++----- Objects/Exti.obj | Bin 109866 -> 109918 bytes Objects/GPIO.__i | 1 - Objects/GPIO.obj | Bin 110035 -> 110087 bytes Objects/PWM.__i | 1 + Objects/PWM.obj | Bin 0 -> 119784 bytes Objects/STARTUP.obj | Bin 819 -> 819 bytes Objects/kill_control | Bin 435048 -> 570017 bytes Objects/kill_control.build_log.htm | 6 +- Objects/kill_control.hex | 417 +++++++---- Objects/kill_control.lnp | 3 +- Objects/main.obj | Bin 105246 -> 112273 bytes Objects/timer.obj | Bin 111985 -> 121470 bytes kill_control.uvgui.User | 80 +- kill_control.uvopt | 12 + kill_control.uvproj | 5 + mycode/PWM.C | 217 ++++++ mycode/main.c | 4 +- mycode/timer.c | 295 +++++--- myinc/GPIO.h | 1 + myinc/PWM.h | 140 ++++ 31 files changed, 2099 insertions(+), 897 deletions(-) create mode 100644 Listings/PWM.lst delete mode 100644 Objects/GPIO.__i create mode 100644 Objects/PWM.__i create mode 100644 Objects/PWM.obj create mode 100644 mycode/PWM.C create mode 100644 myinc/PWM.h diff --git a/.vscode/keil-assistant.log b/.vscode/keil-assistant.log index be2a400..adcf955 100644 --- a/.vscode/keil-assistant.log +++ b/.vscode/keil-assistant.log @@ -6,3 +6,13 @@ [info] Log at : 2023/4/10|15:46:58|GMT+0800 +[info] Log at : 2023/4/10|17:13:31|GMT+0800 + +[info] Log at : 2023/4/10|17:24:54|GMT+0800 + +[info] Log at : 2023/4/10|17:35:57|GMT+0800 + +[info] Log at : 2023/4/11|08:33:52|GMT+0800 + +[info] Log at : 2023/4/11|08:44:08|GMT+0800 + diff --git a/.vscode/settings.json b/.vscode/settings.json index 26f6d05..c8d9b38 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,6 +4,8 @@ "timer.h": "c", "exti.h": "c", "gpio.h": "c", - "config.h": "c" + "config.h": "c", + "PWM.C": "cpp", + "pwm.h": "c" } } \ No newline at end of file diff --git a/.vscode/uv4.log b/.vscode/uv4.log index 7c98c7b..1ea88a3 100644 --- a/.vscode/uv4.log +++ b/.vscode/uv4.log @@ -1,10 +1,8 @@ Build target 'Target 1' -compiling Exti.c... -compiling GPIO.c... -compiling main.c... compiling timer.c... +compiling PWM.C... linking... -Program Size: data=18.0 xdata=0 code=2183 +Program Size: data=79.0 xdata=0 code=3749 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 index 85095db..ca8800d 100644 --- a/.vscode/uv4.log.lock +++ b/.vscode/uv4.log.lock @@ -1 +1 @@ -2023/4/10 15:47:04 \ No newline at end of file +2023/4/11 8:44:51 \ No newline at end of file diff --git a/Listings/Exti.lst b/Listings/Exti.lst index d21a1f4..f95f5ea 100644 --- a/Listings/Exti.lst +++ b/Listings/Exti.lst @@ -1,4 +1,4 @@ -C51 COMPILER V9.60.0.0 EXTI 04/10/2023 15:47:03 PAGE 1 +C51 COMPILER V9.60.0.0 EXTI 04/10/2023 17:45:08 PAGE 1 C51 COMPILER V9.60.0.0, COMPILATION OF MODULE EXTI @@ -62,7 +62,7 @@ line level source 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 + C51 COMPILER V9.60.0.0 EXTI 04/10/2023 17:45:08 PAGE 2 55 56 /********************* INT4ÖжϺ¯Êý *************************/ @@ -126,7 +126,7 @@ line level source 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 + C51 COMPILER V9.60.0.0 EXTI 04/10/2023 17:45:08 PAGE 3 115 1 116 1 if (EXT == EXT_INT3) // ÍâÖжÏ3, ¹Ì¶¨ÎªÏ½µÑصÍÓÅÏȼ¶ÖÐ¶Ï diff --git a/Listings/GPIO.lst b/Listings/GPIO.lst index 37fa8d2..88a0b20 100644 --- a/Listings/GPIO.lst +++ b/Listings/GPIO.lst @@ -1,4 +1,4 @@ -C51 COMPILER V9.60.0.0 GPIO 04/10/2023 15:47:03 PAGE 1 +C51 COMPILER V9.60.0.0 GPIO 04/10/2023 17:32:45 PAGE 1 C51 COMPILER V9.60.0.0, COMPILATION OF MODULE GPIO @@ -62,7 +62,7 @@ line level source 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 + C51 COMPILER V9.60.0.0 GPIO 04/10/2023 17:32:45 PAGE 2 55 2 } 56 1 if (GPIO == GPIO_P2) @@ -126,7 +126,7 @@ line level source 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 + C51 COMPILER V9.60.0.0 GPIO 04/10/2023 17:32:45 PAGE 3 117 2 if (GPIOx->Mode == GPIO_OUT_OD) 118 2 P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; // ¿ªÂ©Êä³ö diff --git a/Listings/PWM.lst b/Listings/PWM.lst new file mode 100644 index 0000000..24c96ef --- /dev/null +++ b/Listings/PWM.lst @@ -0,0 +1,252 @@ +C51 COMPILER V9.60.0.0 PWM 04/11/2023 08:44:51 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE PWM +OBJECT MODULE PLACED IN .\Objects\PWM.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\PWM.C OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND + - PRINT(.\Listings\PWM.lst) TABS(2) OBJECT(.\Objects\PWM.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 "PWM.h" + 14 PWMx_Duty PWMB_Duty; + 15 u8 PWM_Configuration(u8 PWM, PWMx_InitDefine *PWMx) + 16 { + 17 1 if (PWM == PWMA) + 18 1 { + 19 2 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹SFR(XSFR) */ + 20 2 + 21 2 if (PWMx->PWM1_SetPriority <= Priority_3) + 22 2 PWM1_Priority(PWMx->PWM1_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priorit + -y_2,Priority_3 + 23 2 if (PWMx->PWM2_SetPriority <= Priority_3) + 24 2 PWM2_Priority(PWMx->PWM2_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priorit + -y_2,Priority_3 + 25 2 if (PWMx->PWM3_SetPriority <= Priority_3) + 26 2 PWM3_Priority(PWMx->PWM3_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priorit + -y_2,Priority_3 + 27 2 if (PWMx->PWM4_SetPriority <= Priority_3) + 28 2 PWM4_Priority(PWMx->PWM4_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priorit + -y_2,Priority_3 + 29 2 + 30 2 PWMA_CCER1_Disable(); // ¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö + 31 2 PWMA_CCER2_Disable(); // ¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö + 32 2 PWMA_OC1ModeSet(PWMx->PWM1_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + 33 2 PWMA_OC2ModeSet(PWMx->PWM2_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + 34 2 PWMA_OC3ModeSet(PWMx->PWM3_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + 35 2 PWMA_OC4ModeSet(PWMx->PWM4_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + 36 2 if (PWMx->PWM_Reload == ENABLE) + 37 2 PWMA_OC1_ReloadEnable(); // Êä³ö±È½ÏµÄÔ¤×°ÔØÊ¹ÄÜ + 38 2 else + 39 2 PWMA_OC1_RelosdDisable(); // ½ûÖ¹Êä³ö±È½ÏµÄÔ¤×°ÔØ + 40 2 if (PWMx->PWM_Fast == ENABLE) + 41 2 PWMA_OC1_FastEnable(); // Êä³ö±È½Ï¿ìËÙ¹¦ÄÜʹÄÜ + 42 2 else + 43 2 PWMA_OC1_FastDisable(); // ½ûÖ¹Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ + 44 2 + 45 2 if (PWMx->PWM_CC1Enable == ENABLE) + 46 2 PWMA_CC1E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 47 2 else + 48 2 PWMA_CC1E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 49 2 if (PWMx->PWM_CC1NEnable == ENABLE) + 50 2 PWMA_CC1NE_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + C51 COMPILER V9.60.0.0 PWM 04/11/2023 08:44:51 PAGE 2 + + 51 2 else + 52 2 PWMA_CC1NE_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 53 2 if (PWMx->PWM_CC2Enable == ENABLE) + 54 2 PWMA_CC2E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 55 2 else + 56 2 PWMA_CC2E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 57 2 if (PWMx->PWM_CC2NEnable == ENABLE) + 58 2 PWMA_CC2NE_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 59 2 else + 60 2 PWMA_CC2NE_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 61 2 if (PWMx->PWM_CC3Enable == ENABLE) + 62 2 PWMA_CC3E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 63 2 else + 64 2 PWMA_CC3E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 65 2 if (PWMx->PWM_CC3NEnable == ENABLE) + 66 2 PWMA_CC3NE_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 67 2 else + 68 2 PWMA_CC3NE_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 69 2 if (PWMx->PWM_CC4Enable == ENABLE) + 70 2 PWMA_CC4E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 71 2 else + 72 2 PWMA_CC4E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 73 2 if (PWMx->PWM_CC4NEnable == ENABLE) + 74 2 PWMA_CC4NE_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 75 2 else + 76 2 PWMA_CC4NE_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 77 2 + 78 2 PWMA_AutoReload(PWMx->PWM_Period); + 79 2 PWMA_Duty1(PWMx->PWM1_Duty); + 80 2 PWMA_Duty2(PWMx->PWM2_Duty); + 81 2 PWMA_Duty3(PWMx->PWM3_Duty); + 82 2 PWMA_Duty4(PWMx->PWM4_Duty); + 83 2 + 84 2 PWMA_CCPCAPreloaded(PWMx->PWM_PreLoad); // ²¶»ñ/±È½ÏÔ¤×°ÔØ¿ØÖÆÎ»(¸Ãλֻ¶Ô¾ßÓл¥²¹Êä³öµÄͨµÀÆð×÷ÓÃ) + 85 2 PWMA_PS = PWMx->PWM_PS_SW; // Çл»IO + 86 2 PWMA_ENO = PWMx->PWM_EnoSelect; // Êä³öͨµÀÑ¡Ôñ + 87 2 PWMA_DeadTime(PWMx->PWM_DeadTime); // ËÀÇø·¢ÉúÆ÷ÉèÖà + 88 2 + 89 2 if (PWMx->PWM_BrakeEnable == ENABLE) + 90 2 PWMA_BrakeEnable(); // ¿ªÆôɲ³µÊäÈë + 91 2 else + 92 2 PWMA_BrakeDisable(); // ½ûֹɲ³µÊäÈë + 93 2 if (PWMx->PWM_MainOutEnable == ENABLE) + 94 2 PWMA_BrakeOutputEnable(); // Ö÷Êä³öʹÄÜ + 95 2 else + 96 2 PWMA_BrakeOutputDisable(); // Ö÷Êä³ö½ûÖ¹ + 97 2 if (PWMx->PWM_CEN_Enable == ENABLE) + 98 2 PWMA_CEN_Enable(); // ʹÄܼÆÊýÆ÷ + 99 2 else + 100 2 PWMA_CEN_Disable(); // ½ûÖ¹¼ÆÊýÆ÷ + 101 2 + 102 2 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹RAM(XRAM) */ + 103 2 return 0; + 104 2 } + 105 1 + 106 1 if (PWM == PWMB) + 107 1 { + 108 2 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹SFR(XSFR) */ + 109 2 + 110 2 if (PWMx->PWM5_SetPriority <= Priority_3) + 111 2 PWM5_Priority(PWMx->PWM5_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priorit + -y_2,Priority_3 + C51 COMPILER V9.60.0.0 PWM 04/11/2023 08:44:51 PAGE 3 + + 112 2 + 113 2 PWMB_CCER1_Disable(); // ¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö + 114 2 PWMB_CCER2_Disable(); // ¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö + 115 2 PWMB_OC5ModeSet(PWMx->PWM5_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + 116 2 PWMB_OC6ModeSet(PWMx->PWM6_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + 117 2 PWMB_OC7ModeSet(PWMx->PWM7_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + 118 2 PWMB_OC8ModeSet(PWMx->PWM8_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + 119 2 if (PWMx->PWM_Reload == ENABLE) + 120 2 PWMB_OC5_ReloadEnable(); // Êä³ö±È½ÏµÄÔ¤×°ÔØÊ¹ÄÜ + 121 2 else + 122 2 PWMB_OC5_RelosdDisable(); // ½ûÖ¹Êä³ö±È½ÏµÄÔ¤×°ÔØ + 123 2 if (PWMx->PWM_Fast == ENABLE) + 124 2 PWMB_OC5_FastEnable(); // Êä³ö±È½Ï¿ìËÙ¹¦ÄÜʹÄÜ + 125 2 else + 126 2 PWMB_OC5_FastDisable(); // ½ûÖ¹Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ + 127 2 + 128 2 if (PWMx->PWM_CC5Enable == ENABLE) + 129 2 PWMB_CC5E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 130 2 else + 131 2 PWMB_CC5E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 132 2 if (PWMx->PWM_CC6Enable == ENABLE) + 133 2 PWMB_CC6E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 134 2 else + 135 2 PWMB_CC6E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 136 2 if (PWMx->PWM_CC7Enable == ENABLE) + 137 2 PWMB_CC7E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 138 2 else + 139 2 PWMB_CC7E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 140 2 if (PWMx->PWM_CC8Enable == ENABLE) + 141 2 PWMB_CC8E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + 142 2 else + 143 2 PWMB_CC8E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + 144 2 + 145 2 PWMB_AutoReload(PWMx->PWM_Period); + 146 2 PWMB_Duty5(PWMx->PWM5_Duty); + 147 2 PWMB_Duty6(PWMx->PWM6_Duty); + 148 2 PWMB_Duty7(PWMx->PWM7_Duty); + 149 2 PWMB_Duty8(PWMx->PWM8_Duty); + 150 2 + 151 2 PWMB_CCPCBPreloaded(PWMx->PWM_PreLoad); // ²¶»ñ/±È½ÏÔ¤×°ÔØ¿ØÖÆÎ»(¸Ãλֻ¶Ô¾ßÓл¥²¹Êä³öµÄͨµÀÆð×÷ÓÃ) + 152 2 PWMB_PS = PWMx->PWM_PS_SW; // Çл»IO + 153 2 PWMB_ENO = PWMx->PWM_EnoSelect; // Êä³öͨµÀÑ¡Ôñ + 154 2 PWMB_DeadTime(PWMx->PWM_DeadTime); // ËÀÇø·¢ÉúÆ÷ÉèÖà + 155 2 + 156 2 if (PWMx->PWM_BrakeEnable == ENABLE) + 157 2 PWMB_BrakeEnable(); // ¿ªÆôɲ³µÊäÈë + 158 2 else + 159 2 PWMB_BrakeDisable(); // ½ûֹɲ³µÊäÈë + 160 2 if (PWMx->PWM_MainOutEnable == ENABLE) + 161 2 PWMB_BrakeOutputEnable(); // Ö÷Êä³öʹÄÜ + 162 2 else + 163 2 PWMB_BrakeOutputDisable(); // Ö÷Êä³ö½ûÖ¹ + 164 2 if (PWMx->PWM_CEN_Enable == ENABLE) + 165 2 PWMB_CEN_Enable(); // ʹÄܼÆÊýÆ÷ + 166 2 else + 167 2 PWMB_CEN_Disable(); // ½ûÖ¹¼ÆÊýÆ÷ + 168 2 + 169 2 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹RAM(XRAM) */ + 170 2 return 0; + 171 2 } + 172 1 + 173 1 return 2; // ´íÎó + C51 COMPILER V9.60.0.0 PWM 04/11/2023 08:44:51 PAGE 4 + + 174 1 } + 175 + 176 /*********************************************************/ + 177 + 178 /******************* PWM Õ¼¿Õ±ÈÉèÖú¯Êý *******************/ + 179 void UpdatePwm(u8 PWM, PWMx_Duty *PWMx) + 180 { + 181 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹SFR(XSFR) */ + 182 1 + 183 1 if (PWM == PWMA) + 184 1 { + 185 2 PWMA_Duty1(PWMx->PWM1_Duty); + 186 2 PWMA_Duty2(PWMx->PWM2_Duty); + 187 2 PWMA_Duty3(PWMx->PWM3_Duty); + 188 2 PWMA_Duty4(PWMx->PWM4_Duty); + 189 2 } + 190 1 else + 191 1 { + 192 2 PWMB_Duty5(PWMx->PWM5_Duty); + 193 2 PWMB_Duty6(PWMx->PWM6_Duty); + 194 2 PWMB_Duty7(PWMx->PWM7_Duty); + 195 2 PWMB_Duty8(PWMx->PWM8_Duty); + 196 2 } + 197 1 + 198 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹RAM(XRAM) */ + 199 1 } + 200 + 201 /*********************************************************/ + 202 void PWM_config(void) + 203 { + 204 1 PWMx_InitDefine PWMx_InitStructure; + 205 1 PWMx_InitStructure.PWM5_Mode = CCMRn_PWM_MODE1; + 206 1 PWMx_InitStructure.PWM5_SetPriority = Priority_0; + 207 1 PWMx_InitStructure.PWM_Period = 1500; + 208 1 PWMx_InitStructure.PWM5_Duty = PWMB_Duty.PWM5_Duty; + 209 1 PWMx_InitStructure.PWM_DeadTime = 0; + 210 1 PWMx_InitStructure.PWM_EnoSelect = ENO5P; + 211 1 PWMx_InitStructure.PWM_PS_SW = PWM5_SW_P17; + 212 1 PWMx_InitStructure.PWM_CC5Enable = ENABLE; + 213 1 PWMx_InitStructure.PWM_MainOutEnable = ENABLE; // ?¡Â????????, ENABLE,DISABLE + 214 1 PWMx_InitStructure.PWM_CEN_Enable = ENABLE; // ?????????¡Â, ENABLE,DISABLE + 215 1 PWM_Configuration(PWMB, &PWMx_InitStructure); // ??????PWM, PWMA,PWMB + 216 1 PWMB_Duty.PWM5_Duty = 1500; + 217 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 1448 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 16 52 + 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 index d72e3cc..5441c86 100644 --- a/Listings/STARTUP.lst +++ b/Listings/STARTUP.lst @@ -1,4 +1,4 @@ -A51 MACRO ASSEMBLER STARTUP 04/10/2023 14:45:02 PAGE 1 +A51 MACRO ASSEMBLER STARTUP 04/10/2023 17:32:45 PAGE 1 MACRO ASSEMBLER A51 V8.2.7.0 @@ -65,7 +65,7 @@ LOC OBJ LINE SOURCE 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 + A51 MACRO ASSEMBLER STARTUP 04/10/2023 17:32:45 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. @@ -133,7 +133,7 @@ LOC OBJ LINE SOURCE 121 122 EXTRN CODE (?C_START) 123 PUBLIC ?C_STARTUP - A51 MACRO ASSEMBLER STARTUP 04/10/2023 14:45:02 PAGE 3 + A51 MACRO ASSEMBLER STARTUP 04/10/2023 17:32:45 PAGE 3 124 ---- 125 CSEG AT 0 @@ -201,7 +201,7 @@ LOC OBJ LINE SOURCE 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 + A51 MACRO ASSEMBLER STARTUP 04/10/2023 17:32:45 PAGE 4 190 @@ -212,7 +212,7 @@ LOC OBJ LINE SOURCE 0009 020000 F 196 LJMP ?C_START 197 198 END - A51 MACRO ASSEMBLER STARTUP 04/10/2023 14:45:02 PAGE 5 + A51 MACRO ASSEMBLER STARTUP 04/10/2023 17:32:45 PAGE 5 SYMBOL TABLE LISTING ------ ----- ------- diff --git a/Listings/kill_control.m51 b/Listings/kill_control.m51 index 22471f6..4594d69 100644 --- a/Listings/kill_control.m51 +++ b/Listings/kill_control.m51 @@ -1,9 +1,9 @@ -BL51 BANKED LINKER/LOCATER V6.22.2.0 04/10/2023 15:47:03 PAGE 1 +BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 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) +>> \timer.obj, .\Objects\PWM.obj TO .\Objects\kill_control PRINT (.\Listings\kill_control.m51) RAMSIZE (256) MEMORY MODEL: SMALL @@ -15,9 +15,11 @@ INPUT MODULES INCLUDED: .\Objects\GPIO.obj (GPIO) .\Objects\main.obj (MAIN) .\Objects\timer.obj (TIMER) + .\Objects\PWM.obj (PWM) 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?ILDPTR) D:\KEIL_V5\C51\LIB\C51S.LIB (?C?ILDOPTR) @@ -29,89 +31,102 @@ LINK MAP OF MODULE: .\Objects\kill_control (?C_STARTUP) * * * * * * * 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 + DATA 0008H 0034H UNIT _DATA_GROUP_ + DATA 003CH 0010H UNIT ?DT?PWM + DATA 004CH 0002H UNIT ?DT?TIMER + IDATA 004EH 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 0006H 0001H UNIT ?PR?EXT_INT1?EXTI + CODE 0007H 0001H UNIT ?PR?EXT_INT2?EXTI + CODE 0008H 0001H UNIT ?PR?EXT_INT3?EXTI + CODE 0009H 0001H UNIT ?PR?EXT_INT4?EXTI + CODE 000AH 0001H UNIT ?PR?TIMER1_INT?TIMER 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 000EH 0001H UNIT ?PR?TIMER2_INT?TIMER + CODE 000FH 0001H UNIT ?PR?TIMER3_INT?TIMER + CODE 0010H 0001H UNIT ?PR?TIMER4_INT?TIMER + 0011H 0002H *** GAP *** CODE 0013H 0003H ABSOLUTE - CODE 0016H 0001H UNIT ?PR?TIMER3_INT?TIMER - CODE 0017H 0001H UNIT ?PR?TIMER4_INT?TIMER - 0018H 0003H *** GAP *** + 0016H 0005H *** 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 001EH 0034H UNIT ?PR?PWM_CONFIG?PWM + 0052H 0001H *** 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 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 2 + CODE 0066H 001BH UNIT ?PR?MAIN?MAIN + 0081H 0002H *** GAP *** CODE 0083H 0003H ABSOLUTE - CODE 0086H 000DH UNIT ?PR?MAIN?MAIN - 0093H 0008H *** GAP *** + CODE 0086H 0011H UNIT ?PR?EXTI_CONFIG?EXTI + 0097H 0004H *** 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 + CODE 00A6H 04EFH UNIT ?PR?_PWM_CONFIGURATION?PWM + CODE 0595H 0331H UNIT ?PR?_TIMER_INILIZE?TIMER + CODE 08C6H 0277H UNIT ?PR?_GPIO_INILIZE?GPIO + CODE 0B3DH 0128H UNIT ?PR?_EXT_INILIZE?EXTI + CODE 0C65H 00A9H UNIT ?C?LIB_CODE + CODE 0D0EH 008CH UNIT ?C_C51STARTUP + CODE 0D9AH 0085H UNIT ?PR?_UPDATEPWM?PWM + CODE 0E1FH 0045H UNIT ?PR?TIMER0_INT?TIMER + CODE 0E64H 0022H UNIT ?PR?GPIO_CONFIG?GPIO + CODE 0E86H 001EH UNIT ?PR?TIMER_CONFIG?TIMER + CODE 0EA4H 0017H UNIT ?PR?EXT_INT0?EXTI + CODE 0EBBH 0007H UNIT ?C_INITSEG OVERLAY MAP OF MODULE: .\Objects\kill_control (?C_STARTUP) -SEGMENT DATA_GROUP - +--> CALLED SEGMENT START LENGTH ------------------------------------------------- -?C_C51STARTUP ----- ----- +SEGMENT DATA_GROUP + +--> CALLED SEGMENT START LENGTH +-------------------------------------------------- +?C_C51STARTUP ----- ----- +--> ?PR?MAIN?MAIN +--> ?C_INITSEG -?PR?MAIN?MAIN ----- ----- +?PR?MAIN?MAIN ----- ----- +--> ?PR?GPIO_CONFIG?GPIO +--> ?PR?EXTI_CONFIG?EXTI +--> ?PR?TIMER_CONFIG?TIMER + +--> ?PR?PWM_CONFIG?PWM + +--> ?PR?_UPDATEPWM?PWM -?PR?GPIO_CONFIG?GPIO 0008H 0002H +?PR?GPIO_CONFIG?GPIO 0008H 0002H +--> ?PR?_GPIO_INILIZE?GPIO -?PR?EXTI_CONFIG?EXTI 0008H 0003H +?PR?EXTI_CONFIG?EXTI 0008H 0003H +--> ?PR?_EXT_INILIZE?EXTI -?PR?TIMER_CONFIG?TIMER 0008H 0008H +?PR?TIMER_CONFIG?TIMER 0008H 0008H +--> ?PR?_TIMER_INILIZE?TIMER +?PR?PWM_CONFIG?PWM 0008H 0034H + +--> ?PR?_PWM_CONFIGURATION?PWM + SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) VALUE TYPE NAME + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 3 + + ---------------------------------- ------- MODULE ?C_STARTUP - C:0776H SEGMENT ?C_C51STARTUP - I:0011H SEGMENT ?STACK + C:0D0EH SEGMENT ?C_C51STARTUP + I:004EH SEGMENT ?STACK C:0000H PUBLIC ?C_STARTUP D:00E0H SYMBOL ACC D:00F0H SYMBOL B @@ -119,11 +134,8 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) 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 + C:0D11H SYMBOL IDATALOOP N:0000H SYMBOL PBPSTACK N:0100H SYMBOL PBPSTACKTOP N:0000H SYMBOL PDATALEN @@ -132,18 +144,18 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) N:0000H SYMBOL PPAGEENABLE D:00A0H SYMBOL PPAGE_SFR D:0081H SYMBOL SP - C:0776H SYMBOL STARTUP1 + C:0D0EH 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 + C:0D0EH LINE# 133 + C:0D10H LINE# 134 + C:0D11H LINE# 135 + C:0D12H LINE# 136 + C:0D14H LINE# 185 + C:0D17H LINE# 196 ------- ENDMOD ?C_STARTUP ------- MODULE EXTI @@ -159,14 +171,17 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) 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 + C:0EA4H PUBLIC Ext_INT0 + C:0006H PUBLIC Ext_INT1 + C:0007H PUBLIC Ext_INT2 B:0090H.0 PUBLIC P10 - C:000FH PUBLIC Ext_INT3 + C:0008H PUBLIC Ext_INT3 B:0090H.1 PUBLIC P11 - C:0010H PUBLIC Ext_INT4 + C:0009H PUBLIC Ext_INT4 B:0090H.2 PUBLIC P12 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 4 + + D:0098H PUBLIC SCON B:00B0H.2 PUBLIC P32 D:0088H PUBLIC TCON @@ -179,119 +194,119 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) 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 + C:0B3DH PUBLIC _Ext_Inilize + C:0086H 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 + C:0EA4H LINE# 24 + C:0EA6H LINE# 26 + C:0EA9H LINE# 27 + C:0EA9H LINE# 28 + C:0EADH LINE# 29 + C:0EADH LINE# 30 + C:0EAFH LINE# 31 + C:0EB1H LINE# 32 + C:0EB3H LINE# 33 + C:0EB3H LINE# 34 + C:0EB5H LINE# 36 + C:0EB5H LINE# 37 + C:0EB8H LINE# 38 + C:0EB8H LINE# 39 ------- ENDPROC EXT_INT0 ------- PROC EXT_INT1 - C:000AH LINE# 42 - C:000AH LINE# 44 + C:0006H LINE# 42 + C:0006H LINE# 44 ------- ENDPROC EXT_INT1 ------- PROC EXT_INT2 - C:000EH LINE# 47 - C:000EH LINE# 49 + C:0007H LINE# 47 + C:0007H LINE# 49 ------- ENDPROC EXT_INT2 ------- PROC EXT_INT3 - C:000FH LINE# 52 - C:000FH LINE# 54 + C:0008H LINE# 52 + C:0008H LINE# 54 ------- ENDPROC EXT_INT3 ------- PROC EXT_INT4 - C:0010H LINE# 57 - C:0010H LINE# 59 + C:0009H LINE# 57 + C:0009H 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:0B3DH LINE# 68 + C:0B3DH LINE# 69 + C:0B3DH LINE# 70 + C:0B47H LINE# 71 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 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 + C:0B4AH LINE# 73 + C:0B4DH LINE# 74 + C:0B4DH LINE# 75 + C:0B4FH LINE# 76 + C:0B59H LINE# 77 + C:0B5DH LINE# 79 + C:0B5FH LINE# 80 + C:0B6FH LINE# 81 + C:0B72H LINE# 82 + C:0B9EH LINE# 83 + C:0BA5H LINE# 84 + C:0BA9H LINE# 86 + C:0BABH LINE# 87 + C:0BAEH LINE# 88 + C:0BAEH LINE# 90 + C:0BB3H LINE# 91 + C:0BB3H LINE# 92 + C:0BB5H LINE# 93 + C:0BBFH LINE# 94 + C:0BC3H LINE# 96 + C:0BC5H LINE# 97 + C:0BD5H LINE# 98 + C:0BD8H LINE# 99 + C:0C04H LINE# 100 + C:0C0BH LINE# 101 + C:0C0FH LINE# 103 + C:0C11H LINE# 104 + C:0C14H LINE# 105 + C:0C14H LINE# 107 + C:0C19H LINE# 108 + C:0C19H LINE# 109 + C:0C23H LINE# 110 + C:0C28H LINE# 112 + C:0C2BH LINE# 113 + C:0C2EH LINE# 114 + C:0C2EH LINE# 116 + C:0C33H LINE# 117 + C:0C33H LINE# 118 + C:0C3DH LINE# 119 + C:0C42H LINE# 121 + C:0C45H LINE# 122 + C:0C48H LINE# 123 + C:0C48H LINE# 125 + C:0C4DH LINE# 126 + C:0C4DH LINE# 127 + C:0C57H LINE# 128 + C:0C5CH LINE# 130 + C:0C5FH LINE# 131 + C:0C62H LINE# 132 + C:0C62H LINE# 133 + C:0C64H 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 + C:0086H LINE# 135 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 6 + + + C:0086H LINE# 136 + C:0086H LINE# 139 + C:0089H LINE# 140 + C:008CH LINE# 141 + C:008EH LINE# 142 ------- ENDPROC EXTI_CONFIG ------- ENDMOD EXTI @@ -299,9 +314,6 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) 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 @@ -323,7 +335,7 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) D:00E8H PUBLIC P6 D:00E1H PUBLIC P7M1 D:00F8H PUBLIC P7 - C:001EH PUBLIC GPIO_config + C:0E64H PUBLIC GPIO_config D:00A8H PUBLIC IE D:00B8H PUBLIC IP D:00D8H PUBLIC CCON @@ -334,131 +346,131 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) D:0088H PUBLIC TCON D:00F0H PUBLIC B D:00E0H PUBLIC ACC - C:03D7H PUBLIC _GPIO_Inilize + C:08C6H 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:08C6H LINE# 28 + C:08C6H LINE# 29 + C:08C6H LINE# 30 + C:08D0H LINE# 31 + C:08D3H LINE# 32 + C:08E0H LINE# 33 + C:08E3H LINE# 34 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 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:08E6H LINE# 35 + C:08E6H LINE# 36 + C:08E9H LINE# 37 + C:08F4H LINE# 38 + C:08FBH LINE# 39 + C:0906H LINE# 40 + C:090EH LINE# 41 + C:0918H LINE# 42 + C:091DH LINE# 43 + C:092AH LINE# 44 + C:092AH LINE# 45 + C:092FH LINE# 46 + C:092FH LINE# 47 + C:0935H LINE# 48 + C:0940H LINE# 49 + C:0945H LINE# 50 + C:0950H LINE# 51 + C:0957H LINE# 52 + C:0961H LINE# 53 + C:0968H LINE# 54 + C:0975H LINE# 55 + C:0975H LINE# 56 + C:097AH LINE# 57 + C:097AH LINE# 58 + C:0980H LINE# 59 + C:098BH LINE# 60 + C:0990H LINE# 61 + C:099BH LINE# 62 + C:09A2H LINE# 63 + C:09ACH LINE# 64 + C:09B3H LINE# 65 + C:09C0H LINE# 66 + C:09C0H LINE# 67 + C:09C5H LINE# 68 + C:09C5H LINE# 69 + C:09CBH LINE# 70 + C:09D6H LINE# 71 + C:09DBH LINE# 72 + C:09E6H LINE# 73 + C:09EDH LINE# 74 + C:09F7H LINE# 75 + C:09FEH LINE# 76 + C:0A0BH LINE# 77 + C:0A0BH LINE# 78 + C:0A10H LINE# 79 + C:0A10H LINE# 80 + C:0A16H LINE# 81 + C:0A21H LINE# 82 + C:0A26H LINE# 83 + C:0A31H LINE# 84 + C:0A38H LINE# 85 + C:0A42H LINE# 86 + C:0A49H LINE# 87 + C:0A56H LINE# 88 + C:0A56H LINE# 89 + C:0A5BH LINE# 90 + C:0A5BH LINE# 91 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 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 + C:0A61H LINE# 92 + C:0A6CH LINE# 93 + C:0A71H LINE# 94 + C:0A7CH LINE# 95 + C:0A83H LINE# 96 + C:0A8DH LINE# 97 + C:0A94H LINE# 98 + C:0AA1H LINE# 99 + C:0AA1H LINE# 100 + C:0AA6H LINE# 101 + C:0AA6H LINE# 102 + C:0AACH LINE# 103 + C:0AB7H LINE# 104 + C:0ABCH LINE# 105 + C:0AC7H LINE# 106 + C:0ACEH LINE# 107 + C:0AD8H LINE# 108 + C:0ADFH LINE# 109 + C:0AECH LINE# 110 + C:0AECH LINE# 111 + C:0AF1H LINE# 112 + C:0AF1H LINE# 113 + C:0AF9H LINE# 114 + C:0B04H LINE# 115 + C:0B0AH LINE# 116 + C:0B15H LINE# 117 + C:0B1CH LINE# 118 + C:0B26H LINE# 119 + C:0B2DH LINE# 120 + C:0B3AH LINE# 121 + C:0B3AH LINE# 122 + C:0B3CH 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 + C:0E64H LINE# 124 + C:0E64H LINE# 125 + C:0E64H LINE# 128 + C:0E67H LINE# 129 + C:0E6AH LINE# 130 + C:0E74H LINE# 131 + C:0E77H LINE# 132 + C:0E7AH LINE# 133 + C:0E7FH LINE# 134 + C:0E81H LINE# 135 + C:0E83H LINE# 136 + C:0E85H LINE# 137 ------- ENDPROC GPIO_CONFIG ------- ENDMOD GPIO @@ -467,6 +479,9 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) D:0080H PUBLIC P0 D:0090H PUBLIC P1 D:00A0H PUBLIC P2 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 9 + + D:00B0H PUBLIC P3 D:00C0H PUBLIC P4 D:00C8H PUBLIC P5 @@ -476,25 +491,24 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) D:00A8H PUBLIC IE D:00B8H PUBLIC IP D:00D8H PUBLIC CCON - C:0086H PUBLIC main + C:0066H 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 + C:0066H LINE# 19 + C:0066H LINE# 20 + C:0066H LINE# 21 + C:0069H LINE# 22 + C:006CH LINE# 23 + C:006FH LINE# 24 + C:0072H LINE# 25 + C:0074H LINE# 26 + C:0074H LINE# 27 + C:0074H LINE# 28 + C:007FH LINE# 29 ------- ENDPROC MAIN ------- ENDMOD MAIN @@ -502,28 +516,32 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) C:0000H SYMBOL _ICE_DUMMY_ D:0080H PUBLIC P0 D:0090H PUBLIC P1 - C:089EH PUBLIC timer0_int + C:0E1FH PUBLIC timer0_int D:00A0H PUBLIC P2 - C:0011H PUBLIC timer1_int + C:000AH PUBLIC timer1_int D:00B0H PUBLIC P3 - C:0012H PUBLIC timer2_int + C:000EH PUBLIC timer2_int D:00C0H PUBLIC P4 - C:0016H PUBLIC timer3_int + C:000FH PUBLIC timer3_int D:00C8H PUBLIC P5 - C:0017H PUBLIC timer4_int + C:0010H PUBLIC timer4_int D:00E8H PUBLIC P6 D:00F8H PUBLIC P7 D:00A8H PUBLIC IE D:00B8H PUBLIC IP D:00D8H PUBLIC CCON + B:0090H.2 PUBLIC P12 D:0098H PUBLIC SCON D:0089H PUBLIC TMOD D:0088H PUBLIC TCON - C:00A6H PUBLIC _Timer_Inilize - D:0010H PUBLIC KILL_time + C:0595H PUBLIC _Timer_Inilize + D:004CH PUBLIC KILL_time D:00AFH PUBLIC IE2 D:00F0H PUBLIC B D:008EH PUBLIC AUXR + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 10 + + D:00E0H PUBLIC ACC B:00A8H.1 PUBLIC ET0 B:00A8H.3 PUBLIC ET1 @@ -539,169 +557,436 @@ SYMBOL TABLE OF MODULE: .\Objects\kill_control (?C_STARTUP) 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 + C:0E86H PUBLIC Timer_config D:00B7H PUBLIC IPH D:008FH PUBLIC INT_CLKO D:00D0H PUBLIC PSW + D:004DH PUBLIC pwm_direction ------- 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 + C:0E1FH LINE# 26 + C:0E23H LINE# 28 + C:0E27H LINE# 29 + C:0E29H LINE# 30 + C:0E2CH LINE# 31 + C:0E2CH LINE# 32 + C:0E30H LINE# 33 + C:0E30H LINE# 34 + C:0E38H LINE# 35 + C:0E41H LINE# 36 + C:0E44H LINE# 37 + C:0E46H LINE# 39 + C:0E46H LINE# 40 + C:0E4EH LINE# 41 + C:0E54H LINE# 42 + C:0E57H LINE# 43 + C:0E57H LINE# 44 + C:0E59H LINE# 46 + C:0E59H LINE# 47 + C:0E5FH LINE# 48 + C:0E5FH LINE# 49 ------- ENDPROC TIMER0_INT ------- PROC TIMER1_INT - C:0011H LINE# 31 - C:0011H LINE# 34 + C:000AH LINE# 52 + C:000AH LINE# 54 ------- ENDPROC TIMER1_INT ------- PROC TIMER2_INT - C:0012H LINE# 37 - C:0012H LINE# 40 + C:000EH LINE# 57 + C:000EH LINE# 59 ------- ENDPROC TIMER2_INT ------- PROC TIMER3_INT - C:0016H LINE# 43 - C:0016H LINE# 46 + C:000FH LINE# 62 + C:000FH LINE# 64 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 11 + + ------- ENDPROC TIMER3_INT ------- PROC TIMER4_INT - C:0017H LINE# 49 - C:0017H LINE# 52 + C:0010H LINE# 67 + C:0010H LINE# 69 ------- 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:0595H LINE# 78 + C:0597H LINE# 79 + C:0597H LINE# 80 + C:05A1H LINE# 81 + C:05A4H LINE# 83 + C:05AAH LINE# 84 + C:05AAH LINE# 85 + C:05ACH LINE# 86 + C:05B6H LINE# 87 + C:05BAH LINE# 89 + C:05BCH LINE# 90 + C:05CCH LINE# 91 + C:05CFH LINE# 92 + C:05FBH LINE# 94 + C:0608H LINE# 95 + C:060BH LINE# 96 + C:0612H LINE# 97 + C:061FH LINE# 98 + C:0622H LINE# 99 + C:0626H LINE# 100 + C:0629H LINE# 101 + C:062FH LINE# 102 + C:0634H LINE# 104 + C:0637H LINE# 105 + C:0641H LINE# 106 + C:0646H LINE# 108 + C:0649H LINE# 110 + C:065BH LINE# 111 + C:0665H LINE# 112 + C:0667H LINE# 113 + C:066AH LINE# 114 + C:066AH LINE# 116 + C:0672H LINE# 117 + C:0672H LINE# 118 + C:0674H LINE# 119 + C:067EH LINE# 120 + C:0682H LINE# 122 + C:0684H LINE# 123 + C:0694H LINE# 124 + C:0697H LINE# 125 + C:06C3H LINE# 126 + C:06D0H LINE# 127 + C:06D3H LINE# 128 + C:06DFH LINE# 129 + C:06ECH LINE# 130 + C:06EFH LINE# 131 + C:06F3H LINE# 132 + C:06F6H LINE# 133 + C:06FCH LINE# 134 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 12 - 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:0701H LINE# 136 + C:0704H LINE# 137 + C:070EH LINE# 138 + C:0713H LINE# 140 + C:0716H LINE# 142 + C:0728H LINE# 143 + C:0732H LINE# 144 + C:0734H LINE# 145 + C:0737H LINE# 146 + C:0737H LINE# 148 + C:073CH LINE# 149 + C:073CH LINE# 150 + C:073FH LINE# 151 + C:0749H LINE# 152 + C:074EH LINE# 154 + C:0751H LINE# 155 + C:0761H LINE# 156 + C:0764H LINE# 157 + C:076CH LINE# 158 + C:076FH LINE# 159 + C:0773H LINE# 160 + C:0776H LINE# 161 + C:077CH LINE# 162 + C:0781H LINE# 164 + C:0784H LINE# 165 + C:078EH LINE# 166 + C:0793H LINE# 168 + C:0796H LINE# 170 + C:07A8H LINE# 171 + C:07B2H LINE# 172 + C:07B5H LINE# 173 + C:07B8H LINE# 174 + C:07B8H LINE# 176 + C:07BDH LINE# 177 + C:07BDH LINE# 178 + C:07C0H LINE# 179 + C:07CAH LINE# 180 + C:07CFH LINE# 182 + C:07D2H LINE# 183 + C:07E2H LINE# 184 + C:07E5H LINE# 185 + C:07EDH LINE# 186 + C:07F0H LINE# 187 + C:07F4H LINE# 188 + C:07F7H LINE# 189 + C:07FDH LINE# 190 + C:0802H LINE# 192 + C:0805H LINE# 193 + C:080FH LINE# 194 + C:0814H LINE# 196 + C:0817H LINE# 198 + C:0829H LINE# 199 + C:0833H LINE# 200 + C:0836H LINE# 201 + C:0839H LINE# 202 + C:0839H LINE# 204 + C:0841H LINE# 205 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 13 - 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 + C:0841H LINE# 206 + C:0844H LINE# 207 + C:084EH LINE# 208 + C:0853H LINE# 210 + C:0856H LINE# 211 + C:0868H LINE# 212 + C:086BH LINE# 213 + C:0871H LINE# 214 + C:0874H LINE# 215 + C:087CH LINE# 216 + C:087FH LINE# 217 + C:0889H LINE# 218 + C:088EH LINE# 220 + C:0891H LINE# 221 + C:089BH LINE# 222 + C:08A0H LINE# 224 + C:08A3H LINE# 226 + C:08B3H LINE# 227 + C:08BDH LINE# 228 + C:08C0H LINE# 229 + C:08C3H LINE# 230 + C:08C3H LINE# 231 + C:08C5H LINE# 232 ------- 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 + C:0E86H LINE# 234 + C:0E86H LINE# 235 + C:0E86H LINE# 237 + C:0E89H LINE# 238 + C:0E8BH LINE# 239 + C:0E8EH LINE# 240 + C:0E90H LINE# 241 + C:0E92H LINE# 242 + C:0E98H LINE# 243 + C:0E9BH LINE# 244 ------- ENDPROC TIMER_CONFIG ------- ENDMOD TIMER + ------- MODULE PWM + 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:00BAH PUBLIC P_SW2 + D:00A8H PUBLIC IE + D:00B6H PUBLIC IP2H + D:00EEH PUBLIC IP3H + D:00B8H PUBLIC IP + C:0D9AH PUBLIC _UpdatePwm + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 14 + + + D:00D8H PUBLIC CCON + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + C:00A6H PUBLIC _PWM_Configuration + D:003CH PUBLIC PWMB_Duty + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + D:00B5H PUBLIC IP2 + D:00DFH PUBLIC IP3 + C:001EH PUBLIC PWM_config + D:00D0H PUBLIC PSW + ------- PROC _PWM_CONFIGURATION + D:0007H SYMBOL PWM + D:0001H SYMBOL PWMx + C:00A6H LINE# 15 + C:00A6H LINE# 16 + C:00A6H LINE# 17 + C:00AEH LINE# 18 + C:00AEH LINE# 19 + C:00B1H LINE# 21 + C:00C3H LINE# 22 + C:00F0H LINE# 23 + C:0102H LINE# 24 + C:012FH LINE# 25 + C:0141H LINE# 26 + C:016EH LINE# 27 + C:0180H LINE# 28 + C:01ADH LINE# 30 + C:01B2H LINE# 31 + C:01B4H LINE# 32 + C:01C0H LINE# 33 + C:01CFH LINE# 34 + C:01DEH LINE# 35 + C:01EDH LINE# 36 + C:01FAH LINE# 37 + C:0200H LINE# 39 + C:0204H LINE# 40 + C:0211H LINE# 41 + C:0217H LINE# 43 + C:021BH LINE# 45 + C:0228H LINE# 46 + C:022EH LINE# 48 + C:0232H LINE# 49 + C:023FH LINE# 50 + C:0245H LINE# 52 + C:0249H LINE# 53 + C:0256H LINE# 54 + C:025CH LINE# 56 + C:0260H LINE# 57 + C:026DH LINE# 58 + C:0273H LINE# 60 + C:0277H LINE# 61 + C:0284H LINE# 62 + C:028AH LINE# 64 + C:028EH LINE# 65 + C:029BH LINE# 66 + C:02A1H LINE# 68 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 15 + + + C:02A5H LINE# 69 + C:02B2H LINE# 70 + C:02B8H LINE# 72 + C:02BCH LINE# 73 + C:02C9H LINE# 74 + C:02CFH LINE# 76 + C:02D3H LINE# 78 + C:02E3H LINE# 79 + C:02F3H LINE# 80 + C:0303H LINE# 81 + C:0313H LINE# 82 + C:0323H LINE# 84 + C:033FH LINE# 85 + C:0349H LINE# 86 + C:0353H LINE# 87 + C:035DH LINE# 89 + C:036AH LINE# 90 + C:0370H LINE# 92 + C:0374H LINE# 93 + C:0381H LINE# 94 + C:0387H LINE# 96 + C:038BH LINE# 97 + C:0398H LINE# 98 + C:039FH LINE# 100 + C:03A3H LINE# 102 + C:03A3H LINE# 103 + C:03A6H LINE# 104 + C:03A6H LINE# 106 + C:03AEH LINE# 107 + C:03AEH LINE# 108 + C:03B1H LINE# 110 + C:03C3H LINE# 111 + C:03F0H LINE# 113 + C:03F5H LINE# 114 + C:03F7H LINE# 115 + C:0406H LINE# 116 + C:0415H LINE# 117 + C:0424H LINE# 118 + C:0433H LINE# 119 + C:0440H LINE# 120 + C:0446H LINE# 122 + C:044AH LINE# 123 + C:0457H LINE# 124 + C:045DH LINE# 126 + C:0461H LINE# 128 + C:046EH LINE# 129 + C:0474H LINE# 131 + C:0478H LINE# 132 + C:0485H LINE# 133 + C:048BH LINE# 135 + C:048FH LINE# 136 + C:049CH LINE# 137 + C:04A2H LINE# 139 + C:04A6H LINE# 140 + C:04B3H LINE# 141 + C:04B9H LINE# 143 + C:04BDH LINE# 145 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 16 + + + C:04CDH LINE# 146 + C:04DDH LINE# 147 + C:04EDH LINE# 148 + C:04FDH LINE# 149 + C:050DH LINE# 151 + C:0529H LINE# 152 + C:0533H LINE# 153 + C:053DH LINE# 154 + C:0547H LINE# 156 + C:0554H LINE# 157 + C:055AH LINE# 159 + C:055EH LINE# 160 + C:056BH LINE# 161 + C:0571H LINE# 163 + C:0575H LINE# 164 + C:0582H LINE# 165 + C:0588H LINE# 167 + C:058CH LINE# 169 + C:058FH LINE# 170 + C:0592H LINE# 171 + C:0592H LINE# 173 + C:0594H LINE# 174 + ------- ENDPROC _PWM_CONFIGURATION + ------- PROC _UPDATEPWM + D:0007H SYMBOL PWM + D:0001H SYMBOL PWMx + C:0D9AH LINE# 179 + C:0D9AH LINE# 180 + C:0D9AH LINE# 181 + C:0D9DH LINE# 183 + C:0DA2H LINE# 184 + C:0DA2H LINE# 185 + C:0DAFH LINE# 186 + C:0DBFH LINE# 187 + C:0DCFH LINE# 188 + C:0DD9H LINE# 189 + C:0DDBH LINE# 191 + C:0DDBH LINE# 192 + C:0DEBH LINE# 193 + C:0DFBH LINE# 194 + C:0E0BH LINE# 195 + C:0E1BH LINE# 196 + C:0E1BH LINE# 198 + C:0E1EH LINE# 199 + ------- ENDPROC _UPDATEPWM + ------- PROC PWM_CONFIG + ------- DO + D:0008H SYMBOL PWMx_InitStructure + ------- ENDDO + C:001EH LINE# 202 + C:001EH LINE# 203 + C:001EH LINE# 205 + C:0021H LINE# 206 + C:0024H LINE# 207 + C:002AH LINE# 208 + C:0030H LINE# 209 + C:0032H LINE# 210 + BL51 BANKED LINKER/LOCATER V6.22.2.0 04/11/2023 08:44:51 PAGE 17 + + + C:0035H LINE# 211 + C:0038H LINE# 212 + C:003BH LINE# 213 + C:003EH LINE# 214 + C:0041H LINE# 215 + C:004BH LINE# 216 + C:0051H LINE# 217 + ------- ENDPROC PWM_CONFIG + ------- ENDMOD PWM + ------- MODULE ?C?CLDPTR - C:0802H PUBLIC ?C?CLDPTR + C:0C65H PUBLIC ?C?CLDPTR ------- ENDMOD ?C?CLDPTR ------- MODULE ?C?CLDOPTR - C:081BH PUBLIC ?C?CLDOPTR + C:0C7EH PUBLIC ?C?CLDOPTR ------- ENDMOD ?C?CLDOPTR + ------- MODULE ?C?ILDPTR + C:0CABH PUBLIC ?C?ILDPTR + ------- ENDMOD ?C?ILDPTR + ------- MODULE ?C?ILDOPTR - C:0848H PUBLIC ?C?ILDOPTR + C:0CD6H PUBLIC ?C?ILDOPTR ------- ENDMOD ?C?ILDOPTR -Program Size: data=18.0 xdata=0 code=2183 +Program Size: data=79.0 xdata=0 code=3749 LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/main.lst b/Listings/main.lst index 56be677..6820c8b 100644 --- a/Listings/main.lst +++ b/Listings/main.lst @@ -1,4 +1,4 @@ -C51 COMPILER V9.60.0.0 MAIN 04/10/2023 15:47:03 PAGE 1 +C51 COMPILER V9.60.0.0 MAIN 04/10/2023 17:45:23 PAGE 1 C51 COMPILER V9.60.0.0, COMPILATION OF MODULE MAIN @@ -24,22 +24,24 @@ line level source 14 #include "GPIO.h" 15 #include "Exti.h" 16 #include "timer.h" - 17 + 17 #include "PWM.h" 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 } + 24 1 PWM_config(); + 25 1 EA = 1; + 26 1 while (1) + 27 1 { + 28 2 UpdatePwm(PWMB, &PWMB_Duty); + 29 2 } + 30 1 } MODULE INFORMATION: STATIC OVERLAYABLE - CODE SIZE = 13 ---- + CODE SIZE = 27 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- diff --git a/Listings/timer.lst b/Listings/timer.lst index 04fb58e..3921754 100644 --- a/Listings/timer.lst +++ b/Listings/timer.lst @@ -1,4 +1,4 @@ -C51 COMPILER V9.60.0.0 TIMER 04/10/2023 15:47:03 PAGE 1 +C51 COMPILER V9.60.0.0 TIMER 04/11/2023 08:44:51 PAGE 1 C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TIMER @@ -26,182 +26,253 @@ line level source 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 + 19 #include "timer.h" + 20 #include "PWM.h" + 21 #include "GPIO.h" + 22 u8 KILL_time = 0; + 23 u8 pwm_direction = 0; + 24 + 25 /********************* Timer0ÖжϺ¯Êý************************/ + 26 void timer0_int(void) interrupt TIMER0_VECTOR + 27 { + 28 1 if (KILL_time) + 29 1 KILL_time--; + 30 1 if (!power3_gpio) + 31 1 { + 32 2 if (pwm_direction) + 33 2 { + 34 3 PWMB_Duty.PWM5_Duty++; + 35 3 if (PWMB_Duty.PWM5_Duty >= 1500) + 36 3 pwm_direction = 0; + 37 3 } + 38 2 else + 39 2 { + 40 3 PWMB_Duty.PWM5_Duty--; + 41 3 if (!PWMB_Duty.PWM5_Duty) + 42 3 pwm_direction = 1; + 43 3 } + 44 2 } + 45 1 else + 46 1 { + 47 2 PWMB_Duty.PWM5_Duty = 1500; + 48 2 } + 49 1 } + 50 + 51 /********************* Timer1ÖжϺ¯Êý************************/ + 52 void timer1_int(void) interrupt TIMER1_VECTOR + 53 { + 54 1 } + C51 COMPILER V9.60.0.0 TIMER 04/11/2023 08:44:51 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) + 55 + 56 /********************* Timer2ÖжϺ¯Êý************************/ + 57 void timer2_int(void) interrupt TIMER2_VECTOR + 58 { + 59 1 } + 60 + 61 /********************* Timer3ÖжϺ¯Êý************************/ + 62 void timer3_int(void) interrupt TIMER3_VECTOR 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 + 64 1 } + 65 + 66 /********************* Timer4ÖжϺ¯Êý************************/ + 67 void timer4_int(void) interrupt TIMER4_VECTOR + 68 { + 69 1 } + 70 + 71 //======================================================================== + 72 // º¯Êý: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) + 73 // ÃèÊö: ¶¨Ê±Æ÷³õʼ»¯³ÌÐò. + 74 // ²ÎÊý: TIMx: ½á¹¹²ÎÊý,Çë²Î¿¼timer.hÀïµÄ¶¨Òå. + 75 // ·µ»Ø: ³É¹¦·µ»Ø0, ¿Õ²Ù×÷·µ»Ø1,´íÎó·µ»Ø2. + 76 // °æ±¾: V1.0, 2012-10-22 + 77 //======================================================================== + 78 u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) + 79 { + 80 1 if (TIM > Timer4) + 81 1 return 1; // ¿Õ²Ù×÷ + 82 1 + 83 1 if (TIM == Timer0) + 84 1 { + 85 2 Timer0_Stop(); // Í£Ö¹¼ÆÊý + 86 2 if (TIMx->TIM_Interrupt == ENABLE) + 87 2 Timer0_InterruptEnable(); // ÔÊÐíÖÐ¶Ï + 88 2 else + 89 2 Timer0_InterruptDisable(); // ½ûÖ¹ÖÐ¶Ï + 90 2 if (TIMx->TIM_Priority > Priority_3) + 91 2 return 2; // ´íÎó + 92 2 Timer0_Priority(TIMx->TIM_Priority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Pr + -iority_3 + 93 2 + 94 2 if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) + 95 2 return 2; // ´íÎó + 96 2 TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; // ¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°, 1: 16λ¶¨Ê±/¼ÆÊý, 2: 8λ×Ô¶¯Ö + -Ø×°, 3: ²»¿ÉÆÁ±Î16λ×Ô¶¯ÖØ×° + 97 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 98 2 Timer0_12T(); // 12T + 99 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 100 2 Timer0_1T(); // 1T + 101 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 102 2 Timer0_AsCounter(); // ¶ÔÍâ¼ÆÊý»ò·ÖƵ + 103 2 else + 104 2 Timer0_AsTimer(); // ¶¨Ê± + 105 2 if (TIMx->TIM_ClkOut == ENABLE) + 106 2 Timer0_CLKO_Enable(); // Êä³öʱÖÓ + 107 2 else + 108 2 Timer0_CLKO_Disable(); // ²»Êä³öʱÖÓ + 109 2 + 110 2 T0_Load(TIMx->TIM_Value); + 111 2 if (TIMx->TIM_Run == ENABLE) + 112 2 Timer0_Run(); // ¿ªÊ¼ÔËÐÐ + 113 2 return 0; // ³É¹¦ + 114 2 } + C51 COMPILER V9.60.0.0 TIMER 04/11/2023 08:44:51 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 + 115 1 + 116 1 if (TIM == Timer1) + 117 1 { + 118 2 Timer1_Stop(); // Í£Ö¹¼ÆÊý + 119 2 if (TIMx->TIM_Interrupt == ENABLE) + 120 2 Timer1_InterruptEnable(); // ÔÊÐíÖÐ¶Ï + 121 2 else + 122 2 Timer1_InterruptDisable(); // ½ûÖ¹ÖÐ¶Ï + 123 2 if (TIMx->TIM_Priority > Priority_3) + 124 2 return 2; // ´íÎó + 125 2 Timer1_Priority(TIMx->TIM_Priority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Pr + -iority_3 + 126 2 if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) + 127 2 return 2; // ´íÎó + 128 2 TMOD = (TMOD & ~0x30) | (TIMx->TIM_Mode << 4); // ¹¤×÷ģʽ,0: 16λ×Ô¶¯ÖØ×°, 1: 16λ¶¨Ê±/¼ÆÊý, 2: 8 + -λ×Ô¶¯ÖØ×°, 3: Í£Ö¹¹¤×÷ + 129 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 130 2 Timer1_12T(); // 12T + 131 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 132 2 Timer1_1T(); // 1T + 133 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 134 2 Timer1_AsCounter(); // ¶ÔÍâ¼ÆÊý»ò·ÖƵ + 135 2 else + 136 2 Timer1_AsTimer(); // ¶¨Ê± + 137 2 if (TIMx->TIM_ClkOut == ENABLE) + 138 2 Timer1_CLKO_Enable(); // Êä³öʱÖÓ + 139 2 else + 140 2 Timer1_CLKO_Disable(); // ²»Êä³öʱÖÓ + 141 2 + 142 2 T1_Load(TIMx->TIM_Value); + 143 2 if (TIMx->TIM_Run == ENABLE) + 144 2 Timer1_Run(); // ¿ªÊ¼ÔËÐÐ + 145 2 return 0; // ³É¹¦ + 146 2 } + 147 1 + 148 1 if (TIM == Timer2) // Timer2,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + 149 1 { + 150 2 Timer2_Stop(); // Í£Ö¹¼ÆÊý + 151 2 if (TIMx->TIM_Interrupt == ENABLE) + 152 2 Timer2_InterruptEnable(); // ÔÊÐíÖÐ¶Ï + 153 2 else + 154 2 Timer2_InterruptDisable(); // ½ûÖ¹ÖÐ¶Ï + 155 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + 156 2 return 2; + 157 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 158 2 Timer2_12T(); // 12T + 159 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 160 2 Timer2_1T(); // 1T + 161 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 162 2 Timer2_AsCounter(); // ¶ÔÍâ¼ÆÊý»ò·ÖƵ + 163 2 else + 164 2 Timer2_AsTimer(); // ¶¨Ê± + 165 2 if (TIMx->TIM_ClkOut == ENABLE) + 166 2 Timer2_CLKO_Enable(); // Êä³öʱÖÓ + 167 2 else + 168 2 Timer2_CLKO_Disable(); // ²»Êä³öʱÖÓ + 169 2 + 170 2 T2_Load(TIMx->TIM_Value); + 171 2 if (TIMx->TIM_Run == ENABLE) + 172 2 Timer2_Run(); // ¿ªÊ¼ÔËÐÐ + 173 2 return 0; // ³É¹¦ + 174 2 } + C51 COMPILER V9.60.0.0 TIMER 04/11/2023 08:44:51 PAGE 4 - 175 1 Timer_Inilize(Timer0,&TIM_InitStructure); - 176 1 } + 175 1 + 176 1 if (TIM == Timer3) // Timer3,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + 177 1 { + 178 2 Timer3_Stop(); // Í£Ö¹¼ÆÊý + 179 2 if (TIMx->TIM_Interrupt == ENABLE) + 180 2 Timer3_InterruptEnable(); // ÔÊÐíÖÐ¶Ï + 181 2 else + 182 2 Timer3_InterruptDisable(); // ½ûÖ¹ÖÐ¶Ï + 183 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + 184 2 return 2; + 185 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 186 2 Timer3_12T(); // 12T + 187 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 188 2 Timer3_1T(); // 1T + 189 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 190 2 Timer3_AsCounter(); // ¶ÔÍâ¼ÆÊý»ò·ÖƵ + 191 2 else + 192 2 Timer3_AsTimer(); // ¶¨Ê± + 193 2 if (TIMx->TIM_ClkOut == ENABLE) + 194 2 Timer3_CLKO_Enable(); // Êä³öʱÖÓ + 195 2 else + 196 2 Timer3_CLKO_Disable(); // ²»Êä³öʱÖÓ + 197 2 + 198 2 T3_Load(TIMx->TIM_Value); + 199 2 if (TIMx->TIM_Run == ENABLE) + 200 2 Timer3_Run(); // ¿ªÊ¼ÔËÐÐ + 201 2 return 0; // ³É¹¦ + 202 2 } + 203 1 + 204 1 if (TIM == Timer4) // Timer3,¹Ì¶¨Îª16λ×Ô¶¯ÖØ×°, ÖжÏÎÞÓÅÏȼ¶ + 205 1 { + 206 2 Timer4_Stop(); // Í£Ö¹¼ÆÊý + 207 2 if (TIMx->TIM_Interrupt == ENABLE) + 208 2 Timer4_InterruptEnable(); // ÔÊÐíÖÐ¶Ï + 209 2 else + 210 2 Timer4_InterruptDisable(); // ½ûÖ¹ÖÐ¶Ï + 211 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + 212 2 return 2; + 213 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 214 2 Timer4_12T(); // 12T + 215 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 216 2 Timer4_1T(); // 1T + 217 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 218 2 Timer4_AsCounter(); // ¶ÔÍâ¼ÆÊý»ò·ÖƵ + 219 2 else + 220 2 Timer4_AsTimer(); // ¶¨Ê± + 221 2 if (TIMx->TIM_ClkOut == ENABLE) + 222 2 Timer4_CLKO_Enable(); // Êä³öʱÖÓ + 223 2 else + 224 2 Timer4_CLKO_Disable(); // ²»Êä³öʱÖÓ + 225 2 + 226 2 T4_Load(TIMx->TIM_Value); + 227 2 if (TIMx->TIM_Run == ENABLE) + 228 2 Timer4_Run(); // ¿ªÊ¼ÔËÐÐ + 229 2 return 0; // ³É¹¦ + 230 2 } + 231 1 return 2; // ´íÎó + 232 1 } + 233 /************************ ?¡§?¡À?¡Â???? ****************************/ + 234 void Timer_config(void) + 235 { + 236 1 TIM_InitTypeDef TIM_InitStructure; + C51 COMPILER V9.60.0.0 TIMER 04/11/2023 08:44:51 PAGE 5 + + 237 1 TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; + 238 1 TIM_InitStructure.TIM_Priority = Priority_0; + 239 1 TIM_InitStructure.TIM_Interrupt = ENABLE; + 240 1 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; + 241 1 TIM_InitStructure.TIM_ClkOut = DISABLE; + 242 1 TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 1000UL); + 243 1 TIM_InitStructure.TIM_Run = ENABLE; + 244 1 Timer_Inilize(Timer0, &TIM_InitStructure); + 245 1 } MODULE INFORMATION: STATIC OVERLAYABLE - CODE SIZE = 862 ---- + CODE SIZE = 920 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- - DATA SIZE = 1 8 + DATA SIZE = 2 8 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. diff --git a/Objects/Exti.obj b/Objects/Exti.obj index 7572ce6e49c576f7586b57086470be748d9f5d8b..a944fe20b4de0f74a10048f9d10f39e403d3394b 100644 GIT binary patch delta 283 zcmZ2=i|yVmwh2?1mfV^+?J=;-7kJItm>3q{0x|{pEEped{>*rUi}B>-9XxuB zGLxV4JZ5sZF!>CxH5+H5Jy6+XUOpSf6`Q^I94sc!auX0VWPpJGK)}er#$YmewcBmR zjhoxuPxEkbGB5&VnR8N8CO0NZ@v|}LBB>7D92jy+p4S9P$ZxYoi9#H&0g{ma=Fm&= z{Aj8UK77E-i)^#s=5_DmG-QpCG=d$2#OK(qDZ%Iv$QsSYz)-n8FO%`VChKZe28M?1 KMUxqKNCE)Ddtpid delta 229 zcmcb2i*3~{wh2?1zVDkj?J-Ns7UPu37kJItm>9P21TqErEExMYe`Y+w#du=!4jw&5 z*~!m&9y7IUnS6%Vn(bktJy6+XUOpSft((3094wgh879}b$uSyFUhQ_9am(g*_tQL^ z+d@vt^BOZiz<(g{-yBn-5XY;JBowf@^HMxNnyRl4AMj4Dxx}~m@%vZ}Swke{j0|iH n$R=`akCk9_2xN_7V_>M-z9^INzb5M{RtAQ~?aL-J?vMlk7#>x^ diff --git a/Objects/GPIO.__i b/Objects/GPIO.__i deleted file mode 100644 index 13dec64..0000000 --- a/Objects/GPIO.__i +++ /dev/null @@ -1 +0,0 @@ -"mycode\GPIO.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\GPIO.lst) TABS (2) OBJECT(.\Objects\GPIO.obj) \ No newline at end of file diff --git a/Objects/GPIO.obj b/Objects/GPIO.obj index d203d7762fc30681833995f2e1dc44eb57df3237..5cb04f5c7f7997186aa24c6dceb1127f509280e1 100644 GIT binary patch delta 287 zcmcb7o2~s0+k`1hd#_KNrp@GVVdCK}jIo<57@4>k7f-I{(PMO)yoyI!%;AD@3KIjL zUQBLfW?piPdw{3EUIzQ-+dKv4lcQY(1PvJ=;6D&BGB7ciOjnR)lxFPR+~LB@%f-pS z2$W{dNllr4F_Te>pNT;iNqywzDS>wKj3$#W7p!J9*<4>JD#d6zd1|-1XdoL<7f^32 zR5ghIe)Gj{1GmW@Uj;S`UeaM=oW0rZiirSFU-1)d7RI8@^IxpwVKm(A`Bj^VapUIF z@3T||jgTyZJ5HN1V!MwlV@b{ADcu6oFU(}rVC0+rb0(uaD<2aB!~X5EvlzDt0|5A+ BS&;w$ delta 246 zcmZp_!*=;L+k`1h-}gk7fr6_(PMO;yoyI!tYwRF3KIjL zUQBLfW?piPdw{3EUdH{+w|NT8ne-VZ+q%dx8c)t~k!GB*xxHnaL diff --git a/Objects/PWM.__i b/Objects/PWM.__i new file mode 100644 index 0000000..471f250 --- /dev/null +++ b/Objects/PWM.__i @@ -0,0 +1 @@ +"mycode\PWM.C" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\PWM.lst) TABS (2) OBJECT(.\Objects\PWM.obj) \ No newline at end of file diff --git a/Objects/PWM.obj b/Objects/PWM.obj new file mode 100644 index 0000000000000000000000000000000000000000..9617844a9e2b87f79b5b125cf1d16297e5466664 GIT binary patch literal 119784 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 literal 0 HcmV?d00001 diff --git a/Objects/STARTUP.obj b/Objects/STARTUP.obj index e0c8321c8334061d9985582aebf855981d0a243f..c4d796ab918cc89cf5c3d8ef0ad5b1b4705075a5 100644 GIT binary patch delta 18 acmdnYwwY~02Gic_6SK4#7j2w2mk9t!vm0nn! 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 delta 11339 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: Build target 'Target 1' -compiling Exti.c... -compiling GPIO.c... -compiling main.c... compiling timer.c... +compiling PWM.C... linking... -Program Size: data=18.0 xdata=0 code=2183 +Program Size: data=79.0 xdata=0 code=3749 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 index 7e28a31..4496c57 100644 --- a/Objects/kill_control.hex +++ b/Objects/kill_control.hex @@ -1,163 +1,264 @@ -:030000000207767E -:0C077600787FE4F6D8FD7581100207BD05 -:0300030002006692 -:10006600C0E030B20CE510700BB290B291B2928043 -:0700760003751032D0E032E7 -:0300130002000ADE +:03000000020D0EE0 +:0C0D0E00787FE4F6D8FD75814D020D558C +:03000300020EA446 +:100EA400C0E030B20CE54C700BB290B291B29280BB +:070EB40003754C32D0E0325F +:03001300020006E2 +:0100060032C7 +:03005300020007A1 +:0100070032C6 +:03005B0002000898 +:0100080032C5 +:030083000200096F +:0100090032C4 +:100B3D00EFD394047480948040037F0122EF7061A1 +:100B4D00C289900002120C7E64017004D2A880024A +:100B5D00C2A8900001120C7EFED394037480948081 +:100B6D0040037F0222EEFD7C00700553B7FEC2B834 +:100B7D00ED64014C700553B7FED2B8ED64024C70B4 +:100B8D000543B701C2B8ED64034C700543B701D2FC +:100B9D00B8120C6564017004D2888002C2887F008F +:100BAD0022EF64017061C28B900002120C7E640111 +:100BBD007004D2AA8002C2AA900001120C7EFED34C +:100BCD0094037480948040037F0222EEFD7C0070BC +:100BDD000553B7FBC2BAED64014C700553B7FBD298 +:100BED00BAED64024C700543B704C2BAED64034C10 +:100BFD00700543B704D2BA120C6564017004D28A31 +:100C0D008002C28A7F0022EF6402701590000212EA +:100C1D000C7E64017005438F108003538FEF7F00AE +:100C2D0022EF64037015900002120C7E64017005B2 +:100C3D00438F208003538FDF7F0022EF64047015F4 +:100C4D00900002120C7E64017005438F40800353A7 +:080C5D008FBF7F00227F0222FD +:10008600750A01E4F508F509FB7A007908FF020B09 +:010096003D2C +:1008C600EFD394077480948040037F0122120C6555 +:1008D600FED394037480948040037F0222EF704419 +:1008E600EE700B900001120C7EF452935294120C8F +:1008F600656401700B900001120C7E4293F45294D1 +:10090600120C65FE6402700A900001120C7E42937E +:100916004294EE6403700D900001120C7EFEF452B8 +:1009260093EE4294EF64017046120C65FE700B90D4 +:100936000001120C7EF452915292EE6401700B90FB +:100946000001120C7E4291F45292120C6564027000 +:100956000A900001120C7E42914292120C656403C9 +:10096600700D900001120C7EFEF45291EE4292EF51 +:1009760064027046120C65FE700B900001120C7E2C +:10098600F452955296EE6401700B900001120C7EA3 +:100996004295F45296120C656402700A9000011298 +:1009A6000C7E42954296120C656403700D90000110 +:1009B600120C7EFEF45295EE4296EF6403704612D8 +:1009C6000C65FE700B900001120C7EF452B152B20F +:1009D600EE6401700B900001120C7E42B1F452B22B +:1009E600120C656402700A900001120C7E42B1423C +:1009F600B2120C656403700D900001120C7EFEF4B9 +:100A060052B1EE42B2EF64047046120C65FE700BF2 +:100A1600900001120C7EF452B352B4EE6401700BD6 +:100A2600900001120C7E42B3F452B4120C656402BB +:100A3600700A900001120C7E42B342B4120C656437 +:100A460003700D900001120C7EFEF452B3EE42B418 +:100A5600EF64057046120C65FE700B900001120CD7 +:100A66007EF452C952CAEE6401700B900001120C5A +:100A76007E42C9F452CA120C656402700A900001E3 +:100A8600120C7E42C942CA120C656403700D9000B6 +:100A960001120C7EFEF452C9EE42CAEF640670469D +:100AA600120C65FE700B900001120C7EF452CB52B4 +:100AB600CCEE6401700B900001120C7E42CBF45216 +:100AC600CC120C656402700A900001120C7E42CBB7 +:100AD60042CC120C656403700D900001120C7EFE70 +:100AE600F452CBEE42CCEF64077049120C65FF7EE0 +:100AF60000700B900001120C7EF452E152E2EF649A +:100B0600014E700B900001120C7E42E1F452E2128B +:100B16000C656402700A900001120C7E42E142E20A +:100B2600120C656403700D900001120C7EFFF452E6 +:070B3600E1EF42E27F002223 +:100E6400750904E4F508FB7A0079087F031208C6C3 +:100E74007509077508037F011208C6C290C291C2A2 +:010E840092DB +:010E8500224A +:10006600120E64120086120E8612001ED2AF7B009C +:0B0076007A00793C7F02120D9A80F3A3 +:060EBB00014C00014D0096 +:03000B00020E1FC3 +:100E1F00C0E0C0D0E54C6002154C20922DE54D602E +:100E2F00160545E54570020544C394DCE544940579 +:100E3F00401E754D008019E545154570021544E5B6 +:100E4F00454544700B754D0180067544057545DCAD +:050E5F00D0D0D0E0320C +:03001B0002000AD6 :01000A0032C3 -:0300530002000E9A +:0300630002000E8A :01000E0032BF -:03005B0002000F91 +:03009B0002000F51 :01000F0032BE -:0300830002001068 +:0300A30002001048 :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 +:10059500AD07EDD394047480948040037F0122ED70 +:1005A500600302066AC28C900002120C7E64017020 +:1005B50004D2A98002C2A9900001120C7EFED39438 +:1005C500037480948040037F0222EEFF7E00700555 +:1005D50053B7FDC2B9EF64014E700553B7FDD2B9EB +:1005E500EF64024E700543B702C2B9EF64034E7063 +:1005F5000543B702D2B9120C65FEC3940374809407 +:100605008040037F0222E58954FC4EF58990000362 +:10061500120C7EFF7E0064017003538E7FEF4E70D7 +:1006250003438E80EF64024E7005438904800353B3 +:1006350089FB900004120C7E64017005438F0180D4 +:1006450003538FFE900005120CD6E5F0F58C900053 +:1006550005120CD6F58A900007120C7E6401700213 +:10066500D28C7F0022ED64016003020737C28E90B1 +:100675000002120C7E64017004D2AB8002C2AB9002 +:100685000001120C7EFED394037480948040037F96 +:100695000222EEFF7E00700553B7F7C2BBEF64017F +:1006A5004E700553B7F7D2BBEF64024E700543B7E2 +:1006B50008C2BBEF64034E700543B708D2BB120CEA +:1006C50065FEC394037480948040037F0222EEC4C8 +:1006D50054F0FFE58954CF4FF589900003120C7E45 +:1006E500FF7E0064017003538EBFEF4E7003438E8F +:1006F50040EF64024E700543894080035389BF90E3 +:100705000004120C7E64017005438F028003538F31 +:10071500FD900005120CD6E5F0F58D900005120C44 +:10072500D6F58B900007120C7E64017002D28E7F85 +:100735000022ED6402707C538EEF900002120C7E55 +:100745006401700543AF04800353AFFB90000312AF +:100755000C7EFED394027480948040037F0222EEC7 +:10076500FF7E0064017003538EFBEF4E7003438ED2 +:1007750004EF64024E7005438E088003538EF79094 +:100785000004120C7E64017005438F048003538FAF +:10079500FB900005120CD6E5F0F5D6900005120C7D +:1007A500D6F5D7900007120C7E64017003438E10B6 +:1007B5007F0022ED6403707C53D1F7900002120C88 +:1007C5007E6401700543AF20800353AFDF900003C3 +:1007D500120C7EFED394027480948040037F022223 +:1007E500EEFF7E006401700353D1FDEF4E700343AD +:1007F500D102EF64024E700543D104800353D1FB4F +:10080500900004120C7E6401700543D101800353EE +:10081500D1FE900005120CD6E5F0F5D49000051236 +:100825000CD6F5D5900007120C7E6401700343D1F8 +:10083500087F0022ED640460030208C353D17F9052 +:100845000002120C7E6401700543AF40800353AF74 +:10085500BF900003120C7EFD7C00D394027480943B +:100865008040037F0222ED64014C700353D1DF9079 +:100875000003120C7E700343D120900003120C7EFE +:100885006402700543D140800353D1BF9000041228 +:100895000C7E6401700543D110800353D1EF9000A5 +:1008A50005120CD6FDACF0ECF5D2AF058FD3900058 +:1008B50007120C7E6401700343D1807F00227F0202 +:0108C5002210 +:100E8600E4F508F509750A01F50BF50C750DD47531 +:0E0E96000ECD750F01FB7A007908FF0205955D +:1000A600EF640160030203A643BA80900029120C94 +:1000B6007EFD7C00D3940374809480502DED7006F1 +:1000C60053B6FB53B5FBED64014C700653B6FB43C8 +:1000D600B504ED64024C700643B60453B5FBED64FB +:1000E600034C700643B60443B50490002A120C7EF6 +:1000F600FD7C00D3940374809480502DED700653DC +:10010600B6F753B5F7ED64014C700653B6F743B531 +:1001160008ED64024C700643B60853B5F7ED640368 +:100126004C700643B60843B50890002B120C7EFDB2 +:100136007C00D3940374809480502DED700653EEAA +:10014600EF53DFEFED64014C700653EEEF43DF1023 +:10015600ED64024C700643EE1053DFEFED64034C82 +:10016600700643EE1043DF1090002C120C7EFD7CCF +:1001760000D3940374809480502DED700653EEDF07 +:1001860053DFDFED64014C700653EEDF43DF20EDF5 +:1001960064024C700643EE2053DFDFED64034C70BF +:1001A6000643EE2043DF2090FECCE4F0A3F0120CD1 +:1001B60065FE90FEC8E0548F4EF0900001120C7E52 +:1001C600FE90FEC9E0548F4EF0900002120C7EFEA7 +:1001D60090FECAE0548F4EF0900003120C7EFE9003 +:1001E600FECBE0548F4EF0900027120C7E640190F7 +:1001F600FEC87006E04408F08004E054F7F0900072 +:1002060028120C7E640190FEC87006E04404F0805B +:1002160004E054FBF090001B120C7E640190FECCAF +:100226007006E04401F08004E054FEF090001C12D9 +:100236000C7E640190FECC7006E04404F08004E07D +:1002460054FBF090001D120C7E640190FECC7006EB +:10025600E04410F08004E054EFF090001E120C7E93 +:10026600640190FECC7006E04440F08004E054BF88 +:10027600F090001F120C7E640190FECD7006E044E3 +:1002860001F08004E054FEF0900020120C7E640120 +:1002960090FECD7006E04404F08004E054FBF0903C +:1002A6000021120C7E640190FECD7006E04410F031 +:1002B6008004E054EFF0900022120C7E640190FE60 +:1002C600CD7006E04440F08004E054BFF090000892 +:1002D600120CD6FD90FED2E5F0F0A3EDF090000AE8 +:1002E600120CD6FD90FED5E5F0F0A3EDF090000CD3 +:1002F600120CD6FD90FED7E5F0F0A3EDF090000EBF +:10030600120CD6FD90FED9E5F0F0A3EDF0900010AA +:10031600120CD6FD90FEDBE5F0F0A3EDF090002F79 +:10032600120C7E90FEC17007E054FEFEF08005E0E0 +:100336004401FEF090FEC1EEF0900030120C7E906B +:10034600FEB2F090002E120C7E90FEB1F090001AD4 +:10035600120C7E90FEDEF0900032120C7E6401904C +:10036600FEDD7006E04410F08004E054EFF09000EB +:1003760033120C7E640190FEDD7006E04480F0804E +:1003860004E0547FF0900031120C7E640190FEC0B0 +:100396007007E04401F002058CE054FEF002058C83 +:1003A600EF6402600302059243BA8090002D120C9E +:1003B6007EFF7E00D3940374809480502DEF7006E8 +:1003C60053EEBF53DFBFEF64014E700653EEBF43DB +:1003D600DF40EF64024E700643EE4053DFBFEF642A +:1003E600034E700643EE4043DF4090FEECE4F0A37C +:1003F600F0900004120C7EFF90FEE8E0548F4FF060 +:10040600900005120C7EFF90FEE9E0548F4FF090AD +:100416000006120C7EFF90FEEAE0548F4FF090002B +:1004260007120C7EFF90FEEBE0548F4FF0900027F2 +:10043600120C7E640190FEE87006E04408F0800429 +:10044600E054F7F0900028120C7E640190FEE870EC +:1004560006E04404F08004E054FBF0900023120C04 +:100466007E640190FEEC7006E04401F08004E054E6 +:10047600FEF0900024120C7E640190FEEC7006E003 +:100486004410F08004E054EFF0900025120C7E64D6 +:100496000190FEED7006E04401F08004E054FEF0A9 +:1004A600900026120C7E640190FEED7006E044106A +:1004B600F08004E054EFF0900008120CD6FF90FE96 +:1004C600F2E5F0F0A3EFF0900012120CD6FF90FECA +:1004D600F5E5F0F0A3EFF0900014120CD6FF90FEB5 +:1004E600F7E5F0F0A3EFF0900016120CD6FF90FEA1 +:1004F600F9E5F0F0A3EFF0900018120CD6FF90FE8D +:10050600FBE5F0F0A3EFF090002F120C7E90FEC1F9 +:100516007007E054FEFFF08005E04401FFF090FE16 +:10052600C1EFF0900030120C7E90FEB6F090002ED7 +:10053600120C7E90FEB5F090001A120C7E90FEFE14 +:10054600F0900032120C7E640190FEFD7006E044CD +:1005560010F08004E054EFF0900033120C7E64013A +:1005660090FEFD7006E04480F08004E0547FF09039 +:100576000031120C7E640190FEE07006E04401F04A +:0F0586008004E054FEF053BA7F7F00227F0222F0 +:100D9A0043BA80EF64017039120CABFF90FED5E5BF +:100DAA00F0F0A3EFF0900002120CD6FF90FED7E508 +:100DBA00F0F0A3EFF0900004120CD6FF90FED9E5F4 +:100DCA00F0F0A3EFF0900006120CD6FF90FEDB8045 +:100DDA003A900008120CD6FF90FEF5E5F0F0A3EF6A +:100DEA00F090000A120CD6FF90FEF7E5F0F0A3EFA0 +:100DFA00F090000C120CD6FF90FEF9E5F0F0A3EF8C +:100E0A00F090000E120CD6FF90FEFBE5F0F0A3EF77 +:050E1A00F053BA7F2235 +:10001E00750C60E4F5357510057511DC85441A858F +:10002E00451BF522753601753801752B01753B019F +:10003E00753901FB7A0079087F021200A675440516 +:03004E007545DC19 +:01005100228C +:100D1A00020066E493A3F8E493A34003F68001F289 +:100D2A0008DFF48029E493A3F85407240CC8C333DA +:100D3A00C4540F4420C8834004F456800146F6DFA9 +:100D4A00E4800B0102040810204080900EBBE47E70 +:100D5A00019360BCA3FF543F30E509541FFEE4939E +:100D6A00A360010ECF54C025E060A840B8E493A365 +:100D7A00FAE493A3F8E493A3C8C582C8CAC583CA90 +:100D8A00F0A3C8C582C8CAC583CADFE9DEE780BE48 +:010EC1000030 +:100C6500BB010689828A83E0225002E722BBFE028D +:090C7500E32289828A83E49322C0 +:100C7E00BB010CE58229F582E5833AF583E022502B +:100C8E0006E92582F8E622BBFE06E92582F8E22275 +:0D0C9E00E58229F582E5833AF583E493228F +:100CAB00BB010A89828A83E0F5F0A3E02250068714 +:100CBB00F009E71922BBFE07E3F5F009E3192289D6 +:0B0CCB00828A83E493F5F07401932209 +:100CD600BB0110E58229F582E5833AF583E0F5F05C +:100CE600A3E0225009E92582F886F008E622BBFE39 +:100CF6000AE92582F8E2F5F008E222E5832AF5837F +:080D0600E993F5F0A3E9932243 :00000001FF diff --git a/Objects/kill_control.lnp b/Objects/kill_control.lnp index 6310e39..178373c 100644 --- a/Objects/kill_control.lnp +++ b/Objects/kill_control.lnp @@ -2,6 +2,7 @@ ".\Objects\Exti.obj", ".\Objects\GPIO.obj", ".\Objects\main.obj", -".\Objects\timer.obj" +".\Objects\timer.obj", +".\Objects\PWM.obj" TO ".\Objects\kill_control" PRINT(".\Listings\kill_control.m51") RAMSIZE(256) diff --git a/Objects/main.obj b/Objects/main.obj index 5f0af087b8751698a48fb8983f67c8a6b99546f6..1dfd7646738c0b6de2a0e2e1ae3920dfdd812599 100644 GIT binary patch delta 6411 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 K{PA&K@Aw}K{8&@~ delta 1190 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 jAGPrtGMJ0)%>1u@_NLH9S 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 - 60 - 770 - 2513 - 1107 + 234 + 389 + 2132 + 1281 0 - 575 - 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000005000000030000000100000039443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF39443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C4750494F2E6300000000064750494F2E6300000000FFDC7800FFFFFFFF38443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79696E635C4750494F2E6800000000064750494F2E6800000000BECEA100FFFFFFFF39443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C457874692E630000000006457874692E6300000000F0A0A100FFFFFFFF38443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79696E635C457874692E680000000006457874692E6800000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000004E040000AA000000C90900009E020000 + 897 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000070000000100000039443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF39443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C4750494F2E6300000000064750494F2E6300000000FFDC7800FFFFFFFF38443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79696E635C4750494F2E6800000000064750494F2E6800000000BECEA100FFFFFFFF39443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C457874692E630000000006457874692E6300000000F0A0A100FFFFFFFF38443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79696E635C457874692E680000000006457874692E6800000000BCA8E100FFFFFFFF38443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C50574D2E43000000000550574D2E43000000009CC1B600FFFFFFFF37443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79696E635C50574D2E68000000000550574D2E6800000000F7B88600FFFFFFFF3A443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79636F64655C74696D65722E63000000000774696D65722E6300000000D9ADC200FFFFFFFF39443A5C55736572735C557365725C446F63756D656E74735C7065656B3235306B696C6C20636F6E74726F6C5C6D79696E635C74696D65722E68000000000774696D65722E6800000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000D1020000580100004C0800004C030000 @@ -134,7 +134,7 @@ 16 - 4E040000AA0000007A0A00006E010000 + D102000058010000FD0800001C020000 @@ -1360,7 +1360,7 @@ 50003 50003 - 0 + 1 0 0 0 @@ -1370,11 +1370,11 @@ 0 16 - 33060000660000006D070000E4020000 + 47010000660000006D07000081000000 16 - 3C000000530000007C01000064010000 + 0A0000000A0000006E0000006E000000 @@ -1799,7 +1799,7 @@ 3312 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000130100007007000017010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000004E040000AA0000007A0A00006E010000440100004F00000070070000130100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F00000030060000FD020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000003A090000AA0000007A0A000058030000300600004F00000070070000FD02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F0000004401000043020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000A030000AA0000004A0400009E020000000000004F00000040010000430200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000E902000070070000ED02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000000A030000480300007A0A00002004000000000000ED02000070070000C503000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000ED020000BC030000C503000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000043020000BF06000047020000010000000100001004000000010000006DFDFFFF59020000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000000A030000A2020000C9090000380400000000000047020000BF060000DD0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000130100007007000017010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000D102000058010000FD0800001C020000440100004F00000070070000130100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F00000030060000FD020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000BD07000058010000FD08000006040000300600004F00000070070000FD02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F0000004401000043020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000008D01000058010000CD0200004C030000000000004F00000040010000430200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000E902000070070000ED02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000008D010000F6030000FD080000CE04000000000000ED02000070070000C503000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000ED020000BC030000C503000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000043020000BF06000047020000010000000100001004000000010000006DFDFFFF59020000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000008D010000500300004C080000E60400000000000047020000BF060000DD0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 @@ -1838,7 +1838,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1862,12 +1862,12 @@ 0 100 - 3 + 7 .\mycode\main.c - 15 - 1 - 21 + 16 + 3 + 17 1 0 @@ -1875,17 +1875,17 @@ .\mycode\GPIO.c 0 - 76 - 100 + 1 + 19 1 0 \Users\User\Documents\peek250kill control\myinc\GPIO.h - 0 - 27 - 42 + 8 + 28 + 44 1 0 @@ -1902,12 +1902,48 @@ .\myinc\Exti.h 17 - 11 + 12 17 1 0 + + .\mycode\PWM.C + 2 + 144 + 169 + 1 + + 0 + + + \Users\User\Documents\peek250kill control\myinc\PWM.h + 6 + 115 + 140 + 1 + + 0 + + + .\mycode\timer.c + 25 + 10 + 36 + 1 + + 0 + + + \Users\User\Documents\peek250kill control\myinc\timer.h + 10 + 22 + 47 + 1 + + 0 + diff --git a/kill_control.uvopt b/kill_control.uvopt index 77c4d96..afcf2cd 100644 --- a/kill_control.uvopt +++ b/kill_control.uvopt @@ -236,6 +236,18 @@ 0 0 + + 2 + 6 + 1 + 0 + 0 + 0 + .\mycode\PWM.C + PWM.C + 0 + 0 + diff --git a/kill_control.uvproj b/kill_control.uvproj index 8d02049..903b7b3 100644 --- a/kill_control.uvproj +++ b/kill_control.uvproj @@ -406,6 +406,11 @@ 1 .\mycode\timer.c + + PWM.C + 1 + .\mycode\PWM.C + diff --git a/mycode/PWM.C b/mycode/PWM.C new file mode 100644 index 0000000..a5e95cd --- /dev/null +++ b/mycode/PWM.C @@ -0,0 +1,217 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 "PWM.h" +PWMx_Duty PWMB_Duty; +u8 PWM_Configuration(u8 PWM, PWMx_InitDefine *PWMx) +{ + if (PWM == PWMA) + { + EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹SFR(XSFR) */ + + if (PWMx->PWM1_SetPriority <= Priority_3) + PWM1_Priority(PWMx->PWM1_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + if (PWMx->PWM2_SetPriority <= Priority_3) + PWM2_Priority(PWMx->PWM2_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + if (PWMx->PWM3_SetPriority <= Priority_3) + PWM3_Priority(PWMx->PWM3_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + if (PWMx->PWM4_SetPriority <= Priority_3) + PWM4_Priority(PWMx->PWM4_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + + PWMA_CCER1_Disable(); // ¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö + PWMA_CCER2_Disable(); // ¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö + PWMA_OC1ModeSet(PWMx->PWM1_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + PWMA_OC2ModeSet(PWMx->PWM2_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + PWMA_OC3ModeSet(PWMx->PWM3_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + PWMA_OC4ModeSet(PWMx->PWM4_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + if (PWMx->PWM_Reload == ENABLE) + PWMA_OC1_ReloadEnable(); // Êä³ö±È½ÏµÄÔ¤×°ÔØÊ¹ÄÜ + else + PWMA_OC1_RelosdDisable(); // ½ûÖ¹Êä³ö±È½ÏµÄÔ¤×°ÔØ + if (PWMx->PWM_Fast == ENABLE) + PWMA_OC1_FastEnable(); // Êä³ö±È½Ï¿ìËÙ¹¦ÄÜʹÄÜ + else + PWMA_OC1_FastDisable(); // ½ûÖ¹Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ + + if (PWMx->PWM_CC1Enable == ENABLE) + PWMA_CC1E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMA_CC1E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC1NEnable == ENABLE) + PWMA_CC1NE_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMA_CC1NE_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC2Enable == ENABLE) + PWMA_CC2E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMA_CC2E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC2NEnable == ENABLE) + PWMA_CC2NE_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMA_CC2NE_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC3Enable == ENABLE) + PWMA_CC3E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMA_CC3E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC3NEnable == ENABLE) + PWMA_CC3NE_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMA_CC3NE_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC4Enable == ENABLE) + PWMA_CC4E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMA_CC4E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC4NEnable == ENABLE) + PWMA_CC4NE_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMA_CC4NE_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + + PWMA_AutoReload(PWMx->PWM_Period); + PWMA_Duty1(PWMx->PWM1_Duty); + PWMA_Duty2(PWMx->PWM2_Duty); + PWMA_Duty3(PWMx->PWM3_Duty); + PWMA_Duty4(PWMx->PWM4_Duty); + + PWMA_CCPCAPreloaded(PWMx->PWM_PreLoad); // ²¶»ñ/±È½ÏÔ¤×°ÔØ¿ØÖÆÎ»(¸Ãλֻ¶Ô¾ßÓл¥²¹Êä³öµÄͨµÀÆð×÷ÓÃ) + PWMA_PS = PWMx->PWM_PS_SW; // Çл»IO + PWMA_ENO = PWMx->PWM_EnoSelect; // Êä³öͨµÀÑ¡Ôñ + PWMA_DeadTime(PWMx->PWM_DeadTime); // ËÀÇø·¢ÉúÆ÷ÉèÖà + + if (PWMx->PWM_BrakeEnable == ENABLE) + PWMA_BrakeEnable(); // ¿ªÆôɲ³µÊäÈë + else + PWMA_BrakeDisable(); // ½ûֹɲ³µÊäÈë + if (PWMx->PWM_MainOutEnable == ENABLE) + PWMA_BrakeOutputEnable(); // Ö÷Êä³öʹÄÜ + else + PWMA_BrakeOutputDisable(); // Ö÷Êä³ö½ûÖ¹ + if (PWMx->PWM_CEN_Enable == ENABLE) + PWMA_CEN_Enable(); // ʹÄܼÆÊýÆ÷ + else + PWMA_CEN_Disable(); // ½ûÖ¹¼ÆÊýÆ÷ + + EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹RAM(XRAM) */ + return 0; + } + + if (PWM == PWMB) + { + EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹SFR(XSFR) */ + + if (PWMx->PWM5_SetPriority <= Priority_3) + PWM5_Priority(PWMx->PWM5_SetPriority); // Ö¸¶¨ÖжÏÓÅÏȼ¶(µÍµ½¸ß) Priority_0,Priority_1,Priority_2,Priority_3 + + PWMB_CCER1_Disable(); // ¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö + PWMB_CCER2_Disable(); // ¹Ø±ÕËùÓÐÊäÈë²¶»ñ/±È½ÏÊä³ö + PWMB_OC5ModeSet(PWMx->PWM5_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + PWMB_OC6ModeSet(PWMx->PWM6_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + PWMB_OC7ModeSet(PWMx->PWM7_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + PWMB_OC8ModeSet(PWMx->PWM8_Mode); // ÉèÖÃÊä³ö±È½Ïģʽ + if (PWMx->PWM_Reload == ENABLE) + PWMB_OC5_ReloadEnable(); // Êä³ö±È½ÏµÄÔ¤×°ÔØÊ¹ÄÜ + else + PWMB_OC5_RelosdDisable(); // ½ûÖ¹Êä³ö±È½ÏµÄÔ¤×°ÔØ + if (PWMx->PWM_Fast == ENABLE) + PWMB_OC5_FastEnable(); // Êä³ö±È½Ï¿ìËÙ¹¦ÄÜʹÄÜ + else + PWMB_OC5_FastDisable(); // ½ûÖ¹Êä³ö±È½Ï¿ìËÙ¹¦ÄÜ + + if (PWMx->PWM_CC5Enable == ENABLE) + PWMB_CC5E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMB_CC5E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC6Enable == ENABLE) + PWMB_CC6E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMB_CC6E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC7Enable == ENABLE) + PWMB_CC7E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMB_CC7E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + if (PWMx->PWM_CC8Enable == ENABLE) + PWMB_CC8E_Enable(); // ¿ªÆôÊäÈë²¶»ñ/±È½ÏÊä³ö + else + PWMB_CC8E_Disable(); // ¹Ø±ÕÊäÈë²¶»ñ/±È½ÏÊä³ö + + PWMB_AutoReload(PWMx->PWM_Period); + PWMB_Duty5(PWMx->PWM5_Duty); + PWMB_Duty6(PWMx->PWM6_Duty); + PWMB_Duty7(PWMx->PWM7_Duty); + PWMB_Duty8(PWMx->PWM8_Duty); + + PWMB_CCPCBPreloaded(PWMx->PWM_PreLoad); // ²¶»ñ/±È½ÏÔ¤×°ÔØ¿ØÖÆÎ»(¸Ãλֻ¶Ô¾ßÓл¥²¹Êä³öµÄͨµÀÆð×÷ÓÃ) + PWMB_PS = PWMx->PWM_PS_SW; // Çл»IO + PWMB_ENO = PWMx->PWM_EnoSelect; // Êä³öͨµÀÑ¡Ôñ + PWMB_DeadTime(PWMx->PWM_DeadTime); // ËÀÇø·¢ÉúÆ÷ÉèÖà + + if (PWMx->PWM_BrakeEnable == ENABLE) + PWMB_BrakeEnable(); // ¿ªÆôɲ³µÊäÈë + else + PWMB_BrakeDisable(); // ½ûֹɲ³µÊäÈë + if (PWMx->PWM_MainOutEnable == ENABLE) + PWMB_BrakeOutputEnable(); // Ö÷Êä³öʹÄÜ + else + PWMB_BrakeOutputDisable(); // Ö÷Êä³ö½ûÖ¹ + if (PWMx->PWM_CEN_Enable == ENABLE) + PWMB_CEN_Enable(); // ʹÄܼÆÊýÆ÷ + else + PWMB_CEN_Disable(); // ½ûÖ¹¼ÆÊýÆ÷ + + EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹RAM(XRAM) */ + return 0; + } + + return 2; // ´íÎó +} + +/*********************************************************/ + +/******************* PWM Õ¼¿Õ±ÈÉèÖú¯Êý *******************/ +void UpdatePwm(u8 PWM, PWMx_Duty *PWMx) +{ + EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹SFR(XSFR) */ + + if (PWM == PWMA) + { + PWMA_Duty1(PWMx->PWM1_Duty); + PWMA_Duty2(PWMx->PWM2_Duty); + PWMA_Duty3(PWMx->PWM3_Duty); + PWMA_Duty4(PWMx->PWM4_Duty); + } + else + { + PWMB_Duty5(PWMx->PWM5_Duty); + PWMB_Duty6(PWMx->PWM6_Duty); + PWMB_Duty7(PWMx->PWM7_Duty); + PWMB_Duty8(PWMx->PWM8_Duty); + } + + EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AÖ¸ÁîµÄ²Ù×÷¶ÔÏóΪÀ©Õ¹RAM(XRAM) */ +} + +/*********************************************************/ +void PWM_config(void) +{ + PWMx_InitDefine PWMx_InitStructure; + PWMx_InitStructure.PWM5_Mode = CCMRn_PWM_MODE1; + PWMx_InitStructure.PWM5_SetPriority = Priority_0; + PWMx_InitStructure.PWM_Period = 1500; + PWMx_InitStructure.PWM5_Duty = PWMB_Duty.PWM5_Duty; + PWMx_InitStructure.PWM_DeadTime = 0; + PWMx_InitStructure.PWM_EnoSelect = ENO5P; + PWMx_InitStructure.PWM_PS_SW = PWM5_SW_P17; + PWMx_InitStructure.PWM_CC5Enable = ENABLE; + PWMx_InitStructure.PWM_MainOutEnable = ENABLE; // ?¡Â????????, ENABLE,DISABLE + PWMx_InitStructure.PWM_CEN_Enable = ENABLE; // ?????????¡Â, ENABLE,DISABLE + PWM_Configuration(PWMB, &PWMx_InitStructure); // ??????PWM, PWMA,PWMB + PWMB_Duty.PWM5_Duty = 1500; +} \ No newline at end of file diff --git a/mycode/main.c b/mycode/main.c index a4d0816..60b7cd3 100644 --- a/mycode/main.c +++ b/mycode/main.c @@ -14,15 +14,17 @@ #include "GPIO.h" #include "Exti.h" #include "timer.h" - +#include "PWM.h" /******************** Ö÷º¯Êý***********************/ void main(void) { GPIO_config(); Exti_config(); Timer_config(); + PWM_config(); EA = 1; while (1) { + UpdatePwm(PWMB, &PWMB_Duty); } } diff --git a/mycode/timer.c b/mycode/timer.c index 292aa47..2a83b69 100644 --- a/mycode/timer.c +++ b/mycode/timer.c @@ -16,42 +16,58 @@ ******************************************/ -#include "timer.h" +#include "timer.h" +#include "PWM.h" +#include "GPIO.h" u8 KILL_time = 0; +u8 pwm_direction = 0; + /********************* Timer0ÖжϺ¯Êý************************/ -void timer0_int (void) interrupt TIMER0_VECTOR +void timer0_int(void) interrupt TIMER0_VECTOR { if (KILL_time) + KILL_time--; + if (!power3_gpio) { - KILL_time--; + if (pwm_direction) + { + PWMB_Duty.PWM5_Duty++; + if (PWMB_Duty.PWM5_Duty >= 1500) + pwm_direction = 0; + } + else + { + PWMB_Duty.PWM5_Duty--; + if (!PWMB_Duty.PWM5_Duty) + pwm_direction = 1; + } + } + else + { + PWMB_Duty.PWM5_Duty = 1500; } } /********************* Timer1ÖжϺ¯Êý************************/ -void timer1_int (void) interrupt TIMER1_VECTOR +void timer1_int(void) interrupt TIMER1_VECTOR { - } /********************* Timer2ÖжϺ¯Êý************************/ -void timer2_int (void) interrupt TIMER2_VECTOR +void timer2_int(void) interrupt TIMER2_VECTOR { - } /********************* Timer3ÖжϺ¯Êý************************/ -void timer3_int (void) interrupt TIMER3_VECTOR +void timer3_int(void) interrupt TIMER3_VECTOR { - } /********************* Timer4ÖжϺ¯Êý************************/ -void timer4_int (void) interrupt TIMER4_VECTOR +void timer4_int(void) interrupt TIMER4_VECTOR { - } - //======================================================================== // º¯Êý: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) // ÃèÊö: ¶¨Ê±Æ÷³õʼ»¯³ÌÐò. @@ -59,118 +75,171 @@ void timer4_int (void) interrupt TIMER4_VECTOR // ·µ»Ø: ³É¹¦·µ»Ø0, ¿Õ²Ù×÷·µ»Ø1,´íÎó·µ»Ø2. // °æ±¾: V1.0, 2012-10-22 //======================================================================== -u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) +u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) { - if(TIM > Timer4) return 1; //¿Õ²Ù×÷ + 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 (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 (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(); // ²»Êä³öʱÖÓ - 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; //³É¹¦ - } + T0_Load(TIMx->TIM_Value); + if (TIMx->TIM_Run == ENABLE) + Timer0_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(); //²»Êä³öʱÖÓ + 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(); // ²»Êä³öʱÖÓ - T2_Load(TIMx->TIM_Value); - if(TIMx->TIM_Run == ENABLE) Timer2_Run(); //¿ªÊ¼ÔËÐÐ - return 0; //³É¹¦ - } + T1_Load(TIMx->TIM_Value); + if (TIMx->TIM_Run == ENABLE) + Timer1_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(); //²»Êä³öʱÖÓ + 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(); // ²»Êä³öʱÖÓ - T3_Load(TIMx->TIM_Value); - if(TIMx->TIM_Run == ENABLE) Timer3_Run(); //¿ªÊ¼ÔËÐÐ - return 0; //³É¹¦ - } + T2_Load(TIMx->TIM_Value); + if (TIMx->TIM_Run == ENABLE) + Timer2_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(); //²»Êä³öʱÖÓ + 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(); // ²»Êä³öʱÖÓ - T4_Load(TIMx->TIM_Value); - if(TIMx->TIM_Run == ENABLE) Timer4_Run(); //¿ªÊ¼ÔËÐÐ - return 0; //³É¹¦ - } - return 2; //´íÎó + 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) +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); + 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/GPIO.h b/myinc/GPIO.h index f1d9c72..6593857 100644 --- a/myinc/GPIO.h +++ b/myinc/GPIO.h @@ -42,6 +42,7 @@ #define power1_gpio P10 #define power2_gpio P11 #define power3_gpio P12 +#define led P17 typedef struct { u8 Mode; //IOģʽ, GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP diff --git a/myinc/PWM.h b/myinc/PWM.h new file mode 100644 index 0000000..c216c7f --- /dev/null +++ b/myinc/PWM.h @@ -0,0 +1,140 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 __PWM_H +#define __PWM_H + +#include "config.h" + +#define ENO1P 0x01 +#define ENO1N 0x02 +#define ENO2P 0x04 +#define ENO2N 0x08 +#define ENO3P 0x10 +#define ENO3N 0x20 +#define ENO4P 0x40 +#define ENO4N 0x80 + +#define ENO5P 0x01 +#define ENO6P 0x04 +#define ENO7P 0x10 +#define ENO8P 0x40 + +#define PWMA 1 +#define PWMB 2 + +#define PWM1_SW_P10_P11 0 +#define PWM1_SW_P20_P21 1 +#define PWM1_SW_P60_P61 2 + +#define PWM2_SW_P12_P13 0 +#define PWM2_SW_P22_P23 (1 << 2) +#define PWM2_SW_P62_P63 (2 << 2) + +#define PWM3_SW_P14_P15 0 +#define PWM3_SW_P24_P25 (1 << 4) +#define PWM3_SW_P64_P65 (2 << 4) + +#define PWM4_SW_P16_P17 0 +#define PWM4_SW_P26_P27 (1 << 6) +#define PWM4_SW_P66_P67 (2 << 6) +#define PWM4_SW_P34_P33 (3 << 6) + +#define PWM5_SW_P20 0 +#define PWM5_SW_P17 1 +#define PWM5_SW_P00 2 +#define PWM5_SW_P74 3 + +#define PWM6_SW_P21 0 +#define PWM6_SW_P54 (1 << 2) +#define PWM6_SW_P01 (2 << 2) +#define PWM6_SW_P75 (3 << 2) + +#define PWM7_SW_P22 0 +#define PWM7_SW_P33 (1 << 4) +#define PWM7_SW_P02 (2 << 4) +#define PWM7_SW_P76 (3 << 4) + +#define PWM8_SW_P23 0 +#define PWM8_SW_P34 (1 << 6) +#define PWM8_SW_P03 (2 << 6) +#define PWM8_SW_P77 (3 << 6) + +typedef struct +{ + u8 PWM1_Mode; // ģʽ, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM2_Mode; // ģʽ, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM3_Mode; // ģʽ, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM4_Mode; // ģʽ, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM5_Mode; // ģʽ, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM6_Mode; // ģʽ, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM7_Mode; // ģʽ, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM8_Mode; // ģʽ, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + + u16 PWM_Period; // ����ʱ��, 0~65535 + u16 PWM1_Duty; // PWM1ռ�ձ�ʱ��, 0~Period + u16 PWM2_Duty; // PWM2ռ�ձ�ʱ��, 0~Period + u16 PWM3_Duty; // PWM3ռ�ձ�ʱ��, 0~Period + u16 PWM4_Duty; // PWM4ռ�ձ�ʱ��, 0~Period + u16 PWM5_Duty; // PWM5ռ�ձ�ʱ��, 0~Period + u16 PWM6_Duty; // PWM6ռ�ձ�ʱ��, 0~Period + u16 PWM7_Duty; // PWM7ռ�ձ�ʱ��, 0~Period + u16 PWM8_Duty; // PWM8ռ�ձ�ʱ��, 0~Period + u8 PWM_DeadTime; // ��������������, 0~255 + + u8 PWM_CC1Enable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC1NEnable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC2Enable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC2NEnable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC3Enable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC3NEnable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC4Enable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC4NEnable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC5Enable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC6Enable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC7Enable; // �������벶��/�Ƚ����, ENABLE,DISABLE + u8 PWM_CC8Enable; // �������벶��/�Ƚ����, ENABLE,DISABLE + + u8 PWM_Reload; // ����Ƚϵ�Ԥװ��ʹ��, ENABLE,DISABLE + u8 PWM_Fast; // ����ȽϿ��ٹ���ʹ��, ENABLE,DISABLE + + u8 PWM1_SetPriority; // ����PWM1���ȼ�, Priority_0,Priority_1,Priority_2,Priority_3 + u8 PWM2_SetPriority; // ����PWM2���ȼ�, Priority_0,Priority_1,Priority_2,Priority_3 + u8 PWM3_SetPriority; // ����PWM3���ȼ�, Priority_0,Priority_1,Priority_2,Priority_3 + u8 PWM4_SetPriority; // ����PWM4���ȼ�, Priority_0,Priority_1,Priority_2,Priority_3 + u8 PWM5_SetPriority; // ����PWM4���ȼ�, Priority_0,Priority_1,Priority_2,Priority_3 + + u8 PWM_EnoSelect; // ���ͨ��ѡ��, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8P + u8 PWM_PreLoad; // Ԥװ��, ENABLE,DISABLE + u8 PWM_PS_SW; // �л��˿�, PWM1_SW_P10_P11,PWM1_SW_P20_P21,PWM1_SW_P60_P61 + u8 PWM_CEN_Enable; // ʹ�ܼ�����, ENABLE,DISABLE + + u8 PWM_BrakeEnable; // ɲ������ʹ��, ENABLE,DISABLE + u8 PWM_MainOutEnable; // �����ʹ��, ENABLE,DISABLE +} PWMx_InitDefine; + +typedef struct +{ + u16 PWM1_Duty; // PWM1ռ�ձ�ʱ��, 0~Period + u16 PWM2_Duty; // PWM2ռ�ձ�ʱ��, 0~Period + u16 PWM3_Duty; // PWM3ռ�ձ�ʱ��, 0~Period + u16 PWM4_Duty; // PWM4ռ�ձ�ʱ��, 0~Period + u16 PWM5_Duty; // PWM5ռ�ձ�ʱ��, 0~Period + u16 PWM6_Duty; // PWM6ռ�ձ�ʱ��, 0~Period + u16 PWM7_Duty; // PWM7ռ�ձ�ʱ��, 0~Period + u16 PWM8_Duty; // PWM8ռ�ձ�ʱ��, 0~Period +} PWMx_Duty; +extern PWMx_Duty PWMB_Duty; +u8 PWM_Configuration(u8 PWM, PWMx_InitDefine *PWMx); +void UpdatePwm(u8 PWM, PWMx_Duty *PWMx); +void PWM_config(void); +#endif