From 2dd675869accef720f455f762c0210d94afc083c Mon Sep 17 00:00:00 2001 From: caocong Date: Mon, 15 Dec 2025 20:48:52 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E8=B0=83?= =?UTF-8?q?=E5=85=89=E6=97=B6=E9=97=B4BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解决调光时间一样的情况下,调光亮与调光灭的实际调光时间不一致问题 --- .gitignore | 1 + GPIO.c | 71 + GPIO.h | 41 + Listings/BLV_C12_Dimm_V19.m51 | 2652 +++++++++++++++++++++++ Listings/GPIO.lst | 97 + Listings/PWM15bit.lst | 575 +++++ Listings/Start_Init.lst | 69 + Listings/UART.lst | 531 +++++ Listings/UART_Set.lst | 657 ++++++ Listings/WDT.lst | 60 + Listings/key.lst | 183 ++ Listings/main.lst | 162 ++ Listings/pwm_control.lst | 421 ++++ Listings/timer.lst | 190 ++ Objects/BLV_C12_Dimm_V19 | Bin 0 -> 1165072 bytes Objects/BLV_C12_Dimm_V19.build_log.htm | 54 + Objects/BLV_C12_Dimm_V19.hex | 1042 +++++++++ Objects/BLV_C12_Dimm_V19.lnp | 12 + PWM15bit.c | 534 +++++ PWM15bit.h | 94 + Readme.md | 57 + STC8xxxx.H | 2748 ++++++++++++++++++++++++ Start_Init.c | 39 + Start_Init.h | 6 + UART.C | 484 +++++ UART.h | 138 ++ UART_Set.c | 601 ++++++ UART_Set.h | 100 + WDT.c | 35 + WDT.h | 40 + config.h | 19 + key.c | 155 ++ key.h | 50 + light_V19.uvgui.cc | 1923 +++++++++++++++++ light_V19.uvopt | 293 +++ light_V19.uvproj | 435 ++++ main.c | 128 ++ pwm_control.c | 358 +++ pwm_control.h | 51 + timer.c | 160 ++ timer.h | 47 + 41 files changed, 15313 insertions(+) create mode 100644 .gitignore create mode 100644 GPIO.c create mode 100644 GPIO.h create mode 100644 Listings/BLV_C12_Dimm_V19.m51 create mode 100644 Listings/GPIO.lst create mode 100644 Listings/PWM15bit.lst create mode 100644 Listings/Start_Init.lst create mode 100644 Listings/UART.lst create mode 100644 Listings/UART_Set.lst create mode 100644 Listings/WDT.lst create mode 100644 Listings/key.lst create mode 100644 Listings/main.lst create mode 100644 Listings/pwm_control.lst create mode 100644 Listings/timer.lst create mode 100644 Objects/BLV_C12_Dimm_V19 create mode 100644 Objects/BLV_C12_Dimm_V19.build_log.htm create mode 100644 Objects/BLV_C12_Dimm_V19.hex create mode 100644 Objects/BLV_C12_Dimm_V19.lnp create mode 100644 PWM15bit.c create mode 100644 PWM15bit.h create mode 100644 Readme.md create mode 100644 STC8xxxx.H create mode 100644 Start_Init.c create mode 100644 Start_Init.h create mode 100644 UART.C create mode 100644 UART.h create mode 100644 UART_Set.c create mode 100644 UART_Set.h create mode 100644 WDT.c create mode 100644 WDT.h create mode 100644 config.h create mode 100644 key.c create mode 100644 key.h create mode 100644 light_V19.uvgui.cc create mode 100644 light_V19.uvopt create mode 100644 light_V19.uvproj create mode 100644 main.c create mode 100644 pwm_control.c create mode 100644 pwm_control.h create mode 100644 timer.c create mode 100644 timer.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dc38a97 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +Objects/*.obj diff --git a/GPIO.c b/GPIO.c new file mode 100644 index 0000000..bb54f79 --- /dev/null +++ b/GPIO.c @@ -0,0 +1,71 @@ +#include "GPIO.h" + +//======================================================================== +// : u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) +// : ʼIO. +// : GPIOx: ṹ,οtimer.hĶ. +// : ɹ0, ղ1,󷵻2. +// 汾: V1.0, 2012-10-22 +//======================================================================== +u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) +{ + if(GPIO > GPIO_P7) return 1; //ղ + if(GPIOx->Mode > GPIO_OUT_PP) return 2; // + if(GPIO == GPIO_P0) + { + if(GPIOx->Mode == GPIO_PullUp) P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //׼˫ + if(GPIOx->Mode == GPIO_HighZ) P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // + if(GPIOx->Mode == GPIO_OUT_OD) P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; //© + if(GPIOx->Mode == GPIO_OUT_PP) P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; // + } + if(GPIO == GPIO_P1) + { + if(GPIOx->Mode == GPIO_PullUp) P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //׼˫ + if(GPIOx->Mode == GPIO_HighZ) P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // + if(GPIOx->Mode == GPIO_OUT_OD) P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; //© + if(GPIOx->Mode == GPIO_OUT_PP) P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; // + } + if(GPIO == GPIO_P2) + { + if(GPIOx->Mode == GPIO_PullUp) P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //׼˫ + if(GPIOx->Mode == GPIO_HighZ) P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // + if(GPIOx->Mode == GPIO_OUT_OD) P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; //© + if(GPIOx->Mode == GPIO_OUT_PP) P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; // + } + if(GPIO == GPIO_P3) + { + if(GPIOx->Mode == GPIO_PullUp) P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //׼˫ + if(GPIOx->Mode == GPIO_HighZ) P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // + if(GPIOx->Mode == GPIO_OUT_OD) P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; //© + if(GPIOx->Mode == GPIO_OUT_PP) P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; // + } + if(GPIO == GPIO_P4) + { + if(GPIOx->Mode == GPIO_PullUp) P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //׼˫ + if(GPIOx->Mode == GPIO_HighZ) P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // + if(GPIOx->Mode == GPIO_OUT_OD) P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; //© + if(GPIOx->Mode == GPIO_OUT_PP) P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; // + } + if(GPIO == GPIO_P5) + { + if(GPIOx->Mode == GPIO_PullUp) P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //׼˫ + if(GPIOx->Mode == GPIO_HighZ) P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // + if(GPIOx->Mode == GPIO_OUT_OD) P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; //© + if(GPIOx->Mode == GPIO_OUT_PP) P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; // + } + if(GPIO == GPIO_P6) + { + if(GPIOx->Mode == GPIO_PullUp) P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; //׼˫ + if(GPIOx->Mode == GPIO_HighZ) P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // + if(GPIOx->Mode == GPIO_OUT_OD) P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; //© + if(GPIOx->Mode == GPIO_OUT_PP) P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; // + } + if(GPIO == GPIO_P7) + { + if(GPIOx->Mode == GPIO_PullUp) P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; //׼˫ + if(GPIOx->Mode == GPIO_HighZ) P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // + if(GPIOx->Mode == GPIO_OUT_OD) P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; //© + if(GPIOx->Mode == GPIO_OUT_PP) P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; // + } + return 0; //ɹ +} diff --git a/GPIO.h b/GPIO.h new file mode 100644 index 0000000..6345ba8 --- /dev/null +++ b/GPIO.h @@ -0,0 +1,41 @@ + +#ifndef __GPIO_H +#define __GPIO_H + +#include "config.h" + +#define GPIO_PullUp 0 //׼˫ +#define GPIO_HighZ 1 // +#define GPIO_OUT_OD 2 //© +#define GPIO_OUT_PP 3 // + +#define GPIO_Pin_0 0x01 //IO Px.0 +#define GPIO_Pin_1 0x02 //IO Px.1 +#define GPIO_Pin_2 0x04 //IO Px.2 +#define GPIO_Pin_3 0x08 //IO Px.3 +#define GPIO_Pin_4 0x10 //IO Px.4 +#define GPIO_Pin_5 0x20 //IO Px.5 +#define GPIO_Pin_6 0x40 //IO Px.6 +#define GPIO_Pin_7 0x80 //IO Px.7 +#define GPIO_Pin_All 0xFF //IO +#define GPIO_Pin_Left 0x0F //IO1,2,3,4 + +#define GPIO_P0 0 +#define GPIO_P1 1 +#define GPIO_P2 2 +#define GPIO_P3 3 +#define GPIO_P4 4 +#define GPIO_P5 5 +#define GPIO_P6 6 +#define GPIO_P7 7 + + +typedef struct +{ + u8 Mode; //IOģʽ, GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + u8 Pin; //ҪõĶ˿ +} GPIO_InitTypeDef; + +u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx); + +#endif diff --git a/Listings/BLV_C12_Dimm_V19.m51 b/Listings/BLV_C12_Dimm_V19.m51 new file mode 100644 index 0000000..b27009c --- /dev/null +++ b/Listings/BLV_C12_Dimm_V19.m51 @@ -0,0 +1,2652 @@ +BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 1 + + +BL51 BANKED LINKER/LOCATER V6.22, INVOKED BY: +D:\KEIL_V5\C51\BIN\BL51.EXE .\Objects\GPIO.obj, .\Objects\main.obj, .\Objects\UART.obj, .\Objects\UART_Set.obj, .\Object +>> s\pwm_control.obj, .\Objects\Start_Init.obj, .\Objects\PWM15bit.obj, .\Objects\timer.obj, .\Objects\key.obj, .\Object +>> s\WDT.obj TO .\Objects\BLV_C12_Dimm_V19 PRINT (.\Listings\BLV_C12_Dimm_V19.m51) RAMSIZE (256) + + +MEMORY MODEL: SMALL WITH FLOATING POINT ARITHMETIC + + +INPUT MODULES INCLUDED: + .\Objects\GPIO.obj (GPIO) + .\Objects\main.obj (MAIN) + .\Objects\UART.obj (UART) + .\Objects\UART_Set.obj (UART_SET) + .\Objects\pwm_control.obj (PWM_CONTROL) + .\Objects\Start_Init.obj (START_INIT) + .\Objects\PWM15bit.obj (PWM15BIT) + .\Objects\timer.obj (TIMER) + .\Objects\key.obj (KEY) + .\Objects\WDT.obj (WDT) + D:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPADD) + D:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPDIV) + D:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPCMP) + D:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FCAST) + D:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?CASTF) + D:\KEIL_V5\C51\LIB\C51FPS.LIB (?C?FPGETOPN) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C_STARTUP) + 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?IILDX) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?ILDOPTR) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LMUL) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?ULDIV) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LNEG) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?ULCMP) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?ULSHR) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LLDOPTR0) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LSTXDATA) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LSTKXDATA) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?OFFXADD) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LIMUL) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?MEMSET) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C_INIT) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LLDIDATA0) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LLDXDATA0) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LLDPDATA0) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?LLDCODE0) + + +LINK MAP OF MODULE: .\Objects\BLV_C12_Dimm_V19 (GPIO) + + + TYPE BASE LENGTH RELOCATION SEGMENT NAME + ----------------------------------------------------- + + * * * * * * * D A T A M E M O R Y * * * * * * * + REG 0000H 0008H ABSOLUTE "REG BANK 0" + DATA 0008H 0015H UNIT _DATA_GROUP_ + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 2 + + + DATA 001DH 0014H UNIT ?DT?UART + DATA 0031H 000AH UNIT ?DT?KEY + DATA 003BH 0008H UNIT ?DT?PWM_CONTROL + DATA 0043H 0004H UNIT ?DT?TIMER + DATA 0047H 0003H UNIT ?DT?_PRINTBUFFER1?UART + DATA 004AH 0001H UNIT ?DT?MAIN + DATA 004BH 0001H UNIT ?DT?UART_SET + IDATA 004CH 0001H UNIT ?STACK + + * * * * * * * X D A T A M E M O R Y * * * * * * * + XDATA 0000H 0110H UNIT ?XD?UART_SET + XDATA 0110H 00F1H UNIT ?XD?PWM_CONTROL + XDATA 0201H 0080H UNIT ?XD?UART + + * * * * * * * C O D E M E M O R Y * * * * * * * + CODE 0000H 0003H ABSOLUTE + CODE 0003H 0004H UNIT ?PR?WDT_CLEAR?WDT + CODE 0007H 0003H UNIT ?PR?TIMER0_INT?TIMER + CODE 000AH 0001H UNIT ?PR?TIMER3_INT?TIMER + CODE 000BH 0003H ABSOLUTE + CODE 000EH 000AH UNIT ?CO?MAIN + CODE 0018H 0003H UNIT ?PR?TIMER1_INT?TIMER + CODE 001BH 0003H ABSOLUTE + CODE 001EH 0003H UNIT ?PR?TIMER4_INT?TIMER + 0021H 0002H *** GAP *** + CODE 0023H 0003H ABSOLUTE + CODE 0026H 0031H UNIT ?PR?PWM0_HANDLER?PWM15BIT + 0057H 000CH *** GAP *** + CODE 0063H 0003H ABSOLUTE + CODE 0066H 0024H UNIT ?PR?_TX3_WRITE2BUFF?UART + 008AH 0001H *** GAP *** + CODE 008BH 0003H ABSOLUTE + 008EH 000DH *** GAP *** + CODE 009BH 0003H ABSOLUTE + 009EH 0005H *** GAP *** + CODE 00A3H 0003H ABSOLUTE + 00A6H 000DH *** GAP *** + CODE 00B3H 0003H ABSOLUTE + CODE 00B6H 002BH UNIT ?C_INITSEG + 00E1H 0002H *** GAP *** + CODE 00E3H 0003H ABSOLUTE + 00E6H 0005H *** GAP *** + CODE 00EBH 0003H ABSOLUTE + 00EEH 0005H *** GAP *** + CODE 00F3H 0003H ABSOLUTE + 00F6H 0005H *** GAP *** + CODE 00FBH 0003H ABSOLUTE + CODE 00FEH 0FD8H UNIT ?PR?USART_DEAL_DATA?UART_SET + CODE 10D6H 0753H UNIT ?PR?DEAL_COMMAND2?PWM_CONTROL + CODE 1829H 05AFH UNIT ?C?LIB_CODE + CODE 1DD8H 0482H UNIT ?PR?DEAL_COMMAND1?PWM_CONTROL + CODE 225AH 035BH UNIT ?PR?_UART_CONFIGURATION?UART + CODE 25B5H 02F3H UNIT ?PR?_TIMER_INILIZE?TIMER + CODE 28A8H 0254H UNIT ?PR?_GPIO_INILIZE?GPIO + CODE 2AFCH 01B8H UNIT ?PR?_PWM15_INIT?PWM15BIT + CODE 2CB4H 018DH UNIT ?PR?USART_ANSWER?UART_SET + CODE 2E41H 0180H UNIT ?CO?PWM15BIT + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 3 + + + CODE 2FC1H 0178H UNIT ?PR?PWM_CONFIG?PWM_CONTROL + CODE 3139H 013BH UNIT ?PR?KEY_TEST?KEY + CODE 3274H 00E0H UNIT ?PR?USART_JUDGE_DATA?UART_SET + CODE 3354H 00CFH UNIT ?PR?KEY_SCANTASK?KEY + CODE 3423H 009AH UNIT ?PR?_PWM_WRITE?PWM_CONTROL + CODE 34BDH 008CH UNIT ?PR?UART1_INT?UART + CODE 3549H 008CH UNIT ?C_C51STARTUP + CODE 35D5H 0087H UNIT ?PR?START_INIT?START_INIT + CODE 365CH 007EH UNIT ?PR?UART3_INT?UART + CODE 36DAH 0078H UNIT ?PR?_PWMCHANNELCTRL?PWM15BIT + CODE 3752H 006AH UNIT ?PR?_QPWM15DUTY?PWM15BIT + CODE 37BCH 0066H UNIT ?PR?SHOW_LIGHT?PWM_CONTROL + CODE 3822H 0065H UNIT ?PR?MAIN?MAIN + CODE 3887H 0065H UNIT ?CO?UART_SET + CODE 38ECH 005EH UNIT ?PR?_OPEN_LIGHT?PWM_CONTROL + CODE 394AH 0054H UNIT ?PR?_PWM15DUTY?PWM15BIT + CODE 399EH 0043H UNIT ?PR?GPIO_CONFIG?PWM_CONTROL + CODE 39E1H 003FH UNIT ?PR?_PWMLEVELSET?PWM15BIT + CODE 3A20H 0031H UNIT ?PR?PWM1_HANDLER?PWM15BIT + CODE 3A51H 0031H UNIT ?PR?PWM2_HANDLER?PWM15BIT + CODE 3A82H 0031H UNIT ?PR?PWM3_HANDLER?PWM15BIT + CODE 3AB3H 0031H UNIT ?PR?PWM4_HANDLER?PWM15BIT + CODE 3AE4H 002AH UNIT ?PR?_SUMFUNC?UART_SET + CODE 3B0EH 0029H UNIT ?PR?UART1_CONFIG?MAIN + CODE 3B37H 0029H UNIT ?PR?_WDT_INILIZE?WDT + CODE 3B60H 0028H UNIT ?PR?UART3_CONFIG?UART + CODE 3B88H 0026H UNIT ?PR?_PRINTBUFFER3?UART + CODE 3BAEH 0023H UNIT ?PR?_TX1_WRITE2BUFF?UART + CODE 3BD1H 0023H UNIT ?PR?_PRINTBUFFER1?UART + CODE 3BF4H 0021H UNIT ?PR?TIMER2_INIT_1MS?START_INIT + CODE 3C15H 001FH UNIT ?PR?KEY_INIT?KEY + CODE 3C34H 001EH UNIT ?PR?TIMER2_INT?TIMER + CODE 3C52H 0014H UNIT ?PR?_CLOSE_LIGHT?PWM_CONTROL + CODE 3C66H 0013H UNIT ?PR?_PRINTSTRING1?UART + CODE 3C79H 0013H UNIT ?PR?_PRINTSTRING3?UART + CODE 3C8CH 0011H UNIT ?PR?WDT_CONFIG?MAIN + CODE 3C9DH 0010H UNIT ?PR?GPIO1_CONFIG?MAIN + + + +OVERLAY MAP OF MODULE: .\Objects\BLV_C12_Dimm_V19 (GPIO) + + +SEGMENT DATA_GROUP + +--> CALLED SEGMENT START LENGTH +------------------------------------------------------ +?C_C51STARTUP ----- ----- + +--> ?PR?MAIN?MAIN + +--> ?C_INITSEG + +?PR?MAIN?MAIN ----- ----- + +--> ?PR?GPIO_CONFIG?PWM_CONTROL + +--> ?PR?UART3_CONFIG?UART + +--> ?PR?START_INIT?START_INIT + +--> ?PR?PWM_CONFIG?PWM_CONTROL + +--> ?PR?TIMER2_INIT_1MS?START_INIT + +--> ?PR?KEY_INIT?KEY + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 4 + + + +--> ?PR?GPIO1_CONFIG?MAIN + +--> ?PR?UART1_CONFIG?MAIN + +--> ?PR?WDT_CONFIG?MAIN + +--> ?CO?MAIN + +--> ?PR?_PRINTSTRING1?UART + +--> ?PR?WDT_CLEAR?WDT + +--> ?PR?USART_JUDGE_DATA?UART_SET + +--> ?PR?USART_DEAL_DATA?UART_SET + +--> ?PR?DEAL_COMMAND1?PWM_CONTROL + +--> ?PR?DEAL_COMMAND2?PWM_CONTROL + +--> ?PR?SHOW_LIGHT?PWM_CONTROL + +--> ?PR?USART_ANSWER?UART_SET + +--> ?PR?KEY_SCANTASK?KEY + +--> ?PR?KEY_TEST?KEY + +?PR?GPIO_CONFIG?PWM_CONTROL 0008H 0002H + +--> ?PR?_GPIO_INILIZE?GPIO + +?PR?UART3_CONFIG?UART 0008H 000CH + +--> ?PR?_UART_CONFIGURATION?UART + +?PR?_UART_CONFIGURATION?UART 0014H 0009H + +?PR?PWM_CONFIG?PWM_CONTROL 0008H 0007H + +--> ?PR?_PWM15_INIT?PWM15BIT + +--> ?PR?_PWM15DUTY?PWM15BIT + +--> ?PR?_PWMCHANNELCTRL?PWM15BIT + +?PR?_PWM15DUTY?PWM15BIT ----- ----- + +--> ?CO?PWM15BIT + +?PR?_PWMCHANNELCTRL?PWM15BIT 000FH 0006H + +--> ?CO?PWM15BIT + +?PR?TIMER2_INIT_1MS?START_INIT 0008H 0008H + +--> ?PR?_TIMER_INILIZE?TIMER + +?PR?KEY_INIT?KEY 0008H 0002H + +--> ?PR?_GPIO_INILIZE?GPIO + +?PR?GPIO1_CONFIG?MAIN 0008H 0002H + +--> ?PR?_GPIO_INILIZE?GPIO + +?PR?UART1_CONFIG?MAIN 0008H 000CH + +--> ?PR?_UART_CONFIGURATION?UART + +?PR?WDT_CONFIG?MAIN 0008H 0003H + +--> ?PR?_WDT_INILIZE?WDT + +?PR?_PRINTSTRING1?UART ----- ----- + +--> ?PR?_TX1_WRITE2BUFF?UART + +?PR?USART_JUDGE_DATA?UART_SET 0008H 0002H + +?PR?USART_DEAL_DATA?UART_SET 0008H 0001H + +--> ?CO?UART_SET + +--> ?PR?_PRINTSTRING1?UART + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 5 + + + +--> ?PR?_OPEN_LIGHT?PWM_CONTROL + +--> ?PR?_CLOSE_LIGHT?PWM_CONTROL + +?PR?_OPEN_LIGHT?PWM_CONTROL 0009H 0001H + +?PR?DEAL_COMMAND1?PWM_CONTROL 0008H 0002H + +?PR?DEAL_COMMAND2?PWM_CONTROL 0008H 0002H + +?PR?SHOW_LIGHT?PWM_CONTROL 0008H 0002H + +--> ?PR?_CLOSE_LIGHT?PWM_CONTROL + +--> ?PR?_PWM_WRITE?PWM_CONTROL + +?PR?_PWM_WRITE?PWM_CONTROL 000AH 0002H + +--> ?PR?_PWM15DUTY?PWM15BIT + +?PR?USART_ANSWER?UART_SET 0008H 0001H + +--> ?PR?_SUMFUNC?UART_SET + +--> ?PR?_PRINTBUFFER3?UART + +--> ?CO?UART_SET + +--> ?PR?_PRINTSTRING1?UART + +?PR?_SUMFUNC?UART_SET 0009H 0003H + +?PR?_PRINTBUFFER3?UART 0009H 0003H + +--> ?PR?_TX3_WRITE2BUFF?UART + + + +SYMBOL TABLE OF MODULE: .\Objects\BLV_C12_Dimm_V19 (GPIO) + + VALUE TYPE NAME + ---------------------------------- + + ------- MODULE GPIO + C:0000H SYMBOL _ICE_DUMMY_ + D:0093H PUBLIC P0M1 + D:0092H PUBLIC P1M0 + D:0096H PUBLIC P2M0 + D:0091H PUBLIC P1M1 + D:0080H PUBLIC P0 + D:00B2H PUBLIC P3M0 + D:0095H PUBLIC P2M1 + D:0090H PUBLIC P1 + D:00B4H PUBLIC P4M0 + D:00B1H PUBLIC P3M1 + D:00A0H PUBLIC P2 + D:00CAH PUBLIC P5M0 + D:00B3H PUBLIC P4M1 + D:00B0H PUBLIC P3 + D:00CCH PUBLIC P6M0 + D:00C9H PUBLIC P5M1 + D:00C0H PUBLIC P4 + D:00E2H PUBLIC P7M0 + D:00CBH PUBLIC P6M1 + D:00C8H PUBLIC P5 + D:00E8H PUBLIC P6 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 6 + + + D:00E1H PUBLIC P7M1 + D:00F8H PUBLIC P7 + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + C:28A8H PUBLIC _GPIO_Inilize + D:00D0H PUBLIC PSW + D:0094H PUBLIC P0M0 + ------- PROC _GPIO_INILIZE + D:0007H SYMBOL GPIO + D:0001H SYMBOL GPIOx + C:28A8H LINE# 10 + C:28A8H LINE# 11 + C:28A8H LINE# 12 + C:28B1H LINE# 13 + C:28BDH LINE# 14 + C:28C0H LINE# 15 + C:28C0H LINE# 16 + C:28CEH LINE# 17 + C:28DFH LINE# 18 + C:28F0H LINE# 19 + C:2901H LINE# 20 + C:2901H LINE# 21 + C:2906H LINE# 22 + C:2906H LINE# 23 + C:2917H LINE# 24 + C:2926H LINE# 25 + C:2936H LINE# 26 + C:2949H LINE# 27 + C:2949H LINE# 28 + C:294EH LINE# 29 + C:294EH LINE# 30 + C:295FH LINE# 31 + C:296EH LINE# 32 + C:297EH LINE# 33 + C:2991H LINE# 34 + C:2991H LINE# 35 + C:2996H LINE# 36 + C:2996H LINE# 37 + C:29A7H LINE# 38 + C:29B6H LINE# 39 + C:29C6H LINE# 40 + C:29D9H LINE# 41 + C:29D9H LINE# 42 + C:29DEH LINE# 43 + C:29DEH LINE# 44 + C:29EFH LINE# 45 + C:29FEH LINE# 46 + C:2A0EH LINE# 47 + C:2A21H LINE# 48 + C:2A21H LINE# 49 + C:2A26H LINE# 50 + C:2A26H LINE# 51 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 7 + + + C:2A37H LINE# 52 + C:2A46H LINE# 53 + C:2A56H LINE# 54 + C:2A69H LINE# 55 + C:2A69H LINE# 56 + C:2A6EH LINE# 57 + C:2A6EH LINE# 58 + C:2A7FH LINE# 59 + C:2A8EH LINE# 60 + C:2A9EH LINE# 61 + C:2AB1H LINE# 62 + C:2AB1H LINE# 63 + C:2AB6H LINE# 64 + C:2AB6H LINE# 65 + C:2AC7H LINE# 66 + C:2AD6H LINE# 67 + C:2AE6H LINE# 68 + C:2AF9H LINE# 69 + C:2AF9H LINE# 70 + C:2AFBH LINE# 71 + ------- ENDPROC _GPIO_INILIZE + ------- ENDMOD GPIO + + ------- MODULE MAIN + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + D:00C0H PUBLIC P4 + D:00C8H PUBLIC P5 + B:00A8H.7 PUBLIC EA + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + C:3822H PUBLIC main + D:004AH PUBLIC count_flag + B:0090H.0 PUBLIC P10 + D:0087H PUBLIC PCON + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + C:3C9DH PUBLIC GPIO1_config + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + C:3B0EH PUBLIC UART1_config + C:3C8CH PUBLIC WDT_config + D:00FFH PUBLIC RSTCFG + D:00D0H PUBLIC PSW + ------- PROC GPIO1_CONFIG + ------- DO + D:0008H SYMBOL GPIO_InitStructure + ------- ENDDO + C:3C9DH LINE# 28 + C:3C9DH LINE# 29 + C:3C9DH LINE# 32 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 8 + + + C:3CA0H LINE# 33 + C:3CA3H LINE# 34 + ------- ENDPROC GPIO1_CONFIG + ------- PROC UART1_CONFIG + ------- DO + D:0008H SYMBOL COMx_InitStructure + ------- ENDDO + C:3B0EH LINE# 38 + C:3B0EH LINE# 39 + C:3B0EH LINE# 41 + C:3B11H LINE# 42 + C:3B14H LINE# 43 + C:3B20H LINE# 44 + C:3B23H LINE# 45 + C:3B26H LINE# 46 + C:3B29H LINE# 47 + C:3B2BH LINE# 48 + C:3B2DH LINE# 49 + ------- ENDPROC UART1_CONFIG + ------- PROC WDT_CONFIG + ------- DO + D:0008H SYMBOL WDT_InitStructure + ------- ENDDO + C:3C8CH LINE# 55 + C:3C8CH LINE# 56 + C:3C8CH LINE# 59 + C:3C8FH LINE# 60 + C:3C92H LINE# 61 + C:3C95H LINE# 62 + ------- ENDPROC WDT_CONFIG + ------- PROC MAIN + C:3822H LINE# 66 + C:3822H LINE# 67 + C:3822H LINE# 68 + C:3825H LINE# 69 + C:3828H LINE# 70 + C:382BH LINE# 71 + C:382EH LINE# 72 + C:3831H LINE# 73 + C:3834H LINE# 74 + C:3837H LINE# 75 + C:383AH LINE# 76 + C:383DH LINE# 78 + C:3840H LINE# 79 + C:3843H LINE# 80 + C:3845H LINE# 82 + C:3849H LINE# 83 + C:3849H LINE# 84 + C:3852H LINE# 85 + C:3852H LINE# 87 + C:3852H LINE# 88 + C:3852H LINE# 89 + C:3855H LINE# 90 + C:3857H LINE# 93 + C:385CH LINE# 94 + C:385CH LINE# 95 + C:385EH LINE# 96 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 9 + + + C:385EH LINE# 97 + C:3863H LINE# 98 + C:3863H LINE# 99 + C:3865H LINE# 100 + C:3865H LINE# 101 + C:386AH LINE# 102 + C:386AH LINE# 103 + C:386DH LINE# 104 + C:386DH LINE# 106 + C:3870H LINE# 108 + C:3873H LINE# 110 + C:3876H LINE# 112 + C:3879H LINE# 116 + C:387CH LINE# 118 + C:387FH LINE# 120 + C:3882H LINE# 122 + C:3885H LINE# 124 + ------- ENDPROC MAIN + ------- ENDMOD MAIN + + ------- MODULE UART + C:0000H SYMBOL _ICE_DUMMY_ + C:225AH PUBLIC _UART_Configuration + 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:00A2H PUBLIC P_SW1 + D:00BAH PUBLIC P_SW2 + D:00A8H PUBLIC IE + D:001EH PUBLIC COM1 + D:0025H PUBLIC COM3 + D:00EEH PUBLIC IP3H + B:00A8H.4 PUBLIC ES + D:00B8H PUBLIC IP + X:0201H PUBLIC RX1_Buffer + B:0098H.0 PUBLIC RI + C:34BDH PUBLIC UART1_int + X:0221H PUBLIC RX3_Buffer + X:0241H PUBLIC TX1_Buffer + B:0098H.1 PUBLIC TI + C:365CH PUBLIC UART3_int + X:0261H PUBLIC TX3_Buffer + B:00B8H.4 PUBLIC PS + D:00D8H PUBLIC CCON + D:0099H PUBLIC SBUF + D:0087H PUBLIC PCON + D:0098H PUBLIC SCON + D:0089H PUBLIC TMOD + D:0088H PUBLIC TCON + C:3C66H PUBLIC _PrintString1 + C:3C79H PUBLIC _PrintString3 + C:3BD1H PUBLIC _Printbuffer1 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 10 + + + D:00AFH PUBLIC IE2 + D:002CH PUBLIC recv_start_flag + D:00F0H PUBLIC B + D:008EH PUBLIC AUXR + C:3B88H PUBLIC _Printbuffer3 + D:00C7H PUBLIC IAP_CONTR + D:002DH PUBLIC recv_time + C:3BAEH PUBLIC _TX1_write2buff + C:0066H PUBLIC _TX3_write2buff + D:00E0H PUBLIC ACC + B:00A8H.3 PUBLIC ET1 + C:3B60H PUBLIC UART3_config + D:00DFH PUBLIC IP3 + D:008DH PUBLIC TH1 + D:00D6H PUBLIC TH2 + D:00D4H PUBLIC TH3 + D:008BH PUBLIC TL1 + D:00D7H PUBLIC TL2 + D:00D5H PUBLIC TL3 + B:0088H.6 PUBLIC TR1 + D:00D1H PUBLIC T4T3M + D:00B7H PUBLIC IPH + D:00ADH PUBLIC S3BUF + B:0098H.4 PUBLIC REN + D:00ACH PUBLIC S3CON + D:008FH PUBLIC INT_CLKO + D:00D0H PUBLIC PSW + ------- PROC _UART_CONFIGURATION + D:0014H SYMBOL UARTx + D:0015H SYMBOL COMx + ------- DO + D:0018H SYMBOL i + D:0019H SYMBOL j + ------- ENDDO + C:225AH LINE# 37 + C:2262H LINE# 38 + C:2262H LINE# 43 + C:226BH LINE# 44 + C:226BH LINE# 45 + C:226EH LINE# 46 + C:2270H LINE# 47 + C:2272H LINE# 48 + C:2274H LINE# 49 + C:2276H LINE# 50 + C:2278H LINE# 51 + C:227AH LINE# 52 + C:2290H LINE# 53 + C:22A7H LINE# 55 + C:22BCH LINE# 56 + C:22EAH LINE# 57 + C:22F5H LINE# 58 + C:2300H LINE# 59 + C:230DH LINE# 60 + C:230DH LINE# 61 + C:2326H LINE# 62 + C:233DH LINE# 63 + C:2353H LINE# 64 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 11 + + + C:2364H LINE# 65 + C:2364H LINE# 66 + C:2366H LINE# 67 + C:2369H LINE# 68 + C:236CH LINE# 69 + C:236FH LINE# 70 + C:2372H LINE# 71 + C:2381H LINE# 72 + C:2384H LINE# 73 + C:2386H LINE# 74 + C:2389H LINE# 75 + C:238CH LINE# 76 + C:238EH LINE# 77 + C:2390H LINE# 78 + C:2395H LINE# 79 + C:2395H LINE# 80 + C:2398H LINE# 81 + C:239BH LINE# 82 + C:239EH LINE# 83 + C:23A1H LINE# 84 + C:23B0H LINE# 85 + C:23B3H LINE# 86 + C:23B6H LINE# 87 + C:23B9H LINE# 88 + C:23BBH LINE# 89 + C:23BEH LINE# 90 + C:23BEH LINE# 91 + C:23CAH LINE# 92 + C:23CAH LINE# 93 + C:23D8H LINE# 94 + C:23DBH LINE# 95 + C:23DDH LINE# 96 + C:23E1H LINE# 97 + C:23E1H LINE# 98 + C:23EFH LINE# 99 + C:23F2H LINE# 100 + C:23F2H LINE# 101 + C:2405H LINE# 102 + C:2407H LINE# 103 + C:2414H LINE# 104 + C:2416H LINE# 105 + C:2426H LINE# 106 + C:2429H LINE# 107 + C:2429H LINE# 149 + C:2432H LINE# 150 + C:2432H LINE# 151 + C:2435H LINE# 152 + C:2437H LINE# 153 + C:2439H LINE# 154 + C:243BH LINE# 155 + C:243DH LINE# 156 + C:243FH LINE# 157 + C:2441H LINE# 158 + C:2457H LINE# 159 + C:246EH LINE# 161 + C:2484H LINE# 162 + C:2484H LINE# 163 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 12 + + + C:2493H LINE# 164 + C:24C5H LINE# 165 + C:24D0H LINE# 166 + C:24D3H LINE# 167 + C:24ECH LINE# 168 + C:2503H LINE# 169 + C:2519H LINE# 170 + C:2529H LINE# 171 + C:2529H LINE# 172 + C:252CH LINE# 173 + C:253BH LINE# 174 + C:253EH LINE# 175 + C:2541H LINE# 176 + C:2544H LINE# 177 + C:2546H LINE# 178 + C:254BH LINE# 179 + C:254BH LINE# 180 + C:254EH LINE# 181 + C:2551H LINE# 182 + C:2554H LINE# 183 + C:2557H LINE# 184 + C:2566H LINE# 185 + C:2569H LINE# 186 + C:256CH LINE# 187 + C:256FH LINE# 188 + C:2571H LINE# 189 + C:2574H LINE# 190 + C:2574H LINE# 191 + C:2577H LINE# 192 + C:258BH LINE# 193 + C:258EH LINE# 194 + C:259CH LINE# 195 + C:259FH LINE# 196 + C:25AFH LINE# 197 + C:25B2H LINE# 198 + C:25B2H LINE# 252 + C:25B4H LINE# 253 + ------- ENDPROC _UART_CONFIGURATION + ------- PROC _TX1_WRITE2BUFF + D:0007H SYMBOL dat + C:3BAEH LINE# 259 + C:3BAEH LINE# 260 + C:3BAEH LINE# 261 + C:3BBBH LINE# 262 + C:3BC7H LINE# 264 + C:3BCBH LINE# 265 + C:3BCBH LINE# 266 + C:3BCEH LINE# 267 + C:3BD0H LINE# 268 + C:3BD0H LINE# 269 + ------- ENDPROC _TX1_WRITE2BUFF + ------- PROC _PRINTSTRING1 + D:0001H SYMBOL puts + C:3C66H LINE# 271 + C:3C66H LINE# 272 + C:3C66H LINE# 273 + C:3C78H LINE# 274 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 13 + + + ------- ENDPROC _PRINTSTRING1 + ------- PROC _PRINTBUFFER1 + D:0047H SYMBOL puts + D:0005H SYMBOL len + ------- DO + D:0006H SYMBOL i + ------- ENDDO + C:3BD1H LINE# 275 + C:3BD7H LINE# 276 + C:3BD7H LINE# 278 + C:3BF3H LINE# 279 + ------- ENDPROC _PRINTBUFFER1 + ------- PROC UART1_INT + ------- DO + D:001DH SYMBOL stage + D:0007H SYMBOL dat + ------- ENDDO + C:34BDH LINE# 283 + C:34CAH LINE# 287 + C:34CDH LINE# 288 + C:34CDH LINE# 289 + C:34CFH LINE# 290 + C:34D2H LINE# 291 + C:34DEH LINE# 293 + C:34E2H LINE# 294 + C:34E2H LINE# 295 + C:34E4H LINE# 296 + C:34EEH LINE# 297 + C:34F1H LINE# 298 + C:34F1H LINE# 299 + C:34F3H LINE# 300 + C:34F5H LINE# 302 + C:34F5H LINE# 303 + C:34F8H LINE# 304 + C:34F8H LINE# 305 + C:34FDH LINE# 306 + C:34FDH LINE# 307 + C:3500H LINE# 308 + C:3500H LINE# 309 + C:3511H LINE# 310 + C:3514H LINE# 311 + C:3514H LINE# 312 + C:3514H LINE# 314 + C:3517H LINE# 315 + C:3517H LINE# 316 + C:3519H LINE# 317 + C:351FH LINE# 318 + C:351FH LINE# 319 + C:352DH LINE# 320 + C:3539H LINE# 321 + C:353BH LINE# 322 + C:353EH LINE# 323 + C:353EH LINE# 324 + ------- ENDPROC UART1_INT + ------- PROC _TX3_WRITE2BUFF + D:0007H SYMBOL dat + C:0066H LINE# 374 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 14 + + + C:0066H LINE# 375 + C:0066H LINE# 376 + C:0073H LINE# 377 + C:007FH LINE# 379 + C:0083H LINE# 380 + C:0083H LINE# 381 + C:0086H LINE# 382 + C:0089H LINE# 383 + C:0089H LINE# 384 + ------- ENDPROC _TX3_WRITE2BUFF + ------- PROC _PRINTSTRING3 + D:0001H SYMBOL puts + C:3C79H LINE# 386 + C:3C79H LINE# 387 + C:3C79H LINE# 388 + C:3C8BH LINE# 389 + ------- ENDPROC _PRINTSTRING3 + ------- PROC _PRINTBUFFER3 + D:0009H SYMBOL puts + D:0005H SYMBOL len + ------- DO + D:0006H SYMBOL i + ------- ENDDO + C:3B88H LINE# 391 + C:3B8EH LINE# 392 + C:3B8EH LINE# 394 + C:3BADH LINE# 395 + ------- ENDPROC _PRINTBUFFER3 + ------- PROC UART3_INT + C:365CH LINE# 397 + C:3669H LINE# 399 + C:366EH LINE# 400 + C:366EH LINE# 401 + C:3671H LINE# 402 + C:367DH LINE# 403 + C:3680H LINE# 404 + C:3684H LINE# 405 + C:3684H LINE# 406 + C:368EH LINE# 407 + C:369FH LINE# 408 + C:36A2H LINE# 409 + C:36A2H LINE# 410 + C:36A2H LINE# 412 + C:36A7H LINE# 413 + C:36A7H LINE# 414 + C:36AAH LINE# 415 + C:36B0H LINE# 416 + C:36B0H LINE# 417 + C:36BEH LINE# 418 + C:36CAH LINE# 419 + C:36CCH LINE# 420 + C:36CFH LINE# 421 + C:36CFH LINE# 422 + ------- ENDPROC UART3_INT + ------- PROC UART3_CONFIG + ------- DO + D:0008H SYMBOL COMx_InitStructure + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 15 + + + ------- ENDDO + C:3B60H LINE# 471 + C:3B60H LINE# 472 + C:3B60H LINE# 474 + C:3B63H LINE# 475 + C:3B66H LINE# 476 + C:3B72H LINE# 477 + C:3B75H LINE# 478 + C:3B78H LINE# 479 + C:3B7BH LINE# 480 + C:3B7EH LINE# 481 + ------- ENDPROC UART3_CONFIG + ------- ENDMOD UART + + ------- MODULE UART_SET + 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 + C:3AE4H PUBLIC _sumfunc + X:0000H PUBLIC s_recv + D:00E8H PUBLIC P6 + C:2CB4H PUBLIC Usart_answer + D:00F8H PUBLIC P7 + D:004BH PUBLIC debug + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + D:00F0H PUBLIC B + C:00FEH PUBLIC Usart_Deal_Data + D:00E0H PUBLIC ACC + X:00C6H PUBLIC g_Usart + X:00E9H PUBLIC g_answer + C:3274H PUBLIC Usart_judge_Data + D:00D0H PUBLIC PSW + ------- PROC USART_JUDGE_DATA + ------- DO + D:0008H SYMBOL len + D:0007H SYMBOL i + D:0009H SYMBOL sum + ------- ENDDO + C:3274H LINE# 20 + C:3274H LINE# 21 + C:3274H LINE# 22 + C:3277H LINE# 24 + C:3279H LINE# 25 + C:327DH LINE# 27 + C:32AAH LINE# 28 + C:32AAH LINE# 29 + C:32ADH LINE# 40 + C:32ADH LINE# 41 + C:32B0H LINE# 42 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 16 + + + C:32B7H LINE# 43 + C:32B7H LINE# 44 + C:32CFH LINE# 45 + C:32D2H LINE# 46 + C:32D5H LINE# 47 + C:32E2H LINE# 49 + C:32E2H LINE# 52 + C:32EEH LINE# 53 + C:32EEH LINE# 54 + C:32FDH LINE# 55 + C:3300H LINE# 56 + C:3305H LINE# 57 + C:3305H LINE# 58 + C:330AH LINE# 59 + C:330AH LINE# 60 + C:331AH LINE# 61 + C:331AH LINE# 62 + C:3324H LINE# 64 + C:332BH LINE# 65 + C:332BH LINE# 66 + C:332BH LINE# 67 + C:332DH LINE# 69 + C:332DH LINE# 70 + C:3337H LINE# 71 + C:3337H LINE# 72 + C:333AH LINE# 73 + C:3340H LINE# 74 + C:3343H LINE# 75 + C:3345H LINE# 77 + C:3345H LINE# 78 + C:334BH LINE# 79 + C:334BH LINE# 80 + C:334BH LINE# 81 + C:3353H LINE# 82 + C:3353H LINE# 83 + C:3353H LINE# 84 + C:3353H LINE# 85 + C:3353H LINE# 86 + ------- ENDPROC USART_JUDGE_DATA + ------- PROC USART_DEAL_DATA + ------- DO + D:0008H SYMBOL i + ------- ENDDO + C:00FEH LINE# 88 + C:00FEH LINE# 89 + C:00FEH LINE# 91 + C:0107H LINE# 92 + C:0107H LINE# 93 + C:010BH LINE# 94 + C:010BH LINE# 95 + C:0114H LINE# 96 + C:0114H LINE# 97 + C:0145H LINE# 98 + C:0145H LINE# 100 + C:0145H LINE# 101 + C:0149H LINE# 102 + C:0149H LINE# 103 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 17 + + + C:0152H LINE# 104 + C:0152H LINE# 105 + C:0158H LINE# 106 + C:015BH LINE# 107 + C:015EH LINE# 109 + C:015EH LINE# 110 + C:0164H LINE# 111 + C:0168H LINE# 112 + C:0168H LINE# 113 + C:0171H LINE# 114 + C:0171H LINE# 116 + C:0174H LINE# 117 + C:0174H LINE# 118 + C:0191H LINE# 119 + C:0191H LINE# 120 + C:01A3H LINE# 121 + C:01B4H LINE# 122 + C:01DCH LINE# 124 + C:01FDH LINE# 125 + C:01FDH LINE# 126 + C:020FH LINE# 127 + C:020FH LINE# 129 + C:0230H LINE# 130 + C:0230H LINE# 131 + C:0242H LINE# 132 + C:0242H LINE# 134 + C:02BEH LINE# 135 + C:02E6H LINE# 137 + C:0302H LINE# 141 + C:0316H LINE# 142 + C:0316H LINE# 143 + C:0328H LINE# 144 + C:0328H LINE# 147 + C:0355H LINE# 148 + C:0355H LINE# 149 + C:03B5H LINE# 150 + C:03DDH LINE# 151 + C:03DDH LINE# 152 + C:03F3H LINE# 153 + C:03F3H LINE# 154 + C:03F3H LINE# 156 + C:0420H LINE# 157 + C:0420H LINE# 158 + C:047EH LINE# 159 + C:04A6H LINE# 160 + C:04A6H LINE# 161 + C:04BCH LINE# 162 + C:04BCH LINE# 163 + C:04BCH LINE# 164 + C:04BCH LINE# 165 + C:04C7H LINE# 168 + C:04CAH LINE# 169 + C:04CAH LINE# 170 + C:04E7H LINE# 171 + C:04E7H LINE# 172 + C:04F9H LINE# 173 + C:050AH LINE# 174 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 18 + + + C:0532H LINE# 176 + C:0553H LINE# 177 + C:0553H LINE# 178 + C:0565H LINE# 179 + C:0565H LINE# 181 + C:0586H LINE# 182 + C:0586H LINE# 183 + C:0598H LINE# 184 + C:0598H LINE# 186 + C:0614H LINE# 187 + C:063CH LINE# 189 + C:0658H LINE# 194 + C:066CH LINE# 195 + C:066CH LINE# 196 + C:067EH LINE# 197 + C:067EH LINE# 200 + C:06ABH LINE# 201 + C:06ABH LINE# 202 + C:070BH LINE# 203 + C:0733H LINE# 204 + C:0733H LINE# 205 + C:0749H LINE# 206 + C:0749H LINE# 207 + C:0749H LINE# 210 + C:0776H LINE# 211 + C:0776H LINE# 212 + C:07D4H LINE# 213 + C:07FCH LINE# 214 + C:07FCH LINE# 215 + C:0812H LINE# 216 + C:0812H LINE# 217 + C:0812H LINE# 218 + C:0812H LINE# 219 + C:081DH LINE# 221 + C:0820H LINE# 222 + C:0823H LINE# 226 + C:0823H LINE# 227 + C:0829H LINE# 228 + C:082DH LINE# 229 + C:082DH LINE# 230 + C:0836H LINE# 231 + C:0836H LINE# 233 + C:0839H LINE# 234 + C:0839H LINE# 235 + C:0856H LINE# 236 + C:0856H LINE# 237 + C:0867H LINE# 238 + C:0879H LINE# 239 + C:0890H LINE# 240 + C:08A7H LINE# 242 + C:08BEH LINE# 243 + C:08BEH LINE# 244 + C:08C5H LINE# 245 + C:08C5H LINE# 246 + C:08D6H LINE# 247 + C:08D6H LINE# 249 + C:08DAH LINE# 250 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 19 + + + C:08DAH LINE# 251 + C:08ECH LINE# 252 + C:08ECH LINE# 254 + C:08F4H LINE# 255 + C:08F4H LINE# 256 + C:090AH LINE# 257 + C:090AH LINE# 258 + C:091BH LINE# 259 + C:091DH LINE# 260 + C:091DH LINE# 262 + C:0931H LINE# 263 + C:0931H LINE# 264 + C:0943H LINE# 265 + C:0943H LINE# 266 + C:0943H LINE# 267 + C:0943H LINE# 268 + C:0943H LINE# 269 + C:0943H LINE# 270 + C:094EH LINE# 273 + C:0951H LINE# 274 + C:0951H LINE# 275 + C:096EH LINE# 276 + C:096EH LINE# 277 + C:097FH LINE# 278 + C:0991H LINE# 279 + C:09A8H LINE# 280 + C:09BFH LINE# 282 + C:09D6H LINE# 283 + C:09D6H LINE# 284 + C:09DDH LINE# 285 + C:09DDH LINE# 286 + C:09EEH LINE# 287 + C:09EEH LINE# 289 + C:09F2H LINE# 290 + C:09F2H LINE# 291 + C:0A04H LINE# 292 + C:0A04H LINE# 294 + C:0A0CH LINE# 295 + C:0A0CH LINE# 296 + C:0A22H LINE# 297 + C:0A22H LINE# 298 + C:0A33H LINE# 299 + C:0A35H LINE# 300 + C:0A35H LINE# 302 + C:0A49H LINE# 303 + C:0A49H LINE# 304 + C:0A5BH LINE# 305 + C:0A5BH LINE# 306 + C:0A5BH LINE# 307 + C:0A5BH LINE# 308 + C:0A5BH LINE# 309 + C:0A5BH LINE# 310 + C:0A66H LINE# 311 + C:0A69H LINE# 312 + C:0A6CH LINE# 316 + C:0A6CH LINE# 317 + C:0A72H LINE# 319 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 20 + + + C:0A76H LINE# 320 + C:0A76H LINE# 321 + C:0A7FH LINE# 322 + C:0A7FH LINE# 325 + C:0A86H LINE# 326 + C:0A86H LINE# 327 + C:0A93H LINE# 328 + C:0A96H LINE# 329 + C:0A96H LINE# 330 + C:0AB7H LINE# 331 + C:0AB7H LINE# 332 + C:0AC9H LINE# 333 + C:0AC9H LINE# 334 + C:0AD0H LINE# 335 + C:0AD0H LINE# 337 + C:0AD7H LINE# 338 + C:0AD7H LINE# 339 + C:0AE4H LINE# 340 + C:0AE7H LINE# 341 + C:0AE7H LINE# 342 + C:0B08H LINE# 343 + C:0B08H LINE# 344 + C:0B1AH LINE# 345 + C:0B1AH LINE# 346 + C:0B21H LINE# 347 + C:0B21H LINE# 349 + C:0B2BH LINE# 350 + C:0B2BH LINE# 351 + C:0B36H LINE# 353 + C:0B39H LINE# 354 + C:0B39H LINE# 357 + C:0B4BH LINE# 358 + C:0B5CH LINE# 360 + C:0BD8H LINE# 361 + C:0C00H LINE# 362 + C:0C21H LINE# 363 + C:0C21H LINE# 364 + C:0C35H LINE# 365 + C:0C35H LINE# 368 + C:0C62H LINE# 369 + C:0C62H LINE# 370 + C:0CC2H LINE# 371 + C:0CEAH LINE# 372 + C:0CEAH LINE# 373 + C:0D00H LINE# 374 + C:0D00H LINE# 375 + C:0D00H LINE# 377 + C:0D2DH LINE# 378 + C:0D2DH LINE# 379 + C:0D8BH LINE# 380 + C:0DB3H LINE# 381 + C:0DB3H LINE# 382 + C:0DC9H LINE# 383 + C:0DC9H LINE# 384 + C:0DC9H LINE# 385 + C:0DD4H LINE# 386 + C:0DD4H LINE# 389 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 21 + + + C:0DD7H LINE# 390 + C:0DDAH LINE# 394 + C:0DDAH LINE# 395 + C:0DE0H LINE# 396 + C:0DE4H LINE# 397 + C:0DE4H LINE# 398 + C:0DEDH LINE# 399 + C:0DEDH LINE# 401 + C:0DF0H LINE# 402 + C:0DF0H LINE# 403 + C:0E0DH LINE# 404 + C:0E0DH LINE# 405 + C:0E1CH LINE# 406 + C:0E1CH LINE# 407 + C:0E2EH LINE# 409 + C:0E33H LINE# 410 + C:0E33H LINE# 412 + C:0E41H LINE# 413 + C:0E41H LINE# 415 + C:0E46H LINE# 416 + C:0E57H LINE# 417 + C:0E68H LINE# 418 + C:0E7BH LINE# 419 + C:0E8CH LINE# 420 + C:0E8CH LINE# 422 + C:0E9FH LINE# 423 + C:0E9FH LINE# 424 + C:0EB3H LINE# 425 + C:0EB3H LINE# 426 + C:0EC5H LINE# 428 + C:0ECAH LINE# 429 + C:0ECCH LINE# 430 + C:0ECCH LINE# 432 + C:0EE2H LINE# 433 + C:0EE2H LINE# 435 + C:0EE7H LINE# 436 + C:0EF8H LINE# 437 + C:0F09H LINE# 438 + C:0F1CH LINE# 439 + C:0F2DH LINE# 440 + C:0F2DH LINE# 441 + C:0F2DH LINE# 442 + C:0F2DH LINE# 443 + C:0F2DH LINE# 444 + C:0F39H LINE# 447 + C:0F3CH LINE# 448 + C:0F3CH LINE# 449 + C:0F59H LINE# 450 + C:0F59H LINE# 451 + C:0F68H LINE# 452 + C:0F68H LINE# 453 + C:0F7AH LINE# 455 + C:0F82H LINE# 456 + C:0F82H LINE# 458 + C:0F90H LINE# 459 + C:0F90H LINE# 461 + C:0F98H LINE# 462 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 22 + + + C:0FA9H LINE# 463 + C:0FBAH LINE# 464 + C:0FCDH LINE# 465 + C:0FDEH LINE# 466 + C:0FDEH LINE# 468 + C:0FF1H LINE# 469 + C:0FF1H LINE# 470 + C:1005H LINE# 471 + C:1005H LINE# 472 + C:1017H LINE# 474 + C:101FH LINE# 475 + C:1021H LINE# 476 + C:1021H LINE# 479 + C:1037H LINE# 480 + C:1037H LINE# 482 + C:103FH LINE# 483 + C:1050H LINE# 484 + C:1061H LINE# 485 + C:1074H LINE# 486 + C:1085H LINE# 487 + C:1085H LINE# 488 + C:1085H LINE# 489 + C:1085H LINE# 490 + C:1085H LINE# 491 + C:1091H LINE# 492 + C:1094H LINE# 493 + C:1096H LINE# 494 + C:1096H LINE# 495 + C:109CH LINE# 496 + C:10A0H LINE# 497 + C:10A0H LINE# 498 + C:10A9H LINE# 499 + C:10A9H LINE# 500 + C:10AFH LINE# 501 + C:10B5H LINE# 502 + C:10B7H LINE# 503 + C:10B7H LINE# 504 + C:10BDH LINE# 505 + C:10C3H LINE# 506 + C:10C7H LINE# 507 + C:10C7H LINE# 508 + C:10D0H LINE# 509 + C:10D0H LINE# 510 + C:10D0H LINE# 511 + C:10D0H LINE# 512 + C:10D5H LINE# 513 + C:10D5H LINE# 514 + ------- ENDPROC USART_DEAL_DATA + ------- PROC USART_ANSWER + ------- DO + D:0007H SYMBOL i + D:0008H SYMBOL checksum + ------- ENDDO + C:2CB4H LINE# 516 + C:2CB4H LINE# 517 + C:2CB4H LINE# 518 + C:2CB6H LINE# 519 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 23 + + + C:2CB8H LINE# 520 + C:2CC1H LINE# 521 + C:2CC1H LINE# 522 + C:2CC7H LINE# 523 + C:2CCFH LINE# 524 + C:2CD3H LINE# 525 + C:2CDBH LINE# 526 + C:2CDFH LINE# 527 + C:2CE8H LINE# 528 + C:2CE8H LINE# 529 + C:2CE8H LINE# 530 + C:2D13H LINE# 531 + C:2D28H LINE# 532 + C:2D28H LINE# 533 + C:2D36H LINE# 534 + C:2D36H LINE# 535 + C:2D3AH LINE# 536 + C:2D47H LINE# 537 + C:2D4DH LINE# 539 + C:2D58H LINE# 541 + C:2D58H LINE# 542 + C:2D58H LINE# 544 + C:2D58H LINE# 545 + C:2D5DH LINE# 546 + C:2D6AH LINE# 547 + C:2D6AH LINE# 548 + C:2D70H LINE# 549 + C:2D70H LINE# 550 + C:2D76H LINE# 551 + C:2D7EH LINE# 552 + C:2D82H LINE# 553 + C:2D8AH LINE# 554 + C:2D8EH LINE# 555 + C:2D9AH LINE# 556 + C:2DA0H LINE# 557 + C:2DABH LINE# 558 + C:2DAFH LINE# 559 + C:2DAFH LINE# 560 + C:2DB8H LINE# 561 + C:2DB8H LINE# 564 + C:2DBDH LINE# 565 + C:2DCAH LINE# 566 + C:2DCAH LINE# 568 + C:2DD0H LINE# 569 + C:2DD0H LINE# 570 + C:2DD4H LINE# 571 + C:2DDCH LINE# 572 + C:2DE0H LINE# 573 + C:2DE8H LINE# 574 + C:2DECH LINE# 575 + C:2DF2H LINE# 576 + C:2DF5H LINE# 578 + C:2E02H LINE# 579 + C:2E08H LINE# 580 + C:2E13H LINE# 581 + C:2E17H LINE# 582 + C:2E17H LINE# 583 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 24 + + + C:2E20H LINE# 584 + C:2E20H LINE# 585 + C:2E25H LINE# 586 + C:2E32H LINE# 587 + C:2E32H LINE# 588 + ------- ENDPROC USART_ANSWER + ------- PROC _SUMFUNC + D:0009H SYMBOL answer + D:0005H SYMBOL len + ------- DO + D:0007H SYMBOL m + D:0006H SYMBOL j + ------- ENDDO + C:3AE4H LINE# 591 + C:3AEAH LINE# 592 + C:3AEAH LINE# 593 + C:3AECH LINE# 595 + C:3AF2H LINE# 596 + C:3AF2H LINE# 597 + C:3AF7H LINE# 598 + C:3B07H LINE# 599 + C:3B0AH LINE# 600 + C:3B0DH LINE# 601 + ------- ENDPROC _SUMFUNC + ------- ENDMOD UART_SET + + ------- MODULE PWM_CONTROL + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + C:3423H PUBLIC _PWM_write + D:00C0H PUBLIC P4 + D:00C8H PUBLIC P5 + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + C:399EH PUBLIC GPIO_config + C:1DD8H PUBLIC deal_command1 + D:00A8H PUBLIC IE + C:10D6H PUBLIC deal_command2 + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + X:0110H PUBLIC s_pwm + C:2FC1H PUBLIC pwm_config + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + C:37BCH PUBLIC show_light + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + C:3C52H PUBLIC _Close_Light + C:38ECH PUBLIC _Open_Light + D:00D0H PUBLIC PSW + ------- PROC GPIO_CONFIG + ------- DO + D:0008H SYMBOL GPIO_InitStructure + ------- ENDDO + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 25 + + + C:399EH LINE# 15 + C:399EH LINE# 16 + C:399EH LINE# 19 + C:39A1H LINE# 20 + C:39A4H LINE# 21 + C:39AEH LINE# 24 + C:39B1H LINE# 25 + C:39B4H LINE# 26 + C:39BFH LINE# 28 + C:39C2H LINE# 29 + C:39C5H LINE# 30 + C:39D0H LINE# 33 + C:39D3H LINE# 34 + C:39D6H LINE# 35 + ------- ENDPROC GPIO_CONFIG + ------- PROC PWM_CONFIG + ------- DO + D:0007H SYMBOL i + D:0008H SYMBOL PWM15_InitStructure + ------- ENDDO + C:2FC1H LINE# 38 + C:2FC1H LINE# 39 + C:2FC1H LINE# 43 + C:2FC4H LINE# 44 + C:2FCAH LINE# 45 + C:2FCDH LINE# 46 + C:2FCFH LINE# 47 + C:2FD2H LINE# 49 + C:2FDBH LINE# 50 + C:2FE6H LINE# 52 + C:2FEFH LINE# 53 + C:2FF8H LINE# 54 + C:3001H LINE# 55 + C:300AH LINE# 56 + C:3013H LINE# 57 + C:301CH LINE# 58 + C:3025H LINE# 59 + C:302EH LINE# 61 + C:3037H LINE# 62 + C:3040H LINE# 63 + C:3049H LINE# 64 + C:3052H LINE# 66 + C:3061H LINE# 67 + C:3063H LINE# 68 + C:3063H LINE# 69 + C:3076H LINE# 70 + C:307AH LINE# 71 + C:3089H LINE# 72 + C:3099H LINE# 73 + C:30A9H LINE# 74 + C:30B9H LINE# 75 + C:30C9H LINE# 76 + C:30D9H LINE# 77 + C:30E9H LINE# 78 + C:30F9H LINE# 80 + C:3109H LINE# 81 + C:3119H LINE# 82 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 26 + + + C:3129H LINE# 83 + ------- ENDPROC PWM_CONFIG + ------- PROC DEAL_COMMAND1 + ------- DO + D:0008H SYMBOL i + D:003BH SYMBOL systick_command1 + ------- ENDDO + C:1DD8H LINE# 89 + C:1DD8H LINE# 90 + C:1DD8H LINE# 91 + C:1DDDH LINE# 94 + C:1E01H LINE# 95 + C:1E01H LINE# 96 + C:1E0DH LINE# 97 + C:1E12H LINE# 98 + C:1E12H LINE# 99 + C:1E2FH LINE# 100 + C:1E2FH LINE# 101 + C:1E5EH LINE# 102 + C:1E5EH LINE# 104 + C:1EBEH LINE# 105 + C:1EFEH LINE# 107 + C:1F08H LINE# 108 + C:1F08H LINE# 109 + C:1F16H LINE# 110 + C:1F18H LINE# 112 + C:1F18H LINE# 113 + C:1F89H LINE# 114 + C:1F89H LINE# 116 + C:1FB6H LINE# 117 + C:1FB6H LINE# 118 + C:1FCEH LINE# 119 + C:1FCEH LINE# 120 + C:1FCEH LINE# 124 + C:1FFDH LINE# 125 + C:1FFDH LINE# 127 + C:205DH LINE# 128 + C:209DH LINE# 130 + C:20A7H LINE# 131 + C:20A7H LINE# 132 + C:20B5H LINE# 133 + C:20B7H LINE# 135 + C:20B7H LINE# 136 + C:2128H LINE# 137 + C:2128H LINE# 139 + C:21B1H LINE# 140 + C:21B1H LINE# 141 + C:21C8H LINE# 142 + C:21E6H LINE# 143 + C:21E6H LINE# 144 + C:21E6H LINE# 147 + C:2213H LINE# 148 + C:2213H LINE# 149 + C:223AH LINE# 150 + C:2248H LINE# 151 + C:2248H LINE# 152 + C:2248H LINE# 153 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 27 + + + C:2259H LINE# 154 + C:2259H LINE# 155 + ------- ENDPROC DEAL_COMMAND1 + ------- PROC DEAL_COMMAND2 + ------- DO + D:0008H SYMBOL i + D:003FH SYMBOL systick_command2 + ------- ENDDO + C:10D6H LINE# 157 + C:10D6H LINE# 158 + C:10D6H LINE# 159 + C:10DBH LINE# 161 + C:10FFH LINE# 162 + C:10FFH LINE# 163 + C:110BH LINE# 164 + C:1110H LINE# 165 + C:1110H LINE# 166 + C:112DH LINE# 167 + C:112DH LINE# 168 + C:1156H LINE# 169 + C:1156H LINE# 171 + C:1156H LINE# 173 + C:1173H LINE# 174 + C:1173H LINE# 175 + C:11F1H LINE# 176 + C:1210H LINE# 177 + C:121AH LINE# 178 + C:121AH LINE# 179 + C:1231H LINE# 180 + C:1233H LINE# 182 + C:1233H LINE# 183 + C:12A4H LINE# 184 + C:12A4H LINE# 185 + C:12D0H LINE# 186 + C:12D0H LINE# 187 + C:12E7H LINE# 188 + C:1305H LINE# 189 + C:131CH LINE# 190 + C:131CH LINE# 191 + C:131CH LINE# 193 + C:133BH LINE# 194 + C:133BH LINE# 195 + C:13B9H LINE# 196 + C:13F8H LINE# 197 + C:13F8H LINE# 198 + C:1408H LINE# 199 + C:1408H LINE# 200 + C:1408H LINE# 201 + C:140BH LINE# 203 + C:140BH LINE# 204 + C:1444H LINE# 205 + C:144EH LINE# 206 + C:144EH LINE# 207 + C:144EH LINE# 208 + C:1451H LINE# 210 + C:1451H LINE# 211 + C:1451H LINE# 212 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 28 + + + C:1451H LINE# 213 + C:1451H LINE# 214 + C:1451H LINE# 215 + C:1454H LINE# 218 + C:1454H LINE# 220 + C:1471H LINE# 221 + C:1471H LINE# 222 + C:14EFH LINE# 223 + C:150EH LINE# 224 + C:1518H LINE# 225 + C:1518H LINE# 226 + C:152FH LINE# 227 + C:1531H LINE# 229 + C:1531H LINE# 230 + C:15A2H LINE# 231 + C:15A2H LINE# 232 + C:15CEH LINE# 233 + C:15CEH LINE# 234 + C:15E6H LINE# 235 + C:1604H LINE# 236 + C:161BH LINE# 237 + C:161BH LINE# 238 + C:161BH LINE# 240 + C:163AH LINE# 241 + C:163AH LINE# 242 + C:16B8H LINE# 243 + C:16F7H LINE# 244 + C:16F7H LINE# 245 + C:170EH LINE# 246 + C:172CH LINE# 247 + C:1734H LINE# 248 + C:1737H LINE# 250 + C:1737H LINE# 251 + C:1770H LINE# 252 + C:177AH LINE# 253 + C:177AH LINE# 254 + C:178AH LINE# 255 + C:178DH LINE# 257 + C:178DH LINE# 258 + C:17FEH LINE# 259 + C:17FEH LINE# 260 + C:17FEH LINE# 261 + C:17FEH LINE# 262 + C:1800H LINE# 263 + C:1800H LINE# 265 + C:1817H LINE# 266 + C:1817H LINE# 267 + C:1817H LINE# 268 + C:1817H LINE# 269 + C:1828H LINE# 270 + C:1828H LINE# 271 + ------- ENDPROC DEAL_COMMAND2 + ------- PROC _CLOSE_LIGHT + D:0007H SYMBOL i + C:3C52H LINE# 275 + C:3C52H LINE# 276 + C:3C52H LINE# 277 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 29 + + + C:3C65H LINE# 278 + ------- ENDPROC _CLOSE_LIGHT + ------- PROC _OPEN_LIGHT + D:0009H SYMBOL pin + C:38ECH LINE# 281 + C:38EEH LINE# 282 + C:38EEH LINE# 283 + C:3949H LINE# 284 + ------- ENDPROC _OPEN_LIGHT + ------- PROC _PWM_WRITE + D:0007H SYMBOL i + D:000AH SYMBOL Val + C:3423H LINE# 286 + C:3427H LINE# 287 + C:3427H LINE# 288 + C:345BH LINE# 289 + C:345BH LINE# 290 + C:345BH LINE# 291 + C:3461H LINE# 292 + C:3463H LINE# 293 + C:3463H LINE# 294 + C:3469H LINE# 295 + C:346BH LINE# 296 + C:346BH LINE# 297 + C:3471H LINE# 298 + C:3473H LINE# 299 + C:3473H LINE# 300 + C:3479H LINE# 301 + C:347BH LINE# 302 + C:347BH LINE# 303 + C:3481H LINE# 304 + C:3483H LINE# 305 + C:3483H LINE# 306 + C:3489H LINE# 307 + C:348BH LINE# 308 + C:348BH LINE# 309 + C:3491H LINE# 310 + C:3493H LINE# 311 + C:3493H LINE# 312 + C:3499H LINE# 313 + C:349BH LINE# 314 + C:349BH LINE# 315 + C:34A1H LINE# 316 + C:34A3H LINE# 317 + C:34A3H LINE# 318 + C:34A9H LINE# 319 + C:34ABH LINE# 320 + C:34ABH LINE# 321 + C:34B1H LINE# 322 + C:34B3H LINE# 323 + C:34B3H LINE# 324 + C:34BCH LINE# 325 + C:34BCH LINE# 326 + C:34BCH LINE# 327 + ------- ENDPROC _PWM_WRITE + ------- PROC SHOW_LIGHT + ------- DO + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 30 + + + D:0008H SYMBOL i + ------- ENDDO + C:37BCH LINE# 328 + C:37BCH LINE# 329 + C:37BCH LINE# 331 + C:37C1H LINE# 332 + C:37C1H LINE# 333 + C:37EAH LINE# 334 + C:37EAH LINE# 335 + C:37EDH LINE# 336 + C:37EFH LINE# 338 + C:37EFH LINE# 339 + C:380EH LINE# 340 + C:380EH LINE# 341 + C:3821H LINE# 342 + ------- ENDPROC SHOW_LIGHT + ------- ENDMOD PWM_CONTROL + + ------- MODULE START_INIT + 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 + C:35D5H PUBLIC Start_Init + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + C:3BF4H PUBLIC Timer2_Init_1ms + D:00D8H PUBLIC CCON + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + D:00D0H PUBLIC PSW + ------- PROC START_INIT + ------- DO + D:0007H SYMBOL i + ------- ENDDO + C:35D5H LINE# 8 + C:35D5H LINE# 9 + C:35D5H LINE# 11 + C:35E4H LINE# 12 + C:35F3H LINE# 13 + C:3602H LINE# 14 + C:3608H LINE# 15 + C:360FH LINE# 16 + C:3617H LINE# 17 + C:3620H LINE# 19 + C:3622H LINE# 20 + C:3622H LINE# 21 + C:3633H LINE# 22 + C:3644H LINE# 23 + C:3657H LINE# 24 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 31 + + + C:365BH LINE# 25 + ------- ENDPROC START_INIT + ------- PROC TIMER2_INIT_1MS + ------- DO + D:0008H SYMBOL TIM_InitStructure + ------- ENDDO + C:3BF4H LINE# 28 + C:3BF4H LINE# 29 + C:3BF4H LINE# 31 + C:3BF7H LINE# 32 + C:3BFAH LINE# 33 + C:3BFDH LINE# 34 + C:3C00H LINE# 35 + C:3C02H LINE# 36 + C:3C08H LINE# 37 + C:3C0BH LINE# 38 + ------- ENDPROC TIMER2_INIT_1MS + ------- ENDMOD START_INIT + + ------- MODULE PWM15BIT + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + C:2E41H PUBLIC PWMxCR + D:00C0H PUBLIC P4 + C:394AH PUBLIC _PWM15Duty + D:00C8H PUBLIC P5 + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:00BAH PUBLIC P_SW2 + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + C:39E1H PUBLIC _PWMLevelSet + D:00D8H PUBLIC CCON + D:00F6H PUBLIC PWMCFG01 + D:00F7H PUBLIC PWMCFG23 + D:00FEH PUBLIC PWMCFG45 + D:0098H PUBLIC SCON + B:00A0H.3 PUBLIC P23 + D:0088H PUBLIC TCON + B:00A0H.4 PUBLIC P24 + B:00A0H.5 PUBLIC P25 + B:00A0H.6 PUBLIC P26 + B:00A0H.7 PUBLIC P27 + D:00F0H PUBLIC B + C:2F61H PUBLIC PWMxHLD + D:00E0H PUBLIC ACC + C:0026H PUBLIC PWM0_Handler + C:3A20H PUBLIC PWM1_Handler + C:3A51H PUBLIC PWM2_Handler + C:3A82H PUBLIC PWM3_Handler + C:36DAH PUBLIC _PWMChannelCtrl + C:3AB3H PUBLIC PWM4_Handler + C:2AFCH PUBLIC _PWM15_Init + D:00F1H PUBLIC PWMSET + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 32 + + + C:2EA1H PUBLIC PWMxT1 + C:2F01H PUBLIC PWMxT2 + C:3752H PUBLIC _qPWM15Duty + D:00D0H PUBLIC PSW + ------- PROC _PWMCHANNELCTRL + D:0007H SYMBOL PWM_id + D:0005H SYMBOL pwm_eno + D:0003H SYMBOL pwm_ini + D:0012H SYMBOL pwm_eni + D:0013H SYMBOL pwm_ent2i + D:0014H SYMBOL pwm_ent1i + ------- DO + D:0082H SYMBOL pPWMxCR + ------- ENDDO + C:36DAH LINE# 231 + C:36DAH LINE# 232 + C:36DAH LINE# 235 + C:36E3H LINE# 236 + C:36ECH LINE# 237 + C:36F5H LINE# 238 + C:36FFH LINE# 239 + C:3709H LINE# 240 + C:3713H LINE# 242 + C:3716H LINE# 243 + C:372CH LINE# 244 + C:374CH LINE# 245 + C:374FH LINE# 246 + C:3751H LINE# 247 + ------- ENDPROC _PWMCHANNELCTRL + ------- PROC _PWM15DUTY + D:0007H SYMBOL PWM_id + D:0004H SYMBOL dutyL + ------- DO + D:0082H SYMBOL pPWMxT1 + D:0082H SYMBOL pPWMxT2 + ------- ENDDO + C:394AH LINE# 258 + C:394AH LINE# 259 + C:394AH LINE# 263 + C:3953H LINE# 264 + C:395FH LINE# 267 + C:3962H LINE# 268 + C:3978H LINE# 269 + C:397FH LINE# 271 + C:3995H LINE# 272 + C:3999H LINE# 273 + C:399CH LINE# 274 + C:399DH LINE# 275 + ------- ENDPROC _PWM15DUTY + ------- PROC _QPWM15DUTY + D:0001H SYMBOL PWM_id + D:0004H SYMBOL dutyL + D:0002H SYMBOL dutyH + ------- DO + D:0082H SYMBOL pPWMxT1 + D:0082H SYMBOL pPWMxT2 + ------- ENDDO + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 33 + + + C:3752H LINE# 277 + C:3754H LINE# 278 + C:3754H LINE# 282 + C:375DH LINE# 283 + C:3769H LINE# 284 + C:3775H LINE# 286 + C:3778H LINE# 287 + C:378EH LINE# 288 + C:3797H LINE# 290 + C:37ADH LINE# 291 + C:37B6H LINE# 292 + C:37B9H LINE# 293 + C:37BBH LINE# 294 + ------- ENDPROC _QPWM15DUTY + ------- PROC _PWMLEVELSET + D:0007H SYMBOL PWM_id + D:0005H SYMBOL pwm_hldl + D:0003H SYMBOL pwm_hldh + ------- DO + D:0082H SYMBOL pPWMxHLD + ------- ENDDO + C:39E1H LINE# 304 + C:39E1H LINE# 305 + C:39E1H LINE# 308 + C:39EAH LINE# 309 + C:39F3H LINE# 310 + C:39FCH LINE# 312 + C:39FFH LINE# 313 + C:3A15H LINE# 314 + C:3A1AH LINE# 315 + C:3A1DH LINE# 316 + C:3A1FH LINE# 317 + ------- ENDPROC _PWMLEVELSET + ------- PROC _PWM15_INIT + D:0007H SYMBOL PWM_id + D:0001H SYMBOL PWMx + C:2AFCH LINE# 327 + C:2AFCH LINE# 328 + C:2AFCH LINE# 329 + C:2B05H LINE# 331 + C:2B08H LINE# 332 + C:2B0BH LINE# 333 + C:2B0BH LINE# 334 + C:2B16H LINE# 335 + C:2B19H LINE# 336 + C:2B2AH LINE# 337 + C:2B3CH LINE# 338 + C:2B4AH LINE# 339 + C:2B4DH LINE# 340 + C:2B4DH LINE# 342 + C:2B52H LINE# 343 + C:2B52H LINE# 344 + C:2B5DH LINE# 345 + C:2B60H LINE# 346 + C:2B71H LINE# 347 + C:2B83H LINE# 348 + C:2B91H LINE# 349 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 34 + + + C:2B94H LINE# 350 + C:2B94H LINE# 352 + C:2B99H LINE# 353 + C:2B99H LINE# 354 + C:2BA4H LINE# 355 + C:2BA7H LINE# 356 + C:2BB8H LINE# 357 + C:2BCAH LINE# 358 + C:2BD8H LINE# 359 + C:2BDBH LINE# 360 + C:2BDBH LINE# 362 + C:2BE0H LINE# 363 + C:2BE0H LINE# 364 + C:2BEBH LINE# 365 + C:2BEEH LINE# 366 + C:2BFFH LINE# 367 + C:2C11H LINE# 368 + C:2C1FH LINE# 369 + C:2C22H LINE# 370 + C:2C22H LINE# 372 + C:2C27H LINE# 373 + C:2C27H LINE# 374 + C:2C32H LINE# 375 + C:2C35H LINE# 376 + C:2C46H LINE# 377 + C:2C58H LINE# 378 + C:2C66H LINE# 379 + C:2C69H LINE# 380 + C:2C69H LINE# 382 + C:2C6EH LINE# 383 + C:2C6EH LINE# 384 + C:2C79H LINE# 385 + C:2C7CH LINE# 386 + C:2C8DH LINE# 387 + C:2C9FH LINE# 388 + C:2CADH LINE# 389 + C:2CB0H LINE# 390 + C:2CB0H LINE# 391 + C:2CB3H LINE# 392 + ------- ENDPROC _PWM15_INIT + ------- PROC PWM0_HANDLER + ------- DO + D:0007H SYMBOL store + ------- ENDDO + C:0026H LINE# 402 + C:0033H LINE# 405 + C:0035H LINE# 406 + C:0038H LINE# 408 + C:003DH LINE# 409 + C:003DH LINE# 410 + C:0040H LINE# 412 + C:0040H LINE# 413 + C:0046H LINE# 414 + C:0046H LINE# 415 + C:0048H LINE# 416 + C:004AH LINE# 417 + C:004AH LINE# 418 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 35 + + + C:004CH LINE# 419 + ------- ENDPROC PWM0_HANDLER + ------- PROC PWM1_HANDLER + ------- DO + D:0007H SYMBOL store + ------- ENDDO + C:3A20H LINE# 427 + C:3A2DH LINE# 430 + C:3A2FH LINE# 431 + C:3A32H LINE# 433 + C:3A37H LINE# 434 + C:3A37H LINE# 435 + C:3A3AH LINE# 437 + C:3A3AH LINE# 438 + C:3A40H LINE# 439 + C:3A40H LINE# 440 + C:3A42H LINE# 441 + C:3A44H LINE# 442 + C:3A44H LINE# 443 + C:3A46H LINE# 444 + ------- ENDPROC PWM1_HANDLER + ------- PROC PWM2_HANDLER + ------- DO + D:0007H SYMBOL store + ------- ENDDO + C:3A51H LINE# 452 + C:3A5EH LINE# 455 + C:3A60H LINE# 456 + C:3A63H LINE# 458 + C:3A68H LINE# 459 + C:3A68H LINE# 460 + C:3A6BH LINE# 462 + C:3A6BH LINE# 463 + C:3A71H LINE# 464 + C:3A71H LINE# 465 + C:3A73H LINE# 466 + C:3A75H LINE# 467 + C:3A75H LINE# 468 + C:3A77H LINE# 469 + ------- ENDPROC PWM2_HANDLER + ------- PROC PWM3_HANDLER + ------- DO + D:0007H SYMBOL store + ------- ENDDO + C:3A82H LINE# 477 + C:3A8FH LINE# 480 + C:3A91H LINE# 481 + C:3A94H LINE# 483 + C:3A99H LINE# 484 + C:3A99H LINE# 485 + C:3A9CH LINE# 487 + C:3A9CH LINE# 488 + C:3AA2H LINE# 489 + C:3AA2H LINE# 490 + C:3AA4H LINE# 491 + C:3AA6H LINE# 492 + C:3AA6H LINE# 493 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 36 + + + C:3AA8H LINE# 494 + ------- ENDPROC PWM3_HANDLER + ------- PROC PWM4_HANDLER + ------- DO + D:0007H SYMBOL store + ------- ENDDO + C:3AB3H LINE# 502 + C:3AC0H LINE# 505 + C:3AC2H LINE# 506 + C:3AC5H LINE# 508 + C:3ACAH LINE# 509 + C:3ACAH LINE# 510 + C:3ACDH LINE# 512 + C:3ACDH LINE# 513 + C:3AD3H LINE# 514 + C:3AD3H LINE# 515 + C:3AD5H LINE# 516 + C:3AD7H LINE# 517 + C:3AD7H LINE# 518 + C:3AD9H LINE# 519 + ------- ENDPROC PWM4_HANDLER + ------- ENDMOD PWM15BIT + + ------- MODULE TIMER + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + C:0007H PUBLIC timer0_int + D:0043H PUBLIC systick_1ms + D:00A0H PUBLIC P2 + C:0018H PUBLIC timer1_int + D:00B0H PUBLIC P3 + C:3C34H PUBLIC timer2_int + D:00C0H PUBLIC P4 + C:000AH PUBLIC timer3_int + D:00C8H PUBLIC P5 + C:001EH PUBLIC timer4_int + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + D:0098H PUBLIC SCON + D:0089H PUBLIC TMOD + D:0088H PUBLIC TCON + B:00E8H.3 PUBLIC P63 + B:00E8H.6 PUBLIC P66 + C:25B5H PUBLIC _Timer_Inilize + B:00E8H.7 PUBLIC P67 + D:00AFH PUBLIC IE2 + D:00F0H PUBLIC B + D:008EH PUBLIC AUXR + D:00E0H PUBLIC ACC + B:00A8H.1 PUBLIC ET0 + B:00A8H.3 PUBLIC ET1 + D:008CH PUBLIC TH0 + D:008DH PUBLIC TH1 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 37 + + + D:00D6H PUBLIC TH2 + D:00D4H PUBLIC TH3 + D:00D2H PUBLIC TH4 + D:008AH PUBLIC TL0 + D:008BH PUBLIC TL1 + D:00D7H PUBLIC TL2 + D:00D5H PUBLIC TL3 + B:00B8H.1 PUBLIC PT0 + D:00D3H PUBLIC TL4 + B:00B8H.3 PUBLIC PT1 + B:0088H.4 PUBLIC TR0 + B:0088H.6 PUBLIC TR1 + D:00D1H PUBLIC T4T3M + D:00B7H PUBLIC IPH + D:008FH PUBLIC INT_CLKO + D:00D0H PUBLIC PSW + ------- PROC TIMER0_INT + C:0007H LINE# 22 + C:0007H LINE# 24 + C:0009H LINE# 25 + ------- ENDPROC TIMER0_INT + ------- PROC TIMER1_INT + C:0018H LINE# 28 + C:0018H LINE# 30 + C:001AH LINE# 31 + ------- ENDPROC TIMER1_INT + ------- PROC TIMER2_INT + C:3C34H LINE# 34 + C:3C38H LINE# 36 + C:3C4DH LINE# 37 + ------- ENDPROC TIMER2_INT + ------- PROC TIMER3_INT + C:000AH LINE# 40 + C:000AH LINE# 43 + ------- ENDPROC TIMER3_INT + ------- PROC TIMER4_INT + C:001EH LINE# 46 + C:001EH LINE# 48 + C:0020H LINE# 49 + ------- ENDPROC TIMER4_INT + ------- PROC _TIMER_INILIZE + D:0005H SYMBOL TIM + D:0001H SYMBOL TIMx + C:25B5H LINE# 59 + C:25B7H LINE# 60 + C:25B7H LINE# 61 + C:25C0H LINE# 63 + C:25C6H LINE# 64 + C:25C6H LINE# 65 + C:25C8H LINE# 66 + C:25D5H LINE# 67 + C:25D7H LINE# 68 + C:25E6H LINE# 69 + C:2614H LINE# 71 + C:2620H LINE# 72 + C:2627H LINE# 73 + C:2634H LINE# 74 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 38 + + + C:263AH LINE# 75 + C:2643H LINE# 76 + C:2646H LINE# 77 + C:2654H LINE# 78 + C:2657H LINE# 80 + C:2669H LINE# 81 + C:2674H LINE# 82 + C:2677H LINE# 83 + C:2677H LINE# 85 + C:267FH LINE# 86 + C:267FH LINE# 87 + C:2681H LINE# 88 + C:268EH LINE# 89 + C:2690H LINE# 90 + C:269FH LINE# 91 + C:26CDH LINE# 92 + C:26D9H LINE# 93 + C:26E0H LINE# 94 + C:26EDH LINE# 95 + C:26F3H LINE# 96 + C:26FCH LINE# 97 + C:26FFH LINE# 98 + C:270DH LINE# 99 + C:2710H LINE# 101 + C:2722H LINE# 102 + C:272DH LINE# 103 + C:2730H LINE# 104 + C:2730H LINE# 106 + C:2735H LINE# 107 + C:2735H LINE# 108 + C:2738H LINE# 109 + C:2746H LINE# 110 + C:2749H LINE# 111 + C:2758H LINE# 112 + C:275FH LINE# 113 + C:276AH LINE# 114 + C:2778H LINE# 115 + C:277BH LINE# 116 + C:2789H LINE# 117 + C:278CH LINE# 119 + C:279EH LINE# 120 + C:27AAH LINE# 121 + C:27ADH LINE# 122 + C:27ADH LINE# 124 + C:27B2H LINE# 125 + C:27B2H LINE# 126 + C:27B5H LINE# 127 + C:27C3H LINE# 128 + C:27C6H LINE# 129 + C:27D5H LINE# 130 + C:27DCH LINE# 131 + C:27E7H LINE# 132 + C:27F5H LINE# 133 + C:27F8H LINE# 134 + C:2806H LINE# 135 + C:2809H LINE# 137 + C:281BH LINE# 138 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 39 + + + C:2827H LINE# 139 + C:282AH LINE# 140 + C:282AH LINE# 142 + C:282FH LINE# 143 + C:282FH LINE# 144 + C:2832H LINE# 145 + C:2840H LINE# 146 + C:2843H LINE# 147 + C:2852H LINE# 148 + C:2859H LINE# 149 + C:2864H LINE# 150 + C:2872H LINE# 151 + C:2875H LINE# 152 + C:2883H LINE# 153 + C:2886H LINE# 155 + C:2896H LINE# 156 + C:28A2H LINE# 157 + C:28A5H LINE# 158 + C:28A5H LINE# 159 + C:28A7H LINE# 160 + ------- ENDPROC _TIMER_INILIZE + ------- ENDMOD TIMER + + ------- MODULE KEY + 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 + C:3139H PUBLIC KEY_TEST + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + C:3C15H PUBLIC Key_Init + D:00D8H PUBLIC CCON + C:3354H PUBLIC Key_ScanTask + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + B:00C0H.4 PUBLIC P44 + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + D:0035H PUBLIC g_Key + D:00D0H PUBLIC PSW + ------- PROC KEY_INIT + ------- DO + D:0008H SYMBOL GPIO_InitStructure1 + ------- ENDDO + C:3C15H LINE# 8 + C:3C15H LINE# 9 + C:3C15H LINE# 12 + C:3C18H LINE# 13 + C:3C1BH LINE# 14 + C:3C25H LINE# 15 + ------- ENDPROC KEY_INIT + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 40 + + + ------- PROC KEY_SCANTASK + ------- DO + D:0007H SYMBOL i + D:0031H SYMBOL update_10ms + ------- ENDDO + C:3354H LINE# 18 + C:3354H LINE# 19 + C:3354H LINE# 23 + C:3378H LINE# 24 + C:3378H LINE# 25 + C:3384H LINE# 27 + C:3386H LINE# 28 + C:3386H LINE# 29 + C:3398H LINE# 30 + C:3398H LINE# 31 + C:3398H LINE# 32 + C:339BH LINE# 33 + C:339BH LINE# 34 + C:33A5H LINE# 35 + C:33A5H LINE# 36 + C:33A6H LINE# 37 + C:33A8H LINE# 39 + C:33A8H LINE# 40 + C:33AEH LINE# 41 + C:33B4H LINE# 42 + C:33B6H LINE# 43 + C:33B6H LINE# 44 + C:33B8H LINE# 46 + C:33B8H LINE# 47 + C:33BEH LINE# 48 + C:33C4H LINE# 49 + C:33C6H LINE# 50 + C:33C6H LINE# 51 + C:33C8H LINE# 52 + C:33C8H LINE# 53 + C:33CDH LINE# 54 + C:33D3H LINE# 55 + C:33D3H LINE# 56 + C:33D6H LINE# 57 + C:33D6H LINE# 58 + C:33DCH LINE# 59 + C:33E2H LINE# 60 + C:33E8H LINE# 61 + C:33E8H LINE# 62 + C:33EAH LINE# 64 + C:33EAH LINE# 65 + C:33F0H LINE# 66 + C:33F6H LINE# 67 + C:33FCH LINE# 68 + C:3402H LINE# 69 + C:3402H LINE# 70 + C:3404H LINE# 72 + C:3404H LINE# 73 + C:340AH LINE# 74 + C:340DH LINE# 75 + C:340DH LINE# 76 + C:3413H LINE# 77 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 41 + + + C:3419H LINE# 78 + C:3419H LINE# 79 + C:3419H LINE# 80 + C:3419H LINE# 81 + C:3422H LINE# 82 + C:3422H LINE# 83 + ------- ENDPROC KEY_SCANTASK + ------- PROC KEY_TEST + ------- DO + D:0007H SYMBOL flag + ------- ENDDO + C:3139H LINE# 86 + C:3139H LINE# 87 + C:3139H LINE# 89 + C:3142H LINE# 90 + C:3142H LINE# 91 + C:3144H LINE# 92 + C:314AH LINE# 93 + C:3189H LINE# 94 + C:3189H LINE# 95 + C:3189H LINE# 96 + C:3193H LINE# 97 + C:3196H LINE# 98 + C:3199H LINE# 99 + C:3199H LINE# 100 + C:31A3H LINE# 101 + C:31A6H LINE# 102 + C:31A9H LINE# 103 + C:31A9H LINE# 104 + C:31B3H LINE# 105 + C:31B6H LINE# 106 + C:31B9H LINE# 107 + C:31B9H LINE# 108 + C:31C3H LINE# 109 + C:31C6H LINE# 110 + C:31C8H LINE# 111 + C:31C8H LINE# 112 + C:31D2H LINE# 113 + C:31D5H LINE# 114 + C:31D7H LINE# 115 + C:31D7H LINE# 116 + C:31E1H LINE# 117 + C:31E4H LINE# 118 + C:31E6H LINE# 119 + C:31E6H LINE# 120 + C:31F0H LINE# 121 + C:31F3H LINE# 122 + C:31F5H LINE# 123 + C:31F5H LINE# 124 + C:31FFH LINE# 125 + C:3202H LINE# 126 + C:3204H LINE# 127 + C:3204H LINE# 128 + C:320EH LINE# 129 + C:3211H LINE# 130 + C:3213H LINE# 131 + C:3213H LINE# 132 + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 42 + + + C:321DH LINE# 133 + C:3220H LINE# 134 + C:3222H LINE# 135 + C:3222H LINE# 136 + C:322CH LINE# 137 + C:322FH LINE# 138 + C:3231H LINE# 139 + C:3231H LINE# 140 + C:323BH LINE# 141 + C:3244H LINE# 142 + C:3245H LINE# 143 + C:3245H LINE# 144 + C:3247H LINE# 145 + C:3247H LINE# 146 + C:325AH LINE# 147 + C:326AH LINE# 148 + C:326EH LINE# 149 + C:3273H LINE# 150 + C:3273H LINE# 151 + C:3273H LINE# 152 + C:3273H LINE# 153 + C:3273H LINE# 154 + C:3273H LINE# 155 + ------- ENDPROC KEY_TEST + ------- ENDMOD KEY + + ------- MODULE WDT + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + D:00C0H PUBLIC P4 + D:00C8H PUBLIC P5 + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + C:3B37H PUBLIC _WDT_Inilize + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + C:0003H PUBLIC WDT_Clear + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + D:00C1H PUBLIC WDT_CONTR + D:00D0H PUBLIC PSW + ------- PROC _WDT_INILIZE + D:0001H SYMBOL WDT + C:3B37H LINE# 22 + C:3B37H LINE# 23 + C:3B37H LINE# 24 + C:3B40H LINE# 26 + C:3B50H LINE# 27 + C:3B5CH LINE# 28 + C:3B5FH LINE# 29 + ------- ENDPROC _WDT_INILIZE + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 43 + + + ------- PROC WDT_CLEAR + C:0003H LINE# 32 + C:0003H LINE# 33 + C:0003H LINE# 34 + C:0006H LINE# 35 + ------- ENDPROC WDT_CLEAR + ------- ENDMOD WDT + + ------- MODULE ?C?FPADD + C:1830H PUBLIC ?C?FPADD + C:182CH PUBLIC ?C?FPSUB + ------- ENDMOD ?C?FPADD + + ------- MODULE ?C?FPDIV + C:1924H PUBLIC ?C?FPDIV + ------- ENDMOD ?C?FPDIV + + ------- MODULE ?C?FPCMP + C:19C3H PUBLIC ?C?FPCMP + C:19C1H PUBLIC ?C?FPCMP3 + ------- ENDMOD ?C?FPCMP + + ------- MODULE ?C?FCAST + C:1A38H PUBLIC ?C?FCASTC + C:1A33H PUBLIC ?C?FCASTI + C:1A2EH PUBLIC ?C?FCASTL + ------- ENDMOD ?C?FCAST + + ------- MODULE ?C?CASTF + C:1A6CH PUBLIC ?C?CASTF + ------- ENDMOD ?C?CASTF + + ------- MODULE ?C?CLDPTR + C:1AEDH PUBLIC ?C?CLDPTR + ------- ENDMOD ?C?CLDPTR + + ------- MODULE ?C?CLDOPTR + C:1B06H PUBLIC ?C?CLDOPTR + ------- ENDMOD ?C?CLDOPTR + + ------- MODULE ?C?IILDX + C:1B33H PUBLIC ?C?IILDX + ------- ENDMOD ?C?IILDX + + ------- MODULE ?C?ILDOPTR + C:1B49H PUBLIC ?C?ILDOPTR + ------- ENDMOD ?C?ILDOPTR + + ------- MODULE ?C?LMUL + C:1B81H PUBLIC ?C?LMUL + ------- ENDMOD ?C?LMUL + + ------- MODULE ?C?ULDIV + C:1C0CH PUBLIC ?C?ULDIV + ------- ENDMOD ?C?ULDIV + + ------- MODULE ?C?LNEG + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 44 + + + C:1C9EH PUBLIC ?C?LNEG + ------- ENDMOD ?C?LNEG + + ------- MODULE ?C?ULCMP + C:1CACH PUBLIC ?C?ULCMP + ------- ENDMOD ?C?ULCMP + + ------- MODULE ?C?ULSHR + C:1CBDH PUBLIC ?C?ULSHR + ------- ENDMOD ?C?ULSHR + + ------- MODULE ?C?LLDOPTR0 + C:1CD0H PUBLIC ?C?LLDOPTR0 + ------- ENDMOD ?C?LLDOPTR0 + + ------- MODULE ?C?LSTXDATA + C:1D00H PUBLIC ?C?LSTXDATA + ------- ENDMOD ?C?LSTXDATA + + ------- MODULE ?C?LSTKXDATA + C:1D0CH PUBLIC ?C?LSTKXDATA + ------- ENDMOD ?C?LSTKXDATA + + ------- MODULE ?C?OFFXADD + C:1D3DH PUBLIC ?C?OFFXADD + ------- ENDMOD ?C?OFFXADD + + ------- MODULE ?C?LIMUL + C:1D49H PUBLIC ?C?LIMUL + ------- ENDMOD ?C?LIMUL + + ------- MODULE ?C?MEMSET + C:1D76H PUBLIC ?C?MEMSET + ------- ENDMOD ?C?MEMSET + + ------- MODULE ?C?LLDIDATA0 + C:1DA2H PUBLIC ?C?LLDIDATA0 + ------- ENDMOD ?C?LLDIDATA0 + + ------- MODULE ?C?LLDXDATA0 + C:1DAFH PUBLIC ?C?LLDXDATA0 + ------- ENDMOD ?C?LLDXDATA0 + + ------- MODULE ?C?LLDPDATA0 + C:1DBBH PUBLIC ?C?LLDPDATA0 + ------- ENDMOD ?C?LLDPDATA0 + + ------- MODULE ?C?LLDCODE0 + C:1DC8H PUBLIC ?C?LLDCODE0 + ------- ENDMOD ?C?LLDCODE0 + +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PRINTBUFFER1?UART + +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PRINTSTRING3?UART + + BL51 BANKED LINKER/LOCATER V6.22 12/15/2025 20:45:04 PAGE 45 + + +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_QPWM15DUTY?PWM15BIT + +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PWMLEVELSET?PWM15BIT + +Program Size: data=77.0 xdata=641 code=15470 +LINK/LOCATE RUN COMPLETE. 4 WARNING(S), 0 ERROR(S) diff --git a/Listings/GPIO.lst b/Listings/GPIO.lst new file mode 100644 index 0000000..28482aa --- /dev/null +++ b/Listings/GPIO.lst @@ -0,0 +1,97 @@ +C51 COMPILER V9.01 GPIO 12/15/2025 20:45:03 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE GPIO +OBJECT MODULE PLACED IN .\Objects\GPIO.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE GPIO.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\GPIO + -.lst) OBJECT(.\Objects\GPIO.obj) + +line level source + + 1 #include "GPIO.h" + 2 + 3 //======================================================================== + 4 // : u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) + 5 // : ʼIO. + 6 // : GPIOx: ṹ,οtimer.hĶ. + 7 // : ɹ0, ղ1,󷵻2. + 8 // 汾: V1.0, 2012-10-22 + 9 //======================================================================== + 10 u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) + 11 { + 12 1 if(GPIO > GPIO_P7) return 1; //ղ + 13 1 if(GPIOx->Mode > GPIO_OUT_PP) return 2; // + 14 1 if(GPIO == GPIO_P0) + 15 1 { + 16 2 if(GPIOx->Mode == GPIO_PullUp) P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //׼˫ + 17 2 if(GPIOx->Mode == GPIO_HighZ) P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // + 18 2 if(GPIOx->Mode == GPIO_OUT_OD) P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; //© + 19 2 if(GPIOx->Mode == GPIO_OUT_PP) P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; // + 20 2 } + 21 1 if(GPIO == GPIO_P1) + 22 1 { + 23 2 if(GPIOx->Mode == GPIO_PullUp) P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //׼˫ + 24 2 if(GPIOx->Mode == GPIO_HighZ) P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // + 25 2 if(GPIOx->Mode == GPIO_OUT_OD) P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; //© + 26 2 if(GPIOx->Mode == GPIO_OUT_PP) P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; // + 27 2 } + 28 1 if(GPIO == GPIO_P2) + 29 1 { + 30 2 if(GPIOx->Mode == GPIO_PullUp) P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //׼˫ + 31 2 if(GPIOx->Mode == GPIO_HighZ) P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // + 32 2 if(GPIOx->Mode == GPIO_OUT_OD) P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; //© + 33 2 if(GPIOx->Mode == GPIO_OUT_PP) P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; // + 34 2 } + 35 1 if(GPIO == GPIO_P3) + 36 1 { + 37 2 if(GPIOx->Mode == GPIO_PullUp) P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //׼˫ + 38 2 if(GPIOx->Mode == GPIO_HighZ) P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // + 39 2 if(GPIOx->Mode == GPIO_OUT_OD) P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; //© + 40 2 if(GPIOx->Mode == GPIO_OUT_PP) P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; // + 41 2 } + 42 1 if(GPIO == GPIO_P4) + 43 1 { + 44 2 if(GPIOx->Mode == GPIO_PullUp) P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //׼˫ + 45 2 if(GPIOx->Mode == GPIO_HighZ) P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // + 46 2 if(GPIOx->Mode == GPIO_OUT_OD) P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; //© + 47 2 if(GPIOx->Mode == GPIO_OUT_PP) P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; // + 48 2 } + 49 1 if(GPIO == GPIO_P5) + 50 1 { + 51 2 if(GPIOx->Mode == GPIO_PullUp) P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //׼˫ + 52 2 if(GPIOx->Mode == GPIO_HighZ) P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // + 53 2 if(GPIOx->Mode == GPIO_OUT_OD) P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; //© + 54 2 if(GPIOx->Mode == GPIO_OUT_PP) P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; // + C51 COMPILER V9.01 GPIO 12/15/2025 20:45:03 PAGE 2 + + 55 2 } + 56 1 if(GPIO == GPIO_P6) + 57 1 { + 58 2 if(GPIOx->Mode == GPIO_PullUp) P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; //׼˫ + 59 2 if(GPIOx->Mode == GPIO_HighZ) P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // + 60 2 if(GPIOx->Mode == GPIO_OUT_OD) P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; //© + 61 2 if(GPIOx->Mode == GPIO_OUT_PP) P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; // + 62 2 } + 63 1 if(GPIO == GPIO_P7) + 64 1 { + 65 2 if(GPIOx->Mode == GPIO_PullUp) P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; //׼˫ + 66 2 if(GPIOx->Mode == GPIO_HighZ) P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // + 67 2 if(GPIOx->Mode == GPIO_OUT_OD) P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; //© + 68 2 if(GPIOx->Mode == GPIO_OUT_PP) P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; // + 69 2 } + 70 1 return 0; //ɹ + 71 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 596 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/PWM15bit.lst b/Listings/PWM15bit.lst new file mode 100644 index 0000000..e9a5dbc --- /dev/null +++ b/Listings/PWM15bit.lst @@ -0,0 +1,575 @@ +C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE PWM15BIT +OBJECT MODULE PLACED IN .\Objects\PWM15bit.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE PWM15bit.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\ + -PWM15bit.lst) OBJECT(.\Objects\PWM15bit.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 "PWM15bit.h" + 14 + 15 u16 code PWMxCR[48] = { + 16 0xff14, /* PWM00CR */ + 17 0xff1c, /* PWM01CR */ + 18 0xff24, /* PWM02CR */ + 19 0xff2c, /* PWM03CR */ + 20 0xff34, /* PWM04CR */ + 21 0xff3c, /* PWM05CR */ + 22 0xff44, /* PWM06CR */ + 23 0xff4c, /* PWM07CR */ + 24 0xff64, /* PWM10CR */ + 25 0xff6c, /* PWM11CR */ + 26 0xff74, /* PWM12CR */ + 27 0xff7c, /* PWM13CR */ + 28 0xff84, /* PWM14CR */ + 29 0xff8c, /* PWM15CR */ + 30 0xff94, /* PWM16CR */ + 31 0xff9c, /* PWM17CR */ + 32 0xffb4, /* PWM20CR */ + 33 0xffbc, /* PWM21CR */ + 34 0xffc4, /* PWM22CR */ + 35 0xffcc, /* PWM23CR */ + 36 0xffd4, /* PWM24CR */ + 37 0xffdc, /* PWM25CR */ + 38 0xffe4, /* PWM26CR */ + 39 0xffec, /* PWM27CR */ + 40 0xfc14, /* PWM30CR */ + 41 0xfc1c, /* PWM31CR */ + 42 0xfc24, /* PWM32CR */ + 43 0xfc2c, /* PWM33CR */ + 44 0xfc34, /* PWM34CR */ + 45 0xfc3c, /* PWM35CR */ + 46 0xfc44, /* PWM36CR */ + 47 0xfc4c, /* PWM37CR */ + 48 0xfc64, /* PWM40CR */ + 49 0xfc6c, /* PWM41CR */ + 50 0xfc74, /* PWM42CR */ + 51 0xfc7c, /* PWM43CR */ + 52 0xfc84, /* PWM44CR */ + 53 0xfc8c, /* PWM45CR */ + 54 0xfc94, /* PWM46CR */ + C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 2 + + 55 0xfc9c, /* PWM47CR */ + 56 0xfcb4, /* PWM50CR */ + 57 0xfcbc, /* PWM51CR */ + 58 0xfcc4, /* PWM52CR */ + 59 0xfccc, /* PWM53CR */ + 60 0xfcd4, /* PWM54CR */ + 61 0xfcdc, /* PWM55CR */ + 62 0xfce4, /* PWM56CR */ + 63 0xfcec, /* PWM57CR */ + 64 }; + 65 + 66 u16 code PWMxT1[48] = { + 67 0xff10, /* PWM00T1 */ + 68 0xff18, /* PWM01T1 */ + 69 0xff20, /* PWM02T1 */ + 70 0xff28, /* PWM03T1 */ + 71 0xff30, /* PWM04T1 */ + 72 0xff38, /* PWM05T1 */ + 73 0xff40, /* PWM06T1 */ + 74 0xff48, /* PWM07T1 */ + 75 0xff60, /* PWM10T1 */ + 76 0xff68, /* PWM11T1 */ + 77 0xff70, /* PWM12T1 */ + 78 0xff78, /* PWM13T1 */ + 79 0xff80, /* PWM14T1 */ + 80 0xff88, /* PWM15T1 */ + 81 0xff90, /* PWM16T1 */ + 82 0xff98, /* PWM17T1 */ + 83 0xffb0, /* PWM20T1 */ + 84 0xffb8, /* PWM21T1 */ + 85 0xffc0, /* PWM22T1 */ + 86 0xffc8, /* PWM23T1 */ + 87 0xffd0, /* PWM24T1 */ + 88 0xffd8, /* PWM25T1 */ + 89 0xffe0, /* PWM26T1 */ + 90 0xffe8, /* PWM27T1 */ + 91 0xfc10, /* PWM30T1 */ + 92 0xfc18, /* PWM31T1 */ + 93 0xfc20, /* PWM32T1 */ + 94 0xfc28, /* PWM33T1 */ + 95 0xfc30, /* PWM34T1 */ + 96 0xfc38, /* PWM35T1 */ + 97 0xfc40, /* PWM36T1 */ + 98 0xfc48, /* PWM37T1 */ + 99 0xfc60, /* PWM40T1 */ + 100 0xfc68, /* PWM41T1 */ + 101 0xfc70, /* PWM42T1 */ + 102 0xfc78, /* PWM43T1 */ + 103 0xfc80, /* PWM44T1 */ + 104 0xfc88, /* PWM45T1 */ + 105 0xfc90, /* PWM46T1 */ + 106 0xfc98, /* PWM47T1 */ + 107 0xfcb0, /* PWM50T1 */ + 108 0xfcb8, /* PWM51T1 */ + 109 0xfcc0, /* PWM52T1 */ + 110 0xfcc8, /* PWM53T1 */ + 111 0xfcd0, /* PWM54T1 */ + 112 0xfcd8, /* PWM55T1 */ + 113 0xfce0, /* PWM56T1 */ + 114 0xfce8, /* PWM57T1 */ + 115 }; + 116 + C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 3 + + 117 u16 code PWMxT2[48] = { + 118 0xff12, /* PWM00T2 */ + 119 0xff1a, /* PWM01T2 */ + 120 0xff22, /* PWM02T2 */ + 121 0xff2a, /* PWM03T2 */ + 122 0xff32, /* PWM04T2 */ + 123 0xff3a, /* PWM05T2 */ + 124 0xff42, /* PWM06T2 */ + 125 0xff4a, /* PWM07T2 */ + 126 0xff62, /* PWM10T2 */ + 127 0xff6a, /* PWM11T2 */ + 128 0xff72, /* PWM12T2 */ + 129 0xff7a, /* PWM13T2 */ + 130 0xff82, /* PWM14T2 */ + 131 0xff8a, /* PWM15T2 */ + 132 0xff92, /* PWM16T2 */ + 133 0xff9a, /* PWM17T2 */ + 134 0xffb2, /* PWM20T2 */ + 135 0xffba, /* PWM21T2 */ + 136 0xffc2, /* PWM22T2 */ + 137 0xffca, /* PWM23T2 */ + 138 0xffd2, /* PWM24T2 */ + 139 0xffda, /* PWM25T2 */ + 140 0xffe2, /* PWM26T2 */ + 141 0xffea, /* PWM27T2 */ + 142 0xfc12, /* PWM30T2 */ + 143 0xfc1a, /* PWM31T2 */ + 144 0xfc22, /* PWM32T2 */ + 145 0xfc2a, /* PWM33T2 */ + 146 0xfc32, /* PWM34T2 */ + 147 0xfc3a, /* PWM35T2 */ + 148 0xfc42, /* PWM36T2 */ + 149 0xfc4a, /* PWM37T2 */ + 150 0xfc62, /* PWM40T2 */ + 151 0xfc6a, /* PWM41T2 */ + 152 0xfc72, /* PWM42T2 */ + 153 0xfc7a, /* PWM43T2 */ + 154 0xfc82, /* PWM44T2 */ + 155 0xfc8a, /* PWM45T2 */ + 156 0xfc92, /* PWM46T2 */ + 157 0xfc9a, /* PWM47T2 */ + 158 0xfcb2, /* PWM50T2 */ + 159 0xfcba, /* PWM51T2 */ + 160 0xfcc2, /* PWM52T2 */ + 161 0xfcca, /* PWM53T2 */ + 162 0xfcd2, /* PWM54T2 */ + 163 0xfcda, /* PWM55T2 */ + 164 0xfce2, /* PWM56T2 */ + 165 0xfcea, /* PWM57T2 */ + 166 }; + 167 + 168 u16 code PWMxHLD[48] = { + 169 0xff15, /* PWM00HLD */ + 170 0xff1d, /* PWM01HLD */ + 171 0xff25, /* PWM02HLD */ + 172 0xff2d, /* PWM03HLD */ + 173 0xff35, /* PWM04HLD */ + 174 0xff3d, /* PWM05HLD */ + 175 0xff45, /* PWM06HLD */ + 176 0xff4d, /* PWM07HLD */ + 177 0xff65, /* PWM10HLD */ + 178 0xff6d, /* PWM11HLD */ + C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 4 + + 179 0xff75, /* PWM12HLD */ + 180 0xff7d, /* PWM13HLD */ + 181 0xff85, /* PWM14HLD */ + 182 0xff8d, /* PWM15HLD */ + 183 0xff95, /* PWM16HLD */ + 184 0xff9d, /* PWM17HLD */ + 185 0xffb5, /* PWM20HLD */ + 186 0xffbd, /* PWM21HLD */ + 187 0xffc5, /* PWM22HLD */ + 188 0xffcd, /* PWM23HLD */ + 189 0xffd5, /* PWM24HLD */ + 190 0xffdd, /* PWM25HLD */ + 191 0xffe5, /* PWM26HLD */ + 192 0xffed, /* PWM27HLD */ + 193 0xfc15, /* PWM30HLD */ + 194 0xfc1d, /* PWM31HLD */ + 195 0xfc25, /* PWM32HLD */ + 196 0xfc2d, /* PWM33HLD */ + 197 0xfc35, /* PWM34HLD */ + 198 0xfc3d, /* PWM35HLD */ + 199 0xfc45, /* PWM36HLD */ + 200 0xfc4d, /* PWM37HLD */ + 201 0xfc65, /* PWM40HLD */ + 202 0xfc6d, /* PWM41HLD */ + 203 0xfc75, /* PWM42HLD */ + 204 0xfc7d, /* PWM43HLD */ + 205 0xfc85, /* PWM44HLD */ + 206 0xfc8d, /* PWM45HLD */ + 207 0xfc95, /* PWM46HLD */ + 208 0xfc9d, /* PWM47HLD */ + 209 0xfcb5, /* PWM50HLD */ + 210 0xfcbd, /* PWM51HLD */ + 211 0xfcc5, /* PWM52HLD */ + 212 0xfccd, /* PWM53HLD */ + 213 0xfcd5, /* PWM54HLD */ + 214 0xfcdd, /* PWM55HLD */ + 215 0xfce5, /* PWM56HLD */ + 216 0xfced, /* PWM57HLD */ + 217 }; + 218 + 219 //======================================================================== + 220 // : u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i) + 221 // : PWMͨƼĴ. + 222 // : PWM_id: PWMͨ. ȡֵ 0~57 + 223 // pwm_eno: pwmʹ, 0ΪGPIO, 1ΪPWM. + 224 // pwm_ini: pwm˵ijʼƽ, 0Ϊ͵ƽ, 1Ϊߵƽ. + 225 // pwm_eni: pwmͨжʹܿ, 0ΪرPWMж, 1ΪʹPWMж. + 226 // pwm_ent2i: pwmͨڶжʹܿ, 0ΪرPWMڶж, 1ΪʹPWMڶж. + 227 // pwm_ent1i: pwmͨһжʹܿ, 0ΪرPWMһж, 1ΪʹPWMһж. + 228 // : 0:ȷ, 2:. + 229 // 汾: V1.0, 2020-09-22 + 230 //======================================================================== + 231 u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i) + 232 { + 233 1 u8 xdata *pPWMxCR; + 234 1 + 235 1 if(PWM_id > PWM57) return 2; //id + 236 1 if(pwm_eno > 1) return 2; //ʹܴ + 237 1 if(pwm_ini > 1) return 2; //˵ijʼƽ + 238 1 if(pwm_eni > 1) return 2; //жʹܿƴ + 239 1 if(pwm_ent2i > 1) return 2; //ڶжʹܿƴ + 240 1 if(pwm_ent1i > 1) return 2; //һжʹܿƴ + C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 5 + + 241 1 + 242 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + 243 1 pPWMxCR = (u8 *)PWMxCR[PWM_id]; + 244 1 *pPWMxCR = (pwm_eno << 7) | (pwm_ini << 6) | (pwm_eni << 2)| (pwm_ent2i << 1)| pwm_ent1i; + 245 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + 246 1 return 0; + 247 1 } + 248 + 249 //======================================================================== + 250 // : u8 PWMPeriodDuty(u8 PWM_id, u16 Period, u16 dutyL, u16 dutyH) + 251 // : PWM, ռձ. + 252 // : PWM_id: PWMͨ. ȡֵ 0~57 + 253 // dutyL: pwm͵ƽλ, ȡֵ 0~0x7fff. + 254 // dutyH: pwmߵƽλ, ȡֵ 0~0x7fff. + 255 // : 0:ȷ, 2:. + 256 // 汾: V1.0, 2020-09-22 + 257 //======================================================================== + 258 u8 PWM15Duty(u8 PWM_id,u16 dutyL) + 259 { + 260 1 u16 xdata *pPWMxT1; + 261 1 u16 xdata *pPWMxT2; + 262 1 + 263 1 if(PWM_id > PWM57) return 2; //id + 264 1 if(dutyL > 0x7fff) return 2; //͵ƽʱô + 265 1 //if(dutyH > 0x7fff) return 2; //ߵƽʱô + 266 1 + 267 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + 268 1 pPWMxT1 = (u16 *)PWMxT1[PWM_id]; + 269 1 *pPWMxT1 = dutyL & 0x7fff; + 270 1 + 271 1 pPWMxT2 = (u16 *)PWMxT2[PWM_id]; + 272 1 *pPWMxT2 = 0x0000 & 0x7fff; + 273 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + 274 1 return 0; + 275 1 } + 276 + 277 u8 qPWM15Duty(u8 PWM_id,u16 dutyL, u16 dutyH) + 278 { + 279 1 u16 xdata *pPWMxT1; + 280 1 u16 xdata *pPWMxT2; + 281 1 + 282 1 if(PWM_id > PWM57) return 2; //id + 283 1 if(dutyL > 0x7fff) return 2; //͵ƽʱô + 284 1 if(dutyH > 0x7fff) return 2; //ߵƽʱô + 285 1 + 286 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + 287 1 pPWMxT1 = (u16 *)PWMxT1[PWM_id]; + 288 1 *pPWMxT1 = dutyL & 0x7fff; + 289 1 + 290 1 pPWMxT2 = (u16 *)PWMxT2[PWM_id]; + 291 1 *pPWMxT2 = dutyH & 0x7fff; + 292 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + 293 1 return 0; + 294 1 } + 295 //======================================================================== + 296 // : u8 PWMOutputSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh) + 297 // : PWMͨƼĴ. + 298 // : PWM_id: PWMͨ. ȡֵ 0~57 + 299 // pwm_hldl: pwmǿ͵ƽλ, 0, 1ǿ͵ƽ. + 300 // pwm_hldh: pwmǿߵƽλ, 0, 1ǿߵƽ. + 301 // : 0:ȷ, 2:. + 302 // 汾: V1.0, 2020-09-22 + C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 6 + + 303 //======================================================================== + 304 u8 PWMLevelSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh) + 305 { + 306 1 u8 xdata *pPWMxHLD; + 307 1 + 308 1 if(PWM_id > PWM57) return 2; //id + 309 1 if(pwm_hldh > 1) return 2; //ʹܴ + 310 1 if(pwm_hldl > 1) return 2; //˵ijʼƽ + 311 1 + 312 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + 313 1 pPWMxHLD = (u8 *)PWMxHLD[PWM_id]; + 314 1 *pPWMxHLD = (pwm_hldh << 1) | pwm_hldl; + 315 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + 316 1 return 0; + 317 1 } + 318 + 319 //======================================================================== + 320 // : void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx) + 321 // : 15λǿPWMʼ. + 322 // : PWM_id: PWM. ȡֵ PWM0,PWM1,PWM2,PWM3,PWM4,PWM5 + 323 // PWMx: ṹ,οͷļĶ. + 324 // : none. + 325 // 汾: V1.0, 2020-09-22 + 326 //======================================================================== + 327 void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx) + 328 { + 329 1 if(PWM_id > PWM5) return; //id + 330 1 + 331 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + 332 1 if(PWM_id == PWM0) + 333 1 { + 334 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM0_Enable(); //ʹPWM0 + 335 2 else PWM15_PWM0_Disable(); //رPWM0 + 336 2 PWM0_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + 337 2 PWM0C = PWMx->PWM_Period & 0x7fff; + 338 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter0_Enable(); //ʹܼ + 339 2 else PWM15_Counter0_Disable(); //رռ + 340 2 } + 341 1 + 342 1 if(PWM_id == PWM1) + 343 1 { + 344 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM1_Enable(); //ʹPWM1 + 345 2 else PWM15_PWM1_Disable(); //رPWM1 + 346 2 PWM1_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + 347 2 PWM1C = PWMx->PWM_Period & 0x7fff; + 348 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter1_Enable(); //ʹܼ + 349 2 else PWM15_Counter1_Disable(); //رռ + 350 2 } + 351 1 + 352 1 if(PWM_id == PWM2) + 353 1 { + 354 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM2_Enable(); //ʹPWM2 + 355 2 else PWM15_PWM2_Disable(); //رPWM2 + 356 2 PWM2_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + 357 2 PWM2C = PWMx->PWM_Period & 0x7fff; + 358 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter2_Enable(); //ʹܼ + 359 2 else PWM15_Counter2_Disable(); //رռ + 360 2 } + 361 1 + 362 1 if(PWM_id == PWM3) + 363 1 { + 364 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM3_Enable(); //ʹPWM3 + C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 7 + + 365 2 else PWM15_PWM3_Disable(); //رPWM3 + 366 2 PWM3_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + 367 2 PWM3C = PWMx->PWM_Period & 0x7fff; + 368 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter3_Enable(); //ʹܼ + 369 2 else PWM15_Counter3_Disable(); //رռ + 370 2 } + 371 1 + 372 1 if(PWM_id == PWM4) + 373 1 { + 374 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM4_Enable(); //ʹPWM4 + 375 2 else PWM15_PWM4_Disable(); //رPWM4 + 376 2 PWM4_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + 377 2 PWM4C = PWMx->PWM_Period & 0x7fff; + 378 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter4_Enable(); //ʹܼ + 379 2 else PWM15_Counter4_Disable(); //رռ + 380 2 } + 381 1 + 382 1 if(PWM_id == PWM5) + 383 1 { + 384 2 if(PWMx->PWM_Enable == ENABLE) PWM15_PWM5_Enable(); //ʹPWM5 + 385 2 else PWM15_PWM5_Disable(); //رPWM5 + 386 2 PWM5_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + 387 2 PWM5C = PWMx->PWM_Period & 0x7fff; + 388 2 if(PWMx->PWM_Counter == ENABLE) PWM15_Counter5_Enable(); //ʹܼ + 389 2 else PWM15_Counter5_Disable(); //رռ + 390 2 } + 391 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + 392 1 } + 393 + 394 + 395 //======================================================================== + 396 // : void PWM0_Handler (void) interrupt PWM0_VECTOR + 397 // : PWM0жϴ. + 398 // : None + 399 // : none. + 400 // 汾: V1.0, 2020-10-13 + 401 //======================================================================== + 402 void PWM0_Handler (void) interrupt PWM0_VECTOR + 403 { + 404 1 char store; + 405 1 store = P_SW2; + 406 1 P_SW2 |= 0x80; + 407 1 + 408 1 if(PWMCFG01 & 0x08) //PWM0ж + 409 1 { + 410 2 PWMCFG01 &= ~0x08; //PWM0жϱ־ + 411 2 // TODO: ڴ˴û + 412 2 } + 413 1 if(PWM0IF) + 414 1 { + 415 2 PWM0IF = 0; + 416 2 P27 = ~P27; + 417 2 } + 418 1 P_SW2 = store; + 419 1 } + 420 //======================================================================== + 421 // : void PWM1_Handler (void) interrupt PWM1_VECTOR + 422 // : PWM1жϴ. + 423 // : None + 424 // : none. + 425 // 汾: V1.0, 2020-10-13 + 426 //======================================================================== + C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 8 + + 427 void PWM1_Handler (void) interrupt PWM1_VECTOR + 428 { + 429 1 char store; + 430 1 store = P_SW2; + 431 1 P_SW2 |= 0x80; + 432 1 + 433 1 if(PWMCFG01 & 0x80) //PWM1ж + 434 1 { + 435 2 PWMCFG01 &= ~0x80; //PWM1жϱ־ + 436 2 // TODO: ڴ˴û + 437 2 } + 438 1 if(PWM1IF) + 439 1 { + 440 2 PWM1IF = 0; + 441 2 P26 = ~P26; + 442 2 } + 443 1 P_SW2 = store; + 444 1 } + 445 //======================================================================== + 446 // : void PWM2_Handler (void) interrupt PWM2_VECTOR + 447 // : PWM2жϴ. + 448 // : None + 449 // : none. + 450 // 汾: V1.0, 2020-10-13 + 451 //======================================================================== + 452 void PWM2_Handler (void) interrupt PWM2_VECTOR + 453 { + 454 1 char store; + 455 1 store = P_SW2; + 456 1 P_SW2 |= 0x80; + 457 1 + 458 1 if(PWMCFG23 & 0x08) //PWM2ж + 459 1 { + 460 2 PWMCFG23 &= ~0x08; //PWM2жϱ־ + 461 2 // TODO: ڴ˴û + 462 2 } + 463 1 if(PWM2IF) + 464 1 { + 465 2 PWM2IF = 0; + 466 2 P25 = ~P25; + 467 2 } + 468 1 P_SW2 = store; + 469 1 } + 470 //======================================================================== + 471 // : void PWM3_Handler (void) interrupt PWM3_VECTOR + 472 // : PWM3жϴ. + 473 // : None + 474 // : none. + 475 // 汾: V1.0, 2020-10-13 + 476 //======================================================================== + 477 void PWM3_Handler (void) interrupt PWM3_VECTOR + 478 { + 479 1 char store; + 480 1 store = P_SW2; + 481 1 P_SW2 |= 0x80; + 482 1 + 483 1 if(PWMCFG23 & 0x80) //PWM3ж + 484 1 { + 485 2 PWMCFG23 &= ~0x80; //PWM3жϱ־ + 486 2 // TODO: ڴ˴û + 487 2 } + 488 1 if(PWM3IF) + C51 COMPILER V9.01 PWM15BIT 12/15/2025 20:45:04 PAGE 9 + + 489 1 { + 490 2 PWM3IF = 0; + 491 2 P24 = ~P24; + 492 2 } + 493 1 P_SW2 = store; + 494 1 } + 495 //======================================================================== + 496 // : void PWM4_Handler (void) interrupt PWM4_VECTOR + 497 // : PWM4жϴ. + 498 // : None + 499 // : none. + 500 // 汾: V1.0, 2020-10-13 + 501 //======================================================================== + 502 void PWM4_Handler (void) interrupt PWM4_VECTOR + 503 { + 504 1 char store; + 505 1 store = P_SW2; + 506 1 P_SW2 |= 0x80; + 507 1 + 508 1 if(PWMCFG45 & 0x08) //PWM4ж + 509 1 { + 510 2 PWMCFG45 &= ~0x08; //PWM4жϱ־ + 511 2 // TODO: ڴ˴û + 512 2 } + 513 1 if(PWM4IF) + 514 1 { + 515 2 PWM4IF = 0; + 516 2 P23 = ~P23; + 517 2 } + 518 1 P_SW2 = store; + 519 1 } + 520 //======================================================================== + 521 // : void PWM5_Handler (void) interrupt PWM5_VECTOR + 522 // : PWM5жϴ. + 523 // : None + 524 // : none. + 525 // 汾: V1.0, 2020-10-13 + 526 //======================================================================== + 527 //void PWM5_Handler (void) interrupt PWM5_VECTOR //жų31ɽжϺת + - + 528 //{ + 529 // if(PWMCFG45 & 0x80) //PWM5ж + 530 // { + 531 // PWMCFG45 &= ~0x80; //PWM5жϱ־ + 532 // // TODO: ڴ˴û + 533 // } + 534 //} + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 1058 ---- + CONSTANT SIZE = 384 ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 6 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/Start_Init.lst b/Listings/Start_Init.lst new file mode 100644 index 0000000..336336c --- /dev/null +++ b/Listings/Start_Init.lst @@ -0,0 +1,69 @@ +C51 COMPILER V9.01 START_INIT 12/15/2025 20:45:04 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE START_INIT +OBJECT MODULE PLACED IN .\Objects\Start_Init.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE Start_Init.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listing + -s\Start_Init.lst) OBJECT(.\Objects\Start_Init.obj) + +line level source + + 1 #include "STC8xxxx.h" + 2 #include "Start_Init.h" + 3 #include "string.h" + 4 #include "UART_Set.h" + 5 #include "timer.h" + 6 #include "pwm_control.h" + 7 + 8 void Start_Init(void) + 9 { + 10 1 u8 i; + 11 1 memset(&g_Usart,0,sizeof(g_Usart)); + 12 1 memset(&s_recv, 0, sizeof(s_recv)); + 13 1 memset(&g_answer,0,sizeof(g_answer)); + 14 1 g_Usart.lastsn=0xFF; + 15 1 s_recv.B_min = 0; + 16 1 s_recv.B_max = 100; + 17 1 s_recv.global_brightness = 100; + 18 1 + 19 1 for(i=0;i<12;i++) + 20 1 { + 21 2 s_recv.pwm_step[i] = 1; + 22 2 s_recv.key_status[i] = 1; + 23 2 s_recv.gradual_time[i] = 300; + 24 2 } + 25 1 } + 26 + 27 //ʱ21msʱ + 28 void Timer2_Init_1ms(void) + 29 { + 30 1 TIM_InitTypeDef TIM_InitStructure; //ṹ + 31 1 TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //ָģʽ, TIM_16BitAutoReload,TIM_16Bit,TI + -M_8BitAutoReload,TIM_16BitAutoReloadNoMask + 32 1 TIM_InitStructure.TIM_Priority = Priority_3; //ָжȼ(͵) Priority_0,Priority_1,Priority + -_2,Priority_3 + 33 1 TIM_InitStructure.TIM_Interrupt = ENABLE; //жǷ, ENABLEDISABLE. (ע: Timer2̶Ϊ16λ + -Զװ, жϹ̶Ϊȼ) + 34 1 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //ָʱԴ, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_ + -Ext + 35 1 TIM_InitStructure.TIM_ClkOut = DISABLE; //Ƿ, ENABLEDISABLE + 36 1 TIM_InitStructure.TIM_Value = 63693UL; //ֵ,ʱΪ1ms + 37 1 TIM_InitStructure.TIM_Run = ENABLE; //Ƿʼʱ, ENABLEDISABLE + 38 1 Timer_Inilize(Timer2,&TIM_InitStructure); //ʼTimer2 Timer0,Timer1,Timer2,Timer3,Timer4 + 39 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 168 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 8 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + C51 COMPILER V9.01 START_INIT 12/15/2025 20:45:04 PAGE 2 + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/UART.lst b/Listings/UART.lst new file mode 100644 index 0000000..76f958a --- /dev/null +++ b/Listings/UART.lst @@ -0,0 +1,531 @@ +C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE UART +OBJECT MODULE PLACED IN .\Objects\UART.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE UART.C OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\UART + -.lst) OBJECT(.\Objects\UART.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 "UART.h" + 14 #include "timer.h" + 15 + 16 #ifdef UART1 + 17 COMx_Define COM1; + 18 u8 xdata TX1_Buffer[COM_TX1_Lenth]; //ͻ + 19 u8 xdata RX1_Buffer[COM_RX1_Lenth]; //ջ + 20 #endif + 21 #ifdef UART2 + COMx_Define COM2; + u8 xdata TX2_Buffer[COM_TX2_Lenth]; //ͻ + u8 xdata RX2_Buffer[COM_RX2_Lenth]; //ջ + #endif + 26 #ifdef UART3 + 27 COMx_Define COM3; + 28 u8 xdata TX3_Buffer[COM_TX3_Lenth]; //ͻ + 29 u8 xdata RX3_Buffer[COM_RX3_Lenth]; //ջ + 30 #endif + 31 #ifdef UART4 + COMx_Define COM4; + u8 xdata TX4_Buffer[COM_TX4_Lenth]; //ͻ + u8 xdata RX4_Buffer[COM_RX4_Lenth]; //ջ + #endif + 36 + 37 u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx) + 38 { + 39 1 u8 i; + 40 1 u32 j; + 41 1 + 42 1 #ifdef UART1 + 43 1 if(UARTx == UART1) + 44 1 { + 45 2 COM1.id = 1; + 46 2 COM1.TX_read = 0; + 47 2 COM1.TX_write = 0; + 48 2 COM1.B_TX_busy = 0; + 49 2 COM1.RX_Cnt = 0; + 50 2 COM1.RX_TimeOut = 0; + 51 2 COM1.B_RX_OK = 0; + 52 2 for(i=0; iUART_Priority > Priority_3) return 2; // + 56 2 UART1_Priority(COMx->UART_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_ + -3 + 57 2 if(COMx->UART_Mode > UART_9bit_BRTx) return 2; //ģʽ + 58 2 SCON = (SCON & 0x3f) | COMx->UART_Mode; + 59 2 if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //ɱ䲨 + 60 2 { + 61 3 j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //1T + 62 3 if(j >= 65536UL) return 2; // + 63 3 j = 65536UL - j; + 64 3 if(COMx->UART_BRT_Use == BRT_Timer1) + 65 3 { + 66 4 TR1 = 0; + 67 4 AUXR &= ~0x01; //S1 BRT Use Timer1; + 68 4 TMOD &= ~(1<<6); //Timer1 set As Timer + 69 4 TMOD &= ~0x30; //Timer1_16bitAutoReload; + 70 4 AUXR |= (1<<6); //Timer1 set as 1T mode + 71 4 TH1 = (u8)(j>>8); + 72 4 TL1 = (u8)j; + 73 4 ET1 = 0; //ֹж + 74 4 TMOD &= ~0x40; //ʱ + 75 4 INT_CLKO &= ~0x02; //ʱ + 76 4 TR1 = 1; + 77 4 } + 78 3 else if(COMx->UART_BRT_Use == BRT_Timer2) + 79 3 { + 80 4 AUXR &= ~(1<<4); //Timer stop + 81 4 AUXR |= 0x01; //S1 BRT Use Timer2; + 82 4 AUXR &= ~(1<<3); //Timer2 set As Timer + 83 4 AUXR |= (1<<2); //Timer2 set as 1T mode + 84 4 TH2 = (u8)(j>>8); + 85 4 TL2 = (u8)j; + 86 4 IE2 &= ~(1<<2); //ֹж + 87 4 AUXR |= (1<<4); //Timer run enable + 88 4 } + 89 3 else return 2; // + 90 3 } + 91 2 else if(COMx->UART_Mode == UART_ShiftRight) + 92 2 { + 93 3 if(COMx->BaudRateDouble == ENABLE) AUXR |= (1<<5); //̶SysClk/2 + 94 3 else AUXR &= ~(1<<5); //̶SysClk/12 + 95 3 } + 96 2 else if(COMx->UART_Mode == UART_9bit) //̶SysClk*2^SMOD/64 + 97 2 { + 98 3 if(COMx->BaudRateDouble == ENABLE) PCON |= (1<<7); //̶SysClk/32 + 99 3 else PCON &= ~(1<<7); //̶SysClk/64 + 100 3 } + 101 2 if(COMx->UART_Interrupt == ENABLE) ES = 1; //ж + 102 2 else ES = 0; //ֹж + 103 2 if(COMx->UART_RxEnable == ENABLE) REN = 1; // + 104 2 else REN = 0; //ֹ + 105 2 P_SW1 = (P_SW1 & 0x3f) | (COMx->UART_P_SW & 0xc0); //лIO + 106 2 return 0; + 107 2 } + 108 1 #endif + 109 1 #ifdef UART2 + if(UARTx == UART2) + { + COM2.id = 2; + COM2.TX_read = 0; + COM2.TX_write = 0; + COM2.B_TX_busy = 0; + C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 3 + + COM2.RX_Cnt = 0; + COM2.RX_TimeOut = 0; + COM2.B_RX_OK = 0; + for(i=0; iUART_Mode == UART_9bit_BRTx) ||(COMx->UART_Mode == UART_8bit_BRTx)) //ɱ䲨 + { + if(COMx->UART_Priority > Priority_3) return 2; // + UART2_Priority(COMx->UART_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority + -_3 + if(COMx->UART_Mode == UART_9bit_BRTx) S2CON |= (1<<7); //9bit + else S2CON &= ~(1<<7); //8bit + j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //1T + if(j >= 65536UL) return 2; // + j = 65536UL - j; + AUXR &= ~(1<<4); //Timer stop + AUXR &= ~(1<<3); //Timer2 set As Timer + AUXR |= (1<<2); //Timer2 set as 1T mode + TH2 = (u8)(j>>8); + TL2 = (u8)j; + IE2 &= ~(1<<2); //ֹж + AUXR |= (1<<4); //Timer run enable + } + else return 2; //ģʽ + if(COMx->UART_Interrupt == ENABLE) IE2 |= 1; //ж + else IE2 &= ~1; //ֹж + if(COMx->UART_RxEnable == ENABLE) S2CON |= (1<<4); // + else S2CON &= ~(1<<4); //ֹ + P_SW2 = (P_SW2 & ~1) | (COMx->UART_P_SW & 0x01); //лIO + return 0; + } + #endif + 148 1 #ifdef UART3 + 149 1 if(UARTx == UART3) + 150 1 { + 151 2 COM3.id = 3; + 152 2 COM3.TX_read = 0; + 153 2 COM3.TX_write = 0; + 154 2 COM3.B_TX_busy = 0; + 155 2 COM3.RX_Cnt = 0; + 156 2 COM3.RX_TimeOut = 0; + 157 2 COM3.B_RX_OK = 0; + 158 2 for(i=0; iUART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //ɱ䲨 + 162 2 { + 163 3 if(COMx->UART_Priority > Priority_3) return 2; // + 164 3 UART3_Priority(COMx->UART_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priorit + -y_3 + 165 3 if(COMx->UART_Mode == UART_9bit_BRTx) S3_9bit(); //9bit + 166 3 else S3_8bit(); //8bit + 167 3 j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //1T + 168 3 if(j >= 65536UL) return 2; // + 169 3 j = 65536UL - j; + 170 3 if(COMx->UART_BRT_Use == BRT_Timer3) + 171 3 { + 172 4 S3_BRT_UseTimer3(); //S3 BRT Use Timer3; + 173 4 TH3 = (u8)(j>>8); + 174 4 TL3 = (u8)j; + 175 4 T4T3M &= 0xf0; + C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 4 + + 176 4 T4T3M |= 0x0a; //Timer3 set As Timer, 1T mode, Start timer3 + 177 4 } + 178 3 else if(COMx->UART_BRT_Use == BRT_Timer2) + 179 3 { + 180 4 AUXR &= ~(1<<4); //Timer stop + 181 4 S3_BRT_UseTimer2(); //S3 BRT Use Timer2; + 182 4 AUXR &= ~(1<<3); //Timer2 set As Timer + 183 4 AUXR |= (1<<2); //Timer2 set as 1T mode + 184 4 TH2 = (u8)(j>>8); + 185 4 TL2 = (u8)j; + 186 4 IE2 &= ~(1<<2); //ֹж + 187 4 AUXR |= (1<<4); //Timer run enable + 188 4 } + 189 3 else return 2; // + 190 3 } + 191 2 else return 2; //ģʽ + 192 2 if(COMx->UART_Interrupt == ENABLE) S3_Int_Enable(); //ж + 193 2 else S3_Int_Disable(); //ֹж + 194 2 if(COMx->UART_RxEnable == ENABLE) S3_RX_Enable(); // + 195 2 else S3_RX_Disable(); //ֹ + 196 2 P_SW2 = (P_SW2 & ~2) | (COMx->UART_P_SW & 0x02); //лIO + 197 2 return 0; + 198 2 } + 199 1 #endif + 200 1 #ifdef UART4 + if(UARTx == UART4) + { + COM4.id = 3; + COM4.TX_read = 0; + COM4.TX_write = 0; + COM4.B_TX_busy = 0; + COM4.RX_Cnt = 0; + COM4.RX_TimeOut = 0; + COM4.B_RX_OK = 0; + for(i=0; iUART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //ɱ䲨 + { + if(COMx->UART_Priority > Priority_3) return 2; // + UART4_Priority(COMx->UART_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority + -_3 + if(COMx->UART_Mode == UART_9bit_BRTx) S4_9bit(); //9bit + else S4_8bit(); //8bit + j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //1T + if(j >= 65536UL) return 2; // + j = 65536UL - j; + if(COMx->UART_BRT_Use == BRT_Timer4) + { + S4_BRT_UseTimer4(); //S4 BRT Use Timer4; + TH4 = (u8)(j>>8); + TL4 = (u8)j; + T4T3M &= 0x0f; + T4T3M |= 0xa0; //Timer4 set As Timer, 1T mode, Start timer4 + } + else if(COMx->UART_BRT_Use == BRT_Timer2) + { + AUXR &= ~(1<<4); //Timer stop + S4_BRT_UseTimer2(); //S4 BRT Use Timer2; + AUXR &= ~(1<<3); //Timer2 set As Timer + AUXR |= (1<<2); //Timer2 set as 1T mode + TH2 = (u8)(j>>8); + C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 5 + + TL2 = (u8)j; + IE2 &= ~(1<<2); //ֹж + AUXR |= (1<<4); //Timer run enable + } + else return 2; // + } + else return 2; //ģʽ + if(COMx->UART_Interrupt == ENABLE) S4_Int_Enable(); //ж + else S4_Int_Disable(); //ֹж + if(COMx->UART_RxEnable == ENABLE) S4_RX_Enable(); // + else S4_RX_Disable(); //ֹ + P_SW2 = (P_SW2 & ~4) | (COMx->UART_P_SW & 0x04); //лIO + return 0; + } + #endif + 252 1 return 2; // + 253 1 } + 254 + 255 /*********************************************************/ + 256 + 257 /********************* UART1 ************************/ + 258 #ifdef UART1 + 259 void TX1_write2buff(u8 dat) //д뷢ͻ壬ָ+1 + 260 { + 261 1 TX1_Buffer[COM1.TX_write] = dat; //װͻ + 262 1 if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0; + 263 1 + 264 1 if(COM1.B_TX_busy == 0) // + 265 1 { + 266 2 COM1.B_TX_busy = 1; //־æ + 267 2 TI = 1; //ж + 268 2 } + 269 1 } + 270 + 271 void PrintString1(u8 *puts) + 272 { + 273 1 for (; *puts != 0; puts++) TX1_write2buff(*puts); //ֹͣ0 + 274 1 } + 275 void Printbuffer1(u8 *puts,u8 len) + 276 { + 277 1 u8 i; + 278 1 for (i=0; i= COM_RX1_Lenth) COM1.RX_Cnt = 0; + 297 3 if(dat=='D') //10'D',ϵͳ + 298 3 { + C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 6 + + 299 4 stage++; + 300 4 } + 301 3 else + 302 3 { + 303 4 stage=0; + 304 4 } + 305 3 if(stage==10) + 306 3 { + 307 4 IAP_CONTR=0x60; + 308 4 } + 309 3 RX1_Buffer[COM1.RX_Cnt++] = SBUF; + 310 3 COM1.RX_TimeOut = TimeOutSet1; + 311 3 } + 312 2 } + 313 1 + 314 1 if(TI) + 315 1 { + 316 2 TI = 0; + 317 2 if(COM1.TX_read != COM1.TX_write) + 318 2 { + 319 3 SBUF = TX1_Buffer[COM1.TX_read]; + 320 3 if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0; + 321 3 } + 322 2 else COM1.B_TX_busy = 0; + 323 2 } + 324 1 } + 325 #endif + 326 + 327 /********************* UART2 ************************/ + 328 #ifdef UART2 + void TX2_write2buff(u8 dat) //д뷢ͻ壬ָ+1 + { + TX2_Buffer[COM2.TX_write] = dat; //װͻ + if(++COM2.TX_write >= COM_TX2_Lenth) COM2.TX_write = 0; + + if(COM2.B_TX_busy == 0) // + { + COM2.B_TX_busy = 1; //־æ + SET_TI2(); //ж + } + } + + void PrintString2(u8 *puts) + { + for (; *puts != 0; puts++) TX2_write2buff(*puts); //ֹͣ0 + } + + void UART2_int (void) interrupt UART2_VECTOR + { + if(RI2) + { + CLR_RI2(); + if(COM2.B_RX_OK == 0) + { + if(COM2.RX_Cnt >= COM_RX2_Lenth) COM2.RX_Cnt = 0; + RX2_Buffer[COM2.RX_Cnt++] = S2BUF; + COM2.RX_TimeOut = TimeOutSet2; + } + } + + if(TI2) + { + C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 7 + + CLR_TI2(); + if(COM2.TX_read != COM2.TX_write) + { + S2BUF = TX2_Buffer[COM2.TX_read]; + if(++COM2.TX_read >= COM_TX2_Lenth) COM2.TX_read = 0; + } + else COM2.B_TX_busy = 0; + } + } + #endif + 371 + 372 /********************* UART3 ************************/ + 373 #ifdef UART3 + 374 void TX3_write2buff(u8 dat) //д뷢ͻ壬ָ+1 + 375 { + 376 1 TX3_Buffer[COM3.TX_write] = dat; //װͻ + 377 1 if(++COM3.TX_write >= COM_TX3_Lenth) COM3.TX_write = 0; + 378 1 + 379 1 if(COM3.B_TX_busy == 0) // + 380 1 { + 381 2 COM3.B_TX_busy = 1; //־æ + 382 2 SET_TI3(); //ж + 383 2 } + 384 1 } + 385 + 386 void PrintString3(u8 *puts) + 387 { + 388 1 for (; *puts != 0; puts++) TX3_write2buff(*puts); //ֹͣ0 + 389 1 } + 390 + 391 void Printbuffer3(u8 *puts,u8 len) + 392 { + 393 1 u8 i; + 394 1 for (i=0; i= COM_RX3_Lenth) COM3.RX_Cnt = 0; + 407 3 RX3_Buffer[COM3.RX_Cnt++] = S3BUF; + 408 3 COM3.RX_TimeOut = TimeOutSet3; + 409 3 } + 410 2 } + 411 1 + 412 1 if(TI3) //ɱ־λ + 413 1 { + 414 2 CLR_TI3(); + 415 2 if(COM3.TX_read != COM3.TX_write) + 416 2 { + 417 3 S3BUF = TX3_Buffer[COM3.TX_read]; + 418 3 if(++COM3.TX_read >= COM_TX3_Lenth) COM3.TX_read = 0; + 419 3 } + 420 2 else COM3.B_TX_busy = 0; + 421 2 } + 422 1 } + C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 8 + + 423 #endif + 424 + 425 /********************* UART4 ************************/ + 426 #ifdef UART4 + void TX4_write2buff(u8 dat) //д뷢ͻ壬ָ+1 + { + TX4_Buffer[COM4.TX_write] = dat; //װͻ + if(++COM4.TX_write >= COM_TX4_Lenth) COM4.TX_write = 0; + + if(COM4.B_TX_busy == 0) // + { + COM4.B_TX_busy = 1; //־æ + SET_TI4(); //ж + } + } + + void PrintString4(u8 *puts) + { + for (; *puts != 0; puts++) TX4_write2buff(*puts); //ֹͣ0 + } + + void UART4_int (void) interrupt UART4_VECTOR + { + if(RI4) + { + CLR_RI4(); + if(COM4.B_RX_OK == 0) + { + if(COM4.RX_Cnt >= COM_RX4_Lenth) COM4.RX_Cnt = 0; + RX4_Buffer[COM4.RX_Cnt++] = S4BUF; + COM4.RX_TimeOut = TimeOutSet4; + } + } + + if(TI4) + { + CLR_TI4(); + if(COM4.TX_read != COM4.TX_write) + { + S4BUF = TX4_Buffer[COM4.TX_read]; + if(++COM4.TX_read >= COM_TX4_Lenth) COM4.TX_read = 0; + } + else COM4.B_TX_busy = 0; + } + } + #endif + 469 + 470 /*************** ڳʼ *****************/ + 471 void UART3_config(void) + 472 { + 473 1 COMx_InitDefine COMx_InitStructure; //ṹ + 474 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,U + -ART_9bit_BRTx + 475 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer3; //ʹò, BRT_Timer2, BRT_Timer3 (ע: 2̶ + -ʹBRT_Timer2) + 476 1 COMx_InitStructure.UART_BaudRate = 115200; //, 110 ~ 115200 + 477 1 COMx_InitStructure.UART_RxEnable = ENABLE; //, ENABLEDISABLE + 478 1 COMx_InitStructure.UART_Interrupt = ENABLE; //ж, ENABLEDISABLE + 479 1 COMx_InitStructure.UART_Priority = Priority_0; //ָжȼ(͵) Priority_0,Priority_1,Priori + -ty_2,Priority_3 + 480 1 COMx_InitStructure.UART_P_SW = UART3_SW_P50_P51; //л˿, UART3_SW_P00_P01,UART3_SW_P50_P51 + 481 1 UART_Configuration(UART3, &COMx_InitStructure); //ʼ3 UART1,UART2,UART3,UART4 + C51 COMPILER V9.01 UART 12/15/2025 20:45:03 PAGE 9 + + 482 1 + 483 1 //PrintString3("STC8 UART3 Test Programme!\r\n"); //UART3һַ + 484 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 1347 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = 128 ---- + PDATA SIZE = ---- ---- + DATA SIZE = 20 27 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/UART_Set.lst b/Listings/UART_Set.lst new file mode 100644 index 0000000..dbc741a --- /dev/null +++ b/Listings/UART_Set.lst @@ -0,0 +1,657 @@ +C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE UART_SET +OBJECT MODULE PLACED IN .\Objects\UART_Set.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE UART_Set.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\ + -UART_Set.lst) OBJECT(.\Objects\UART_Set.obj) + +line level source + + 1 #include "UART_Set.h" + 2 #include "UART.h" + 3 #include "pwm_control.h" + 4 #include "string.h" + 5 #include "config.h" + 6 #include "timer.h" + 7 #include "STC8xxxx.h" + 8 #include "PWM15bit.h" + 9 + 10 G_Usart g_Usart; + 11 G_answer g_answer; + 12 S_recv s_recv; + 13 + 14 u8 debug = 0x00; + 15 + 16 + 17 /* + 18 жϽյָǷϷ + 19 */ + 20 void Usart_judge_Data(void) + 21 { + 22 1 u8 len = 0; + 23 1 u8 i, sum; + 24 1 sum = 0; + 25 1 g_Usart.ok_flag = 0; + 26 1 + 27 1 if((recv_start_flag==1)&&(systick_1ms-recv_time>8)) + 28 1 { + 29 2 recv_start_flag=0; + 30 2 #if DEBUG_ + { + for(i=0;i s_recv.B_max) + 130 5 { + 131 6 s_recv.B_Ch[i] = s_recv.B_max; + 132 6 } + 133 5 + 134 5 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_Ch[i] * PWM_MAX_VALUE * s_recv.global_ + -brightness / 100 / 100 * s_recv.key_status[i]; + 135 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //µʼ + 136 5 + 137 5 s_recv.gradual_time[i] = g_Usart.recv_buffer[9] * 10; /*յĽʱ*/ + 138 5 /* + 139 5 Ϊ + 140 5 */ + 141 5 if (s_recv.gradual_time[i] == 0) + 142 5 { + 143 6 s_recv.gradual_time[i] = 1; + 144 6 } + 145 5 + 146 5 /*10mspwmֵ*/ + 147 5 if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i]) + 148 5 { + 149 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) / s_ + -recv.gradual_time[i]; + 150 6 if (s_pwm.every_change_10ms[i] < 1) + 151 6 { + 152 7 s_pwm.every_change_10ms[i] = 1; + 153 7 } + 154 6 } + 155 5 + 156 5 if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) + 157 5 { + 158 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) / s_ + -recv.gradual_time[i]; + 159 6 if (s_pwm.every_change_10ms[i] < 1) + 160 6 { + 161 7 s_pwm.every_change_10ms[i] = 1; + 162 7 } + 163 6 } + 164 5 } + 165 4 } + 166 3 + 167 3 //ڶʹλ + 168 3 for (i = 0; i < 4; i++) + 169 3 { + 170 4 if (g_Usart.recv_buffer[8] & (1 << i)) + 171 4 { + 172 5 s_recv.flag1[i+8] = 1; + 173 5 s_recv.flag2[i+8] = 0; + C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 4 + + 174 5 s_recv.B_Ch[i+8] = g_Usart.recv_buffer[13 - i]; + 175 5 + 176 5 if (s_recv.B_Ch[i+8] < s_recv.B_min) + 177 5 { + 178 6 s_recv.B_Ch[i+8] = s_recv.B_min; + 179 6 } + 180 5 + 181 5 if (s_recv.B_Ch[i+8] > s_recv.B_max) + 182 5 { + 183 6 s_recv.B_Ch[i+8] = s_recv.B_max; + 184 6 } + 185 5 + 186 5 s_pwm.wanttopwm[i+8] = PWM_MAX_VALUE - s_recv.B_Ch[i+8] * PWM_MAX_VALUE * s_recv.g + -lobal_brightness / 100 / 100 * s_recv.key_status[i+8]; + 187 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //µʼ + 188 5 + 189 5 s_recv.gradual_time[i+8] = g_Usart.recv_buffer[9] * 10; /*յĽʱ*/ + 190 5 + 191 5 /* + 192 5 Ϊ + 193 5 */ + 194 5 if (s_recv.gradual_time[i+8] == 0) + 195 5 { + 196 6 s_recv.gradual_time[i+8] = 1; + 197 6 } + 198 5 + 199 5 /*10mspwmֵ*/ + 200 5 if (s_pwm.wanttopwm[i+8] > s_pwm.currpwm[i+8]) + 201 5 { + 202 6 s_pwm.every_change_10ms[i+8] = (float)(s_pwm.wanttopwm[i+8] - s_pwm.currpwm[i+ + -8]) / s_recv.gradual_time[i+8]; + 203 6 if (s_pwm.every_change_10ms[i+8] < 1) + 204 6 { + 205 7 s_pwm.every_change_10ms[i+8] = 1; + 206 7 } + 207 6 } + 208 5 + 209 5 + 210 5 if (s_pwm.wanttopwm[i+8] < s_pwm.currpwm[i+8]) + 211 5 { + 212 6 s_pwm.every_change_10ms[i+8] = (float)(s_pwm.currpwm[i+8] - s_pwm.wanttopwm[i + -+8]) / s_recv.gradual_time[i+8]; + 213 6 if (s_pwm.every_change_10ms[i+8] < 1) + 214 6 { + 215 7 s_pwm.every_change_10ms[i+8] = 1; + 216 7 } + 217 6 } + 218 5 } + 219 4 } + 220 3 + 221 3 g_answer.short_answer_flag=0x01; + 222 3 break; + 223 3 + 224 3 + 225 3 //ģʽݼѭ + 226 3 case USART_CMD_SET_MODE: + 227 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SET_MODE_A; + 228 3 if(debug) + 229 3 { + 230 4 PrintString1("change light"); + 231 4 } + 232 3 + C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 5 + + 233 3 for (i = 0; i < 8; i++) + 234 3 { + 235 4 if (g_Usart.recv_buffer[7] & (1 << i)) + 236 4 { + 237 5 s_recv.flag1[i] = 0; + 238 5 s_recv.flag2[i] = 1; + 239 5 s_recv.mode[i] = g_Usart.recv_buffer[9]; + 240 5 s_recv.pwm_step[i] = g_Usart.recv_buffer[11]; + 241 5 + 242 5 if (s_recv.mode[i] == 0x00) + 243 5 { + 244 6 if (g_Usart.recv_buffer[10] == 0x00) + 245 6 { + 246 7 s_recv.forward[i] = 0; + 247 7 } + 248 6 + 249 6 if (g_Usart.recv_buffer[10] == 0x01) + 250 6 { + 251 7 s_recv.forward[i] = 1; + 252 7 } + 253 6 + 254 6 if (g_Usart.recv_buffer[10] == 0x02) //ת + 255 6 { + 256 7 if (s_recv.forward[i] == 0x01) + 257 7 { + 258 8 s_recv.forward[i] = 0x00; + 259 8 continue; // Ϊֹתֱ֮ӽһ״̬ + 260 8 } + 261 7 + 262 7 if (s_recv.forward[i] == 0x00) + 263 7 { + 264 8 s_recv.forward[i] = 0x01; + 265 8 continue; + 266 8 } + 267 7 } + 268 6 } + 269 5 } + 270 4 } + 271 3 + 272 3 + 273 3 for (i = 0; i < 4; i++) + 274 3 { + 275 4 if (g_Usart.recv_buffer[8] & (1 << i)) + 276 4 { + 277 5 s_recv.flag1[i+8] = 0; + 278 5 s_recv.flag2[i+8] = 1; + 279 5 s_recv.mode[i+8] = g_Usart.recv_buffer[9]; + 280 5 s_recv.pwm_step[i+8] = g_Usart.recv_buffer[11]; + 281 5 + 282 5 if (s_recv.mode[i+8] == 0x00) + 283 5 { + 284 6 if (g_Usart.recv_buffer[10] == 0x00) + 285 6 { + 286 7 s_recv.forward[i+8] = 0; + 287 7 } + 288 6 + 289 6 if (g_Usart.recv_buffer[10] == 0x01) + 290 6 { + 291 7 s_recv.forward[i+8] = 1; + 292 7 } + 293 6 + 294 6 if (g_Usart.recv_buffer[10] == 0x02) //ת + C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 6 + + 295 6 { + 296 7 if (s_recv.forward[i+8] == 0x01) + 297 7 { + 298 8 s_recv.forward[i+8] = 0x00; + 299 8 continue; // Ϊֹתֱ֮ӽһ״̬ + 300 8 } + 301 7 + 302 7 if (s_recv.forward[i+8] == 0x00) + 303 7 { + 304 8 s_recv.forward[i+8] = 0x01; + 305 8 continue; + 306 8 } + 307 7 } + 308 6 } + 309 5 } + 310 4 } + 311 3 g_answer.short_answer_flag=0x01; + 312 3 break; + 313 3 + 314 3 + 315 3 // + 316 3 case USART_CMD_ALL_BRIGHTNESS: + 317 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_ALL_BRIGHTNESS_A; + 318 3 + 319 3 if(debug) + 320 3 { + 321 4 PrintString1("global light"); + 322 4 } + 323 3 + 324 3 // s_recv.changeflag = 1; + 325 3 if (g_Usart.recv_buffer[7] & (1 << 5)) //ȫֿɵ + 326 3 { + 327 4 s_recv.B_min = g_Usart.recv_buffer[10]; + 328 4 for (i = 0; i < 12; i++) + 329 4 { + 330 5 if ( s_pwm.currvalue[i] < s_recv.B_min) + 331 5 { + 332 6 s_pwm.currvalue[i] = s_recv.B_min; + 333 6 } + 334 5 } + 335 4 } + 336 3 + 337 3 if (g_Usart.recv_buffer[7] & (1 << 6)) //ȫֿɵ + 338 3 { + 339 4 s_recv.B_max = g_Usart.recv_buffer[9]; + 340 4 for (i = 0; i < 12; i++) + 341 4 { + 342 5 if ( s_pwm.currvalue[i] > s_recv.B_max) + 343 5 { + 344 6 s_pwm.currvalue[i] = s_recv.B_max; + 345 6 } + 346 5 } + 347 4 } + 348 3 + 349 3 if (g_Usart.recv_buffer[7] & (1 << 7)) //ȫ + 350 3 { + 351 4 s_recv.global_brightness = g_Usart.recv_buffer[8]; + 352 4 + 353 4 for (i = 0; i < 12; i++) + 354 4 { + 355 5 // s_pwm.wanttopwmflash[i] = PWM_MAX_VALUE - s_pwm.currvalue[i] * PWM_MAX_VALUE * + -s_recv.global_brightness / 100 / 100 * s_recv.key_status[i]; + C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 7 + + 356 5 + 357 5 s_recv.flag1[i] = 1; + 358 5 s_recv.flag2[i] = 0; + 359 5 + 360 5 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_Ch[i] * PWM_MAX_VALUE * s_recv.glo + -bal_brightness / 100 / 100 * s_recv.key_status[i]; + 361 5 s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //µʼ + 362 5 if(s_pwm.wanttopwm[i] > PWM_MAX_VALUE) + 363 5 { + 364 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE; + 365 6 } + 366 5 + 367 5 /*10mspwmֵ*/ + 368 5 if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i]) + 369 5 { + 370 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) + -/ s_recv.gradual_time[i]; + 371 6 if (s_pwm.every_change_10ms[i] < 1) + 372 6 { + 373 7 s_pwm.every_change_10ms[i] = 1; + 374 7 } + 375 6 } + 376 5 + 377 5 if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) + 378 5 { + 379 6 s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) + -/ s_recv.gradual_time[i]; + 380 6 if (s_pwm.every_change_10ms[i] < 1) + 381 6 { + 382 7 s_pwm.every_change_10ms[i] = 1; + 383 7 } + 384 6 } + 385 5 } + 386 4 } + 387 3 + 388 3 + 389 3 g_answer.short_answer_flag=0x01; + 390 3 break; + 391 3 + 392 3 + 393 3 //ÿ״̬ + 394 3 case USART_CMD_SWITCH_STATUS: + 395 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SWITCH_STATUS_A; + 396 3 if(debug) + 397 3 { + 398 4 PrintString1("switch state"); + 399 4 } + 400 3 + 401 3 for (i = 0; i < 8; i++) + 402 3 { + 403 4 if (g_Usart.recv_buffer[7] & (1 << i)) + 404 4 { + 405 5 if (g_Usart.recv_buffer[9 + i] == 0x01) + 406 5 { + 407 6 s_recv.key_status[i] = 0x01; + 408 6 //s_pwm.currvalue[i] = s_pwm.thenvalue[i]; + 409 6 Open_Light(i); + 410 6 } + 411 5 + 412 5 if (g_Usart.recv_buffer[9 + i] == 0x00) + 413 5 { + 414 6 //s_pwm.thenvalue[i] = s_pwm.currvalue[i]; + C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 8 + + 415 6 Close_Light(i); + 416 6 s_recv.flag1[i] = 0; + 417 6 s_recv.flag2[i] = 0; + 418 6 s_recv.mode[i] = 2; + 419 6 s_recv.key_status[i] = 0x00; + 420 6 } + 421 5 + 422 5 if (g_Usart.recv_buffer[9 + i] == 0x02) + 423 5 { + 424 6 if (s_recv.key_status[i] == 0x00) + 425 6 { + 426 7 s_recv.key_status[i] = 0x01; + 427 7 //s_pwm.currvalue[i] = s_pwm.thenvalue[i]; + 428 7 Open_Light(i); + 429 7 continue; + 430 7 } + 431 6 + 432 6 if (s_recv.key_status[i] == 0x01) + 433 6 { + 434 7 //s_pwm.thenvalue[i] = s_pwm.currvalue[i]; + 435 7 Close_Light(i); + 436 7 s_recv.flag1[i] = 0; + 437 7 s_recv.flag2[i] = 0; + 438 7 s_recv.mode[i] = 2; + 439 7 s_recv.key_status[i] = 0x00; + 440 7 continue; + 441 7 } + 442 6 } + 443 5 } + 444 4 } + 445 3 + 446 3 + 447 3 for (i = 0; i < 4; i++) + 448 3 { + 449 4 if (g_Usart.recv_buffer[8] & (1 << i)) + 450 4 { + 451 5 if (g_Usart.recv_buffer[9 + 8 + i] == 0x01) + 452 5 { + 453 6 s_recv.key_status[i+8] = 0x01; + 454 6 //s_pwm.currvalue[i+8] = s_pwm.thenvalue[i]; + 455 6 Open_Light(i+8); + 456 6 } + 457 5 + 458 5 if (g_Usart.recv_buffer[9 +8 + i] == 0x00) + 459 5 { + 460 6 //s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8]; + 461 6 Close_Light(i+8); + 462 6 s_recv.flag1[i+8] = 0; + 463 6 s_recv.flag2[i+8] = 0; + 464 6 s_recv.mode[i+8] = 2; + 465 6 s_recv.key_status[i+8] = 0x00; + 466 6 } + 467 5 + 468 5 if (g_Usart.recv_buffer[9 + 8 + i] == 0x02) + 469 5 { + 470 6 if (s_recv.key_status[i+8] == 0x00) + 471 6 { + 472 7 s_recv.key_status[i+8] = 0x01; + 473 7 //s_pwm.currvalue[i+8] = s_pwm.thenvalue[i]; + 474 7 Open_Light(i+8); + 475 7 continue; + 476 7 } + C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 9 + + 477 6 + 478 6 + 479 6 if (s_recv.key_status[i+8] == 0x01) + 480 6 { + 481 7 //s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8]; + 482 7 Close_Light(i+8); + 483 7 s_recv.flag1[i+8] = 0; + 484 7 s_recv.flag2[i+8] = 0; + 485 7 s_recv.mode[i+8] = 2; + 486 7 s_recv.key_status[i+8] = 0x00; + 487 7 continue; + 488 7 } + 489 6 } + 490 5 } + 491 4 } + 492 3 g_answer.short_answer_flag=0x01; + 493 3 break; + 494 3 case USART_CMD_DEBUG_SET: + 495 3 g_answer.short_answer[UART_FMT_CMD]=USART_CMD_DEBUG_SET_A; + 496 3 if(debug) + 497 3 { + 498 4 PrintString1("debug"); + 499 4 } + 500 3 debug = g_Usart.recv_buffer[7]; + 501 3 g_answer.short_answer_flag=0x01; + 502 3 break; + 503 3 case Usart_CMD_Version: + 504 3 g_answer.version_answer[UART_FMT_CMD]=Usart_CMD_Version_A; + 505 3 g_answer.version_answer_flag=0x01; + 506 3 if(debug) + 507 3 { + 508 4 PrintString1("version"); + 509 4 } + 510 3 break; + 511 3 } + 512 2 g_Usart.ok_flag=0; + 513 2 } + 514 1 } + 515 + 516 void Usart_answer(void) + 517 { + 518 1 u8 i=0; + 519 1 u8 checksum=0; + 520 1 if(g_answer.long_answer_flag) + 521 1 { + 522 2 g_answer.long_answer[UART_FMT_ADDR_TX]=ADDR_RX; + 523 2 g_answer.long_answer[UART_FMT_TYPE]=g_Usart.Sn; + 524 2 g_answer.long_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; + 525 2 g_answer.long_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; + 526 2 g_answer.long_answer[UART_FMT_LEN]=0x14; + 527 2 g_answer.long_answer[7] = s_recv.global_brightness; + 528 2 for(i=0;i<12;i++) + 529 2 { + 530 3 g_answer.long_answer[8+i] = s_pwm.currvalue[11-i]; + 531 3 if(s_recv.key_status[i] == 0x01) + 532 3 { + 533 4 g_answer.long_answer[8+i] |= 0x80; + 534 4 } + 535 3 } + 536 2 checksum=sumfunc(g_answer.long_answer,0x14); + 537 2 g_answer.long_answer[UART_FMT_CKS]=checksum; + 538 2 + C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 10 + + 539 2 Printbuffer3(g_answer.long_answer,0x14); //3ӡ + 540 2 + 541 2 if(debug) + 542 2 { + 543 3 // PrintString1("long answer"); + 544 3 } + 545 2 g_answer.long_answer_flag=0; + 546 2 memset(g_Usart.recv_buffer,0,32); + 547 2 } + 548 1 if(g_answer.short_answer_flag) + 549 1 { + 550 2 g_answer.short_answer[UART_FMT_ADDR_TX]=ADDR_RX; + 551 2 g_answer.short_answer[UART_FMT_TYPE]=g_Usart.Sn; + 552 2 g_answer.short_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; + 553 2 g_answer.short_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; + 554 2 g_answer.short_answer[UART_FMT_LEN]=0x07; + 555 2 checksum=sumfunc(g_answer.short_answer,0x07); + 556 2 g_answer.short_answer[UART_FMT_CKS]=checksum; + 557 2 Printbuffer3(g_answer.short_answer,0x07); + 558 2 if(debug) + 559 2 { + 560 3 PrintString1("short answer"); + 561 3 } + 562 2 + 563 2 + 564 2 g_answer.short_answer_flag=0; + 565 2 memset(g_Usart.recv_buffer,0,32); + 566 2 } + 567 1 + 568 1 if(g_answer.version_answer_flag) + 569 1 { + 570 2 g_answer.version_answer[UART_FMT_ADDR_TX]=ADDR_RX; + 571 2 g_answer.version_answer[UART_FMT_TYPE]=g_Usart.Sn; + 572 2 g_answer.version_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; + 573 2 g_answer.version_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; + 574 2 g_answer.version_answer[UART_FMT_LEN]=0x09; + 575 2 g_answer.version_answer[UART_FMT_CMD+1]=Version_High; + 576 2 g_answer.version_answer[UART_FMT_CMD+2]=Version_Low; + 577 2 + 578 2 checksum=sumfunc(g_answer.version_answer,0x09); + 579 2 g_answer.version_answer[UART_FMT_CKS]=checksum; + 580 2 Printbuffer3(g_answer.version_answer,0x09); + 581 2 if(debug) + 582 2 { + 583 3 PrintString1("version_answer"); + 584 3 } + 585 2 g_answer.version_answer_flag=0; + 586 2 memset(g_Usart.recv_buffer,0,32); + 587 2 } + 588 1 memset(&g_answer,0,sizeof(g_answer)); + 589 1 } + 590 + 591 u8 sumfunc(u8* answer,u8 len) + 592 { + 593 1 u8 m = 0; + 594 1 u8 j; + 595 1 for (j = 0; j < len; j++) + 596 1 { + 597 2 if (5 == j) continue; + 598 2 m += *(answer+j); + 599 2 } + 600 1 return ~m; + C51 COMPILER V9.01 UART_SET 12/15/2025 20:45:04 PAGE 11 + + 601 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 4719 ---- + CONSTANT SIZE = 101 ---- + XDATA SIZE = 272 ---- + PDATA SIZE = ---- ---- + DATA SIZE = 1 7 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/WDT.lst b/Listings/WDT.lst new file mode 100644 index 0000000..30367ae --- /dev/null +++ b/Listings/WDT.lst @@ -0,0 +1,60 @@ +C51 COMPILER V9.01 WDT 12/15/2025 20:45:04 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE WDT +OBJECT MODULE PLACED IN .\Objects\WDT.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE WDT.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\WDT.l + -st) OBJECT(.\Objects\WDT.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 "WDT.h" + 14 + 15 //======================================================================== + 16 // : void WDT_Inilize(WDT_InitTypeDef *WDT) + 17 // : Źʼ. + 18 // : WDT: ṹ,οWDT.hĶ. + 19 // : none. + 20 // 汾: V1.0, 2020-09-16 + 21 //======================================================================== + 22 void WDT_Inilize(WDT_InitTypeDef *WDT) + 23 { + 24 1 if(WDT->WDT_Enable == ENABLE) WDT_CONTR = D_EN_WDT; //ʹܿŹ + 25 1 + 26 1 WDT_PS_Set(WDT->WDT_PS); //ŹʱʱӷƵϵ WDT_SCALE_2,WDT_SCALE_4,WDT_SCALE_8,WDT_SCALE_16,WDT + -_SCALE_32,WDT_SCALE_64,WDT_SCALE_128,WDT_SCALE_256 + 27 1 if(WDT->WDT_IDLE_Mode == WDT_IDLE_STOP) WDT_CONTR &= ~0x08; //IDLEģʽֹͣ + 28 1 else WDT_CONTR |= 0x08; //IDLEģʽ + 29 1 } + 30 + 31 /********************* Ź *************************/ + 32 void WDT_Clear (void) + 33 { + 34 1 WDT_CONTR |= D_CLR_WDT; // ι + 35 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 45 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/key.lst b/Listings/key.lst new file mode 100644 index 0000000..3dd4669 --- /dev/null +++ b/Listings/key.lst @@ -0,0 +1,183 @@ +C51 COMPILER V9.01 KEY 12/15/2025 20:45:04 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE KEY +OBJECT MODULE PLACED IN .\Objects\key.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE key.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\key.l + -st) OBJECT(.\Objects\key.obj) + +line level source + + 1 #include "key.h" + 2 #include "GPIO.h" + 3 #include "timer.h" + 4 #include "string.h" + 5 #include "pwm_control.h" + 6 KEY_t g_Key; + 7 + 8 void Key_Init(void) + 9 { + 10 1 GPIO_InitTypeDef GPIO_InitStructure1; //ṹ + 11 1 /***********************************1*******************************************/ + 12 1 GPIO_InitStructure1.Pin = GPIO_Pin_4; //ָҪʼIO 4 + 13 1 GPIO_InitStructure1.Mode = GPIO_PullUp; //ָIOʽ,GPIO_PullUp + 14 1 GPIO_Inilize(GPIO_P4,&GPIO_InitStructure1); //ʼ + 15 1 memset(&g_Key, 0, sizeof(g_Key)); + 16 1 } + 17 + 18 void Key_ScanTask(void) + 19 { + 20 1 u8 i; + 21 1 static u32 update_10ms = 0; + 22 1 + 23 1 if (systick_1ms - update_10ms > 10) + 24 1 { + 25 2 update_10ms = systick_1ms; + 26 2 + 27 2 for (i = 0; i < KEY_CHN_MAX; i++) + 28 2 { + 29 3 switch (g_Key.KEY_STA[i]) + 30 3 { + 31 4 case KEY_STA_S0: + 32 4 if ( P44 == KEY_PRESS ) + 33 4 { + 34 5 if (g_Key.delayCnt[i] < KEY_DELAY_COUNT) + 35 5 { + 36 6 g_Key.delayCnt[i]++; + 37 6 } + 38 5 else + 39 5 { + 40 6 g_Key.KEY_STA[i] = KEY_STA_S1; // + 41 6 g_Key.key_time[i] = 0; + 42 6 g_Key.delayCnt[i] = 0; + 43 6 } + 44 5 } + 45 4 else + 46 4 { + 47 5 g_Key.delayCnt[i] = 0; + 48 5 g_Key.KEY_STA[i] = KEY_STA_S0; + 49 5 g_Key.key_val[i] = KEY_VAL_NOT; + 50 5 } + 51 4 break; + 52 4 case KEY_STA_S1: + 53 4 g_Key.key_time[i] ++; + 54 4 if ( g_Key.key_time[i] < KEY_DELAY_COUNT_LONG ) + C51 COMPILER V9.01 KEY 12/15/2025 20:45:04 PAGE 2 + + 55 4 { + 56 5 if ( P44 == KEY_LOOSEN ) //ɿ + 57 5 { + 58 6 g_Key.key_val[i] = KEY_VAL_SHORT_PRESS; //̰ɿ + 59 6 g_Key.key_time[i] = 0; + 60 6 g_Key.KEY_STA[i] = KEY_STA_S0; + 61 6 } + 62 5 } + 63 4 else + 64 4 { + 65 5 g_Key.KEY_STA[i] = KEY_STA_S2; + 66 5 g_Key.key_time[i] = 0; + 67 5 g_Key.key_longPress[i] = KEY_VAL_SINGLE_LONG_PRESS; // + 68 5 g_Key.key_val[i] = KEY_VAL_CONT_LONG_PRESS; // + 69 5 } + 70 4 break; + 71 4 + 72 4 case KEY_STA_S2: + 73 4 g_Key.key_longPress[i] = KEY_VAL_NOT; + 74 4 if ( P44 == KEY_LOOSEN ) + 75 4 { + 76 5 g_Key.KEY_STA[i] = KEY_STA_S0; + 77 5 g_Key.key_val[i] = KEY_VAL_LONG_PRESS_LOOSEN; //ɿ + 78 5 } + 79 4 break; + 80 4 } + 81 3 } + 82 2 } + 83 1 } + 84 + 85 + 86 void KEY_TEST(void) + 87 { + 88 1 u8 flag; + 89 1 if (g_Key.key_val[KEY_CH1] == KEY_VAL_SHORT_PRESS) + 90 1 { + 91 2 g_Key.key_val[KEY_CH1] = KEY_VAL_NOT; + 92 2 s_pwm.key_value++; + 93 2 switch (s_pwm.key_value) + 94 2 { + 95 3 case 1: + 96 3 s_pwm.currpwm[0] = 2000ul; //90% + 97 3 s_pwm.currvalue[0]=0x5A; + 98 3 break; + 99 3 case 2: + 100 3 s_pwm.currpwm[1] = 2000ul; + 101 3 s_pwm.currvalue[1]=0x5A; + 102 3 break; + 103 3 case 3: + 104 3 s_pwm.currpwm[2] = 2000ul; + 105 3 s_pwm.currvalue[2]=0x5A; + 106 3 break; + 107 3 case 4: + 108 3 s_pwm.currpwm[3] = 2000ul; + 109 3 s_pwm.currvalue[3]=0x5A; + 110 3 break; + 111 3 case 5: + 112 3 s_pwm.currpwm[4] = 2000ul; + 113 3 s_pwm.currvalue[4]=0x5A; + 114 3 break; + 115 3 case 6: + 116 3 s_pwm.currpwm[5] = 2000ul; + C51 COMPILER V9.01 KEY 12/15/2025 20:45:04 PAGE 3 + + 117 3 s_pwm.currvalue[5]=0x5A; + 118 3 break; + 119 3 case 7: + 120 3 s_pwm.currpwm[6] = 2000ul; + 121 3 s_pwm.currvalue[6]=0x5A; + 122 3 break; + 123 3 case 8: + 124 3 s_pwm.currpwm[7] = 2000ul; + 125 3 s_pwm.currvalue[7]=0x5A; + 126 3 break; + 127 3 case 9: + 128 3 s_pwm.currpwm[8] = 2000ul; + 129 3 s_pwm.currvalue[8]=0x5A; + 130 3 break; + 131 3 case 10: + 132 3 s_pwm.currpwm[9] = 2000ul; + 133 3 s_pwm.currvalue[9]=0x5A; + 134 3 break; + 135 3 case 11: + 136 3 s_pwm.currpwm[10] = 2000ul; + 137 3 s_pwm.currvalue[10]=0x5A; + 138 3 break; + 139 3 case 12: + 140 3 s_pwm.currpwm[11] = 2000ul; + 141 3 s_pwm.currvalue[11]=0x5A; + 142 3 break; + 143 3 case 13: + 144 3 for(flag=0;flag<12;flag++) + 145 3 { + 146 4 s_pwm.currpwm[flag] = PWM_MAX_VALUE; + 147 4 s_pwm.currvalue[flag]=0x00; + 148 4 } + 149 3 s_pwm.key_value = 0; + 150 3 break; + 151 3 default: + 152 3 break; + 153 3 } + 154 2 } + 155 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 553 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 10 2 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/main.lst b/Listings/main.lst new file mode 100644 index 0000000..9598aa2 --- /dev/null +++ b/Listings/main.lst @@ -0,0 +1,162 @@ +C51 COMPILER V9.01 MAIN 12/15/2025 20:45:03 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE MAIN +OBJECT MODULE PLACED IN .\Objects\main.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main + -.lst) OBJECT(.\Objects\main.obj) + +line level source + + 1 #include "config.h" + 2 #include "gpio.h" + 3 #include "UART.h" + 4 #include "string.h" + 5 #include "UART_Set.h" + 6 #include "pwm_control.h" + 7 #include "Start_Init.h" + 8 #include "key.h" + 9 #include "WDT.h" + 10 /************* ˵ ************** + 11 + 12 ̻STC8H8K64UΪоƬʵ8бдԣSTC8GSTC8HϵоƬͨòο. + 13 + 14 ˫ȫ˫жϷʽշͨѶ + 15 + 16 ͨPCMCU, MCUյͨڰյԭ, Ĭϲʣ115200,N,8,1. + 17 + 18 ͨ UART.h ͷļ UART1~UART4 壬ͬͨĴͨš + 19 + 20 öʱʷʹ1Tģʽ(ǵͲ12T)ѡɱʱƵʣ߾ȡ + 21 + 22 ʱ, ѡʱ 22.1184MHz (ļ"config.h"޸). + 23 + 24 + 25 /******************* IOú *******************/ + 26 + 27 + 28 void GPIO1_config(void) + 29 { + 30 1 GPIO_InitTypeDef GPIO_InitStructure; //ṹ + 31 1 + 32 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + 33 1 GPIO_InitStructure.Mode = GPIO_PullUp; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O + -UT_PP + 34 1 GPIO_Inilize(GPIO_P3,&GPIO_InitStructure); //ʼ + 35 1 } + 36 + 37 /*************** ڳʼ *****************/ + 38 void UART1_config(void) + 39 { + 40 1 COMx_InitDefine COMx_InitStructure; //ṹ + 41 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART + -_9bit_BRTx + 42 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //ʹò, BRT_Timer1, BRT_Timer2 (ע: 2̶ʹ + -BRT_Timer2) + 43 1 COMx_InitStructure.UART_BaudRate = 115200; //, һ 110 ~ 115200 + 44 1 COMx_InitStructure.UART_RxEnable = ENABLE; //, ENABLEDISABLE + 45 1 COMx_InitStructure.BaudRateDouble = DISABLE; //ʼӱ, ENABLEDISABLE + 46 1 COMx_InitStructure.UART_Interrupt = ENABLE; //ж, ENABLEDISABLE + 47 1 COMx_InitStructure.UART_Priority = Priority_0; //ָжȼ(͵) Priority_0,Priority_1,Priori + -ty_2,Priority_3 + 48 1 COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //л˿, UART1_SW_P30_P31,UART1_SW_P36_P37,UAR + -T1_SW_P16_P17,UART1_SW_P43_P44 + 49 1 UART_Configuration(UART1, &COMx_InitStructure); //ʼ1 UART1,UART2,UART3,UART4 + C51 COMPILER V9.01 MAIN 12/15/2025 20:45:03 PAGE 2 + + 50 1 + 51 1 //PrintString1("STC8H8K64U UART1 Test Programme!\r\n"); //UART1һַ + 52 1 } + 53 + 54 /********************WDT INT ********************/ + 55 void WDT_config(void) + 56 { + 57 1 WDT_InitTypeDef WDT_InitStructure; //ṹ + 58 1 + 59 1 WDT_InitStructure.WDT_Enable = ENABLE; //жʹ ENABLEDISABLE + 60 1 WDT_InitStructure.WDT_IDLE_Mode = WDT_IDLE_STOP; //IDLEģʽǷֹͣ WDT_IDLE_STOP,WDT_IDLE_RUN + 61 1 WDT_InitStructure.WDT_PS = WDT_SCALE_32; //ŹʱʱӷƵϵ WDT_SCALE_2,WDT_SCALE_4,WDT + -_SCALE_8,WDT_SCALE_16,WDT_SCALE_32,WDT_SCALE_64,WDT_SCALE_128,WDT_SCALE_256 + 62 1 WDT_Inilize(&WDT_InitStructure); //ʼ + 63 1 } + 64 + 65 u8 count_flag=0; + 66 void main(void) + 67 { + 68 1 GPIO_config(); + 69 1 UART3_config(); + 70 1 Start_Init(); + 71 1 pwm_config(); + 72 1 Timer2_Init_1ms(); + 73 1 Key_Init(); + 74 1 GPIO1_config(); + 75 1 UART1_config(); + 76 1 WDT_config(); //Ź629msλ + 77 1 + 78 1 PCON &= ~POF; //LVDжϱ־λ + 79 1 RSTCFG = 0x41; //LVD:2.4Vѹλ + 80 1 EA = 1; + 81 1 + 82 1 if(debug) + 83 1 { + 84 2 PrintString1("MCU Start"); + 85 2 } + 86 1 + 87 1 while (1) + 88 1 { + 89 2 WDT_Clear(); //幷 + 90 2 count_flag++; + 91 2 + 92 2 //Ϊ˱֤ijѹ2.2V + 93 2 if(count_flag==1) + 94 2 { + 95 3 P10=1; + 96 3 } + 97 2 if(count_flag==8) + 98 2 { + 99 3 P10=0; + 100 3 } + 101 2 if(count_flag==10) + 102 2 { + 103 3 count_flag=0; + 104 3 } + 105 2 + 106 2 Usart_judge_Data(); + 107 2 + 108 2 Usart_Deal_Data(); + 109 2 + 110 2 deal_command1(); + C51 COMPILER V9.01 MAIN 12/15/2025 20:45:03 PAGE 3 + + 111 2 + 112 2 deal_command2(); + 113 2 + 114 2 // checkpwm(); + 115 2 + 116 2 show_light(); + 117 2 + 118 2 Usart_answer(); + 119 2 + 120 2 Key_ScanTask(); + 121 2 + 122 2 KEY_TEST(); + 123 2 + 124 2 } + 125 1 } + 126 + 127 + 128 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 175 ---- + CONSTANT SIZE = 10 ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 1 17 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/pwm_control.lst b/Listings/pwm_control.lst new file mode 100644 index 0000000..33bf1e5 --- /dev/null +++ b/Listings/pwm_control.lst @@ -0,0 +1,421 @@ +C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE PWM_CONTROL +OBJECT MODULE PLACED IN .\Objects\pwm_control.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE pwm_control.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listin + -gs\pwm_control.lst) OBJECT(.\Objects\pwm_control.obj) + +line level source + + 1 #include "pwm_control.h" + 2 #include "GPIO.h" + 3 #include "STC8xxxx.h" + 4 #include "PWM15bit.h" + 5 #include "timer.h" + 6 #include "UART_Set.h" + 7 #include "string.h" + 8 S_PWM s_pwm; + 9 /* + 10 *1.5.0/5.1ijʼ + 11 *2.ʼPWM + 12 *3.LED_DRV_12V_ENõƬ + 13 */ + 14 /******************* IOú *******************/ + 15 void GPIO_config(void) + 16 { + 17 1 GPIO_InitTypeDef GPIO_InitStructure; //ṹ + 18 1 /***********************************1*******************************************/ + 19 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + 20 1 GPIO_InitStructure.Mode = GPIO_PullUp; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O + -UT_PP + 21 1 GPIO_Inilize(GPIO_P5,&GPIO_InitStructure); //ʼ + 22 1 + 23 1 /***********************************2*******************************************/ + 24 1 GPIO_InitStructure.Pin = GPIO_Pin_All; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + 25 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O + -UT_PP + 26 1 GPIO_Inilize(GPIO_P0,&GPIO_InitStructure); //ʼ + 27 1 + 28 1 GPIO_InitStructure.Pin = GPIO_Pin_Left; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + 29 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O + -UT_PP + 30 1 GPIO_Inilize(GPIO_P2,&GPIO_InitStructure); //ʼ + 31 1 + 32 1 /***********************************3*******************************************/ + 33 1 GPIO_InitStructure.Pin = GPIO_Pin_0; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + 34 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_O + -UT_PP + 35 1 GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //ʼ + 36 1 } + 37 + 38 void pwm_config(void) + 39 { + 40 1 u8 i; + 41 1 PWM15_InitTypeDef PWM15_InitStructure; + 42 1 + 43 1 PWM15_InitStructure.PWM_Enable = ENABLE; //PWMʹ, ENABLE, DISABLE + 44 1 PWM15_InitStructure.PWM_Period = 0x04E2; //PWM, 1250,ƵΪ16khz + 45 1 PWM15_InitStructure.PWM_Clock_Sel = PWMn_CLK_SYS; //ʱԴѡ, PWMn_CLK_SYS, PWMn_CLK_TM2 + 46 1 PWM15_InitStructure.PWM_Clock_PS = 0; //ϵͳʱӷƵ(PS+1Ƶ), 0~15 + 47 1 PWM15_InitStructure.PWM_Counter = ENABLE; //ʹ, ENABLE, DISABLE + 48 1 + 49 1 PWM15_Init(PWM0,&PWM15_InitStructure); //ʼPWM0 + 50 1 PWM15_Init(PWM2,&PWM15_InitStructure); //ʼPWM2 + C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 2 + + 51 1 + 52 1 PWM15Duty(PWM00,initial_Val); //PWM_ID, ͵ƽλ, ߵƽλ + 53 1 PWM15Duty(PWM01,initial_Val); //PWM_ID, ͵ƽλ, ߵƽλ + 54 1 PWM15Duty(PWM02,initial_Val); //PWM_ID, ͵ƽλ, ߵƽλ + 55 1 PWM15Duty(PWM03,initial_Val); //PWM_ID, ͵ƽλ, ߵƽλ + 56 1 PWM15Duty(PWM04,initial_Val); + 57 1 PWM15Duty(PWM05,initial_Val); + 58 1 PWM15Duty(PWM06,initial_Val); + 59 1 PWM15Duty(PWM07,initial_Val); + 60 1 + 61 1 PWM15Duty(PWM20,initial_Val); + 62 1 PWM15Duty(PWM21,initial_Val); + 63 1 PWM15Duty(PWM22,initial_Val); + 64 1 PWM15Duty(PWM23,initial_Val); + 65 1 + 66 1 memset(&s_pwm,0,sizeof(s_pwm)); + 67 1 for(i=0;i<12;i++) + 68 1 { + 69 2 s_pwm.currpwm[i]=initial_Val; + 70 2 } + 71 1 PWMChannelCtrl(PWM00,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 72 1 PWMChannelCtrl(PWM01,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 73 1 PWMChannelCtrl(PWM02,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 74 1 PWMChannelCtrl(PWM03,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 75 1 PWMChannelCtrl(PWM04,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 76 1 PWMChannelCtrl(PWM05,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 77 1 PWMChannelCtrl(PWM06,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 78 1 PWMChannelCtrl(PWM07,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 79 1 + 80 1 PWMChannelCtrl(PWM20,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 81 1 PWMChannelCtrl(PWM21,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 82 1 PWMChannelCtrl(PWM22,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 83 1 PWMChannelCtrl(PWM23,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶ + -ж, һж + 84 1 + 85 1 } + 86 + 87 + 88 //10msһ + 89 void deal_command1(void) + 90 { + 91 1 int i=0; + 92 1 static u32 systick_command1 = 0; + 93 1 + 94 1 if (systick_1ms - systick_command1 >= 10) + 95 1 { + 96 2 systick_command1 = systick_1ms; + 97 2 for (i = 0; i < 12; i++) + 98 2 { + 99 3 if (s_recv.flag1[i]) + 100 3 { + C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 3 + + 101 4 if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i]) + 102 4 { + 103 5 //s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; + 104 5 s_pwm.doublecurrpwm[i] += s_pwm.every_change_10ms[i]; + 105 5 s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i]; + 106 5 + 107 5 if(s_recv.global_brightness==0) + 108 5 { + 109 6 s_pwm.currvalue[i]=0; + 110 6 } + 111 5 else + 112 5 { + 113 6 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALU + -E / s_recv.global_brightness; + 114 6 } + 115 5 + 116 5 if ( s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) + 117 5 { + 118 6 s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + 119 6 } + 120 5 } + 121 4 + 122 4 + 123 4 //Ҫȴڵǰֵʱ + 124 4 if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) + 125 4 { + 126 5 //s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; + 127 5 s_pwm.doublecurrpwm[i] -= s_pwm.every_change_10ms[i]; + 128 5 s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i]; + 129 5 + 130 5 if(s_recv.global_brightness==0) + 131 5 { + 132 6 s_pwm.currvalue[i]=0; + 133 6 } + 134 5 else + 135 5 { + 136 6 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_ + -brightness; + 137 6 } + 138 5 + 139 5 if (s_pwm.currpwm[i] < s_pwm.wanttopwm[i] + s_pwm.every_change_10ms[i]) + 140 5 { + 141 6 s_pwm.currpwm[i] = 0; + 142 6 s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + 143 6 } + 144 5 } + 145 4 + 146 4 + 147 4 if (s_pwm.wanttopwm[i] == s_pwm.currpwm[i]) + 148 4 { + 149 5 s_pwm.currvalue[i] = s_recv.B_Ch[i]; + 150 5 s_recv.flag1[i] = 0; + 151 5 } + 152 4 } + 153 3 } + 154 2 } + 155 1 } + 156 + 157 void deal_command2(void) + 158 { + 159 1 int i=0; + 160 1 static u32 systick_command2 = 0; + C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 4 + + 161 1 if (systick_1ms - systick_command2 >= 10) + 162 1 { + 163 2 systick_command2 = systick_1ms; + 164 2 for (i = 0; i < 12; i++) + 165 2 { + 166 3 if (s_recv.flag2[i]) + 167 3 { + 168 4 switch (s_recv.mode[i]) + 169 4 { + 170 5 //ֹͣģʽ + 171 5 case 0x00: + 172 5 //Ƚ + 173 5 if (s_recv.forward[i] == 0x00) + 174 5 { + 175 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_min * PWM_MAX_VALUE * s_recv.global_brightness + - / 100 / 100 * s_recv.key_status[i]; + 176 6 s_pwm.currpwm[i] += s_recv.pwm_step[i]; + 177 6 if(s_recv.global_brightness==0) + 178 6 { + 179 7 s_pwm.currvalue[i]=0; + 180 7 } + 181 6 else + 182 6 { + 183 7 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_re + -cv.global_brightness; + 184 7 } + 185 6 if (s_pwm.currpwm[i] >= s_pwm.wanttopwm[i]) + 186 6 { + 187 7 s_recv.flag2[i] = 0; + 188 7 s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + 189 7 s_pwm.currvalue[i] = s_recv.B_min; //ڻظ + 190 7 } + 191 6 } + 192 5 // + 193 5 if (s_recv.forward[i] == 0x01) + 194 5 { + 195 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_max * PWM_MAX_VALUE * s_recv.global_brightness + - / 100 / 100 * s_recv.key_status[i]; + 196 6 if (s_pwm.currpwm[i] <= s_pwm.wanttopwm[i] + s_recv.pwm_step[i]) + 197 6 { + 198 7 s_recv.flag2[i] = 0; + 199 7 s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + 200 7 s_pwm.currvalue[i] = s_recv.B_max; + 201 7 } + 202 6 else + 203 6 { + 204 7 s_pwm.currpwm[i] -= s_recv.pwm_step[i]; + 205 7 if(s_recv.global_brightness==0) + 206 7 { + 207 8 s_pwm.currvalue[i]=0; + 208 8 } + 209 7 else + 210 7 { + 211 8 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_b + -rightness; + 212 8 } + 213 7 } + 214 6 } + 215 5 break; + 216 5 + 217 5 //˫ѭģʽ + 218 5 case 0x01: + C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 5 + + 219 5 //ݼ + 220 5 if (s_recv.forward[i] == 0x00) + 221 5 { + 222 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_min * PWM_MAX_VALUE * s_recv.global_brightness + - / 100 / 100 * s_recv.key_status[i]; + 223 6 s_pwm.currpwm[i] += s_recv.pwm_step[i]; + 224 6 if(s_recv.global_brightness==0) + 225 6 { + 226 7 s_pwm.currvalue[i]=0; + 227 7 } + 228 6 else + 229 6 { + 230 7 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_re + -cv.global_brightness; + 231 7 } + 232 6 if (s_pwm.currpwm[i] >= s_pwm.wanttopwm[i]) + 233 6 { + 234 7 s_recv.forward[i] = 0x01; + 235 7 s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + 236 7 s_pwm.currvalue[i] = s_recv.B_min; //ڻظ + 237 7 } + 238 6 } + 239 5 // + 240 5 if (s_recv.forward[i] == 0x01) + 241 5 { + 242 6 s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_max * PWM_MAX_VALUE * s_recv.global_brightness + - / 100 / 100 * s_recv.key_status[i]; + 243 6 if (s_pwm.currpwm[i] <= s_pwm.wanttopwm[i] + s_recv.pwm_step[i]) + 244 6 { + 245 7 s_recv.forward[i] = 0x00; + 246 7 s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + 247 7 s_pwm.currvalue[i] = s_recv.B_max; + 248 7 } + 249 6 else + 250 6 { + 251 7 s_pwm.currpwm[i] -= s_recv.pwm_step[i]; + 252 7 if(s_recv.global_brightness==0) + 253 7 { + 254 8 s_pwm.currvalue[i]=0; + 255 8 } + 256 7 else + 257 7 { + 258 8 s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_b + -rightness; + 259 8 } + 260 7 } + 261 6 } + 262 5 break; + 263 5 case 0x02: + 264 5 //ֹͣ + 265 5 s_recv.flag2[i] = 0; + 266 5 break; + 267 5 } + 268 4 } + 269 3 } + 270 2 } + 271 1 } + 272 + 273 + 274 //ֱӹص,¼״̬ + 275 void Close_Light(u8 i) + 276 { + C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 6 + + 277 1 s_pwm.currpwm[i]=20001ul; //ߵƽdz⣬ + 278 1 } + 279 + 280 //򿪵ʱظԭ + 281 void Open_Light(u8 pin) + 282 { + 283 1 s_pwm.currpwm[pin] = PWM_MAX_VALUE - s_pwm.currvalue[pin] * PWM_MAX_VALUE * s_recv.global_brightness / 10 + -0 / 100; + 284 1 } + 285 + 286 void PWM_write(u8 i, u16 Val) + 287 { + 288 1 switch (i) + 289 1 { + 290 2 case 0: + 291 2 PWM15Duty(PWM07,Val); + 292 2 break; + 293 2 case 1: + 294 2 PWM15Duty(PWM06,Val); + 295 2 break; + 296 2 case 2: + 297 2 PWM15Duty(PWM05,Val); + 298 2 break; + 299 2 case 3: + 300 2 PWM15Duty(PWM04,Val); + 301 2 break; + 302 2 case 4: + 303 2 PWM15Duty(PWM03,Val); + 304 2 break; + 305 2 case 5: + 306 2 PWM15Duty(PWM02,Val); + 307 2 break; + 308 2 case 6: + 309 2 PWM15Duty(PWM01,Val); + 310 2 break; + 311 2 case 7: + 312 2 PWM15Duty(PWM00,Val); + 313 2 break; + 314 2 case 8: + 315 2 PWM15Duty(PWM23,Val); + 316 2 break; + 317 2 case 9: + 318 2 PWM15Duty(PWM22,Val); + 319 2 break; + 320 2 case 10: + 321 2 PWM15Duty(PWM21,Val); + 322 2 break; + 323 2 case 11: + 324 2 PWM15Duty(PWM20,Val); + 325 2 break; + 326 2 } + 327 1 } + 328 void show_light(void) + 329 { + 330 1 int i; + 331 1 for (i = 0; i < 12; i++) + 332 1 { + 333 2 if(s_pwm.currpwm[i]==20000ul) + 334 2 { + 335 3 Close_Light(i); + 336 3 } + 337 2 else + C51 COMPILER V9.01 PWM_CONTROL 12/15/2025 20:45:04 PAGE 7 + + 338 2 { + 339 3 PWM_write(i, s_pwm.currpwm[i]); + 340 3 } + 341 2 } + 342 1 } + 343 + 344 //void checkpwm(void) + 345 //{ + 346 // int i; + 347 // for (i = 0; i < 12; i++) + 348 // { + 349 // if ((s_recv.flag1[i] == 0) && (s_recv.flag2[i] == 0) && (s_recv.changeflag == 1)) + 350 // { + 351 // if (s_pwm.wanttopwmflash[i] != s_pwm.currpwm[i]) + 352 // { + 353 // s_pwm.currpwm[i] = s_pwm.wanttopwmflash[i]; + 354 // } + 355 // } + 356 // } + 357 // s_recv.changeflag = 0; + 358 //} + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 3842 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = 241 ---- + PDATA SIZE = ---- ---- + DATA SIZE = 8 18 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/timer.lst b/Listings/timer.lst new file mode 100644 index 0000000..13690f3 --- /dev/null +++ b/Listings/timer.lst @@ -0,0 +1,190 @@ +C51 COMPILER V9.01 TIMER 12/15/2025 20:45:04 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE TIMER +OBJECT MODULE PLACED IN .\Objects\timer.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE timer.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\tim + -er.lst) OBJECT(.\Objects\timer.obj) + +line level source + + 1 /*---------------------------------------------------------------------*/ + 2 /* --- STC MCU Limited ------------------------------------------------*/ + 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ + 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ + 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ + 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ + 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ + 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ + 9 /* --- QQ: 800003751 -------------------------------------------------*/ + 10 /* Ҫڳʹô˴,ڳעʹSTCϼ */ + 11 /*---------------------------------------------------------------------*/ + 12 + 13 /************* ˵ ************** + 14 + 15 ļΪSTC8ϵеĶʱʼжϳ,ûļ޸ԼҪжϳ. + 16 + 17 ******************************************/ + 18 + 19 #include "timer.h" + 20 u32 systick_1ms=0; + 21 /********************* Timer0жϺ************************/ + 22 void timer0_int (void) interrupt TIMER0_VECTOR + 23 { + 24 1 P67 = ~P67; + 25 1 } + 26 + 27 /********************* Timer1жϺ************************/ + 28 void timer1_int (void) interrupt TIMER1_VECTOR + 29 { + 30 1 P66 = ~P66; + 31 1 } + 32 + 33 /********************* Timer2жϺ************************/ + 34 void timer2_int (void) interrupt TIMER2_VECTOR + 35 { + 36 1 systick_1ms++; + 37 1 } + 38 + 39 /********************* Timer3жϺ************************/ + 40 void timer3_int (void) interrupt TIMER3_VECTOR + 41 { + 42 1 + 43 1 } + 44 + 45 /********************* Timer4жϺ************************/ + 46 void timer4_int (void) interrupt TIMER4_VECTOR + 47 { + 48 1 P63 = ~P63; + 49 1 } + 50 + 51 + 52 //======================================================================== + 53 // : u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) + 54 // : ʱʼ. + C51 COMPILER V9.01 TIMER 12/15/2025 20:45:04 PAGE 2 + + 55 // : TIMx: ṹ,οtimer.hĶ. + 56 // : ɹ0, ղ1,󷵻2. + 57 // 汾: V1.0, 2012-10-22 + 58 //======================================================================== + 59 u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) + 60 { + 61 1 if(TIM > Timer4) return 1; //ղ + 62 1 + 63 1 if(TIM == Timer0) + 64 1 { + 65 2 Timer0_Stop(); //ֹͣ + 66 2 if(TIMx->TIM_Interrupt == ENABLE) Timer0_InterruptEnable(); //ж + 67 2 else Timer0_InterruptDisable(); //ֹж + 68 2 if(TIMx->TIM_Priority > Priority_3) return 2; // + 69 2 Timer0_Priority(TIMx->TIM_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_ + -3 + 70 2 + 71 2 if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; // + 72 2 TMOD = (TMOD & ~0x30) | TIMx->TIM_Mode; //ģʽ,0: 16λԶװ, 1: 16λʱ/, 2: 8λԶװ + 73 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer0_12T(); //12T + 74 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer0_1T(); //1T + 75 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer0_AsCounter(); //Ƶ + 76 2 else Timer0_AsTimer(); //ʱ + 77 2 if(TIMx->TIM_ClkOut == ENABLE) Timer0_CLKO_Enable(); //ʱ + 78 2 else Timer0_CLKO_Disable(); //ʱ + 79 2 + 80 2 T0_Load(TIMx->TIM_Value); + 81 2 if(TIMx->TIM_Run == ENABLE) Timer0_Run(); //ʼ + 82 2 return 0; //ɹ + 83 2 } + 84 1 + 85 1 if(TIM == Timer1) + 86 1 { + 87 2 Timer1_Stop(); //ֹͣ + 88 2 if(TIMx->TIM_Interrupt == ENABLE) Timer1_InterruptEnable(); //ж + 89 2 else Timer1_InterruptDisable(); //ֹж + 90 2 if(TIMx->TIM_Priority > Priority_3) return 2; // + 91 2 Timer1_Priority(TIMx->TIM_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_ + -3 + 92 2 if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; // + 93 2 TMOD = (TMOD & ~0x30) | TIMx->TIM_Mode; //ģʽ,0: 16λԶװ, 1: 16λʱ/, 2: 8λԶװ + 94 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer1_12T(); //12T + 95 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer1_1T(); //1T + 96 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer1_AsCounter(); //Ƶ + 97 2 else Timer1_AsTimer(); //ʱ + 98 2 if(TIMx->TIM_ClkOut == ENABLE) Timer1_CLKO_Enable(); //ʱ + 99 2 else Timer1_CLKO_Disable(); //ʱ + 100 2 + 101 2 T1_Load(TIMx->TIM_Value); + 102 2 if(TIMx->TIM_Run == ENABLE) Timer1_Run(); //ʼ + 103 2 return 0; //ɹ + 104 2 } + 105 1 + 106 1 if(TIM == Timer2) //Timer2,̶Ϊ16λԶװ, жȼ + 107 1 { + 108 2 Timer2_Stop(); //ֹͣ + 109 2 if(TIMx->TIM_Interrupt == ENABLE) Timer2_InterruptEnable(); //ж + 110 2 else Timer2_InterruptDisable(); //ֹж + 111 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + 112 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer2_12T(); //12T + 113 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer2_1T(); //1T + 114 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer2_AsCounter(); //Ƶ + C51 COMPILER V9.01 TIMER 12/15/2025 20:45:04 PAGE 3 + + 115 2 else Timer2_AsTimer(); //ʱ + 116 2 if(TIMx->TIM_ClkOut == ENABLE) Timer2_CLKO_Enable(); //ʱ + 117 2 else Timer2_CLKO_Disable(); //ʱ + 118 2 + 119 2 T2_Load(TIMx->TIM_Value); + 120 2 if(TIMx->TIM_Run == ENABLE) Timer2_Run(); //ʼ + 121 2 return 0; //ɹ + 122 2 } + 123 1 + 124 1 if(TIM == Timer3) //Timer3,̶Ϊ16λԶװ, жȼ + 125 1 { + 126 2 Timer3_Stop(); //ֹͣ + 127 2 if(TIMx->TIM_Interrupt == ENABLE) Timer3_InterruptEnable(); //ж + 128 2 else Timer3_InterruptDisable(); //ֹж + 129 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + 130 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer3_12T(); //12T + 131 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer3_1T(); //1T + 132 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer3_AsCounter(); //Ƶ + 133 2 else Timer3_AsTimer(); //ʱ + 134 2 if(TIMx->TIM_ClkOut == ENABLE) Timer3_CLKO_Enable(); //ʱ + 135 2 else Timer3_CLKO_Disable(); //ʱ + 136 2 + 137 2 T3_Load(TIMx->TIM_Value); + 138 2 if(TIMx->TIM_Run == ENABLE) Timer3_Run(); //ʼ + 139 2 return 0; //ɹ + 140 2 } + 141 1 + 142 1 if(TIM == Timer4) //Timer3,̶Ϊ16λԶװ, жȼ + 143 1 { + 144 2 Timer4_Stop(); //ֹͣ + 145 2 if(TIMx->TIM_Interrupt == ENABLE) Timer4_InterruptEnable(); //ж + 146 2 else Timer4_InterruptDisable(); //ֹж + 147 2 if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + 148 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer4_12T(); //12T + 149 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer4_1T(); //1T + 150 2 if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer4_AsCounter(); //Ƶ + 151 2 else Timer4_AsTimer(); //ʱ + 152 2 if(TIMx->TIM_ClkOut == ENABLE) Timer4_CLKO_Enable(); //ʱ + 153 2 else Timer4_CLKO_Disable(); //ʱ + 154 2 + 155 2 T4_Load(TIMx->TIM_Value); + 156 2 if(TIMx->TIM_Run == ENABLE) Timer4_Run(); //ʼ + 157 2 return 0; //ɹ + 158 2 } + 159 1 return 2; // + 160 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 795 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 4 ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Objects/BLV_C12_Dimm_V19 b/Objects/BLV_C12_Dimm_V19 new file mode 100644 index 0000000000000000000000000000000000000000..9152d17305c9cf32e0c61201e38aabf6b90d37ca GIT binary patch literal 1165072 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 z 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

<#@c8coZz2eNZ%32&A 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

CC4Da46&fC@XQHl?#9| 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 x_NRoiEtXAb4fBpqi + +

+

Vision Build Log

+

Tool Versions:

+IDE-Version: Vision V5.29.0.0 +Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: cc cc, cc, LIC=9W1BF-6PVU2-D80FM-XPSKK-ZUPXX-GN4UD + +Tool Versions: +Toolchain: PK51 Prof. Developers Kit Version: 9.01 +Toolchain Path: D:\Keil_v5\C51\BIN +C Compiler: C51.exe V9.01 +Assembler: A51.exe V8.02 +Linker/Locator: BL51.exe V6.22 +Library Manager: LIB51.exe V4.24 +Hex Converter: OH51.exe V2.6 +CPU DLL: S8051.DLL V3.72 +Dialog DLL: DP51.DLL V2.59 +Target DLL: STCMON51.DLL V0, 1, 0, 17 +Dialog DLL: TP51.DLL V2.58 + +

Project:

+E:\Git_Project_Sourcode\RCU_C12_Dimming\light_V19.uvproj +Project File Date: 12/15/2025 + +

Output:

+Rebuild target 'Target 1' +compiling GPIO.c... +compiling main.c... +compiling UART.C... +compiling UART_Set.c... +compiling pwm_control.c... +compiling Start_Init.c... +compiling PWM15bit.c... +compiling timer.c... +compiling key.c... +compiling WDT.c... +linking... +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PRINTBUFFER1?UART +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PRINTSTRING3?UART +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_QPWM15DUTY?PWM15BIT +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PWMLEVELSET?PWM15BIT +Program Size: data=77.0 xdata=641 code=15470 +creating hex file from ".\Objects\BLV_C12_Dimm_V19"... +".\Objects\BLV_C12_Dimm_V19" - 0 Error(s), 4 Warning(s). +Build Time Elapsed: 00:00:01 +
+ + diff --git a/Objects/BLV_C12_Dimm_V19.hex b/Objects/BLV_C12_Dimm_V19.hex new file mode 100644 index 0000000..7384007 --- /dev/null +++ b/Objects/BLV_C12_Dimm_V19.hex @@ -0,0 +1,1042 @@ +:1028A800EFD3940740037F0122121AEDFED394035D +:1028B80040037F0222EF7041EE700B900001121B63 +:1028C80006F452935294121AEDB4010B90000112BF +:1028D8001B064293F45294121AEDFEB4020A9000B9 +:1028E80001121B0642934294EEB4030D90000112AC +:1028F8001B06FEF45293EE4294EF64017043121AE1 +:10290800EDFE700B900001121B06F452915292EEEC +:10291800B4010B900001121B064291F45292121A54 +:10292800EDB4020A900001121B0642914292121A5B +:10293800EDB4030D900001121B06FEF45291EE4215 +:1029480092EF64027043121AEDFE700B90000112B0 +:102958001B06F452955296EEB4010B900001121B1F +:10296800064295F45296121AEDB4020A900001122A +:102978001B0642954296121AEDB4030D90000112FF +:102988001B06FEF45295EE4296EF64037043121A4A +:10299800EDFE700B900001121B06F452B152B2EE1C +:1029A800B4010B900001121B0642B1F452B2121A84 +:1029B800EDB4020A900001121B0642B142B2121A8B +:1029C800EDB4030D900001121B06FEF452B1EE4265 +:1029D800B2EF64047043121AEDFE700B90000112FE +:1029E8001B06F452B352B4EEB4010B900001121B53 +:1029F8000642B3F452B4121AEDB4020A900001125E +:102A08001B0642B342B4121AEDB4030D9000011232 +:102A18001B06FEF452B3EE42B4EF64057043121A7B +:102A2800EDFE700B900001121B06F452C952CAEE5B +:102A3800B4010B900001121B0642C9F452CA121AC3 +:102A4800EDB4020A900001121B0642C942CA121ACA +:102A5800EDB4030D900001121B06FEF452C9EE42BC +:102A6800CAEF64067043121AEDFE700B9000011253 +:102A78001B06F452CB52CCEEB4010B900001121B92 +:102A88000642CBF452CC121AEDB4020A900001129D +:102A98001B0642CB42CC121AEDB4030D9000011272 +:102AA8001B06FEF452CBEE42CCEF64077043121AB9 +:102AB800EDFF700B900001121B06F452E152E2EF99 +:102AC800B4010B900001121B0642E1F452E2121A03 +:102AD800EDB4020A900001121B0642E142E2121A0A +:102AE800EDB4030D900001121B06FFF452E1EF4212 +:042AF800E27F002257 +:0A000E004D435520537461727400D5 +:0300B600014A00FC +:103C9D00750903E4F508FB7A0079087F030228A86B +:103B0E00750840750901750D00750CC2750B0175B0 +:103B1E000A00750F01E4F510751101F512F513FB8E +:093B2E007A0079087F0102225A95 +:103C8C00750801E4F509750A04FB7A007908023B12 +:013C9C0037F0 +:1038220012399E123B601235D5122FC1123BF4128F +:103832003C15123C9D123B0E123C8C5387EF75FFD8 +:1038420041D2AFE54B60097BFF7A00790E123C66EC +:10385200120003054AE54AB40102D290E54AB408CF +:1038620002C290E54AB40A03E4F54A123274120025 +:10387200FE121DD81210D61237BC122CB4123354B9 +:0538820012313980CB7A +:0C00B900012C00042D00000000011D00BF +:08225A008F148B158A168917F9 +:10226200E51464016003022429751E01F51FF5209F +:10227200F521F522F523F524F51874412518F58288 +:10228200E43402F583E4F00518E518B420ECE4F533 +:102292001874012518F582E43402F583E4F0051878 +:1022A200E518B420ECAB15AA16A91790000A121B68 +:1022B20006FED3940340037F0222EE700553B7EF6C +:1022C200C2BC90000A121B06B4010553B7EFD2BC80 +:1022D20090000A121B06FFB4020543B710C2BCEFFE +:1022E200B4030543B710D2BC121AEDD394C0400315 +:1022F2007F0222121AEDFFE598543F4FF598EF64E2 +:10230200C06008EF644060030223BE900002121C0A +:10231200D07F007E607D547C00121C0C8F1C8E1BB3 +:102322008D1A8C19E4FFFE7D01FCAB1CAA1BA91AB5 +:10233200A819C3121CAC40037F0222C3E4951CF50A +:102342001CE4951BF51B7401951AF51AE49519F511 +:1023520019AB15AA16A917900001121B06FB6401FE +:10236200702CC28E538EFE5389BF5389CF438E4049 +:10237200AF1CAE1BAD1AAC197808121CBD8F8D852F +:102382001C8BC2AB5389BF538FFDD28E8062EB642C +:10239200027026538EEF438E01538EF7438E04AFA5 +:1023A2001CAE1BAD1AAC197808121CBD8FD6851C49 +:1023B200D753AFFB438E1080377F0222AB15AA168C +:1023C200A917121AEDFF7013900008121B06B40130 +:1023D20005438E20801A538EDF8015EFB480119052 +:1023E2000008121B06B40105438780800353877FD0 +:1023F200AB15AA16A917900009121B06B40104D244 +:10240200AC8002C2AC900007121B06B40104D29C3D +:102412008002C29C90000B121B0654C0FFE5A2541E +:102422003F4FF5A27F0022E514640360030225B248 +:10243200752503F526F527F528F529F52AF52BF557 +:102442001874612518F582E43402F583E4F0051866 +:10245200E518B420ECE4F51874212518F582E4346B +:1024620002F583E4F00518E518B420ECAB15AA16C2 +:10247200A917121AEDFF64C06008EF6440600302FE +:10248200257490000A121B06FED3940340037F02B8 +:1024920022EE700653EEFE53DFFE90000A121B0678 +:1024A200B4010653EEFE43DF0190000A121B06FF41 +:1024B200B4020643EE0153DFFEEFB4030643EE011E +:1024C20043DF01121AEDB4C00543AC80800353AC64 +:1024D2007F900002121CD07F007E607D547C00122F +:1024E2001C0C8F1C8E1B8D1A8C19E4FFFE7D01FCC7 +:1024F200AB1CAA1BA91AA819C3121CAC40037F0269 +:1025020022C3E4951CF51CE4951BF51B7401951A76 +:10251200F51AE49519F519AB15AA16A91790000139 +:10252200121B06FBB4031D43AC40AF1CAE1BAD1A1D +:10253200AC197808121CBD8FD4851CD553D1F04339 +:10254200D10A8031EB64027026538EEF53ACBF5335 +:102552008EF7438E04AF1CAE1BAD1AAC197808126D +:102562001CBD8FD6851CD753AFFB438E1080067FD0 +:1025720002227F0222AB15AA16A917900009121B8C +:1025820006B4010543AF08800353AFF7900007126A +:102592001B06B4010543AC10800353ACEF90000B53 +:1025A200121B065402FFE5BA54FD4FF5BA7F002212 +:0225B2007F02A6 +:0125B4002204 +:103BAE0074412520F582E43402F583EFF00520E51B +:103BBE0020C394204003E4F520E521700575210112 +:033BCE00D2992267 +:103C6600121AEDFF600C123BAE740129F9E43AFA20 +:033C760080EE22BB +:063BD1008B478A48894978 +:103BD700E4FEEEC39D5015AB47AA48A9498E8275EE +:0C3BE7008300121B06FF123BAE0E80E6AE +:013BF30022AF +:030023000234BDE7 +:0D34BD00C0E0C083C082C0D075D000C00741 +:1034CA00309847C298752C0185463085452F85442A +:1034DA002E85432DE5247032AF99E522C39420400E +:1034EA0003752200BF4404051D8003751D00E51DF8 +:1034FA00B40A0375C760AF22052274012FF582E46E +:10350A003402F583E599F0752305309927C299E5C8 +:10351A001F6520601C7441251FF582E43402F5837F +:10352A00E0F599051FE51FC394204008751F008028 +:04353A0003752100F4 +:0B353E00D007D0D0D082D083D0E03284 +:1000660074612527F582E43402F583EFF00527E570 +:1000760027C394204003E4F527E528700675280178 +:0400860043AC022263 +:103C7900121AEDFF600C120066740129F9E43AFA90 +:033C890080EE22A8 +:063B88008B098A0A890B7B +:103B8E00E4FEEEC39D5018AB09050BE50BAA0A70B7 +:0F3B9E0002050A14F9121AEDFF1200660E80E3F9 +:013BAD0022F5 +:03008B0002365CDE +:10365C00C0E0C083C082C0D075D000C007E5AC30DC +:10366C00E034752C0185463085452F85442E8543E5 +:10367C002D53ACFEE52B701EE529C3942040037539 +:10368C002900AF29052974212FF582E43402F58332 +:10369C00E5ADF0752A05E5AC30E12853ACFDE52627 +:1036AC006527601C74612526F582E43402F583E0FD +:1036BC00F5AD0526E526C394204008752600800349 +:0E36CC00752800D007D0D0D082D083D0E03255 +:103B6000750840750903750D00750CC2750B01755C +:103B70000A00750F01751101E4F512751302FB7A45 +:083B80000079087F0302225ABC +:1038870064617461206F6B0061736B0070657263B4 +:10389700656E74006368616E6765206C696768743C +:1038A70000676C6F62616C206C696768740073777E +:1038B7006974636820737461746500646562756711 +:1038C7000076657273696F6E0073686F727420613A +:1038D7006E737765720076657273696F6E5F616E7E +:0538E70073776572001B +:0300C500014B00EC +:10327400E4F508F5099000C8F0E52C640160030248 +:103284003353C3E5469530FFE545952FFEE5449558 +:103294002EFDE543952DFCE47B08FAF9F8C3121CD6 +:1032A400AC4003023353E4F52C852908FFEFC395A2 +:1032B40029501B74212FF582E43402F583E0FE7457 +:1032C400C92FF582E43400F583EEF00F80DFE4F5D6 +:1032D40029FE7F20FD7B017A027921121D76E4FF0D +:1032E4009000CDE0FEEFC39E501274C92FF582E426 +:1032F4003400F583E02509F5090F80E4E509F4704D +:103304004EE5086E70499000CCE064017041900075 +:10331400CBE0640370399000CAE0540F9000C7F00A +:103324009000CAE020E60280189000C6E0FFA3E007 +:10333400B5070EE4A3F09000EF74F0F0900105805F +:0F334400039000C87401F09000C7E09000C6F03D +:013353002257 +:1000FE009000C8E070030210D5E54B60097BFF7AD3 +:10010E00387987123C669000CFE024E0B4070040B7 +:10011E00030210D090013075F003A4C58325F0C5FD +:10012E00837302014502015E020823020A6C020D6E +:10013E00DA0210960210B7E54B60097BFF7A387928 +:10014E008F123C669000F67430F09001040210B2EB +:10015E009000EF7431F0E54B60097BFF7A387993AC +:10016E00123C66E4F50874017E00A808088005C3F9 +:10017E0033CE33CED8F9FF9000D0E0FDEF5D7003A3 +:10018E000204BCE50825E02400F582E43400F58382 +:10019E00E4F0A304F0E50825E02418F582E4340029 +:1001AE00F583E4F0A3F0C374159508FFE49400FE04 +:1001BE0074C92FF58274003EF583E0FFE50825E053 +:1001CE002448F582E43400F583E4F0A3EFF0E5086B +:1001DE0025E02448F582E43400F583E0FEA3E0FF39 +:1001EE009000ACE0FCA3E0FDC3EF9DEE9C5012E549 +:1001FE000825E02448F582E43400F583ECF0A3ED05 +:10020E00F0E50825E02448F582E43400F583E0FEAD +:10021E00A3E0FF9000AAE0FCA3E0FDD3EF9DEE9CCF +:10022E004012E50825E02448F582E43400F583EC1D +:10023E00F0A3EDF0E50825E02448F582E43400F55E +:10024E0083E0FEA3E0FF7C047DE2121D49A804A911 +:10025E0005AA06AB079000A8E0FEA3E0FFE4FCFDB4 +:10026E00121B81E47B64FAF9F8121C0CE47B64FA2D +:10027E00F9F8121C0CA804A905AA06AB07E5082577 +:10028E00E024AEF582E43400F583E0FEA3E0FFE463 +:10029E00FCFD121B81C374E29FFF74049EFEE508F1 +:1002AE0025E02470F582E43401F583EEF0A3EFF03F +:1002BE00E50825E02410F582E43401F583E0FCA383 +:1002CE00E0FDE4121A33E50825E025E02440F5822E +:1002DE00E43401F583121D009000D2E075F00AA4FB +:1002EE00FFE50825E02430F582E43400F583E5F0DF +:1002FE00F0A3EFF0E50825E02430F582E43400F5B4 +:10030E0083E0FEA3E04E7012E50825E02430F5826E +:10031E00E43400F583E4F0A304F0E50825E02410AE +:10032E00F582E43401F583E0FEA3E0FFE50825E065 +:10033E002470F582E43401F583E0FCA3E0FDD39F45 +:10034E00EC9E50030203F3E50825E02410F582E449 +:10035E003401F583E0FEA3E0FFC3ED9FFDEC9EFCB0 +:10036E00E4121A33C004C005C006C007E50825E034 +:10037E002430F582E43400F583E0FCA3E0FDE412C2 +:10038E001A33A804A905AA06AB07D007D006D005D4 +:10039E00D004121924E50825E025E024D0F582E4E6 +:1003AE003401F583121D00E50825E025E024D0F583 +:1003BE0082E43401F583E0FCA3E0FDA3E0FEA3E0BC +:1003CE00FFE4FBFA7980783F1219C160184016E5F8 +:1003DE000825E025E024D0F582E43401F583121DD2 +:1003EE000C3F800000E50825E02410F582E434017E +:1003FE00F583E0FEA3E0FFE50825E02470F582E436 +:10040E003401F583E0FCA3E0FDC39FEC9E400302A4 +:10041E0004BCE50825E02410F582E43401F583E000 +:10042E00FEA3E0C39DFDEE9CFCE4121A33C004C093 +:10043E0005C006C007E50825E02430F582E4340047 +:10044E00F583E0FCA3E0FDE4121A33A804A905AA83 +:10045E0006AB07D007D006D005D004121924E50844 +:10046E0025E025E024D0F582E43401F583121D0049 +:10047E00E50825E025E024D0F582E43401F583E09B +:10048E00FCA3E0FDA3E0FEA3E0FFE4FBFA79807895 +:10049E003F1219C160184016E50825E025E024D06A +:1004AE00F582E43401F583121D0C3F80000005082F +:1004BE00E50864086003020174E4F50874017E0027 +:1004CE00A808088005C333CE33CED8F9FF9000D1EB +:1004DE00E0FDEF5D7003020812E50825E02410F53B +:1004EE0082E43400F583E4F0A304F0E50825E0246B +:1004FE0028F582E43400F583E4F0A3F0C3740D957F +:10050E0008FFE49400FE74C92FF58274003EF58353 +:10051E00E0FFE50825E02458F582E43400F583E495 +:10052E00F0A3EFF0E50825E02458F582E43400F559 +:10053E0083E0FEA3E0FF9000ACE0FCA3E0FDC3EF80 +:10054E009DEE9C5012E50825E02458F582E4340017 +:10055E00F583ECF0A3EDF0E50825E02458F582E4F0 +:10056E003400F583E0FEA3E0FF9000AAE0FCA3E0D8 +:10057E00FDD3EF9DEE9C4012E50825E02458F58250 +:10058E00E43400F583ECF0A3EDF0E50825E0245803 +:10059E00F582E43400F583E0FEA3E0FF7C047DE207 +:1005AE00121D49A804A905AA06AB079000A8E0FEF3 +:1005BE00A3E0FFE4FCFD121B81E47B64FAF9F81260 +:1005CE001C0CE47B64FAF9F8121C0CA804A905AA09 +:1005DE0006AB07E50825E024BEF582E43400F5837A +:1005EE00E0FEA3E0FFE4FCFD121B81C374E29FFF5B +:1005FE0074049EFEE50825E02480F582E43401F5BE +:10060E0083EEF0A3EFF0E50825E02410F582E43444 +:10061E0001F583E0FCA3E0FDE4121A33E50825E0C2 +:10062E0025E02440F582E43401F583121D0090008C +:10063E00D2E075F00AA4FFE50825E02440F582E437 +:10064E003400F583E5F0F0A3EFF0E50825E0244053 +:10065E00F582E43400F583E0FEA3E04E7012E50867 +:10066E0025E02440F582E43400F583E4F0A304F0A1 +:10067E00E50825E02420F582E43401F583E0FEA3AD +:10068E00E0FFE50825E02480F582E43401F583E0FF +:10069E00FCA3E0FDD39FEC9E5003020749E508251D +:1006AE00E02420F582E43401F583E0FEA3E0FFC3ED +:1006BE00ED9FFDEC9EFCE4121A33C004C005C0068B +:1006CE00C007E50825E02440F582E43400F583E018 +:1006DE00FCA3E0FDE4121A33A804A905AA06AB0791 +:1006EE00D007D006D005D004121924E50825E02540 +:1006FE00E024F0F582E43401F583121D00E50825AF +:10070E00E025E024F0F582E43401F583E0FCA3E07B +:10071E00FDA3E0FEA3E0FFE4FBFA7980783F121917 +:10072E00C160184016E50825E025E024F0F582E4C6 +:10073E003401F583121D0C3F800000E50825E024EE +:10074E0020F582E43401F583E0FEA3E0FFE5082501 +:10075E00E02480F582E43401F583E0FCA3E0FDC3E0 +:10076E009FEC9E4003020812E50825E02420F58246 +:10077E00E43401F583E0FEA3E0C39DFDEE9CFCE4B2 +:10078E00121A33C004C005C006C007E50825E024D0 +:10079E0040F582E43400F583E0FCA3E0FDE4121A98 +:1007AE0033A804A905AA06AB07D007D006D005D0FA +:1007BE0004121924E50825E025E024F0F582E4343E +:1007CE0001F583121D00E50825E025E024F0F582F1 +:1007DE00E43401F583E0FCA3E0FDA3E0FEA3E0FF1B +:1007EE00E4FBFA7980783F1219C160184016E508CB +:1007FE0025E025E024F0F582E43401F583121D0C8A +:10080E003F8000000508E508640460030204CA90F6 +:10081E0001050210B29000EF7432F0E54B60097BD7 +:10082E00FF7A38799B123C66E4F50874017E00A8C5 +:10083E0008088005C333CE33CED8F9FF9000D0E040 +:10084E00FDEF5D7003020943E50825E02400F58203 +:10085E00E43400F583E4F0A3F0E50825E02418F570 +:10086E0082E43400F583E4F0A304F09000D2E0FFBC +:10087E00E50825E02460F582E43400F583E4F0A376 +:10088E00EFF09000D4E0FFE50825E02490F582E437 +:10089E003400F583E4F0A3EFF0E50825E02460F5DD +:1008AE0082E43400F583E0FEA3E04E6003020943C8 +:1008BE009000D3E0FF7011E50825E02478F582E47E +:1008CE003400F583E4F0A3F0EFB40112E50825E05F +:1008DE002478F582E43400F583E4F0A304F090006C +:1008EE00D3E06402704FE50825E02478F582E43405 +:1008FE0000F583E0FEA3E064014E7013E50825E0E9 +:10090E002478F582E43400F583E4F0A3F08026E544 +:10091E000825E02478F582E43400F583E0FEA3E0B8 +:10092E004E7012E50825E02478F582E43400F58354 +:10093E00E4F0A304F00508E5086408600302083932 +:10094E00E4F50874017E00A808088005C333CE3391 +:10095E00CED8F9FF9000D1E0FDEF5D7003020A5B87 +:10096E00E50825E02410F582E43400F583E4F0A3D5 +:10097E00F0E50825E02428F582E43400F583E4F060 +:10098E00A304F09000D2E0FFE50825E02470F58284 +:10099E00E43400F583E4F0A3EFF09000D4E0FFE53B +:1009AE000825E024A0F582E43400F583E4F0A3EFFB +:1009BE00F0E50825E02470F582E43400F583E0FECE +:1009CE00A3E04E6003020A5B9000D3E0FF7011E5D6 +:1009DE000825E02488F582E43400F583E4F0A3F0E2 +:1009EE00EFB40112E50825E02488F582E43400F521 +:1009FE0083E4F0A304F09000D3E06402704FE508A6 +:100A0E0025E02488F582E43400F583E0FEA3E0645B +:100A1E00014E7013E50825E02488F582E43400F5D4 +:100A2E0083E4F0A3F08026E50825E02488F582E42F +:100A3E003400F583E0FEA3E04E7012E50825E024B5 +:100A4E0088F582E43400F583E4F0A304F00508E5AC +:100A5E0008640460030209519001050210B290006F +:100A6E00EF7433F0E54B60097BFF7A3879A8123CBE +:100A7E00669000D0E030E54A9000D3E0FF9000ACE5 +:100A8E00E4F0A3EFF0E4F508E50825E02488F5820C +:100A9E00E43401F583E0FEA3E0FF9000ACE0FCA39C +:100AAE00E0FDC3EF9DEE9C5012E50825E02488F58D +:100ABE0082E43401F583ECF0A3EDF00508E508B40B +:100ACE000CC69000D0E030E64A9000D2E0FF9000D5 +:100ADE00AAE4F0A3EFF0E4F508E50825E02488F594 +:100AEE0082E43401F583E0FEA3E0FF9000AAE0FC6F +:100AFE00A3E0FDD3EF9DEE9C4012E50825E024888F +:100B0E00F582E43401F583ECF0A3EDF00508E50879 +:100B1E00B40CC69000D0E020E703020DD4A3E0FF92 +:100B2E009000A8E4F0A3EFF0E4F508E50825E02432 +:100B3E0000F582E43400F583E4F0A304F0E5082523 +:100B4E00E02418F582E43400F583E4F0A3F0E50820 +:100B5E0025E02448F582E43400F583E0FEA3E0FFAF +:100B6E007C047DE2121D49A804A905AA06AB0790D4 +:100B7E0000A8E0FEA3E0FFE4FCFD121B81E47B6411 +:100B8E00FAF9F8121C0CE47B64FAF9F8121C0CA8A2 +:100B9E0004A905AA06AB07E50825E024AEF582E414 +:100BAE003400F583E0FEA3E0FFE4FCFD121B81C3DD +:100BBE0074E29FFF74049EFEE50825E02470F58222 +:100BCE00E43401F583EEF0A3EFF0E50825E0241000 +:100BDE00F582E43401F583E0FCA3E0FDE4121A3360 +:100BEE00E50825E025E02440F582E43401F5831282 +:100BFE001D00E50825E02470F582E43401F583E05C +:100C0E00FEA3E0FFE4FCFD7BE27A04F9F8C3121CBC +:100C1E00AC5014E50825E02470F582E43401F58328 +:100C2E007404F0A374E2F0E50825E02410F582E4E4 +:100C3E003401F583E0FEA3E0FFE50825E02470F51E +:100C4E0082E43401F583E0FCA3E0FDD39FEC9E50DB +:100C5E0003020D00E50825E02410F582E43401F5C9 +:100C6E0083E0FEA3E0FFC3ED9FFDEC9EFCE4121AB1 +:100C7E0033C004C005C006C007E50825E02430F5E2 +:100C8E0082E43400F583E0FCA3E0FDE4121A33A8FD +:100C9E0004A905AA06AB07D007D006D005D00412CA +:100CAE001924E50825E025E024D0F582E43401F589 +:100CBE0083121D00E50825E025E024D0F582E434FA +:100CCE0001F583E0FCA3E0FDA3E0FEA3E0FFE4FB5F +:100CDE00FA7980783F1219C160184016E50825E0B0 +:100CEE0025E024D0F582E43401F583121D0C3F80FB +:100CFE000000E50825E02410F582E43401F583E0D8 +:100D0E00FEA3E0FFE50825E02470F582E43401F54A +:100D1E0083E0FCA3E0FDC39FEC9E4003020DC9E5FA +:100D2E000825E02410F582E43401F583E0FEA3E00B +:100D3E00C39DFDEE9CFCE4121A33C004C005C00630 +:100D4E00C007E50825E02430F582E43400F583E0A1 +:100D5E00FCA3E0FDE4121A33A804A905AA06AB070A +:100D6E00D007D006D005D004121924E50825E025B9 +:100D7E00E024D0F582E43401F583121D00E5082548 +:100D8E00E025E024D0F582E43401F583E0FCA3E015 +:100D9E00FDA3E0FEA3E0FFE4FBFA7980783F121991 +:100DAE00C160184016E50825E025E024D0F582E460 +:100DBE003401F583121D0C3F8000000508E5086420 +:100DCE000C6003020B399001050210B29000EF7413 +:100DDE0034F0E54B60097BFF7A3879B5123C66E456 +:100DEE00F50874017E00A808088005C333CE33CE03 +:100DFE00D8F9FF9000D0E0FDEF5D7003020F2D7467 +:100E0E00D22508F582E43400F583E0B40117E50835 +:100E1E0025E024AEF582E43400F583E4F0A304F07B +:100E2E00AF081238EC74D22508F582E43400F5834D +:100E3E00E0704BAF08123C52E50825E02400F58225 +:100E4E00E43400F583E4F0A3F0E50825E02418F57A +:100E5E0082E43400F583E4F0A3F0E50825E0246095 +:100E6E00F582E43400F583E4F0A37402F0E508257E +:100E7E00E024AEF582E43400F583E4F0A3F074D2FE +:100E8E002508F582E43400F583E064026003020F66 +:100E9E002DE50825E024AEF582E43400F583E0FE6E +:100EAE00A3E04E7019E50825E024AEF582E4340087 +:100EBE00F583E4F0A304F0AF081238EC8061E50886 +:100ECE0025E024AEF582E43400F583E0FEA3E06471 +:100EDE00014E704BAF08123C52E50825E02400F598 +:100EEE0082E43400F583E4F0A3F0E50825E024184D +:100EFE00F582E43400F583E4F0A3F0E50825E02460 +:100F0E0060F582E43400F583E4F0A37402F0E508A2 +:100F1E0025E024AEF582E43400F583E4F0A3F00579 +:100F2E0008E508C394085003020DF0E4F5087401B7 +:100F3E007E00A808088005C333CE33CED8F9FF90C3 +:100F4E0000D1E0FDEF5D700302108574DA2508F51F +:100F5E0082E43400F583E0B4011AE50825E024BEEE +:100F6E00F582E43400F583E4F0A304F0E5082408E8 +:100F7E00FF1238EC74DA2508F582E43400F583E0CC +:100F8E00704EE5082408FF123C52E50825E02410B7 +:100F9E00F582E43400F583E4F0A3F0E50825E024BF +:100FAE0028F582E43400F583E4F0A3F0E50825E0AB +:100FBE002470F582E43400F583E4F0A37402F0E5C6 +:100FCE000825E024BEF582E43400F583E4F0A3F0B6 +:100FDE0074DA2508F582E43400F583E064026003D8 +:100FEE00021085E50825E024BEF582E43400F58381 +:100FFE00E0FEA3E04E701CE50825E024BEF582E479 +:10100E003400F583E4F0A304F0E5082408FF123859 +:10101E00EC8064E50825E024BEF582E43400F58317 +:10102E00E0FEA3E064014E704EE5082408FF123C7A +:10103E0052E50825E02410F582E43400F583E4F04F +:10104E00A3F0E50825E02428F582E43400F583E4D6 +:10105E00F0A3F0E50825E02470F582E43400F58372 +:10106E00E4F0A37402F0E50825E024BEF582E43432 +:10107E0000F583E4F0A3F00508E508C394045003DB +:10108E00020F3C900105801C9000EF7435F0E54B8B +:10109E0060097BFF7A3879C2123C669000D0E0F589 +:1010AE004B9001057401F0801990010D7436F0908B +:1010BE0001067401F0E54B60097BFF7A3879C8129E +:0710CE003C66E49000C8F04D +:0110D50022F8 +:102CB400E4FFF508900104E07003022D6A9000F02F +:102CC4007401F09000C7E09000F1F0A37403F09059 +:102CD40000C9E09000F3F0A37414F09000A8A3E0FE +:102CE4009000F7F0EFFDC3740B9DFDE49400FC909D +:102CF400018875F002ED121D3DEC25E02583F58376 +:102D0400A3E0FE74F82FF582E43400F583EEF0EFCF +:102D140025E024AEF582E43400F583E0FCA3E0640E +:102D2400014C700E74F82FF582E43400F583E0440E +:102D340080F00FBF0CAE7B017A0079F07D14123A5B +:102D4400E48F089000F5E508F07B017A0079F07DC6 +:102D540014123B88E4900104F0FE7F20FD7B017A8D +:102D64000079C9121D76900105E0605A9000E9745B +:102D740001F09000C7E09000EAF0A37403F0900023 +:102D8400C9E09000ECF0A37407F07B017A0079E9C4 +:102D9400FD123AE48F089000EEE508F07B017A001A +:102DA40079E97D07123B88E54B60097BFF7A387926 +:102DB400D0123C66E4900105F0FE7F20FD7B017A91 +:102DC4000079C9121D76900106E06062A37401F0D7 +:102DD4009000C7E0900108F0A37403F09000C9E0EC +:102DE40090010AF0A37409F090010E7413F0E4A3A7 +:102DF400F07B017A0179077D09123AE48F0890018A +:102E04000CE508F07B017A0179077D09123B88E51E +:102E14004B60097BFF7A3879DD123C66E490010649 +:102E2400F0FE7F20FD7B017A0079C9121D767E00B9 +:0D2E34007F277D007B017A0079E9021D7681 +:063AE4008B098A0A890B20 +:103AEA00E4FFFEEEC39D5018EE64056010AB09AA10 +:103AFA000AA90B8E82758300121B062FFF0E80E324 +:033B0A00EFF4FFD6 +:013B0D002295 +:0C00C800043B00000000043F00000000AA +:10399E00750903E4F508FB7A0079087F051228A85B +:1039AE007509FF7508037B007A007908E4FF122879 +:1039BE00A875090F7508037B007A0079087F02123B +:1039CE0028A87509017508037B007A0079087F0124 +:0339DE000228A814 +:102FC100750801750D04750EE2E4F50BF50C750A33 +:102FD10001FB7A007908FF122AFC7B007A0079084C +:102FE1007F02122AFC7DE37C04E4FF12394A7DE36F +:102FF1007C047F0112394A7DE37C047F0212394A45 +:103001007DE37C047F0312394A7DE37C047F041253 +:10301100394A7DE37C047F0512394A7DE37C047FD4 +:103021000612394A7DE37C047F0712394A7DE37C2D +:10303100047F1012394A7DE37C047F1112394A7DE5 +:10304100E37C047F1212394A7DE37C047F13123939 +:103051004A7E007FF17D007B017A017910121D7695 +:10306100E4FFEF25E02410F582E43401F5837404D4 +:10307100F0A374E3F00FBF0CE9E4F512F513F514B6 +:103081007B017D01FF1236DAE4F512F513F5147BAD +:10309100017D017F011236DAE4F512F513F5147B97 +:1030A100017D017F021236DAE4F512F513F5147B86 +:1030B100017D017F031236DAE4F512F513F5147B75 +:1030C100017D017F041236DAE4F512F513F5147B64 +:1030D100017D017F051236DAE4F512F513F5147B53 +:1030E100017D017F061236DAE4F512F513F5147B42 +:1030F100017D017F071236DAE4F512F513F5147B31 +:10310100017D017F101236DAE4F512F513F5147B17 +:10311100017D017F111236DAE4F512F513F5147B06 +:10312100017D017F121236DAE4F512F513F5147BF5 +:08313100017D017F130236DA73 +:101DD800E4F508F509C3E546953EFFE545953DFE62 +:101DE800E544953CFDE543953BFCE47B0AFAF9F8AC +:101DF800D3121CAC400302225985463E85453D85D9 +:101E0800443C85433BE4F508F509E50925E0FFE591 +:101E18000833FE74002FF58274003EF583E0FEA3BC +:101E2800E04E7003022248E50925E0FFE50833FE8D +:101E380074102FF58274013EF583E0FCA3E0FD7475 +:101E4800702FF58274013EF583E0FEA3E0D39DEE8A +:101E58009C5003021FCEE509AE087802C333CE3387 +:101E6800CED8F92440F58274013EF583C083C08240 +:101E7800E0FCA3E0FDA3E0FEA3E0FFC004C005C0B2 +:101E880006C007E509AE087802C333CE33CED8F9C9 +:101E980024D0F58274013EF583E0F8A3E0F9A3E0CD +:101EA800FAA3E0FBD007D006D005D004121830D032 +:101EB80082D083121D00E509AE087802C333CE3301 +:101EC800CED8F92440F58274013EF583E0FCA3E006 +:101ED800FDA3E0FEA3E0FF121A6CAD07AC06E5090E +:101EE80025E0FFE50833FE74102FF58274013EF5F6 +:101EF80083ECF0A3EDF09000A8E07002A3E070106E +:101F080074882FF58274013EF583E4F0A3F08071A4 +:101F1800E50925E0FFE50833FE74102FF58274010A +:101F28003EF583E0FEA3E0FBC374E29BFF74049ECE +:101F3800FEE49400FDE49400FCE47B107A27F9F8B1 +:101F4800121B81E47BE27A04F9F8121C0CC006C06B +:101F5800079000A8E0FEA3E0FBAA06E4F9F8D00782 +:101F6800D006121C0CAD07AC06E50925E0FFE50814 +:101F780033FE74882FF58274013EF583ECF0A3EDEF +:101F8800F0E50925E0FFE50833FE74102FF58274AB +:101F9800013EF583E0FCA3E0FD74702FF582740127 +:101FA8003EF583E0FAA3E0FBC39DEA9C5018E509DF +:101FB80025E0FFE50833FE74102FF58274013EF525 +:101FC80083EAF0A3EBF0E50925E0FFE50833FE74AA +:101FD800102FF58274013EF583E0FCA3E0FD7470D8 +:101FE8002FF58274013EF583E0FEA3E0C39DEE9CCD +:101FF80040030221E6E509AE087802C333CE33CEAA +:10200800D8F92440F58274013EF583C083C082E08C +:10201800FCA3E0FDA3E0FEA3E0FFC004C005C006EA +:10202800C007E509AE087802C333CE33CED8F92409 +:10203800D0F58274013EF583E0F8A3E0F9A3E0FA55 +:10204800A3E0FBD007D006D005D00412182CD0820C +:10205800D083121D00E509AE087802C333CE33CE13 +:10206800D8F92440F58274013EF583E0FCA3E0FD35 +:10207800A3E0FEA3E0FF121A6CAD07AC06E5092544 +:10208800E0FFE50833FE74102FF58274013EF583F6 +:10209800ECF0A3EDF09000A8E07002A3E0701074DB +:1020A800882FF58274013EF583E4F0A3F08071E592 +:1020B8000925E0FFE50833FE74102FF58274013E10 +:1020C800F583E0FEA3E0FBC374E29BFF74049EFE6D +:1020D800E49400FDE49400FCE47B107A27F9F812FC +:1020E8001B81E47BE27A04F9F8121C0CC006C007D5 +:1020F8009000A8E0FEA3E0FBAA06E4F9F8D007D018 +:1021080006121C0CAD07AC06E50925E0FFE508330F +:10211800FE74882FF58274013EF583ECF0A3EDF090 +:10212800E50925E0FFE50833FE74702FF582740198 +:102138003EF583E0FCA3E0FDE4121A33C004C005B9 +:10214800C006C007E509AE087802C333CE33CED83F +:10215800F924D0F58274013EF583E0F8A3E0F9A3F1 +:10216800E0FAA3E0FBD007D006D005D0041218305F +:10217800C004C005C006C007E50925E0FFE508332F +:10218800FE74102FF58274013EF583E0FCA3E0FD98 +:10219800E4121A33A804A905AA06AB07D007D0068B +:1021A800D005D0041219C15035E50925E0FFE5082E +:1021B80033FE74102FF58274013EF583E4F0A3F02A +:1021C80074702FF58274013EF583E0FCA3E0FD7482 +:1021D800102FF58274013EF583ECF0A3EDF0E509CC +:1021E80025E0FFE50833FE74102FF58274013EF5F3 +:1021F80083E0FCA3E0FD74702FF58274013EF58343 +:10220800E0FEA3E0B50539EEB50435E50925E0FFA4 +:10221800E50833FE74482FF58274003EF583E0FC30 +:10222800A3E0FD74882FF58274013EF583ECF0A3DA +:10223800EDF074002FF58274003EF583E4F0A3F00E +:102248000509E50970020508640C45086003021ECB +:012258001273 +:012259002262 +:1010D600E4F508F509C3E5469542FFE5459541FE69 +:1010E600E5449540FDE543953FFCE47B0AFAF9F8B3 +:1010F600D3121CAC4003021828854642854541851B +:10110600444085433FE4F508F509E50925E0FFE598 +:101116000833FE74182FF58274003EF583E0FCA3B5 +:10112600E04C700302181774602FF58274003EF5C8 +:1011360083E0FEA3E0FFEE6003021817EF147003CE +:1011460002145414700302180024026003021817D4 +:10115600E50925E0FFE50833FE74782FF582740073 +:101166003EF583E0FEA3E04E600302131C9000AC44 +:10117600E0FEA3E0FF7C047DE2121D49A804A90558 +:10118600AA06AB079000A8E0FEA3E0FFE4FCFD1270 +:101196001B81E47B64FAF9F8121C0CE47B64FAF90F +:1011A600F8121C0CA804A905AA06AB07E50925E058 +:1011B600FFE50833FE74AE2FF58274003EF583E03A +:1011C600FEA3E0FFE4FCFD121B81C374E29FFD74E5 +:1011D600049EFCE50925E0FFE50833FE74702FF553 +:1011E6008274013EF583ECF0A3EDF074902FF58246 +:1011F60074003EF583E0FCA3E0FD74102FF58274C5 +:10120600013EF583EC8DF0121B339000A8E07002CE +:10121600A3E07019E50925E0FFE50833FE74882F81 +:10122600F58274013EF583E4F0A3F08071E50925AB +:10123600E0FFE50833FE74102FF58274013EF58356 +:10124600E0FEA3E0FBC374E29BFF74049EFEE494FD +:1012560000FDE49400FCE47B107A27F9F8121B8168 +:10126600E47BE27A04F9F8121C0CC006C007900071 +:10127600A8E0FEA3E0FBAA06E4F9F8D007D0061220 +:101286001C0CAD07AC06E50925E0FFE50833FE7446 +:10129600882FF58274013EF583ECF0A3EDF0E509A5 +:1012A60025E0FFE50833FE74702FF58274013EF5E4 +:1012B60083E0FCA3E0FD74102FF58274013EF583F4 +:1012C600E0FEA3E0C39DEE9C404CE50925E0FFE56A +:1012D6000833FE74182FF58274003EF583E4F0A3FC +:1012E600F074702FF58274013EF583E0FCA3E0FDF7 +:1012F60074102FF58274013EF583ECF0A3EDF090A7 +:1013060000ACE0FCA3E0FD74882FF58274013EF585 +:1013160083ECF0A3EDF0E50925E0FFE50833FE7464 +:10132600782FF58274003EF583E0FEA3E064014E5B +:1013360060030218179000AAE0FEA3E0FF7C047D7C +:10134600E2121D49A804A905AA06AB079000A8E069 +:10135600FEA3E0FFE4FCFD121B81E47B64FAF9F8CE +:10136600121C0CE47B64FAF9F8121C0CA804A905FB +:10137600AA06AB07E50925E0FFE50833FE74AE2FA4 +:10138600F58274003EF583E0FEA3E0FFE4FCFD1267 +:101396001B81C374E29FFD74049EFCE50925E0FFF2 +:1013A600E50833FE74702FF58274013EF583ECF088 +:1013B600A3EDF074902FF58274003EF583E0FCA354 +:1013C600E0FD74702FF58274013EF583E0FEA3E024 +:1013D6002DFDEE3CFCE50925E0FFE50833FE741023 +:1013E6002FF58274013EF583E0FEA3E0D39DEE9CCB +:1013F6005013E50925E0FFE50833FE74182FF58242 +:101406007400021707E50925E0FFE50833FE7410AE +:101416002FF58274013EF583C083C082E0FCA3E011 +:10142600FD74902FF58274003EF583E0FEA3E0FF85 +:10143600C3ED9FFFEC9ED082D083F0A3EFF0900027 +:10144600A8E07002A3E0700302177A02178DE5097F +:1014560025E0FFE50833FE74782FF58274003EF52B +:1014660083E0FEA3E04E600302161B9000ACE0FE94 +:10147600A3E0FF7C047DE2121D49A804A905AA0683 +:10148600AB079000A8E0FEA3E0FFE4FCFD121B8181 +:10149600E47B64FAF9F8121C0CE47B64FAF9F8129E +:1014A6001C0CA804A905AA06AB07E50925E0FFE57B +:1014B6000833FE74AE2FF58274003EF583E0FEA37A +:1014C600E0FFE4FCFD121B81C374E29FFD74049EE1 +:1014D600FCE50925E0FFE50833FE74702FF58274FC +:1014E600013EF583ECF0A3EDF074902FF5827400C5 +:1014F6003EF583E0FCA3E0FD74102FF58274013EF7 +:10150600F583EC8DF0121B339000A8E07002A3E087 +:101516007019E50925E0FFE50833FE74882FF5828A +:1015260074013EF583E4F0A3F08071E50925E0FF40 +:10153600E50833FE74102FF58274013EF583E0FE54 +:10154600A3E0FBC374E29BFF74049EFEE49400FDDB +:10155600E49400FCE47B107A27F9F8121B81E47B03 +:10156600E27A04F9F8121C0CC006C0079000A8E045 +:10157600FEA3E0FBAA06E4F9F8D007D006121C0C7D +:10158600AD07AC06E50925E0FFE50833FE74882FB4 +:10159600F58274013EF583ECF0A3EDF0E50925E054 +:1015A600FFE50833FE74702FF58274013EF583E083 +:1015B600FCA3E0FD74102FF58274013EF583E0FE76 +:1015C600A3E0C39DEE9C404DE50925E0FFE5083309 +:1015D600FE74782FF58274003EF583E4F0A304F0E0 +:1015E60074702FF58274013EF583E0FCA3E0FD7470 +:1015F600102FF58274013EF583ECF0A3EDF0900018 +:10160600ACE0FCA3E0FD74882FF58274013EF583FF +:10161600ECF0A3EDF0E50925E0FFE50833FE74786C +:101626002FF58274003EF583E0FEA3E064014E6070 +:10163600030218179000AAE0FEA3E0FF7C047DE2F7 +:10164600121D49A804A905AA06AB079000A8E0FE4A +:10165600A3E0FFE4FCFD121B81E47B64FAF9F812B7 +:101666001C0CE47B64FAF9F8121C0CA804A905AA60 +:1016760006AB07E50925E0FFE50833FE74AE2FF556 +:101686008274003EF583E0FEA3E0FFE4FCFD121B3E +:1016960081C374E29FFD74049EFCE50925E0FFE525 +:1016A6000833FE74702FF58274013EF583ECF0A3C7 +:1016B600EDF074902FF58274003EF583E0FCA3E014 +:1016C600FD74702FF58274013EF583E0FEA3E02DD4 +:1016D600FDEE3CFCE50925E0FFE50833FE74102F1E +:1016E600F58274013EF583E0FEA3E0D39DEE9C50A7 +:1016F60040E50925E0FFE50833FE74782FF582748E +:10170600003EF583E4F0A3F074702FF58274013E79 +:10171600F583E0FCA3E0FD74102FF58274013EF51D +:1017260083ECF0A3EDF09000AAE0FCA3E0FD021725 +:10173600EFE50925E0FFE50833FE74102FF5827406 +:10174600013EF583C083C082E0FCA3E0FD74902FC8 +:10175600F58274003EF583E0FEA3E0FFC3ED9FFF34 +:10176600EC9ED082D083F0A3EFF09000A8E0700248 +:10177600A3E07013E50925E0FFE50833FE74882F22 +:10178600F5827401021810E50925E0FFE50833FE2D +:1017960074102FF58274013EF583E0FEA3E0FBC3CF +:1017A60074E29BFF74049EFEE49400FDE49400FC46 +:1017B600E47B107A27F9F8121B81E47BE27A04F9BC +:1017C600F8121C0CC006C0079000A8E0FEA3E0FBC0 +:1017D600AA06E4F9F8D007D006121C0CAD07AC0631 +:1017E600E50925E0FFE50833FE74882FF5827401CC +:1017F6003EF583ECF0A3EDF08017E50925E0FFE563 +:101806000833FE74182FF58274003EF583E4F0A3C6 +:10181600F00509E50970020508640C450860030235 +:0218260011109F +:01182800229D +:103C5200EF25E02410F582E43401F583744EF0A3DD +:043C62007421F022B7 +:1038EC008F09EF25E02488F582E43401F583E0FEAE +:1038FC00A3E0FF7C047DE2121D49A804A905AA06D9 +:10390C00AB079000A8E0FEA3E0FFE4FCFD121B81D6 +:10391C00E47B64FAF9F8121C0CE47B64FAF9F812F3 +:10392C001C0CC374E29FFF74049EFEE50925E02481 +:0E393C0010F582E43401F583EEF0A3EFF022E3 +:103423008C0A8D0BEFB40C0040030234BC9034378C +:10343300F828287302345B02346302346B0234735A +:1034430002347B02348302348B02349302349B02B2 +:1034530034A30234AB0234B3AD0BAC0A7F078056FE +:10346300AD0BAC0A7F06804EAD0BAC0A7F058046E0 +:10347300AD0BAC0A7F04803EAD0BAC0A7F038036F4 +:10348300AD0BAC0A7F02802EAD0BAC0A7F01802608 +:10349300AD0BAC0AE4FF801EAD0BAC0A7F138016A4 +:1034A300AD0BAC0A7F12800EAD0BAC0A7F11800608 +:0A34B300AD0BAC0A7F1012394A225B +:1037BC00E4F508F509E50925E0FFE50833FE74108A +:1037CC002FF58274013EF583E0FEA3E0FFE4FCFDDF +:1037DC007B207A4EF9F8C3121CACAF097005123C71 +:1037EC0052801FC007E50925E0FFE50833FE741081 +:1037FC002FF58274013EF583E0FCA3E0FDD00712A7 +:10380C0034230509E50970020508C3940CE5086426 +:05381C0080948040A033 +:013821002284 +:1035D5007E007F237D007B017A0079C6121D767EF1 +:1035E500007FC67D007B017A007900121D767E0082 +:1035F5007F277D007B017A0079E9121D769000C650 +:1036050074FFF0E49000ACF0A3F09000AAF0A3746E +:1036150064F09000A8E4F0A37464F0E4FFEF25E003 +:103625002490F582E43400F583E4F0A304F0EF255B +:10363500E024AEF582E43400F583E4F0A304F0EF72 +:1036450025E02430F582E43400F5837401F0A37499 +:063655002CF00FBF0CC7B2 +:01365B00224C +:103BF400E4F508750903750A01750B01F50C750DDB +:103C0400F8750ECD750F01FB7A0079087F02022545 +:013C1400B5FA +:102E4100FF14FF1CFF24FF2CFF34FF3CFF44FF4C09 +:102E5100FF64FF6CFF74FF7CFF84FF8CFF94FF9C79 +:102E6100FFB4FFBCFFC4FFCCFFD4FFDCFFE4FFECE9 +:102E7100FC14FC1CFC24FC2CFC34FC3CFC44FC4CF1 +:102E8100FC64FC6CFC74FC7CFC84FC8CFC94FC9C61 +:102E9100FCB4FCBCFCC4FCCCFCD4FCDCFCE4FCECD1 +:102EA100FF10FF18FF20FF28FF30FF38FF40FF48C9 +:102EB100FF60FF68FF70FF78FF80FF88FF90FF9839 +:102EC100FFB0FFB8FFC0FFC8FFD0FFD8FFE0FFE8A9 +:102ED100FC10FC18FC20FC28FC30FC38FC40FC48B1 +:102EE100FC60FC68FC70FC78FC80FC88FC90FC9821 +:102EF100FCB0FCB8FCC0FCC8FCD0FCD8FCE0FCE891 +:102F0100FF12FF1AFF22FF2AFF32FF3AFF42FF4A58 +:102F1100FF62FF6AFF72FF7AFF82FF8AFF92FF9AC8 +:102F2100FFB2FFBAFFC2FFCAFFD2FFDAFFE2FFEA38 +:102F3100FC12FC1AFC22FC2AFC32FC3AFC42FC4A40 +:102F4100FC62FC6AFC72FC7AFC82FC8AFC92FC9AB0 +:102F5100FCB2FCBAFCC2FCCAFCD2FCDAFCE2FCEA20 +:102F6100FF15FF1DFF25FF2DFF35FF3DFF45FF4DE0 +:102F7100FF65FF6DFF75FF7DFF85FF8DFF95FF9D50 +:102F8100FFB5FFBDFFC5FFCDFFD5FFDDFFE5FFEDC0 +:102F9100FC15FC1DFC25FC2DFC35FC3DFC45FC4DC8 +:102FA100FC65FC6DFC75FC7DFC85FC8DFC95FC9D38 +:102FB100FCB5FCBDFCC5FCCDFCD5FCDDFCE5FCEDA8 +:1036DA00EFD3942F40037F0222EDD3940140037F5E +:1036EA000222EBD3940140037F0222E512D3940114 +:1036FA0040037F0222E513D3940140037F0222E5AF +:10370A0014D3940140037F022243BA80EF25E024B8 +:10371A0041F582E4342EF583E493FE740193F58235 +:10372A008E83EBC4333354C0FFEDC4333333548038 +:10373A004FFFE51225E025E04FFFE51325E04F4551 +:07374A0014F053BA7F7F0069 +:013751002255 +:10394A00EFD3942F40037F0222D3ED94FFEC947FB0 +:10395A0040037F022243BA80EF25E024A1F582E4E6 +:10396A00342EF583E493FA740193F5828A83EC5436 +:10397A007FF0A3EDF0EF25E02401F582E4342FF582 +:10398A0083E493FE740193F5828E83E4F0A3F053EB +:03399A00BA7FFFF2 +:01399D002207 +:02375200A907C5 +:10375400E9D3942F40037F0222D3ED94FFEC947FAE +:1037640040037F0222D3EB94FFEA947F40037F025D +:103774002243BA80E925E024A1F582E4342EF583BE +:10378400E493FE740193F5828E83EC547FAF05F0CD +:10379400A3EFF0E925E02401F582E4342FF583E476 +:1037A40093FE740193F5828E83EA547FAF03F0A3F2 +:0737B400EFF053BA7F7F0024 +:0137BB0022EB +:1039E100EFD3942F40037F0222EBD3940140037F56 +:1039F1000222EDD3940140037F022243BA80EF25D6 +:103A0100E02461F582E4342FF583E493FE7401939D +:0E3A1100F5828E83EB25E04DF053BA7F7F00E7 +:013A1F002284 +:102AFC00EFD394054003022CB343BA80EF7042121B +:102B0C001AEDB4010543F101800353F1FE9000046A +:102B1C00121B06540FFE90FF02E054F04EF0900092 +:102B2C0005121B49FDE5F0547F90FF00F0A3EDF07A +:102B3C00900002121B06B4010543F601800353F604 +:102B4C00FEEF64017042121AEDB4010543F10280EC +:102B5C000353F1FD900004121B06540FFE90FF521C +:102B6C00E054F04EF0900005121B49FDE5F0547F47 +:102B7C0090FF50F0A3EDF0900002121B06B401057B +:102B8C0043F610800353F6EFEF64027042121AED15 +:102B9C00B4010543F104800353F1FB900004121BB4 +:102BAC0006540FFE90FFA2E054F04EF09000051278 +:102BBC001B49FDE5F0547F90FFA0F0A3EDF09000D1 +:102BCC0002121B06B4010543F701800353F7FEEF15 +:102BDC0064037042121AEDB4010543F108800353EB +:102BEC00F1F7900004121B06540FFE90FC02E05407 +:102BFC00F04EF0900005121B49FDE5F0547F90FC5F +:102C0C0000F0A3EDF0900002121B06B4010543F78F +:102C1C0010800353F7EFEF64047042121AEDB40105 +:102C2C000543F110800353F1EF900004121B06547E +:102C3C000FFE90FC52E054F04EF0900005121B4930 +:102C4C00FDE5F0547F90FC50F0A3EDF090000212E3 +:102C5C001B06B4010543FE01800353FEFEEF640521 +:102C6C007042121AEDB4010543F120800353F1DFD9 +:102C7C00900004121B06540FFF90FCA2E054F04F7E +:102C8C00F0900005121B49FFE5F0547F90FCA0F07A +:102C9C00A3EFF0900002121B06B4010543FE108056 +:082CAC000353FEEF53BA7F222F +:0300B30002002622 +:0D002600C0E0C083C082C0D075D000C0070C +:10003300AFBA43BA80E5F630E30353F6F790FF0512 +:09004300E06004E4F0B2A78FBAFA +:0B004C00D007D0D0D082D083D0E032AB +:0300E300023A20BE +:0D3A2000C0E0C083C082C0D075D000C007D8 +:103A2D00AFBA43BA80E5F630E70353F67F90FF5502 +:093A3D00E06004E4F0B2A68FBAC7 +:0B3A4600D007D0D0D082D083D0E03277 +:0300EB00023A5185 +:0D3A5100C0E0C083C082C0D075D000C007A7 +:103A5E00AFBA43BA80E5F730E30353F7F790FFA50B +:093A6E00E06004E4F0B2A58FBA97 +:0B3A7700D007D0D0D082D083D0E03246 +:0300F300023A824C +:0D3A8200C0E0C083C082C0D075D000C00776 +:103A8F00AFBA43BA80E5F730E70353F77F90FC05F1 +:093A9F00E06004E4F0B2A48FBA67 +:0B3AA800D007D0D0D082D083D0E03215 +:0300FB00023AB313 +:0D3AB300C0E0C083C082C0D075D000C00745 +:103AC000AFBA43BA80E5FE30E30353FEF790FC55EE +:093AD000E06004E4F0B2A38FBA37 +:0B3AD900D007D0D0D082D083D0E032E4 +:0600D400044300000000DF +:03000B00020007E9 +:03000700B2EF3223 +:03001B00020018C8 +:03001800B2EE3213 +:03006300023C3428 +:103C3400C0E0C0D0E5462401F546E43545F545E449 +:0E3C44003544F544E43543F543D0D0D0E032AA +:03009B0002000A56 +:01000A0032C3 +:0300A30002001E3A +:03001E00B2EB3210 +:1025B500AD07EDD3940440037F0122ED60030226AD +:1025C50077C28C900002121B06B40104D2A98002C6 +:1025D500C2A9900001121B06FED3940340037F029B +:1025E50022EE700553B7FDC2B9900001121B06B467 +:1025F500010553B7FDD2B9900001121B06FFB402C5 +:102605000543B702C2B9EFB4030543B702D2B91205 +:102615001AEDFEC3940340037F0222E58954CF4E91 +:10262500F589900003121B06FFB40103538E7FEF5B +:102635007003438E80EFB4020543890480035389F8 +:10264500FB900004121B06B40105438F0180035360 +:102655008FFE900005121B49E5F0F58C90000512E0 +:102665001B49F58A900007121B06B40102D28C7F24 +:102675000022ED64016003022730C28E9000021231 +:102685001B06B40104D2AB8002C2AB900001121B41 +:1026950006FED3940340037F0222EE700553B7F77D +:1026A500C2BB900001121B06B4010553B7F7D2BB9C +:1026B500900001121B06FFB4020543B708C2BBEF29 +:1026C500B4030543B708D2BB121AEDFEC394034009 +:1026D500037F0222E58954CF4EF589900003121B32 +:1026E50006FFB40103538EBFEF7003438E40EFB472 +:1026F500020543894080035389BF900004121B06DD +:10270500B40105438F028003538FFD900005121B12 +:1027150049E5F0F58D900005121B49F58B900007F2 +:10272500121B06B40102D28E7F0022ED640270787E +:10273500538EEF900002121B06B4010543AF0480CF +:102745000353AFFB900003121B06FED39402400314 +:102755007F0222EEB40103538EFB900003121B0689 +:102765007003438E04900003121B06B40205438ECA +:10277500088003538EF7900004121B06B40105432D +:102785008F048003538FFB900005121B49E5F0F57C +:10279500D6900005121B49F5D7900007121B06B409 +:1027A5000103438E107F0022ED6403707853D1F747 +:1027B500900002121B06B4010543AF20800353AFFE +:1027C500DF900003121B06FED3940240037F022212 +:1027D500EEB4010353D1FD900003121B06700343B1 +:1027E500D102900003121B06B4020543D1048003F5 +:1027F50053D1FB900004121B06B4010543D101809F +:102805000353D1FE900005121B49E5F0F5D4900065 +:1028150005121B49F5D5900007121B06B4010343A9 +:10282500D1087F0022ED6404707653D17F900002B9 +:10283500121B06B4010543AF40800353AFBF9000A0 +:1028450003121B06FED3940240037F0222EEB4015D +:102855000353D1DF900003121B06700343D1209070 +:102865000003121B06B4020543D140800353D1BFB8 +:10287500900004121B06B4010543D110800353D107 +:10288500EF900005121B49FDACF0ECF5D2AF058FBA +:10289500D3900007121B06B4010343D1807F0022A9 +:0328A5007F02228D +:0600DA00043100000000EB +:103C1500750910E4F508FB7A0079087F041228A8D5 +:0F3C25007E007F067D007B007A007935021D76D8 +:10335400C3E5469534FFE5459533FEE5449532FDD6 +:10336400E5439531FCE47B0AFAF9F8C3121CAC403E +:1033740003023422854634854533854432854331FE +:10338400E4FF74362FF8E614603A14607324026084 +:103394000302341920C41D743A2FF8E6C394025072 +:1033A4000306807174362FF8760174392FF8E4F629 +:1033B400743A802C743A2FF8E4F674362FF8E4F655 +:1033C4007437801C74392FF806E6C39464501730A0 +:1033D400C44374372FF8760174392FF8E4F6743641 +:1033E4002FF8E4F6802F74362FF8760274392FF80C +:1033F400E4F674382FF8760374372FF876028015C4 +:1034040074382FF8E4F630C40C74362FF8E4F674EC +:0E341400372FF876040FEF6401600302338651 +:013422002287 +:10313900E53764016003023273F537900200E00459 +:10314900F0E014B40D00400302327390316275F05F +:1031590003A4C58325F0C58373023189023199021D +:1031690031A90231B90231C80231D70231E602313F +:10317900F50232040232130232220232310232459E +:103189009001107407F0A374D0F090018802323EC8 +:103199009001127407F0A374D0F090018A02323EB4 +:1031A9009001147407F0A374D0F090018C02323EA0 +:1031B9009001167407F0A374D0F090018E80769078 +:1031C90001187407F0A374D0F09001908067900102 +:1031D9001A7407F0A374D0F0900192805890011CE2 +:1031E9007407F0A374D0F0900194804990011E7483 +:1031F90007F0A374D0F0900196803A9001207407EB +:10320900F0A374D0F0900198802B9001227407F0FC +:10321900A374D0F090019A801C9001247407F0A344 +:1032290074D0F090019C800D9001267407F0A3746E +:10323900D0F090019EE4F0A3745AF022E4FFEF2548 +:10324900E02410F582E43401F5837404F0A374E2F8 +:10325900F0EF25E02488F582E43401F583E4F0A356 +:0A326900F00FBF0CD9E4900200F052 +:013273002238 +:103B3700121AEDB4010375C120900002121B06543E +:103B470007FFE5C154F84FF5C1900001121B06703D +:093B57000453C1F72243C1082206 +:0400030043C11022C3 +:10182900021AD8E86480F8E933E83360110460F0FB +:10183900ED33EC337009E8FCE9FDEAFEEBFF220425 +:1018490060DED3EB9FEA9EE99DE8C2E78CF0C2F720 +:1018590095F0400CE8CCF8E9CDF9EACEFAEBCFFBEC +:10186900121AA385D0F05804700320D5B3E8047088 +:10187900075002B2D5021AE292D5EC0460F7E4CC23 +:10188900C0E0C398F8603B94186008400DD0E0FBB5 +:10189900021ABAE4FBFAC9FC8028E830E406E4C974 +:1018A900FBE4CAFCE830E305E4C9CACBFCE8540709 +:1018B9006010F8C3E913F9EA13FAEB13FBEC13FC14 +:1018C900D8F130F52FC3E49CFCEF9BFFEE9AFEEDB7 +:1018D90099FDD0E0FBEF4E4D4C701222DB03021A4A +:1018E900DFEC2CFCEF33FFEE33FEED33FDED30E79B +:1018F900EB021ABAEF2BFFEE3AFEED39FDD0E0FB11 +:1019090050130BBB0003021AE2ED13FDEE13FEEFB9 +:0819190013FFEC13FC021ABAE3 +:10192100021AE2EC5D046005E859047003021AD85A +:10193100121AA3580460F6EC4860F2EC7004FDFE44 +:10194100FF22C860DB2481C85009C3986002500699 +:10195100021ADF9850CAF582E9294B4A7005AB8219 +:10196100021ACE75F0007C1A7880C3EF9BEE9AEDD7 +:1019710099400DC3EF9BFFEE9AFEED99FDE842F011 +:10198100DC23ACF0D0E0FFD0E0FED0E0FDAB822064 +:10199100E7101BEB60BAEC2CFCEF33FFEE33FEEDEE +:1019A10033FD021ABAE803F830E705C0F075F0001C +:1019B100EF2FFFEE33FEED33FD40B830E7C280AAD2 +:1019C10074F8CC6480CCC86480C8F582046043C3D9 +:1019D100EB9FF5F0EA9E42F0E99D42F0E89C45F06C +:1019E10060305018E5825FFFE582F42B5582FB5091 +:1019F100210ABA001D09B90019088016E5825BFBAE +:101A0100E582F42F5582FF50090EBE00050DBD0081 +:101A1100010CC3EB9FF5F0EA9E42F0E99D42F0E82C +:0D1A21009C45F06007CC4820E701B3EC22A3 +:101A2E0075F020800E75F010800575F0087D007E33 +:101A3E00007F003392D530D503121C9EEC3340103C +:101A4E00EF33FFEE33FEED33FDEC33FCD5F0ED223C +:0E1A5E00E5F0247EA2D513CC92E7CDCEFF2278 +:101A6C00EDD2E7CD33EC3392D524814006E4FFFE72 +:101A7C00FDFC22FCE4CFCECDCC24E0501174FF80D1 +:101A8C00EDC3CC13CCCD13CDCE13CECF13CF04706E +:071A9C00F030D5DE021C9EB4 +:101AA300E9D2E7C933E833F892D5EDD2E7CD33EC89 +:071AB30033FC5002B2D52202 +:101ABA00EC30E7100FBF000C0EBE00080DBD00048D +:101ACA000BEB6014A2D5EB13FCED92E7FD2274FF39 +:101ADA00FCFDFEFF22E480F8A2D574FF13FC7D8092 +:031AEA00E480EFA6 +:030000000235497D +:0C354900787FE4F6D8FD75814B023590C8 +:101AED00BB010689828A83E0225002E722BBFE02F7 +:091AFD00E32289828A83E493222A +:101B0600BB010CE58229F582E5833AF583E0225094 +:101B160006E92582F8E622BBFE06E92582F8E222DE +:0D1B2600E58229F582E5833AF583E49322F8 +:101B3300C5F0F8A3E028F0C5F0F8E582158270023D +:061B43001583E038F022DA +:101B4900BB0110E58229F582E5833AF583E0F5F0DA +:101B5900A3E0225009E92582F886F008E622BBFEB7 +:101B69000AE92582F8E2F5F008E222E5832AF583FD +:081B7900E993F5F0A3E99322C2 +:101B8100E88FF0A4CC8BF0A42CFCE98EF0A42CFC03 +:101B91008AF0EDA42CFCEA8EF0A4CDA8F08BF0A481 +:101BA1002DCC3825F0FDE98FF0A42CCD35F0FCEBE0 +:101BB1008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39A5 +:0F1BC100FEE43CFCEAA42DCE35F0FDE43CFC2212 +:101BD00075F008758200EF2FFFEE33FECD33CDCCCC +:101BE00033CCC58233C5829BED9AEC99E58298404F +:101BF0000CF582EE9BFEED9AFDEC99FC0FD5F0D62C +:101C0000E4CEFBE4CDFAE4CCF9A88222B800C1B955 +:101C10000059BA002DEC8BF084CFCECDFCE5F0CB93 +:101C2000F97818EF2FFFEE33FEED33FDEC33FCEBCC +:101C300033FB10D703994004EB99FB0FD8E5E4F987 +:101C4000FA227818EF2FFFEE33FEED33FDEC33FC74 +:101C5000C933C910D7059BE99A4007EC9BFCE99A68 +:101C6000F90FD8E0E4C9FAE4CCFB2275F010EF2FAD +:101C7000FFEE33FEED33FDCC33CCC833C810D707AD +:101C80009BEC9AE899400AED9BFDEC9AFCE899F8E8 +:0E1C90000FD5F0DAE4CDFBE4CCFAE4C8F9227B +:0E1C9E00C3E49FFFE49EFEE49DFDE49CFC2257 +:101CAC00EB9FF5F0EA9E42F0E99D42F0E89C45F08E +:011CBC002205 +:101CBD00E8600FECC313FCED13FDEE13FEEF13FF05 +:031CCD00D8F12229 +:101CD000BB010DE58229F582E5833AF583021DAF4C +:101CE0005007E92582F8021DA2BBFE07E92582F80C +:101CF000021DBBE58229F582E5833AF583021DC802 +:0C1D0000ECF0A3EDF0A3EEF0A3EFF02256 +:101D0C00A8828583F0D083D082121D23121D23124A +:101D1C001D23121D23E473E493A3C583C5F0C5836F +:101D2C00C8C582C8F0A3C583C5F0C583C8C582C821 +:011D3C002284 +:0C1D3D00A42582F582E5F03583F58322B1 +:101D4900EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D27 +:101D5900FDE43CFCE8A42EC8C5F03DFDE43CFCEFE5 +:0D1D6900A4FFE5F028FEE43DFDE43CFC2273 +:101D7600EF4E6012EF60010EEDBB010B89828A8384 +:101D8600F0A3DFFCDEFA2289F05007F709DFFCA991 +:0C1D9600F022BBFEFCF309DFFCA9F022E8 +:10355500023822E493A3F8E493A34003F68001F232 +:1035650008DFF48029E493A3F85407240CC8C33377 +:10357500C4540F4420C8834004F456800146F6DF46 +:10358500E4800B01020408102040809000B6E47E20 +:10359500019360BCA3FF543F30E509541FFEE4933B +:1035A500A360010ECF54C025E060A840B8E493A302 +:1035B500FAE493A3F8E493A3C8C582C8CAC583CA2D +:1035C500F0A3C8C582C8CAC583CADFE9DEE780BEE5 +:0100E000001F +:0D1DA200E6FB08E6F908E6FA08E6CBF822B1 +:0C1DAF00E0F8A3E0F9A3E0FAA3E0FB22B7 +:0D1DBB00E2FB08E2F908E2FA08E2CBF822A8 +:101DC800E493F8740193F9740293FA740393FB2271 +:00000001FF diff --git a/Objects/BLV_C12_Dimm_V19.lnp b/Objects/BLV_C12_Dimm_V19.lnp new file mode 100644 index 0000000..65e30a6 --- /dev/null +++ b/Objects/BLV_C12_Dimm_V19.lnp @@ -0,0 +1,12 @@ +".\Objects\GPIO.obj", +".\Objects\main.obj", +".\Objects\UART.obj", +".\Objects\UART_Set.obj", +".\Objects\pwm_control.obj", +".\Objects\Start_Init.obj", +".\Objects\PWM15bit.obj", +".\Objects\timer.obj", +".\Objects\key.obj", +".\Objects\WDT.obj" +TO ".\Objects\BLV_C12_Dimm_V19" +PRINT(".\Listings\BLV_C12_Dimm_V19.m51") RAMSIZE(256) diff --git a/PWM15bit.c b/PWM15bit.c new file mode 100644 index 0000000..769becb --- /dev/null +++ b/PWM15bit.c @@ -0,0 +1,534 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 "PWM15bit.h" + +u16 code PWMxCR[48] = { + 0xff14, /* PWM00CR */ + 0xff1c, /* PWM01CR */ + 0xff24, /* PWM02CR */ + 0xff2c, /* PWM03CR */ + 0xff34, /* PWM04CR */ + 0xff3c, /* PWM05CR */ + 0xff44, /* PWM06CR */ + 0xff4c, /* PWM07CR */ + 0xff64, /* PWM10CR */ + 0xff6c, /* PWM11CR */ + 0xff74, /* PWM12CR */ + 0xff7c, /* PWM13CR */ + 0xff84, /* PWM14CR */ + 0xff8c, /* PWM15CR */ + 0xff94, /* PWM16CR */ + 0xff9c, /* PWM17CR */ + 0xffb4, /* PWM20CR */ + 0xffbc, /* PWM21CR */ + 0xffc4, /* PWM22CR */ + 0xffcc, /* PWM23CR */ + 0xffd4, /* PWM24CR */ + 0xffdc, /* PWM25CR */ + 0xffe4, /* PWM26CR */ + 0xffec, /* PWM27CR */ + 0xfc14, /* PWM30CR */ + 0xfc1c, /* PWM31CR */ + 0xfc24, /* PWM32CR */ + 0xfc2c, /* PWM33CR */ + 0xfc34, /* PWM34CR */ + 0xfc3c, /* PWM35CR */ + 0xfc44, /* PWM36CR */ + 0xfc4c, /* PWM37CR */ + 0xfc64, /* PWM40CR */ + 0xfc6c, /* PWM41CR */ + 0xfc74, /* PWM42CR */ + 0xfc7c, /* PWM43CR */ + 0xfc84, /* PWM44CR */ + 0xfc8c, /* PWM45CR */ + 0xfc94, /* PWM46CR */ + 0xfc9c, /* PWM47CR */ + 0xfcb4, /* PWM50CR */ + 0xfcbc, /* PWM51CR */ + 0xfcc4, /* PWM52CR */ + 0xfccc, /* PWM53CR */ + 0xfcd4, /* PWM54CR */ + 0xfcdc, /* PWM55CR */ + 0xfce4, /* PWM56CR */ + 0xfcec, /* PWM57CR */ +}; + +u16 code PWMxT1[48] = { + 0xff10, /* PWM00T1 */ + 0xff18, /* PWM01T1 */ + 0xff20, /* PWM02T1 */ + 0xff28, /* PWM03T1 */ + 0xff30, /* PWM04T1 */ + 0xff38, /* PWM05T1 */ + 0xff40, /* PWM06T1 */ + 0xff48, /* PWM07T1 */ + 0xff60, /* PWM10T1 */ + 0xff68, /* PWM11T1 */ + 0xff70, /* PWM12T1 */ + 0xff78, /* PWM13T1 */ + 0xff80, /* PWM14T1 */ + 0xff88, /* PWM15T1 */ + 0xff90, /* PWM16T1 */ + 0xff98, /* PWM17T1 */ + 0xffb0, /* PWM20T1 */ + 0xffb8, /* PWM21T1 */ + 0xffc0, /* PWM22T1 */ + 0xffc8, /* PWM23T1 */ + 0xffd0, /* PWM24T1 */ + 0xffd8, /* PWM25T1 */ + 0xffe0, /* PWM26T1 */ + 0xffe8, /* PWM27T1 */ + 0xfc10, /* PWM30T1 */ + 0xfc18, /* PWM31T1 */ + 0xfc20, /* PWM32T1 */ + 0xfc28, /* PWM33T1 */ + 0xfc30, /* PWM34T1 */ + 0xfc38, /* PWM35T1 */ + 0xfc40, /* PWM36T1 */ + 0xfc48, /* PWM37T1 */ + 0xfc60, /* PWM40T1 */ + 0xfc68, /* PWM41T1 */ + 0xfc70, /* PWM42T1 */ + 0xfc78, /* PWM43T1 */ + 0xfc80, /* PWM44T1 */ + 0xfc88, /* PWM45T1 */ + 0xfc90, /* PWM46T1 */ + 0xfc98, /* PWM47T1 */ + 0xfcb0, /* PWM50T1 */ + 0xfcb8, /* PWM51T1 */ + 0xfcc0, /* PWM52T1 */ + 0xfcc8, /* PWM53T1 */ + 0xfcd0, /* PWM54T1 */ + 0xfcd8, /* PWM55T1 */ + 0xfce0, /* PWM56T1 */ + 0xfce8, /* PWM57T1 */ +}; + +u16 code PWMxT2[48] = { + 0xff12, /* PWM00T2 */ + 0xff1a, /* PWM01T2 */ + 0xff22, /* PWM02T2 */ + 0xff2a, /* PWM03T2 */ + 0xff32, /* PWM04T2 */ + 0xff3a, /* PWM05T2 */ + 0xff42, /* PWM06T2 */ + 0xff4a, /* PWM07T2 */ + 0xff62, /* PWM10T2 */ + 0xff6a, /* PWM11T2 */ + 0xff72, /* PWM12T2 */ + 0xff7a, /* PWM13T2 */ + 0xff82, /* PWM14T2 */ + 0xff8a, /* PWM15T2 */ + 0xff92, /* PWM16T2 */ + 0xff9a, /* PWM17T2 */ + 0xffb2, /* PWM20T2 */ + 0xffba, /* PWM21T2 */ + 0xffc2, /* PWM22T2 */ + 0xffca, /* PWM23T2 */ + 0xffd2, /* PWM24T2 */ + 0xffda, /* PWM25T2 */ + 0xffe2, /* PWM26T2 */ + 0xffea, /* PWM27T2 */ + 0xfc12, /* PWM30T2 */ + 0xfc1a, /* PWM31T2 */ + 0xfc22, /* PWM32T2 */ + 0xfc2a, /* PWM33T2 */ + 0xfc32, /* PWM34T2 */ + 0xfc3a, /* PWM35T2 */ + 0xfc42, /* PWM36T2 */ + 0xfc4a, /* PWM37T2 */ + 0xfc62, /* PWM40T2 */ + 0xfc6a, /* PWM41T2 */ + 0xfc72, /* PWM42T2 */ + 0xfc7a, /* PWM43T2 */ + 0xfc82, /* PWM44T2 */ + 0xfc8a, /* PWM45T2 */ + 0xfc92, /* PWM46T2 */ + 0xfc9a, /* PWM47T2 */ + 0xfcb2, /* PWM50T2 */ + 0xfcba, /* PWM51T2 */ + 0xfcc2, /* PWM52T2 */ + 0xfcca, /* PWM53T2 */ + 0xfcd2, /* PWM54T2 */ + 0xfcda, /* PWM55T2 */ + 0xfce2, /* PWM56T2 */ + 0xfcea, /* PWM57T2 */ +}; + +u16 code PWMxHLD[48] = { + 0xff15, /* PWM00HLD */ + 0xff1d, /* PWM01HLD */ + 0xff25, /* PWM02HLD */ + 0xff2d, /* PWM03HLD */ + 0xff35, /* PWM04HLD */ + 0xff3d, /* PWM05HLD */ + 0xff45, /* PWM06HLD */ + 0xff4d, /* PWM07HLD */ + 0xff65, /* PWM10HLD */ + 0xff6d, /* PWM11HLD */ + 0xff75, /* PWM12HLD */ + 0xff7d, /* PWM13HLD */ + 0xff85, /* PWM14HLD */ + 0xff8d, /* PWM15HLD */ + 0xff95, /* PWM16HLD */ + 0xff9d, /* PWM17HLD */ + 0xffb5, /* PWM20HLD */ + 0xffbd, /* PWM21HLD */ + 0xffc5, /* PWM22HLD */ + 0xffcd, /* PWM23HLD */ + 0xffd5, /* PWM24HLD */ + 0xffdd, /* PWM25HLD */ + 0xffe5, /* PWM26HLD */ + 0xffed, /* PWM27HLD */ + 0xfc15, /* PWM30HLD */ + 0xfc1d, /* PWM31HLD */ + 0xfc25, /* PWM32HLD */ + 0xfc2d, /* PWM33HLD */ + 0xfc35, /* PWM34HLD */ + 0xfc3d, /* PWM35HLD */ + 0xfc45, /* PWM36HLD */ + 0xfc4d, /* PWM37HLD */ + 0xfc65, /* PWM40HLD */ + 0xfc6d, /* PWM41HLD */ + 0xfc75, /* PWM42HLD */ + 0xfc7d, /* PWM43HLD */ + 0xfc85, /* PWM44HLD */ + 0xfc8d, /* PWM45HLD */ + 0xfc95, /* PWM46HLD */ + 0xfc9d, /* PWM47HLD */ + 0xfcb5, /* PWM50HLD */ + 0xfcbd, /* PWM51HLD */ + 0xfcc5, /* PWM52HLD */ + 0xfccd, /* PWM53HLD */ + 0xfcd5, /* PWM54HLD */ + 0xfcdd, /* PWM55HLD */ + 0xfce5, /* PWM56HLD */ + 0xfced, /* PWM57HLD */ +}; + +//======================================================================== +// : u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i) +// : PWMͨƼĴ. +// : PWM_id: PWMͨ. ȡֵ 0~57 +// pwm_eno: pwmʹ, 0ΪGPIO, 1ΪPWM. +// pwm_ini: pwm˵ijʼƽ, 0Ϊ͵ƽ, 1Ϊߵƽ. +// pwm_eni: pwmͨжʹܿ, 0ΪرPWMж, 1ΪʹPWMж. +// pwm_ent2i: pwmͨڶжʹܿ, 0ΪرPWMڶж, 1ΪʹPWMڶж. +// pwm_ent1i: pwmͨһжʹܿ, 0ΪرPWMһж, 1ΪʹPWMһж. +// : 0:ȷ, 2:. +// 汾: V1.0, 2020-09-22 +//======================================================================== +u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i) +{ + u8 xdata *pPWMxCR; + + if(PWM_id > PWM57) return 2; //id + if(pwm_eno > 1) return 2; //ʹܴ + if(pwm_ini > 1) return 2; //˵ijʼƽ + if(pwm_eni > 1) return 2; //жʹܿƴ + if(pwm_ent2i > 1) return 2; //ڶжʹܿƴ + if(pwm_ent1i > 1) return 2; //һжʹܿƴ + + EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + pPWMxCR = (u8 *)PWMxCR[PWM_id]; + *pPWMxCR = (pwm_eno << 7) | (pwm_ini << 6) | (pwm_eni << 2)| (pwm_ent2i << 1)| pwm_ent1i; + EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + return 0; +} + +//======================================================================== +// : u8 PWMPeriodDuty(u8 PWM_id, u16 Period, u16 dutyL, u16 dutyH) +// : PWM, ռձ. +// : PWM_id: PWMͨ. ȡֵ 0~57 +// dutyL: pwm͵ƽλ, ȡֵ 0~0x7fff. +// dutyH: pwmߵƽλ, ȡֵ 0~0x7fff. +// : 0:ȷ, 2:. +// 汾: V1.0, 2020-09-22 +//======================================================================== +u8 PWM15Duty(u8 PWM_id,u16 dutyL) +{ + u16 xdata *pPWMxT1; + u16 xdata *pPWMxT2; + + if(PWM_id > PWM57) return 2; //id + if(dutyL > 0x7fff) return 2; //͵ƽʱô + //if(dutyH > 0x7fff) return 2; //ߵƽʱô + + EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + pPWMxT1 = (u16 *)PWMxT1[PWM_id]; + *pPWMxT1 = dutyL & 0x7fff; + + pPWMxT2 = (u16 *)PWMxT2[PWM_id]; + *pPWMxT2 = 0x0000 & 0x7fff; + EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + return 0; +} + +u8 qPWM15Duty(u8 PWM_id,u16 dutyL, u16 dutyH) +{ + u16 xdata *pPWMxT1; + u16 xdata *pPWMxT2; + + if(PWM_id > PWM57) return 2; //id + if(dutyL > 0x7fff) return 2; //͵ƽʱô + if(dutyH > 0x7fff) return 2; //ߵƽʱô + + EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + pPWMxT1 = (u16 *)PWMxT1[PWM_id]; + *pPWMxT1 = dutyL & 0x7fff; + + pPWMxT2 = (u16 *)PWMxT2[PWM_id]; + *pPWMxT2 = dutyH & 0x7fff; + EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + return 0; +} +//======================================================================== +// : u8 PWMOutputSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh) +// : PWMͨƼĴ. +// : PWM_id: PWMͨ. ȡֵ 0~57 +// pwm_hldl: pwmǿ͵ƽλ, 0, 1ǿ͵ƽ. +// pwm_hldh: pwmǿߵƽλ, 0, 1ǿߵƽ. +// : 0:ȷ, 2:. +// 汾: V1.0, 2020-09-22 +//======================================================================== +u8 PWMLevelSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh) +{ + u8 xdata *pPWMxHLD; + + if(PWM_id > PWM57) return 2; //id + if(pwm_hldh > 1) return 2; //ʹܴ + if(pwm_hldl > 1) return 2; //˵ijʼƽ + + EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + pPWMxHLD = (u8 *)PWMxHLD[PWM_id]; + *pPWMxHLD = (pwm_hldh << 1) | pwm_hldl; + EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + return 0; +} + +//======================================================================== +// : void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx) +// : 15λǿPWMʼ. +// : PWM_id: PWM. ȡֵ PWM0,PWM1,PWM2,PWM3,PWM4,PWM5 +// PWMx: ṹ,οͷļĶ. +// : none. +// 汾: V1.0, 2020-09-22 +//======================================================================== +void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx) +{ + if(PWM_id > PWM5) return; //id + + EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ + if(PWM_id == PWM0) + { + if(PWMx->PWM_Enable == ENABLE) PWM15_PWM0_Enable(); //ʹPWM0 + else PWM15_PWM0_Disable(); //رPWM0 + PWM0_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + PWM0C = PWMx->PWM_Period & 0x7fff; + if(PWMx->PWM_Counter == ENABLE) PWM15_Counter0_Enable(); //ʹܼ + else PWM15_Counter0_Disable(); //رռ + } + + if(PWM_id == PWM1) + { + if(PWMx->PWM_Enable == ENABLE) PWM15_PWM1_Enable(); //ʹPWM1 + else PWM15_PWM1_Disable(); //رPWM1 + PWM1_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + PWM1C = PWMx->PWM_Period & 0x7fff; + if(PWMx->PWM_Counter == ENABLE) PWM15_Counter1_Enable(); //ʹܼ + else PWM15_Counter1_Disable(); //رռ + } + + if(PWM_id == PWM2) + { + if(PWMx->PWM_Enable == ENABLE) PWM15_PWM2_Enable(); //ʹPWM2 + else PWM15_PWM2_Disable(); //رPWM2 + PWM2_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + PWM2C = PWMx->PWM_Period & 0x7fff; + if(PWMx->PWM_Counter == ENABLE) PWM15_Counter2_Enable(); //ʹܼ + else PWM15_Counter2_Disable(); //رռ + } + + if(PWM_id == PWM3) + { + if(PWMx->PWM_Enable == ENABLE) PWM15_PWM3_Enable(); //ʹPWM3 + else PWM15_PWM3_Disable(); //رPWM3 + PWM3_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + PWM3C = PWMx->PWM_Period & 0x7fff; + if(PWMx->PWM_Counter == ENABLE) PWM15_Counter3_Enable(); //ʹܼ + else PWM15_Counter3_Disable(); //رռ + } + + if(PWM_id == PWM4) + { + if(PWMx->PWM_Enable == ENABLE) PWM15_PWM4_Enable(); //ʹPWM4 + else PWM15_PWM4_Disable(); //رPWM4 + PWM4_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + PWM4C = PWMx->PWM_Period & 0x7fff; + if(PWMx->PWM_Counter == ENABLE) PWM15_Counter4_Enable(); //ʹܼ + else PWM15_Counter4_Disable(); //رռ + } + + if(PWM_id == PWM5) + { + if(PWMx->PWM_Enable == ENABLE) PWM15_PWM5_Enable(); //ʹPWM5 + else PWM15_PWM5_Disable(); //رPWM5 + PWM5_PS_Set(PWMx->PWM_Clock_PS); //ϵͳʱӷƵ, 0~15 + PWM5C = PWMx->PWM_Period & 0x7fff; + if(PWMx->PWM_Counter == ENABLE) PWM15_Counter5_Enable(); //ʹܼ + else PWM15_Counter5_Disable(); //رռ + } + EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ +} + + +//======================================================================== +// : void PWM0_Handler (void) interrupt PWM0_VECTOR +// : PWM0жϴ. +// : None +// : none. +// 汾: V1.0, 2020-10-13 +//======================================================================== +void PWM0_Handler (void) interrupt PWM0_VECTOR +{ + char store; + store = P_SW2; + P_SW2 |= 0x80; + + if(PWMCFG01 & 0x08) //PWM0ж + { + PWMCFG01 &= ~0x08; //PWM0жϱ־ + // TODO: ڴ˴û + } + if(PWM0IF) + { + PWM0IF = 0; + P27 = ~P27; + } + P_SW2 = store; +} +//======================================================================== +// : void PWM1_Handler (void) interrupt PWM1_VECTOR +// : PWM1жϴ. +// : None +// : none. +// 汾: V1.0, 2020-10-13 +//======================================================================== +void PWM1_Handler (void) interrupt PWM1_VECTOR +{ + char store; + store = P_SW2; + P_SW2 |= 0x80; + + if(PWMCFG01 & 0x80) //PWM1ж + { + PWMCFG01 &= ~0x80; //PWM1жϱ־ + // TODO: ڴ˴û + } + if(PWM1IF) + { + PWM1IF = 0; + P26 = ~P26; + } + P_SW2 = store; +} +//======================================================================== +// : void PWM2_Handler (void) interrupt PWM2_VECTOR +// : PWM2жϴ. +// : None +// : none. +// 汾: V1.0, 2020-10-13 +//======================================================================== +void PWM2_Handler (void) interrupt PWM2_VECTOR +{ + char store; + store = P_SW2; + P_SW2 |= 0x80; + + if(PWMCFG23 & 0x08) //PWM2ж + { + PWMCFG23 &= ~0x08; //PWM2жϱ־ + // TODO: ڴ˴û + } + if(PWM2IF) + { + PWM2IF = 0; + P25 = ~P25; + } + P_SW2 = store; +} +//======================================================================== +// : void PWM3_Handler (void) interrupt PWM3_VECTOR +// : PWM3жϴ. +// : None +// : none. +// 汾: V1.0, 2020-10-13 +//======================================================================== +void PWM3_Handler (void) interrupt PWM3_VECTOR +{ + char store; + store = P_SW2; + P_SW2 |= 0x80; + + if(PWMCFG23 & 0x80) //PWM3ж + { + PWMCFG23 &= ~0x80; //PWM3жϱ־ + // TODO: ڴ˴û + } + if(PWM3IF) + { + PWM3IF = 0; + P24 = ~P24; + } + P_SW2 = store; +} +//======================================================================== +// : void PWM4_Handler (void) interrupt PWM4_VECTOR +// : PWM4жϴ. +// : None +// : none. +// 汾: V1.0, 2020-10-13 +//======================================================================== +void PWM4_Handler (void) interrupt PWM4_VECTOR +{ + char store; + store = P_SW2; + P_SW2 |= 0x80; + + if(PWMCFG45 & 0x08) //PWM4ж + { + PWMCFG45 &= ~0x08; //PWM4жϱ־ + // TODO: ڴ˴û + } + if(PWM4IF) + { + PWM4IF = 0; + P23 = ~P23; + } + P_SW2 = store; +} +//======================================================================== +// : void PWM5_Handler (void) interrupt PWM5_VECTOR +// : PWM5жϴ. +// : None +// : none. +// 汾: V1.0, 2020-10-13 +//======================================================================== +//void PWM5_Handler (void) interrupt PWM5_VECTOR //жų31ɽжϺת +//{ +// if(PWMCFG45 & 0x80) //PWM5ж +// { +// PWMCFG45 &= ~0x80; //PWM5жϱ־ +// // TODO: ڴ˴û +// } +//} diff --git a/PWM15bit.h b/PWM15bit.h new file mode 100644 index 0000000..2ecdc26 --- /dev/null +++ b/PWM15bit.h @@ -0,0 +1,94 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 __PWM15BIT_H +#define __PWM15BIT_H + +#include "config.h" + +#define PWM0 0 +#define PWM1 1 +#define PWM2 2 +#define PWM3 3 +#define PWM4 4 +#define PWM5 5 + +#define PWM00 0 +#define PWM01 1 +#define PWM02 2 +#define PWM03 3 +#define PWM04 4 +#define PWM05 5 +#define PWM06 6 +#define PWM07 7 +#define PWM10 8 +#define PWM11 9 +#define PWM12 10 +#define PWM13 11 +#define PWM14 12 +#define PWM15 13 +#define PWM16 14 +#define PWM17 15 +#define PWM20 16 +#define PWM21 17 +#define PWM22 18 +#define PWM23 19 +#define PWM24 20 +#define PWM25 21 +#define PWM26 22 +#define PWM27 23 +#define PWM30 24 +#define PWM31 25 +#define PWM32 26 +#define PWM33 27 +#define PWM34 28 +#define PWM35 29 +#define PWM36 30 +#define PWM37 31 +#define PWM40 32 +#define PWM41 33 +#define PWM42 34 +#define PWM43 35 +#define PWM44 36 +#define PWM45 37 +#define PWM46 38 +#define PWM47 39 +#define PWM50 40 +#define PWM51 41 +#define PWM52 42 +#define PWM53 43 +#define PWM54 44 +#define PWM55 45 +#define PWM56 46 +#define PWM57 47 + +#define PWMn_CLK_SYS 0 +#define PWMn_CLK_TM2 1 + +typedef struct +{ + u8 PWM_Enable; //PWMʹ, ENABLE, DISABLE + + u8 PWM_Interrupt; //жʹ, ENABLE, DISABLE + u8 PWM_Counter; //ʹ, ENABLE, DISABLE + u8 PWM_Clock_Sel; //ʱԴѡ, PWMn_CLK_SYS, PWMn_CLK_TM2 + u8 PWM_Clock_PS; //ϵͳʱӷƵ, 0~15 + u16 PWM_Period; //PWM, 0~0x7fff +} PWM15_InitTypeDef; + +void PWM15_Init(u8 PWM_id, PWM15_InitTypeDef *PWMx); +u8 PWMChannelCtrl(u8 PWM_id, u8 pwm_eno, u8 pwm_ini, u8 pwm_eni, u8 pwm_ent2i, u8 pwm_ent1i); +u8 PWM15Duty(u8 PWM_id,u16 dutyL); +u8 PWMLevelSet(u8 PWM_id, u8 pwm_hldl, u8 pwm_hldh); +u8 qPWM15Duty(u8 PWM_id,u16 dutyL, u16 dutyH); +#endif + diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..f66219e --- /dev/null +++ b/Readme.md @@ -0,0 +1,57 @@ +### 项目名称:RCU_C12_Dimming + +### 协议文档:..\RCU-Cx\Document\BLV-BUS-485协议文档 + +### 共享路径:..\RCU-Cx\Reference\BLV_C12_CH12_Source_Code + + + +# 版本说明 + + + +#### 2025-12-15 修改人:曹聪 类型:解决BUG + +​ 问题描述:调光时间一样的情况下,调光亮与调光灭的实际调光时间不一致 + +```c +/* 问题点:在于pwm_control.c文件中的deal_command1函数处理上 + + s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; + s_pwm.doublecurrpwm[i] += s_pwm.every_change_10ms[i]; + s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i]; + + 其中: + currpwm 是当前PWM对应的寄存器值(整数) + doublecurrpwm 是用于计算PWM步进后的值(浮点数) + 此逻辑导致用于计算PWM步进后的浮点数,直接丢失小数部分,然后用于下一次运算;导致PWM增加的步进值与降低的步进值不同,从而导致实际调光时间不一致 +*/ +``` + + + + + +#### V18之前版本说明如下: + +- V18 2024-09-27 + + 修改内容:解决全局亮度设置时变量溢出导致亮度不能调节问题。 + +- V17 杨鸿锋 + + 修改内容:全局亮度设置增加渐变 + +- V16 2024-05-06 曹聪 + + 修改内容:修改调光频率导致循环调光时间过短问题 - 调整后与之前循环调光渐变时间差不多(最慢的时候 10S左右) + +- V15 + + 修改了pwm调光的频率,调成16khz,解决了低频主机啸叫的问题 + +- V14 + + 修改串口接收,最终发布版本 + +- 以下版本说明全是开发临时记录 \ No newline at end of file diff --git a/STC8xxxx.H b/STC8xxxx.H new file mode 100644 index 0000000..db07392 --- /dev/null +++ b/STC8xxxx.H @@ -0,0 +1,2748 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Ҫڳʹô˴,ڳעʹSTCϼ */ +/*---------------------------------------------------------------------*/ + +#ifndef _STC8xxxx_H +#define _STC8xxxx_H + +#include + +/* BYTE Registers */ +sfr P0 = 0x80; +sfr SP = 0x81; +sfr DPL = 0x82; +sfr DPH = 0x83; +sfr S4CON = 0x84; +sfr S4BUF = 0x85; +sfr PCON = 0x87; + +sfr TCON = 0x88; +sfr TMOD = 0x89; +sfr TL0 = 0x8A; +sfr TL1 = 0x8B; +sfr TH0 = 0x8C; +sfr TH1 = 0x8D; +sfr AUXR = 0x8E; +sfr WAKE_CLKO = 0x8F; +sfr INT_CLKO = 0x8F; + +sfr P1 = 0x90; +sfr P1M1 = 0x91; //P1M1.n,P1M0.n =00--->Standard, 01--->push-pull ʵ1TĶһ +sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain +sfr P0M1 = 0x93; //P0M1.n,P0M0.n =00--->Standard, 01--->push-pull +sfr P0M0 = 0x94; // =10--->pure input, 11--->open drain +sfr P2M1 = 0x95; //P2M1.n,P2M0.n =00--->Standard, 01--->push-pull +sfr P2M0 = 0x96; // =10--->pure input, 11--->open drain +//sfr PCON2 = 0x97; +//sfr AUXR2 = 0x97; + +sfr SCON = 0x98; +sfr SBUF = 0x99; +sfr S2CON = 0x9A; // +sfr S2BUF = 0x9B; // + +sfr P2 = 0xA0; +sfr BUS_SPEED = 0xA1; +sfr P_SW1 = 0xA2; + +sfr IE = 0xA8; +sfr SADDR = 0xA9; +sfr WKTCL = 0xAA; //Ѷʱֽ +sfr WKTCH = 0xAB; //Ѷʱֽ +sfr S3CON = 0xAC; +sfr S3BUF = 0xAD; +sfr TA = 0xAE; +sfr IE2 = 0xAF; + +sfr P3 = 0xB0; +sfr P3M1 = 0xB1; //P3M1.n,P3M0.n =00--->Standard, 01--->push-pull +sfr P3M0 = 0xB2; // =10--->pure input, 11--->open drain +sfr P4M1 = 0xB3; //P4M1.n,P4M0.n =00--->Standard, 01--->push-pull +sfr P4M0 = 0xB4; // =10--->pure input, 11--->open drain +sfr IP2 = 0xB5; +sfr IP2H = 0xB6; +sfr IPH = 0xB7; + +sfr IP = 0xB8; +sfr SADEN = 0xB9; +sfr P_SW2 = 0xBA; +sfr VOCTRL = 0xBB; +sfr ADC_CONTR = 0xBC; //ADCƼĴ +sfr ADC_RES = 0xBD; //ADCֽ +sfr ADC_RESL = 0xBE; //ADCֽ + +sfr P4 = 0xC0; +sfr WDT_CONTR = 0xC1; + +sfr IAP_DATA = 0xC2; +sfr IAP_ADDRH = 0xC3; +sfr IAP_ADDRL = 0xC4; +sfr IAP_CMD = 0xC5; +sfr IAP_TRIG = 0xC6; +sfr IAP_CONTR = 0xC7; + +sfr ISP_DATA = 0xC2; +sfr ISP_ADDRH = 0xC3; +sfr ISP_ADDRL = 0xC4; +sfr ISP_CMD = 0xC5; +sfr ISP_TRIG = 0xC6; +sfr ISP_CONTR = 0xC7; + +sfr P5 = 0xC8; // +sfr P5M1 = 0xC9; // P5M1.n,P5M0.n =00--->Standard, 01--->push-pull +sfr P5M0 = 0xCA; // =10--->pure input, 11--->open drain +sfr P6M1 = 0xCB; // P5M1.n,P5M0.n =00--->Standard, 01--->push-pull +sfr P6M0 = 0xCC; // =10--->pure input, 11--->open drain +sfr SPSTAT = 0xCD; // +sfr SPCTL = 0xCE; // +sfr SPDAT = 0xCF; // + +sfr PSW = 0xD0; +sfr T4T3M = 0xD1; +sfr T4H = 0xD2; +sfr T4L = 0xD3; +sfr T3H = 0xD4; +sfr T3L = 0xD5; +sfr T2H = 0xD6; +sfr T2L = 0xD7; + +sfr TH4 = 0xD2; +sfr TL4 = 0xD3; +sfr TH3 = 0xD4; +sfr TL3 = 0xD5; +sfr TH2 = 0xD6; +sfr TL2 = 0xD7; + +sfr CCON = 0xD8; // +sfr CMOD = 0xD9; // +sfr CCAPM0 = 0xDA; //PCAģ0ĹģʽĴ +sfr CCAPM1 = 0xDB; //PCAģ1ĹģʽĴ +sfr CCAPM2 = 0xDC; //PCAģ2ĹģʽĴ +//sfr CCAPM3 = 0xDD; //PCAģ3ĹģʽĴ +sfr USBCLK = 0xDC; +sfr ADCCFG = 0xDE; // +sfr IP3 = 0xDF; //жȼĴ + +sfr ACC = 0xE0; +sfr P7M1 = 0xE1; +sfr P7M0 = 0xE2; +sfr DPS = 0xE3; +sfr DPL1 = 0xE4; +sfr DPH1 = 0xE5; +sfr CMPCR1 = 0xE6; +sfr CMPCR2 = 0xE7; + +sfr P6 = 0xE8; +sfr CL = 0xE9; // +sfr CCAP0L = 0xEA; //PCAģ0IJ׽/ȽϼĴ8λ +sfr CCAP1L = 0xEB; //PCAģ1IJ׽/ȽϼĴ8λ +sfr CCAP2L = 0xEC; //PCAģ2IJ׽/ȽϼĴ8λ +//sfr CCAP3L = 0xED; //PCAģ3IJ׽/ȽϼĴ8λ +sfr USBDAT = 0xEC; +sfr IP3H = 0xEE; +sfr AUXINTIF = 0xEF; //жϱ־ B6-INT4IF, B5-INT3IF, B4-INT2IF, B2-T4IF, B1-T3IF, B0-T2IF + +sfr B = 0xF0; +sfr PWMSET = 0xF1; //ǿPWMȫüĴ +sfr PCA_PWM0 = 0xF2; //PCAģ0 PWMĴ +sfr PCA_PWM1 = 0xF3; //PCAģ1 PWMĴ +sfr PCA_PWM2 = 0xF4; //PCAģ2 PWMĴ +//sfr PCA_PWM3 = 0xF5; //PCAģ3 PWMĴ +sfr PWMCFG01 = 0xF6; //ǿPWMüĴ +sfr PWMCFG23 = 0xF7; //ǿPWMüĴ +sfr USBCON = 0xF4; +sfr IAP_TPS = 0xF5; + +sfr P7 = 0xF8; +sfr CH = 0xF9; +sfr CCAP0H = 0xFA; //PCAģ0IJ׽/ȽϼĴ8λ +sfr CCAP1H = 0xFB; //PCAģ1IJ׽/ȽϼĴ8λ +sfr CCAP2H = 0xFC; //PCAģ2IJ׽/ȽϼĴ8λ +//sfr CCAP3H = 0xFD; //PCAģ3IJ׽/ȽϼĴ8λ +sfr PWMCFG45 = 0xFE; //ǿPWMüĴ +sfr USBADR = 0xFC; +sfr RSTCFG = 0xFF; // + + +// 7 6 5 4 3 2 1 0 Reset Value +//INT_CLKO: жʱƼĴ - EX4 EX3 EX2 - T2CLKO T1CLKO T0CLKO 0000,0000 +#define INT4_Enable() INT_CLKO |= (1 << 6) +#define INT3_Enable() INT_CLKO |= (1 << 5) +#define INT2_Enable() INT_CLKO |= (1 << 4) +#define INT1_Enable() EX1 = 1 +#define INT0_Enable() EX0 = 1 + +#define INT4_Disable() INT_CLKO &= ~(1 << 6) +#define INT3_Disable() INT_CLKO &= ~(1 << 5) +#define INT2_Disable() INT_CLKO &= ~(1 << 4) +#define INT1_Disable() EX1 = 0 +#define INT0_Disable() EX0 = 0 + +// 7 6 5 4 3 2 1 0 Reset Value +//AUXINTIF: жϱ־Ĵ - INT4IF INT3IF INT2IF - T4IF T3IF T2IF 0000,0000 +#define INT4IF 0x40 +#define INT3IF 0x20 +#define INT2IF 0x10 +#define T4IF 0x04 +#define T3IF 0x02 +#define T2IF 0x01 + +#define INT4_Clear() AUXINTIF &= ~INT4IF /* ж4־λ */ +#define INT3_Clear() AUXINTIF &= ~INT3IF /* ж3־λ */ +#define INT2_Clear() AUXINTIF &= ~INT2IF /* ж2־λ */ +#define INT1_Clear() IE1 = 0 /* ж1־λ */ +#define INT0_Clear() IE0 = 0 /* ж0־λ */ + +#define INT0_Fall() IT0 = 1 /* INT0 ½ж */ +#define INT0_RiseFall() IT0 = 0 /* INT0 ½ؾж */ +#define INT1_Fall() IT1 = 1 /* INT1 ½ж */ +#define INT1_RiseFall() IT0 = 0 /* INT1 ½ؾж */ + + +//=============================================================== +#define EAXSFR() P_SW2 |= 0x80 /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչSFR(XSFR) */ +#define EAXRAM() P_SW2 &= ~0x80 /* MOVX A,@DPTR/MOVX @DPTR,AָIJΪչRAM(XRAM) */ + +#define I2C_USE_P14P15() P_SW2 &= ~0x30 /* I2CлP1.4(SDA) P1.5(SCL)(ϵĬ).*/ +#define I2C_USE_P24P25() P_SW2 = (P_SW2 & ~0x30) | 0x10 /* I2CлP2.4(SDA) P2.5(SCL).*/ +#define I2C_USE_P76P77() P_SW2 = (P_SW2 & ~0x30) | 0x20 /* I2CлP7.6(SDA) P7.7(SCL).*/ +#define I2C_USE_P33P32() P_SW2 |= 0x30 /* I2CлP3.3(SDA) P3.2(SCL).*/ + +#define CLKSEL (*(unsigned char volatile xdata *)0xfe00) +#define CKSEL (*(unsigned char volatile xdata *)0xfe00) /* ʱԴѡ */ +#define CLKDIV (*(unsigned char volatile xdata *)0xfe01) /* ʱӷƵ */ +#define IRC24MCR (*(unsigned char volatile xdata *)0xfe02) /* IRC 24MHZ */ +#define XOSCCR (*(unsigned char volatile xdata *)0xfe03) /* XOSC */ +#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04) /* IRC 32KHZ */ +#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05) +#define IRCDB (*(unsigned char volatile xdata *)0xfe06) +#define X32KCR (*(unsigned char volatile xdata *)0xfe08) + +#define MainFosc_IRC24M() CKSEL = (CKSEL & ~0x03) /* ѡڲ24MHZʱ */ +#define MainFosc_XTAL() CKSEL = (CKSEL & ~0x03) | 0x01 /* ѡⲿʱ */ +#define MainFosc_IRC32K() CKSEL = CKSEL | 0x03 /* ѡڲ32Kʱ */ +#define EXT_CLOCK() XOSCCR = 0x80 /* ѡⲿʱ */ +#define EXT_CRYSTAL() XOSCCR = 0xC0 /* ѡⲿ */ + + +#define P0PU (*(unsigned char volatile xdata *)0xfe10) /* P0 4.1K Pull Up Enable */ +#define P1PU (*(unsigned char volatile xdata *)0xfe11) /* P1 4.1K Pull Up Enable */ +#define P2PU (*(unsigned char volatile xdata *)0xfe12) /* P2 4.1K Pull Up Enable */ +#define P3PU (*(unsigned char volatile xdata *)0xfe13) /* P3 4.1K Pull Up Enable */ +#define P4PU (*(unsigned char volatile xdata *)0xfe14) /* P4 4.1K Pull Up Enable */ +#define P5PU (*(unsigned char volatile xdata *)0xfe15) /* P5 4.1K Pull Up Enable */ +#define P6PU (*(unsigned char volatile xdata *)0xfe16) /* P6 4.1K Pull Up Enable */ +#define P7PU (*(unsigned char volatile xdata *)0xfe17) /* P7 4.1K Pull Up Enable */ + +#define P0NCS (*(unsigned char volatile xdata *)0xfe18) /* P0 Non Schmit Trigger 0: ʹܶ˿ʩش(Ĭ), 1: ֹ */ +#define P1NCS (*(unsigned char volatile xdata *)0xfe19) /* P1 Non Schmit Trigger */ +#define P2NCS (*(unsigned char volatile xdata *)0xfe1a) /* P2 Non Schmit Trigger */ +#define P3NCS (*(unsigned char volatile xdata *)0xfe1b) /* P3 Non Schmit Trigger */ +#define P4NCS (*(unsigned char volatile xdata *)0xfe1c) /* P4 Non Schmit Trigger */ +#define P5NCS (*(unsigned char volatile xdata *)0xfe1d) /* P5 Non Schmit Trigger */ +#define P6NCS (*(unsigned char volatile xdata *)0xfe1e) /* P6 Non Schmit Trigger */ +#define P7NCS (*(unsigned char volatile xdata *)0xfe1f) /* P7 Non Schmit Trigger */ + +#define P0SR (*(unsigned char volatile xdata *)0xfe20) /* ˿ڵƽתٶ 0: , 1: (Ĭ) */ +#define P1SR (*(unsigned char volatile xdata *)0xfe21) +#define P2SR (*(unsigned char volatile xdata *)0xfe22) +#define P3SR (*(unsigned char volatile xdata *)0xfe23) +#define P4SR (*(unsigned char volatile xdata *)0xfe24) +#define P5SR (*(unsigned char volatile xdata *)0xfe25) +#define P6SR (*(unsigned char volatile xdata *)0xfe26) +#define P7SR (*(unsigned char volatile xdata *)0xfe27) + +#define P0DR (*(unsigned char volatile xdata *)0xfe28) /* ˿ 0: ǿ, 1: һ(Ĭ) */ +#define P1DR (*(unsigned char volatile xdata *)0xfe29) +#define P2DR (*(unsigned char volatile xdata *)0xfe2a) +#define P3DR (*(unsigned char volatile xdata *)0xfe2b) +#define P4DR (*(unsigned char volatile xdata *)0xfe2c) +#define P5DR (*(unsigned char volatile xdata *)0xfe2d) +#define P6DR (*(unsigned char volatile xdata *)0xfe2e) +#define P7DR (*(unsigned char volatile xdata *)0xfe2f) + +#define P0IE (*(unsigned char volatile xdata *)0xfe30)/* ˿źʹ 0: ֹź, 1: ʹź(Ĭ) */ +#define P1IE (*(unsigned char volatile xdata *)0xfe31) +#define P2IE (*(unsigned char volatile xdata *)0xfe32) +#define P3IE (*(unsigned char volatile xdata *)0xfe33) +#define P4IE (*(unsigned char volatile xdata *)0xfe34) +#define P5IE (*(unsigned char volatile xdata *)0xfe35) +#define P6IE (*(unsigned char volatile xdata *)0xfe36) +#define P7IE (*(unsigned char volatile xdata *)0xfe37) + +#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) /* */ +#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) /* */ +#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) /* */ +#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) /* */ +#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) /* */ +#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) /* */ +#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) /* */ +#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) /* */ +#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88) + +#define TM2PS (*(unsigned char volatile xdata *)0xfea2) +#define TM3PS (*(unsigned char volatile xdata *)0xfea3) +#define TM4PS (*(unsigned char volatile xdata *)0xfea4) +#define ADCTIM (*(unsigned char volatile xdata *)0xfea8) +#define T3T4PIN (*(unsigned char volatile xdata *)0xfeac) + +#define PWMA_ETRPS (*(unsigned char volatile xdata *)0xfeb0) +#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1) +#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2) +#define PWMA_IOAUX (*(unsigned char volatile xdata *)0xfeb3) +#define PWMB_ETRPS (*(unsigned char volatile xdata *)0xfeb4) +#define PWMB_ENO (*(unsigned char volatile xdata *)0xfeb5) +#define PWMB_PS (*(unsigned char volatile xdata *)0xfeb6) +#define PWMB_IOAUX (*(unsigned char volatile xdata *)0xfeb7) +#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0) +#define PWMA_CR2 (*(unsigned char volatile xdata *)0xfec1) +#define PWMA_SMCR (*(unsigned char volatile xdata *)0xfec2) +#define PWMA_ETR (*(unsigned char volatile xdata *)0xfec3) +#define PWMA_IER (*(unsigned char volatile xdata *)0xfec4) +#define PWMA_SR1 (*(unsigned char volatile xdata *)0xfec5) +#define PWMA_SR2 (*(unsigned char volatile xdata *)0xfec6) +#define PWMA_EGR (*(unsigned char volatile xdata *)0xfec7) +#define PWMA_CCMR1 (*(unsigned char volatile xdata *)0xfec8) +#define PWMA_CCMR2 (*(unsigned char volatile xdata *)0xfec9) +#define PWMA_CCMR3 (*(unsigned char volatile xdata *)0xfeca) +#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb) +#define PWMA_CCER1 (*(unsigned char volatile xdata *)0xfecc) +#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd) +#define PWMA_CNTR (*(unsigned int volatile xdata *)0xfece) +#define PWMA_CNTRH (*(unsigned char volatile xdata *)0xfece) +#define PWMA_CNTRL (*(unsigned char volatile xdata *)0xfecf) +#define PWMA_PSCR (*(unsigned int volatile xdata *)0xfed0) +#define PWMA_PSCRH (*(unsigned char volatile xdata *)0xfed0) +#define PWMA_PSCRL (*(unsigned char volatile xdata *)0xfed1) +#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2) +#define PWMA_ARRH (*(unsigned char volatile xdata *)0xfed2) +#define PWMA_ARRL (*(unsigned char volatile xdata *)0xfed3) +#define PWMA_RCR (*(unsigned char volatile xdata *)0xfed4) +#define PWMA_CCR1 (*(unsigned int volatile xdata *)0xfed5) +#define PWMA_CCR1H (*(unsigned char volatile xdata *)0xfed5) +#define PWMA_CCR1L (*(unsigned char volatile xdata *)0xfed6) +#define PWMA_CCR2 (*(unsigned int volatile xdata *)0xfed7) +#define PWMA_CCR2H (*(unsigned char volatile xdata *)0xfed7) +#define PWMA_CCR2L (*(unsigned char volatile xdata *)0xfed8) +#define PWMA_CCR3 (*(unsigned int volatile xdata *)0xfed9) +#define PWMA_CCR3H (*(unsigned char volatile xdata *)0xfed9) +#define PWMA_CCR3L (*(unsigned char volatile xdata *)0xfeda) +#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb) +#define PWMA_CCR4H (*(unsigned char volatile xdata *)0xfedb) +#define PWMA_CCR4L (*(unsigned char volatile xdata *)0xfedc) +#define PWMA_BRK (*(unsigned char volatile xdata *)0xfedd) +#define PWMA_DTR (*(unsigned char volatile xdata *)0xfede) +#define PWMA_OISR (*(unsigned char volatile xdata *)0xfedf) + +#define PWMB_CR1 (*(unsigned char volatile xdata *)0xfee0) +#define PWMB_CR2 (*(unsigned char volatile xdata *)0xfee1) +#define PWMB_SMCR (*(unsigned char volatile xdata *)0xfee2) +#define PWMB_ETR (*(unsigned char volatile xdata *)0xfee3) +#define PWMB_IER (*(unsigned char volatile xdata *)0xfee4) +#define PWMB_SR1 (*(unsigned char volatile xdata *)0xfee5) +#define PWMB_SR2 (*(unsigned char volatile xdata *)0xfee6) +#define PWMB_EGR (*(unsigned char volatile xdata *)0xfee7) +#define PWMB_CCMR1 (*(unsigned char volatile xdata *)0xfee8) +#define PWMB_CCMR2 (*(unsigned char volatile xdata *)0xfee9) +#define PWMB_CCMR3 (*(unsigned char volatile xdata *)0xfeea) +#define PWMB_CCMR4 (*(unsigned char volatile xdata *)0xfeeb) +#define PWMB_CCER1 (*(unsigned char volatile xdata *)0xfeec) +#define PWMB_CCER2 (*(unsigned char volatile xdata *)0xfeed) +#define PWMB_CNTR (*(unsigned int volatile xdata *)0xfeee) +#define PWMB_CNTRH (*(unsigned char volatile xdata *)0xfeee) +#define PWMB_CNTRL (*(unsigned char volatile xdata *)0xfeef) +#define PWMB_PSCR (*(unsigned int volatile xdata *)0xfef0) +#define PWMB_PSCRH (*(unsigned char volatile xdata *)0xfef0) +#define PWMB_PSCRL (*(unsigned char volatile xdata *)0xfef1) +#define PWMB_ARR (*(unsigned int volatile xdata *)0xfef2) +#define PWMB_ARRH (*(unsigned char volatile xdata *)0xfef2) +#define PWMB_ARRL (*(unsigned char volatile xdata *)0xfef3) +#define PWMB_RCR (*(unsigned char volatile xdata *)0xfef4) +#define PWMB_CCR5 (*(unsigned int volatile xdata *)0xfef5) +#define PWMB_CCR5H (*(unsigned char volatile xdata *)0xfef5) +#define PWMB_CCR5L (*(unsigned char volatile xdata *)0xfef6) +#define PWMB_CCR6 (*(unsigned int volatile xdata *)0xfef7) +#define PWMB_CCR6H (*(unsigned char volatile xdata *)0xfef7) +#define PWMB_CCR6L (*(unsigned char volatile xdata *)0xfef8) +#define PWMB_CCR7 (*(unsigned int volatile xdata *)0xfef9) +#define PWMB_CCR7H (*(unsigned char volatile xdata *)0xfef9) +#define PWMB_CCR7L (*(unsigned char volatile xdata *)0xfefa) +#define PWMB_CCR8 (*(unsigned int volatile xdata *)0xfefb) +#define PWMB_CCR8H (*(unsigned char volatile xdata *)0xfefb) +#define PWMB_CCR8L (*(unsigned char volatile xdata *)0xfefc) +#define PWMB_BRK (*(unsigned char volatile xdata *)0xfefd) +#define PWMB_DTR (*(unsigned char volatile xdata *)0xfefe) +#define PWMB_OISR (*(unsigned char volatile xdata *)0xfeff) + +///////////////////////////////////////////////// +//FD00H-FDFFH +///////////////////////////////////////////////// + +#define PWM0C (*(unsigned int volatile xdata *)0xff00) +#define PWM0CH (*(unsigned char volatile xdata *)0xff00) +#define PWM0CL (*(unsigned char volatile xdata *)0xff01) +#define PWM0CKS (*(unsigned char volatile xdata *)0xff02) +#define PWM0TADC (*(unsigned int volatile xdata *)0xff03) +#define PWM0TADCH (*(unsigned char volatile xdata *)0xff03) +#define PWM0TADCL (*(unsigned char volatile xdata *)0xff04) +#define PWM0IF (*(unsigned char volatile xdata *)0xff05) +#define PWM0FDCR (*(unsigned char volatile xdata *)0xff06) +#define PWM00T1 (*(unsigned int volatile xdata *)0xff10) +#define PWM00T1H (*(unsigned char volatile xdata *)0xff10) +#define PWM00T1L (*(unsigned char volatile xdata *)0xff11) +#define PWM00T2 (*(unsigned int volatile xdata *)0xff12) +#define PWM00T2H (*(unsigned char volatile xdata *)0xff12) +#define PWM00T2L (*(unsigned char volatile xdata *)0xff13) +#define PWM00CR (*(unsigned char volatile xdata *)0xff14) +#define PWM00HLD (*(unsigned char volatile xdata *)0xff15) +#define PWM01T1 (*(unsigned int volatile xdata *)0xff18) +#define PWM01T1H (*(unsigned char volatile xdata *)0xff18) +#define PWM01T1L (*(unsigned char volatile xdata *)0xff19) +#define PWM01T2 (*(unsigned int volatile xdata *)0xff1a) +#define PWM01T2H (*(unsigned char volatile xdata *)0xff1a) +#define PWM01T2L (*(unsigned char volatile xdata *)0xff1b) +#define PWM01CR (*(unsigned char volatile xdata *)0xff1c) +#define PWM01HLD (*(unsigned char volatile xdata *)0xff1d) +#define PWM02T1 (*(unsigned int volatile xdata *)0xff20) +#define PWM02T1H (*(unsigned char volatile xdata *)0xff20) +#define PWM02T1L (*(unsigned char volatile xdata *)0xff21) +#define PWM02T2 (*(unsigned int volatile xdata *)0xff22) +#define PWM02T2H (*(unsigned char volatile xdata *)0xff22) +#define PWM02T2L (*(unsigned char volatile xdata *)0xff23) +#define PWM02CR (*(unsigned char volatile xdata *)0xff24) +#define PWM02HLD (*(unsigned char volatile xdata *)0xff25) +#define PWM03T1 (*(unsigned int volatile xdata *)0xff28) +#define PWM03T1H (*(unsigned char volatile xdata *)0xff28) +#define PWM03T1L (*(unsigned char volatile xdata *)0xff29) +#define PWM03T2 (*(unsigned int volatile xdata *)0xff2a) +#define PWM03T2H (*(unsigned char volatile xdata *)0xff2a) +#define PWM03T2L (*(unsigned char volatile xdata *)0xff2b) +#define PWM03CR (*(unsigned char volatile xdata *)0xff2c) +#define PWM03HLD (*(unsigned char volatile xdata *)0xff2d) +#define PWM04T1 (*(unsigned int volatile xdata *)0xff30) +#define PWM04T1H (*(unsigned char volatile xdata *)0xff30) +#define PWM04T1L (*(unsigned char volatile xdata *)0xff31) +#define PWM04T2 (*(unsigned int volatile xdata *)0xff32) +#define PWM04T2H (*(unsigned char volatile xdata *)0xff32) +#define PWM04T2L (*(unsigned char volatile xdata *)0xff33) +#define PWM04CR (*(unsigned char volatile xdata *)0xff34) +#define PWM04HLD (*(unsigned char volatile xdata *)0xff35) +#define PWM05T1 (*(unsigned int volatile xdata *)0xff38) +#define PWM05T1H (*(unsigned char volatile xdata *)0xff38) +#define PWM05T1L (*(unsigned char volatile xdata *)0xff39) +#define PWM05T2 (*(unsigned int volatile xdata *)0xff3a) +#define PWM05T2H (*(unsigned char volatile xdata *)0xff3a) +#define PWM05T2L (*(unsigned char volatile xdata *)0xff3b) +#define PWM05CR (*(unsigned char volatile xdata *)0xff3c) +#define PWM05HLD (*(unsigned char volatile xdata *)0xff3d) +#define PWM06T1 (*(unsigned int volatile xdata *)0xff40) +#define PWM06T1H (*(unsigned char volatile xdata *)0xff40) +#define PWM06T1L (*(unsigned char volatile xdata *)0xff41) +#define PWM06T2 (*(unsigned int volatile xdata *)0xff42) +#define PWM06T2H (*(unsigned char volatile xdata *)0xff42) +#define PWM06T2L (*(unsigned char volatile xdata *)0xff43) +#define PWM06CR (*(unsigned char volatile xdata *)0xff44) +#define PWM06HLD (*(unsigned char volatile xdata *)0xff45) +#define PWM07T1 (*(unsigned int volatile xdata *)0xff48) +#define PWM07T1H (*(unsigned char volatile xdata *)0xff48) +#define PWM07T1L (*(unsigned char volatile xdata *)0xff49) +#define PWM07T2 (*(unsigned int volatile xdata *)0xff4a) +#define PWM07T2H (*(unsigned char volatile xdata *)0xff4a) +#define PWM07T2L (*(unsigned char volatile xdata *)0xff4b) +#define PWM07CR (*(unsigned char volatile xdata *)0xff4c) +#define PWM07HLD (*(unsigned char volatile xdata *)0xff4d) +#define PWM1C (*(unsigned int volatile xdata *)0xff50) +#define PWM1CH (*(unsigned char volatile xdata *)0xff50) +#define PWM1CL (*(unsigned char volatile xdata *)0xff51) +#define PWM1CKS (*(unsigned char volatile xdata *)0xff52) +#define PWM1IF (*(unsigned char volatile xdata *)0xff55) +#define PWM1FDCR (*(unsigned char volatile xdata *)0xff56) +#define PWM10T1 (*(unsigned int volatile xdata *)0xff60) +#define PWM10T1H (*(unsigned char volatile xdata *)0xff60) +#define PWM10T1L (*(unsigned char volatile xdata *)0xff61) +#define PWM10T2 (*(unsigned int volatile xdata *)0xff62) +#define PWM10T2H (*(unsigned char volatile xdata *)0xff62) +#define PWM10T2L (*(unsigned char volatile xdata *)0xff63) +#define PWM10CR (*(unsigned char volatile xdata *)0xff64) +#define PWM10HLD (*(unsigned char volatile xdata *)0xff65) +#define PWM11T1 (*(unsigned int volatile xdata *)0xff68) +#define PWM11T1H (*(unsigned char volatile xdata *)0xff68) +#define PWM11T1L (*(unsigned char volatile xdata *)0xff69) +#define PWM11T2 (*(unsigned int volatile xdata *)0xff6a) +#define PWM11T2H (*(unsigned char volatile xdata *)0xff6a) +#define PWM11T2L (*(unsigned char volatile xdata *)0xff6b) +#define PWM11CR (*(unsigned char volatile xdata *)0xff6c) +#define PWM11HLD (*(unsigned char volatile xdata *)0xff6d) +#define PWM12T1 (*(unsigned int volatile xdata *)0xff70) +#define PWM12T1H (*(unsigned char volatile xdata *)0xff70) +#define PWM12T1L (*(unsigned char volatile xdata *)0xff71) +#define PWM12T2 (*(unsigned int volatile xdata *)0xff72) +#define PWM12T2H (*(unsigned char volatile xdata *)0xff72) +#define PWM12T2L (*(unsigned char volatile xdata *)0xff73) +#define PWM12CR (*(unsigned char volatile xdata *)0xff74) +#define PWM12HLD (*(unsigned char volatile xdata *)0xff75) +#define PWM13T1 (*(unsigned int volatile xdata *)0xff78) +#define PWM13T1H (*(unsigned char volatile xdata *)0xff78) +#define PWM13T1L (*(unsigned char volatile xdata *)0xff79) +#define PWM13T2 (*(unsigned int volatile xdata *)0xff7a) +#define PWM13T2H (*(unsigned char volatile xdata *)0xff7a) +#define PWM13T2L (*(unsigned char volatile xdata *)0xff7b) +#define PWM13CR (*(unsigned char volatile xdata *)0xff7c) +#define PWM13HLD (*(unsigned char volatile xdata *)0xff7d) +#define PWM14T1 (*(unsigned int volatile xdata *)0xff80) +#define PWM14T1H (*(unsigned char volatile xdata *)0xff80) +#define PWM14T1L (*(unsigned char volatile xdata *)0xff81) +#define PWM14T2 (*(unsigned int volatile xdata *)0xff82) +#define PWM14T2H (*(unsigned char volatile xdata *)0xff82) +#define PWM14T2L (*(unsigned char volatile xdata *)0xff83) +#define PWM14CR (*(unsigned char volatile xdata *)0xff84) +#define PWM14HLD (*(unsigned char volatile xdata *)0xff85) +#define PWM15T1 (*(unsigned int volatile xdata *)0xff88) +#define PWM15T1H (*(unsigned char volatile xdata *)0xff88) +#define PWM15T1L (*(unsigned char volatile xdata *)0xff89) +#define PWM15T2 (*(unsigned int volatile xdata *)0xff8a) +#define PWM15T2H (*(unsigned char volatile xdata *)0xff8a) +#define PWM15T2L (*(unsigned char volatile xdata *)0xff8b) +#define PWM15CR (*(unsigned char volatile xdata *)0xff8c) +#define PWM15HLD (*(unsigned char volatile xdata *)0xff8d) +#define PWM16T1 (*(unsigned int volatile xdata *)0xff90) +#define PWM16T1H (*(unsigned char volatile xdata *)0xff90) +#define PWM16T1L (*(unsigned char volatile xdata *)0xff91) +#define PWM16T2 (*(unsigned int volatile xdata *)0xff92) +#define PWM16T2H (*(unsigned char volatile xdata *)0xff92) +#define PWM16T2L (*(unsigned char volatile xdata *)0xff93) +#define PWM16CR (*(unsigned char volatile xdata *)0xff94) +#define PWM16HLD (*(unsigned char volatile xdata *)0xff95) +#define PWM17T1 (*(unsigned int volatile xdata *)0xff98) +#define PWM17T1H (*(unsigned char volatile xdata *)0xff98) +#define PWM17T1L (*(unsigned char volatile xdata *)0xff99) +#define PWM17T2 (*(unsigned int volatile xdata *)0xff9a) +#define PWM17T2H (*(unsigned char volatile xdata *)0xff9a) +#define PWM17T2L (*(unsigned char volatile xdata *)0xff9b) +#define PWM17CR (*(unsigned char volatile xdata *)0xff9c) +#define PWM17HLD (*(unsigned char volatile xdata *)0xff9d) +#define PWM2C (*(unsigned int volatile xdata *)0xffa0) +#define PWM2CH (*(unsigned char volatile xdata *)0xffa0) +#define PWM2CL (*(unsigned char volatile xdata *)0xffa1) +#define PWM2CKS (*(unsigned char volatile xdata *)0xffa2) +#define PWM2TADC (*(unsigned int volatile xdata *)0xffa3) +#define PWM2TADCH (*(unsigned char volatile xdata *)0xffa3) +#define PWM2TADCL (*(unsigned char volatile xdata *)0xffa4) +#define PWM2IF (*(unsigned char volatile xdata *)0xffa5) +#define PWM2FDCR (*(unsigned char volatile xdata *)0xffa6) +#define PWM20T1 (*(unsigned int volatile xdata *)0xffb0) +#define PWM20T1H (*(unsigned char volatile xdata *)0xffb0) +#define PWM20T1L (*(unsigned char volatile xdata *)0xffb1) +#define PWM20T2 (*(unsigned int volatile xdata *)0xffb2) +#define PWM20T2H (*(unsigned char volatile xdata *)0xffb2) +#define PWM20T2L (*(unsigned char volatile xdata *)0xffb3) +#define PWM20CR (*(unsigned char volatile xdata *)0xffb4) +#define PWM20HLD (*(unsigned char volatile xdata *)0xffb5) +#define PWM21T1 (*(unsigned int volatile xdata *)0xffb8) +#define PWM21T1H (*(unsigned char volatile xdata *)0xffb8) +#define PWM21T1L (*(unsigned char volatile xdata *)0xffb9) +#define PWM21T2 (*(unsigned int volatile xdata *)0xffba) +#define PWM21T2H (*(unsigned char volatile xdata *)0xffba) +#define PWM21T2L (*(unsigned char volatile xdata *)0xffbb) +#define PWM21CR (*(unsigned char volatile xdata *)0xffbc) +#define PWM21HLD (*(unsigned char volatile xdata *)0xffbd) +#define PWM22T1 (*(unsigned int volatile xdata *)0xffc0) +#define PWM22T1H (*(unsigned char volatile xdata *)0xffc0) +#define PWM22T1L (*(unsigned char volatile xdata *)0xffc1) +#define PWM22T2 (*(unsigned int volatile xdata *)0xffc2) +#define PWM22T2H (*(unsigned char volatile xdata *)0xffc2) +#define PWM22T2L (*(unsigned char volatile xdata *)0xffc3) +#define PWM22CR (*(unsigned char volatile xdata *)0xffc4) +#define PWM22HLD (*(unsigned char volatile xdata *)0xffc5) +#define PWM23T1 (*(unsigned int volatile xdata *)0xffc8) +#define PWM23T1H (*(unsigned char volatile xdata *)0xffc8) +#define PWM23T1L (*(unsigned char volatile xdata *)0xffc9) +#define PWM23T2 (*(unsigned int volatile xdata *)0xffca) +#define PWM23T2H (*(unsigned char volatile xdata *)0xffca) +#define PWM23T2L (*(unsigned char volatile xdata *)0xffcb) +#define PWM23CR (*(unsigned char volatile xdata *)0xffcc) +#define PWM23HLD (*(unsigned char volatile xdata *)0xffcd) +#define PWM24T1 (*(unsigned int volatile xdata *)0xffd0) +#define PWM24T1H (*(unsigned char volatile xdata *)0xffd0) +#define PWM24T1L (*(unsigned char volatile xdata *)0xffd1) +#define PWM24T2 (*(unsigned int volatile xdata *)0xffd2) +#define PWM24T2H (*(unsigned char volatile xdata *)0xffd2) +#define PWM24T2L (*(unsigned char volatile xdata *)0xffd3) +#define PWM24CR (*(unsigned char volatile xdata *)0xffd4) +#define PWM24HLD (*(unsigned char volatile xdata *)0xffd5) +#define PWM25T1 (*(unsigned int volatile xdata *)0xffd8) +#define PWM25T1H (*(unsigned char volatile xdata *)0xffd8) +#define PWM25T1L (*(unsigned char volatile xdata *)0xffd9) +#define PWM25T2 (*(unsigned int volatile xdata *)0xffda) +#define PWM25T2H (*(unsigned char volatile xdata *)0xffda) +#define PWM25T2L (*(unsigned char volatile xdata *)0xffdb) +#define PWM25CR (*(unsigned char volatile xdata *)0xffdc) +#define PWM25HLD (*(unsigned char volatile xdata *)0xffdd) +#define PWM26T1 (*(unsigned int volatile xdata *)0xffe0) +#define PWM26T1H (*(unsigned char volatile xdata *)0xffe0) +#define PWM26T1L (*(unsigned char volatile xdata *)0xffe1) +#define PWM26T2 (*(unsigned int volatile xdata *)0xffe2) +#define PWM26T2H (*(unsigned char volatile xdata *)0xffe2) +#define PWM26T2L (*(unsigned char volatile xdata *)0xffe3) +#define PWM26CR (*(unsigned char volatile xdata *)0xffe4) +#define PWM26HLD (*(unsigned char volatile xdata *)0xffe5) +#define PWM27T1 (*(unsigned int volatile xdata *)0xffe8) +#define PWM27T1H (*(unsigned char volatile xdata *)0xffe8) +#define PWM27T1L (*(unsigned char volatile xdata *)0xffe9) +#define PWM27T2 (*(unsigned int volatile xdata *)0xffea) +#define PWM27T2H (*(unsigned char volatile xdata *)0xffea) +#define PWM27T2L (*(unsigned char volatile xdata *)0xffeb) +#define PWM27CR (*(unsigned char volatile xdata *)0xffec) +#define PWM27HLD (*(unsigned char volatile xdata *)0xffed) + +///////////////////////////////////////////////// +//FC00H-FCFFH +///////////////////////////////////////////////// + +#define PWM3C (*(unsigned int volatile xdata *)0xfc00) +#define PWM3CH (*(unsigned char volatile xdata *)0xfc00) +#define PWM3CL (*(unsigned char volatile xdata *)0xfc01) +#define PWM3CKS (*(unsigned char volatile xdata *)0xfc02) +#define PWM3IF (*(unsigned char volatile xdata *)0xfc05) +#define PWM3FDCR (*(unsigned char volatile xdata *)0xfc06) +#define PWM30T1 (*(unsigned int volatile xdata *)0xfc10) +#define PWM30T1H (*(unsigned char volatile xdata *)0xfc10) +#define PWM30T1L (*(unsigned char volatile xdata *)0xfc11) +#define PWM30T2 (*(unsigned int volatile xdata *)0xfc12) +#define PWM30T2H (*(unsigned char volatile xdata *)0xfc12) +#define PWM30T2L (*(unsigned char volatile xdata *)0xfc13) +#define PWM30CR (*(unsigned char volatile xdata *)0xfc14) +#define PWM30HLD (*(unsigned char volatile xdata *)0xfc15) +#define PWM31T1 (*(unsigned int volatile xdata *)0xfc18) +#define PWM31T1H (*(unsigned char volatile xdata *)0xfc18) +#define PWM31T1L (*(unsigned char volatile xdata *)0xfc19) +#define PWM31T2 (*(unsigned int volatile xdata *)0xfc1a) +#define PWM31T2H (*(unsigned char volatile xdata *)0xfc1a) +#define PWM31T2L (*(unsigned char volatile xdata *)0xfc1b) +#define PWM31CR (*(unsigned char volatile xdata *)0xfc1c) +#define PWM31HLD (*(unsigned char volatile xdata *)0xfc1d) +#define PWM32T1 (*(unsigned int volatile xdata *)0xfc20) +#define PWM32T1H (*(unsigned char volatile xdata *)0xfc20) +#define PWM32T1L (*(unsigned char volatile xdata *)0xfc21) +#define PWM32T2 (*(unsigned int volatile xdata *)0xfc22) +#define PWM32T2H (*(unsigned char volatile xdata *)0xfc22) +#define PWM32T2L (*(unsigned char volatile xdata *)0xfc23) +#define PWM32CR (*(unsigned char volatile xdata *)0xfc24) +#define PWM32HLD (*(unsigned char volatile xdata *)0xfc25) +#define PWM33T1 (*(unsigned int volatile xdata *)0xfc28) +#define PWM33T1H (*(unsigned char volatile xdata *)0xfc28) +#define PWM33T1L (*(unsigned char volatile xdata *)0xfc29) +#define PWM33T2 (*(unsigned int volatile xdata *)0xfc2a) +#define PWM33T2H (*(unsigned char volatile xdata *)0xfc2a) +#define PWM33T2L (*(unsigned char volatile xdata *)0xfc2b) +#define PWM33CR (*(unsigned char volatile xdata *)0xfc2c) +#define PWM33HLD (*(unsigned char volatile xdata *)0xfc2d) +#define PWM34T1 (*(unsigned int volatile xdata *)0xfc30) +#define PWM34T1H (*(unsigned char volatile xdata *)0xfc30) +#define PWM34T1L (*(unsigned char volatile xdata *)0xfc31) +#define PWM34T2 (*(unsigned int volatile xdata *)0xfc32) +#define PWM34T2H (*(unsigned char volatile xdata *)0xfc32) +#define PWM34T2L (*(unsigned char volatile xdata *)0xfc33) +#define PWM34CR (*(unsigned char volatile xdata *)0xfc34) +#define PWM34HLD (*(unsigned char volatile xdata *)0xfc35) +#define PWM35T1 (*(unsigned int volatile xdata *)0xfc38) +#define PWM35T1H (*(unsigned char volatile xdata *)0xfc38) +#define PWM35T1L (*(unsigned char volatile xdata *)0xfc39) +#define PWM35T2 (*(unsigned int volatile xdata *)0xfc3a) +#define PWM35T2H (*(unsigned char volatile xdata *)0xfc3a) +#define PWM35T2L (*(unsigned char volatile xdata *)0xfc3b) +#define PWM35CR (*(unsigned char volatile xdata *)0xfc3c) +#define PWM35HLD (*(unsigned char volatile xdata *)0xfc3d) +#define PWM36T1 (*(unsigned int volatile xdata *)0xfc40) +#define PWM36T1H (*(unsigned char volatile xdata *)0xfc40) +#define PWM36T1L (*(unsigned char volatile xdata *)0xfc41) +#define PWM36T2 (*(unsigned int volatile xdata *)0xfc42) +#define PWM36T2H (*(unsigned char volatile xdata *)0xfc42) +#define PWM36T2L (*(unsigned char volatile xdata *)0xfc43) +#define PWM36CR (*(unsigned char volatile xdata *)0xfc44) +#define PWM36HLD (*(unsigned char volatile xdata *)0xfc45) +#define PWM37T1 (*(unsigned int volatile xdata *)0xfc48) +#define PWM37T1H (*(unsigned char volatile xdata *)0xfc48) +#define PWM37T1L (*(unsigned char volatile xdata *)0xfc49) +#define PWM37T2 (*(unsigned int volatile xdata *)0xfc4a) +#define PWM37T2H (*(unsigned char volatile xdata *)0xfc4a) +#define PWM37T2L (*(unsigned char volatile xdata *)0xfc4b) +#define PWM37CR (*(unsigned char volatile xdata *)0xfc4c) +#define PWM37HLD (*(unsigned char volatile xdata *)0xfc4d) +#define PWM4C (*(unsigned int volatile xdata *)0xfc50) +#define PWM4CH (*(unsigned char volatile xdata *)0xfc50) +#define PWM4CL (*(unsigned char volatile xdata *)0xfc51) +#define PWM4CKS (*(unsigned char volatile xdata *)0xfc52) +#define PWM4TADC (*(unsigned int volatile xdata *)0xfc53) +#define PWM4TADCH (*(unsigned char volatile xdata *)0xfc53) +#define PWM4TADCL (*(unsigned char volatile xdata *)0xfc54) +#define PWM4IF (*(unsigned char volatile xdata *)0xfc55) +#define PWM4FDCR (*(unsigned char volatile xdata *)0xfc56) +#define PWM40T1 (*(unsigned int volatile xdata *)0xfc60) +#define PWM40T1H (*(unsigned char volatile xdata *)0xfc60) +#define PWM40T1L (*(unsigned char volatile xdata *)0xfc61) +#define PWM40T2 (*(unsigned int volatile xdata *)0xfc62) +#define PWM40T2H (*(unsigned char volatile xdata *)0xfc62) +#define PWM40T2L (*(unsigned char volatile xdata *)0xfc63) +#define PWM40CR (*(unsigned char volatile xdata *)0xfc64) +#define PWM40HLD (*(unsigned char volatile xdata *)0xfc65) +#define PWM41T1 (*(unsigned int volatile xdata *)0xfc68) +#define PWM41T1H (*(unsigned char volatile xdata *)0xfc68) +#define PWM41T1L (*(unsigned char volatile xdata *)0xfc69) +#define PWM41T2 (*(unsigned int volatile xdata *)0xfc6a) +#define PWM41T2H (*(unsigned char volatile xdata *)0xfc6a) +#define PWM41T2L (*(unsigned char volatile xdata *)0xfc6b) +#define PWM41CR (*(unsigned char volatile xdata *)0xfc6c) +#define PWM41HLD (*(unsigned char volatile xdata *)0xfc6d) +#define PWM42T1 (*(unsigned int volatile xdata *)0xfc70) +#define PWM42T1H (*(unsigned char volatile xdata *)0xfc70) +#define PWM42T1L (*(unsigned char volatile xdata *)0xfc71) +#define PWM42T2 (*(unsigned int volatile xdata *)0xfc72) +#define PWM42T2H (*(unsigned char volatile xdata *)0xfc72) +#define PWM42T2L (*(unsigned char volatile xdata *)0xfc73) +#define PWM42CR (*(unsigned char volatile xdata *)0xfc74) +#define PWM42HLD (*(unsigned char volatile xdata *)0xfc75) +#define PWM43T1 (*(unsigned int volatile xdata *)0xfc78) +#define PWM43T1H (*(unsigned char volatile xdata *)0xfc78) +#define PWM43T1L (*(unsigned char volatile xdata *)0xfc79) +#define PWM43T2 (*(unsigned int volatile xdata *)0xfc7a) +#define PWM43T2H (*(unsigned char volatile xdata *)0xfc7a) +#define PWM43T2L (*(unsigned char volatile xdata *)0xfc7b) +#define PWM43CR (*(unsigned char volatile xdata *)0xfc7c) +#define PWM43HLD (*(unsigned char volatile xdata *)0xfc7d) +#define PWM44T1 (*(unsigned int volatile xdata *)0xfc80) +#define PWM44T1H (*(unsigned char volatile xdata *)0xfc80) +#define PWM44T1L (*(unsigned char volatile xdata *)0xfc81) +#define PWM44T2 (*(unsigned int volatile xdata *)0xfc82) +#define PWM44T2H (*(unsigned char volatile xdata *)0xfc82) +#define PWM44T2L (*(unsigned char volatile xdata *)0xfc83) +#define PWM44CR (*(unsigned char volatile xdata *)0xfc84) +#define PWM44HLD (*(unsigned char volatile xdata *)0xfc85) +#define PWM45T1 (*(unsigned int volatile xdata *)0xfc88) +#define PWM45T1H (*(unsigned char volatile xdata *)0xfc88) +#define PWM45T1L (*(unsigned char volatile xdata *)0xfc89) +#define PWM45T2 (*(unsigned int volatile xdata *)0xfc8a) +#define PWM45T2H (*(unsigned char volatile xdata *)0xfc8a) +#define PWM45T2L (*(unsigned char volatile xdata *)0xfc8b) +#define PWM45CR (*(unsigned char volatile xdata *)0xfc8c) +#define PWM45HLD (*(unsigned char volatile xdata *)0xfc8d) +#define PWM46T1 (*(unsigned int volatile xdata *)0xfc90) +#define PWM46T1H (*(unsigned char volatile xdata *)0xfc90) +#define PWM46T1L (*(unsigned char volatile xdata *)0xfc91) +#define PWM46T2 (*(unsigned int volatile xdata *)0xfc92) +#define PWM46T2H (*(unsigned char volatile xdata *)0xfc92) +#define PWM46T2L (*(unsigned char volatile xdata *)0xfc93) +#define PWM46CR (*(unsigned char volatile xdata *)0xfc94) +#define PWM46HLD (*(unsigned char volatile xdata *)0xfc95) +#define PWM47T1 (*(unsigned int volatile xdata *)0xfc98) +#define PWM47T1H (*(unsigned char volatile xdata *)0xfc98) +#define PWM47T1L (*(unsigned char volatile xdata *)0xfc99) +#define PWM47T2 (*(unsigned int volatile xdata *)0xfc9a) +#define PWM47T2H (*(unsigned char volatile xdata *)0xfc9a) +#define PWM47T2L (*(unsigned char volatile xdata *)0xfc9b) +#define PWM47CR (*(unsigned char volatile xdata *)0xfc9c) +#define PWM47HLD (*(unsigned char volatile xdata *)0xfc9d) +#define PWM5C (*(unsigned int volatile xdata *)0xfca0) +#define PWM5CH (*(unsigned char volatile xdata *)0xfca0) +#define PWM5CL (*(unsigned char volatile xdata *)0xfca1) +#define PWM5CKS (*(unsigned char volatile xdata *)0xfca2) +#define PWM5IF (*(unsigned char volatile xdata *)0xfca5) +#define PWM5FDCR (*(unsigned char volatile xdata *)0xfca6) +#define PWM50T1 (*(unsigned int volatile xdata *)0xfcb0) +#define PWM50T1H (*(unsigned char volatile xdata *)0xfcb0) +#define PWM50T1L (*(unsigned char volatile xdata *)0xfcb1) +#define PWM50T2 (*(unsigned int volatile xdata *)0xfcb2) +#define PWM50T2H (*(unsigned char volatile xdata *)0xfcb2) +#define PWM50T2L (*(unsigned char volatile xdata *)0xfcb3) +#define PWM50CR (*(unsigned char volatile xdata *)0xfcb4) +#define PWM50HLD (*(unsigned char volatile xdata *)0xfcb5) +#define PWM51T1 (*(unsigned int volatile xdata *)0xfcb8) +#define PWM51T1H (*(unsigned char volatile xdata *)0xfcb8) +#define PWM51T1L (*(unsigned char volatile xdata *)0xfcb9) +#define PWM51T2 (*(unsigned int volatile xdata *)0xfcba) +#define PWM51T2H (*(unsigned char volatile xdata *)0xfcba) +#define PWM51T2L (*(unsigned char volatile xdata *)0xfcbb) +#define PWM51CR (*(unsigned char volatile xdata *)0xfcbc) +#define PWM51HLD (*(unsigned char volatile xdata *)0xfcbd) +#define PWM52T1 (*(unsigned int volatile xdata *)0xfcc0) +#define PWM52T1H (*(unsigned char volatile xdata *)0xfcc0) +#define PWM52T1L (*(unsigned char volatile xdata *)0xfcc1) +#define PWM52T2 (*(unsigned int volatile xdata *)0xfcc2) +#define PWM52T2H (*(unsigned char volatile xdata *)0xfcc2) +#define PWM52T2L (*(unsigned char volatile xdata *)0xfcc3) +#define PWM52CR (*(unsigned char volatile xdata *)0xfcc4) +#define PWM52HLD (*(unsigned char volatile xdata *)0xfcc5) +#define PWM53T1 (*(unsigned int volatile xdata *)0xfcc8) +#define PWM53T1H (*(unsigned char volatile xdata *)0xfcc8) +#define PWM53T1L (*(unsigned char volatile xdata *)0xfcc9) +#define PWM53T2 (*(unsigned int volatile xdata *)0xfcca) +#define PWM53T2H (*(unsigned char volatile xdata *)0xfcca) +#define PWM53T2L (*(unsigned char volatile xdata *)0xfccb) +#define PWM53CR (*(unsigned char volatile xdata *)0xfccc) +#define PWM53HLD (*(unsigned char volatile xdata *)0xfccd) +#define PWM54T1 (*(unsigned int volatile xdata *)0xfcd0) +#define PWM54T1H (*(unsigned char volatile xdata *)0xfcd0) +#define PWM54T1L (*(unsigned char volatile xdata *)0xfcd1) +#define PWM54T2 (*(unsigned int volatile xdata *)0xfcd2) +#define PWM54T2H (*(unsigned char volatile xdata *)0xfcd2) +#define PWM54T2L (*(unsigned char volatile xdata *)0xfcd3) +#define PWM54CR (*(unsigned char volatile xdata *)0xfcd4) +#define PWM54HLD (*(unsigned char volatile xdata *)0xfcd5) +#define PWM55T1 (*(unsigned int volatile xdata *)0xfcd8) +#define PWM55T1H (*(unsigned char volatile xdata *)0xfcd8) +#define PWM55T1L (*(unsigned char volatile xdata *)0xfcd9) +#define PWM55T2 (*(unsigned int volatile xdata *)0xfcda) +#define PWM55T2H (*(unsigned char volatile xdata *)0xfcda) +#define PWM55T2L (*(unsigned char volatile xdata *)0xfcdb) +#define PWM55CR (*(unsigned char volatile xdata *)0xfcdc) +#define PWM55HLD (*(unsigned char volatile xdata *)0xfcdd) +#define PWM56T1 (*(unsigned int volatile xdata *)0xfce0) +#define PWM56T1H (*(unsigned char volatile xdata *)0xfce0) +#define PWM56T1L (*(unsigned char volatile xdata *)0xfce1) +#define PWM56T2 (*(unsigned int volatile xdata *)0xfce2) +#define PWM56T2H (*(unsigned char volatile xdata *)0xfce2) +#define PWM56T2L (*(unsigned char volatile xdata *)0xfce3) +#define PWM56CR (*(unsigned char volatile xdata *)0xfce4) +#define PWM56HLD (*(unsigned char volatile xdata *)0xfce5) +#define PWM57T1 (*(unsigned int volatile xdata *)0xfce8) +#define PWM57T1H (*(unsigned char volatile xdata *)0xfce8) +#define PWM57T1L (*(unsigned char volatile xdata *)0xfce9) +#define PWM57T2 (*(unsigned int volatile xdata *)0xfcea) +#define PWM57T2H (*(unsigned char volatile xdata *)0xfcea) +#define PWM57T2L (*(unsigned char volatile xdata *)0xfceb) +#define PWM57CR (*(unsigned char volatile xdata *)0xfcec) +#define PWM57HLD (*(unsigned char volatile xdata *)0xfced) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMSET = 0xF1H; ENGLBSET PWMRST ENPWM5 ENPWM4 ENPWM3 ENPWM2 ENPWM1 ENPWM0 0000,0000 /* ǿPWMȫüĴ */ +#define PWM15_SET_Uniform() PWMSET |= 0x80 //16PWMͳһ÷ʽ +#define PWM15_SET_Independent() PWMSET &= ~0x80 //06PWMøԶ÷ʽ + +#define PWM15_Reset() PWMSET |= 0x40 //1λPWMXFRĴSFR + +#define PWM15_PWM5_Enable() PWMSET |= 0x20 //1ʹPWM5 PWM50~PWM54 +#define PWM15_PWM5_Disable() PWMSET &= ~0x20 //0رPWM5 + +#define PWM15_PWM4_Enable() PWMSET |= 0x10 //1ʹPWM4 PWM40~PWM47 +#define PWM15_PWM4_Disable() PWMSET &= ~0x10 //0رPWM4 + +#define PWM15_PWM3_Enable() PWMSET |= 0x08 //1ʹPWM3 PWM30~PWM37 +#define PWM15_PWM3_Disable() PWMSET &= ~0x08 //0رPWM3 + +#define PWM15_PWM2_Enable() PWMSET |= 0x04 //1ʹPWM2 PWM20~PWM27 +#define PWM15_PWM2_Disable() PWMSET &= ~0x04 //0رPWM2 + +#define PWM15_PWM1_Enable() PWMSET |= 0x02 //1ʹPWM1 PWM10~PWM17 +#define PWM15_PWM1_Disable() PWMSET &= ~0x02 //0رPWM1 + +#define PWM15_PWM0_Enable() PWMSET |= 0x01 //1ʹPWM0 PWM00~PWM07 +#define PWM15_PWM0_Disable() PWMSET &= ~0x01 //0رPWM0 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMCFG01= 0xF6H; PWM1CBIF EPWM1CBI FLTPS0 PWM1CEN PWM0CBIF EPWM0CBI ENPWM0TA PWM0CEN 0000,0000 /* ǿPWMüĴ */ +//sfr PWMCFG23= 0xF7H; PWM3CBIF EPWM3CBI FLTPS1 PWM3CEN PWM2CBIF EPWM2CBI ENPWM2TA PWM2CEN 0000,0000 /* ǿPWMüĴ */ +//sfr PWMCFG45= 0xFEH; PWM5CBIF EPWM5CBI FLTPS2 PWM5CEN PWM4CBIF EPWM4CBI ENPWM4TA PWM4CEN 0000,0000 /* ǿPWMüĴ */ +#define PWM1CBIF 0x80 +#define PWM0CBIF 0x08 +#define FLTPSn 0x20 + +#define PWM15_Counter1Int_Enable() PWMCFG01 |= 0x40 //1ʹܼж +#define PWM15_Counter1Int_Disable() PWMCFG01 &= ~0x40 //0رռж +#define PWM15_Counter1_Enable() PWMCFG01 |= 0x10 //1ʹܼ +#define PWM15_Counter1_Disable() PWMCFG01 &= ~0x10 //0رռ +#define PWM15_Counter0Int_Enable() PWMCFG01 |= 0x04 //1ʹܼж +#define PWM15_Counter0Int_Disable() PWMCFG01 &= ~0x04 //0رռж +#define PWM15_Counter0_Enable() PWMCFG01 |= 0x01 //1ʹܼ +#define PWM15_Counter0_Disable() PWMCFG01 &= ~0x01 //0رռ +#define PWM15_PWM0_ADC_Enable() PWMCFG01 |= 0x02 //1PWMADC +#define PWM15_PWM0_ADC_Disable() PWMCFG01 &= ~0x02 //0PWMADC + +#define PWM15_Counter3Int_Enable() PWMCFG23 |= 0x40 //1ʹܼж +#define PWM15_Counter3Int_Disable() PWMCFG23 &= ~0x40 //0رռж +#define PWM15_Counter3_Enable() PWMCFG23 |= 0x10 //1ʹܼ +#define PWM15_Counter3_Disable() PWMCFG23 &= ~0x10 //0رռ +#define PWM15_Counter2Int_Enable() PWMCFG23 |= 0x04 //1ʹܼж +#define PWM15_Counter2Int_Disable() PWMCFG23 &= ~0x04 //0رռж +#define PWM15_Counter2_Enable() PWMCFG23 |= 0x01 //1ʹܼ +#define PWM15_Counter2_Disable() PWMCFG23 &= ~0x01 //0رռ +#define PWM15_PWM2_ADC_Enable() PWMCFG23 |= 0x02 //1PWMADC +#define PWM15_PWM2_ADC_Disable() PWMCFG23 &= ~0x02 //0PWMADC + +#define PWM15_Counter5Int_Enable() PWMCFG45 |= 0x40 //1ʹܼж +#define PWM15_Counter5Int_Disable() PWMCFG45 &= ~0x40 //0رռж +#define PWM15_Counter5_Enable() PWMCFG45 |= 0x10 //1ʹܼ +#define PWM15_Counter5_Disable() PWMCFG45 &= ~0x10 //0رռ +#define PWM15_Counter4Int_Enable() PWMCFG45 |= 0x04 //1ʹܼж +#define PWM15_Counter4Int_Disable() PWMCFG45 &= ~0x04 //0رռж +#define PWM15_Counter4_Enable() PWMCFG45 |= 0x01 //1ʹܼ +#define PWM15_Counter4_Disable() PWMCFG45 &= ~0x01 //0رռ +#define PWM15_PWM4_ADC_Enable() PWMCFG45 |= 0x02 //1PWMADC +#define PWM15_PWM4_ADC_Disable() PWMCFG45 &= ~0x02 //0PWMADC + +/* PWMnIF */ +#define C7IF = (1<<7) +#define C6IF = (1<<6) +#define C5IF = (1<<5) +#define C4IF = (1<<4) +#define C3IF = (1<<3) +#define C2IF = (1<<2) +#define C1IF = (1<<1) +#define C0IF = 1 + +/* PWMnFDCR */ +#define INVCMP = (1<<7) +#define INVIO = (1<<6) +#define ENFD = (1<<5) +#define FLTFLIO = (1<<4) +#define EFDI = (1<<3) +#define FDCMP = (1<<2) +#define FDIO = (1<<1) +#define FDIF = 1 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWM0CKS = 0xFF02H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ǿPWMʱѡ */ +//sfr PWM1CKS = 0xFF52H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ǿPWMʱѡ */ +//sfr PWM2CKS = 0xFFA2H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ǿPWMʱѡ */ +//sfr PWM3CKS = 0xFC02H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ǿPWMʱѡ */ +//sfr PWM4CKS = 0xFC52H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ǿPWMʱѡ */ +//sfr PWM5CKS = 0xFCA2H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* ǿPWMʱѡ */ +#define PWM0_PS_Clock() PWM0CKS &= ~0x10 //0PWMnʱԴΪϵͳʱӷƵʱ +#define PWM0_T2_Clock() PWM0CKS |= 0x10 //1PWMnʱԴΪʱ2 +#define PWM0_PS_Set(n) PWM0CKS = (PWM0CKS & ~0x0F) | (n & 0x0F) //ϵͳʱԤƵãSYSclk / (PWM_PS+1) +#define PWM1_PS_Clock() PWM1CKS &= ~0x10 //0PWMnʱԴΪϵͳʱӷƵʱ +#define PWM1_T2_Clock() PWM1CKS |= 0x10 //1PWMnʱԴΪʱ2 +#define PWM1_PS_Set(n) PWM1CKS = (PWM1CKS & ~0x0F) | (n & 0x0F) //ϵͳʱԤƵãSYSclk / (PWM_PS+1) +#define PWM2_PS_Clock() PWM2CKS &= ~0x10 //0PWMnʱԴΪϵͳʱӷƵʱ +#define PWM2_T2_Clock() PWM2CKS |= 0x10 //1PWMnʱԴΪʱ2 +#define PWM2_PS_Set(n) PWM2CKS = (PWM2CKS & ~0x0F) | (n & 0x0F) //ϵͳʱԤƵãSYSclk / (PWM_PS+1) +#define PWM3_PS_Clock() PWM3CKS &= ~0x10 //0PWMnʱԴΪϵͳʱӷƵʱ +#define PWM3_T2_Clock() PWM3CKS |= 0x10 //1PWMnʱԴΪʱ2 +#define PWM3_PS_Set(n) PWM3CKS = (PWM3CKS & ~0x0F) | (n & 0x0F) //ϵͳʱԤƵãSYSclk / (PWM_PS+1) +#define PWM4_PS_Clock() PWM4CKS &= ~0x10 //0PWMnʱԴΪϵͳʱӷƵʱ +#define PWM4_T2_Clock() PWM4CKS |= 0x10 //1PWMnʱԴΪʱ2 +#define PWM4_PS_Set(n) PWM4CKS = (PWM4CKS & ~0x0F) | (n & 0x0F) //ϵͳʱԤƵãSYSclk / (PWM_PS+1) +#define PWM5_PS_Clock() PWM5CKS &= ~0x10 //0PWMnʱԴΪϵͳʱӷƵʱ +#define PWM5_T2_Clock() PWM5CKS |= 0x10 //1PWMnʱԴΪʱ2 +#define PWM5_PS_Set(n) PWM5CKS = (PWM5CKS & ~0x0F) | (n & 0x0F) //ϵͳʱԤƵãSYSclk / (PWM_PS+1) + +/* PWMnTADC */ +#define PWM15_PWM0TADC(n) PWM0TADC = (n & 0x7fff) //PWMADCʱ +#define PWM15_PWM2TADC(n) PWM2TADC = (n & 0x7fff) //PWMADCʱ +#define PWM15_PWM4TADC(n) PWM4TADC = (n & 0x7fff) //PWMADCʱ + +/* PWMnTADC */ +#define PWM15_PWM0TADC(n) PWM0TADC = (n & 0x7fff) //PWMADCʱ + + +/* BIT Registers */ +/* PSW */ +sbit CY = PSW^7; +sbit AC = PSW^6; +sbit F0 = PSW^5; +sbit RS1 = PSW^4; +sbit RS0 = PSW^3; +sbit OV = PSW^2; +sbit F1 = PSW^1; +sbit P = PSW^0; + +/* TCON */ +sbit TF1 = TCON^7; //ʱ1жϱ־λ +sbit TR1 = TCON^6; //ʱ1пλ +sbit TF0 = TCON^5; //ʱ0жϱ־λ +sbit TR0 = TCON^4; //ʱ0пλ +sbit IE1 = TCON^3; //ж1־λ +sbit IT1 = TCON^2; //ж1źŷʽλ1½жϣ0½жϡ +sbit IE0 = TCON^1; //ж0־λ +sbit IT0 = TCON^0; //ж0źŷʽλ1½жϣ0½жϡ + +/* P0 */ +sbit P00 = P0^0; +sbit P01 = P0^1; +sbit P02 = P0^2; +sbit P03 = P0^3; +sbit P04 = P0^4; +sbit P05 = P0^5; +sbit P06 = P0^6; +sbit P07 = P0^7; + +/* P1 */ +sbit P10 = P1^0; +sbit P11 = P1^1; +sbit P12 = P1^2; +sbit P13 = P1^3; +sbit P14 = P1^4; +sbit P15 = P1^5; +sbit P16 = P1^6; +sbit P17 = P1^7; + +sbit RXD2 = P1^0; +sbit TXD2 = P1^1; +sbit CCP1 = P1^0; +sbit CCP0 = P1^1; +sbit SPI_SS = P1^2; +sbit SPI_MOSI = P1^3; +sbit SPI_MISO = P1^4; +sbit SPI_SCLK = P1^5; + +sbit SPI_SS_2 = P2^2; +sbit SPI_MOSI_2 = P2^3; +sbit SPI_MISO_2 = P2^4; +sbit SPI_SCLK_2 = P2^5; + +sbit SPI_SS_3 = P5^4; +sbit SPI_MOSI_3 = P4^0; +sbit SPI_MISO_3 = P4^1; +sbit SPI_SCLK_3 = P4^3; + +sbit SPI_SS_4 = P3^5; +sbit SPI_MOSI_4 = P3^4; +sbit SPI_MISO_4 = P3^3; +sbit SPI_SCLK_4 = P3^2; + +/* P2 */ +sbit P20 = P2^0; +sbit P21 = P2^1; +sbit P22 = P2^2; +sbit P23 = P2^3; +sbit P24 = P2^4; +sbit P25 = P2^5; +sbit P26 = P2^6; +sbit P27 = P2^7; + +/* P3 */ +sbit P30 = P3^0; +sbit P31 = P3^1; +sbit P32 = P3^2; +sbit P33 = P3^3; +sbit P34 = P3^4; +sbit P35 = P3^5; +sbit P36 = P3^6; +sbit P37 = P3^7; + +sbit RXD = P3^0; +sbit TXD = P3^1; +sbit INT0 = P3^2; +sbit INT1 = P3^3; +sbit T0 = P3^4; +sbit T1 = P3^5; +sbit WR = P3^6; +sbit RD = P3^7; + +sbit INT2 = P3^6; +sbit INT3 = P3^7; +sbit INT4 = P3^0; +sbit CCP2 = P3^7; + +sbit CLKOUT0 = P3^5; +sbit CLKOUT1 = P3^4; + +/* P4 */ +sbit P40 = P4^0; +sbit P41 = P4^1; +sbit P42 = P4^2; +sbit P43 = P4^3; +sbit P44 = P4^4; +sbit P45 = P4^5; +sbit P46 = P4^6; +sbit P47 = P4^7; + +/* P5 */ +sbit P50 = P5^0; +sbit P51 = P5^1; +sbit P52 = P5^2; +sbit P53 = P5^3; +sbit P54 = P5^4; +sbit P55 = P5^5; +sbit P56 = P5^6; +sbit P57 = P5^7; + +/* P6 */ +sbit P60 = P6^0; +sbit P61 = P6^1; +sbit P62 = P6^2; +sbit P63 = P6^3; +sbit P64 = P6^4; +sbit P65 = P6^5; +sbit P66 = P6^6; +sbit P67 = P6^7; + +/* P7 */ +sbit P70 = P7^0; +sbit P71 = P7^1; +sbit P72 = P7^2; +sbit P73 = P7^3; +sbit P74 = P7^4; +sbit P75 = P7^5; +sbit P76 = P7^6; +sbit P77 = P7^7; + + +/* SCON */ +sbit SM0 = SCON^7; //SM0/FE SM0 SM1 = 00 ~ 11: ʽ0~3 +sbit SM1 = SCON^6; // +sbit SM2 = SCON^5; //ͨѶ +sbit REN = SCON^4; // +sbit TB8 = SCON^3; //ݵ8λ +sbit RB8 = SCON^2; //ݵ8λ +sbit TI = SCON^1; //жϱ־λ +sbit RI = SCON^0; //жϱ־λ + +/* IE */ +sbit EA = IE^7; //жܿλ +sbit ELVD = IE^6; //ѹжλ +sbit EADC = IE^5; //ADC ж λ +sbit ES = IE^4; //ж λ +sbit ET1 = IE^3; //ʱж1λ +sbit EX1 = IE^2; //ⲿж1λ +sbit ET0 = IE^1; //ʱж0λ +sbit EX0 = IE^0; //ⲿж0λ + +sbit ACC0 = ACC^0; +sbit ACC1 = ACC^1; +sbit ACC2 = ACC^2; +sbit ACC3 = ACC^3; +sbit ACC4 = ACC^4; +sbit ACC5 = ACC^5; +sbit ACC6 = ACC^6; +sbit ACC7 = ACC^7; + +sbit B0 = B^0; +sbit B1 = B^1; +sbit B2 = B^2; +sbit B3 = B^3; +sbit B4 = B^4; +sbit B5 = B^5; +sbit B6 = B^6; +sbit B7 = B^7; + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IE2 = 0xAF; ETKSUI ET4 ET3 ES4 ES3 ET2 ESPI ES2 x000,0000B //Auxiliary Interrupt +#define SPI_INT_ENABLE() IE2 |= 2 /* SPIж */ +#define SPI_INT_DISABLE() IE2 &= ~2 /* SPIж */ +#define UART2_INT_ENABLE() IE2 |= 1 /* 2ж */ +#define UART2_INT_DISABLE() IE2 &= ~1 /* 2ж */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP2 = 0xB5; // PPWM2FD PI2C PCMP PX4 PPWM0FD PPWM0 PSPI PS2 0000,0000 +#define PUSB 0x80 +#define PPWM2FD 0x80 +#define PTKSU 0x80 +#define PI2C 0x40 +#define PCMP 0x20 +#define PX4 0x10 +#define PPWM0FD 0x08 +#define PPWM0 0x04 +#define PSPI 0x02 +#define PS2 0x01 +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP2H = 0xB6; // PPWM2FDH PI2CH PCMPH PX4H PPWM0FDH PPWM0H PSPIH PS2H 0000,0000 +#define PUSBH 0x80 +#define PPWM2FDH 0x80 +#define PTKSUH 0x80 +#define PI2CH 0x40 +#define PCMPH 0x20 +#define PX4H 0x10 +#define PPWM0FDH 0x08 +#define PPWM0H 0x04 +#define PSPIH 0x02 +#define PS2H 0x01 + +//2жȼ +#define UART2_Priority(n) do{if(n == 0) IP2H &= ~PS2H, IP2 &= ~PS2; \ + if(n == 1) IP2H &= ~PS2H, IP2 |= PS2; \ + if(n == 2) IP2H |= PS2H, IP2 &= ~PS2; \ + if(n == 3) IP2H |= PS2H, IP2 |= PS2; \ + }while(0) +//SPIжȼ +#define SPI_Priority(n) do{if(n == 0) IP2H &= ~PSPIH, IP2 &= ~PSPI; \ + if(n == 1) IP2H &= ~PSPIH, IP2 |= PSPI; \ + if(n == 2) IP2H |= PSPIH, IP2 &= ~PSPI; \ + if(n == 3) IP2H |= PSPIH, IP2 |= PSPI; \ + }while(0) +//ⲿж4жȼ +#define INT4_Priority(n) do{if(n == 0) IP2H &= ~PX4H, IP2 &= ~PX4; \ + if(n == 1) IP2H &= ~PX4H, IP2 |= PX4; \ + if(n == 2) IP2H |= PX4H, IP2 &= ~PX4; \ + if(n == 3) IP2H |= PX4H, IP2 |= PX4; \ + }while(0) +//Ƚжȼ +#define CMP_Priority(n) do{if(n == 0) IP2H &= ~PCMPH, IP2 &= ~PCMP; \ + if(n == 1) IP2H &= ~PCMPH, IP2 |= PCMP; \ + if(n == 2) IP2H |= PCMPH, IP2 &= ~PCMP; \ + if(n == 3) IP2H |= PCMPH, IP2 |= PCMP; \ + }while(0) +//I2Cжȼ +#define I2C_Priority(n) do{if(n == 0) IP2H &= ~PI2CH, IP2 &= ~PI2C; \ + if(n == 1) IP2H &= ~PI2CH, IP2 |= PI2C; \ + if(n == 2) IP2H |= PI2CH, IP2 &= ~PI2C; \ + if(n == 3) IP2H |= PI2CH, IP2 |= PI2C; \ + }while(0) +//ǿPWM0жȼ +#define PWM0_Priority(n) do{if(n == 0) IP2H &= ~PPWM0H, IP2 &= ~PPWM0; \ + if(n == 1) IP2H &= ~PPWM0H, IP2 |= PPWM0; \ + if(n == 2) IP2H |= PPWM0H, IP2 &= ~PPWM0; \ + if(n == 3) IP2H |= PPWM0H, IP2 |= PPWM0; \ + }while(0) +//ǿPWM0쳣жȼ +#define PWM0FD_Priority(n) do{if(n == 0) IP2H &= ~PPWM0FDH, IP2 &= ~PPWM0FD; \ + if(n == 1) IP2H &= ~PPWM0FDH, IP2 |= PPWM0FD; \ + if(n == 2) IP2H |= PPWM0FDH, IP2 &= ~PPWM0FD; \ + if(n == 3) IP2H |= PPWM0FDH, IP2 |= PPWM0FD; \ + }while(0) +//ǿPWM2쳣жȼ +#define PWM2FD_Priority(n) do{if(n == 0) IP2H &= ~PPWM2FDH, IP2 &= ~PPWM2FD; \ + if(n == 1) IP2H &= ~PPWM2FDH, IP2 |= PPWM2FD; \ + if(n == 2) IP2H |= PPWM2FDH, IP2 &= ~PPWM2FD; \ + if(n == 3) IP2H |= PPWM2FDH, IP2 |= PPWM2FD; \ + }while(0) +//жȼ +#define PTKSU_Priority(n) do{if(n == 0) IP2H &= ~PTKSUH, IP2 &= ~PTKSU; \ + if(n == 1) IP2H &= ~PTKSUH, IP2 |= PTKSU; \ + if(n == 2) IP2H |= PTKSUH, IP2 &= ~PTKSU; \ + if(n == 3) IP2H |= PTKSUH, IP2 |= PTKSU; \ + }while(0) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP3 = 0xDF; // PPWM4FD PPWM5 PPWM4 PPWM3 PPWM2 PPWM1 PS4 PS3 0000,0000 +#define PPWM4FD 0x80 +#define PPWM5 0x40 +#define PPWM4 0x20 +#define PPWM3 0x10 +#define PPWM2 0x08 +#define PPWM1 0x04 +#define PRTC 0x04 +#define PS4 0x02 +#define PS3 0x01 +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP3H = 0xEE; // PPWM4FDH PPWM5H PPWM4H PPWM3H PPWM2H PPWM1H PS4H PS3H 0000,0000 +#define PPWM4FDH 0x80 +#define PPWM5H 0x40 +#define PPWM4H 0x20 +#define PPWM3H 0x10 +#define PPWM2H 0x08 +#define PPWM1H 0x04 +#define PRTCH 0x04 +#define PS4H 0x02 +#define PS3H 0x01 + +#ifdef STC8Hxx + +//ǿPWM1жȼ +#define PWM1_Priority(n) do{if(n == 0) IP2H &= ~PPWM1H, IP2 &= ~PPWM1; \ + if(n == 1) IP2H &= ~PPWM1H, IP2 |= PPWM1; \ + if(n == 2) IP2H |= PPWM1H, IP2 &= ~PPWM1; \ + if(n == 3) IP2H |= PPWM1H, IP2 |= PPWM1; \ + }while(0) +//ǿPWM2жȼ +#define PWM2_Priority(n) do{if(n == 0) IP2H &= ~PPWM2H, IP2 &= ~PPWM2; \ + if(n == 1) IP2H &= ~PPWM2H, IP2 |= PPWM2; \ + if(n == 2) IP2H |= PPWM2H, IP2 &= ~PPWM2; \ + if(n == 3) IP2H |= PPWM2H, IP2 |= PPWM2; \ + }while(0) +//USBжȼ +#define USB_Priority(n) do{if(n == 0) IP2H &= ~PUSBH, IP2 &= ~PUSB; \ + if(n == 1) IP2H &= ~PUSBH, IP2 |= PUSB; \ + if(n == 2) IP2H |= PUSBH, IP2 &= ~PUSB; \ + if(n == 3) IP2H |= PUSBH, IP2 |= PUSB; \ + }while(0) +//RTCжȼ +#define RTC_Priority(n) do{if(n == 0) IP3H &= ~PRTCH, IP3 &= ~PRTC; \ + if(n == 1) IP3H &= ~PRTCH, IP3 |= PRTC; \ + if(n == 2) IP3H |= PRTCH, IP3 &= ~PRTC; \ + if(n == 3) IP3H |= PRTCH, IP3 |= PRTC; \ + }while(0) +#else + +//ǿPWM1жȼ +#define PWM1_Priority(n) do{if(n == 0) IP3H &= ~PPWM1H, IP3 &= ~PPWM1; \ + if(n == 1) IP3H &= ~PPWM1H, IP3 |= PPWM1; \ + if(n == 2) IP3H |= PPWM1H, IP3 &= ~PPWM1; \ + if(n == 3) IP3H |= PPWM1H, IP3 |= PPWM1; \ + }while(0) +//ǿPWM2жȼ +#define PWM2_Priority(n) do{if(n == 0) IP3H &= ~PPWM2H, IP3 &= ~PPWM2; \ + if(n == 1) IP3H &= ~PPWM2H, IP3 |= PPWM2; \ + if(n == 2) IP3H |= PPWM2H, IP3 &= ~PPWM2; \ + if(n == 3) IP3H |= PPWM2H, IP3 |= PPWM2; \ + }while(0) + +#endif + +//ǿPWM3жȼ +#define PWM3_Priority(n) do{if(n == 0) IP3H &= ~PPWM3H, IP3 &= ~PPWM3; \ + if(n == 1) IP3H &= ~PPWM3H, IP3 |= PPWM3; \ + if(n == 2) IP3H |= PPWM3H, IP3 &= ~PPWM3; \ + if(n == 3) IP3H |= PPWM3H, IP3 |= PPWM3; \ + }while(0) +//ǿPWM4жȼ +#define PWM4_Priority(n) do{if(n == 0) IP3H &= ~PPWM4H, IP3 &= ~PPWM4; \ + if(n == 1) IP3H &= ~PPWM4H, IP3 |= PPWM4; \ + if(n == 2) IP3H |= PPWM4H, IP3 &= ~PPWM4; \ + if(n == 3) IP3H |= PPWM4H, IP3 |= PPWM4; \ + }while(0) +//ǿPWM5жȼ +#define PWM5_Priority(n) do{if(n == 0) IP3H &= ~PPWM5H, IP3 &= ~PPWM5; \ + if(n == 1) IP3H &= ~PPWM5H, IP3 |= PPWM5; \ + if(n == 2) IP3H |= PPWM5H, IP3 &= ~PPWM5; \ + if(n == 3) IP3H |= PPWM5H, IP3 |= PPWM5; \ + }while(0) +//ǿPWM4쳣жȼ +#define PWM4FD_Priority(n) do{if(n == 0) IP3H &= ~PPWM4FDH, IP3 &= ~PPWM4FD; \ + if(n == 1) IP3H &= ~PPWM4FDH, IP3 |= PPWM4FD; \ + if(n == 2) IP3H |= PPWM4FDH, IP3 &= ~PPWM4FD; \ + if(n == 3) IP3H |= PPWM4FDH, IP3 |= PPWM4FD; \ + }while(0) +//3жȼ +#define UART3_Priority(n) do{if(n == 0) IP3H &= ~PS3H, IP3 &= ~PS3; \ + if(n == 1) IP3H &= ~PS3H, IP3 |= PS3; \ + if(n == 2) IP3H |= PS3H, IP3 &= ~PS3; \ + if(n == 3) IP3H |= PS3H, IP3 |= PS3; \ + }while(0) +//4жȼ +#define UART4_Priority(n) do{if(n == 0) IP3H &= ~PS4H, IP3 &= ~PS4; \ + if(n == 1) IP3H &= ~PS4H, IP3 |= PS4; \ + if(n == 2) IP3H |= PS4H, IP3 &= ~PS4; \ + if(n == 3) IP3H |= PS4H, IP3 |= PS4; \ + }while(0) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP = 0xB8; //жȼλ PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000,0000 +//-------- +sbit PPCA = IP^7; //PCA ģжȼ +sbit PLVD = IP^6; //ѹжȼ +sbit PADC = IP^5; //ADC жȼ +sbit PS = IP^4; //ж0ȼ趨λ +sbit PT1 = IP^3; //ʱж1ȼ趨λ +sbit PX1 = IP^2; //ⲿж1ȼ趨λ +sbit PT0 = IP^1; //ʱж0ȼ趨λ +sbit PX0 = IP^0; //ⲿж0ȼ趨λ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IPH = 0xB7; //жȼλ PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H 0000,0000 +#define PPCAH 0x80 +#define PLVDH 0x40 +#define PADCH 0x20 +#define PSH 0x10 +#define PT1H 0x08 +#define PX1H 0x04 +#define PT0H 0x02 +#define PX0H 0x01 + +//ⲿж0жȼ +#define INT0_Priority(n) do{if(n == 0) IPH &= ~PX0H, PX0 = 0; \ + if(n == 1) IPH &= ~PX0H, PX0 = 1; \ + if(n == 2) IPH |= PX0H, PX0 = 0; \ + if(n == 3) IPH |= PX0H, PX0 = 1; \ + }while(0) +//ⲿж1жȼ +#define INT1_Priority(n) do{if(n == 0) IPH &= ~PX1H, PX1 = 0; \ + if(n == 1) IPH &= ~PX1H, PX1 = 1; \ + if(n == 2) IPH |= PX1H, PX1 = 0; \ + if(n == 3) IPH |= PX1H, PX1 = 1; \ + }while(0) +//ʱ0жȼ +#define Timer0_Priority(n) do{if(n == 0) IPH &= ~PT0H, PT0 = 0; \ + if(n == 1) IPH &= ~PT0H, PT0 = 1; \ + if(n == 2) IPH |= PT0H, PT0 = 0; \ + if(n == 3) IPH |= PT0H, PT0 = 1; \ + }while(0) +//ʱ1жȼ +#define Timer1_Priority(n) do{if(n == 0) IPH &= ~PT1H, PT1 = 0; \ + if(n == 1) IPH &= ~PT1H, PT1 = 1; \ + if(n == 2) IPH |= PT1H, PT1 = 0; \ + if(n == 3) IPH |= PT1H, PT1 = 1; \ + }while(0) +//1жȼ +#define UART1_Priority(n) do{if(n == 0) IPH &= ~PSH, PS = 0; \ + if(n == 1) IPH &= ~PSH, PS = 1; \ + if(n == 2) IPH |= PSH, PS = 0; \ + if(n == 3) IPH |= PSH, PS = 1; \ + }while(0) +//ADCжȼ +#define ADC_Priority(n) do{if(n == 0) IPH &= ~PADCH, PADC = 0; \ + if(n == 1) IPH &= ~PADCH, PADC = 1; \ + if(n == 2) IPH |= PADCH, PADC = 0; \ + if(n == 3) IPH |= PADCH, PADC = 1; \ + }while(0) +//ѹжȼ +#define LVD_Priority(n) do{if(n == 0) IPH &= ~PLVDH, PADC = 0; \ + if(n == 1) IPH &= ~PLVDH, PADC = 1; \ + if(n == 2) IPH |= PLVDH, PADC = 0; \ + if(n == 3) IPH |= PLVDH, PADC = 1; \ + }while(0) +//CCP/PCA/PWMжȼ +#define PCA_Priority(n) do{if(n == 0) IPH &= ~PPCAH, PPCA = 0; \ + if(n == 1) IPH &= ~PPCAH, PPCA = 1; \ + if(n == 2) IPH |= PPCAH, PPCA = 0; \ + if(n == 3) IPH |= PPCAH, PPCA = 1; \ + }while(0) + +//#define PCA_InterruptFirst() PPCA = 1 +//#define LVD_InterruptFirst() PLVD = 1 +//#define ADC_InterruptFirst() PADC = 1 +//#define UART1_InterruptFirst() PS = 1 +//#define Timer1_InterruptFirst() PT1 = 1 +//#define INT1_InterruptFirst() PX1 = 1 +//#define Timer0_InterruptFirst() PT0 = 1 +//#define INT0_InterruptFirst() PX0 = 1 + + +/*************************************************************************************************/ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMPCR1 = 0xE6; CMPEN CMPIF PIE NIE PIS NIS CMPOE CMPRES 00000000B +#define CMPEN 0x80 //1: Ƚ, 0: ֹ,رձȽԴ +#define CMPIF 0x40 //Ƚжϱ־, ػ½ж, 0 +#define PIE 0x20 //1: ȽϽ01, ж +#define NIE 0x10 //1: ȽϽ10, ½ж +#define PIS 0x08 //ѡ, 0: ѡڲP3.7, 1: ADC_CHS[3:0]ѡADC. +#define NIS 0x04 //븺ѡ, 0: ѡڲBandGapѹBGv, 1: ѡⲿP3.6. +#define CMPOE 0x02 //1: ȽϽ, 0: ֹ. +#define CMPRES 0x01 //ȽϽ, 1: CMP+ƽCMP-, 0: CMP+ƽCMP-, ֻ + +#define CMP_P_P37 0x00 //ѡ, 0: ѡڲP3.7 +#define CMP_P_ADC 0x08 //ѡ, 1: ADC_CHS[3:0]ѡADC. +#define CMP_N_GAP 0x00 //븺ѡ, 0: ѡڲBandGapѹBGv. +#define CMP_N_P36 0x04 //븺ѡ, 1: ѡⲿP3.6. + +#define CMPO_P34() P_SW2 &= ~0x08 //P3.4. +#define CMPO_P41() P_SW2 |= 0x08 //P4.1. + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMPCR2 = 0xE7; INVCMPO DISFLT LCDTY[5:0] 00001001B +#define INVCMPO 0x80 //1: ȽIOȡ, 0: ȡ +#define DISFLT 0x40 //1: ر0.1uF˲, 0: +#define LCDTY 0x00 //0~63, ȽϽ仯ʱ + + + +/*************************************************************************************************/ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr SCON = 0x98; SM0 SM1 SM2 REN TB8 RB8 TI RI 00000000B //S1 Control + +#define S1_DoubleRate() PCON |= 0x80 +#define S1_SHIFT() SCON &= 0x3f + +#define S1_8bit() SCON = (SCON & 0x3f) | 0x40 +#define S1_9bit() SCON = (SCON & 0x3f) | 0xc0 +#define S1_RX_Enable() SCON |= 0x10 +#define S1_RX_Disable() SCON &= ~0x10 +#define TI1 TI /* жTI1Ƿ */ +#define RI1 RI /* жRI1Ƿ */ +#define SET_TI1() TI = 1 /* TI1(ж) */ +#define CLR_TI1() TI = 0 /* TI1 */ +#define CLR_RI1() RI = 0 /* RI1 */ +#define S1TB8_SET() TB8 = 1 /* TB8 */ +#define S1TB8_CLR() TB8 = 0 /* TB8 */ +#define S1_Int_Enable() ES = 1 /* 1ж */ +#define S1_Int_Disable() ES = 0 /* 1ֹж */ +#define S1_BRT_UseTimer1() AUXR &= ~1 +#define S1_BRT_UseTimer2() AUXR |= 1 +#define S1_USE_P30P31() P_SW1 &= ~0xc0 //UART1 ʹP30 P31 Ĭ +#define S1_USE_P36P37() P_SW1 = (P_SW1 & ~0xc0) | 0x40 //UART1 ʹP36 P37 +#define S1_USE_P16P17() P_SW1 = (P_SW1 & ~0xc0) | 0x80 //UART1 ʹP16 P17 +#define S1_USE_P43P44() P_SW1 |= 0xc0 //UART1 ʹP43 P44 +//#define S1_TXD_RXD_SHORT() PCON2 |= (1<<4) //TXDRXDм +//#define S1_TXD_RXD_OPEN() PCON2 &= ~(1<<4) //TXDRXDм̶Ͽ Ĭ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S2CON = 0x9A; S2SM0 - S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B //S2 Control + +#define S2_MODE0() S2CON &= ~(1<<7) /* 2ģʽ08λUART = ʱ2 / 4 */ +#define S2_MODE1() S2CON |= (1<<7) /* 2ģʽ19λUART = ʱ2 / 4 */ +#define S2_8bit() S2CON &= ~(1<<7) /* 2ģʽ08λUART = ʱ2 / 4 */ +#define S2_9bit() S2CON |= (1<<7) /* 2ģʽ19λUART = ʱ2 / 4 */ +#define S2_RX_Enable() S2CON |= (1<<4) /* 2 */ +#define S2_RX_Disable() S2CON &= ~(1<<4) /* ֹ2 */ +#define TI2 (S2CON & 2) /* жTI2Ƿ */ +#define RI2 (S2CON & 1) /* жRI2Ƿ */ +#define SET_TI2() S2CON |= (1<<1) /* TI2(ж) */ +#define CLR_TI2() S2CON &= ~(1<<1) /* TI2 */ +#define CLR_RI2() S2CON &= ~1 /* RI2 */ +#define S2TB8_SET() S2CON |= (1<<3) /* TB8 */ +#define S2TB8_CLR() S2CON &= ~(1<<3) /* TB8 */ +#define S2_Int_Enable() IE2 |= 1 /* 2ж */ +#define S2_Int_Disable() IE2 &= ~1 /* 2ֹж */ +#define S2_USE_P10P11() P_SW2 &= ~1 /* UART2 ʹP1 Ĭ */ +#define S2_USE_P46P47() P_SW2 |= 1 /* UART2 ʹP4 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S3CON = 0xAC; S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI 00000000B //S3 Control + +#define S3_MODE0() S3CON &= ~(1<<7) /* 3ģʽ08λUART = ʱ / 4 */ +#define S3_MODE1() S3CON |= (1<<7) /* 3ģʽ19λUART = ʱ / 4 */ +#define S3_8bit() S3CON &= ~(1<<7) /* 3ģʽ08λUART = ʱ / 4 */ +#define S3_9bit() S3CON |= (1<<7) /* 3ģʽ19λUART = ʱ / 4 */ +#define S3_RX_Enable() S3CON |= (1<<4) /* 3 */ +#define S3_RX_Disable() S3CON &= ~(1<<4) /* ֹ3 */ +#define TI3 (S3CON & 2) != 0 /* жTI3Ƿ */ +#define RI3 (S3CON & 1) != 0 /* жRI3Ƿ */ +#define SET_TI3() S3CON |= (1<<1) /* TI3(ж) */ +#define CLR_TI3() S3CON &= ~(1<<1) /* TI3 */ +#define CLR_RI3() S3CON &= ~1 /* RI3 */ +#define S3TB8_SET() S3CON |= (1<<3) /* TB8 */ +#define S3TB8_CLR() S3CON &= ~(1<<3) /* TB8 */ +#define S3_Int_Enable() IE2 |= (1<<3) /* 3ж */ +#define S3_Int_Disable() IE2 &= ~(1<<3) /* 3ֹж */ +#define S3_BRT_UseTimer3() S3CON |= (1<<6) /* BRT select Timer3 */ +#define S3_BRT_UseTimer2() S3CON &= ~(1<<6) /* BRT select Timer2 */ +#define S3_USE_P00P01() P_SW2 &= ~2 /* UART3 ʹP0 Ĭ */ +#define S3_USE_P50P51() P_SW2 |= 2 /* UART3 ʹP5 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S4CON = 0x84; S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI 00000000B //S4 Control + +#define S4_MODE0() S4CON &= ~(1<<7) /* 4ģʽ08λUART = ʱ / 4 */ +#define S4_MODE1() S4CON |= (1<<7) /* 4ģʽ19λUART = ʱ / 4 */ +#define S4_8bit() S4CON &= ~(1<<7) /* 4ģʽ08λUART = ʱ / 4 */ +#define S4_9bit() S4CON |= (1<<7) /* 4ģʽ19λUART = ʱ / 4 */ +#define S4_RX_Enable() S4CON |= (1<<4) /* 4 */ +#define S4_RX_Disable() S4CON &= ~(1<<4) /* ֹ4 */ +#define TI4 (S4CON & 2) != 0 /* жTI3Ƿ */ +#define RI4 (S4CON & 1) != 0 /* жRI3Ƿ */ +#define SET_TI4() S4CON |= 2 /* TI3(ж) */ +#define CLR_TI4() S4CON &= ~2 /* TI3 */ +#define CLR_RI4() S4CON &= ~1 /* RI3 */ +#define S4TB8_SET() S4CON |= 8 /* TB8 */ +#define S4TB8_CLR() S4CON &= ~8 /* TB8 */ +#define S4_Int_Enable() IE2 |= (1<<4) /* 4ж */ +#define S4_Int_Disable() IE2 &= ~(1<<4) /* 4ֹж */ +#define S4_BRT_UseTimer4() S4CON |= (1<<6) /* BRT select Timer4 */ +#define S4_BRT_UseTimer2() S4CON &= ~(1<<6) /* BRT select Timer2 */ +#define S4_USE_P02P03() P_SW2 &= ~4 /* UART4 ʹP0 Ĭ */ +#define S4_USE_P52P53() P_SW2 |= 4 /* UART4 ʹP5 */ + + + +/**********************************************************/ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr AUXR = 0x8E; T0x12 T1x12 UART_M0x6 T2R T2_C/T T2x12 EXTRAM S1ST2 0000,0000 //Auxiliary Register + +#define InternalXdata_Disable() AUXR |= 2 /* ֹʹڲxdata, зxdataǷⲿxdata */ +#define InternalXdata_Enable() AUXR &= ~2 /* ʹڲxdata, ʵĵַڲxdataΧʱ, ڲxadta, ַڲxdataʱ, ⲿxdata */ +#define S1_M0x6() AUXR |= (1<<5) /* UART Mode0 Speed is 6x Standard */ +#define S1_M0x1() AUXR &= ~(1<<5) /* default, UART Mode0 Speed is Standard */ + +//==================================== +#define Timer0_16bitAutoReload() TMOD &= ~0x03 /* 16λԶװ */ +#define Timer0_16bit() TMOD = (TMOD & ~0x03) | 0x01 /* 16λ */ +#define Timer0_8bitAutoReload() TMOD = (TMOD & ~0x03) | 0x02 /* 8λԶװ */ +#define Timer0_16bitAutoRL_NoMask() TMOD |= 0x03 /* 16λԶװж */ +#define Timer0_Run() TR0 = 1 /* ʱ0 */ +#define Timer0_Stop() TR0 = 0 /* ֹʱ0 */ +#define Timer0_Gate_INT0_P32() TMOD |= (1<<3) /* ʱ0ⲿINT0ߵƽʱ */ +#define Timer0_AsTimer() TMOD &= ~(1<<2) /* ʱ0ʱ */ +#define Timer0_AsCounter() TMOD |= (1<<2) /* ʱ0 */ +#define Timer0_AsCounterP34() TMOD |= (1<<2) /* ʱ0 */ +#define Timer0_1T() AUXR |= (1<<7) /* Timer0 clodk = fo */ +#define Timer0_12T() AUXR &= ~(1<<7) /* Timer0 clodk = fo/12 12Ƶ, default */ +#define Timer0_CLKO_Enable() INT_CLKO |= 1 /* T0 T0(P3.5)Fck0 = 1/2 T0 ʣT01T12T */ +#define Timer0_CLKO_Disable() INT_CLKO &= ~1 +#define Timer0_CLKO_Enable_P34() INT_CLKO |= 1 /* T0 T0(P3.5)Fck0 = 1/2 T0 ʣT01T12T */ +#define Timer0_CLKO_Disable_P34() INT_CLKO &= ~1 +#define Timer0_InterruptEnable() ET0 = 1 /* Timer1ж.*/ +#define Timer0_InterruptDisable() ET0 = 0 /* ֹTimer1ж.*/ + +#define T0_Load(n) TH0 = (n) / 256, TL0 = (n) % 256 +#define T0_Load_us_1T(n) Timer0_AsTimer(),Timer0_1T(), Timer0_16bitAutoReload(),TH0=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL0=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T0_Load_us_12T(n) Timer0_AsTimer(),Timer0_12T(),Timer0_16bitAutoReload(),TH0=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL0=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T0_Frequency_1T_P35(n) ET0=0,Timer0_AsTimer(),Timer0_1T(),Timer0_16bitAutoReload(),TH0=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL0=(65536-(n/2+MAIN_Fosc/2)/(n))%256,INT_CLKO |= bit0,TR0=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T0_Frequency_12T_P35(n) ET0=0,Timer0_AsTimer(),Timer0_12T(),Timer0_16bitAutoReload(),TH0=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL0=(65536-(n/2+MAIN_Fosc/24)/(n))%256,INT_CLKO |= bit0,TR0=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer1_16bitAutoReload() TMOD &= ~0x30 /* 16λԶװ */ +#define Timer1_16bit() TMOD = (TMOD & ~0x30) | 0x10 /* 16λ */ +#define Timer1_8bitAutoReload() TMOD = (TMOD & ~0x30) | 0x20 /* 8λԶװ */ +#define Timer1_Run() TR1 = 1 /* ʱ1 */ +#define Timer1_Stop() TR1 = 0 /* ֹʱ1 */ +#define Timer1_Gate_INT1_P33() TMOD |= (1<<7) /* ʱ1ⲿINT1ߵƽʱ */ +#define Timer1_AsTimer() TMOD &= ~(1<<6) /* ʱ1ʱ */ +#define Timer1_AsCounter() TMOD |= (1<<6) /* ʱ1 */ +#define Timer1_AsCounterP35() TMOD |= (1<<6) /* ʱ1 */ +#define Timer1_1T() AUXR |= (1<<6) /* Timer1 clodk = fo */ +#define Timer1_12T() AUXR &= ~(1<<6) /* Timer1 clodk = fo/12 12Ƶ, default */ +#define Timer1_CLKO_Enable() INT_CLKO |= 2 /* T1 T1(P3.4)Fck1 = 1/2 T1 ʣT11T12T */ +#define Timer1_CLKO_Disable() INT_CLKO &= ~2 +#define Timer1_CLKO_Enable_P35() INT_CLKO |= 2 /* T1 T1(P3.4)Fck1 = 1/2 T1 ʣT11T12T */ +#define Timer1_CLKO_Disable_P35() INT_CLKO &= ~2 +#define Timer1_InterruptEnable() ET1 = 1 /* Timer1ж. */ +#define Timer1_InterruptDisable() ET1 = 0 /* ֹTimer1ж. */ + +#define T1_Load(n) TH1 = (n) / 256, TL1 = (n) % 256 +#define T1_Load_us_1T(n) Timer1_AsTimer(),Timer1_1T(), Timer1_16bitAutoReload(),TH1=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL1=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T1_Load_us_12T(n) Timer1_AsTimer(),Timer1_12T(),Timer1_16bitAutoReload(),TH1=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL1=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T1_Frequency_1T_P34(n) ET1=0,Timer1_AsTimer(),Timer1_1T(),Timer1_16bitAutoReload(),TH1=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL1=(65536-(n/2+MAIN_Fosc/2)/(n))%256,INT_CLKO |= bit1,TR1=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T1_Frequency_12T_P34(n) ET1=0,Timer1_AsTimer(),Timer1_12T(),Timer1_16bitAutoReload(),TH1=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL1=(65536-(n/2+MAIN_Fosc/24)/(n))%256,INT_CLKO |= bit1,TR1=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer2_Run() AUXR |= (1<<4) /* ʱ2 */ +#define Timer2_Stop() AUXR &= ~(1<<4) /* ֹʱ2 */ +#define Timer2_AsTimer() AUXR &= ~(1<<3) /* ʱ2ʱ */ +#define Timer2_AsCounter() AUXR |= (1<<3) /* ʱ2 */ +#define Timer2_AsCounterP31() AUXR |= (1<<3) /* ʱ2 */ +#define Timer2_1T() AUXR |= (1<<2) /* Timer0 clock = fo */ +#define Timer2_12T() AUXR &= ~(1<<2) /* Timer0 clock = fo/12 12Ƶ, default */ +#define Timer2_CLKO_Enable() INT_CLKO |= 4 /* T2 P1.3Fck2 = 1/2 T2 ʣT21T12T */ +#define Timer2_CLKO_Disable() INT_CLKO &= ~4 +#define Timer2_CLKO_Enable_P13() INT_CLKO |= 4 /* T2 P1.3Fck2 = 1/2 T2 ʣT21T12T */ +#define Timer2_CLKO_Disable_P13() INT_CLKO &= ~4 +#define Timer2_InterruptEnable() IE2 |= (1<<2) /* Timer2ж. */ +#define Timer2_InterruptDisable() IE2 &= ~(1<<2) /* ֹTimer2ж. */ + +#define T2_Load(n) TH2 = (n) / 256, TL2 = (n) % 256 +#define T2_Load_us_1T(n) Timer2_AsTimer(),Timer2_1T(), TH2=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL2=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T2_Load_us_12T(n) Timer2_AsTimer(),Timer2_12T(),TH2=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL2=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T2_Frequency_1T_P30(n) Timer2_InterruptDisable(),Timer2_AsTimer(),Timer2_1T(), TH2=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL2=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer2_CLKO_Enable_P30(),Timer2_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T2_Frequency_12T_P30(n) Timer2_InterruptDisable(),Timer2_AsTimer(),Timer2_12T(),TH2=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL2=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer2_CLKO_Enable_P30(),Timer2_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer3_Run() T4T3M |= (1<<3) /* ʱ3 */ +#define Timer3_Stop() T4T3M &= ~(1<<3) /* ֹʱ3 */ +#define Timer3_AsTimer() T4T3M &= ~(1<<2) /* ʱ3ʱ */ +#define Timer3_AsCounter() T4T3M |= (1<<2) /* ʱ3, P0.5Ϊⲿ */ +#define Timer3_AsCounterP05() T4T3M |= (1<<2) /* ʱ3, P0.5Ϊⲿ */ +#define Timer3_1T() T4T3M |= (1<<1) /* 1Tģʽ */ +#define Timer3_12T() T4T3M &= ~(1<<1) /* 12Tģʽ, default */ +#define Timer3_CLKO_Enable() T4T3M |= 1 /* T3T3(P0.4)Fck = 1/2 T2 ʣT21T12T */ +#define Timer3_CLKO_Disable() T4T3M &= ~1 /* ֹT3T3(P0.4) */ +#define Timer3_CLKO_Enable_P04() T4T3M |= 1 /* T3T3(P0.4)Fck = 1/2 T2 ʣT21T12T */ +#define Timer3_CLKO_Disable_P04() T4T3M &= ~1 /* ֹT3T3(P0.4) */ +#define Timer3_InterruptEnable() IE2 |= (1<<5) /* Timer3ж. */ +#define Timer3_InterruptDisable() IE2 &= ~(1<<5) /* ֹTimer3ж. */ + +#define T3_Load(n) TH3 = (n) / 256, TL3 = (n) % 256 +#define T3_Load_us_1T(n) Timer3_AsTimer(),Timer3_1T(), TH3=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL3=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T3_Load_us_12T(n) Timer3_AsTimer(),Timer3_12T(),TH3=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL3=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T3_Frequency_1T_P04(n) Timer3_InterruptDisable(),Timer3_AsTimer(),Timer3_1T(), TH3=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL3=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer3_CLKO_P04_Enable,Timer3_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T3_Frequency_12T_P04(n) Timer3_InterruptDisable(),Timer3_AsTimer(),Timer3_12T(),TH3=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL3=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer3_CLKO_P04_Enable,Timer3_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer4_Run() T4T3M |= (1<<7) /* ʱ4 */ +#define Timer4_Stop() T4T3M &= ~(1<<7) /* ֹʱ4 */ +#define Timer4_AsTimer() T4T3M &= ~(1<<6) /* ʱ4ʱ */ +#define Timer4_AsCounter() T4T3M |= (1<<6) /* ʱ4, P0.7Ϊⲿ */ +#define Timer4_AsCounterP07() T4T3M |= (1<<6) /* ʱ4, P0.7Ϊⲿ */ +#define Timer4_1T() T4T3M |= (1<<5) /* 1Tģʽ */ +#define Timer4_12T() T4T3M &= ~(1<<5) /* 12Tģʽ, default */ +#define Timer4_CLKO_Enable() T4T3M |= (1<<4) /* T4T4(P0.6)Fck = 1/2 T2 ʣT21T12T */ +#define Timer4_CLKO_Disable() T4T3M &= ~(1<<4) /* ֹT4T4(P0.6) */ +#define Timer4_CLKO_Enable_P06() T4T3M |= (1<<4) /* T4T4(P0.6)Fck = 1/2 T2 ʣT21T12T */ +#define Timer4_CLKO_Disable_P06() T4T3M &= ~(1<<4) /* ֹT4T4(P0.6) */ +#define Timer4_InterruptEnable() IE2 |= (1<<6) /* Timer4ж. */ +#define Timer4_InterruptDisable() IE2 &= ~(1<<6) /* ֹTimer4ж. */ + +#define T4_Load(n) TH4 = (n) / 256, TL4 = (n) % 256 +#define T4_Load_us_1T(n) Timer4_AsTimer(),Timer4_1T(), TH4=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL4=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T4_Load_us_12T(n) Timer4_AsTimer(),Timer4_12T(),TH4=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL4=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T4_Frequency_1T_P06(n) Timer4_InterruptDisable(),Timer4_AsTimer(),Timer4_1T(), TH4=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL4=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer4_CLKO_P06_Enable(),Timer4_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T4_Frequency_12T_P06(n) Timer4_InterruptDisable(),Timer4_AsTimer(),Timer4_12T(),TH4=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL4=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer4_CLKO_P06_Enable(),Timer4_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +//==================================================================================================================== + +//sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register +// 7 6 5 4 3 2 1 0 Reset Value +// WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0 xx00,0000 +#define D_WDT_FLAG (1<<7) +#define D_EN_WDT (1<<5) +#define D_CLR_WDT (1<<4) /* auto clear */ +#define D_IDLE_WDT (1<<3) /* WDT counter when Idle */ +#define D_WDT_SCALE_2 0 +#define D_WDT_SCALE_4 1 +#define D_WDT_SCALE_8 2 /* T=393216*N/fo */ +#define D_WDT_SCALE_16 3 +#define D_WDT_SCALE_32 4 +#define D_WDT_SCALE_64 5 +#define D_WDT_SCALE_128 6 +#define D_WDT_SCALE_256 7 + +#define WDT_PS_Set(n) WDT_CONTR = (WDT_CONTR & ~0x07) | (n & 0x07) /* ŹʱʱӷƵϵ */ +#define WDT_reset(n) WDT_CONTR = D_EN_WDT + D_CLR_WDT + D_IDLE_WDT + (n) /* ʼWDTι */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PCON = 0x87; SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000 //Power Control +//SMOD //˫ +//SMOD0 +#define LVDF (1<<5) /* P4.6ѹ־ */ +#define POF (1<<4) /* ѹ־λ */ +//POF +//GF1 +//GF0 +//#define D_PD 2 /* set 1, power down mode */ +//#define D_IDLE 1 /* set 1, idle mode */ +#define MCU_IDLE() PCON |= 1 /* MCU IDLE ģʽ */ +#define MCU_POWER_DOWN() PCON |= 2 /* MCU ˯ ģʽ */ + + +//sfr IAP_CMD = 0xC5; +#define IAP_STANDBY() IAP_CMD = 0 //IAPֹ +#define IAP_READ() IAP_CMD = 1 //IAP +#define IAP_WRITE() IAP_CMD = 2 //IAPд +#define IAP_ERASE() IAP_CMD = 3 //IAP + +//sfr IAP_TRIG = 0xC6; +#define IAP_TRIG() IAP_TRIG = 0x5A, IAP_TRIG = 0xA5 /* IAP */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IAP_CONTR = 0xC7; IAPEN SWBS SWRST CFAIL - - - - 0000,x000 //IAP Control Register + +#define IAP_EN (1<<7) +#define IAP_SWBS (1<<6) +#define IAP_SWRST (1<<5) +#define IAP_CMD_FAIL (1<<4) + +#define IAP_ENABLE() IAP_CONTR = IAP_EN; IAP_TPS = MAIN_Fosc / 1000000 +#define IAP_DISABLE() IAP_CONTR = 0; IAP_CMD = 0; IAP_TRIG = 0; IAP_ADDRH = 0xff; IAP_ADDRL = 0xff + + +/* ADC Register */ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr ADC_CONTR = 0xBC; ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000 /* AD תƼĴ */ +//sfr ADC_RES = 0xBD; ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000 /* A/D ת8λ */ +//sfr ADC_RESL = 0xBE; ADCV.1 ADCV.0 0000,0000 /* A/D ת2λ */ +//sfr ADC_CONTR = 0xBC; //ֱMOVҪ + + +//sfr SPCTL = 0xCE; SPIƼĴ +// 7 6 5 4 3 2 1 0 Reset Value +// SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 0x00 + +#define SPI_SSIG_None() SPCTL |= (1<<7) /* 1: SS */ +#define SPI_SSIG_Enable() SPCTL &= ~(1<<7) /* 0: SSھӻ */ +#define SPI_Enable() SPCTL |= (1<<6) /* 1: SPI */ +#define SPI_Disable() SPCTL &= ~(1<<6) /* 0: ֹSPI */ +#define SPI_LSB_First() SPCTL |= (1<<5) /* 1: LSBȷ */ +#define SPI_MSB_First() SPCTL &= ~(1<<5) /* 0: MSBȷ */ +#define SPI_Master() SPCTL |= (1<<4) /* 1: Ϊ */ +#define SPI_Slave() SPCTL &= ~(1<<4) /* 0: Ϊӻ */ +#define SPI_SCLK_NormalH() SPCTL |= (1<<3) /* 1: ʱSCLKΪߵƽ */ +#define SPI_SCLK_NormalL() SPCTL &= ~(1<<3) /* 0: ʱSCLKΪ͵ƽ */ +#define SPI_PhaseH() SPCTL |= (1<<2) /* 1: */ +#define SPI_PhaseL() SPCTL &= ~(1<<2) /* 0: */ +#define SPI_Speed(n) SPCTL = (SPCTL & ~3) | (n) /*ٶ, 0 -- fosc/4, 1 -- fosc/8, 2 -- fosc/16, 3 -- fosc/32 */ + +//sfr SPDAT = 0xCF; //SPI Data Register 0000,0000 +//sfr SPSTAT = 0xCD; //SPI״̬Ĵ +// 7 6 5 4 3 2 1 0 Reset Value +// SPIF WCOL - - - - - - +#define SPIF 0x80 /* SPIɱ־д10*/ +#define WCOL 0x40 /* SPIдͻ־д10 */ + +#define SPI_USE_P12P13P14P15() P_SW1 &= ~0x0c /* SPIлP12(SS) P13(MOSI) P14(MISO) P15(SCLK)(ϵĬ)*/ +#define SPI_USE_P22P23P24P25() P_SW1 = (P_SW1 & ~0x0c) | 0x04 /* SPIлP22(SS) P23(MOSI) P24(MISO) P25(SCLK)*/ +#define SPI_USE_P74P75P76P77() P_SW1 = (P_SW1 & ~0x0c) | 0x08 /* SPIлP74(SS) P75(MOSI) P76(MISO) P77(SCLK)*/ +#define SPI_USE_P35P34P33P32() P_SW1 = P_SW1 | 0x0C /* SPIлP35(SS) P34(MOSI) P33(MISO) P32(SCLK)*/ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CCFG = 0xFE80H; ENI2C MSSL MSSPEED[5:0] 0000,0000 /* I2CüĴ */ +#define I2C_Function(n) (n==0?(I2CCFG &= ~0x80):(I2CCFG |= 0x80)) //0ֹ I2C ܣ1ʹ I2C +#define I2C_ENABLE() I2CCFG |= 0x80 /* ʹ I2C */ +#define I2C_DISABLE() I2CCFG &= ~0x80 /* ֹ I2C */ +#define I2C_Master() I2CCFG |= 0x40 /* 1: Ϊ */ +#define I2C_Slave() I2CCFG &= ~0x40 /* 0: Ϊӻ */ +#define I2C_SetSpeed(n) I2CCFG = (I2CCFG & ~0x3f) | (n & 0x3f) /* ٶ=Fosc/2/(Speed*2+4) */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSCR = 0xFE81H; EMSI - - - MSCMD[3:0] 0000,0000 /* I2CüĴ */ +#define I2C_Master_Inturrupt(n) (n==0?(I2CMSCR &= ~0x80):(I2CMSCR |= 0x80)) //0ֹ I2C ܣ1ʹ I2C + +#define I2C_CMD_None 0 +#define I2C_CMD_Start 1 +#define I2C_CMD_Send 2 +#define I2C_CMD_RACK 3 +#define I2C_CMD_Read 4 +#define I2C_CMD_SACK 5 +#define I2C_CMD_Stop 6 +#define I2C_CMD_RFU1 7 +#define I2C_CMD_RFU2 8 +#define I2C_CMD_Start_Send_RACK 9 +#define I2C_CMD_Send_RACK 10 +#define I2C_CMD_Read_SACK 11 +#define I2C_CMD_Read_SNAK 12 + +#define I2C_Command(n) I2CMSCR = (I2CMSCR & ~0x0f) | (n & 0x0f) /* */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSST = 0xFE82H; MSBUSY MSIF - - - - MSACKI MSACKO 0000,0000 /* I2C״̬Ĵ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSAUX = 0xFE88H; - - - - - - - WDTA 0000,0000 /* I2CƼĴ */ +#define I2C_WDTA_EN() I2CMSAUX |= 0x01 /* ʹԶ */ +#define I2C_WDTA_DIS() I2CMSAUX &= ~0x01 /* ֹԶ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLCR = 0xFE83H; - ESTAI ERXI ETXI ESTOI - - SLRET 0000,0000 /* I2CӻƼĴ */ +#define I2C_ESTAI_EN() I2CSLCR |= 0x40 /* ʹܴӻSTARTźж */ +#define I2C_ESTAI_DIS() I2CSLCR &= ~0x40 /* ֹӻSTARTźж */ +#define I2C_ERXI_EN() I2CSLCR |= 0x20 /* ʹܴӻ1ֽж */ +#define I2C_ERXI_DIS() I2CSLCR &= ~0x20 /* ֹӻ1ֽж */ +#define I2C_ETXI_EN() I2CSLCR |= 0x10 /* ʹܴӻ1ֽж */ +#define I2C_ETXI_DIS() I2CSLCR &= ~0x10 /* ֹӻ1ֽж */ +#define I2C_ESTOI_EN() I2CSLCR |= 0x08 /* ʹܴӻSTOPźж */ +#define I2C_ESTOI_DIS() I2CSLCR &= ~0x08 /* ֹӻSTOPźж */ +#define I2C_SLRET() I2CSLCR |= 0x01 /* λӻģʽ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLST = 0xFE84H; SLBUSY STAIF RXIF TXIF STOIF - SLACKI SLACKO 0000,0000 /* I2Cӻ״̬Ĵ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLADR = 0xFE85H; I2CSLADR[7:1] MA 0000,0000 /* I2CӻַĴ */ +#define I2C_Address(n) I2CSLADR = (I2CSLADR & 0x01) | (n << 1) /* ӻַ */ +#define I2C_MATCH_EN() I2CSLADR &= ~0x01 /* ʹܴӻַȽϹܣֻƥַ */ +#define I2C_MATCH_DIS() I2CSLADR |= 0x01 /* ֹӻַȽϹܣ豸ַ */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ENO = 0xFEB1H; ENO4N ENO4P ENO3N ENO3P ENO2N ENO2P ENO1N ENO1P 0000,0000 /* ʹܼĴ */ +//sfr PWMB_ENO = 0xFEB5H; - ENO8P - ENO7P - ENO6P - ENO5P 0000,0000 /* ʹܼĴ */ +#define PWM1P_OUT_EN() PWMA_ENO |= 0x01 /* ʹ PWM1P */ +#define PWM1P_OUT_DIS() PWMA_ENO &= ~0x01 /* ֹ PWM1P */ +#define PWM1N_OUT_EN() PWMA_ENO |= 0x02 /* ʹ PWM1N */ +#define PWM1N_OUT_DIS() PWMA_ENO &= ~0x02 /* ֹ PWM1N */ +#define PWM2P_OUT_EN() PWMA_ENO |= 0x04 /* ʹ PWM2P */ +#define PWM2P_OUT_DIS() PWMA_ENO &= ~0x04 /* ֹ PWM2P */ +#define PWM2N_OUT_EN() PWMA_ENO |= 0x08 /* ʹ PWM2N */ +#define PWM2N_OUT_DIS() PWMA_ENO &= ~0x08 /* ֹ PWM2N */ +#define PWM3P_OUT_EN() PWMA_ENO |= 0x10 /* ʹ PWM3P */ +#define PWM3P_OUT_DIS() PWMA_ENO &= ~0x10 /* ֹ PWM3P */ +#define PWM3N_OUT_EN() PWMA_ENO |= 0x20 /* ʹ PWM3N */ +#define PWM3N_OUT_DIS() PWMA_ENO &= ~0x20 /* ֹ PWM3N */ +#define PWM4P_OUT_EN() PWMA_ENO |= 0x40 /* ʹ PWM3P */ +#define PWM4P_OUT_DIS() PWMA_ENO &= ~0x40 /* ֹ PWM3P */ +#define PWM4N_OUT_EN() PWMA_ENO |= 0x80 /* ʹ PWM3N */ +#define PWM4N_OUT_DIS() PWMA_ENO &= ~0x80 /* ֹ PWM3N */ + +#define PWM5P_OUT_EN() PWMB_ENO |= 0x01 /* ʹ PWM5P */ +#define PWM5P_OUT_DIS() PWMB_ENO &= ~0x01 /* ֹ PWM5P */ +#define PWM6P_OUT_EN() PWMB_ENO |= 0x04 /* ʹ PWM6P */ +#define PWM6P_OUT_DIS() PWMB_ENO &= ~0x04 /* ֹ PWM6P */ +#define PWM7P_OUT_EN() PWMB_ENO |= 0x10 /* ʹ PWM7P */ +#define PWM7P_OUT_DIS() PWMB_ENO &= ~0x10 /* ֹ PWM7P */ +#define PWM8P_OUT_EN() PWMB_ENO |= 0x40 /* ʹ PWM8P */ +#define PWM8P_OUT_DIS() PWMB_ENO &= ~0x40 /* ֹ PWM8P */ + +#define PWMA_OutChannelSel(n) PWMA_ENO = n //ѡͨ +#define PWMB_OutChannelSel(n) PWMB_ENO = n //ѡͨ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_PS = 0xFEB2H; C4PS1 C4PS0 C3PS1 C3PS0 C2PS1 C2PS0 C1PS1 C1PS0 0000,0000 /* ʹܼĴ */ +//sfr PWMB_PS = 0xFEB6H; C8PS1 C8PS0 C7PS1 C7PS0 C6PS1 C6PS0 C5PS1 C5PS0 0000,0000 /* ʹܼĴ */ + +#define PWM1_USE_P10P11() PWMA_PS = (PWMA_PS & ~0x03) /* PWM ͨ 1 лP10(PWM1P) P11(PWM1N) */ +#define PWM1_USE_P20P21() PWMA_PS = (PWMA_PS & ~0x03) | 0x01 /* PWM ͨ 1 лP20(PWM1P) P21(PWM1N) */ +#define PWM1_USE_P60P61() PWMA_PS = (PWMA_PS & ~0x03) | 0x02 /* PWM ͨ 1 лP60(PWM1P) P61(PWM1N) */ + +#define PWM2_USE_P12P13() PWMA_PS = (PWMA_PS & ~0x0C) /* PWM ͨ 2 лP12/P54(PWM2P) P13(PWM2N) */ +#define PWM2_USE_P22P23() PWMA_PS = (PWMA_PS & ~0x0C) | 0x04 /* PWM ͨ 2 лP22(PWM2P) P23(PWM2N) */ +#define PWM2_USE_P62P63() PWMA_PS = (PWMA_PS & ~0x0C) | 0x08 /* PWM ͨ 2 лP62(PWM2P) P63(PWM2N) */ + +#define PWM3_USE_P14P15() PWMA_PS = (PWMA_PS & ~0x30) /* PWM ͨ 3 лP14(PWM3P) P15(PWM3N) */ +#define PWM3_USE_P24P25() PWMA_PS = (PWMA_PS & ~0x30) | 0x10 /* PWM ͨ 3 лP24(PWM3P) P25(PWM3N) */ +#define PWM3_USE_P64P65() PWMA_PS = (PWMA_PS & ~0x30) | 0x20 /* PWM ͨ 3 лP64(PWM3P) P65(PWM3N) */ + +#define PWM4_USE_P16P17() PWMA_PS = (PWMA_PS & ~0xC0) /* PWM ͨ 4 лP16(PWM4P) P17(PWM4N) */ +#define PWM4_USE_P26P27() PWMA_PS = (PWMA_PS & ~0xC0) | 0x40 /* PWM ͨ 4 лP26(PWM4P) P27(PWM4N) */ +#define PWM4_USE_P66P67() PWMA_PS = (PWMA_PS & ~0xC0) | 0x80 /* PWM ͨ 4 лP66(PWM4P) P67(PWM4N) */ +#define PWM4_USE_P34P33() PWMA_PS = (PWMA_PS | 0xC0) /* PWM ͨ 4 лP34(PWM4P) P33(PWM4N) */ + +#define PWM5_USE_P20() PWMB_PS = (PWMB_PS & ~0x03) /* PWM ͨ 5 лP20(PWM5) */ +#define PWM5_USE_P17() PWMB_PS = (PWMB_PS & ~0x03) | 0x01 /* PWM ͨ 5 лP17(PWM5) */ +#define PWM5_USE_P00() PWMB_PS = (PWMB_PS & ~0x03) | 0x02 /* PWM ͨ 5 лP00(PWM5) */ +#define PWM5_USE_P74() PWMB_PS = (PWMB_PS | 0x03) /* PWM ͨ 5 лP74(PWM5) */ + +#define PWM6_USE_P21() PWMB_PS = (PWMB_PS & ~0x0C) /* PWM ͨ 6 лP21(PWM6) */ +#define PWM6_USE_P54() PWMB_PS = (PWMB_PS & ~0x0C) | 0x04 /* PWM ͨ 6 лP54(PWM6) */ +#define PWM6_USE_P01() PWMB_PS = (PWMB_PS & ~0x0C) | 0x08 /* PWM ͨ 6 лP01(PWM6) */ +#define PWM6_USE_P75() PWMB_PS = (PWMB_PS | 0x0C) /* PWM ͨ 6 лP75(PWM6) */ + +#define PWM7_USE_P22() PWMB_PS = (PWMB_PS & ~0x30) /* PWM ͨ 7 лP22(PWM7) */ +#define PWM7_USE_P33() PWMB_PS = (PWMB_PS & ~0x30) | 0x10 /* PWM ͨ 7 лP33(PWM7) */ +#define PWM7_USE_P02() PWMB_PS = (PWMB_PS & ~0x30) | 0x20 /* PWM ͨ 7 лP02(PWM7) */ +#define PWM7_USE_P76() PWMB_PS = (PWMB_PS | 0x30) /* PWM ͨ 7 лP76(PWM7) */ + +#define PWM8_USE_P23() PWMB_PS = (PWMB_PS & ~0xC0) /* PWM ͨ 8 лP23(PWM8) */ +#define PWM8_USE_P34() PWMB_PS = (PWMB_PS & ~0xC0) | 0x40 /* PWM ͨ 8 лP34(PWM8) */ +#define PWM8_USE_P03() PWMB_PS = (PWMB_PS & ~0xC0) | 0x80 /* PWM ͨ 8 лP03(PWM8) */ +#define PWM8_USE_P77() PWMB_PS = (PWMB_PS | 0xC0) /* PWM ͨ 8 лP77(PWM8) */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_IOAUX = 0xFEB3H; AUX4N AUX4P AUX3N AUX3P AUX2N AUX2P AUX1N AUX1P 0000,0000 /* ʹܼĴ */ +//sfr PWMB_IOAUX = 0xFEB7H; - AUX8P - AUX7P - AUX6P - AUX5P 0000,0000 /* ʹܼĴ */ +#define AUX4N (1<<7) +#define AUX4P (1<<6) +#define AUX3N (1<<5) +#define AUX3P (1<<4) +#define AUX2N (1<<3) +#define AUX2P (1<<2) +#define AUX1N (1<<1) +#define AUX1P (1) + +#define AUX8P (1<<6) +#define AUX7P (1<<4) +#define AUX6P (1<<2) +#define AUX5P (1) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CR1 = 0xFEC0H; ARPEA CMSA1 CMSA0 DIRA OPMA URSA UDISA CENA 0000,0000 /* ƼĴ 1 */ +//sfr PWMB_CR1 = 0xFEE0H; ARPEB CMSB1 CMSB0 DIRB OPMB URSB UDISB CENB 0000,0000 /* ƼĴ 1 */ +#define ARPE1 (1<<7) +#define ARPE2 (1<<7) +#define PWMA_AlignMode_Edge() PWMA_CR1 = (PWMA_CR1 & ~0x60) +#define PWMA_AlignMode_Mid1() PWMA_CR1 = (PWMA_CR1 & ~0x60) | 0x20 +#define PWMA_AlignMode_Mid2() PWMA_CR1 = (PWMA_CR1 & ~0x60) | 0x40 +#define PWMA_AlignMode_Mid3() PWMA_CR1 = (PWMA_CR1 | 0x60) +#define PWMA_DIR_UP() PWMA_CR1 &= ~0x10 +#define PWMA_DIR_DN() PWMA_CR1 |= 0x10 +#define PWMA_OPMA(n) (n==0?(PWMA_CR1 &= ~0x08):(PWMA_CR1 |= 0x08)) //ģʽ 0ڷ¼ʱֹͣ1ڷһθ¼ʱ CEN λֹͣ +#define PWMA_URSA(n) (n==0?(PWMA_CR1 &= ~0x04):(PWMA_CR1 |= 0x04)) //Դ +#define PWMA_UDISA(n) (n==0?(PWMA_CR1 &= ~0x02):(PWMA_CR1 |= 0x02)) //ֹ 0£UEV¼1¼ +#define PWMA_CEN_Enable() PWMA_CR1 |= 0x01 //1ʹܼ +#define PWMA_CEN_Disable() PWMA_CR1 &= ~0x01 //0ֹ + +#define PWMB_AlignMode_Edge() PWMB_CR1 = (PWMB_CR1 & ~0x60) +#define PWMB_AlignMode_Mid1() PWMB_CR1 = (PWMB_CR1 & ~0x60) | 0x20 +#define PWMB_AlignMode_Mid2() PWMB_CR1 = (PWMB_CR1 & ~0x60) | 0x40 +#define PWMB_AlignMode_Mid3() PWMB_CR1 = (PWMB_CR1 | 0x60) +#define PWMB_DIR_UP() PWMB_CR1 &= ~0x10 +#define PWMB_DIR_DN() PWMB_CR1 |= 0x10 +#define PWMB_OPMB(n) (n==0?(PWMB_CR1 &= ~0x08):(PWMB_CR1 |= 0x08)) //ģʽ 0ڷ¼ʱֹͣ1ڷһθ¼ʱ CEN λֹͣ +#define PWMB_URSB(n) (n==0?(PWMB_CR1 &= ~0x04):(PWMB_CR1 |= 0x04)) //Դ +#define PWMB_UDISB(n) (n==0?(PWMB_CR1 &= ~0x02):(PWMB_CR1 |= 0x02)) //ֹ 0£UEV¼1¼ +#define PWMB_CEN_Enable() PWMB_CR1 |= 0x01 //1ʹܼ +#define PWMB_CEN_Disable() PWMB_CR1 &= ~0x01 //0ֹ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CR2 = 0xFEC1H; TI1S MMSA2 MMSA1 MMSA0 - COMSA - CCPCA 0000,x0x0 /* ƼĴ 2 */ +//sfr PWMB_CR2 = 0xFEE1H; TI5S MMSB2 MMSB1 MMSB0 - COMSB - CCPCB 0000,x0xx /* ƼĴ 2 */ +#define PWM1P_TI1() PWMA_CR2 &= ~0x80 +#define PWM1P2P3P_XOR_TI1() PWMA_CR2 |= 0x80 +#define PWM5P_TI2() PWMB_CR2 &= ~0x80 +#define PWM5P6P7P_XOR_TI2() PWMB_CR2 |= 0x80 + +#define MMSn_RESET 0 //λ +#define MMSn_ENABLE 1 //ʹ +#define MMSn_UPDATE 2 // +#define MMSn_COMP_TRGO 3 //Ƚ +#define MMSn_OC1REF_TRGO 4 //Ƚ +#define MMSn_OC2REF_TRGO 5 //Ƚ +#define MMSn_OC3REF_TRGO 6 //Ƚ +#define MMSn_OC4REF_TRGO 7 //Ƚ + +#define PWMA_MainModeSel(n) PWMA_CR2 = (PWMA_CR2 & ~0x70) | (n<<4) //ģʽѡ +#define PWMB_MainModeSel(n) PWMB_CR2 = (PWMB_CR2 & ~0x70) | (n<<4) //ģʽѡ + +//0 CCPC=1 ʱֻ COMG λ 1 ʱЩλű +//1 CCPC=1 ʱֻ COMG λ 1 TRGI صʱЩλű +#define PWMA_COMSUpdateCtrl(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x04):(PWMA_CR2 |= 0x04)) ///ȽϿλĸ¿ѡ +#define PWMB_COMSUpdateCtrl(n) PWMB_CR2 = (n==0?(PWMB_CR2 &= ~0x04):(PWMB_CR2 |= 0x04)) ///ȽϿλĸ¿ѡ +//0 CCIE CCINE CCiP CCiNP OCIM λԤװص +//1 CCIE CCINE CCiP CCiNP OCIM λԤװصģøλֻ COMGλ󱻸¡ +#define PWMA_CCPCAPreloaded(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x01):(PWMA_CR2 |= 0x01)) ///ȽԤװؿλ(λֻԾлͨ) +#define PWMB_CCPCBPreloaded(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x01):(PWMA_CR2 |= 0x01)) ///ȽԤװؿλ(λֻԾлͨ) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SMCR = 0xFEC2H; MSMA TSA2 TSA1 TSA0 - SMSA2 SMSA1 SMSA0 0000,x000 /* ģʽƼĴ */ +//sfr PWMB_SMCR = 0xFEE2H; MSMB TSB2 TSB1 TSB0 - SMSB2 SMSB1 SMSB0 0000,x000 /* ģʽƼĴ */ +#define SMCR_TSn_ITR2 2 +#define SMCR_TSn_EDGE 4 +#define SMCR_TSn_TIMER1 5 +#define SMCR_TSn_TIMER2 6 +#define SMCR_TSn_ETRF 7 + +#define PWMA_SMCR_Source(n) PWMA_SMCR = (PWMA_SMCR & ~0x70) | (n<<4) //Դѡ +#define PWMB_SMCR_Source(n) PWMB_SMCR = (PWMB_SMCR & ~0x70) | (n<<4) //Դѡ + +#define SMCR_SMSA_INSIDE_CLK 0 +#define SMCR_SMSA_ENCODER_M1 1 +#define SMCR_SMSA_ENCODER_M2 2 +#define SMCR_SMSA_ENCODER_M3 3 +#define SMCR_SMSA_RESET 4 +#define SMCR_SMSA_GATE 5 +#define SMCR_SMSA_TRIG 6 +#define SMCR_SMSA_EXT_CLK 7 + +#define PWMA_SMCR_SMS(n) PWMA_SMCR = (PWMA_SMCR & ~0x07) | (n & 7) //ʱ//ģʽѡ +#define PWMB_SMCR_SMS(n) PWMB_SMCR = (PWMB_SMCR & ~0x07) | (n & 7) //ʱ//ģʽѡ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ETR = 0xFEC3H; ETP1 ECE1 ETPS11 ETPS10 ETF13 ETF12 ETF11 ETF10 0000,0000 /* ⲿĴ */ +//sfr PWMB_ETR = 0xFEE3H; ETP2 ECE2 ETPS21 ETPS20 ETF23 ETF22 ETF21 ETF20 0000,0000 /* ⲿĴ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_IER = 0xFEC4H; BIEA TIEA COMIEA CC4IE CC3IE CC2IE CC1IE UIEA 0000,0000 /* жʹܼĴ */ +//sfr PWMB_IER = 0xFEE4H; BIEB TIEB COMIEB CC8IE CC7IE CC6IE CC5IE UIEB 0000,0000 /* жʹܼĴ */ +#define PWMA_UIEA_Enable() PWMA_IER |= 0x01 //1ж +#define PWMA_UIEA_Disable() PWMA_IER &= ~0x01 //0ֹж +#define PWMA_CC1IE_Enable() PWMA_IER |= 0x02 //1/Ƚж +#define PWMA_CC1IE_Disable() PWMA_IER &= ~0x02 //0ֹ/Ƚж +#define PWMA_CC2IE_Enable() PWMA_IER |= 0x04 //1/Ƚж +#define PWMA_CC2IE_Disable() PWMA_IER &= ~0x04 //0ֹ/Ƚж +#define PWMA_CC3IE_Enable() PWMA_IER |= 0x08 //1/Ƚж +#define PWMA_CC3IE_Disable() PWMA_IER &= ~0x08 //0ֹ/Ƚж +#define PWMA_CC4IE_Enable() PWMA_IER |= 0x10 //1/Ƚж +#define PWMA_CC4IE_Disable() PWMA_IER &= ~0x10 //0ֹ/Ƚж +#define PWMA_COMIEA_Enable() PWMA_IER |= 0x20 //1COMж +#define PWMA_COMIEA_Disable() PWMA_IER &= ~0x20 //0ֹCOMж +#define PWMA_TIEA_Enable() PWMA_IER |= 0x40 //1ж +#define PWMA_TIEA_Disable() PWMA_IER &= ~0x40 //0ֹж +#define PWMA_BIEA_Enable() PWMA_IER |= 0x80 //1ɲж +#define PWMA_BIEA_Disable() PWMA_IER &= ~0x80 //0ֹɲж + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SR1 = 0xFEC5H; BIF1 TIF1 COMIF1 CC4IF CC3IF CC2IF CC1IF UIF1 0000,0000 /* ״̬Ĵ 1 */ +//sfr PWMB_SR1 = 0xFEE5H; BIF2 TIF2 COMIF2 CC8IF CC7IF CC6IF CC5IF UIF2 0000,0000 /* ״̬Ĵ 1 */ +#define UIF1 1 +#define CC1IF (1<<1) +#define CC2IF (1<<2) +#define CC3IF (1<<3) +#define CC4IF (1<<4) +#define COMIF1 (1<<5) +#define TIF1 (1<<6) +#define BIF1 (1<<7) + +#define UIF2 1 +#define CC5IF (1<<1) +#define CC6IF (1<<2) +#define CC7IF (1<<3) +#define CC8IF (1<<4) +#define COMIF2 (1<<5) +#define TIF2 (1<<6) +#define BIF2 (1<<7) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SR2 = 0xFEC6H; - - - CC4OF CC3OF CC2OF CC1OF - xxx0,000x /* ״̬Ĵ 2 */ +//sfr PWMB_SR2 = 0xFEE6H; - - - CC8OF CC7OF CC6OF CC5OF - xxx0,000x /* ״̬Ĵ 2 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_EGR = 0xFEC7H; BG1 TG1 COMG1 CC4G CC3G CC2G CC1G UG1 0000,0000 /* ¼Ĵ */ +//sfr PWMB_EGR = 0xFEE7H; BG2 TG2 COMG2 CC8G CC7G CC6G CC5G UG2 0000,0000 /* ¼Ĵ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR1 = 0xFEC8H; OC1CE OC1M2 OC1M1 OC1M0 OC1PE OC1FE CC1S1 CC1S0 0000,0000 /* /ȽģʽĴ 1 - ͨΪȽģʽ */ +//sfr PWMB_CCMR1 = 0xFEE8H; OC5CE OC5M2 OC5M1 OC5M0 OC5PE OC5FE CC5S1 CC5S0 0000,0000 /* /ȽģʽĴ 1 - ͨΪȽģʽ */ +#define OCnCE (1<<7) + +#define CCMRn_FREEZE 0x00 // +#define CCMRn_MATCH_VALID 0x10 //ƥʱͨ n ΪЧƽ +#define CCMRn_MATCH_INVALID 0x20 //ƥʱͨ n ΪЧƽ +#define CCMRn_ROLLOVER 0x30 //ת +#define CCMRn_FORCE_INVALID 0x40 //ǿΪЧƽ +#define CCMRn_FORCE_VALID 0x50 //ǿΪЧƽ +#define CCMRn_PWM_MODE1 0x60 //PWM ģʽ 1 +#define CCMRn_PWM_MODE2 0x70 //PWM ģʽ 2 + +#define PWMA_OC1ModeSet(n) PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | (n) //Ƚģʽ +#define PWMB_OC5ModeSet(n) PWMB_CCMR1 = (PWMB_CCMR1 & ~0x70) | (n) //Ƚģʽ + +#define PWMA_OC1_ReloadEnable() PWMA_CCMR1 |= 0x08 //1 OC1PE ȽϵԤװع +#define PWMA_OC1_RelosdDisable() PWMA_CCMR1 &= ~0x08 //0ֹ OC1PE ȽϵԤװع +#define PWMB_OC5_ReloadEnable() PWMB_CCMR1 |= 0x08 //1 OC5PE ȽϵԤװع +#define PWMB_OC5_RelosdDisable() PWMB_CCMR1 &= ~0x08 //0ֹ OC5PE ȽϵԤװع + +#define PWMA_OC1_FastEnable() PWMA_CCMR1 |= 0x04 //1 OC1FE ȽϿٹ +#define PWMA_OC1_FastDisable() PWMA_CCMR1 &= ~0x04 //0ֹ OC1FE ȽϿٹ +#define PWMB_OC5_FastEnable() PWMB_CCMR1 |= 0x04 //1 OC5FE ȽϿٹ +#define PWMB_OC5_FastDisable() PWMB_CCMR1 &= ~0x04 //0ֹ OC5FE ȽϿٹ + +#define CCAS_OUTPUT 0x00 // +#define CCAS_IUTPUT_TI1FP1 0x01 //룬IC1/IC2/IC3/IC4 ӳ TI1FP1 +#define CCAS_IUTPUT_TI2FP1 0x02 //룬IC1/IC2/IC3/IC4 ӳ TI2FP1 +#define CCAS_IUTPUT_TRC 0x03 //룬IC1/IC2/IC3/IC4 ӳ TRC +#define CCBS_OUTPUT 0x00 // +#define CCBS_IUTPUT_TI5FP5 0x01 //룬IC5/IC6/IC7/IC8 ӳ TI5FP5 +#define CCBS_IUTPUT_TI6FP5 0x02 //룬IC5/IC6/IC7/IC8 ӳ TI6FP5 +#define CCBS_IUTPUT_TRC 0x03 //룬IC5/IC6/IC7/IC8 ӳ TRC + +#define PWMA_CC1S_Direction(n) PWMA_CCMR1 = (PWMA_CCMR1 & ~0x03) | (n) ///Ƚ 1 ѡλͨķ/ŵѡ +#define PWMB_CC5S_Direction(n) PWMB_CCMR1 = (PWMB_CCMR1 & ~0x03) | (n) ///Ƚ 5 ѡλͨķ/ŵѡ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR1 = 0xFEC8H; IC1F3 IC1F2 IC1F1 IC1F0 IC1PSC1 IC1PSC0 CC1S1 CC1S0 0000,0000 /* /ȽģʽĴ 1 - ͨΪģʽ */ +//sfr PWMB_CCMR1 = 0xFEE8H; IC5F3 IC5F2 IC5F1 IC5F0 IC5PSC1 IC5PSC0 CC5S1 CC5S0 0000,0000 /* /ȽģʽĴ 1 - ͨΪģʽ */ + +#define ICnF_01_Clock 0 +#define ICnF_02_Clock 1 +#define ICnF_04_Clock 2 +#define ICnF_08_Clock 3 +#define ICnF_12_Clock 4 +#define ICnF_16_Clock 5 +#define ICnF_24_Clock 6 +#define ICnF_32_Clock 7 +#define ICnF_48_Clock 8 +#define ICnF_64_Clock 9 +#define ICnF_80_Clock 10 +#define ICnF_96_Clock 11 +#define ICnF_128_Clock 12 +#define ICnF_160_Clock 13 +#define ICnF_192_Clock 14 +#define ICnF_256_Clock 15 + +#define PWMA_IC1F_FilterClock(n) PWMA_CCMR1 = (PWMA_CCMR1 & 0x0F) | (n<<4) //벶 1 ˲ѡ񣬸λ TIn IJƵʼ˲ +#define PWMB_IC5F_FilterClock(n) PWMB_CCMR1 = (PWMB_CCMR1 & 0x0F) | (n<<4) //벶 5 ˲ѡ񣬸λ TIn IJƵʼ˲ + +#define PWMA_IC1PSC_PrescalerSet(n) PWMA_CCMR1 = (PWMA_CCMR1 & 0xF3) | ((n&3)<<2) /// 1 ԤƵ0~3 +#define PWMB_IC5PSC_PrescalerSet(n) PWMB_CCMR1 = (PWMB_CCMR1 & 0xF3) | ((n&3)<<2) /// 5 ԤƵ0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR2 = 0xFEC9H; OC2CE OC2M2 OC2M1 OC2M0 OC2PE OC2FE CC2S1 CC2S0 0000,0000 /* /ȽģʽĴ 2 - ͨΪȽģʽ */ +//sfr PWMB_CCMR2 = 0xFEE9H; OC6CE OC6M2 OC6M1 OC6M0 OC6PE OC6FE CC6S1 CC6S0 0000,0000 /* /ȽģʽĴ 2 - ͨΪȽģʽ */ + +#define PWMA_OC2ModeSet(n) PWMA_CCMR2 = (PWMA_CCMR2 & ~0x70) | (n) //Ƚģʽ +#define PWMB_OC6ModeSet(n) PWMB_CCMR2 = (PWMB_CCMR2 & ~0x70) | (n) //Ƚģʽ + +#define PWMA_OC2_ReloadEnable() PWMA_CCMR2 |= 0x08 //1 OC2PE ȽϵԤװع +#define PWMA_OC2_RelosdDisable() PWMA_CCMR2 &= ~0x08 //0ֹ OC2PE ȽϵԤװع +#define PWMB_OC6_ReloadEnable() PWMB_CCMR2 |= 0x08 //1 OC6PE ȽϵԤװع +#define PWMB_OC6_RelosdDisable() PWMB_CCMR2 &= ~0x08 //0ֹ OC6PE ȽϵԤװع + +#define PWMA_OC2_FastEnable() PWMA_CCMR2 |= 0x04 //1 OC2FE ȽϿٹ +#define PWMA_OC2_FastDisable() PWMA_CCMR2 &= ~0x04 //0ֹ OC2FE ȽϿٹ +#define PWMB_OC6_FastEnable() PWMB_CCMR2 |= 0x04 //1 OC6FE ȽϿٹ +#define PWMB_OC6_FastDisable() PWMB_CCMR2 &= ~0x04 //0ֹ OC6FE ȽϿٹ + +#define PWMA_CC2S_Direction(n) PWMA_CCMR2 = (PWMA_CCMR2 & ~0x03) | (n) ///Ƚ 2 ѡλͨķ/ŵѡ +#define PWMB_CC6S_Direction(n) PWMB_CCMR2 = (PWMB_CCMR2 & ~0x03) | (n) ///Ƚ 6 ѡλͨķ/ŵѡ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR2 = 0xFEC9H; IC2F3 IC2F2 IC2F1 IC2F0 IC2PSC1 IC2PSC0 CC2S1 CC2S0 0000,0000 /* /ȽģʽĴ 2 - ͨΪģʽ */ +//sfr PWMB_CCMR2 = 0xFEE9H; IC6F3 IC6F2 IC6F1 IC6F0 IC6PSC1 IC6PSC0 CC6S1 CC6S0 0000,0000 /* /ȽģʽĴ 2 - ͨΪģʽ */ + +#define PWMA_IC2F_FilterClock(n) PWMA_CCMR2 = (PWMA_CCMR2 & 0x0F) | (n<<4) //벶 2 ˲ѡ񣬸λ TIn IJƵʼ˲ +#define PWMB_IC6F_FilterClock(n) PWMB_CCMR2 = (PWMB_CCMR2 & 0x0F) | (n<<4) //벶 6 ˲ѡ񣬸λ TIn IJƵʼ˲ + +#define PWMA_IC2PSC_PrescalerSet(n) PWMA_CCMR2 = (PWMA_CCMR2 & 0xF3) | ((n&3)<<2) /// 2 ԤƵ0~3 +#define PWMB_IC6PSC_PrescalerSet(n) PWMB_CCMR2 = (PWMB_CCMR2 & 0xF3) | ((n&3)<<2) /// 6 ԤƵ0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR3 = 0xFECAH; OC3CE OC3M2 OC3M1 OC3M0 OC3PE OC3FE CC3S1 CC3S0 0000,0000 /* /ȽģʽĴ 3 - ͨΪȽģʽ */ +//sfr PWMB_CCMR3 = 0xFEEAH; OC7CE OC7M2 OC7M1 OC7M0 OC7PE OC7FE CC7S1 CC7S0 0000,0000 /* /ȽģʽĴ 3 - ͨΪȽģʽ */ + +#define PWMA_OC3ModeSet(n) PWMA_CCMR3 = (PWMA_CCMR3 & ~0x70) | (n) //Ƚģʽ +#define PWMB_OC7ModeSet(n) PWMB_CCMR3 = (PWMB_CCMR3 & ~0x70) | (n) //Ƚģʽ + +#define PWMA_OC3_ReloadEnable() PWMA_CCMR3 |= 0x08 //1 OC3PE ȽϵԤװع +#define PWMA_OC3_RelosdDisable() PWMA_CCMR3 &= ~0x08 //0ֹ OC3PE ȽϵԤװع +#define PWMB_OC7_ReloadEnable() PWMB_CCMR3 |= 0x08 //1 OC7PE ȽϵԤװع +#define PWMB_OC7_RelosdDisable() PWMB_CCMR3 &= ~0x08 //0ֹ OC7PE ȽϵԤװع + +#define PWMA_OC3_FastEnable() PWMA_CCMR3 |= 0x04 //1 OC3FE ȽϿٹ +#define PWMA_OC3_FastDisable() PWMA_CCMR3 &= ~0x04 //0ֹ OC3FE ȽϿٹ +#define PWMB_OC7_FastEnable() PWMB_CCMR3 |= 0x04 //1 OC7FE ȽϿٹ +#define PWMB_OC7_FastDisable() PWMB_CCMR3 &= ~0x04 //0ֹ OC7FE ȽϿٹ + +#define PWMA_CC3S_Direction(n) PWMA_CCMR3 = (PWMA_CCMR3 & ~0x03) | (n) ///Ƚ 3 ѡλͨķ/ŵѡ +#define PWMB_CC7S_Direction(n) PWMB_CCMR3 = (PWMB_CCMR3 & ~0x03) | (n) ///Ƚ 7 ѡλͨķ/ŵѡ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR3 = 0xFECAH; IC3F3 IC3F2 IC3F1 IC3F0 IC3PSC1 IC3PSC0 CC3S1 CC3S0 0000,0000 /* /ȽģʽĴ 3 - ͨΪģʽ */ +//sfr PWMB_CCMR3 = 0xFEEAH; IC7F3 IC7F2 IC7F1 IC7F0 IC7PSC1 IC7PSC0 CC7S1 CC7S0 0000,0000 /* /ȽģʽĴ 3 - ͨΪģʽ */ + +#define PWMA_IC3F_FilterClock(n) PWMA_CCMR3 = (PWMA_CCMR3 & 0x0F) | (n<<4) //벶 3 ˲ѡ񣬸λ TIn IJƵʼ˲ +#define PWMB_IC7F_FilterClock(n) PWMB_CCMR3 = (PWMB_CCMR3 & 0x0F) | (n<<4) //벶 7 ˲ѡ񣬸λ TIn IJƵʼ˲ + +#define PWMA_IC3PSC_PrescalerSet(n) PWMA_CCMR3 = (PWMA_CCMR3 & 0xF3) | ((n&3)<<2) /// 3 ԤƵ0~3 +#define PWMB_IC7PSC_PrescalerSet(n) PWMB_CCMR3 = (PWMB_CCMR3 & 0xF3) | ((n&3)<<2) /// 7 ԤƵ0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR4 = 0xFECBH; OC4CE OC4M2 OC4M1 OC4M0 OC4PE OC4FE CC4S1 CC4S0 0000,0000 /* /ȽģʽĴ 4 - ͨΪȽģʽ */ +//sfr PWMB_CCMR4 = 0xFEEBH; OC8CE OC8M2 OC8M1 OC8M0 OC8PE OC8FE CC8S1 CC8S0 0000,0000 /* /ȽģʽĴ 4 - ͨΪȽģʽ */ + +#define PWMA_OC4ModeSet(n) PWMA_CCMR4 = (PWMA_CCMR4 & ~0x70) | (n) //Ƚģʽ +#define PWMB_OC8ModeSet(n) PWMB_CCMR4 = (PWMB_CCMR4 & ~0x70) | (n) //Ƚģʽ + +#define PWMA_OC4_ReloadEnable() PWMA_CCMR4 |= 0x08 //1 OC4PE ȽϵԤװع +#define PWMA_OC4_RelosdDisable() PWMA_CCMR4 &= ~0x08 //0ֹ OC4PE ȽϵԤװع +#define PWMB_OC8_ReloadEnable() PWMB_CCMR4 |= 0x08 //1 OC8PE ȽϵԤװع +#define PWMB_OC8_RelosdDisable() PWMB_CCMR4 &= ~0x08 //0ֹ OC8PE ȽϵԤװع + +#define PWMA_OC4_FastEnable() PWMA_CCMR4 |= 0x04 //1 OC4FE ȽϿٹ +#define PWMA_OC4_FastDisable() PWMA_CCMR4 &= ~0x04 //0ֹ OC4FE ȽϿٹ +#define PWMB_OC8_FastEnable() PWMB_CCMR4 |= 0x04 //1 OC8FE ȽϿٹ +#define PWMB_OC8_FastDisable() PWMB_CCMR4 &= ~0x04 //0ֹ OC8FE ȽϿٹ + +#define PWMA_CC4S_Direction(n) PWMA_CCMR4 = (PWMA_CCMR4 & ~0x03) | (n) ///Ƚ 4 ѡλͨķ/ŵѡ +#define PWMB_CC8S_Direction(n) PWMB_CCMR4 = (PWMB_CCMR4 & ~0x03) | (n) ///Ƚ 8 ѡλͨķ/ŵѡ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR4 = 0xFECBH; IC4F3 IC4F2 IC4F1 IC4F0 IC4PSC1 IC4PSC0 CC4S1 CC4S0 0000,0000 /* /ȽģʽĴ 4 - ͨΪģʽ */ +//sfr PWMB_CCMR4 = 0xFEEBH; IC8F3 IC8F2 IC8F1 IC8F0 IC8PSC1 IC8PSC0 CC8S1 CC8S0 0000,0000 /* /ȽģʽĴ 4 - ͨΪģʽ */ + +#define PWMA_IC4F_FilterClock(n) PWMA_CCMR4 = (PWMA_CCMR4 & 0x0F) | (n<<4) //벶 4 ˲ѡ񣬸λ TIn IJƵʼ˲ +#define PWMB_IC8F_FilterClock(n) PWMB_CCMR4 = (PWMB_CCMR4 & 0x0F) | (n<<4) //벶 8 ˲ѡ񣬸λ TIn IJƵʼ˲ + +#define PWMA_IC4PSC_PrescalerSet(n) PWMA_CCMR4 = (PWMA_CCMR4 & 0xF3) | ((n&3)<<2) /// 4 ԤƵ0~3 +#define PWMB_IC8PSC_PrescalerSet(n) PWMB_CCMR4 = (PWMB_CCMR4 & 0xF3) | ((n&3)<<2) /// 8 ԤƵ0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCER1 = 0xFECCH; CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E 0000,0000 /* /ȽʹܼĴ 1 */ +//sfr PWMB_CCER1 = 0xFEECH; - - CC6P CC6E - - CC5P CC5E 0000,0000 /* /ȽʹܼĴ 1 */ + +#define PWMA_CCER1_Disable() PWMA_CCER1 = 0x00 //ر벶/Ƚ +#define PWMA_CC1E_Enable() PWMA_CCER1 |= 0x01 //1벶/Ƚ +#define PWMA_CC1E_Disable() PWMA_CCER1 &= ~0x01 //0ر벶/Ƚ +#define PWMA_CC1P_LowValid() PWMA_CCER1 |= 0x02 //1͵ƽЧ +#define PWMA_CC1P_HighValid() PWMA_CCER1 &= ~0x02 //0ߵƽЧ +#define PWMA_CC1P_CaptureRise() PWMA_CCER1 |= 0x02 //1 TI1F TI2F ½ +#define PWMA_CC1P_CaptureFall() PWMA_CCER1 &= ~0x02 //0 TI1F TI2F +#define PWMA_CC1NE_Enable() PWMA_CCER1 |= 0x04 //1Ƚ +#define PWMA_CC1NE_Disable() PWMA_CCER1 &= ~0x04 //0رձȽ +#define PWMA_CC1NP_LowValid() PWMA_CCER1 |= 0x08 //1͵ƽЧ +#define PWMA_CC1NP_HighValid() PWMA_CCER1 &= ~0x08 //0ߵƽЧ + +#define PWMA_CC2E_Enable() PWMA_CCER1 |= 0x10 //1벶/Ƚ +#define PWMA_CC2E_Disable() PWMA_CCER1 &= ~0x10 //0ر벶/Ƚ +#define PWMA_CC2P_LowValid() PWMA_CCER1 |= 0x20 //1͵ƽЧ +#define PWMA_CC2P_HighValid() PWMA_CCER1 &= ~0x20 //0ߵƽЧ +#define PWMA_CC2P_CaptureRise() PWMA_CCER1 |= 0x20 //1 TI1F TI2F ½ +#define PWMA_CC2P_CaptureFall() PWMA_CCER1 &= ~0x20 //0 TI1F TI2F +#define PWMA_CC2NE_Enable() PWMA_CCER1 |= 0x40 //1Ƚ +#define PWMA_CC2NE_Disable() PWMA_CCER1 &= ~0x40 //0رձȽ +#define PWMA_CC2NP_LowValid() PWMA_CCER1 |= 0x80 //1͵ƽЧ +#define PWMA_CC2NP_HighValid() PWMA_CCER1 &= ~0x80 //0ߵƽЧ + +#define PWMB_CCER1_Disable() PWMB_CCER1 = 0x00 //ر벶/Ƚ +#define PWMB_CC5E_Enable() PWMB_CCER1 |= 0x01 //1벶/Ƚ +#define PWMB_CC5E_Disable() PWMB_CCER1 &= ~0x01 //0ر벶/Ƚ +#define PWMB_CC5P_LowValid() PWMB_CCER1 |= 0x02 //1͵ƽЧ +#define PWMB_CC5P_HighValid() PWMB_CCER1 &= ~0x02 //0ߵƽЧ +#define PWMB_CC5P_CaptureRise() PWMB_CCER1 |= 0x02 //1 TI1F TI2F ½ +#define PWMB_CC5P_CaptureFall() PWMB_CCER1 &= ~0x02 //0 TI1F TI2F + +#define PWMB_CC6E_Enable() PWMB_CCER1 |= 0x10 //1벶/Ƚ +#define PWMB_CC6E_Disable() PWMB_CCER1 &= ~0x10 //0ر벶/Ƚ +#define PWMB_CC6P_LowValid() PWMB_CCER1 |= 0x20 //1͵ƽЧ +#define PWMB_CC6P_HighValid() PWMB_CCER1 &= ~0x20 //0ߵƽЧ +#define PWMB_CC6P_CaptureRise() PWMB_CCER1 |= 0x20 //1 TI1F TI2F ½ +#define PWMB_CC6P_CaptureFall() PWMB_CCER1 &= ~0x20 //0 TI1F TI2F + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCER2 = 0xFECDH; CC4NP CC4NE CC4P CC4E CC3NP CC3NE CC3P CC3E 0000,0000 /* /ȽʹܼĴ 2 */ +//sfr PWMB_CCER2 = 0xFEEDH; - - CC8P CC8E - - CC7P CC7E 0000,0000 /* /ȽʹܼĴ 2 */ + +#define PWMA_CCER2_Disable() PWMA_CCER2 = 0x00 //ر벶/Ƚ +#define PWMA_CC3E_Enable() PWMA_CCER2 |= 0x01 //1벶/Ƚ +#define PWMA_CC3E_Disable() PWMA_CCER2 &= ~0x01 //0ر벶/Ƚ +#define PWMA_CC3P_LowValid() PWMA_CCER2 |= 0x02 //1͵ƽЧ +#define PWMA_CC3P_HighValid() PWMA_CCER2 &= ~0x02 //0ߵƽЧ +#define PWMA_CC3P_CaptureRise() PWMA_CCER2 |= 0x02 //1 TI1F TI2F ½ +#define PWMA_CC3P_CaptureFall() PWMA_CCER2 &= ~0x02 //0 TI1F TI2F +#define PWMA_CC3NE_Enable() PWMA_CCER2 |= 0x04 //1Ƚ +#define PWMA_CC3NE_Disable() PWMA_CCER2 &= ~0x04 //0رձȽ +#define PWMA_CC3NP_LowValid() PWMA_CCER2 |= 0x08 //1͵ƽЧ +#define PWMA_CC3NP_HighValid() PWMA_CCER2 &= ~0x08 //0ߵƽЧ + +#define PWMA_CC4E_Enable() PWMA_CCER2 |= 0x10 //1벶/Ƚ +#define PWMA_CC4E_Disable() PWMA_CCER2 &= ~0x10 //0ر벶/Ƚ +#define PWMA_CC4P_LowValid() PWMA_CCER2 |= 0x20 //1͵ƽЧ +#define PWMA_CC4P_HighValid() PWMA_CCER2 &= ~0x20 //0ߵƽЧ +#define PWMA_CC4P_CaptureRise() PWMA_CCER2 |= 0x20 //1 TI1F TI2F ½ +#define PWMA_CC4P_CaptureFall() PWMA_CCER2 &= ~0x20 //0 TI1F TI2F +#define PWMA_CC4NE_Enable() PWMA_CCER2 |= 0x40 //1Ƚ +#define PWMA_CC4NE_Disable() PWMA_CCER2 &= ~0x40 //0رձȽ +#define PWMA_CC4NP_LowValid() PWMA_CCER2 |= 0x80 //1͵ƽЧ +#define PWMA_CC4NP_HighValid() PWMA_CCER2 &= ~0x80 //0ߵƽЧ + +#define PWMB_CCER2_Disable() PWMB_CCER2 = 0x00 //ر벶/Ƚ +#define PWMB_CC7E_Enable() PWMB_CCER2 |= 0x01 //1벶/Ƚ +#define PWMB_CC7E_Disable() PWMB_CCER2 &= ~0x01 //0ر벶/Ƚ +#define PWMB_CC7P_LowValid() PWMB_CCER2 |= 0x02 //1͵ƽЧ +#define PWMB_CC7P_HighValid() PWMB_CCER2 &= ~0x02 //0ߵƽЧ +#define PWMB_CC7P_CaptureRise() PWMB_CCER2 |= 0x02 //1 TI1F TI2F ½ +#define PWMB_CC7P_CaptureFall() PWMB_CCER2 &= ~0x02 //0 TI1F TI2F + +#define PWMB_CC8E_Enable() PWMB_CCER2 |= 0x10 //1벶/Ƚ +#define PWMB_CC8E_Disable() PWMB_CCER2 &= ~0x10 //0ر벶/Ƚ +#define PWMB_CC8P_LowValid() PWMB_CCER2 |= 0x20 //1͵ƽЧ +#define PWMB_CC8P_HighValid() PWMB_CCER2 &= ~0x20 //0ߵƽЧ +#define PWMB_CC8P_CaptureRise() PWMB_CCER2 |= 0x20 //1 TI1F TI2F ½ +#define PWMB_CC8P_CaptureFall() PWMB_CCER2 &= ~0x20 //0 TI1F TI2F + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CNTRH = 0xFECEH; CNT1[15:8] 0000,0000 /* 8 λ */ +//sfr PWMB_CNTRH = 0xFEEEH; CNT2[15:8] 0000,0000 /* 8 λ */ +//sfr PWMA_CNTRL = 0xFECFH; CNT1[7:0] 0000,0000 /* 8 λ */ +//sfr PWMB_CNTRL = 0xFEEFH; CNT2[7:0] 0000,0000 /* 8 λ */ + +#define PWMA_Counter(n) PWMA_CNTR = n // +#define PWMB_Counter(n) PWMB_CNTR = n // + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_PSCRH = 0xFED0H; PSC1[15:8] 0000,0000 /* ԤƵ 8 λ */ +//sfr PWMB_PSCRH = 0xFEF0H; PSC2[15:8] 0000,0000 /* ԤƵ 8 λ */ +//sfr PWMA_PSCRL = 0xFED1H; PSC1[7:0] 0000,0000 /* ԤƵ 8 λ */ +//sfr PWMB_PSCRL = 0xFEF1H; PSC2[7:0] 0000,0000 /* ԤƵ 8 λ */ + +#define PWMA_Prescaler(n) PWMA_PSCR = n //ԤƵ +#define PWMB_Prescaler(n) PWMB_PSCR = n //ԤƵ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ARRH = 0xFED2H; ARR1[15:8] 0000,0000 /* ԶװؼĴ 8 λ */ +//sfr PWMB_ARRH = 0xFEF2H; ARR2[15:8] 0000,0000 /* ԶװؼĴ 8 λ */ +//sfr PWMA_ARRL = 0xFED3H; ARR1[7:0] 0000,0000 /* ԶװؼĴ 8 λ */ +//sfr PWMB_ARRL = 0xFEF3H; ARR2[7:0] 0000,0000 /* ԶװؼĴ 8 λ */ + +#define PWMA_AutoReload(n) PWMA_ARR = n //ԶװؼĴ +#define PWMB_AutoReload(n) PWMB_ARR = n //ԶװؼĴ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_RCR = 0xFED4H; REP1[7:0] 0000,0000 /* ظĴ */ +//sfr PWMB_RCR = 0xFEF4H; REP2[7:0] 0000,0000 /* ظĴ */ + +#define PWMA_ReCounter(n) PWMA_RCR = n //ظĴ +#define PWMB_ReCounter(n) PWMB_RCR = n //ظĴ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR1H = 0xFED5H; CCR1[15:8] 0000,0000 /* /ȽϼĴ 1 8 λ */ +//sfr PWMB_CCR5H = 0xFEF5H; CCR5[15:8] 0000,0000 /* /ȽϼĴ 1 8 λ */ +//sfr PWMA_CCR1L = 0xFED6H; CCR1[7:0] 0000,0000 /* /ȽϼĴ 1 8 λ */ +//sfr PWMB_CCR5L = 0xFEF6H; CCR5[7:0] 0000,0000 /* /ȽϼĴ 1 8 λ */ + +#define PWMA_Duty1(n) PWMA_CCR1 = n ///ȽϼĴ 1 +#define PWMB_Duty5(n) PWMB_CCR5 = n ///ȽϼĴ 1 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR2H = 0xFED7H; CCR2[15:8] 0000,0000 /* /ȽϼĴ 2 8 λ */ +//sfr PWMB_CCR6H = 0xFEF7H; CCR6[15:8] 0000,0000 /* /ȽϼĴ 2 8 λ */ +//sfr PWMA_CCR2L = 0xFED8H; CCR2[7:0] 0000,0000 /* /ȽϼĴ 2 8 λ */ +//sfr PWMB_CCR6L = 0xFEF8H; CCR6[7:0] 0000,0000 /* /ȽϼĴ 2 8 λ */ + +#define PWMA_Duty2(n) PWMA_CCR2 = n ///ȽϼĴ 2 +#define PWMB_Duty6(n) PWMB_CCR6 = n ///ȽϼĴ 2 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR3H = 0xFED9H; CCR3[15:8] 0000,0000 /* /ȽϼĴ 3 8 λ */ +//sfr PWMB_CCR7H = 0xFEF9H; CCR7[15:8] 0000,0000 /* /ȽϼĴ 3 8 λ */ +//sfr PWMA_CCR3L = 0xFEDAH; CCR3[7:0] 0000,0000 /* /ȽϼĴ 3 8 λ */ +//sfr PWMB_CCR7L = 0xFEFAH; CCR7[7:0] 0000,0000 /* /ȽϼĴ 3 8 λ */ + +#define PWMA_Duty3(n) PWMA_CCR3 = n ///ȽϼĴ 3 +#define PWMB_Duty7(n) PWMB_CCR7 = n ///ȽϼĴ 3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR4H = 0xFEDBH; CCR4[15:8] 0000,0000 /* /ȽϼĴ 4 8 λ */ +//sfr PWMB_CCR8H = 0xFEFBH; CCR8[15:8] 0000,0000 /* /ȽϼĴ 4 8 λ */ +//sfr PWMA_CCR4L = 0xFEDCH; CCR4[7:0] 0000,0000 /* /ȽϼĴ 4 8 λ */ +//sfr PWMB_CCR8L = 0xFEFCH; CCR8[7:0] 0000,0000 /* /ȽϼĴ 4 8 λ */ + +#define PWMA_Duty4(n) PWMA_CCR4 = n ///ȽϼĴ 4 +#define PWMB_Duty8(n) PWMB_CCR8 = n ///ȽϼĴ 4 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_BRK = 0xFEDDH; MOE1 AOE1 BKP1 BKE1 OSSR1 OSSI1 LOCK11 LOCK10 0000,0000 /* ɲĴ */ +//sfr PWMB_BRK = 0xFEFDH; MOE2 AOE2 BKP2 BKE2 OSSR2 OSSI2 LOCK21 LOCK20 0000,0000 /* ɲĴ */ + +#define PWMA_BrakeOutputEnable() PWMA_BRK |= 0x80 //1ʹ +#define PWMA_BrakeOutputDisable() PWMA_BRK &= ~0x80 //0ֹ +#define PWMB_BrakeOutputEnable() PWMB_BRK |= 0x80 //1ʹ +#define PWMB_BrakeOutputDisable() PWMB_BRK &= ~0x80 //0ֹ + +#define PWMA_BrakeAutoOutputEnable() PWMA_BRK |= 0x40 //1Զʹ +#define PWMA_BrakeAutoOutputDisable() PWMA_BRK &= ~0x40 //0Զֹ +#define PWMB_BrakeAutoOutputEnable() PWMB_BRK |= 0x40 //1Զʹ +#define PWMB_BrakeAutoOutputDisable() PWMB_BRK &= ~0x40 //0Զֹ + +#define PWMA_BrakeHighValid() PWMA_BRK |= 0x20 //1ɲߵƽЧ +#define PWMA_BrakeLowValid() PWMA_BRK &= ~0x20 //0ɲ͵ƽЧ +#define PWMB_BrakeHighValid() PWMB_BRK |= 0x20 //1ɲߵƽЧ +#define PWMB_BrakeLowValid() PWMB_BRK &= ~0x20 //0ɲ͵ƽЧ + +#define PWMA_BrakeEnable() PWMA_BRK |= 0x10 //1ɲ +#define PWMA_BrakeDisable() PWMA_BRK &= ~0x10 //0ֹɲ +#define PWMB_BrakeEnable() PWMB_BRK |= 0x10 //1ɲ +#define PWMB_BrakeDisable() PWMB_BRK &= ~0x10 //0ֹɲ + +//ģʽ¡ر״̬ѡ +#define PWMA_OSSRnEnable() PWMA_BRK |= 0x08 //1 PWM ʱһ CCiE=1 CCiNE=1ȿ OC/OCN ЧƽȻOC/OCN ʹź=1 +#define PWMA_OSSRnDisable() PWMA_BRK &= ~0x08 //0 PWM ʱֹ OC/OCN OC/OCN ʹź=0 +#define PWMB_OSSRnEnable() PWMB_BRK |= 0x08 //1 PWM ʱһ CCiE=1 CCiNE=1ȿ OC/OCN ЧƽȻOC/OCN ʹź=1 +#define PWMB_OSSRnDisable() PWMB_BRK &= ~0x08 //0 PWM ʱֹ OC/OCN OC/OCN ʹź=0 +//ģʽ¡ر״̬ѡ +#define PWMA_OSSInEnable() PWMA_BRK |= 0x04 //1 PWM ʱһ CCiE=1 CCiNE=1OC/OCN еƽȻ OC/OCNʹź=1 +#define PWMA_OSSInDisable() PWMA_BRK &= ~0x04 //0 PWM ʱֹ OC/OCN OC/OCN ʹź=0 +#define PWMB_OSSInEnable() PWMB_BRK |= 0x04 //1 PWM ʱһ CCiE=1 CCiNE=1OC/OCN еƽȻ OC/OCNʹź=1 +#define PWMB_OSSInDisable() PWMB_BRK &= ~0x04 //0 PWM ʱֹ OC/OCN OC/OCN ʹź=0 + +#define PWMn_lock_L0 0 //Ĵд +#define PWMn_lock_L1 1 // 1д PWMn_BKR Ĵ BKEBKPAOE λPWMn_OISR Ĵ OISI λ +#define PWMn_lock_L2 2 // 2д 1 еĸλҲд CC λԼ OSSR/OSSI λ +#define PWMn_lock_L3 3 // 3д 2 еĸλҲд CC λ + +#define PWMA_LockLevelSet(n) PWMA_BRK = (PWMA_BRK & ~0x03) | (n&3) //áλΪֹṩдʩ +#define PWMB_LockLevelSet(n) PWMB_BRK = (PWMB_BRK & ~0x03) | (n&3) //áλΪֹṩдʩ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_DTR = 0xFEDEH; DTG1[7:0] 0000,0000 /* Ĵ */ +//sfr PWMB_DTR = 0xFEFEH; DTG2[7:0] 0000,0000 /* Ĵ */ + +//DTGn[7:5] = 000~011: ʱ = DTGn[7:0] * tCK_PSC +//DTGn[7:5] = 100~101: ʱ = (64 + DTGn[6:0]) * 2 * tCK_PSC +//DTGn[7:5] = 110: ʱ = (32 + DTGn[5:0]) * 8 * tCK_PSC +//DTGn[7:5] = 111: ʱ = (32 + DTGn[4:0]) * 16 * tCK_PSC + +#define PWMA_DeadTime(n) PWMA_DTR = n // +#define PWMB_DeadTime(n) PWMB_DTR = n // + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_OISR = 0xFEDFH; OIS4N OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 0000,0000 /* ״̬Ĵ */ +//sfr PWMB_OISR = 0xFEFFH; - OIS8 - OIS7 - OIS6 - OIS5 x0x0,x0x0 /* ״̬Ĵ */ + +#define PWMA_OC1_OUT_0() PWMA_OISR &= ~0x01 /* MOE=0 ʱ OC1N ʹܣһOC1=0 */ +#define PWMA_OC1_OUT_1() PWMA_OISR |= 0x01 /* MOE=0 ʱ OC1N ʹܣһOC1=1 */ +#define PWMA_OC1N_OUT_0() PWMA_OISR &= ~0x02 /* MOE=0 ʱһOC1N=0 */ +#define PWMA_OC1N_OUT_1() PWMA_OISR |= 0x02 /* MOE=0 ʱһOC1N=1 */ +#define PWMA_OC2_OUT_0() PWMA_OISR &= ~0x04 /* MOE=0 ʱ OC2N ʹܣһOC2=0 */ +#define PWMA_OC2_OUT_1() PWMA_OISR |= 0x04 /* MOE=0 ʱ OC2N ʹܣһOC2=1 */ +#define PWMA_OC2N_OUT_0() PWMA_OISR &= ~0x08 /* MOE=0 ʱһOC2N=0 */ +#define PWMA_OC2N_OUT_1() PWMA_OISR |= 0x08 /* MOE=0 ʱһOC2N=1 */ +#define PWMA_OC3_OUT_0() PWMA_OISR &= ~0x10 /* MOE=0 ʱ OC3N ʹܣһOC3=0 */ +#define PWMA_OC3_OUT_1() PWMA_OISR |= 0x10 /* MOE=0 ʱ OC3N ʹܣһOC3=1 */ +#define PWMA_OC3N_OUT_0() PWMA_OISR &= ~0x20 /* MOE=0 ʱһOC3N=0 */ +#define PWMA_OC3N_OUT_1() PWMA_OISR |= 0x20 /* MOE=0 ʱһOC3N=1 */ +#define PWMA_OC4_OUT_0() PWMA_OISR &= ~0x40 /* MOE=0 ʱ OC4N ʹܣһOC4=0 */ +#define PWMA_OC4_OUT_1() PWMA_OISR |= 0x40 /* MOE=0 ʱ OC4N ʹܣһOC4=1 */ +#define PWMA_OC4N_OUT_0() PWMA_OISR &= ~0x80 /* MOE=0 ʱһOC4N=0 */ +#define PWMA_OC4N_OUT_1() PWMA_OISR |= 0x80 /* MOE=0 ʱһOC4N=1 */ + +#define PWMB_OC5_OUT_0() PWMB_OISR &= ~0x01 /* MOE=0 ʱһOC5=0 */ +#define PWMB_OC5_OUT_1() PWMB_OISR |= 0x01 /* MOE=0 ʱһOC5=1 */ +#define PWMB_OC6_OUT_0() PWMB_OISR &= ~0x04 /* MOE=0 ʱһOC6=0 */ +#define PWMB_OC6_OUT_1() PWMB_OISR |= 0x04 /* MOE=0 ʱһOC6=1 */ +#define PWMB_OC7_OUT_0() PWMB_OISR &= ~0x10 /* MOE=0 ʱһOC7=0 */ +#define PWMB_OC7_OUT_1() PWMB_OISR |= 0x10 /* MOE=0 ʱһOC7=1 */ +#define PWMB_OC8_OUT_0() PWMB_OISR &= ~0x40 /* MOE=0 ʱһOC8=0 */ +#define PWMB_OC8_OUT_1() PWMB_OISR |= 0x40 /* MOE=0 ʱһOC8=1 */ + + + + +/* +;PCA_PWMn: 7 6 5 4 3 2 1 0 +; EBSn_1 EBSn_0 - - - - EPCnH EPCnL +;B5-B2: +;B1(EPCnH): PWMģʽ£CCAPnH9λ +;B0(EPCnL): PWMģʽ£CCAPnL9λ +*/ +#define PWM0_NORMAL() PCA_PWM0 &= ~3 /* PWM0(Ĭ) */ +#define PWM0_OUT_0() PCA_PWM0 |= 3, CCAP0H = 0xff /* PWM0һֱ0 */ +#define PWM0_OUT_1() PCA_PWM0 &= 0xc0, CCAP0H = 0 /* PWM0һֱ1 */ + +#define PWM1_NORMAL() PCA_PWM1 &= ~3 /* PWM1(Ĭ) */ +#define PWM1_OUT_0() PCA_PWM1 |= 3, CCAP1H = 0xff /* PWM1һֱ0 */ +#define PWM1_OUT_1() PCA_PWM1 &= 0xc0, CCAP1H = 0 /* PWM1һֱ1 */ + +#define PWM2_NORMAL() PCA_PWM2 &= ~3 /* PWM2(Ĭ) */ +#define PWM2_OUT_0() PCA_PWM2 |= 3, CCAP2H = 0xff /* PWM2һֱ0 */ +#define PWM2_OUT_1() PCA_PWM2 &= 0xc0, CCAP2H = 0 /* PWM2һֱ1 */ + +//#define PWM3_NORMAL() PCA_PWM3 &= ~3 /* PWM3(Ĭ) */ +//#define PWM3_OUT_0() PCA_PWM3 |= 3, CCAP3H = 0xff /* PWM3һֱ0 */ +//#define PWM3_OUT_1() PCA_PWM3 &= 0xc0, CCAP3H = 0 /* PWM3һֱ1 */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CCON = 0xD8; CF CR - - CCF3 CCF2 CCF1 CCF0 00xx,xx00 //PCA ƼĴ +sbit CCF0 = CCON^0; /* PCA ģ0жϱ־Ӳλ0 */ +sbit CCF1 = CCON^1; /* PCA ģ1жϱ־Ӳλ0 */ +sbit CCF2 = CCON^2; /* PCA ģ2жϱ־Ӳλ0 */ +//sbit CCF3 = CCON^3; /* PCA ģ3жϱ־Ӳλ0 */ +sbit CR = CCON^6; /* 1: PCA0*/ +sbit CF = CCON^7; /* PCACHCLFFFFHΪ0000H־PCAӲλ0*/ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMOD = 0xD9; CIDL - - - CPS2 CPS1 CPS0 ECF 0xxx,0000 //PCA ģʽĴ +#define PCA_IDLE_OFF() CMOD |= (1<<7) /* IDLE״̬PCAֹͣ */ +#define PCA_IDLE_ON() CMOD &= ~(1<<7) /* IDLE״̬PCA */ +#define PCA_CLK_12T() CMOD &= ~0x0E /* PCAѡ fosc/12 */ +#define PCA_CLK_2T() CMOD = (CMOD & ~0x0E) + 2 /* PCAѡ fosc/2 */ +#define PCA_CLK_T0() CMOD = (CMOD & ~0x0E) + 4 /* PCAѡTimer0жϣTimer0ͨAUXRĴóɹ12T1Tģʽ */ +#define PCA_CLK_ECI() CMOD = (CMOD & ~0x0E) + 6 /* PCAѡECI/P3.4ⲿʱӣ fosc/2 */ +#define PCA_CLK_1T() CMOD = (CMOD & ~0x0E) + 8 /* PCAѡ Fosc */ +#define PCA_CLK_4T() CMOD = (CMOD & ~0x0E) + 10 /* PCAѡ Fosc/4 */ +#define PCA_CLK_6T() CMOD = (CMOD & ~0x0E) + 12 /* PCAѡ Fosc/6 */ +#define PCA_CLK_8T() CMOD = (CMOD & ~0x0E) + 14 /* PCAѡ Fosc/8 */ +#define PCA_INT_ENABLE() CMOD |= 1 /* PCAжλ1---CFCCON.7жϡ */ +#define PCA_INT_DISABLE() CMOD &= ~1 /* PCAжϽֹ */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr P_SW1 = 0xA2; S1_S1 S1_S0 CCP_S1 CCP_S0 SPI_S1 SPI_S0 0 - nn00,000x //Auxiliary Register 1 +#define PCA_USE_P12P11P10P37() P_SW1 &= ~0x30 /* PCA/PWMлP12(ECI) P11(CCP0) P10(CCP1) P37(CCP2)(ϵĬ) */ +#define PCA_USE_P34P35P36P37() P_SW1 = (P_SW1 & ~0x30) | 0x10 /* PCA/PWMлP34(ECI) P35(CCP0) P36(CCP1) P37(CCP2) */ +#define PCA_USE_P24P25P26P27() P_SW1 = (P_SW1 & ~0x30) | 0x20 /* PCA/PWMлP24(ECI) P25(CCP0) P26(CCP1) P27(CCP2) */ + + +/* 7 6 5 4 3 2 1 0 Reset Value +//sfr CCAPM0 = 0xDA; PWM Ĵ - ECOM0 CCAPP0 CCAPN0 MAT0 TOG0 PWM0 ECCF0 x000,0000 //PCA ģ0 +//sfr CCAPM1 = 0xDB; PWM Ĵ - ECOM1 CCAPP1 CCAPN1 MAT1 TOG1 PWM1 ECCF1 x000,0000 //PCA ģ1 +//sfr CCAPM2 = 0xDC; PWM Ĵ - ECOM2 CCAPP2 CCAPN2 MAT2 TOG2 PWM2 ECCF2 x000,0000 //PCA ģ2 +//sfr CCAPM3 = 0xDD; PWM Ĵ - ECOM3 CCAPP3 CCAPN3 MAT3 TOG3 PWM3 ECCF3 x000,0000 //PCA ģ3 +;ECOMn = 1: ȽϹܡ +;CAPPn = 1: ش׽ܡ +;CAPNn = 1: ½ش׽ܡ +;MATn = 1: ƥʱCCONеCCFnλ +;TOGn = 1: ƥʱCEXnת(CEX0/PCA0/PWM0/P3.7,CEX1/PCA1/PWM1/P3.5) +;PWMn = 1: CEXnΪPWM +;ECCFn = 1: CCONеCCFnжϡ +;ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn +; 0 0 0 0 0 0 0 00H δκιܡ +; x 1 0 0 0 0 x 20H 16λCEXnش׽ܡ +; x 0 1 0 0 0 x 10H 16λCEXn½ش׽ܡ +; x 1 1 0 0 0 x 30H 16λCEXn/PCAnأϡأ׽ܡ +; 1 0 0 1 0 0 x 48H 16λʱ +; 1 0 0 1 1 0 x 4CH 16λ +; 1 0 0 0 0 1 0 42H 8λPWMж +; 1 1 0 0 0 1 1 63H 8λPWMͱ߿ɲж +; 1 0 1 0 0 1 1 53H 8λPWM߱Ϳɲж +; 1 1 1 0 0 1 1 73H 8λPWMͱ߻߱;ɲж +;******************************************************************* +;*******************************************************************/ + +#define PCA0_none() CCAPM0 = 0 +#define PCA0_PWM(nbit) CCAPM0 = 0x42,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_rise_int(nbit) CCAPM0 = 0x63,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_fall_int(nbit) CCAPM0 = 0x53,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_edge_int(nbit) CCAPM0 = 0x73,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_capture_rise() CCAPM0 = (0x20 + 1) +#define PCA0_capture_fall() CCAPM0 = (0x10 + 1) +#define PCA0_capture_edge() CCAPM0 = (0x30 + 1) +#define PCA0_16bit_Timer() CCAPM0 = (0x48 + 1) +#define PCA0_High_PulseEnable() CCAPM0 |= 0x04 + +#define PCA1_none() CCAPM1 = 0 +#define PCA1_PWM(nbit) CCAPM1 = 0x42,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_rise_int(nbit) CCAPM1 = 0x63,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_fall_int(nbit) CCAPM1 = 0x53,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_edge_int(nbit) CCAPM1 = 0x73,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_capture_rise() CCAPM1 = (0x20 + 1) +#define PCA1_capture_fall() CCAPM1 = (0x10 + 1) +#define PCA1_capture_edge() CCAPM1 = (0x30 + 1) +#define PCA1_16bit_Timer() CCAPM1 = (0x48 + 1) +#define PCA1_High_PulseEnable() CCAPM1 |= 0x04 + +#define PCA2_none() CCAPM2 = 0 +#define PCA2_PWM(nbit) CCAPM2 = 0x42,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_rise_int(nbit) CCAPM2 = 0x63,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_fall_int(nbit) CCAPM2 = 0x53,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_edge_int(nbit) CCAPM2 = 0x73,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_capture_rise() CCAPM2 = (0x20 + 1) +#define PCA2_capture_fall() CCAPM2 = (0x10 + 1) +#define PCA2_capture_edge() CCAPM2 = (0x30 + 1) +#define PCA2_16bit_Timer() CCAPM2 = (0x48 + 1) +#define PCA2_High_PulseEnable() CCAPM2 |= 0x04 + +//#define PCA3_none() CCAPM3 = 0 +//#define PCA3_PWM(nbit) CCAPM3 = 0x42,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_rise_int(nbit) CCAPM3 = 0x63,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_fall_int(nbit) CCAPM3 = 0x53,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_edge_int(nbit) CCAPM3 = 0x73,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_capture_rise() CCAPM3 = (0x20 + 1) +//#define PCA3_capture_fall() CCAPM3 = (0x10 + 1) +//#define PCA3_capture_edge() CCAPM3 = (0x30 + 1) +//#define PCA3_16bit_Timer() CCAPM3 = (0x48 + 1) +//#define PCA3_High_PulseEnable() CCAPM3 |= 0x04 + +/**********************************************************/ +typedef unsigned char u8; +typedef unsigned int u16; +typedef unsigned long u32; + +/**********************************************************/ +#define NOP1() _nop_() +#define NOP2() NOP1(),NOP1() +#define NOP3() NOP2(),NOP1() +#define NOP4() NOP3(),NOP1() +#define NOP5() NOP4(),NOP1() +#define NOP6() NOP5(),NOP1() +#define NOP7() NOP6(),NOP1() +#define NOP8() NOP7(),NOP1() +#define NOP9() NOP8(),NOP1() +#define NOP10() NOP9(),NOP1() +#define NOP11() NOP10(),NOP1() +#define NOP12() NOP11(),NOP1() +#define NOP13() NOP12(),NOP1() +#define NOP14() NOP13(),NOP1() +#define NOP15() NOP14(),NOP1() +#define NOP16() NOP15(),NOP1() +#define NOP17() NOP16(),NOP1() +#define NOP18() NOP17(),NOP1() +#define NOP19() NOP18(),NOP1() +#define NOP20() NOP19(),NOP1() +#define NOP21() NOP20(),NOP1() +#define NOP22() NOP21(),NOP1() +#define NOP23() NOP22(),NOP1() +#define NOP24() NOP23(),NOP1() +#define NOP25() NOP24(),NOP1() +#define NOP26() NOP25(),NOP1() +#define NOP27() NOP26(),NOP1() +#define NOP28() NOP27(),NOP1() +#define NOP29() NOP28(),NOP1() +#define NOP30() NOP29(),NOP1() +#define NOP31() NOP30(),NOP1() +#define NOP32() NOP31(),NOP1() +#define NOP33() NOP32(),NOP1() +#define NOP34() NOP33(),NOP1() +#define NOP35() NOP34(),NOP1() +#define NOP36() NOP35(),NOP1() +#define NOP37() NOP36(),NOP1() +#define NOP38() NOP37(),NOP1() +#define NOP39() NOP38(),NOP1() +#define NOP40() NOP39(),NOP1() +#define NOP(N) NOP##N() + + +/**********************************************/ +#define Pin0 0x01 //IO Px.0 +#define Pin1 0x02 //IO Px.1 +#define Pin2 0x04 //IO Px.2 +#define Pin3 0x08 //IO Px.3 +#define Pin4 0x10 //IO Px.4 +#define Pin5 0x20 //IO Px.5 +#define Pin6 0x40 //IO Px.6 +#define Pin7 0x80 //IO Px.7 +#define PinAll 0xFF //IO + +#define P0n_standard(bitn) P0M1 &= ~(bitn), P0M0 &= ~(bitn) /* 00 */ +#define P0n_push_pull(bitn) P0M1 &= ~(bitn), P0M0 |= (bitn) /* 01 */ +#define P0n_pure_input(bitn) P0M1 |= (bitn), P0M0 &= ~(bitn) /* 10 */ +#define P0n_open_drain(bitn) P0M1 |= (bitn), P0M0 |= (bitn) /* 11 */ + +#define P1n_standard(bitn) P1M1 &= ~(bitn), P1M0 &= ~(bitn) +#define P1n_push_pull(bitn) P1M1 &= ~(bitn), P1M0 |= (bitn) +#define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= ~(bitn) +#define P1n_open_drain(bitn) P1M1 |= (bitn), P1M0 |= (bitn) + +#define P2n_standard(bitn) P2M1 &= ~(bitn), P2M0 &= ~(bitn) +#define P2n_push_pull(bitn) P2M1 &= ~(bitn), P2M0 |= (bitn) +#define P2n_pure_input(bitn) P2M1 |= (bitn), P2M0 &= ~(bitn) +#define P2n_open_drain(bitn) P2M1 |= (bitn), P2M0 |= (bitn) + +#define P3n_standard(bitn) P3M1 &= ~(bitn), P3M0 &= ~(bitn) +#define P3n_push_pull(bitn) P3M1 &= ~(bitn), P3M0 |= (bitn) +#define P3n_pure_input(bitn) P3M1 |= (bitn), P3M0 &= ~(bitn) +#define P3n_open_drain(bitn) P3M1 |= (bitn), P3M0 |= (bitn) + +#define P4n_standard(bitn) P4M1 &= ~(bitn), P4M0 &= ~(bitn) +#define P4n_push_pull(bitn) P4M1 &= ~(bitn), P4M0 |= (bitn) +#define P4n_pure_input(bitn) P4M1 |= (bitn), P4M0 &= ~(bitn) +#define P4n_open_drain(bitn) P4M1 |= (bitn), P4M0 |= (bitn) + +#define P5n_standard(bitn) P5M1 &= ~(bitn), P5M0 &= ~(bitn) +#define P5n_push_pull(bitn) P5M1 &= ~(bitn), P5M0 |= (bitn) +#define P5n_pure_input(bitn) P5M1 |= (bitn), P5M0 &= ~(bitn) +#define P5n_open_drain(bitn) P5M1 |= (bitn), P5M0 |= (bitn) + +#define P6n_standard(bitn) P6M1 &= ~(bitn), P6M0 &= ~(bitn) +#define P6n_push_pull(bitn) P6M1 &= ~(bitn), P6M0 |= (bitn) +#define P6n_pure_input(bitn) P6M1 |= (bitn), P6M0 &= ~(bitn) +#define P6n_open_drain(bitn) P6M1 |= (bitn), P6M0 |= (bitn) + +#define P7n_standard(bitn) P7M1 &= ~(bitn), P7M0 &= ~(bitn) +#define P7n_push_pull(bitn) P7M1 &= ~(bitn), P7M0 |= (bitn) +#define P7n_pure_input(bitn) P7M1 |= (bitn), P7M0 &= ~(bitn) +#define P7n_open_drain(bitn) P7M1 |= (bitn), P7M0 |= (bitn) + + +/****************************************************************/ + + +//sfr INT_CLKO = 0x8F; //ӵ SFR WAKE_CLKO (ַ0x8F) +/* + 7 6 5 4 3 2 1 0 Reset Value + - EX4 EX3 EX2 - T2CLKO T1CLKO T0CLKO 0000,0000B +b6 - EX4 : жINT4 +b5 - EX3 : жINT3 +b4 - EX2 : жINT2 +b2 - T1CLKO : T2 P3.0Fck1 = 1/2 T1 +b1 - T1CLKO : T1 P3.4Fck1 = 1/2 T1 +b0 - T0CLKO : T0 P3.5Fck0 = 1/2 T0 +*/ + +#define LVD_InterruptEnable() ELVD = 1 +#define LVD_InterruptDisable() ELVD = 0 + + +//sfr WKTCL = 0xAA; //Ѷʱֽ +//sfr WKTCH = 0xAB; //Ѷʱֽ +// B7 B6 B5 B4 B3 B2 B1 B0 B7 B6 B5 B4 B3 B2 B1 B0 +// WKTEN S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0 n * 560us +#define WakeTimerDisable() WKTCH &= 0x7f /* WKTEN = 0 ֹ˯߻Ѷʱ */ +#define WakeTimerSet(scale) WKTCL = (scale) % 256,WKTCH = (scale) / 256 | 0x80 /* WKTEN = 1 ˯߻Ѷʱ */ + + + +//sfr BUS_SPEED = 0xA1; //Stretch register - - - - - - EXRTS1 EXRTSS0 xxxx,xx10 +#define BUS_SPEED_1T() BUS_SPEED = BUS_SPEED & ~3 +#define BUS_SPEED_2T() BUS_SPEED = (BUS_SPEED & ~3) | 1 +#define BUS_SPEED_4T() BUS_SPEED = (BUS_SPEED & ~3) | 2 +#define BUS_SPEED_8T() BUS_SPEED = (BUS_SPEED & ~3) | 3 + +#define BUS_RD_WR_P44_P43() BUS_SPEED = BUS_SPEED & 0x3f +#define BUS_RD_WR_P37_P36() BUS_SPEED = (BUS_SPEED & 0x3f) | 0x40 +#define BUS_RD_WR_P42_P40() BUS_SPEED = (BUS_SPEED & 0x3f) | 0x80 + + +/* interrupt vector */ +#define INT0_VECTOR 0 +#define TIMER0_VECTOR 1 +#define INT1_VECTOR 2 +#define TIMER1_VECTOR 3 +#define UART1_VECTOR 4 +#define ADC_VECTOR 5 +#define LVD_VECTOR 6 +#define PCA_VECTOR 7 +#define UART2_VECTOR 8 +#define SPI_VECTOR 9 +#define INT2_VECTOR 10 +#define INT3_VECTOR 11 +#define TIMER2_VECTOR 12 +#define INT4_VECTOR 16 +#define UART3_VECTOR 17 +#define UART4_VECTOR 18 +#define TIMER3_VECTOR 19 +#define TIMER4_VECTOR 20 +#define CMP_VECTOR 21 +#define PWM0_VECTOR 22 +#define PWMFD_VECTOR 23 +#define I2C_VECTOR 24 +#define USB_VECTOR 25 +#define PWMA_VECTOR 26 +#define PWMB_VECTOR 27 +#define PWM1_VECTOR 28 +#define PWM2_VECTOR 29 +#define PWM3_VECTOR 30 +#define PWM4_VECTOR 31 +#define PWM5_VECTOR 32 + + +#define TRUE 1 +#define FALSE 0 + +//============================================================= + +//======================================== + +#define Priority_0 0 //жȼΪ 0 ͼ +#define Priority_1 1 //жȼΪ 1 ϵͼ +#define Priority_2 2 //жȼΪ 2 ϸ߼ +#define Priority_3 3 //жȼΪ 3 ߼ + +//======================================== + +#define ENABLE 1 +#define DISABLE 0 + +#endif diff --git a/Start_Init.c b/Start_Init.c new file mode 100644 index 0000000..c1c35cc --- /dev/null +++ b/Start_Init.c @@ -0,0 +1,39 @@ +#include "STC8xxxx.h" +#include "Start_Init.h" +#include "string.h" +#include "UART_Set.h" +#include "timer.h" +#include "pwm_control.h" + +void Start_Init(void) +{ + u8 i; + memset(&g_Usart,0,sizeof(g_Usart)); + memset(&s_recv, 0, sizeof(s_recv)); + memset(&g_answer,0,sizeof(g_answer)); + g_Usart.lastsn=0xFF; + s_recv.B_min = 0; + s_recv.B_max = 100; + s_recv.global_brightness = 100; + + for(i=0;i<12;i++) + { + s_recv.pwm_step[i] = 1; + s_recv.key_status[i] = 1; + s_recv.gradual_time[i] = 300; + } +} + +//ʱ21msʱ +void Timer2_Init_1ms(void) +{ + TIM_InitTypeDef TIM_InitStructure; //ṹ + TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //ָģʽ, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask + TIM_InitStructure.TIM_Priority = Priority_3; //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + TIM_InitStructure.TIM_Interrupt = ENABLE; //жǷ, ENABLEDISABLE. (ע: Timer2̶Ϊ16λԶװ, жϹ̶Ϊȼ) + TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; //ָʱԴ, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext + TIM_InitStructure.TIM_ClkOut = DISABLE; //Ƿ, ENABLEDISABLE + TIM_InitStructure.TIM_Value = 63693UL; //ֵ,ʱΪ1ms + TIM_InitStructure.TIM_Run = ENABLE; //Ƿʼʱ, ENABLEDISABLE + Timer_Inilize(Timer2,&TIM_InitStructure); //ʼTimer2 Timer0,Timer1,Timer2,Timer3,Timer4 +} \ No newline at end of file diff --git a/Start_Init.h b/Start_Init.h new file mode 100644 index 0000000..695ce75 --- /dev/null +++ b/Start_Init.h @@ -0,0 +1,6 @@ +#ifndef START_INIT_H +#define START_INIT_H + +void Start_Init(void); +void Timer2_Init_1ms(void); +#endif \ No newline at end of file diff --git a/UART.C b/UART.C new file mode 100644 index 0000000..62daa3a --- /dev/null +++ b/UART.C @@ -0,0 +1,484 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 "UART.h" +#include "timer.h" + +#ifdef UART1 +COMx_Define COM1; +u8 xdata TX1_Buffer[COM_TX1_Lenth]; //ͻ +u8 xdata RX1_Buffer[COM_RX1_Lenth]; //ջ +#endif +#ifdef UART2 +COMx_Define COM2; +u8 xdata TX2_Buffer[COM_TX2_Lenth]; //ͻ +u8 xdata RX2_Buffer[COM_RX2_Lenth]; //ջ +#endif +#ifdef UART3 +COMx_Define COM3; +u8 xdata TX3_Buffer[COM_TX3_Lenth]; //ͻ +u8 xdata RX3_Buffer[COM_RX3_Lenth]; //ջ +#endif +#ifdef UART4 +COMx_Define COM4; +u8 xdata TX4_Buffer[COM_TX4_Lenth]; //ͻ +u8 xdata RX4_Buffer[COM_RX4_Lenth]; //ջ +#endif + +u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx) +{ + u8 i; + u32 j; + +#ifdef UART1 + if(UARTx == UART1) + { + COM1.id = 1; + COM1.TX_read = 0; + COM1.TX_write = 0; + COM1.B_TX_busy = 0; + COM1.RX_Cnt = 0; + COM1.RX_TimeOut = 0; + COM1.B_RX_OK = 0; + for(i=0; iUART_Priority > Priority_3) return 2; // + UART1_Priority(COMx->UART_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + if(COMx->UART_Mode > UART_9bit_BRTx) return 2; //ģʽ + SCON = (SCON & 0x3f) | COMx->UART_Mode; + if((COMx->UART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //ɱ䲨 + { + j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //1T + if(j >= 65536UL) return 2; // + j = 65536UL - j; + if(COMx->UART_BRT_Use == BRT_Timer1) + { + TR1 = 0; + AUXR &= ~0x01; //S1 BRT Use Timer1; + TMOD &= ~(1<<6); //Timer1 set As Timer + TMOD &= ~0x30; //Timer1_16bitAutoReload; + AUXR |= (1<<6); //Timer1 set as 1T mode + TH1 = (u8)(j>>8); + TL1 = (u8)j; + ET1 = 0; //ֹж + TMOD &= ~0x40; //ʱ + INT_CLKO &= ~0x02; //ʱ + TR1 = 1; + } + else if(COMx->UART_BRT_Use == BRT_Timer2) + { + AUXR &= ~(1<<4); //Timer stop + AUXR |= 0x01; //S1 BRT Use Timer2; + AUXR &= ~(1<<3); //Timer2 set As Timer + AUXR |= (1<<2); //Timer2 set as 1T mode + TH2 = (u8)(j>>8); + TL2 = (u8)j; + IE2 &= ~(1<<2); //ֹж + AUXR |= (1<<4); //Timer run enable + } + else return 2; // + } + else if(COMx->UART_Mode == UART_ShiftRight) + { + if(COMx->BaudRateDouble == ENABLE) AUXR |= (1<<5); //̶SysClk/2 + else AUXR &= ~(1<<5); //̶SysClk/12 + } + else if(COMx->UART_Mode == UART_9bit) //̶SysClk*2^SMOD/64 + { + if(COMx->BaudRateDouble == ENABLE) PCON |= (1<<7); //̶SysClk/32 + else PCON &= ~(1<<7); //̶SysClk/64 + } + if(COMx->UART_Interrupt == ENABLE) ES = 1; //ж + else ES = 0; //ֹж + if(COMx->UART_RxEnable == ENABLE) REN = 1; // + else REN = 0; //ֹ + P_SW1 = (P_SW1 & 0x3f) | (COMx->UART_P_SW & 0xc0); //лIO + return 0; + } +#endif +#ifdef UART2 + if(UARTx == UART2) + { + COM2.id = 2; + COM2.TX_read = 0; + COM2.TX_write = 0; + COM2.B_TX_busy = 0; + COM2.RX_Cnt = 0; + COM2.RX_TimeOut = 0; + COM2.B_RX_OK = 0; + for(i=0; iUART_Mode == UART_9bit_BRTx) ||(COMx->UART_Mode == UART_8bit_BRTx)) //ɱ䲨 + { + if(COMx->UART_Priority > Priority_3) return 2; // + UART2_Priority(COMx->UART_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + if(COMx->UART_Mode == UART_9bit_BRTx) S2CON |= (1<<7); //9bit + else S2CON &= ~(1<<7); //8bit + j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //1T + if(j >= 65536UL) return 2; // + j = 65536UL - j; + AUXR &= ~(1<<4); //Timer stop + AUXR &= ~(1<<3); //Timer2 set As Timer + AUXR |= (1<<2); //Timer2 set as 1T mode + TH2 = (u8)(j>>8); + TL2 = (u8)j; + IE2 &= ~(1<<2); //ֹж + AUXR |= (1<<4); //Timer run enable + } + else return 2; //ģʽ + if(COMx->UART_Interrupt == ENABLE) IE2 |= 1; //ж + else IE2 &= ~1; //ֹж + if(COMx->UART_RxEnable == ENABLE) S2CON |= (1<<4); // + else S2CON &= ~(1<<4); //ֹ + P_SW2 = (P_SW2 & ~1) | (COMx->UART_P_SW & 0x01); //лIO + return 0; + } +#endif +#ifdef UART3 + if(UARTx == UART3) + { + COM3.id = 3; + COM3.TX_read = 0; + COM3.TX_write = 0; + COM3.B_TX_busy = 0; + COM3.RX_Cnt = 0; + COM3.RX_TimeOut = 0; + COM3.B_RX_OK = 0; + for(i=0; iUART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //ɱ䲨 + { + if(COMx->UART_Priority > Priority_3) return 2; // + UART3_Priority(COMx->UART_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + if(COMx->UART_Mode == UART_9bit_BRTx) S3_9bit(); //9bit + else S3_8bit(); //8bit + j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //1T + if(j >= 65536UL) return 2; // + j = 65536UL - j; + if(COMx->UART_BRT_Use == BRT_Timer3) + { + S3_BRT_UseTimer3(); //S3 BRT Use Timer3; + TH3 = (u8)(j>>8); + TL3 = (u8)j; + T4T3M &= 0xf0; + T4T3M |= 0x0a; //Timer3 set As Timer, 1T mode, Start timer3 + } + else if(COMx->UART_BRT_Use == BRT_Timer2) + { + AUXR &= ~(1<<4); //Timer stop + S3_BRT_UseTimer2(); //S3 BRT Use Timer2; + AUXR &= ~(1<<3); //Timer2 set As Timer + AUXR |= (1<<2); //Timer2 set as 1T mode + TH2 = (u8)(j>>8); + TL2 = (u8)j; + IE2 &= ~(1<<2); //ֹж + AUXR |= (1<<4); //Timer run enable + } + else return 2; // + } + else return 2; //ģʽ + if(COMx->UART_Interrupt == ENABLE) S3_Int_Enable(); //ж + else S3_Int_Disable(); //ֹж + if(COMx->UART_RxEnable == ENABLE) S3_RX_Enable(); // + else S3_RX_Disable(); //ֹ + P_SW2 = (P_SW2 & ~2) | (COMx->UART_P_SW & 0x02); //лIO + return 0; + } +#endif +#ifdef UART4 + if(UARTx == UART4) + { + COM4.id = 3; + COM4.TX_read = 0; + COM4.TX_write = 0; + COM4.B_TX_busy = 0; + COM4.RX_Cnt = 0; + COM4.RX_TimeOut = 0; + COM4.B_RX_OK = 0; + for(i=0; iUART_Mode == UART_9bit_BRTx) || (COMx->UART_Mode == UART_8bit_BRTx)) //ɱ䲨 + { + if(COMx->UART_Priority > Priority_3) return 2; // + UART4_Priority(COMx->UART_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + if(COMx->UART_Mode == UART_9bit_BRTx) S4_9bit(); //9bit + else S4_8bit(); //8bit + j = (MAIN_Fosc / 4) / COMx->UART_BaudRate; //1T + if(j >= 65536UL) return 2; // + j = 65536UL - j; + if(COMx->UART_BRT_Use == BRT_Timer4) + { + S4_BRT_UseTimer4(); //S4 BRT Use Timer4; + TH4 = (u8)(j>>8); + TL4 = (u8)j; + T4T3M &= 0x0f; + T4T3M |= 0xa0; //Timer4 set As Timer, 1T mode, Start timer4 + } + else if(COMx->UART_BRT_Use == BRT_Timer2) + { + AUXR &= ~(1<<4); //Timer stop + S4_BRT_UseTimer2(); //S4 BRT Use Timer2; + AUXR &= ~(1<<3); //Timer2 set As Timer + AUXR |= (1<<2); //Timer2 set as 1T mode + TH2 = (u8)(j>>8); + TL2 = (u8)j; + IE2 &= ~(1<<2); //ֹж + AUXR |= (1<<4); //Timer run enable + } + else return 2; // + } + else return 2; //ģʽ + if(COMx->UART_Interrupt == ENABLE) S4_Int_Enable(); //ж + else S4_Int_Disable(); //ֹж + if(COMx->UART_RxEnable == ENABLE) S4_RX_Enable(); // + else S4_RX_Disable(); //ֹ + P_SW2 = (P_SW2 & ~4) | (COMx->UART_P_SW & 0x04); //лIO + return 0; + } +#endif + return 2; // +} + +/*********************************************************/ + +/********************* UART1 ************************/ +#ifdef UART1 +void TX1_write2buff(u8 dat) //д뷢ͻ壬ָ+1 +{ + TX1_Buffer[COM1.TX_write] = dat; //װͻ + if(++COM1.TX_write >= COM_TX1_Lenth) COM1.TX_write = 0; + + if(COM1.B_TX_busy == 0) // + { + COM1.B_TX_busy = 1; //־æ + TI = 1; //ж + } +} + +void PrintString1(u8 *puts) +{ + for (; *puts != 0; puts++) TX1_write2buff(*puts); //ֹͣ0 +} +void Printbuffer1(u8 *puts,u8 len) +{ + u8 i; + for (i=0; i= COM_RX1_Lenth) COM1.RX_Cnt = 0; + if(dat=='D') //10'D',ϵͳ + { + stage++; + } + else + { + stage=0; + } + if(stage==10) + { + IAP_CONTR=0x60; + } + RX1_Buffer[COM1.RX_Cnt++] = SBUF; + COM1.RX_TimeOut = TimeOutSet1; + } + } + + if(TI) + { + TI = 0; + if(COM1.TX_read != COM1.TX_write) + { + SBUF = TX1_Buffer[COM1.TX_read]; + if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0; + } + else COM1.B_TX_busy = 0; + } +} +#endif + +/********************* UART2 ************************/ +#ifdef UART2 +void TX2_write2buff(u8 dat) //д뷢ͻ壬ָ+1 +{ + TX2_Buffer[COM2.TX_write] = dat; //װͻ + if(++COM2.TX_write >= COM_TX2_Lenth) COM2.TX_write = 0; + + if(COM2.B_TX_busy == 0) // + { + COM2.B_TX_busy = 1; //־æ + SET_TI2(); //ж + } +} + +void PrintString2(u8 *puts) +{ + for (; *puts != 0; puts++) TX2_write2buff(*puts); //ֹͣ0 +} + +void UART2_int (void) interrupt UART2_VECTOR +{ + if(RI2) + { + CLR_RI2(); + if(COM2.B_RX_OK == 0) + { + if(COM2.RX_Cnt >= COM_RX2_Lenth) COM2.RX_Cnt = 0; + RX2_Buffer[COM2.RX_Cnt++] = S2BUF; + COM2.RX_TimeOut = TimeOutSet2; + } + } + + if(TI2) + { + CLR_TI2(); + if(COM2.TX_read != COM2.TX_write) + { + S2BUF = TX2_Buffer[COM2.TX_read]; + if(++COM2.TX_read >= COM_TX2_Lenth) COM2.TX_read = 0; + } + else COM2.B_TX_busy = 0; + } +} +#endif + +/********************* UART3 ************************/ +#ifdef UART3 +void TX3_write2buff(u8 dat) //д뷢ͻ壬ָ+1 +{ + TX3_Buffer[COM3.TX_write] = dat; //װͻ + if(++COM3.TX_write >= COM_TX3_Lenth) COM3.TX_write = 0; + + if(COM3.B_TX_busy == 0) // + { + COM3.B_TX_busy = 1; //־æ + SET_TI3(); //ж + } +} + +void PrintString3(u8 *puts) +{ + for (; *puts != 0; puts++) TX3_write2buff(*puts); //ֹͣ0 +} + +void Printbuffer3(u8 *puts,u8 len) +{ + u8 i; + for (i=0; i= COM_RX3_Lenth) COM3.RX_Cnt = 0; + RX3_Buffer[COM3.RX_Cnt++] = S3BUF; + COM3.RX_TimeOut = TimeOutSet3; + } + } + + if(TI3) //ɱ־λ + { + CLR_TI3(); + if(COM3.TX_read != COM3.TX_write) + { + S3BUF = TX3_Buffer[COM3.TX_read]; + if(++COM3.TX_read >= COM_TX3_Lenth) COM3.TX_read = 0; + } + else COM3.B_TX_busy = 0; + } +} +#endif + +/********************* UART4 ************************/ +#ifdef UART4 +void TX4_write2buff(u8 dat) //д뷢ͻ壬ָ+1 +{ + TX4_Buffer[COM4.TX_write] = dat; //װͻ + if(++COM4.TX_write >= COM_TX4_Lenth) COM4.TX_write = 0; + + if(COM4.B_TX_busy == 0) // + { + COM4.B_TX_busy = 1; //־æ + SET_TI4(); //ж + } +} + +void PrintString4(u8 *puts) +{ + for (; *puts != 0; puts++) TX4_write2buff(*puts); //ֹͣ0 +} + +void UART4_int (void) interrupt UART4_VECTOR +{ + if(RI4) + { + CLR_RI4(); + if(COM4.B_RX_OK == 0) + { + if(COM4.RX_Cnt >= COM_RX4_Lenth) COM4.RX_Cnt = 0; + RX4_Buffer[COM4.RX_Cnt++] = S4BUF; + COM4.RX_TimeOut = TimeOutSet4; + } + } + + if(TI4) + { + CLR_TI4(); + if(COM4.TX_read != COM4.TX_write) + { + S4BUF = TX4_Buffer[COM4.TX_read]; + if(++COM4.TX_read >= COM_TX4_Lenth) COM4.TX_read = 0; + } + else COM4.B_TX_busy = 0; + } +} +#endif + +/*************** ڳʼ *****************/ +void UART3_config(void) +{ + COMx_InitDefine COMx_InitStructure; //ṹ + COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx + COMx_InitStructure.UART_BRT_Use = BRT_Timer3; //ʹò, BRT_Timer2, BRT_Timer3 (ע: 2̶ʹBRT_Timer2) + COMx_InitStructure.UART_BaudRate = 115200; //, 110 ~ 115200 + COMx_InitStructure.UART_RxEnable = ENABLE; //, ENABLEDISABLE + COMx_InitStructure.UART_Interrupt = ENABLE; //ж, ENABLEDISABLE + COMx_InitStructure.UART_Priority = Priority_0; //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + COMx_InitStructure.UART_P_SW = UART3_SW_P50_P51; //л˿, UART3_SW_P00_P01,UART3_SW_P50_P51 + UART_Configuration(UART3, &COMx_InitStructure); //ʼ3 UART1,UART2,UART3,UART4 + + //PrintString3("STC8 UART3 Test Programme!\r\n"); //UART3һַ +} \ No newline at end of file diff --git a/UART.h b/UART.h new file mode 100644 index 0000000..8699a53 --- /dev/null +++ b/UART.h @@ -0,0 +1,138 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 __UART_H +#define __UART_H + +#include "config.h" + +#define UART1 1 +//#define UART2 2 +#define UART3 3 +//#define UART4 4 + +#ifdef UART1 +#define COM_TX1_Lenth 32 +#define COM_RX1_Lenth 32 +#endif +#ifdef UART2 +#define COM_TX2_Lenth 128 +#define COM_RX2_Lenth 128 +#endif +#ifdef UART3 +#define COM_TX3_Lenth 32 //32ַ +#define COM_RX3_Lenth 32 +#endif +#ifdef UART4 +#define COM_TX4_Lenth 128 +#define COM_RX4_Lenth 128 +#endif + +#define UART_ShiftRight 0 //ͬλ +#define UART_8bit_BRTx (1<<6) //8λ,ɱ䲨 +#define UART_9bit (2<<6) //9λ,̶ +#define UART_9bit_BRTx (3<<6) //9λ,ɱ䲨 + +#define UART1_SW_P30_P31 0 +#define UART1_SW_P36_P37 (1<<6) +#define UART1_SW_P16_P17 (2<<6) +#define UART1_SW_P43_P44 (3<<6) +#define UART2_SW_P10_P11 0 +#define UART2_SW_P46_P47 1 +#define UART3_SW_P00_P01 0 +#define UART3_SW_P50_P51 2 +#define UART4_SW_P02_P03 0 +#define UART4_SW_P52_P53 4 + + +#define TimeOutSet1 5 +#define TimeOutSet2 5 +#define TimeOutSet3 5 +#define TimeOutSet4 5 + +#define BRT_Timer1 1 +#define BRT_Timer2 2 +#define BRT_Timer3 3 +#define BRT_Timer4 4 + +typedef struct +{ + u8 id; //ں + + u8 TX_read; //Ͷָ + u8 TX_write; //дָ + u8 B_TX_busy; //æ־ + + u8 RX_Cnt; //ֽڼ + u8 RX_TimeOut; //ճʱ + u8 B_RX_OK; //տ +} COMx_Define; + +typedef struct +{ + u8 UART_Mode; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx + u8 UART_BRT_Use; //ʹò, BRT_Timer1,BRT_Timer2 + u32 UART_BaudRate; //, ENABLE,DISABLE + u8 Morecommunicate; //ͨѶ, ENABLE,DISABLE + u8 UART_RxEnable; //, ENABLE,DISABLE + u8 BaudRateDouble; //ʼӱ, ENABLE,DISABLE + u8 UART_Interrupt; //жϿ, ENABLE,DISABLE + u8 UART_Priority; //ȼ, Priority_0,Priority_1,Priority_2,Priority_3 + u8 UART_P_SW; //л˿, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44 +} COMx_InitDefine; + +#ifdef UART1 +extern COMx_Define COM1; +extern u8 xdata TX1_Buffer[COM_TX1_Lenth]; //ͻ +extern u8 xdata RX1_Buffer[COM_RX1_Lenth]; //ջ +#endif +#ifdef UART2 +extern COMx_Define COM2; +extern u8 xdata TX2_Buffer[COM_TX2_Lenth]; //ͻ +extern u8 xdata RX2_Buffer[COM_RX2_Lenth]; //ջ +#endif +#ifdef UART3 +extern COMx_Define COM3; +extern u8 xdata TX3_Buffer[COM_TX3_Lenth]; //ͻ +extern u8 xdata RX3_Buffer[COM_RX3_Lenth]; //ջ +#endif +#ifdef UART4 +extern COMx_Define COM4; +extern u8 xdata TX4_Buffer[COM_TX4_Lenth]; //ͻ +extern u8 xdata RX4_Buffer[COM_RX4_Lenth]; //ջ +#endif + +u8 UART_Configuration(u8 UARTx, COMx_InitDefine *COMx); +#ifdef UART1 +void TX1_write2buff(u8 dat); //д뷢ͻ壬ָ+1 +void PrintString1(u8 *puts); +void Printbuffer1(u8 *puts,u8 len); +#endif +#ifdef UART2 +void TX2_write2buff(u8 dat); //д뷢ͻ壬ָ+1 +void PrintString2(u8 *puts); +#endif +#ifdef UART3 +void TX3_write2buff(u8 dat); //д뷢ͻ壬ָ+1 +void PrintString3(u8 *puts); +void Printbuffer3(u8 *puts,u8 len); +#endif +#ifdef UART4 +void TX4_write2buff(u8 dat); //д뷢ͻ壬ָ+1 +void PrintString4(u8 *puts); +#endif + +void UART3_config(void); +extern u8 recv_start_flag; +extern u32 recv_time; +#endif + diff --git a/UART_Set.c b/UART_Set.c new file mode 100644 index 0000000..4b60c76 --- /dev/null +++ b/UART_Set.c @@ -0,0 +1,601 @@ +#include "UART_Set.h" +#include "UART.h" +#include "pwm_control.h" +#include "string.h" +#include "config.h" +#include "timer.h" +#include "STC8xxxx.h" +#include "PWM15bit.h" + +G_Usart g_Usart; +G_answer g_answer; +S_recv s_recv; + +u8 debug = 0x00; + + +/* +жϽյָǷϷ +*/ +void Usart_judge_Data(void) +{ + u8 len = 0; + u8 i, sum; + sum = 0; + g_Usart.ok_flag = 0; + + if((recv_start_flag==1)&&(systick_1ms-recv_time>8)) + { + recv_start_flag=0; + #if DEBUG_ + { + for(i=0;i s_recv.B_max) + { + s_recv.B_Ch[i] = s_recv.B_max; + } + + s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_Ch[i] * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i]; + s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //µʼ + + s_recv.gradual_time[i] = g_Usart.recv_buffer[9] * 10; /*յĽʱ*/ + /* + Ϊ + */ + if (s_recv.gradual_time[i] == 0) + { + s_recv.gradual_time[i] = 1; + } + + /*10mspwmֵ*/ + if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i]) + { + s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) / s_recv.gradual_time[i]; + if (s_pwm.every_change_10ms[i] < 1) + { + s_pwm.every_change_10ms[i] = 1; + } + } + + if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) + { + s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) / s_recv.gradual_time[i]; + if (s_pwm.every_change_10ms[i] < 1) + { + s_pwm.every_change_10ms[i] = 1; + } + } + } + } + + //ڶʹλ + for (i = 0; i < 4; i++) + { + if (g_Usart.recv_buffer[8] & (1 << i)) + { + s_recv.flag1[i+8] = 1; + s_recv.flag2[i+8] = 0; + s_recv.B_Ch[i+8] = g_Usart.recv_buffer[13 - i]; + + if (s_recv.B_Ch[i+8] < s_recv.B_min) + { + s_recv.B_Ch[i+8] = s_recv.B_min; + } + + if (s_recv.B_Ch[i+8] > s_recv.B_max) + { + s_recv.B_Ch[i+8] = s_recv.B_max; + } + + s_pwm.wanttopwm[i+8] = PWM_MAX_VALUE - s_recv.B_Ch[i+8] * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i+8]; + s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //µʼ + + s_recv.gradual_time[i+8] = g_Usart.recv_buffer[9] * 10; /*յĽʱ*/ + + /* + Ϊ + */ + if (s_recv.gradual_time[i+8] == 0) + { + s_recv.gradual_time[i+8] = 1; + } + + /*10mspwmֵ*/ + if (s_pwm.wanttopwm[i+8] > s_pwm.currpwm[i+8]) + { + s_pwm.every_change_10ms[i+8] = (float)(s_pwm.wanttopwm[i+8] - s_pwm.currpwm[i+8]) / s_recv.gradual_time[i+8]; + if (s_pwm.every_change_10ms[i+8] < 1) + { + s_pwm.every_change_10ms[i+8] = 1; + } + } + + + if (s_pwm.wanttopwm[i+8] < s_pwm.currpwm[i+8]) + { + s_pwm.every_change_10ms[i+8] = (float)(s_pwm.currpwm[i+8] - s_pwm.wanttopwm[i+8]) / s_recv.gradual_time[i+8]; + if (s_pwm.every_change_10ms[i+8] < 1) + { + s_pwm.every_change_10ms[i+8] = 1; + } + } + } + } + + g_answer.short_answer_flag=0x01; + break; + + + //ģʽݼѭ + case USART_CMD_SET_MODE: + g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SET_MODE_A; + if(debug) + { + PrintString1("change light"); + } + + for (i = 0; i < 8; i++) + { + if (g_Usart.recv_buffer[7] & (1 << i)) + { + s_recv.flag1[i] = 0; + s_recv.flag2[i] = 1; + s_recv.mode[i] = g_Usart.recv_buffer[9]; + s_recv.pwm_step[i] = g_Usart.recv_buffer[11]; + + if (s_recv.mode[i] == 0x00) + { + if (g_Usart.recv_buffer[10] == 0x00) + { + s_recv.forward[i] = 0; + } + + if (g_Usart.recv_buffer[10] == 0x01) + { + s_recv.forward[i] = 1; + } + + if (g_Usart.recv_buffer[10] == 0x02) //ת + { + if (s_recv.forward[i] == 0x01) + { + s_recv.forward[i] = 0x00; + continue; // Ϊֹתֱ֮ӽһ״̬ + } + + if (s_recv.forward[i] == 0x00) + { + s_recv.forward[i] = 0x01; + continue; + } + } + } + } + } + + + for (i = 0; i < 4; i++) + { + if (g_Usart.recv_buffer[8] & (1 << i)) + { + s_recv.flag1[i+8] = 0; + s_recv.flag2[i+8] = 1; + s_recv.mode[i+8] = g_Usart.recv_buffer[9]; + s_recv.pwm_step[i+8] = g_Usart.recv_buffer[11]; + + if (s_recv.mode[i+8] == 0x00) + { + if (g_Usart.recv_buffer[10] == 0x00) + { + s_recv.forward[i+8] = 0; + } + + if (g_Usart.recv_buffer[10] == 0x01) + { + s_recv.forward[i+8] = 1; + } + + if (g_Usart.recv_buffer[10] == 0x02) //ת + { + if (s_recv.forward[i+8] == 0x01) + { + s_recv.forward[i+8] = 0x00; + continue; // Ϊֹתֱ֮ӽһ״̬ + } + + if (s_recv.forward[i+8] == 0x00) + { + s_recv.forward[i+8] = 0x01; + continue; + } + } + } + } + } + g_answer.short_answer_flag=0x01; + break; + + + // + case USART_CMD_ALL_BRIGHTNESS: + g_answer.short_answer[UART_FMT_CMD]=USART_CMD_ALL_BRIGHTNESS_A; + + if(debug) + { + PrintString1("global light"); + } + +// s_recv.changeflag = 1; + if (g_Usart.recv_buffer[7] & (1 << 5)) //ȫֿɵ + { + s_recv.B_min = g_Usart.recv_buffer[10]; + for (i = 0; i < 12; i++) + { + if ( s_pwm.currvalue[i] < s_recv.B_min) + { + s_pwm.currvalue[i] = s_recv.B_min; + } + } + } + + if (g_Usart.recv_buffer[7] & (1 << 6)) //ȫֿɵ + { + s_recv.B_max = g_Usart.recv_buffer[9]; + for (i = 0; i < 12; i++) + { + if ( s_pwm.currvalue[i] > s_recv.B_max) + { + s_pwm.currvalue[i] = s_recv.B_max; + } + } + } + + if (g_Usart.recv_buffer[7] & (1 << 7)) //ȫ + { + s_recv.global_brightness = g_Usart.recv_buffer[8]; + + for (i = 0; i < 12; i++) + { +// s_pwm.wanttopwmflash[i] = PWM_MAX_VALUE - s_pwm.currvalue[i] * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i]; + + s_recv.flag1[i] = 1; + s_recv.flag2[i] = 0; + + s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_Ch[i] * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i]; + s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; //µʼ + if(s_pwm.wanttopwm[i] > PWM_MAX_VALUE) + { + s_pwm.wanttopwm[i] = PWM_MAX_VALUE; + } + + /*10mspwmֵ*/ + if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i]) + { + s_pwm.every_change_10ms[i] = (float)(s_pwm.wanttopwm[i] - s_pwm.currpwm[i]) / s_recv.gradual_time[i]; + if (s_pwm.every_change_10ms[i] < 1) + { + s_pwm.every_change_10ms[i] = 1; + } + } + + if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) + { + s_pwm.every_change_10ms[i] = (float)(s_pwm.currpwm[i] - s_pwm.wanttopwm[i]) / s_recv.gradual_time[i]; + if (s_pwm.every_change_10ms[i] < 1) + { + s_pwm.every_change_10ms[i] = 1; + } + } + } + } + + + g_answer.short_answer_flag=0x01; + break; + + + //ÿ״̬ + case USART_CMD_SWITCH_STATUS: + g_answer.short_answer[UART_FMT_CMD]=USART_CMD_SWITCH_STATUS_A; + if(debug) + { + PrintString1("switch state"); + } + + for (i = 0; i < 8; i++) + { + if (g_Usart.recv_buffer[7] & (1 << i)) + { + if (g_Usart.recv_buffer[9 + i] == 0x01) + { + s_recv.key_status[i] = 0x01; + //s_pwm.currvalue[i] = s_pwm.thenvalue[i]; + Open_Light(i); + } + + if (g_Usart.recv_buffer[9 + i] == 0x00) + { + //s_pwm.thenvalue[i] = s_pwm.currvalue[i]; + Close_Light(i); + s_recv.flag1[i] = 0; + s_recv.flag2[i] = 0; + s_recv.mode[i] = 2; + s_recv.key_status[i] = 0x00; + } + + if (g_Usart.recv_buffer[9 + i] == 0x02) + { + if (s_recv.key_status[i] == 0x00) + { + s_recv.key_status[i] = 0x01; + //s_pwm.currvalue[i] = s_pwm.thenvalue[i]; + Open_Light(i); + continue; + } + + if (s_recv.key_status[i] == 0x01) + { + //s_pwm.thenvalue[i] = s_pwm.currvalue[i]; + Close_Light(i); + s_recv.flag1[i] = 0; + s_recv.flag2[i] = 0; + s_recv.mode[i] = 2; + s_recv.key_status[i] = 0x00; + continue; + } + } + } + } + + + for (i = 0; i < 4; i++) + { + if (g_Usart.recv_buffer[8] & (1 << i)) + { + if (g_Usart.recv_buffer[9 + 8 + i] == 0x01) + { + s_recv.key_status[i+8] = 0x01; + //s_pwm.currvalue[i+8] = s_pwm.thenvalue[i]; + Open_Light(i+8); + } + + if (g_Usart.recv_buffer[9 +8 + i] == 0x00) + { + //s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8]; + Close_Light(i+8); + s_recv.flag1[i+8] = 0; + s_recv.flag2[i+8] = 0; + s_recv.mode[i+8] = 2; + s_recv.key_status[i+8] = 0x00; + } + + if (g_Usart.recv_buffer[9 + 8 + i] == 0x02) + { + if (s_recv.key_status[i+8] == 0x00) + { + s_recv.key_status[i+8] = 0x01; + //s_pwm.currvalue[i+8] = s_pwm.thenvalue[i]; + Open_Light(i+8); + continue; + } + + + if (s_recv.key_status[i+8] == 0x01) + { + //s_pwm.thenvalue[i+8] = s_pwm.currvalue[i+8]; + Close_Light(i+8); + s_recv.flag1[i+8] = 0; + s_recv.flag2[i+8] = 0; + s_recv.mode[i+8] = 2; + s_recv.key_status[i+8] = 0x00; + continue; + } + } + } + } + g_answer.short_answer_flag=0x01; + break; + case USART_CMD_DEBUG_SET: + g_answer.short_answer[UART_FMT_CMD]=USART_CMD_DEBUG_SET_A; + if(debug) + { + PrintString1("debug"); + } + debug = g_Usart.recv_buffer[7]; + g_answer.short_answer_flag=0x01; + break; + case Usart_CMD_Version: + g_answer.version_answer[UART_FMT_CMD]=Usart_CMD_Version_A; + g_answer.version_answer_flag=0x01; + if(debug) + { + PrintString1("version"); + } + break; + } + g_Usart.ok_flag=0; + } +} + +void Usart_answer(void) +{ + u8 i=0; + u8 checksum=0; + if(g_answer.long_answer_flag) + { + g_answer.long_answer[UART_FMT_ADDR_TX]=ADDR_RX; + g_answer.long_answer[UART_FMT_TYPE]=g_Usart.Sn; + g_answer.long_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; + g_answer.long_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; + g_answer.long_answer[UART_FMT_LEN]=0x14; + g_answer.long_answer[7] = s_recv.global_brightness; + for(i=0;i<12;i++) + { + g_answer.long_answer[8+i] = s_pwm.currvalue[11-i]; + if(s_recv.key_status[i] == 0x01) + { + g_answer.long_answer[8+i] |= 0x80; + } + } + checksum=sumfunc(g_answer.long_answer,0x14); + g_answer.long_answer[UART_FMT_CKS]=checksum; + + Printbuffer3(g_answer.long_answer,0x14); //3ӡ + + if(debug) + { +// PrintString1("long answer"); + } + g_answer.long_answer_flag=0; + memset(g_Usart.recv_buffer,0,32); + } + if(g_answer.short_answer_flag) + { + g_answer.short_answer[UART_FMT_ADDR_TX]=ADDR_RX; + g_answer.short_answer[UART_FMT_TYPE]=g_Usart.Sn; + g_answer.short_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; + g_answer.short_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; + g_answer.short_answer[UART_FMT_LEN]=0x07; + checksum=sumfunc(g_answer.short_answer,0x07); + g_answer.short_answer[UART_FMT_CKS]=checksum; + Printbuffer3(g_answer.short_answer,0x07); + if(debug) + { + PrintString1("short answer"); + } + + + g_answer.short_answer_flag=0; + memset(g_Usart.recv_buffer,0,32); + } + + if(g_answer.version_answer_flag) + { + g_answer.version_answer[UART_FMT_ADDR_TX]=ADDR_RX; + g_answer.version_answer[UART_FMT_TYPE]=g_Usart.Sn; + g_answer.version_answer[UART_FMT_DEV_TYPE]=DEV_TYPE; + g_answer.version_answer[UART_FMT_ADDR_RX]=g_Usart.recv_buffer[UART_FMT_ADDR_TX]; + g_answer.version_answer[UART_FMT_LEN]=0x09; + g_answer.version_answer[UART_FMT_CMD+1]=Version_High; + g_answer.version_answer[UART_FMT_CMD+2]=Version_Low; + + checksum=sumfunc(g_answer.version_answer,0x09); + g_answer.version_answer[UART_FMT_CKS]=checksum; + Printbuffer3(g_answer.version_answer,0x09); + if(debug) + { + PrintString1("version_answer"); + } + g_answer.version_answer_flag=0; + memset(g_Usart.recv_buffer,0,32); + } + memset(&g_answer,0,sizeof(g_answer)); +} + +u8 sumfunc(u8* answer,u8 len) +{ + u8 m = 0; + u8 j; + for (j = 0; j < len; j++) + { + if (5 == j) continue; + m += *(answer+j); + } + return ~m; +} \ No newline at end of file diff --git a/UART_Set.h b/UART_Set.h new file mode 100644 index 0000000..8a1bfe2 --- /dev/null +++ b/UART_Set.h @@ -0,0 +1,100 @@ +#ifndef _UART_SET_H +#define _UART_SET_H +#include "STC8xxxx.h" +#define USART_CMD_QUEST 0x20 +#define USART_CMD_SET_BRIGHTNESS 0x21 +#define USART_CMD_SET_MODE 0x22 +#define USART_CMD_ALL_BRIGHTNESS 0x23 +#define USART_CMD_SWITCH_STATUS 0x24 +#define USART_CMD_DEBUG_SET 0x25 //Դ㹻ҲÿƣĬΪ +#define Usart_CMD_Version 0x26 + +#define USART_TEST_MODE 0xE0 +#define USART_TEST_DATA 0xE1 + +#define USART_CMD_QUEST_A 0x30 +#define USART_CMD_SET_BRIGHTNESS_A 0x31 +#define USART_CMD_SET_MODE_A 0x32 +#define USART_CMD_ALL_BRIGHTNESS_A 0x33 +#define USART_CMD_SWITCH_STATUS_A 0x34 +#define USART_CMD_DEBUG_SET_A 0x35 +#define Usart_CMD_Version_A 0x36 + +#define USART_TEST_MODE_A 0xF0 +#define USART_TEST_DATA_A 0xF1 + +#define ADDR_RX 0x01 //C12_CH12ĵַ +#define DEV_TYPE 0x03 + +#define Version_High 0x13 //汾 +#define Version_Low 0x00 + +typedef enum +{ + UART_FMT_ADDR_TX = 0x00, + UART_FMT_TYPE, + UART_FMT_DEV_TYPE, + UART_FMT_ADDR_RX, + UART_FMT_LEN, + UART_FMT_CKS, + UART_FMT_CMD, +} UART_FMT_e; + +typedef struct Usart +{ + u8 lastsn; + u8 Sn; + u8 ok_flag; + u8 recv_buffer[32]; +}xdata G_Usart; + +typedef struct answer +{ + u8 short_answer[7]; + u8 long_answer[20]; + u8 long_answer_flag; + u8 short_answer_flag; + u8 version_answer_flag; + u8 version_answer[9]; +}xdata G_answer; + +//յЧݵĽṹ + /* + * ĸͨǷʹܱ־λ + * flag1ָյ0x21 + * flag2ָյ0x22 + * ߻⣬յ + */ +typedef struct +{ + u16 flag1[12]; + u16 flag2[12]; + + //0x21 + u16 gradual_time[12]; + u16 B_Ch[12]; + + //0x22 + u16 mode[12]; + u16 forward[12]; + u16 pwm_step[12]; + + //0x23 + u16 global_brightness; + u16 B_max; + u16 B_min; +// u16 changeflag; + + //0x24 + u16 key_status[12]; +}xdata S_recv; + +extern S_recv s_recv; +extern G_answer g_answer; +extern G_Usart g_Usart; +void Usart_Deal_Data(void); +void Usart_judge_Data(void); +void Usart_answer(void); +u8 sumfunc(u8* answer,u8 len); +extern u8 debug; +#endif \ No newline at end of file diff --git a/WDT.c b/WDT.c new file mode 100644 index 0000000..1625f12 --- /dev/null +++ b/WDT.c @@ -0,0 +1,35 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 "WDT.h" + +//======================================================================== +// : void WDT_Inilize(WDT_InitTypeDef *WDT) +// : Źʼ. +// : WDT: ṹ,οWDT.hĶ. +// : none. +// 汾: V1.0, 2020-09-16 +//======================================================================== +void WDT_Inilize(WDT_InitTypeDef *WDT) +{ + if(WDT->WDT_Enable == ENABLE) WDT_CONTR = D_EN_WDT; //ʹܿŹ + + WDT_PS_Set(WDT->WDT_PS); //ŹʱʱӷƵϵ WDT_SCALE_2,WDT_SCALE_4,WDT_SCALE_8,WDT_SCALE_16,WDT_SCALE_32,WDT_SCALE_64,WDT_SCALE_128,WDT_SCALE_256 + if(WDT->WDT_IDLE_Mode == WDT_IDLE_STOP) WDT_CONTR &= ~0x08; //IDLEģʽֹͣ + else WDT_CONTR |= 0x08; //IDLEģʽ +} + +/********************* Ź *************************/ +void WDT_Clear (void) +{ + WDT_CONTR |= D_CLR_WDT; // ι +} diff --git a/WDT.h b/WDT.h new file mode 100644 index 0000000..ebc5c42 --- /dev/null +++ b/WDT.h @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 __WDT_H +#define __WDT_H + +#include "config.h" + +#define WDT_IDLE_STOP 0 +#define WDT_IDLE_RUN 1 + +#define WDT_SCALE_2 0 /* WDT Timeout=(12*32768*SCALE)/SYSclk */ +#define WDT_SCALE_4 1 +#define WDT_SCALE_8 2 +#define WDT_SCALE_16 3 +#define WDT_SCALE_32 4 +#define WDT_SCALE_64 5 +#define WDT_SCALE_128 6 +#define WDT_SCALE_256 7 + +typedef struct +{ + u8 WDT_Enable; //Źʹ ENABLE,DISABLE + u8 WDT_IDLE_Mode; //IDLEģʽֹͣ WDT_IDLE_STOP,WDT_IDLE_RUN + u8 WDT_PS; //ŹʱʱӷƵϵ WDT_SCALE_2,WDT_SCALE_4,WDT_SCALE_8,WDT_SCALE_16,WDT_SCALE_32,WDT_SCALE_64,WDT_SCALE_128,WDT_SCALE_256 +} WDT_InitTypeDef; + +void WDT_Inilize(WDT_InitTypeDef *WDT); +void WDT_Clear (void); + +#endif diff --git a/config.h b/config.h new file mode 100644 index 0000000..934b182 --- /dev/null +++ b/config.h @@ -0,0 +1,19 @@ +#ifndef __CONFIG_H +#define __CONFIG_H + +/*********************************************************/ + +#define MAIN_Fosc 22118400L //ʱ +//#define MAIN_Fosc 12000000L //ʱ +//#define MAIN_Fosc 11059200L //ʱ +//#define MAIN_Fosc 5529600L //ʱ +//#define MAIN_Fosc 24000000L //ʱ + +#define STC8Gxx //STC8Gϵ + +/*********************************************************/ +#define DEBUG_ 0 +#include "STC8xxxx.H" + + +#endif diff --git a/key.c b/key.c new file mode 100644 index 0000000..52172e0 --- /dev/null +++ b/key.c @@ -0,0 +1,155 @@ +#include "key.h" +#include "GPIO.h" +#include "timer.h" +#include "string.h" +#include "pwm_control.h" +KEY_t g_Key; + +void Key_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure1; //ṹ + /***********************************1*******************************************/ + GPIO_InitStructure1.Pin = GPIO_Pin_4; //ָҪʼIO 4 + GPIO_InitStructure1.Mode = GPIO_PullUp; //ָIOʽ,GPIO_PullUp + GPIO_Inilize(GPIO_P4,&GPIO_InitStructure1); //ʼ + memset(&g_Key, 0, sizeof(g_Key)); +} + +void Key_ScanTask(void) +{ + u8 i; + static u32 update_10ms = 0; + + if (systick_1ms - update_10ms > 10) + { + update_10ms = systick_1ms; + + for (i = 0; i < KEY_CHN_MAX; i++) + { + switch (g_Key.KEY_STA[i]) + { + case KEY_STA_S0: + if ( P44 == KEY_PRESS ) + { + if (g_Key.delayCnt[i] < KEY_DELAY_COUNT) + { + g_Key.delayCnt[i]++; + } + else + { + g_Key.KEY_STA[i] = KEY_STA_S1; // + g_Key.key_time[i] = 0; + g_Key.delayCnt[i] = 0; + } + } + else + { + g_Key.delayCnt[i] = 0; + g_Key.KEY_STA[i] = KEY_STA_S0; + g_Key.key_val[i] = KEY_VAL_NOT; + } + break; + case KEY_STA_S1: + g_Key.key_time[i] ++; + if ( g_Key.key_time[i] < KEY_DELAY_COUNT_LONG ) + { + if ( P44 == KEY_LOOSEN ) //ɿ + { + g_Key.key_val[i] = KEY_VAL_SHORT_PRESS; //̰ɿ + g_Key.key_time[i] = 0; + g_Key.KEY_STA[i] = KEY_STA_S0; + } + } + else + { + g_Key.KEY_STA[i] = KEY_STA_S2; + g_Key.key_time[i] = 0; + g_Key.key_longPress[i] = KEY_VAL_SINGLE_LONG_PRESS; // + g_Key.key_val[i] = KEY_VAL_CONT_LONG_PRESS; // + } + break; + + case KEY_STA_S2: + g_Key.key_longPress[i] = KEY_VAL_NOT; + if ( P44 == KEY_LOOSEN ) + { + g_Key.KEY_STA[i] = KEY_STA_S0; + g_Key.key_val[i] = KEY_VAL_LONG_PRESS_LOOSEN; //ɿ + } + break; + } + } + } +} + + +void KEY_TEST(void) +{ + u8 flag; + if (g_Key.key_val[KEY_CH1] == KEY_VAL_SHORT_PRESS) + { + g_Key.key_val[KEY_CH1] = KEY_VAL_NOT; + s_pwm.key_value++; + switch (s_pwm.key_value) + { + case 1: + s_pwm.currpwm[0] = 2000ul; //90% + s_pwm.currvalue[0]=0x5A; + break; + case 2: + s_pwm.currpwm[1] = 2000ul; + s_pwm.currvalue[1]=0x5A; + break; + case 3: + s_pwm.currpwm[2] = 2000ul; + s_pwm.currvalue[2]=0x5A; + break; + case 4: + s_pwm.currpwm[3] = 2000ul; + s_pwm.currvalue[3]=0x5A; + break; + case 5: + s_pwm.currpwm[4] = 2000ul; + s_pwm.currvalue[4]=0x5A; + break; + case 6: + s_pwm.currpwm[5] = 2000ul; + s_pwm.currvalue[5]=0x5A; + break; + case 7: + s_pwm.currpwm[6] = 2000ul; + s_pwm.currvalue[6]=0x5A; + break; + case 8: + s_pwm.currpwm[7] = 2000ul; + s_pwm.currvalue[7]=0x5A; + break; + case 9: + s_pwm.currpwm[8] = 2000ul; + s_pwm.currvalue[8]=0x5A; + break; + case 10: + s_pwm.currpwm[9] = 2000ul; + s_pwm.currvalue[9]=0x5A; + break; + case 11: + s_pwm.currpwm[10] = 2000ul; + s_pwm.currvalue[10]=0x5A; + break; + case 12: + s_pwm.currpwm[11] = 2000ul; + s_pwm.currvalue[11]=0x5A; + break; + case 13: + for(flag=0;flag<12;flag++) + { + s_pwm.currpwm[flag] = PWM_MAX_VALUE; + s_pwm.currvalue[flag]=0x00; + } + s_pwm.key_value = 0; + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/key.h b/key.h new file mode 100644 index 0000000..51ace0a --- /dev/null +++ b/key.h @@ -0,0 +1,50 @@ +#ifndef KEY_H +#define KEY_H +#include "STC8xxxx.h" +#define DELAY_TIME 10 + +#define KEY_DELAY_COUNT 2 +#define KEY_DELAY_COUNT_LONG 100 +#define KEY_PRESS 0 +#define KEY_LOOSEN 1 + +typedef enum +{ + KEY_CH1, + KEY_CHN_MAX, +}KEY_CHN_e; + +typedef enum +{ + KEY_STA_S0 = 0, + KEY_STA_S1 = 1, + KEY_STA_S2 = 2, +}KEY_STA_e; + +typedef enum +{ + KEY_VAL_NOT, //û + KEY_VAL_SHORT_PRESS, // + KEY_VAL_CONT_LONG_PRESS, // + KEY_VAL_SINGLE_LONG_PRESS, // + KEY_VAL_LONG_PRESS_LOOSEN, //ɿ +}KEY_VAL_e; + +typedef struct +{ + u8 Key_pin[KEY_CHN_MAX]; + u8 KEY_STA[KEY_CHN_MAX]; + u8 key_val[KEY_CHN_MAX]; //0:û, 1:̰ɿ, 2:, 3:ɿ + u8 key_longPress[KEY_CHN_MAX]; //0:û, 1: + u8 key_time[KEY_CHN_MAX]; + u8 delayCnt[KEY_CHN_MAX]; +}KEY_t; + + +void Key_Init(void); +void Key_ScanTask(void); +void KEY_TEST(void); + +extern KEY_t g_Key; + +#endif \ No newline at end of file diff --git a/light_V19.uvgui.cc b/light_V19.uvgui.cc new file mode 100644 index 0000000..c86c1ab --- /dev/null +++ b/light_V19.uvgui.cc @@ -0,0 +1,1923 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + + + + + + + + 38003 + Registers + 188 122 + + + 346 + Code Coverage + 1410 160 + + + 204 + Performance Analyzer + 1570 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 106 106 106 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 300 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 8 + 757 + 2564 + 1407 + + + + 0 + + 638 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000600000005000000010000002E453A5C4769745F50726F6A6563745F536F7572636F64655C5243555F4331325F44696D6D696E675C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF30453A5C4769745F50726F6A6563745F536F7572636F64655C5243555F4331325F44696D6D696E675C434F4E4649472E480000000008434F4E4649472E4800000000FFDC7800FFFFFFFF34453A5C4769745F50726F6A6563745F536F7572636F64655C5243555F4331325F44696D6D696E675C53544152545F494E49542E48000000000C53544152545F494E49542E4800000000BECEA100FFFFFFFF32453A5C4769745F50726F6A6563745F536F7572636F64655C5243555F4331325F44696D6D696E675C554152545F5345542E48000000000A554152545F5345542E4800000000F0A0A100FFFFFFFF35453A5C4769745F50726F6A6563745F536F7572636F64655C5243555F4331325F44696D6D696E675C70776D5F636F6E74726F6C2E63000000000D70776D5F636F6E74726F6C2E6300000000BCA8E100FFFFFFFF32453A5C4769745F50726F6A6563745F536F7572636F64655C5243555F4331325F44696D6D696E675C554152545F5365742E63000000000A554152545F5365742E63000000009CC1B600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000004104000076000000FC0900009A040000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 440100004F0000007007000015010000 + + + 16 + 41040000760000006D0A00003C010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100005A040000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100005A040000 + + + 16 + 8A000000A100000006020000B9030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 8A000000A10000004204000067010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100005A040000 + + + 16 + 8A000000A100000006020000B9030000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100005A040000 + + + 16 + 8A000000A100000006020000B9030000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000008E040000FC06000024050000 + + + 16 + 8A000000A10000004204000067010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000F102000070070000CB030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 199 + 199 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008E040000FC06000024050000 + + + 16 + 8A000000A10000004204000067010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 8A000000A10000004204000067010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 8A000000A10000004204000067010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A10000004204000067010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 8A000000A10000004204000067010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 8A000000A10000004204000067010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 8A000000A10000004204000067010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D0100005A040000 + + + 16 + 8A000000A100000006020000B9030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008E040000FA06000024050000 + + + 16 + 8A000000A10000004204000067010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008E040000FA06000024050000 + + + 16 + 8A000000A100000006020000B9030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008E040000FA06000024050000 + + + 16 + 8A000000A100000006020000B9030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000008E040000FA06000024050000 + + + 16 + 8A000000A100000006020000B9030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 8A000000A10000004204000067010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000003D050000FF06000050050000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 8A000000A1000000CA010000B4010000 + + + + 3312 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000150100007007000019010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E65002000000000000041040000760000006D0A00003C010000440100004F00000070070000150100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000001030000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000002D090000760000006D0A000028030000300600004F000000700700000103000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F0000004401000073040000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000FD020000760000003D0400009A040000000000004F00000040010000730400000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000ED02000070070000F102000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000FD020000180300006D0A0000F203000000000000F102000070070000CB03000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000F1020000BC030000CB03000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF0000000073040000FF06000077040000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000FD0200009E040000FA090000640500000000000077040000FF0600003D0500000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2869 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000008C8EDBCFEB0E6B1BE9600000000000000130008C8EDBCFEB0E6B1BE096375727276616C75650A6B65795F737461747573076375727270776D06735F726563760D6465616C5F636F6D6D616E64310C735F726563762E666C61673105735F70776D0C56657273696F6E5F486967680564656275670F433132B5F7B9E2BDA5B1E4CAB1BCE415496E5F526561645F4D435553797374656D5F436D6404656C7365135564705F496E7465726E616C5F53656172636811675F6170702E706F7765725F73746174650A4750494F5F50494E5F3215506F7765725F4D616E6167656D656E745F5461736B0E4465765F57616B655F5374617465155564705F496E7465726E616C5F416E616C7973697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000002001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 2560 + 1440 + + + + + + 1 + 0 + + 100 + 5 + + .\main.c + 21 + 67 + 108 + 1 + + 0 + + + CONFIG.H + 0 + 1 + 1 + 1 + + 0 + + + START_INIT.H + 0 + 1 + 1 + 1 + + 0 + + + UART_SET.H + 45 + 1 + 29 + 1 + + 0 + + + .\pwm_control.c + 63 + 69 + 105 + 1 + + 0 + + + .\UART_Set.c + 22 + 103 + 121 + 1 + + 0 + + + + +
diff --git a/light_V19.uvopt b/light_V19.uvopt new file mode 100644 index 0000000..5d3ed5e --- /dev/null +++ b/light_V19.uvopt @@ -0,0 +1,293 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 35000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 9 + + + + + + + + + + + BIN\STCMON51.DLL + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\GPIO.c + GPIO.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\main.c + main.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + .\UART.C + UART.C + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + .\UART_Set.c + UART_Set.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + .\pwm_control.c + pwm_control.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + .\Start_Init.c + Start_Init.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + .\PWM15bit.c + PWM15bit.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + .\timer.c + timer.c + 0 + 0 + + + 1 + 9 + 1 + 0 + 0 + 0 + .\key.c + key.c + 0 + 0 + + + 1 + 10 + 1 + 0 + 0 + 0 + .\WDT.c + WDT.c + 0 + 0 + + + +
diff --git a/light_V19.uvproj b/light_V19.uvproj new file mode 100644 index 0000000..96ee75c --- /dev/null +++ b/light_V19.uvproj @@ -0,0 +1,435 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + 0 + + + STC8G2K64S4 Series + STC + IRAM(0-0xFF) XRAM(0-0x07FF) IROM(0-0xFFF8) CLOCK(35000000) MODP2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 63332 + STC8.H + + + + + + + + + + + 0 + 0 + D:\keil_v5\C51\BIN\ + + + + STC\ + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + BLV_C12_Dimm_V19 + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -pDP8051 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 9 + + + + + + + + + + + + + + BIN\STCMON51.DLL + + + + + 1 + 0 + 0 + 0 + 0 + -1 + + 0 + + "" () + + + + + 0 + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0xfff9 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x800 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + GPIO.c + 1 + .\GPIO.c + + + main.c + 1 + .\main.c + + + UART.C + 1 + .\UART.C + + + UART_Set.c + 1 + .\UART_Set.c + + + pwm_control.c + 1 + .\pwm_control.c + + + Start_Init.c + 1 + .\Start_Init.c + + + PWM15bit.c + 1 + .\PWM15bit.c + + + timer.c + 1 + .\timer.c + + + key.c + 1 + .\key.c + + + WDT.c + 1 + .\WDT.c + + + + + + + +
diff --git a/main.c b/main.c new file mode 100644 index 0000000..65d905c --- /dev/null +++ b/main.c @@ -0,0 +1,128 @@ +#include "config.h" +#include "gpio.h" +#include "UART.h" +#include "string.h" +#include "UART_Set.h" +#include "pwm_control.h" +#include "Start_Init.h" +#include "key.h" +#include "WDT.h" +/************* ˵ ************** + +̻STC8H8K64UΪоƬʵ8бдԣSTC8GSTC8HϵоƬͨòο. + +˫ȫ˫жϷʽշͨѶ + +ͨPCMCU, MCUյͨڰյԭ, Ĭϲʣ115200,N,8,1. + +ͨ UART.h ͷļ UART1~UART4 壬ͬͨĴͨš + +öʱʷʹ1Tģʽ(ǵͲ12T)ѡɱʱƵʣ߾ȡ + +ʱ, ѡʱ 22.1184MHz (ļ"config.h"޸). + + +/******************* IOú *******************/ + + +void GPIO1_config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; //ṹ + + GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + GPIO_InitStructure.Mode = GPIO_PullUp; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P3,&GPIO_InitStructure); //ʼ +} + +/*************** ڳʼ *****************/ +void UART1_config(void) +{ + COMx_InitDefine COMx_InitStructure; //ṹ + COMx_InitStructure.UART_Mode = UART_8bit_BRTx; //ģʽ, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx + COMx_InitStructure.UART_BRT_Use = BRT_Timer1; //ʹò, BRT_Timer1, BRT_Timer2 (ע: 2̶ʹBRT_Timer2) + COMx_InitStructure.UART_BaudRate = 115200; //, һ 110 ~ 115200 + COMx_InitStructure.UART_RxEnable = ENABLE; //, ENABLEDISABLE + COMx_InitStructure.BaudRateDouble = DISABLE; //ʼӱ, ENABLEDISABLE + COMx_InitStructure.UART_Interrupt = ENABLE; //ж, ENABLEDISABLE + COMx_InitStructure.UART_Priority = Priority_0; //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; //л˿, UART1_SW_P30_P31,UART1_SW_P36_P37,UART1_SW_P16_P17,UART1_SW_P43_P44 + UART_Configuration(UART1, &COMx_InitStructure); //ʼ1 UART1,UART2,UART3,UART4 + + //PrintString1("STC8H8K64U UART1 Test Programme!\r\n"); //UART1һַ +} + +/********************WDT INT ********************/ +void WDT_config(void) +{ + WDT_InitTypeDef WDT_InitStructure; //ṹ + + WDT_InitStructure.WDT_Enable = ENABLE; //жʹ ENABLEDISABLE + WDT_InitStructure.WDT_IDLE_Mode = WDT_IDLE_STOP; //IDLEģʽǷֹͣ WDT_IDLE_STOP,WDT_IDLE_RUN + WDT_InitStructure.WDT_PS = WDT_SCALE_32; //ŹʱʱӷƵϵ WDT_SCALE_2,WDT_SCALE_4,WDT_SCALE_8,WDT_SCALE_16,WDT_SCALE_32,WDT_SCALE_64,WDT_SCALE_128,WDT_SCALE_256 + WDT_Inilize(&WDT_InitStructure); //ʼ +} + +u8 count_flag=0; +void main(void) +{ + GPIO_config(); + UART3_config(); + Start_Init(); + pwm_config(); + Timer2_Init_1ms(); + Key_Init(); + GPIO1_config(); + UART1_config(); + WDT_config(); //Ź629msλ + + PCON &= ~POF; //LVDжϱ־λ + RSTCFG = 0x41; //LVD:2.4Vѹλ + EA = 1; + + if(debug) + { + PrintString1("MCU Start"); + } + + while (1) + { + WDT_Clear(); //幷 + count_flag++; + + //Ϊ˱֤ijѹ2.2V + if(count_flag==1) + { + P10=1; + } + if(count_flag==8) + { + P10=0; + } + if(count_flag==10) + { + count_flag=0; + } + + Usart_judge_Data(); + + Usart_Deal_Data(); + + deal_command1(); + + deal_command2(); + +// checkpwm(); + + show_light(); + + Usart_answer(); + + Key_ScanTask(); + + KEY_TEST(); + + } +} + + + diff --git a/pwm_control.c b/pwm_control.c new file mode 100644 index 0000000..9b9fdf1 --- /dev/null +++ b/pwm_control.c @@ -0,0 +1,358 @@ +#include "pwm_control.h" +#include "GPIO.h" +#include "STC8xxxx.h" +#include "PWM15bit.h" +#include "timer.h" +#include "UART_Set.h" +#include "string.h" +S_PWM s_pwm; +/* +*1.5.0/5.1ijʼ +*2.ʼPWM +*3.LED_DRV_12V_ENõƬ +*/ +/******************* IOú *******************/ +void GPIO_config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; //ṹ + /***********************************1*******************************************/ + GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_1; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + GPIO_InitStructure.Mode = GPIO_PullUp; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P5,&GPIO_InitStructure); //ʼ + + /***********************************2*******************************************/ + GPIO_InitStructure.Pin = GPIO_Pin_All; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P0,&GPIO_InitStructure); //ʼ + + GPIO_InitStructure.Pin = GPIO_Pin_Left; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P2,&GPIO_InitStructure); //ʼ + + /***********************************3*******************************************/ + GPIO_InitStructure.Pin = GPIO_Pin_0; //ָҪʼIO, GPIO_Pin_0 ~ GPIO_Pin_7 + GPIO_InitStructure.Mode = GPIO_OUT_PP; //ָIOʽ,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P1,&GPIO_InitStructure); //ʼ +} + +void pwm_config(void) +{ + u8 i; + PWM15_InitTypeDef PWM15_InitStructure; + + PWM15_InitStructure.PWM_Enable = ENABLE; //PWMʹ, ENABLE, DISABLE + PWM15_InitStructure.PWM_Period = 0x04E2; //PWM, 1250,ƵΪ16khz + PWM15_InitStructure.PWM_Clock_Sel = PWMn_CLK_SYS; //ʱԴѡ, PWMn_CLK_SYS, PWMn_CLK_TM2 + PWM15_InitStructure.PWM_Clock_PS = 0; //ϵͳʱӷƵ(PS+1Ƶ), 0~15 + PWM15_InitStructure.PWM_Counter = ENABLE; //ʹ, ENABLE, DISABLE + + PWM15_Init(PWM0,&PWM15_InitStructure); //ʼPWM0 + PWM15_Init(PWM2,&PWM15_InitStructure); //ʼPWM2 + + PWM15Duty(PWM00,initial_Val); //PWM_ID, ͵ƽλ, ߵƽλ + PWM15Duty(PWM01,initial_Val); //PWM_ID, ͵ƽλ, ߵƽλ + PWM15Duty(PWM02,initial_Val); //PWM_ID, ͵ƽλ, ߵƽλ + PWM15Duty(PWM03,initial_Val); //PWM_ID, ͵ƽλ, ߵƽλ + PWM15Duty(PWM04,initial_Val); + PWM15Duty(PWM05,initial_Val); + PWM15Duty(PWM06,initial_Val); + PWM15Duty(PWM07,initial_Val); + + PWM15Duty(PWM20,initial_Val); + PWM15Duty(PWM21,initial_Val); + PWM15Duty(PWM22,initial_Val); + PWM15Duty(PWM23,initial_Val); + + memset(&s_pwm,0,sizeof(s_pwm)); + for(i=0;i<12;i++) + { + s_pwm.currpwm[i]=initial_Val; + } + PWMChannelCtrl(PWM00,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM01,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM02,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM03,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM04,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM05,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM06,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM07,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + + PWMChannelCtrl(PWM20,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM21,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM22,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + PWMChannelCtrl(PWM23,ENABLE,1,DISABLE,DISABLE,DISABLE); //PWM_ID, ʹ, ʼƽ, PWMж, ڶж, һж + +} + + +//10msһ +void deal_command1(void) +{ + int i=0; + static u32 systick_command1 = 0; + + if (systick_1ms - systick_command1 >= 10) + { + systick_command1 = systick_1ms; + for (i = 0; i < 12; i++) + { + if (s_recv.flag1[i]) + { + if (s_pwm.wanttopwm[i] > s_pwm.currpwm[i]) + { + //s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; + s_pwm.doublecurrpwm[i] += s_pwm.every_change_10ms[i]; + s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i]; + + if(s_recv.global_brightness==0) + { + s_pwm.currvalue[i]=0; + } + else + { + s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness; + } + + if ( s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) + { + s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + } + } + + + //Ҫȴڵǰֵʱ + if (s_pwm.wanttopwm[i] < s_pwm.currpwm[i]) + { + //s_pwm.doublecurrpwm[i] = s_pwm.currpwm[i]; + s_pwm.doublecurrpwm[i] -= s_pwm.every_change_10ms[i]; + s_pwm.currpwm[i] = (u16)s_pwm.doublecurrpwm[i]; + + if(s_recv.global_brightness==0) + { + s_pwm.currvalue[i]=0; + } + else + { + s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness; + } + + if (s_pwm.currpwm[i] < s_pwm.wanttopwm[i] + s_pwm.every_change_10ms[i]) + { + s_pwm.currpwm[i] = 0; + s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + } + } + + + if (s_pwm.wanttopwm[i] == s_pwm.currpwm[i]) + { + s_pwm.currvalue[i] = s_recv.B_Ch[i]; + s_recv.flag1[i] = 0; + } + } + } + } +} + +void deal_command2(void) +{ + int i=0; + static u32 systick_command2 = 0; + if (systick_1ms - systick_command2 >= 10) + { + systick_command2 = systick_1ms; + for (i = 0; i < 12; i++) + { + if (s_recv.flag2[i]) + { + switch (s_recv.mode[i]) + { + //ֹͣģʽ + case 0x00: + //Ƚ + if (s_recv.forward[i] == 0x00) + { + s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_min * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i]; + s_pwm.currpwm[i] += s_recv.pwm_step[i]; + if(s_recv.global_brightness==0) + { + s_pwm.currvalue[i]=0; + } + else + { + s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness; + } + if (s_pwm.currpwm[i] >= s_pwm.wanttopwm[i]) + { + s_recv.flag2[i] = 0; + s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + s_pwm.currvalue[i] = s_recv.B_min; //ڻظ + } + } + // + if (s_recv.forward[i] == 0x01) + { + s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_max * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i]; + if (s_pwm.currpwm[i] <= s_pwm.wanttopwm[i] + s_recv.pwm_step[i]) + { + s_recv.flag2[i] = 0; + s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + s_pwm.currvalue[i] = s_recv.B_max; + } + else + { + s_pwm.currpwm[i] -= s_recv.pwm_step[i]; + if(s_recv.global_brightness==0) + { + s_pwm.currvalue[i]=0; + } + else + { + s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness; + } + } + } + break; + + //˫ѭģʽ + case 0x01: + //ݼ + if (s_recv.forward[i] == 0x00) + { + s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_min * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i]; + s_pwm.currpwm[i] += s_recv.pwm_step[i]; + if(s_recv.global_brightness==0) + { + s_pwm.currvalue[i]=0; + } + else + { + s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness; + } + if (s_pwm.currpwm[i] >= s_pwm.wanttopwm[i]) + { + s_recv.forward[i] = 0x01; + s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + s_pwm.currvalue[i] = s_recv.B_min; //ڻظ + } + } + // + if (s_recv.forward[i] == 0x01) + { + s_pwm.wanttopwm[i] = PWM_MAX_VALUE - s_recv.B_max * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100 * s_recv.key_status[i]; + if (s_pwm.currpwm[i] <= s_pwm.wanttopwm[i] + s_recv.pwm_step[i]) + { + s_recv.forward[i] = 0x00; + s_pwm.currpwm[i] = s_pwm.wanttopwm[i]; + s_pwm.currvalue[i] = s_recv.B_max; + } + else + { + s_pwm.currpwm[i] -= s_recv.pwm_step[i]; + if(s_recv.global_brightness==0) + { + s_pwm.currvalue[i]=0; + } + else + { + s_pwm.currvalue[i] = (PWM_MAX_VALUE - s_pwm.currpwm[i]) * 100 * 100 / PWM_MAX_VALUE / s_recv.global_brightness; + } + } + } + break; + case 0x02: + //ֹͣ + s_recv.flag2[i] = 0; + break; + } + } + } + } +} + + +//ֱӹص,¼״̬ +void Close_Light(u8 i) +{ + s_pwm.currpwm[i]=20001ul; //ߵƽdz⣬ +} + +//򿪵ʱظԭ +void Open_Light(u8 pin) +{ + s_pwm.currpwm[pin] = PWM_MAX_VALUE - s_pwm.currvalue[pin] * PWM_MAX_VALUE * s_recv.global_brightness / 100 / 100; +} + +void PWM_write(u8 i, u16 Val) +{ + switch (i) + { + case 0: + PWM15Duty(PWM07,Val); + break; + case 1: + PWM15Duty(PWM06,Val); + break; + case 2: + PWM15Duty(PWM05,Val); + break; + case 3: + PWM15Duty(PWM04,Val); + break; + case 4: + PWM15Duty(PWM03,Val); + break; + case 5: + PWM15Duty(PWM02,Val); + break; + case 6: + PWM15Duty(PWM01,Val); + break; + case 7: + PWM15Duty(PWM00,Val); + break; + case 8: + PWM15Duty(PWM23,Val); + break; + case 9: + PWM15Duty(PWM22,Val); + break; + case 10: + PWM15Duty(PWM21,Val); + break; + case 11: + PWM15Duty(PWM20,Val); + break; + } +} +void show_light(void) +{ + int i; + for (i = 0; i < 12; i++) + { + if(s_pwm.currpwm[i]==20000ul) + { + Close_Light(i); + } + else + { + PWM_write(i, s_pwm.currpwm[i]); + } + } +} + +//void checkpwm(void) +//{ +// int i; +// for (i = 0; i < 12; i++) +// { +// if ((s_recv.flag1[i] == 0) && (s_recv.flag2[i] == 0) && (s_recv.changeflag == 1)) +// { +// if (s_pwm.wanttopwmflash[i] != s_pwm.currpwm[i]) +// { +// s_pwm.currpwm[i] = s_pwm.wanttopwmflash[i]; +// } +// } +// } +// s_recv.changeflag = 0; +//} diff --git a/pwm_control.h b/pwm_control.h new file mode 100644 index 0000000..9a43492 --- /dev/null +++ b/pwm_control.h @@ -0,0 +1,51 @@ +#ifndef PWM_CONTROL_H +#define PWM_CONTROL_H + +#include "STC8xxxx.h" + +#define PWM_MAX_VALUE 1250ul +#define initial_Val 1251ul +/* +#define LED_DRV_CH1 P07 +#define LED_DRV_CH2 P06 +#define LED_DRV_CH3 P05 +#define LED_DRV_CH4 P04 +#define LED_DRV_CH5 P03 +#define LED_DRV_CH6 P02 +#define LED_DRV_CH7 P01 +#define LED_DRV_CH8 P00 +#define LED_DRV_CH9 P23 +#define LED_DRV_CH10 P22 +#define LED_DRV_CH11 P21 +#define LED_DRV_CH12 P20 +*/ +#define LED_DRV_12V_EN P10 + +typedef struct +{ + u16 currpwm[12]; + u16 thenvalue[12]; + float doublecurrpwm[12]; + u16 wanttopwm[12]; + u16 currvalue[12]; //ǰٷֱֵ + u16 changetime[12]; + u16 wanttovalue[12]; + float every_change_10ms[12]; +// u16 wanttopwmflash[12]; + u8 key_value; +}xdata S_PWM; + +extern S_PWM s_pwm; + +void Close_Light(u8 pin); +void Open_Light(u8 pin); +void PWM_write(u8 i, u16 pwm); +void deal_command1(void); +void deal_command2(void); +void show_light(void); +void checkpwm(void); + +void GPIO_config(void); +void pwm_config(void); + +#endif \ No newline at end of file diff --git a/timer.c b/timer.c new file mode 100644 index 0000000..ab3f578 --- /dev/null +++ b/timer.c @@ -0,0 +1,160 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Ҫڳʹô˴,ڳעʹSTCϼ */ +/*---------------------------------------------------------------------*/ + +/************* ˵ ************** + +ļΪSTC8ϵеĶʱʼжϳ,ûļ޸ԼҪжϳ. + +******************************************/ + +#include "timer.h" +u32 systick_1ms=0; +/********************* Timer0жϺ************************/ +void timer0_int (void) interrupt TIMER0_VECTOR +{ + P67 = ~P67; +} + +/********************* Timer1жϺ************************/ +void timer1_int (void) interrupt TIMER1_VECTOR +{ + P66 = ~P66; +} + +/********************* Timer2жϺ************************/ +void timer2_int (void) interrupt TIMER2_VECTOR +{ + systick_1ms++; +} + +/********************* Timer3жϺ************************/ +void timer3_int (void) interrupt TIMER3_VECTOR +{ + +} + +/********************* Timer4жϺ************************/ +void timer4_int (void) interrupt TIMER4_VECTOR +{ + P63 = ~P63; +} + + +//======================================================================== +// : u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) +// : ʱʼ. +// : TIMx: ṹ,οtimer.hĶ. +// : ɹ0, ղ1,󷵻2. +// 汾: V1.0, 2012-10-22 +//======================================================================== +u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) +{ + if(TIM > Timer4) return 1; //ղ + + if(TIM == Timer0) + { + Timer0_Stop(); //ֹͣ + if(TIMx->TIM_Interrupt == ENABLE) Timer0_InterruptEnable(); //ж + else Timer0_InterruptDisable(); //ֹж + if(TIMx->TIM_Priority > Priority_3) return 2; // + Timer0_Priority(TIMx->TIM_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + + if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; // + TMOD = (TMOD & ~0x30) | TIMx->TIM_Mode; //ģʽ,0: 16λԶװ, 1: 16λʱ/, 2: 8λԶװ + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer0_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer0_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer0_AsCounter(); //Ƶ + else Timer0_AsTimer(); //ʱ + if(TIMx->TIM_ClkOut == ENABLE) Timer0_CLKO_Enable(); //ʱ + else Timer0_CLKO_Disable(); //ʱ + + T0_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer0_Run(); //ʼ + return 0; //ɹ + } + + if(TIM == Timer1) + { + Timer1_Stop(); //ֹͣ + if(TIMx->TIM_Interrupt == ENABLE) Timer1_InterruptEnable(); //ж + else Timer1_InterruptDisable(); //ֹж + if(TIMx->TIM_Priority > Priority_3) return 2; // + Timer1_Priority(TIMx->TIM_Priority); //ָжȼ(͵) Priority_0,Priority_1,Priority_2,Priority_3 + if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; // + TMOD = (TMOD & ~0x30) | TIMx->TIM_Mode; //ģʽ,0: 16λԶװ, 1: 16λʱ/, 2: 8λԶװ + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer1_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer1_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer1_AsCounter(); //Ƶ + else Timer1_AsTimer(); //ʱ + if(TIMx->TIM_ClkOut == ENABLE) Timer1_CLKO_Enable(); //ʱ + else Timer1_CLKO_Disable(); //ʱ + + T1_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer1_Run(); //ʼ + return 0; //ɹ + } + + if(TIM == Timer2) //Timer2,̶Ϊ16λԶװ, жȼ + { + Timer2_Stop(); //ֹͣ + if(TIMx->TIM_Interrupt == ENABLE) Timer2_InterruptEnable(); //ж + else Timer2_InterruptDisable(); //ֹж + if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer2_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer2_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer2_AsCounter(); //Ƶ + else Timer2_AsTimer(); //ʱ + if(TIMx->TIM_ClkOut == ENABLE) Timer2_CLKO_Enable(); //ʱ + else Timer2_CLKO_Disable(); //ʱ + + T2_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer2_Run(); //ʼ + return 0; //ɹ + } + + if(TIM == Timer3) //Timer3,̶Ϊ16λԶװ, жȼ + { + Timer3_Stop(); //ֹͣ + if(TIMx->TIM_Interrupt == ENABLE) Timer3_InterruptEnable(); //ж + else Timer3_InterruptDisable(); //ֹж + if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer3_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer3_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer3_AsCounter(); //Ƶ + else Timer3_AsTimer(); //ʱ + if(TIMx->TIM_ClkOut == ENABLE) Timer3_CLKO_Enable(); //ʱ + else Timer3_CLKO_Disable(); //ʱ + + T3_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer3_Run(); //ʼ + return 0; //ɹ + } + + if(TIM == Timer4) //Timer3,̶Ϊ16λԶװ, жȼ + { + Timer4_Stop(); //ֹͣ + if(TIMx->TIM_Interrupt == ENABLE) Timer4_InterruptEnable(); //ж + else Timer4_InterruptDisable(); //ֹж + if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2; + if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) Timer4_12T(); //12T + if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) Timer4_1T(); //1T + if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) Timer4_AsCounter(); //Ƶ + else Timer4_AsTimer(); //ʱ + if(TIMx->TIM_ClkOut == ENABLE) Timer4_CLKO_Enable(); //ʱ + else Timer4_CLKO_Disable(); //ʱ + + T4_Load(TIMx->TIM_Value); + if(TIMx->TIM_Run == ENABLE) Timer4_Run(); //ʼ + return 0; //ɹ + } + return 2; // +} diff --git a/timer.h b/timer.h new file mode 100644 index 0000000..c760f94 --- /dev/null +++ b/timer.h @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* Ҫڳʹô˴,ڳעʹSTCϼ */ +/*---------------------------------------------------------------------*/ + +#ifndef __TIMER_H +#define __TIMER_H + +#include "config.h" + +#define Timer0 0 +#define Timer1 1 +#define Timer2 2 +#define Timer3 3 +#define Timer4 4 + +#define TIM_16BitAutoReload 0 +#define TIM_16Bit 1 +#define TIM_8BitAutoReload 2 +#define TIM_16BitAutoReloadNoMask 3 + +#define TIM_CLOCK_1T 0 +#define TIM_CLOCK_12T 1 +#define TIM_CLOCK_Ext 2 + +typedef struct +{ + u8 TIM_Mode; //ģʽ, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask + u8 TIM_Priority; //ȼ Priority_0,Priority_1,Priority_2,Priority_3 + u8 TIM_Interrupt; //ж ENABLE,DISABLE + u8 TIM_ClkSource; //ʱԴ TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext + u8 TIM_ClkOut; //ɱʱ, ENABLE,DISABLE + u16 TIM_Value; //װسֵ + u8 TIM_Run; //Ƿ ENABLE,DISABLE +} TIM_InitTypeDef; + +extern u32 systick_1ms; +u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx); + +#endif