From 21bc991c482f1b5c889173638c99e6a331266bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E9=9D=92=E5=AE=87?= <10510612+xu-qingyuxx@user.noreply.gitee.com> Date: Thu, 23 Mar 2023 17:00:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A4=E7=BB=99=E7=94=9F=E4=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/c_cpp_properties.json | 39 + .vscode/keil-assistant.log | 34 + .vscode/settings.json | 15 + .vscode/uv4.log | 14 + .vscode/uv4.log.lock | 1 + Listings/EEPROM.lst | 155 ++ Listings/GPIO.lst | 179 ++ Listings/I2C.lst | 288 +++ Listings/Motorcontroller.m51 | 1988 ++++++++++++++++++ Listings/PWM.lst | 204 ++ Listings/STARTUP.lst | 253 +++ Listings/TM5160.lst | 28 + Listings/UART.lst | 495 +++++ Listings/common.lst | 419 ++++ Listings/delay.lst | 82 + Listings/main.lst | 52 + Listings/timer.lst | 312 +++ Listings/tm1650.lst | 225 ++ Motorcontroller.uvgui.User | 1941 +++++++++++++++++ Motorcontroller.uvopt | 289 +++ Motorcontroller.uvproj | 435 ++++ Objects/EEPROM.__i | 1 + Objects/EEPROM.obj | Bin 0 -> 105055 bytes Objects/GPIO.__i | 1 + Objects/GPIO.obj | Bin 0 -> 110608 bytes Objects/I2C.obj | Bin 0 -> 110912 bytes Objects/Motorcontroller | Bin 0 -> 895533 bytes Objects/Motorcontroller.build_log.htm | 39 + Objects/Motorcontroller.hex | 563 +++++ Objects/Motorcontroller.lnp | 11 + Objects/PWM.obj | Bin 0 -> 119318 bytes Objects/STARTUP.obj | Bin 0 -> 819 bytes Objects/TM5160.__i | 1 + Objects/TM5160.obj | Bin 0 -> 100125 bytes Objects/UART.__i | 1 + Objects/UART.obj | Bin 0 -> 113757 bytes Objects/common.__i | 1 + Objects/common.obj | Bin 0 -> 127385 bytes Objects/delay.__i | 1 + Objects/delay.obj | Bin 0 -> 101171 bytes Objects/main.__i | 1 + Objects/main.obj | Bin 0 -> 113791 bytes Objects/timer.__i | 1 + Objects/timer.obj | Bin 0 -> 117554 bytes Objects/tm1650.__i | 1 + Objects/tm1650.obj | Bin 0 -> 116092 bytes STARTUP.A51 | 198 ++ mycode/EEPROM.c | 127 ++ mycode/GPIO.c | 145 ++ mycode/UART.C | 453 ++++ mycode/common.c | 382 ++++ mycode/delay.c | 56 + mycode/main.c | 28 + mycode/timer.c | 269 +++ mycode/tm1650.c | 192 ++ myinc/EEPROM.h | 55 + myinc/GPIO.h | 63 + myinc/PWM.h | 141 ++ myinc/STC8xxxx.H | 2747 +++++++++++++++++++++++++ myinc/UART.h | 135 ++ myinc/common.h | 21 + myinc/config.h | 34 + myinc/delay.h | 21 + myinc/timer.h | 47 + myinc/tm1650.h | 30 + 65 files changed, 13214 insertions(+) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/keil-assistant.log create mode 100644 .vscode/settings.json create mode 100644 .vscode/uv4.log create mode 100644 .vscode/uv4.log.lock create mode 100644 Listings/EEPROM.lst create mode 100644 Listings/GPIO.lst create mode 100644 Listings/I2C.lst create mode 100644 Listings/Motorcontroller.m51 create mode 100644 Listings/PWM.lst create mode 100644 Listings/STARTUP.lst create mode 100644 Listings/TM5160.lst create mode 100644 Listings/UART.lst create mode 100644 Listings/common.lst create mode 100644 Listings/delay.lst create mode 100644 Listings/main.lst create mode 100644 Listings/timer.lst create mode 100644 Listings/tm1650.lst create mode 100644 Motorcontroller.uvgui.User create mode 100644 Motorcontroller.uvopt create mode 100644 Motorcontroller.uvproj create mode 100644 Objects/EEPROM.__i create mode 100644 Objects/EEPROM.obj create mode 100644 Objects/GPIO.__i create mode 100644 Objects/GPIO.obj create mode 100644 Objects/I2C.obj create mode 100644 Objects/Motorcontroller create mode 100644 Objects/Motorcontroller.build_log.htm create mode 100644 Objects/Motorcontroller.hex create mode 100644 Objects/Motorcontroller.lnp create mode 100644 Objects/PWM.obj create mode 100644 Objects/STARTUP.obj create mode 100644 Objects/TM5160.__i create mode 100644 Objects/TM5160.obj create mode 100644 Objects/UART.__i create mode 100644 Objects/UART.obj create mode 100644 Objects/common.__i create mode 100644 Objects/common.obj create mode 100644 Objects/delay.__i create mode 100644 Objects/delay.obj create mode 100644 Objects/main.__i create mode 100644 Objects/main.obj create mode 100644 Objects/timer.__i create mode 100644 Objects/timer.obj create mode 100644 Objects/tm1650.__i create mode 100644 Objects/tm1650.obj create mode 100644 STARTUP.A51 create mode 100644 mycode/EEPROM.c create mode 100644 mycode/GPIO.c create mode 100644 mycode/UART.C create mode 100644 mycode/common.c create mode 100644 mycode/delay.c create mode 100644 mycode/main.c create mode 100644 mycode/timer.c create mode 100644 mycode/tm1650.c create mode 100644 myinc/EEPROM.h create mode 100644 myinc/GPIO.h create mode 100644 myinc/PWM.h create mode 100644 myinc/STC8xxxx.H create mode 100644 myinc/UART.h create mode 100644 myinc/common.h create mode 100644 myinc/config.h create mode 100644 myinc/delay.h create mode 100644 myinc/timer.h create mode 100644 myinc/tm1650.h diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..f31c979 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,39 @@ +{ + "configurations": [ + { + "name": "Target 1", + "includePath": [ + "e:\\my code all\\stc\\Motorcontroller\\myinc", + "D:\\Keil_v5\\C51\\INC", + "e:\\my code all\\stc\\Motorcontroller", + "e:\\my code all\\stc\\Motorcontroller\\mycode" + ], + "defines": [ + "__C51__", + "__VSCODE_C51__", + "reentrant=", + "compact=", + "small=", + "large=", + "data=", + "idata=", + "pdata=", + "bdata=", + "xdata=", + "code=", + "bit=char", + "sbit=char", + "sfr=char", + "sfr16=int", + "sfr32=int", + "interrupt=", + "using=", + "_at_=", + "_priority_=", + "_task_=" + ], + "intelliSenseMode": "${default}" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/keil-assistant.log b/.vscode/keil-assistant.log new file mode 100644 index 0000000..58e8269 --- /dev/null +++ b/.vscode/keil-assistant.log @@ -0,0 +1,34 @@ +[info] Log at : 2023/3/14|08:48:46|GMT+0800 + +[info] Log at : 2023/3/14|09:21:10|GMT+0800 + +[info] Log at : 2023/3/14|09:32:32|GMT+0800 + +[info] Log at : 2023/3/14|11:05:08|GMT+0800 + +[info] Log at : 2023/3/14|11:30:16|GMT+0800 + +[info] Log at : 2023/3/14|13:14:03|GMT+0800 + +[info] Log at : 2023/3/15|08:27:33|GMT+0800 + +[info] Log at : 2023/3/16|14:53:18|GMT+0800 + +[info] Log at : 2023/3/17|08:42:14|GMT+0800 + +[info] Log at : 2023/3/17|10:35:48|GMT+0800 + +[info] Log at : 2023/3/17|16:54:22|GMT+0800 + +[info] Log at : 2023/3/18|08:31:18|GMT+0800 + +[info] Log at : 2023/3/20|08:28:25|GMT+0800 + +[info] Log at : 2023/3/21|08:29:01|GMT+0800 + +[info] Log at : 2023/3/22|08:33:44|GMT+0800 + +[info] Log at : 2023/3/22|16:38:07|GMT+0800 + +[info] Log at : 2023/3/23|08:37:05|GMT+0800 + diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2c9040b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,15 @@ +{ + "files.associations": { + "UART.C": "cpp", + "gpio.h": "c", + "TM5160.C": "cpp", + "i2c.h": "c", + "timer.h": "c", + "tm1650.h": "c", + "delay.h": "c", + "config.h": "c", + "common.h": "c", + "eeprom.h": "c", + "stdio.h": "c" + } +} \ No newline at end of file diff --git a/.vscode/uv4.log b/.vscode/uv4.log new file mode 100644 index 0000000..c35bdf5 --- /dev/null +++ b/.vscode/uv4.log @@ -0,0 +1,14 @@ +Build target 'Target 1' +compiling timer.c... +compiling common.c... +linking... +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PRINTSTRING1?UART + +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_TM1650_PRINT_SMG3?TM1650 + +Program Size: data=100.1 xdata=64 code=8087 +creating hex file from ".\Objects\Motorcontroller"... +".\Objects\Motorcontroller" - 0 Error(s), 2 Warning(s). +Build Time Elapsed: 00:00:00 diff --git a/.vscode/uv4.log.lock b/.vscode/uv4.log.lock new file mode 100644 index 0000000..4d6aed4 --- /dev/null +++ b/.vscode/uv4.log.lock @@ -0,0 +1 @@ +2023/3/23 16:31:25 \ No newline at end of file diff --git a/Listings/EEPROM.lst b/Listings/EEPROM.lst new file mode 100644 index 0000000..3d97bd9 --- /dev/null +++ b/Listings/EEPROM.lst @@ -0,0 +1,155 @@ +C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE EEPROM +OBJECT MODULE PLACED IN .\Objects\EEPROM.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\EEPROM.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT + -END PRINT(.\Listings\EEPROM.lst) TABS(2) OBJECT(.\Objects\EEPROM.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系列的内置EEPROM读写程序,用户几乎可以不修改这个程序. + 16 + 17 ******************************************/ + 18 + 19 #include "config.h" + 20 #include "eeprom.h" + 21 + 22 //======================================================================== + 23 // 函数: void ISP_Disable(void) + 24 // 描述: 禁止访问ISP/IAP. + 25 // 参数: non. + 26 // 返回: non. + 27 // 版本: V1.0, 2012-10-22 + 28 //======================================================================== + 29 void DisableEEPROM(void) + 30 { + 31 1 IAP_CONTR = 0; //禁止IAP操作 + 32 1 IAP_CMD = 0; //去除IAP命令 + 33 1 IAP_TRIG = 0; //防止IAP命令误触发 + 34 1 IAP_ADDRH = 0xff; //清0地址高字节 + 35 1 IAP_ADDRL = 0xff; //清0地址低字节,指向非EEPROM区,防止误操作 + 36 1 } + 37 + 38 //======================================================================== + 39 // 函数: void EEPROM_Trig(void) + 40 // 描述: 触发EEPROM操作. + 41 // 参数: none. + 42 // 返回: none. + 43 // 版本: V1.0, 2014-6-30 + 44 //======================================================================== + 45 void EEPROM_Trig(void) + 46 { + 47 1 F0 = EA; //保存全局中断 + 48 1 EA = 0; //禁止中断, 避免触发命令无效 + 49 1 IAP_TRIG = 0x5A; + 50 1 IAP_TRIG = 0xA5; //先送5AH,再送A5H到IAP触发寄存器,每次都需要如此 + 51 1 //送完A5H后,IAP命令立即被触发启动 + 52 1 //CPU等待IAP完成后,才会继续执行程序。 + 53 1 _nop_(); + 54 1 _nop_(); + C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 2 + + 55 1 EA = F0; //恢复全局中断 + 56 1 } + 57 + 58 //======================================================================== + 59 // 函数: void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number) + 60 // 描述: 从指定EEPROM首地址读出n个字节放指定的缓冲. + 61 // 参数: EE_address: 读出EEPROM的首地址. + 62 // DataAddress: 读出数据放缓冲的首地址. + 63 // number: 读出的字节长度. + 64 // 返回: non. + 65 // 版本: V1.0, 2012-10-22 + 66 //======================================================================== + 67 void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number) + 68 { + 69 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够 + 70 1 IAP_READ(); //送字节读命令,命令不需改变时,不需重新送命令 + 71 1 do + 72 1 { + 73 2 IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址) + 74 2 IAP_ADDRL = EE_address % 256; //送地址低字节 + 75 2 EEPROM_Trig(); //触发EEPROM操作 + 76 2 *DataAddress = IAP_DATA; //读出的数据送往 + 77 2 EE_address++; + 78 2 DataAddress++; + 79 2 }while(--number); + 80 1 + 81 1 DisableEEPROM(); + 82 1 } + 83 + 84 //======================================================================== + 85 // 函数: void EEPROM_SectorErase(u16 EE_address) + 86 // 描述: 把指定地址的EEPROM扇区擦除. + 87 // 参数: EE_address: 要擦除的扇区EEPROM的地址. + 88 // 返回: non. + 89 // 版本: V1.0, 2013-5-10 + 90 //======================================================================== + 91 void EEPROM_SectorErase(u16 EE_address) + 92 { + 93 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够 + 94 1 IAP_ERASE(); //宏调用, 送扇区擦除命令,命令不需改变时,不需重新送命令 + 95 1 //只有扇区擦除,没有字节擦除,512字节/扇区。 + 96 1 //扇区中任意一个字节地址都是扇区地址。 + 97 1 IAP_ADDRH = EE_address / 256; //送扇区地址高字节(地址需要改变时才需重新送地址) + 98 1 IAP_ADDRL = EE_address % 256; //送扇区地址低字节 + 99 1 EEPROM_Trig(); //触发EEPROM操作 + 100 1 DisableEEPROM(); //禁止EEPROM操作 + 101 1 } + 102 + 103 //======================================================================== + 104 // 函数: void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number) + 105 // 描述: 把缓冲的n个字节写入指定首地址的EEPROM. + 106 // 参数: EE_address: 写入EEPROM的首地址. + 107 // DataAddress: 写入源数据的缓冲的首地址. + 108 // number: 写入的字节长度. + 109 // 返回: non. + 110 // 版本: V1.0, 2012-10-22 + 111 //======================================================================== + 112 void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number) + 113 { + 114 1 IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够 + 115 1 IAP_WRITE(); //宏调用, 送字节写命令 + 116 1 do + C51 COMPILER V9.60.0.0 EEPROM 03/23/2023 13:25:30 PAGE 3 + + 117 1 { + 118 2 IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址) + 119 2 IAP_ADDRL = EE_address % 256; //送地址低字节 + 120 2 IAP_DATA = *DataAddress; //送数据到IAP_DATA,只有数据改变时才需重新送 + 121 2 EEPROM_Trig(); //触发EEPROM操作 + 122 2 EE_address++; //下一个地址 + 123 2 DataAddress++; //下一个数据 + 124 2 }while(--number); //直到结束 + 125 1 DisableEEPROM(); + 126 1 } + 127 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 162 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 14 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/GPIO.lst b/Listings/GPIO.lst new file mode 100644 index 0000000..3ad801b --- /dev/null +++ b/Listings/GPIO.lst @@ -0,0 +1,179 @@ +C51 COMPILER V9.60.0.0 GPIO 03/23/2023 13:25:30 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE GPIO +OBJECT MODULE PLACED IN .\Objects\GPIO.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\GPIO.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEN + -D PRINT(.\Listings\GPIO.lst) TABS(2) OBJECT(.\Objects\GPIO.obj) + +line level source + + 1 /*---------------------------------------------------------------------*/ + 2 /* --- STC MCU Limited ------------------------------------------------*/ + 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ + 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ + 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ + 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ + 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ + 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ + 9 /* --- QQ: 800003751 -------------------------------------------------*/ + 10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ + 11 /*---------------------------------------------------------------------*/ + 12 + 13 /*************** 功能说明 **************** + 14 + 15 本文件为STC8系列的端口初始化程序,用户几乎可以不修改这个程序. + 16 + 17 ******************************************/ + 18 + 19 #include "GPIO.h" + 20 //======================================================================== + 21 // 函数: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) + 22 // 描述: 初始化IO口. + 23 // 参数: GPIOx: 结构参数,请参考timer.h里的定义. + 24 // 返回: 成功返回0, 空操作返回1,错误返回2. + 25 // 版本: V1.0, 2012-10-22 + 26 //======================================================================== + 27 u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) + 28 { + 29 1 if (GPIO > GPIO_P7) + 30 1 return 1; // 空操作 + 31 1 if (GPIOx->Mode > GPIO_OUT_PP) + 32 1 return 2; // 错误 + 33 1 if (GPIO == GPIO_P0) + 34 1 { + 35 2 if (GPIOx->Mode == GPIO_PullUp) + 36 2 P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // 上拉准双向口 + 37 2 if (GPIOx->Mode == GPIO_HighZ) + 38 2 P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // 浮空输入 + 39 2 if (GPIOx->Mode == GPIO_OUT_OD) + 40 2 P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; // 开漏输出 + 41 2 if (GPIOx->Mode == GPIO_OUT_PP) + 42 2 P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; // 推挽输出 + 43 2 } + 44 1 if (GPIO == GPIO_P1) + 45 1 { + 46 2 if (GPIOx->Mode == GPIO_PullUp) + 47 2 P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // 上拉准双向口 + 48 2 if (GPIOx->Mode == GPIO_HighZ) + 49 2 P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // 浮空输入 + 50 2 if (GPIOx->Mode == GPIO_OUT_OD) + 51 2 P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; // 开漏输出 + 52 2 if (GPIOx->Mode == GPIO_OUT_PP) + 53 2 P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; // 推挽输出 + 54 2 } + C51 COMPILER V9.60.0.0 GPIO 03/23/2023 13:25:30 PAGE 2 + + 55 1 if (GPIO == GPIO_P2) + 56 1 { + 57 2 if (GPIOx->Mode == GPIO_PullUp) + 58 2 P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // 上拉准双向口 + 59 2 if (GPIOx->Mode == GPIO_HighZ) + 60 2 P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // 浮空输入 + 61 2 if (GPIOx->Mode == GPIO_OUT_OD) + 62 2 P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; // 开漏输出 + 63 2 if (GPIOx->Mode == GPIO_OUT_PP) + 64 2 P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; // 推挽输出 + 65 2 } + 66 1 if (GPIO == GPIO_P3) + 67 1 { + 68 2 if (GPIOx->Mode == GPIO_PullUp) + 69 2 P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // 上拉准双向口 + 70 2 if (GPIOx->Mode == GPIO_HighZ) + 71 2 P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // 浮空输入 + 72 2 if (GPIOx->Mode == GPIO_OUT_OD) + 73 2 P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; // 开漏输出 + 74 2 if (GPIOx->Mode == GPIO_OUT_PP) + 75 2 P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; // 推挽输出 + 76 2 } + 77 1 if (GPIO == GPIO_P4) + 78 1 { + 79 2 if (GPIOx->Mode == GPIO_PullUp) + 80 2 P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // 上拉准双向口 + 81 2 if (GPIOx->Mode == GPIO_HighZ) + 82 2 P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // 浮空输入 + 83 2 if (GPIOx->Mode == GPIO_OUT_OD) + 84 2 P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; // 开漏输出 + 85 2 if (GPIOx->Mode == GPIO_OUT_PP) + 86 2 P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; // 推挽输出 + 87 2 } + 88 1 if (GPIO == GPIO_P5) + 89 1 { + 90 2 if (GPIOx->Mode == GPIO_PullUp) + 91 2 P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // 上拉准双向口 + 92 2 if (GPIOx->Mode == GPIO_HighZ) + 93 2 P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // 浮空输入 + 94 2 if (GPIOx->Mode == GPIO_OUT_OD) + 95 2 P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; // 开漏输出 + 96 2 if (GPIOx->Mode == GPIO_OUT_PP) + 97 2 P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; // 推挽输出 + 98 2 } + 99 1 if (GPIO == GPIO_P6) + 100 1 { + 101 2 if (GPIOx->Mode == GPIO_PullUp) + 102 2 P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // 上拉准双向口 + 103 2 if (GPIOx->Mode == GPIO_HighZ) + 104 2 P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // 浮空输入 + 105 2 if (GPIOx->Mode == GPIO_OUT_OD) + 106 2 P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; // 开漏输出 + 107 2 if (GPIOx->Mode == GPIO_OUT_PP) + 108 2 P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; // 推挽输出 + 109 2 } + 110 1 if (GPIO == GPIO_P7) + 111 1 { + 112 2 if (GPIOx->Mode == GPIO_PullUp) + 113 2 P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // 上拉准双向口 + 114 2 if (GPIOx->Mode == GPIO_HighZ) + 115 2 P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // 浮空输入 + 116 2 if (GPIOx->Mode == GPIO_OUT_OD) + C51 COMPILER V9.60.0.0 GPIO 03/23/2023 13:25:30 PAGE 3 + + 117 2 P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; // 开漏输出 + 118 2 if (GPIOx->Mode == GPIO_OUT_PP) + 119 2 P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; // 推挽输出 + 120 2 } + 121 1 return 0; // 成功 + 122 1 } + 123 /******************** IO口配置 ********************/ + 124 void GPIO_config(void) + 125 { + 126 1 GPIO_InitTypeDef GPIO_InitStructure; // 结构定义 + 127 1 + 128 1 GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // 指定要初始 + -化 或操作p32 + 129 1 GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输 + -入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + 130 1 GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); // 初始化 + 131 1 + 132 1 GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; // 指定要初始化 或操作输出使能 + 133 1 GPIO_InitStructure.Mode = GPIO_OUT_PP; // 指定IO的输入或输出方式,GPIO_PullUp,G + -PIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + 134 1 GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // 初始化 + 135 1 + 136 1 GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // 指定要初始化 或操作输出 + -使能 + 137 1 GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式, + -GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + 138 1 GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // 初始化 + 139 1 + 140 1 GPIO_InitStructure.Pin = GPIO_Pin_4; // 指定要初始化 或操作输出使能 + 141 1 GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_ + -OD,GPIO_OUT_PP + 142 1 GPIO_Inilize(GPIO_P5, &GPIO_InitStructure); // 初始化 + 143 1 EN=1; + 144 1 } + 145 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 683 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 2 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/I2C.lst b/Listings/I2C.lst new file mode 100644 index 0000000..002f7f1 --- /dev/null +++ b/Listings/I2C.lst @@ -0,0 +1,288 @@ +C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE I2C +OBJECT MODULE PLACED IN .\Objects\I2C.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\I2C.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND + - PRINT(.\Listings\I2C.lst) TABS(2) OBJECT(.\Objects\I2C.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 "I2C.h" + 14 + 15 u8 I2C_BUF_type I2C_RxBuffer[I2C_BUF_LENTH]; + 16 + 17 #define SLAW 0xA2 + 18 #define SLAR 0xA3 + 19 + 20 //======================================================================== + 21 // 函数: void I2C_Init(I2C_InitTypeDef *I2Cx) + 22 // 描述: I2C初始化程序. + 23 // 参数: I2Cx: 结构参数,请参考I2C.h里的定义. + 24 // 返回: none. + 25 // 版本: V1.0, 2012-11-22 + 26 //======================================================================== + 27 void I2C_Init(I2C_InitTypeDef *I2Cx) + 28 { + 29 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */ + 30 1 + 31 1 if(I2Cx->I2C_Mode == I2C_Mode_Master) + 32 1 { + 33 2 I2C_Master(); //设为主机 + 34 2 I2CMSST = 0x00; //清除I2C主机状态寄存器 + 35 2 I2C_Master_Inturrupt(I2Cx->I2C_MS_Interrupt); + 36 2 I2C_SetSpeed(I2Cx->I2C_Speed); + 37 2 if(I2Cx->I2C_MS_WDTA == ENABLE) I2C_WDTA_EN(); //使能自动发送 + 38 2 else I2C_WDTA_DIS(); //禁止自动发送 + 39 2 } + 40 1 else + 41 1 { + 42 2 I2C_Slave(); //设为从机 + 43 2 I2CSLST = 0x00; //清除I2C从机状态寄存器 + 44 2 if(I2Cx->I2C_SL_ESTAI == ENABLE) I2C_ESTAI_EN(); //使能从机接收START信号中断 + 45 2 else I2C_ESTAI_DIS(); //禁止从机接收START信号中断 + 46 2 if(I2Cx->I2C_SL_ERXI == ENABLE) I2C_ERXI_EN(); //使能从机接收1字节数据中断 + 47 2 else I2C_ERXI_DIS(); //禁止从机接收1字节数据中断 + 48 2 if(I2Cx->I2C_SL_ETXI == ENABLE) I2C_ETXI_EN(); //使能从机发送1字节数据中断 + 49 2 else I2C_ETXI_DIS(); //禁止从机发送1字节数据中断 + 50 2 if(I2Cx->I2C_SL_ESTOI == ENABLE) I2C_ESTOI_EN(); //使能从机接收STOP信号中断 + 51 2 else I2C_ESTOI_DIS(); //禁止从机接收STOP信号中断 + 52 2 I2C_Address(I2Cx->I2C_SL_ADR); + 53 2 if(I2Cx->I2C_SL_MA == ENABLE) I2C_MATCH_EN(); //从机地址比较功能,只接受相匹配地址 + 54 2 else I2C_MATCH_DIS(); //禁止从机地址比较功能,接受所有设备地址 + C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 2 + + 55 2 } + 56 1 + 57 1 P_SW2 = (P_SW2 & ~(3<<4)) | I2Cx->I2C_IoUse; + 58 1 I2C_Function(I2Cx->I2C_Enable); + 59 1 + 60 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */ + 61 1 } + 62 + 63 //======================================================================== + 64 // 函数: void Wait (void) + 65 // 描述: 等待主机模式I2C控制器执行完成I2CMSCR. + 66 // 参数: mode: 指定模式, 取值 I2C_Mode_Master 或 I2C_Mode_Slave. + 67 // 返回: none. + 68 // 版本: V1.0, 2012-11-22 + 69 //======================================================================== + 70 void Wait() + 71 { + 72 1 while (!(I2CMSST & 0x40)); + 73 1 I2CMSST &= ~0x40; + 74 1 } + 75 + 76 //======================================================================== + 77 // 函数: void Start (void) + 78 // 描述: I2C总线起始函数. + 79 // 参数: none. + 80 // 返回: none. + 81 // 版本: V1.0, 2020-09-15 + 82 //======================================================================== + 83 void Start() + 84 { + 85 1 I2CMSCR = 0x01; //发送START命令 + 86 1 Wait(); + 87 1 } + 88 + 89 //======================================================================== + 90 // 函数: void SendData (char dat) + 91 // 描述: I2C发送一个字节数据函数. + 92 // 参数: 发送的数据. + 93 // 返回: none. + 94 // 版本: V1.0, 2020-09-15 + 95 //======================================================================== + 96 void SendData(char dat) + 97 { + 98 1 I2CTXD = dat; //写数据到数据缓冲区 + 99 1 I2CMSCR = 0x02; //发送SEND命令 + 100 1 Wait(); + 101 1 } + 102 + 103 //======================================================================== + 104 // 函数: void RecvACK (void) + 105 // 描述: I2C获取ACK函数. + 106 // 参数: none. + 107 // 返回: none. + 108 // 版本: V1.0, 2020-09-15 + 109 //======================================================================== + 110 void RecvACK() + 111 { + 112 1 I2CMSCR = 0x03; //发送读ACK命令 + 113 1 Wait(); + 114 1 } + 115 + 116 //======================================================================== + C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 3 + + 117 // 函数: char RecvData (void) + 118 // 描述: I2C读取一个字节数据函数. + 119 // 参数: none. + 120 // 返回: 读取数据. + 121 // 版本: V1.0, 2020-09-15 + 122 //======================================================================== + 123 char RecvData() + 124 { + 125 1 I2CMSCR = 0x04; //发送RECV命令 + 126 1 Wait(); + 127 1 return I2CRXD; + 128 1 } + 129 + 130 //======================================================================== + 131 // 函数: void SendACK (void) + 132 // 描述: I2C发送ACK函数. + 133 // 参数: none. + 134 // 返回: none. + 135 // 版本: V1.0, 2020-09-15 + 136 //======================================================================== + 137 void SendACK() + 138 { + 139 1 I2CMSST = 0x00; //设置ACK信号 + 140 1 I2CMSCR = 0x05; //发送ACK命令 + 141 1 Wait(); + 142 1 } + 143 + 144 //======================================================================== + 145 // 函数: void SendNAK (void) + 146 // 描述: I2C发送NAK函数. + 147 // 参数: none. + 148 // 返回: none. + 149 // 版本: V1.0, 2020-09-15 + 150 //======================================================================== + 151 void SendNAK() + 152 { + 153 1 I2CMSST = 0x01; //设置NAK信号 + 154 1 I2CMSCR = 0x05; //发送ACK命令 + 155 1 Wait(); + 156 1 } + 157 + 158 //======================================================================== + 159 // 函数: void Stop (void) + 160 // 描述: I2C总线停止函数. + 161 // 参数: none. + 162 // 返回: none. + 163 // 版本: V1.0, 2020-09-15 + 164 //======================================================================== + 165 void Stop() + 166 { + 167 1 I2CMSCR = 0x06; //发送STOP命令 + 168 1 Wait(); + 169 1 } + 170 + 171 //======================================================================== + 172 // 函数: void WriteNbyte(u8 addr, u8 *p, u8 number) + 173 // 描述: I2C写入数据函数. + 174 // 参数: addr: 指定地址, *p写入数据存储位置, number写入数据个数. + 175 // 返回: none. + 176 // 版本: V1.0, 2020-09-15 + 177 //======================================================================== + 178 void WriteNbyte(u8 addr, u8 *p, u8 number) /* WordAddress,First Data Address,Byte lenth */ + C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 4 + + 179 { + 180 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */ + 181 1 Start(); //发送起始命令 + 182 1 SendData(SLAW); //发送设备地址+写命令 + 183 1 RecvACK(); + 184 1 SendData(addr); //发送存储地址 + 185 1 RecvACK(); + 186 1 do + 187 1 { + 188 2 SendData(*p++); + 189 2 RecvACK(); + 190 2 } + 191 1 while(--number); + 192 1 Stop(); //发送停止命令 + 193 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */ + 194 1 } + 195 + 196 //======================================================================== + 197 // 函数: void ReadNbyte(u8 addr, u8 *p, u8 number) + 198 // 描述: I2C读取数据函数. + 199 // 参数: addr: 指定地址, *p读取数据存储位置, number读取数据个数. + 200 // 返回: none. + 201 // 版本: V1.0, 2020-09-15 + 202 //======================================================================== + 203 void ReadNbyte(u8 addr, u8 *p, u8 number) /* WordAddress,First Data Address,Byte lenth */ + 204 { + 205 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */ + 206 1 Start(); //发送起始命令 + 207 1 SendData(SLAW); //发送设备地址+写命令 + 208 1 RecvACK(); + 209 1 SendData(addr); //发送存储地址 + 210 1 RecvACK(); + 211 1 Start(); //发送起始命令 + 212 1 SendData(SLAR); //发送设备地址+读命令 + 213 1 RecvACK(); + 214 1 do + 215 1 { + 216 2 *p = RecvData(); + 217 2 p++; + 218 2 if(number != 1) SendACK(); //send ACK + 219 2 } + 220 1 while(--number); + 221 1 SendNAK(); //send no ACK + 222 1 Stop(); //发送停止命令 + 223 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */ + 224 1 } + 225 + 226 //======================================================================== + 227 // 函数: void I2C_Isr (void) interrupt I2C_VECTOR + 228 // 描述: I2C中断函数. + 229 // 参数: none. + 230 // 返回: none. + 231 // 版本: V1.0, 2020-09-15 + 232 //======================================================================== + 233 void I2C_Isr() interrupt I2C_VECTOR + 234 { + 235 1 char store; + 236 1 + 237 1 store = P_SW2; + 238 1 P_SW2 |= 0x80; + 239 1 + 240 1 //Add user code here. + C51 COMPILER V9.60.0.0 I2C 03/14/2023 09:20:44 PAGE 5 + + 241 1 + 242 1 P_SW2 = store; + 243 1 } + 244 /**************** I2C初始化函数 *****************/ + 245 void I2C_config(void) + 246 { + 247 1 I2C_InitTypeDef I2C_InitStructure; + 248 1 I2C_InitStructure.I2C_Mode = I2C_Mode_Master; //主从选择 I2C_Mode_Master, I2C_Mode_Slave + 249 1 I2C_InitStructure.I2C_Enable = ENABLE; //I2C功能使能, ENABLE, DISABLE + 250 1 I2C_InitStructure.I2C_MS_WDTA = DISABLE; //主机使能自动发送, ENABLE, DISABLE + 251 1 I2C_InitStructure.I2C_MS_Interrupt = DISABLE; //使能主机模式中断, ENABLE, DISABLE + 252 1 I2C_InitStructure.I2C_Speed = 16; //总线速度=Fosc/2/(Speed*2+4), 0~63 + 253 1 I2C_InitStructure.I2C_IoUse = I2C_P14_P15; //IO口切换 I2C_P14_P15, I2C_P24_P25, I2C_P33_P32 + 254 1 + 255 1 I2C_Init(&I2C_InitStructure); + 256 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 516 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = 128 ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- 22 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/Motorcontroller.m51 b/Listings/Motorcontroller.m51 new file mode 100644 index 0000000..f54f119 --- /dev/null +++ b/Listings/Motorcontroller.m51 @@ -0,0 +1,1988 @@ +BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 1 + + +BL51 BANKED LINKER/LOCATER V6.22.2.0, INVOKED BY: +D:\KEIL_V5\C51\BIN\BL51.EXE .\Objects\STARTUP.obj, .\Objects\delay.obj, .\Objects\GPIO.obj, .\Objects\main.obj, .\Object +>> s\UART.obj, .\Objects\timer.obj, .\Objects\tm1650.obj, .\Objects\common.obj, .\Objects\EEPROM.obj TO .\Objects\Motorc +>> ontroller PRINT (.\Listings\Motorcontroller.m51) RAMSIZE (256) + + +MEMORY MODEL: SMALL + + +INPUT MODULES INCLUDED: + .\Objects\STARTUP.obj (?C_STARTUP) + .\Objects\delay.obj (DELAY) + .\Objects\GPIO.obj (GPIO) + .\Objects\main.obj (MAIN) + .\Objects\UART.obj (UART) + .\Objects\timer.obj (TIMER) + .\Objects\tm1650.obj (TM1650) + .\Objects\common.obj (COMMON) + .\Objects\EEPROM.obj (EEPROM) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C_INIT) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDPTR) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?CLDOPTR) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?CILDPTR) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?CSTPTR) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?IMUL) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?UIDIV) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?SIDIV) + 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?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?LIMUL) + D:\KEIL_V5\C51\LIB\C51S.LIB (PRINTF) + 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) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?PLDIIDATA) + D:\KEIL_V5\C51\LIB\C51S.LIB (?C?CCASE) + + +LINK MAP OF MODULE: .\Objects\Motorcontroller (?C_STARTUP) + + + TYPE BASE LENGTH RELOCATION SEGMENT NAME + ----------------------------------------------------- + + * * * * * * * D A T A M E M O R Y * * * * * * * + REG 0000H 0008H ABSOLUTE "REG BANK 0" + DATA 0008H 0017H UNIT ?DT?COMMON + DATA 001FH 0001H UNIT ?DT?_TM1650_PRINT_SMG3?TM1650 + BIT 0020H.0 0001H.1 UNIT _BIT_GROUP_ + 0021H.1 0000H.7 *** GAP *** + DATA 0022H 0020H UNIT ?DT?TM1650 + DATA 0042H 0014H UNIT _DATA_GROUP_ + DATA 0056H 0007H UNIT ?DT?UART + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 2 + + + DATA 005DH 0007H UNIT ?DT?TIMER + IDATA 0064H 0001H UNIT ?STACK + + * * * * * * * X D A T A M E M O R Y * * * * * * * + XDATA 0000H 0040H UNIT ?XD?UART + + * * * * * * * C O D E M E M O R Y * * * * * * * + CODE 0000H 0003H ABSOLUTE + CODE 0003H 0007H UNIT ?PR?DELAY4US?DELAY + CODE 000AH 0001H UNIT ?PR?TIMER1_INT?TIMER + CODE 000BH 0003H ABSOLUTE + CODE 000EH 0006H UNIT ?PR?DELAY2US?DELAY + CODE 0014H 0006H UNIT ?PR?TM1650_INIT?TM1650 + CODE 001AH 0001H UNIT ?PR?TIMER3_INT?TIMER + CODE 001BH 0003H ABSOLUTE + CODE 001EH 0005H UNIT ?CO?MAIN + CODE 0023H 0003H ABSOLUTE + CODE 0026H 0039H UNIT ?PR?MAIN?MAIN + CODE 005FH 0001H UNIT ?PR?TIMER4_INT?TIMER + 0060H 0003H *** GAP *** + CODE 0063H 0003H ABSOLUTE + CODE 0066H 0035H UNIT ?PR?_TM1650_IIC_WRITE_BYTE?TM1650 + CODE 009BH 0003H ABSOLUTE + CODE 009EH 0005H UNIT ?PR?_PUTCHAR?UART + CODE 00A3H 0003H ABSOLUTE + CODE 00A6H 0597H UNIT ?PR?SHUJU?COMMON + CODE 063DH 035CH UNIT ?PR?PRINTF?PRINTF + CODE 0999H 0359H UNIT ?C?LIB_CODE + CODE 0CF2H 0331H UNIT ?PR?_TIMER_INILIZE?TIMER + CODE 1023H 0277H UNIT ?PR?_GPIO_INILIZE?GPIO + CODE 129AH 0245H UNIT ?PR?KEYSCAN?COMMON + CODE 14DFH 01FDH UNIT ?PR?_UART_CONFIGURATION?UART + CODE 16DCH 00AEH UNIT ?PR?_KEY_REDU?COMMON + CODE 178AH 00ACH UNIT ?PR?_KEY_ADD?COMMON + CODE 1836H 00A6H UNIT ?PR?TIMER0_INT?TIMER + CODE 18DCH 008CH UNIT ?C_C51STARTUP + CODE 1968H 0083H UNIT ?PR?_TM1650_PRINT_SMG2?TM1650 + CODE 19EBH 0071H UNIT ?PR?UART1_INT?UART + CODE 1A5CH 006FH UNIT ?PR?_TM1650_PRINT_SMG1?TM1650 + CODE 1ACBH 006FH UNIT ?PR?_TM1650_PRINT_SMG3?TM1650 + CODE 1B3AH 006EH UNIT ?PR?DISPLAY?COMMON + CODE 1BA8H 005FH UNIT ?C_INITSEG + CODE 1C07H 005CH UNIT ?PR?TIMER2_INT?TIMER + CODE 1C63H 0038H UNIT ?PR?SETCONFIG?COMMON + CODE 1C9BH 0037H UNIT ?PR?_EEPROM_WRITE_N?EEPROM + CODE 1CD2H 0036H UNIT ?PR?_TM1650_PRINTPOGRUN?TM1650 + CODE 1D08H 0034H UNIT ?PR?GPIO_CONFIG?GPIO + CODE 1D3CH 0034H UNIT ?PR?GETCONFIG?COMMON + CODE 1D70H 0031H UNIT ?PR?TIMER_CONFIG?TIMER + CODE 1DA1H 0031H UNIT ?PR?_EEPROM_READ_N?EEPROM + CODE 1DD2H 002FH UNIT ?PR?_DISLITTLEPLAY?COMMON + CODE 1E01H 002DH UNIT ?PR?RUN?COMMON + CODE 1E2EH 002AH UNIT ?PR?_TM1650_PRINTPOGSTOP?TM1650 + CODE 1E58H 0029H UNIT ?PR?UART_CONFIG?UART + CODE 1E81H 0027H UNIT ?PR?_TX1_WRITE2BUFF?UART + CODE 1EA8H 0024H UNIT ?PR?_TM1650_PRINT?TM1650 + CODE 1ECCH 001EH UNIT ?PR?_TM1650_CFG_DISPLAY?TM1650 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 3 + + + CODE 1EEAH 001BH UNIT ?PR?TM1650_IIC_WAIT_ACK?TM1650 + CODE 1F05H 001AH UNIT ?PR?TM1650_CLEAR?TM1650 + CODE 1F1FH 0019H UNIT ?PR?EEPROM_TRIG?EEPROM + CODE 1F38H 0013H UNIT ?PR?_PRINTSTRING1?UART + CODE 1F4BH 0013H UNIT ?PR?_EEPROM_SECTORERASE?EEPROM + CODE 1F5EH 0010H UNIT ?PR?_DELAY_MS?DELAY + CODE 1F6EH 000FH UNIT ?PR?TM1650_IIC_START?TM1650 + CODE 1F7DH 000FH UNIT ?PR?TM1650_IIC_STOP?TM1650 + CODE 1F8CH 000EH UNIT ?PR?DISABLEEEPROM?EEPROM + + + +OVERLAY MAP OF MODULE: .\Objects\Motorcontroller (?C_STARTUP) + + +SEGMENT BIT_GROUP DATA_GROUP + +--> CALLED SEGMENT START LENGTH START LENGTH +----------------------------------------------------------------------------- +?C_C51STARTUP ----- ----- ----- ----- + +--> ?PR?MAIN?MAIN + +--> ?C_INITSEG + +?PR?MAIN?MAIN ----- ----- ----- ----- + +--> ?PR?TM1650_INIT?TM1650 + +--> ?PR?TIMER_CONFIG?TIMER + +--> ?PR?GPIO_CONFIG?GPIO + +--> ?PR?UART_CONFIG?UART + +--> ?PR?GETCONFIG?COMMON + +--> ?PR?_DELAY_MS?DELAY + +--> ?PR?SHUJU?COMMON + +--> ?PR?KEYSCAN?COMMON + +--> ?PR?DISPLAY?COMMON + +--> ?PR?RUN?COMMON + +--> ?CO?MAIN + +--> ?PR?PRINTF?PRINTF + +?PR?TM1650_INIT?TM1650 ----- ----- ----- ----- + +--> ?PR?_TM1650_CFG_DISPLAY?TM1650 + +--> ?PR?TM1650_CLEAR?TM1650 + +?PR?_TM1650_CFG_DISPLAY?TM1650 ----- ----- 0047H 0001H + +--> ?PR?TM1650_IIC_START?TM1650 + +--> ?PR?_TM1650_IIC_WRITE_BYTE?TM1650 + +--> ?PR?TM1650_IIC_WAIT_ACK?TM1650 + +--> ?PR?TM1650_IIC_STOP?TM1650 + +?PR?TM1650_IIC_START?TM1650 ----- ----- ----- ----- + +--> ?PR?DELAY4US?DELAY + +?PR?_TM1650_IIC_WRITE_BYTE?TM1650 ----- ----- 0049H 0002H + +--> ?PR?DELAY2US?DELAY + +?PR?TM1650_IIC_WAIT_ACK?TM1650 ----- ----- 0049H 0001H + +--> ?PR?DELAY2US?DELAY + +?PR?TM1650_IIC_STOP?TM1650 ----- ----- ----- ----- + +--> ?PR?DELAY4US?DELAY + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 4 + + + +?PR?TM1650_CLEAR?TM1650 ----- ----- 0042H 0001H + +--> ?PR?_TM1650_PRINT?TM1650 + +?PR?_TM1650_PRINT?TM1650 ----- ----- 0047H 0002H + +--> ?PR?TM1650_IIC_START?TM1650 + +--> ?PR?_TM1650_IIC_WRITE_BYTE?TM1650 + +--> ?PR?TM1650_IIC_WAIT_ACK?TM1650 + +--> ?PR?TM1650_IIC_STOP?TM1650 + +?PR?TIMER_CONFIG?TIMER ----- ----- 0042H 0008H + +--> ?PR?_TIMER_INILIZE?TIMER + +?PR?GPIO_CONFIG?GPIO ----- ----- 0042H 0002H + +--> ?PR?_GPIO_INILIZE?GPIO + +?PR?UART_CONFIG?UART ----- ----- 0042H 000CH + +--> ?PR?_UART_CONFIGURATION?UART + +?PR?_UART_CONFIGURATION?UART ----- ----- 004EH 0007H + +?PR?GETCONFIG?COMMON ----- ----- ----- ----- + +--> ?PR?_EEPROM_READ_N?EEPROM + +?PR?_EEPROM_READ_N?EEPROM ----- ----- 0042H 0007H + +--> ?PR?EEPROM_TRIG?EEPROM + +--> ?PR?DISABLEEEPROM?EEPROM + +?PR?KEYSCAN?COMMON ----- ----- ----- ----- + +--> ?PR?SETCONFIG?COMMON + +--> ?PR?_KEY_ADD?COMMON + +--> ?PR?_KEY_REDU?COMMON + +?PR?SETCONFIG?COMMON ----- ----- ----- ----- + +--> ?PR?_EEPROM_SECTORERASE?EEPROM + +--> ?PR?_EEPROM_WRITE_N?EEPROM + +?PR?_EEPROM_SECTORERASE?EEPROM ----- ----- ----- ----- + +--> ?PR?EEPROM_TRIG?EEPROM + +--> ?PR?DISABLEEEPROM?EEPROM + +?PR?_EEPROM_WRITE_N?EEPROM ----- ----- 0042H 0007H + +--> ?PR?EEPROM_TRIG?EEPROM + +--> ?PR?DISABLEEEPROM?EEPROM + +?PR?_KEY_ADD?COMMON ----- ----- 0042H 0006H + +?PR?_KEY_REDU?COMMON ----- ----- 0042H 0006H + +?PR?DISPLAY?COMMON ----- ----- ----- ----- + +--> ?PR?_DISLITTLEPLAY?COMMON + +?PR?_DISLITTLEPLAY?COMMON ----- ----- 0042H 0003H + +--> ?PR?_TM1650_PRINTPOGRUN?TM1650 + +--> ?PR?_TM1650_PRINT_SMG1?TM1650 + +--> ?PR?_TM1650_PRINT_SMG2?TM1650 + +--> ?PR?_TM1650_PRINTPOGSTOP?TM1650 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 5 + + + +?PR?_TM1650_PRINTPOGRUN?TM1650 ----- ----- 0045H 0002H + +--> ?PR?_TM1650_CFG_DISPLAY?TM1650 + +--> ?PR?_TM1650_PRINT?TM1650 + +--> ?PR?DELAY4US?DELAY + +?PR?_TM1650_PRINT_SMG1?TM1650 ----- ----- 0045H 0001H + +--> ?PR?_TM1650_CFG_DISPLAY?TM1650 + +--> ?PR?_TM1650_PRINT?TM1650 + +--> ?PR?DELAY4US?DELAY + +?PR?_TM1650_PRINT_SMG2?TM1650 ----- ----- 0045H 0002H + +--> ?PR?_TM1650_CFG_DISPLAY?TM1650 + +--> ?PR?_TM1650_PRINT?TM1650 + +--> ?PR?DELAY4US?DELAY + +?PR?_TM1650_PRINTPOGSTOP?TM1650 ----- ----- 0045H 0001H + +--> ?PR?_TM1650_CFG_DISPLAY?TM1650 + +--> ?PR?_TM1650_PRINT?TM1650 + +--> ?PR?DELAY4US?DELAY + +?PR?PRINTF?PRINTF 0020H.0 0001H.1 0042H 0014H + +--> ?PR?_PUTCHAR?UART + +?PR?_PUTCHAR?UART ----- ----- ----- ----- + +--> ?PR?_TX1_WRITE2BUFF?UART + + + +SYMBOL TABLE OF MODULE: .\Objects\Motorcontroller (?C_STARTUP) + + VALUE TYPE NAME + ---------------------------------- + + ------- MODULE ?C_STARTUP + C:18DCH SEGMENT ?C_C51STARTUP + I:0064H SEGMENT ?STACK + C:0000H PUBLIC ?C_STARTUP + D:00E0H SYMBOL ACC + D:00F0H SYMBOL B + D:0083H SYMBOL DPH + D:0082H SYMBOL DPL + N:0000H SYMBOL IBPSTACK + N:0100H SYMBOL IBPSTACKTOP + N:0080H SYMBOL IDATALEN + C:18DFH SYMBOL IDATALOOP + N:0000H SYMBOL PBPSTACK + N:0100H SYMBOL PBPSTACKTOP + N:0000H SYMBOL PDATALEN + N:0000H SYMBOL PDATASTART + N:0000H SYMBOL PPAGE + N:0000H SYMBOL PPAGEENABLE + D:00A0H SYMBOL PPAGE_SFR + D:0081H SYMBOL SP + C:18DCH SYMBOL STARTUP1 + N:0000H SYMBOL XBPSTACK + N:0000H SYMBOL XBPSTACKTOP + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 6 + + + N:0000H SYMBOL XDATALEN + N:0000H SYMBOL XDATASTART + C:0000H LINE# 126 + C:18DCH LINE# 133 + C:18DEH LINE# 134 + C:18DFH LINE# 135 + C:18E0H LINE# 136 + C:18E2H LINE# 185 + C:18E5H LINE# 196 + ------- ENDMOD ?C_STARTUP + + ------- MODULE DELAY + 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:000EH PUBLIC Delay2us + D:00A8H PUBLIC IE + C:0003H PUBLIC Delay4us + 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:1F5EH PUBLIC _delay_ms + D:00D0H PUBLIC PSW + ------- PROC _DELAY_MS + D:0007H SYMBOL ms + ------- DO + D:0004H SYMBOL i + ------- ENDDO + C:1F5EH LINE# 30 + C:1F5EH LINE# 31 + C:1F5EH LINE# 33 + C:1F5EH LINE# 34 + C:1F62H LINE# 35 + C:1F6BH LINE# 36 + C:1F6DH LINE# 37 + ------- ENDPROC _DELAY_MS + ------- PROC DELAY4US + ------- DO + D:0007H SYMBOL i + ------- ENDDO + C:0003H LINE# 38 + C:0003H LINE# 39 + C:0003H LINE# 42 + C:0004H LINE# 43 + C:0005H LINE# 44 + C:0007H LINE# 45 + C:0009H LINE# 47 + ------- ENDPROC DELAY4US + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 7 + + + ------- PROC DELAY2US + ------- DO + D:0007H SYMBOL i + ------- ENDDO + C:000EH LINE# 48 + C:000EH LINE# 49 + C:000EH LINE# 52 + C:000FH LINE# 53 + C:0011H LINE# 54 + C:0013H LINE# 56 + ------- ENDPROC DELAY2US + ------- ENDMOD DELAY + + ------- 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 + D:00E1H PUBLIC P7M1 + D:00F8H PUBLIC P7 + C:1D08H PUBLIC GPIO_config + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + D:0098H PUBLIC SCON + B:0090H.4 PUBLIC P14 + D:0088H PUBLIC TCON + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + C:1023H PUBLIC _GPIO_Inilize + D:00D0H PUBLIC PSW + D:0094H PUBLIC P0M0 + ------- PROC _GPIO_INILIZE + D:0007H SYMBOL GPIO + D:0001H SYMBOL GPIOx + C:1023H LINE# 27 + C:1023H LINE# 28 + C:1023H LINE# 29 + C:102DH LINE# 30 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 8 + + + C:1030H LINE# 31 + C:103DH LINE# 32 + C:1040H LINE# 33 + C:1043H LINE# 34 + C:1043H LINE# 35 + C:1046H LINE# 36 + C:1051H LINE# 37 + C:1058H LINE# 38 + C:1063H LINE# 39 + C:106BH LINE# 40 + C:1075H LINE# 41 + C:107AH LINE# 42 + C:1087H LINE# 43 + C:1087H LINE# 44 + C:108CH LINE# 45 + C:108CH LINE# 46 + C:1092H LINE# 47 + C:109DH LINE# 48 + C:10A2H LINE# 49 + C:10ADH LINE# 50 + C:10B4H LINE# 51 + C:10BEH LINE# 52 + C:10C5H LINE# 53 + C:10D2H LINE# 54 + C:10D2H LINE# 55 + C:10D7H LINE# 56 + C:10D7H LINE# 57 + C:10DDH LINE# 58 + C:10E8H LINE# 59 + C:10EDH LINE# 60 + C:10F8H LINE# 61 + C:10FFH LINE# 62 + C:1109H LINE# 63 + C:1110H LINE# 64 + C:111DH LINE# 65 + C:111DH LINE# 66 + C:1122H LINE# 67 + C:1122H LINE# 68 + C:1128H LINE# 69 + C:1133H LINE# 70 + C:1138H LINE# 71 + C:1143H LINE# 72 + C:114AH LINE# 73 + C:1154H LINE# 74 + C:115BH LINE# 75 + C:1168H LINE# 76 + C:1168H LINE# 77 + C:116DH LINE# 78 + C:116DH LINE# 79 + C:1173H LINE# 80 + C:117EH LINE# 81 + C:1183H LINE# 82 + C:118EH LINE# 83 + C:1195H LINE# 84 + C:119FH LINE# 85 + C:11A6H LINE# 86 + C:11B3H LINE# 87 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 9 + + + C:11B3H LINE# 88 + C:11B8H LINE# 89 + C:11B8H LINE# 90 + C:11BEH LINE# 91 + C:11C9H LINE# 92 + C:11CEH LINE# 93 + C:11D9H LINE# 94 + C:11E0H LINE# 95 + C:11EAH LINE# 96 + C:11F1H LINE# 97 + C:11FEH LINE# 98 + C:11FEH LINE# 99 + C:1203H LINE# 100 + C:1203H LINE# 101 + C:1209H LINE# 102 + C:1214H LINE# 103 + C:1219H LINE# 104 + C:1224H LINE# 105 + C:122BH LINE# 106 + C:1235H LINE# 107 + C:123CH LINE# 108 + C:1249H LINE# 109 + C:1249H LINE# 110 + C:124EH LINE# 111 + C:124EH LINE# 112 + C:1256H LINE# 113 + C:1261H LINE# 114 + C:1267H LINE# 115 + C:1272H LINE# 116 + C:1279H LINE# 117 + C:1283H LINE# 118 + C:128AH LINE# 119 + C:1297H LINE# 120 + C:1297H LINE# 121 + C:1299H LINE# 122 + ------- ENDPROC _GPIO_INILIZE + ------- PROC GPIO_CONFIG + ------- DO + D:0042H SYMBOL GPIO_InitStructure + ------- ENDDO + C:1D08H LINE# 124 + C:1D08H LINE# 125 + C:1D08H LINE# 128 + C:1D0BH LINE# 129 + C:1D0EH LINE# 130 + C:1D18H LINE# 132 + C:1D1BH LINE# 133 + C:1D1EH LINE# 134 + C:1D23H LINE# 136 + C:1D26H LINE# 137 + C:1D29H LINE# 138 + C:1D2EH LINE# 140 + C:1D31H LINE# 141 + C:1D34H LINE# 142 + C:1D39H LINE# 143 + C:1D3BH LINE# 144 + ------- ENDPROC GPIO_CONFIG + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 10 + + + ------- 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:0026H PUBLIC main + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + D:00D0H PUBLIC PSW + ------- PROC MAIN + C:0026H LINE# 11 + C:0026H LINE# 12 + C:0026H LINE# 13 + C:0029H LINE# 14 + C:002CH LINE# 15 + C:002FH LINE# 16 + C:0032H LINE# 17 + C:0035H LINE# 18 + C:0037H LINE# 19 + C:003CH LINE# 20 + C:003CH LINE# 21 + C:003CH LINE# 22 + C:003FH LINE# 23 + C:0042H LINE# 24 + C:0045H LINE# 25 + C:0048H LINE# 26 + C:005DH LINE# 27 + ------- ENDPROC MAIN + ------- ENDMOD MAIN + + ------- MODULE UART + C:0000H SYMBOL _ICE_DUMMY_ + C:14DFH 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:00A8H PUBLIC IE + D:0056H PUBLIC COM1 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 11 + + + C:1E58H PUBLIC UART_config + B:00A8H.4 PUBLIC ES + D:00B8H PUBLIC IP + X:0000H PUBLIC RX1_Buffer + B:0098H.0 PUBLIC RI + C:19EBH PUBLIC UART1_int + X:0020H PUBLIC TX1_Buffer + B:0098H.1 PUBLIC TI + 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:1F38H PUBLIC _PrintString1 + D:00AFH PUBLIC IE2 + D:00F0H PUBLIC B + D:008EH PUBLIC AUXR + C:1E81H PUBLIC _TX1_write2buff + D:00E0H PUBLIC ACC + B:00A8H.3 PUBLIC ET1 + D:008DH PUBLIC TH1 + D:00D6H PUBLIC TH2 + D:008BH PUBLIC TL1 + D:00D7H PUBLIC TL2 + B:0088H.6 PUBLIC TR1 + D:00B7H PUBLIC IPH + B:0098H.4 PUBLIC REN + D:008FH PUBLIC INT_CLKO + D:00D0H PUBLIC PSW + C:009EH PUBLIC _putchar + ------- PROC _UART_CONFIGURATION + D:0007H SYMBOL UARTx + D:004EH SYMBOL COMx + ------- DO + D:0007H SYMBOL i + D:0051H SYMBOL j + ------- ENDDO + C:14DFH LINE# 37 + C:14E5H LINE# 38 + C:14E5H LINE# 43 + C:14EDH LINE# 44 + C:14EDH LINE# 45 + C:14F0H LINE# 46 + C:14F2H LINE# 47 + C:14F4H LINE# 48 + C:14F6H LINE# 49 + C:14F8H LINE# 50 + C:14FAH LINE# 51 + C:14FCH LINE# 52 + C:1516H LINE# 53 + C:1531H LINE# 55 + C:154CH LINE# 56 + C:1587H LINE# 57 + C:1599H LINE# 58 + C:15A4H LINE# 59 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 12 + + + C:15B2H LINE# 60 + C:15B2H LINE# 61 + C:15CBH LINE# 62 + C:15E2H LINE# 63 + C:15F8H LINE# 64 + C:160BH LINE# 65 + C:160BH LINE# 66 + C:160DH LINE# 67 + C:1610H LINE# 68 + C:1613H LINE# 69 + C:1616H LINE# 70 + C:1619H LINE# 71 + C:1628H LINE# 72 + C:162BH LINE# 73 + C:162DH LINE# 74 + C:1630H LINE# 75 + C:1633H LINE# 76 + C:1635H LINE# 77 + C:1637H LINE# 78 + C:163DH LINE# 79 + C:163DH LINE# 80 + C:1640H LINE# 81 + C:1643H LINE# 82 + C:1646H LINE# 83 + C:1649H LINE# 84 + C:1658H LINE# 85 + C:165BH LINE# 86 + C:165EH LINE# 87 + C:1661H LINE# 88 + C:1663H LINE# 89 + C:1666H LINE# 90 + C:1666H LINE# 91 + C:1674H LINE# 92 + C:1674H LINE# 93 + C:1683H LINE# 94 + C:1686H LINE# 95 + C:1688H LINE# 96 + C:168EH LINE# 97 + C:168EH LINE# 98 + C:169DH LINE# 99 + C:16A0H LINE# 100 + C:16A0H LINE# 101 + C:16B4H LINE# 102 + C:16B6H LINE# 103 + C:16C4H LINE# 104 + C:16C6H LINE# 105 + C:16D6H LINE# 106 + C:16D9H LINE# 107 + C:16D9H LINE# 252 + C:16DBH LINE# 253 + ------- ENDPROC _UART_CONFIGURATION + ------- PROC _TX1_WRITE2BUFF + D:0007H SYMBOL dat + C:1E81H LINE# 259 + C:1E81H LINE# 260 + C:1E81H LINE# 261 + C:1E8EH LINE# 262 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 13 + + + C:1E9EH LINE# 264 + C:1EA2H LINE# 265 + C:1EA2H LINE# 266 + C:1EA5H LINE# 267 + C:1EA7H LINE# 268 + C:1EA7H LINE# 269 + ------- ENDPROC _TX1_WRITE2BUFF + ------- PROC _PRINTSTRING1 + D:0001H SYMBOL puts + C:1F38H LINE# 271 + C:1F38H LINE# 272 + C:1F38H LINE# 273 + C:1F4AH LINE# 274 + ------- ENDPROC _PRINTSTRING1 + ------- PROC UART1_INT + C:19EBH LINE# 276 + C:19F8H LINE# 278 + C:19FBH LINE# 279 + C:19FBH LINE# 280 + C:19FDH LINE# 281 + C:1A01H LINE# 282 + C:1A01H LINE# 283 + C:1A0FH LINE# 284 + C:1A20H LINE# 285 + C:1A23H LINE# 286 + C:1A23H LINE# 287 + C:1A23H LINE# 289 + C:1A26H LINE# 290 + C:1A26H LINE# 291 + C:1A28H LINE# 292 + C:1A2EH LINE# 293 + C:1A2EH LINE# 294 + C:1A3CH LINE# 295 + C:1A4CH LINE# 296 + C:1A4EH LINE# 297 + C:1A51H LINE# 298 + C:1A51H LINE# 299 + ------- ENDPROC UART1_INT + ------- PROC UART_CONFIG + ------- DO + D:0042H SYMBOL COMx_InitStructure + ------- ENDDO + C:1E58H LINE# 436 + C:1E58H LINE# 437 + C:1E58H LINE# 439 + C:1E5BH LINE# 440 + C:1E5EH LINE# 441 + C:1E6AH LINE# 442 + C:1E6DH LINE# 443 + C:1E70H LINE# 444 + C:1E73H LINE# 445 + C:1E75H LINE# 446 + C:1E77H LINE# 447 + ------- ENDPROC UART_CONFIG + ------- PROC _PUTCHAR + D:0006H SYMBOL c + C:009EH LINE# 449 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 14 + + + C:00A0H LINE# 450 + C:00A0H LINE# 451 + ------- ENDPROC _PUTCHAR + ------- ENDMOD UART + + ------- MODULE TIMER + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + C:1836H PUBLIC timer0_int + D:00A0H PUBLIC P2 + C:000AH PUBLIC timer1_int + D:00B0H PUBLIC P3 + C:1C07H PUBLIC timer2_int + D:00C0H PUBLIC P4 + C:001AH PUBLIC timer3_int + D:00C8H PUBLIC P5 + C:005FH PUBLIC timer4_int + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:00A8H PUBLIC IE + D:005DH PUBLIC displaydata + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + D:005EH PUBLIC timex + D:0062H SYMBOL displaytime + B:0090H.2 PUBLIC P12 + B:0090H.3 PUBLIC P13 + D:0098H PUBLIC SCON + D:0089H PUBLIC TMOD + D:0088H PUBLIC TCON + C:0CF2H PUBLIC _Timer_Inilize + D:00AFH PUBLIC IE2 + D:00F0H PUBLIC B + D:008EH PUBLIC AUXR + D:00E0H PUBLIC ACC + B:00A8H.1 PUBLIC ET0 + B:00A8H.3 PUBLIC ET1 + D:008CH PUBLIC TH0 + D:008DH PUBLIC TH1 + D:00D6H PUBLIC TH2 + D:00D4H PUBLIC TH3 + D:00D2H PUBLIC TH4 + D:008AH PUBLIC TL0 + D:008BH PUBLIC TL1 + D:00D7H PUBLIC TL2 + D:00D5H PUBLIC TL3 + B:00B8H.1 PUBLIC PT0 + D:00D3H PUBLIC TL4 + B:00B8H.3 PUBLIC PT1 + B:0088H.4 PUBLIC TR0 + B:0088H.6 PUBLIC TR1 + D:00D1H PUBLIC T4T3M + C:1D70H PUBLIC Timer_config + D:00B7H PUBLIC IPH + D:008FH PUBLIC INT_CLKO + D:00D0H PUBLIC PSW + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 15 + + + ------- PROC TIMER0_INT + C:1836H LINE# 26 + C:1853H LINE# 28 + C:1859H LINE# 29 + C:1859H LINE# 30 + C:187EH LINE# 31 + C:1880H LINE# 32 + C:1880H LINE# 33 + C:1893H LINE# 34 + C:18A1H LINE# 36 + C:18A1H LINE# 38 + C:18A7H LINE# 39 + C:18A7H LINE# 40 + C:18BFH LINE# 41 + C:18C1H LINE# 42 + C:18C1H LINE# 43 + C:18C1H LINE# 44 + ------- ENDPROC TIMER0_INT + ------- PROC TIMER1_INT + C:000AH LINE# 47 + C:000AH LINE# 49 + ------- ENDPROC TIMER1_INT + ------- PROC TIMER2_INT + C:1C07H LINE# 52 + C:1C0BH LINE# 54 + C:1C13H LINE# 55 + C:1C1CH LINE# 56 + C:1C1CH LINE# 57 + C:1C1FH LINE# 58 + C:1C1FH LINE# 59 + C:1C29H LINE# 60 + C:1C2EH LINE# 62 + C:1C30H LINE# 63 + C:1C32H LINE# 65 + C:1C32H LINE# 66 + C:1C3DH LINE# 67 + C:1C42H LINE# 69 + C:1C44H LINE# 70 + C:1C44H LINE# 71 + C:1C4AH LINE# 72 + C:1C4AH LINE# 73 + C:1C4EH LINE# 74 + C:1C58H LINE# 76 + C:1C5EH LINE# 77 + ------- ENDPROC TIMER2_INT + ------- PROC TIMER3_INT + C:001AH LINE# 80 + C:001AH LINE# 82 + ------- ENDPROC TIMER3_INT + ------- PROC TIMER4_INT + C:005FH LINE# 85 + C:005FH LINE# 87 + ------- ENDPROC TIMER4_INT + ------- PROC _TIMER_INILIZE + D:0005H SYMBOL TIM + D:0001H SYMBOL TIMx + C:0CF2H LINE# 96 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 16 + + + C:0CF4H LINE# 97 + C:0CF4H LINE# 98 + C:0CFEH LINE# 99 + C:0D01H LINE# 101 + C:0D07H LINE# 102 + C:0D07H LINE# 103 + C:0D09H LINE# 104 + C:0D13H LINE# 105 + C:0D17H LINE# 107 + C:0D19H LINE# 108 + C:0D29H LINE# 109 + C:0D2CH LINE# 110 + C:0D58H LINE# 112 + C:0D65H LINE# 113 + C:0D68H LINE# 114 + C:0D6FH LINE# 115 + C:0D7CH LINE# 116 + C:0D7FH LINE# 117 + C:0D83H LINE# 118 + C:0D86H LINE# 119 + C:0D8CH LINE# 120 + C:0D91H LINE# 122 + C:0D94H LINE# 123 + C:0D9EH LINE# 124 + C:0DA3H LINE# 126 + C:0DA6H LINE# 128 + C:0DB8H LINE# 129 + C:0DC2H LINE# 130 + C:0DC4H LINE# 131 + C:0DC7H LINE# 132 + C:0DC7H LINE# 134 + C:0DCFH LINE# 135 + C:0DCFH LINE# 136 + C:0DD1H LINE# 137 + C:0DDBH LINE# 138 + C:0DDFH LINE# 140 + C:0DE1H LINE# 141 + C:0DF1H LINE# 142 + C:0DF4H LINE# 143 + C:0E20H LINE# 144 + C:0E2DH LINE# 145 + C:0E30H LINE# 146 + C:0E3CH LINE# 147 + C:0E49H LINE# 148 + C:0E4CH LINE# 149 + C:0E50H LINE# 150 + C:0E53H LINE# 151 + C:0E59H LINE# 152 + C:0E5EH LINE# 154 + C:0E61H LINE# 155 + C:0E6BH LINE# 156 + C:0E70H LINE# 158 + C:0E73H LINE# 160 + C:0E85H LINE# 161 + C:0E8FH LINE# 162 + C:0E91H LINE# 163 + C:0E94H LINE# 164 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 17 + + + C:0E94H LINE# 166 + C:0E99H LINE# 167 + C:0E99H LINE# 168 + C:0E9CH LINE# 169 + C:0EA6H LINE# 170 + C:0EABH LINE# 172 + C:0EAEH LINE# 173 + C:0EBEH LINE# 174 + C:0EC1H LINE# 175 + C:0EC9H LINE# 176 + C:0ECCH LINE# 177 + C:0ED0H LINE# 178 + C:0ED3H LINE# 179 + C:0ED9H LINE# 180 + C:0EDEH LINE# 182 + C:0EE1H LINE# 183 + C:0EEBH LINE# 184 + C:0EF0H LINE# 186 + C:0EF3H LINE# 188 + C:0F05H LINE# 189 + C:0F0FH LINE# 190 + C:0F12H LINE# 191 + C:0F15H LINE# 192 + C:0F15H LINE# 194 + C:0F1AH LINE# 195 + C:0F1AH LINE# 196 + C:0F1DH LINE# 197 + C:0F27H LINE# 198 + C:0F2CH LINE# 200 + C:0F2FH LINE# 201 + C:0F3FH LINE# 202 + C:0F42H LINE# 203 + C:0F4AH LINE# 204 + C:0F4DH LINE# 205 + C:0F51H LINE# 206 + C:0F54H LINE# 207 + C:0F5AH LINE# 208 + C:0F5FH LINE# 210 + C:0F62H LINE# 211 + C:0F6CH LINE# 212 + C:0F71H LINE# 214 + C:0F74H LINE# 216 + C:0F86H LINE# 217 + C:0F90H LINE# 218 + C:0F93H LINE# 219 + C:0F96H LINE# 220 + C:0F96H LINE# 222 + C:0F9EH LINE# 223 + C:0F9EH LINE# 224 + C:0FA1H LINE# 225 + C:0FABH LINE# 226 + C:0FB0H LINE# 228 + C:0FB3H LINE# 229 + C:0FC5H LINE# 230 + C:0FC8H LINE# 231 + C:0FCEH LINE# 232 + C:0FD1H LINE# 233 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 18 + + + C:0FD9H LINE# 234 + C:0FDCH LINE# 235 + C:0FE6H LINE# 236 + C:0FEBH LINE# 238 + C:0FEEH LINE# 239 + C:0FF8H LINE# 240 + C:0FFDH LINE# 242 + C:1000H LINE# 244 + C:1010H LINE# 245 + C:101AH LINE# 246 + C:101DH LINE# 247 + C:1020H LINE# 248 + C:1020H LINE# 249 + C:1022H LINE# 250 + ------- ENDPROC _TIMER_INILIZE + ------- PROC TIMER_CONFIG + ------- DO + D:0042H SYMBOL TIM_InitStructure + ------- ENDDO + C:1D70H LINE# 252 + C:1D70H LINE# 253 + C:1D70H LINE# 255 + C:1D73H LINE# 256 + C:1D75H LINE# 257 + C:1D78H LINE# 258 + C:1D7AH LINE# 259 + C:1D7CH LINE# 260 + C:1D82H LINE# 261 + C:1D85H LINE# 262 + C:1D8EH LINE# 264 + C:1D91H LINE# 265 + C:1D93H LINE# 266 + C:1D99H LINE# 267 + C:1D9CH LINE# 268 + ------- ENDPROC TIMER_CONFIG + ------- ENDMOD TIMER + + ------- MODULE TM1650 + C:0000H SYMBOL _ICE_DUMMY_ + C:1EADH PUBLIC _TM1650_print + 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:0014H PUBLIC TM1650_init + D:00E8H PUBLIC P6 + D:00F8H PUBLIC P7 + D:0022H PUBLIC TUBE_TABLE_0 + D:0032H PUBLIC TUBE_TABLE_1 + D:00A8H PUBLIC IE + C:1E2EH PUBLIC _TM1650_printpogstop + D:00B8H PUBLIC IP + C:1CD2H PUBLIC _TM1650_printpogrun + D:00D8H PUBLIC CCON + D:0098H PUBLIC SCON + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 19 + + + B:00B0H.2 PUBLIC P32 + D:0088H PUBLIC TCON + B:00B0H.3 PUBLIC P33 + C:1F6EH SYMBOL TM1650_IIC_start + D:00F0H PUBLIC B + D:00E0H PUBLIC ACC + C:0066H SYMBOL _TM1650_IIC_write_byte + C:1EEAH SYMBOL TM1650_IIC_wait_ack + C:1F7DH SYMBOL TM1650_IIC_stop + C:1F05H SYMBOL TM1650_clear + C:1ED2H SYMBOL _TM1650_cfg_display + C:1A5CH PUBLIC _TM1650_print_SMG1 + C:1968H PUBLIC _TM1650_print_SMG2 + D:00D0H PUBLIC PSW + C:1ACBH PUBLIC _TM1650_print_SMG3 + ------- PROC TM1650_IIC_START + C:1F6EH LINE# 10 + C:1F6EH LINE# 11 + C:1F6EH LINE# 12 + C:1F70H LINE# 13 + C:1F72H LINE# 14 + C:1F75H LINE# 15 + C:1F77H LINE# 16 + C:1F7AH LINE# 17 + C:1F7CH LINE# 18 + ------- ENDPROC TM1650_IIC_START + ------- PROC TM1650_IIC_STOP + C:1F7DH LINE# 20 + C:1F7DH LINE# 21 + C:1F7DH LINE# 22 + C:1F7FH LINE# 23 + C:1F81H LINE# 24 + C:1F84H LINE# 25 + C:1F86H LINE# 26 + C:1F89H LINE# 27 + C:1F8BH LINE# 28 + ------- ENDPROC TM1650_IIC_STOP + ------- PROC _TM1650_IIC_WRITE_BYTE + D:0049H SYMBOL dat + ------- DO + D:004AH SYMBOL i + ------- ENDDO + C:0066H LINE# 30 + C:0068H LINE# 31 + C:0068H LINE# 33 + C:006AH LINE# 34 + C:0078H LINE# 35 + C:0078H LINE# 37 + C:0078H LINE# 38 + C:007DH LINE# 39 + C:0081H LINE# 41 + C:0083H LINE# 42 + C:0083H LINE# 43 + C:0089H LINE# 44 + C:008CH LINE# 45 + C:008EH LINE# 46 + C:0091H LINE# 47 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 20 + + + C:0093H LINE# 48 + C:0096H LINE# 49 + C:009AH LINE# 50 + ------- ENDPROC _TM1650_IIC_WRITE_BYTE + ------- PROC TM1650_IIC_WAIT_ACK + ------- DO + D:0049H SYMBOL ack_signal + ------- ENDDO + C:1EEAH LINE# 52 + C:1EEAH LINE# 53 + C:1EEAH LINE# 54 + C:1EEDH LINE# 55 + C:1EEFH LINE# 56 + C:1EF2H LINE# 57 + C:1EF8H LINE# 58 + C:1EFAH LINE# 59 + C:1EFDH LINE# 62 + C:1EFFH LINE# 63 + C:1F02H LINE# 64 + C:1F04H LINE# 65 + ------- ENDPROC TM1650_IIC_WAIT_ACK + C:1ECCH SYMBOL L?0044 + ------- PROC L?0043 + ------- ENDPROC L?0043 + C:1ECCH SYMBOL L?0044 + ------- PROC _TM1650_CFG_DISPLAY + D:0047H SYMBOL x + C:1ED2H LINE# 72 + C:1ED4H LINE# 73 + C:1ED4H LINE# 74 + C:1ED7H LINE# 75 + C:1EDCH LINE# 76 + C:1EDFH LINE# 77 + C:1EE4H LINE# 78 + C:1EE7H LINE# 79 + ------- ENDPROC _TM1650_CFG_DISPLAY + ------- PROC L?0045 + ------- ENDPROC L?0045 + ------- PROC _TM1650_PRINT + D:0047H SYMBOL dig + D:0048H SYMBOL seg_data + C:1EADH LINE# 82 + C:1EB1H LINE# 83 + C:1EB1H LINE# 85 + C:1EB4H LINE# 86 + C:1EBEH LINE# 87 + C:1EC1H LINE# 88 + C:1EC6H LINE# 89 + C:1EC9H LINE# 90 + ------- ENDPROC _TM1650_PRINT + ------- PROC TM1650_CLEAR + ------- DO + D:0042H SYMBOL a + ------- ENDDO + C:1F05H LINE# 93 + C:1F05H LINE# 94 + C:1F05H LINE# 96 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 21 + + + C:1F13H LINE# 97 + C:1F13H LINE# 98 + C:1F1AH LINE# 99 + C:1F1EH LINE# 100 + ------- ENDPROC TM1650_CLEAR + ------- PROC TM1650_INIT + C:0014H LINE# 102 + C:0014H LINE# 103 + C:0014H LINE# 104 + C:0014H LINE# 105 + C:0014H LINE# 106 + C:0017H LINE# 107 + ------- ENDPROC TM1650_INIT + ------- PROC _TM1650_PRINTPOGRUN + D:0045H SYMBOL set + D:0046H SYMBOL mode + C:1CD2H LINE# 110 + C:1CD6H LINE# 111 + C:1CD6H LINE# 112 + C:1CD6H LINE# 113 + C:1CD6H LINE# 114 + C:1CD9H LINE# 115 + C:1CE5H LINE# 116 + C:1CE8H LINE# 117 + C:1CEFH LINE# 118 + C:1CF2H LINE# 119 + C:1CF9H LINE# 120 + C:1CFCH LINE# 121 + ------- ENDPROC _TM1650_PRINTPOGRUN + ------- PROC _TM1650_PRINTPOGSTOP + D:0045H SYMBOL set + C:1E2EH LINE# 123 + C:1E30H LINE# 124 + C:1E30H LINE# 125 + C:1E30H LINE# 126 + C:1E30H LINE# 127 + C:1E33H LINE# 128 + C:1E3AH LINE# 129 + C:1E3DH LINE# 130 + C:1E44H LINE# 131 + C:1E47H LINE# 132 + C:1E4EH LINE# 133 + C:1E51H LINE# 134 + ------- ENDPROC _TM1650_PRINTPOGSTOP + ------- PROC _TM1650_PRINT_SMG1 + D:0045H SYMBOL set + C:1A5CH LINE# 136 + C:1A5EH LINE# 137 + C:1A5EH LINE# 138 + C:1A5EH LINE# 139 + C:1A5EH LINE# 140 + C:1A61H LINE# 141 + C:1A68H LINE# 142 + C:1A6BH LINE# 143 + C:1A76H LINE# 144 + C:1A88H LINE# 146 + C:1A8FH LINE# 147 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 22 + + + C:1A92H LINE# 148 + C:1A9DH LINE# 149 + C:1AAFH LINE# 151 + C:1AB6H LINE# 152 + C:1AB9H LINE# 153 + ------- ENDPROC _TM1650_PRINT_SMG1 + ------- PROC _TM1650_PRINT_SMG2 + D:0045H SYMBOL set + C:1968H LINE# 155 + C:196CH LINE# 156 + C:196CH LINE# 157 + C:196CH LINE# 158 + C:196CH LINE# 159 + C:196FH LINE# 160 + C:1976H LINE# 161 + C:1979H LINE# 162 + C:1984H LINE# 163 + C:199DH LINE# 165 + C:19A4H LINE# 166 + C:19A7H LINE# 167 + C:19B2H LINE# 168 + C:19CBH LINE# 170 + C:19D2H LINE# 171 + C:19D5H LINE# 172 + ------- ENDPROC _TM1650_PRINT_SMG2 + ------- PROC _TM1650_PRINT_SMG3 + D:001FH SYMBOL set + C:1ACBH LINE# 174 + C:1ACDH LINE# 175 + C:1ACDH LINE# 176 + C:1ACDH LINE# 177 + C:1ACDH LINE# 178 + C:1AD0H LINE# 179 + C:1AD7H LINE# 180 + C:1ADAH LINE# 181 + C:1AE5H LINE# 182 + C:1AF7H LINE# 184 + C:1AFEH LINE# 185 + C:1B01H LINE# 186 + C:1B0CH LINE# 187 + C:1B1EH LINE# 189 + C:1B25H LINE# 190 + C:1B28H LINE# 191 + ------- ENDPROC _TM1650_PRINT_SMG3 + ------- ENDMOD TM1650 + + ------- MODULE COMMON + C:0000H SYMBOL _ICE_DUMMY_ + D:0008H PUBLIC keyloog + D:0009H PUBLIC sunmode + 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 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 23 + + + D:00F8H PUBLIC P7 + C:1DD2H SYMBOL _dislittleplay + D:00A8H PUBLIC IE + D:00B8H PUBLIC IP + D:00D8H PUBLIC CCON + B:0090H.0 PUBLIC P10 + C:00A6H PUBLIC shuju + B:0090H.2 PUBLIC P12 + D:0098H PUBLIC SCON + B:0090H.4 PUBLIC P14 + D:0088H PUBLIC TCON + B:0090H.5 PUBLIC P15 + B:0090H.6 PUBLIC P16 + B:00B0H.5 PUBLIC P35 + B:0090H.7 PUBLIC P17 + B:00C8H.4 PUBLIC P54 + B:00B0H.6 PUBLIC P36 + B:00B0H.7 PUBLIC P37 + C:1D3CH PUBLIC getconfig + C:16DCH SYMBOL _key_Redu + D:00F0H PUBLIC B + D:008EH PUBLIC AUXR + D:000AH PUBLIC pog + D:00E0H PUBLIC ACC + C:1C66H PUBLIC setconfig + D:008CH PUBLIC TH0 + D:008AH PUBLIC TL0 + D:000BH PUBLIC num + C:178AH SYMBOL _key_add + C:1E01H PUBLIC run + D:0014H PUBLIC keyflag + D:0015H PUBLIC subdivision1 + D:0016H PUBLIC subdivision2 + D:0017H PUBLIC subdivision3 + D:0018H PUBLIC subdivision4 + D:0019H PUBLIC speedmode1 + D:001AH PUBLIC speedmode2 + D:001BH PUBLIC speedmode3 + D:001CH PUBLIC speedmode4 + C:129AH PUBLIC keyscan + C:1B3AH PUBLIC display + D:00D0H PUBLIC PSW + D:001DH PUBLIC keytime + ------- PROC _KEY_ADD + D:0001H SYMBOL speedmode + D:0045H SYMBOL subdivision + ------- DO + D:0007H SYMBOL key__time + ------- ENDDO + C:178AH LINE# 14 + C:178AH LINE# 15 + C:178AH LINE# 16 + C:178AH LINE# 17 + C:178EH LINE# 18 + C:1792H LINE# 20 + C:1794H LINE# 21 + C:17A0H LINE# 22 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 24 + + + C:17A0H LINE# 23 + C:17A0H LINE# 24 + C:17A0H LINE# 25 + C:17A0H LINE# 26 + C:17A4H LINE# 27 + C:17A4H LINE# 28 + C:17A8H LINE# 29 + C:17B4H LINE# 30 + C:17B9H LINE# 31 + C:17BCH LINE# 32 + C:17BCH LINE# 33 + C:17C8H LINE# 34 + C:17C8H LINE# 35 + C:17CDH LINE# 36 + C:17D2H LINE# 37 + C:17D5H LINE# 38 + C:17E1H LINE# 39 + C:17E3H LINE# 40 + C:17E3H LINE# 41 + C:17E5H LINE# 42 + C:17E5H LINE# 43 + C:17E9H LINE# 44 + C:17E9H LINE# 45 + C:17F3H LINE# 46 + C:17FFH LINE# 47 + C:1804H LINE# 48 + C:1807H LINE# 49 + C:1807H LINE# 50 + C:1811H LINE# 51 + C:1811H LINE# 52 + C:181CH LINE# 53 + C:1821H LINE# 54 + C:1824H LINE# 55 + C:1830H LINE# 56 + C:1835H LINE# 57 + C:1835H LINE# 58 + C:1835H LINE# 59 + C:1835H LINE# 60 + ------- ENDPROC _KEY_ADD + ------- PROC _KEY_REDU + D:0001H SYMBOL speedmode + D:0045H SYMBOL subdivision + ------- DO + D:0007H SYMBOL key__time + ------- ENDDO + C:16DCH LINE# 62 + C:16DCH LINE# 63 + C:16DCH LINE# 64 + C:16DCH LINE# 65 + C:16E0H LINE# 66 + C:16E4H LINE# 68 + C:16E6H LINE# 69 + C:16F2H LINE# 70 + C:16F2H LINE# 71 + C:16F2H LINE# 72 + C:16F2H LINE# 73 + C:16F2H LINE# 74 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 25 + + + C:16F6H LINE# 75 + C:16F6H LINE# 76 + C:16FBH LINE# 77 + C:1707H LINE# 78 + C:170CH LINE# 79 + C:170FH LINE# 80 + C:170FH LINE# 81 + C:171BH LINE# 82 + C:171BH LINE# 83 + C:1720H LINE# 84 + C:1725H LINE# 85 + C:1728H LINE# 86 + C:1734H LINE# 87 + C:1736H LINE# 88 + C:1736H LINE# 89 + C:1738H LINE# 90 + C:1738H LINE# 91 + C:173CH LINE# 92 + C:173CH LINE# 93 + C:174EH LINE# 94 + C:1754H LINE# 96 + C:1759H LINE# 97 + C:175CH LINE# 98 + C:175CH LINE# 99 + C:1766H LINE# 100 + C:1766H LINE# 101 + C:176BH LINE# 102 + C:176EH LINE# 103 + C:1780H LINE# 104 + C:1784H LINE# 106 + C:1789H LINE# 107 + C:1789H LINE# 108 + C:1789H LINE# 109 + C:1789H LINE# 110 + ------- ENDPROC _KEY_REDU + ------- PROC KEYSCAN + C:129AH LINE# 111 + C:129AH LINE# 112 + C:129AH LINE# 113 + C:129DH LINE# 114 + C:12A1H LINE# 115 + C:12A1H LINE# 116 + C:12B4H LINE# 117 + C:12B6H LINE# 118 + C:12B9H LINE# 119 + C:12B9H LINE# 120 + C:12BCH LINE# 121 + C:12BCH LINE# 122 + C:12BFH LINE# 123 + C:12C3H LINE# 124 + C:12C3H LINE# 125 + C:12D6H LINE# 126 + C:12D8H LINE# 127 + C:12DBH LINE# 128 + C:12DBH LINE# 129 + C:12DEH LINE# 130 + C:12DEH LINE# 131 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 26 + + + C:12E1H LINE# 132 + C:12E5H LINE# 133 + C:12E5H LINE# 134 + C:1302H LINE# 135 + C:1304H LINE# 136 + C:1307H LINE# 137 + C:130AH LINE# 138 + C:130DH LINE# 139 + C:130DH LINE# 140 + C:1310H LINE# 141 + C:1314H LINE# 142 + C:1314H LINE# 143 + C:131CH LINE# 144 + C:131FH LINE# 145 + C:1322H LINE# 146 + C:1325H LINE# 147 + C:1325H LINE# 148 + C:1328H LINE# 149 + C:1328H LINE# 150 + C:132CH LINE# 151 + C:132CH LINE# 152 + C:133CH LINE# 153 + C:133CH LINE# 154 + C:133CH LINE# 155 + C:133CH LINE# 156 + C:133EH LINE# 157 + C:133EH LINE# 158 + C:1341H LINE# 159 + C:1343H LINE# 160 + C:1343H LINE# 161 + C:1346H LINE# 162 + C:1349H LINE# 163 + C:134BH LINE# 164 + C:134EH LINE# 166 + C:134EH LINE# 167 + C:134EH LINE# 168 + C:1351H LINE# 169 + C:1351H LINE# 170 + C:1351H LINE# 171 + C:1354H LINE# 172 + C:1354H LINE# 173 + C:1364H LINE# 174 + C:1364H LINE# 175 + C:1364H LINE# 176 + C:1373H LINE# 177 + C:1375H LINE# 178 + C:1375H LINE# 179 + C:1384H LINE# 180 + C:1386H LINE# 181 + C:1386H LINE# 182 + C:1395H LINE# 183 + C:1397H LINE# 184 + C:1397H LINE# 185 + C:13A9H LINE# 186 + C:13A9H LINE# 187 + C:13A9H LINE# 188 + C:13A9H LINE# 189 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 27 + + + C:13ACH LINE# 190 + C:13ACH LINE# 191 + C:13BCH LINE# 192 + C:13BCH LINE# 193 + C:13BCH LINE# 194 + C:13CBH LINE# 195 + C:13CDH LINE# 196 + C:13CDH LINE# 197 + C:13DCH LINE# 198 + C:13DEH LINE# 199 + C:13DEH LINE# 200 + C:13EDH LINE# 201 + C:13EFH LINE# 202 + C:13EFH LINE# 203 + C:1401H LINE# 204 + C:1401H LINE# 205 + C:1401H LINE# 206 + C:1401H LINE# 207 + C:1404H LINE# 208 + C:1404H LINE# 209 + C:1408H LINE# 210 + C:1408H LINE# 211 + C:140EH LINE# 212 + C:1413H LINE# 214 + C:1416H LINE# 215 + C:1419H LINE# 216 + C:141CH LINE# 217 + C:1429H LINE# 218 + C:1429H LINE# 219 + C:1429H LINE# 220 + C:1439H LINE# 221 + C:1439H LINE# 222 + C:143BH LINE# 223 + C:143BH LINE# 224 + C:1458H LINE# 225 + C:145AH LINE# 226 + C:145CH LINE# 227 + C:145CH LINE# 228 + C:1479H LINE# 229 + C:147BH LINE# 230 + C:147BH LINE# 231 + C:147BH LINE# 232 + C:147BH LINE# 233 + C:147BH LINE# 234 + C:147BH LINE# 235 + C:147BH LINE# 236 + C:14D9H LINE# 237 + C:14D9H LINE# 238 + C:14DCH LINE# 239 + C:14DEH LINE# 240 + C:14DEH LINE# 241 + ------- ENDPROC KEYSCAN + ------- PROC _DISLITTLEPLAY + D:0042H SYMBOL speedmode + D:0043H SYMBOL subdivision + C:1DD2H LINE# 242 + C:1DD8H LINE# 243 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 28 + + + C:1DD8H LINE# 244 + C:1DE8H LINE# 245 + C:1DE8H LINE# 246 + C:1DE8H LINE# 247 + C:1DEFH LINE# 248 + C:1DEFH LINE# 249 + C:1DEFH LINE# 250 + C:1DF4H LINE# 251 + C:1DF4H LINE# 252 + C:1DF4H LINE# 253 + C:1DFBH LINE# 254 + C:1DFBH LINE# 255 + C:1DFBH LINE# 256 + C:1E00H LINE# 257 + C:1E00H LINE# 258 + C:1E00H LINE# 259 + ------- ENDPROC _DISLITTLEPLAY + ------- PROC DISPLAY + C:1B3AH LINE# 260 + C:1B3AH LINE# 261 + C:1B3AH LINE# 262 + C:1B4AH LINE# 263 + C:1B4AH LINE# 264 + C:1B4AH LINE# 265 + C:1B5FH LINE# 266 + C:1B61H LINE# 267 + C:1B61H LINE# 268 + C:1B76H LINE# 269 + C:1B78H LINE# 270 + C:1B78H LINE# 271 + C:1B8DH LINE# 272 + C:1B8FH LINE# 273 + C:1B8FH LINE# 274 + C:1BA7H LINE# 275 + C:1BA7H LINE# 276 + C:1BA7H LINE# 277 + ------- ENDPROC DISPLAY + ------- PROC SHUJU + C:00A6H LINE# 278 + C:00A6H LINE# 279 + C:00A6H LINE# 281 + C:00C2H LINE# 282 + C:00C2H LINE# 283 + C:00C2H LINE# 284 + C:00F8H LINE# 285 + C:00F8H LINE# 286 + C:00FBH LINE# 287 + C:0191H LINE# 288 + C:0194H LINE# 290 + C:0194H LINE# 291 + C:0197H LINE# 292 + C:0247H LINE# 293 + C:0247H LINE# 294 + C:024AH LINE# 295 + C:024AH LINE# 296 + C:0280H LINE# 297 + C:0280H LINE# 298 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 29 + + + C:0283H LINE# 299 + C:0301H LINE# 300 + C:0304H LINE# 302 + C:0304H LINE# 303 + C:0307H LINE# 304 + C:0393H LINE# 305 + C:0393H LINE# 306 + C:0396H LINE# 307 + C:0396H LINE# 308 + C:03CCH LINE# 309 + C:03CCH LINE# 310 + C:03CFH LINE# 311 + C:044DH LINE# 312 + C:0450H LINE# 314 + C:0450H LINE# 315 + C:0453H LINE# 316 + C:04DFH LINE# 317 + C:04DFH LINE# 318 + C:04E2H LINE# 319 + C:04E2H LINE# 320 + C:0518H LINE# 321 + C:0518H LINE# 322 + C:051BH LINE# 323 + C:0599H LINE# 324 + C:059CH LINE# 326 + C:059CH LINE# 327 + C:059FH LINE# 328 + C:063CH LINE# 329 + C:063CH LINE# 330 + C:063CH LINE# 331 + C:063CH LINE# 332 + ------- ENDPROC SHUJU + ------- PROC RUN + C:1E01H LINE# 333 + C:1E01H LINE# 334 + C:1E01H LINE# 335 + C:1E11H LINE# 336 + C:1E11H LINE# 337 + C:1E11H LINE# 338 + C:1E24H LINE# 339 + C:1E27H LINE# 340 + C:1E29H LINE# 341 + C:1E2AH LINE# 342 + C:1E2AH LINE# 345 + C:1E2AH LINE# 346 + C:1E2CH LINE# 347 + C:1E2DH LINE# 348 + ------- ENDPROC RUN + ------- PROC GETCONFIG + C:1D3CH LINE# 353 + C:1D3CH LINE# 354 + C:1D3CH LINE# 355 + C:1D4FH LINE# 356 + C:1D54H LINE# 357 + C:1D54H LINE# 358 + C:1D57H LINE# 359 + C:1D5AH LINE# 360 + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 30 + + + C:1D5DH LINE# 361 + C:1D60H LINE# 362 + C:1D63H LINE# 363 + C:1D66H LINE# 364 + C:1D69H LINE# 365 + C:1D6CH LINE# 366 + C:1D6FH LINE# 367 + C:1D6FH LINE# 368 + ------- ENDPROC GETCONFIG + ------- PROC L?0199 + ------- ENDPROC L?0199 + ------- PROC SETCONFIG + C:1C66H LINE# 369 + C:1C66H LINE# 370 + C:1C66H LINE# 371 + C:1C6DH LINE# 372 + C:1C70H LINE# 373 + C:1C73H LINE# 374 + C:1C76H LINE# 375 + C:1C79H LINE# 376 + C:1C7CH LINE# 377 + C:1C7FH LINE# 378 + C:1C82H LINE# 379 + C:1C85H LINE# 380 + C:1C88H LINE# 381 + ------- ENDPROC SETCONFIG + ------- ENDMOD COMMON + + ------- MODULE EEPROM + C:0000H SYMBOL _ICE_DUMMY_ + D:0080H PUBLIC P0 + D:0090H PUBLIC P1 + D:00A0H PUBLIC P2 + D:00B0H PUBLIC P3 + C:1F8CH PUBLIC DisableEEPROM + 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:00C5H PUBLIC IAP_CMD + C:1F4BH PUBLIC _EEPROM_SectorErase + C:1DA1H PUBLIC _EEPROM_read_n + D:00B8H PUBLIC IP + D:00C3H PUBLIC IAP_ADDRH + D:00D8H PUBLIC CCON + D:00C4H PUBLIC IAP_ADDRL + C:1C9BH PUBLIC _EEPROM_write_n + D:00F5H PUBLIC IAP_TPS + D:0098H PUBLIC SCON + D:0088H PUBLIC TCON + D:00F0H PUBLIC B + C:1F25H PUBLIC EEPROM_Trig + D:00C7H PUBLIC IAP_CONTR + D:00E0H PUBLIC ACC + D:00C2H PUBLIC IAP_DATA + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 31 + + + D:00C6H PUBLIC IAP_TRIG + B:00D0H.5 PUBLIC F0 + D:00D0H PUBLIC PSW + ------- PROC DISABLEEEPROM + C:1F8CH LINE# 29 + C:1F8CH LINE# 30 + C:1F8CH LINE# 31 + C:1F8FH LINE# 32 + C:1F91H LINE# 33 + C:1F93H LINE# 34 + C:1F96H LINE# 35 + C:1F99H LINE# 36 + ------- ENDPROC DISABLEEEPROM + ------- PROC L?0016 + ------- ENDPROC L?0016 + ------- PROC EEPROM_TRIG + C:1F25H LINE# 45 + C:1F25H LINE# 46 + C:1F25H LINE# 47 + C:1F29H LINE# 48 + C:1F2BH LINE# 49 + C:1F2EH LINE# 50 + C:1F31H LINE# 53 + C:1F32H LINE# 54 + C:1F33H LINE# 55 + C:1F37H LINE# 56 + ------- ENDPROC EEPROM_TRIG + ------- PROC _EEPROM_READ_N + D:0004H SYMBOL EE_address + D:0001H SYMBOL DataAddress + D:0047H SYMBOL number + C:1DA1H LINE# 67 + C:1DA5H LINE# 68 + C:1DA5H LINE# 69 + C:1DABH LINE# 70 + C:1DAEH LINE# 72 + C:1DAEH LINE# 73 + C:1DAEH LINE# 74 + C:1DAEH LINE# 75 + C:1DB1H LINE# 76 + C:1DB6H LINE# 77 + C:1DBBH LINE# 78 + C:1DC2H LINE# 79 + C:1DCFH LINE# 81 + ------- ENDPROC _EEPROM_READ_N + ------- PROC _EEPROM_SECTORERASE + D:0004H SYMBOL EE_address + C:1F4BH LINE# 91 + C:1F4FH LINE# 92 + C:1F4FH LINE# 93 + C:1F55H LINE# 94 + C:1F58H LINE# 97 + C:1F58H LINE# 98 + C:1F58H LINE# 99 + C:1F5BH LINE# 100 + ------- ENDPROC _EEPROM_SECTORERASE + ------- PROC _EEPROM_WRITE_N + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 32 + + + D:0004H SYMBOL EE_address + D:0001H SYMBOL DataAddress + D:0047H SYMBOL number + C:1C9BH LINE# 112 + C:1C9FH LINE# 113 + C:1C9FH LINE# 114 + C:1CA5H LINE# 115 + C:1CA8H LINE# 117 + C:1CA8H LINE# 118 + C:1CAAH LINE# 119 + C:1CAEH LINE# 120 + C:1CB3H LINE# 121 + C:1CB6H LINE# 122 + C:1CBBH LINE# 123 + C:1CC2H LINE# 124 + C:1CCFH LINE# 125 + ------- ENDPROC _EEPROM_WRITE_N + ------- ENDMOD EEPROM + + ------- MODULE ?C?CLDPTR + C:0999H PUBLIC ?C?CLDPTR + ------- ENDMOD ?C?CLDPTR + + ------- MODULE ?C?CLDOPTR + C:09B2H PUBLIC ?C?CLDOPTR + ------- ENDMOD ?C?CLDOPTR + + ------- MODULE ?C?CILDPTR + C:09DFH PUBLIC ?C?CILDPTR + ------- ENDMOD ?C?CILDPTR + + ------- MODULE ?C?CSTPTR + C:0A01H PUBLIC ?C?CSTPTR + ------- ENDMOD ?C?CSTPTR + + ------- MODULE ?C?IMUL + C:0A13H PUBLIC ?C?IMUL + ------- ENDMOD ?C?IMUL + + ------- MODULE ?C?UIDIV + C:0A25H PUBLIC ?C?UIDIV + ------- ENDMOD ?C?UIDIV + + ------- MODULE ?C?SIDIV + C:0A7AH PUBLIC ?C?SIDIV + ------- ENDMOD ?C?SIDIV + + ------- MODULE ?C?ILDOPTR + C:0AB0H PUBLIC ?C?ILDOPTR + ------- ENDMOD ?C?ILDOPTR + + ------- MODULE ?C?LMUL + C:0AE8H PUBLIC ?C?LMUL + ------- ENDMOD ?C?LMUL + + ------- MODULE ?C?ULDIV + C:0B73H PUBLIC ?C?ULDIV + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 33 + + + ------- ENDMOD ?C?ULDIV + + ------- MODULE ?C?ULCMP + C:0C05H PUBLIC ?C?ULCMP + ------- ENDMOD ?C?ULCMP + + ------- MODULE ?C?ULSHR + C:0C16H PUBLIC ?C?ULSHR + ------- ENDMOD ?C?ULSHR + + ------- MODULE ?C?LLDOPTR0 + C:0C29H PUBLIC ?C?LLDOPTR0 + ------- ENDMOD ?C?LLDOPTR0 + + ------- MODULE ?C?LIMUL + C:0C59H PUBLIC ?C?LIMUL + ------- ENDMOD ?C?LIMUL + + ------- MODULE PRINTF + D:0042H PUBLIC ?_PRINTF517?BYTE + D:0042H PUBLIC ?_PRINTF?BYTE + D:0042H PUBLIC ?_SPRINTF517?BYTE + D:0042H PUBLIC ?_SPRINTF?BYTE + C:069FH PUBLIC _PRINTF + C:069FH PUBLIC _PRINTF517 + C:0699H PUBLIC _SPRINTF + C:0699H PUBLIC _SPRINTF517 + ------- ENDMOD PRINTF + + ------- MODULE ?C?LLDIDATA0 + C:0C86H PUBLIC ?C?LLDIDATA0 + ------- ENDMOD ?C?LLDIDATA0 + + ------- MODULE ?C?LLDXDATA0 + C:0C93H PUBLIC ?C?LLDXDATA0 + ------- ENDMOD ?C?LLDXDATA0 + + ------- MODULE ?C?LLDPDATA0 + C:0C9FH PUBLIC ?C?LLDPDATA0 + ------- ENDMOD ?C?LLDPDATA0 + + ------- MODULE ?C?LLDCODE0 + C:0CACH PUBLIC ?C?LLDCODE0 + ------- ENDMOD ?C?LLDCODE0 + + ------- MODULE ?C?PLDIIDATA + C:0CBCH PUBLIC ?C?PLDIIDATA + ------- ENDMOD ?C?PLDIIDATA + + ------- MODULE ?C?CCASE + C:0CCCH PUBLIC ?C?CCASE + ------- ENDMOD ?C?CCASE + +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PRINTSTRING1?UART + +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + BL51 BANKED LINKER/LOCATER V6.22.2.0 03/23/2023 16:31:25 PAGE 34 + + + SEGMENT: ?PR?_TM1650_PRINT_SMG3?TM1650 + +Program Size: data=100.1 xdata=64 code=8087 +LINK/LOCATE RUN COMPLETE. 2 WARNING(S), 0 ERROR(S) diff --git a/Listings/PWM.lst b/Listings/PWM.lst new file mode 100644 index 0000000..0256507 --- /dev/null +++ b/Listings/PWM.lst @@ -0,0 +1,204 @@ +C51 COMPILER V9.60.0.0 PWM 03/13/2023 17:49:47 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE PWM +OBJECT MODULE PLACED IN .\Objects\PWM.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\PWM.C OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND + - PRINT(.\Listings\PWM.lst) TABS(2) OBJECT(.\Objects\PWM.obj) + +line level source + + 1 /*---------------------------------------------------------------------*/ + 2 /* --- STC MCU Limited ------------------------------------------------*/ + 3 /* --- STC 1T Series MCU Demo Programme -------------------------------*/ + 4 /* --- Mobile: (86)13922805190 ----------------------------------------*/ + 5 /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ + 6 /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ + 7 /* --- Web: www.STCMCU.com --------------------------------------------*/ + 8 /* --- Web: www.STCMCUDATA.com ---------------------------------------*/ + 9 /* --- QQ: 800003751 -------------------------------------------------*/ + 10 /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ + 11 /*---------------------------------------------------------------------*/ + 12 + 13 #include "PWM.h" + 14 PWMx_Duty PWMA_Duty; + 15 u8 PWM_Configuration(u8 PWM, PWMx_InitDefine *PWMx) + 16 { + 17 1 if(PWM == PWMA) + 18 1 { + 19 2 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */ + 20 2 + 21 2 if(PWMx->PWM1_SetPriority <= Priority_3) PWM1_Priority(PWMx->PWM1_SetPriority); //指定中断优先级(低到高) + - Priority_0,Priority_1,Priority_2,Priority_3 + 22 2 if(PWMx->PWM2_SetPriority <= Priority_3) PWM2_Priority(PWMx->PWM2_SetPriority); //指定中断优先级(低到高) + - Priority_0,Priority_1,Priority_2,Priority_3 + 23 2 if(PWMx->PWM3_SetPriority <= Priority_3) PWM3_Priority(PWMx->PWM3_SetPriority); //指定中断优先级(低到高) + - Priority_0,Priority_1,Priority_2,Priority_3 + 24 2 if(PWMx->PWM4_SetPriority <= Priority_3) PWM4_Priority(PWMx->PWM4_SetPriority); //指定中断优先级(低到高) + - Priority_0,Priority_1,Priority_2,Priority_3 + 25 2 + 26 2 PWMA_CCER1_Disable(); //关闭所有输入捕获/比较输出 + 27 2 PWMA_CCER2_Disable(); //关闭所有输入捕获/比较输出 + 28 2 PWMA_OC1ModeSet(PWMx->PWM1_Mode); //设置输出比较模式 + 29 2 PWMA_OC2ModeSet(PWMx->PWM2_Mode); //设置输出比较模式 + 30 2 PWMA_OC3ModeSet(PWMx->PWM3_Mode); //设置输出比较模式 + 31 2 PWMA_OC4ModeSet(PWMx->PWM4_Mode); //设置输出比较模式 + 32 2 if(PWMx->PWM_Reload == ENABLE) PWMA_OC1_ReloadEnable(); //输出比较的预装载使能 + 33 2 else PWMA_OC1_RelosdDisable(); //禁止输出比较的预装载 + 34 2 if(PWMx->PWM_Fast == ENABLE) PWMA_OC1_FastEnable(); //输出比较快速功能使能 + 35 2 else PWMA_OC1_FastDisable(); //禁止输出比较快速功能 + 36 2 + 37 2 if(PWMx->PWM_CC1Enable == ENABLE) PWMA_CC1E_Enable(); //开启输入捕获/比较输出 + 38 2 else PWMA_CC1E_Disable(); //关闭输入捕获/比较输出 + 39 2 if(PWMx->PWM_CC1NEnable == ENABLE) PWMA_CC1NE_Enable(); //开启输入捕获/比较输出 + 40 2 else PWMA_CC1NE_Disable(); //关闭输入捕获/比较输出 + 41 2 if(PWMx->PWM_CC2Enable == ENABLE) PWMA_CC2E_Enable(); //开启输入捕获/比较输出 + 42 2 else PWMA_CC2E_Disable(); //关闭输入捕获/比较输出 + 43 2 if(PWMx->PWM_CC2NEnable == ENABLE) PWMA_CC2NE_Enable(); //开启输入捕获/比较输出 + 44 2 else PWMA_CC2NE_Disable(); //关闭输入捕获/比较输出 + 45 2 if(PWMx->PWM_CC3Enable == ENABLE) PWMA_CC3E_Enable(); //开启输入捕获/比较输出 + 46 2 else PWMA_CC3E_Disable(); //关闭输入捕获/比较输出 + 47 2 if(PWMx->PWM_CC3NEnable == ENABLE) PWMA_CC3NE_Enable(); //开启输入捕获/比较输出 + 48 2 else PWMA_CC3NE_Disable(); //关闭输入捕获/比较输出 + 49 2 if(PWMx->PWM_CC4Enable == ENABLE) PWMA_CC4E_Enable(); //开启输入捕获/比较输出 + 50 2 else PWMA_CC4E_Disable(); //关闭输入捕获/比较输出 + C51 COMPILER V9.60.0.0 PWM 03/13/2023 17:49:47 PAGE 2 + + 51 2 if(PWMx->PWM_CC4NEnable == ENABLE) PWMA_CC4NE_Enable(); //开启输入捕获/比较输出 + 52 2 else PWMA_CC4NE_Disable(); //关闭输入捕获/比较输出 + 53 2 + 54 2 PWMA_AutoReload(PWMx->PWM_Period); + 55 2 PWMA_Duty1(PWMx->PWM1_Duty); + 56 2 PWMA_Duty2(PWMx->PWM2_Duty); + 57 2 PWMA_Duty3(PWMx->PWM3_Duty); + 58 2 PWMA_Duty4(PWMx->PWM4_Duty); + 59 2 + 60 2 PWMA_CCPCAPreloaded(PWMx->PWM_PreLoad); //捕获/比较预装载控制位(该位只对具有互补输出的通道起作用) + 61 2 PWMA_PS = PWMx->PWM_PS_SW; //切换IO + 62 2 PWMA_ENO = PWMx->PWM_EnoSelect; //输出通道选择 + 63 2 PWMA_DeadTime(PWMx->PWM_DeadTime); //死区发生器设置 + 64 2 + 65 2 if(PWMx->PWM_BrakeEnable == ENABLE) PWMA_BrakeEnable(); //开启刹车输入 + 66 2 else PWMA_BrakeDisable(); //禁止刹车输入 + 67 2 if(PWMx->PWM_MainOutEnable == ENABLE) PWMA_BrakeOutputEnable(); //主输出使能 + 68 2 else PWMA_BrakeOutputDisable(); //主输出禁止 + 69 2 if(PWMx->PWM_CEN_Enable == ENABLE) PWMA_CEN_Enable(); //使能计数器 + 70 2 else PWMA_CEN_Disable(); //禁止计数器 + 71 2 + 72 2 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */ + 73 2 return 0; + 74 2 } + 75 1 + 76 1 if(PWM == PWMB) + 77 1 { + 78 2 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */ + 79 2 + 80 2 if(PWMx->PWM5_SetPriority <= Priority_3) PWM5_Priority(PWMx->PWM5_SetPriority); //指定中断优先级(低到高) + - Priority_0,Priority_1,Priority_2,Priority_3 + 81 2 + 82 2 PWMB_CCER1_Disable(); //关闭所有输入捕获/比较输出 + 83 2 PWMB_CCER2_Disable(); //关闭所有输入捕获/比较输出 + 84 2 PWMB_OC5ModeSet(PWMx->PWM5_Mode); //设置输出比较模式 + 85 2 PWMB_OC6ModeSet(PWMx->PWM6_Mode); //设置输出比较模式 + 86 2 PWMB_OC7ModeSet(PWMx->PWM7_Mode); //设置输出比较模式 + 87 2 PWMB_OC8ModeSet(PWMx->PWM8_Mode); //设置输出比较模式 + 88 2 if(PWMx->PWM_Reload == ENABLE) PWMB_OC5_ReloadEnable(); //输出比较的预装载使能 + 89 2 else PWMB_OC5_RelosdDisable(); //禁止输出比较的预装载 + 90 2 if(PWMx->PWM_Fast == ENABLE) PWMB_OC5_FastEnable(); //输出比较快速功能使能 + 91 2 else PWMB_OC5_FastDisable(); //禁止输出比较快速功能 + 92 2 + 93 2 if(PWMx->PWM_CC5Enable == ENABLE) PWMB_CC5E_Enable(); //开启输入捕获/比较输出 + 94 2 else PWMB_CC5E_Disable(); //关闭输入捕获/比较输出 + 95 2 if(PWMx->PWM_CC6Enable == ENABLE) PWMB_CC6E_Enable(); //开启输入捕获/比较输出 + 96 2 else PWMB_CC6E_Disable(); //关闭输入捕获/比较输出 + 97 2 if(PWMx->PWM_CC7Enable == ENABLE) PWMB_CC7E_Enable(); //开启输入捕获/比较输出 + 98 2 else PWMB_CC7E_Disable(); //关闭输入捕获/比较输出 + 99 2 if(PWMx->PWM_CC8Enable == ENABLE) PWMB_CC8E_Enable(); //开启输入捕获/比较输出 + 100 2 else PWMB_CC8E_Disable(); //关闭输入捕获/比较输出 + 101 2 + 102 2 PWMB_AutoReload(PWMx->PWM_Period); + 103 2 PWMB_Duty5(PWMx->PWM5_Duty); + 104 2 PWMB_Duty6(PWMx->PWM6_Duty); + 105 2 PWMB_Duty7(PWMx->PWM7_Duty); + 106 2 PWMB_Duty8(PWMx->PWM8_Duty); + 107 2 + 108 2 PWMB_CCPCBPreloaded(PWMx->PWM_PreLoad); //捕获/比较预装载控制位(该位只对具有互补输出的通道起作用) + 109 2 PWMB_PS = PWMx->PWM_PS_SW; //切换IO + 110 2 PWMB_ENO = PWMx->PWM_EnoSelect; //输出通道选择 + 111 2 PWMB_DeadTime(PWMx->PWM_DeadTime); //死区发生器设置 + C51 COMPILER V9.60.0.0 PWM 03/13/2023 17:49:47 PAGE 3 + + 112 2 + 113 2 if(PWMx->PWM_BrakeEnable == ENABLE) PWMB_BrakeEnable(); //开启刹车输入 + 114 2 else PWMB_BrakeDisable(); //禁止刹车输入 + 115 2 if(PWMx->PWM_MainOutEnable == ENABLE) PWMB_BrakeOutputEnable(); //主输出使能 + 116 2 else PWMB_BrakeOutputDisable(); //主输出禁止 + 117 2 if(PWMx->PWM_CEN_Enable == ENABLE) PWMB_CEN_Enable(); //使能计数器 + 118 2 else PWMB_CEN_Disable(); //禁止计数器 + 119 2 + 120 2 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */ + 121 2 return 0; + 122 2 } + 123 1 + 124 1 return 2; //错误 + 125 1 } + 126 + 127 /*********************************************************/ + 128 + 129 /******************* PWM 占空比设置函数 *******************/ + 130 void UpdatePwm(u8 PWM, PWMx_Duty *PWMx) + 131 { + 132 1 EAXSFR(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */ + 133 1 + 134 1 if(PWM == PWMA) + 135 1 { + 136 2 PWMA_Duty1(PWMx->PWM1_Duty); + 137 2 PWMA_Duty2(PWMx->PWM2_Duty); + 138 2 PWMA_Duty3(PWMx->PWM3_Duty); + 139 2 PWMA_Duty4(PWMx->PWM4_Duty); + 140 2 } + 141 1 else + 142 1 { + 143 2 PWMB_Duty5(PWMx->PWM5_Duty); + 144 2 PWMB_Duty6(PWMx->PWM6_Duty); + 145 2 PWMB_Duty7(PWMx->PWM7_Duty); + 146 2 PWMB_Duty8(PWMx->PWM8_Duty); + 147 2 } + 148 1 + 149 1 EAXRAM(); /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */ + 150 1 } + 151 + 152 /*********************************************************/ + 153 void PWM_config(void) + 154 { + 155 1 PWMx_InitDefine PWMx_InitStructure; + 156 1 PWMx_InitStructure.PWM2_Mode = CCMRn_PWM_MODE1; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_IN + -VALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + 157 1 PWMx_InitStructure.PWM2_SetPriority = Priority_0; //指定中断优先级(低到高) Priority_0,Priority_1,Prior + -ity_2,Priority_3 + 158 1 PWMx_InitStructure.PWM_Period = 2047; //周期时间, 0~65535 + 159 1 PWMx_InitStructure.PWM2_Duty = PWMA_Duty.PWM2_Duty; //PWM2占空比时间, 0~Period + 160 1 PWMx_InitStructure.PWM_DeadTime = 0; //死区发生器设置, 0~255 + 161 1 PWMx_InitStructure.PWM_EnoSelect = ENO2N ; + 162 1 PWMx_InitStructure.PWM_PS_SW =PWM2_SW_P12_P13; + 163 1 PWMx_InitStructure.PWM_CC2NEnable = ENABLE; //开启PWM2N输入捕获/比较输出, ENABLE,DISABLE + 164 1 PWMx_InitStructure.PWM_MainOutEnable= ENABLE; //主输出使能, ENABLE,DISABLE + 165 1 PWMx_InitStructure.PWM_CEN_Enable = ENABLE; //使能计数器, ENABLE,DISABLE + 166 1 PWM_Configuration(PWMA, &PWMx_InitStructure); //初始化PWM, PWMA,PWMB + 167 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 1440 ---- + C51 COMPILER V9.60.0.0 PWM 03/13/2023 17:49:47 PAGE 4 + + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 16 52 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/STARTUP.lst b/Listings/STARTUP.lst new file mode 100644 index 0000000..f493a9b --- /dev/null +++ b/Listings/STARTUP.lst @@ -0,0 +1,253 @@ +A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 1 + + +MACRO ASSEMBLER A51 V8.2.7.0 +OBJECT MODULE PLACED IN .\Objects\STARTUP.obj +ASSEMBLER INVOKED BY: d:\Keil_v5\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG PRINT(.\Listings\STARTUP.lst) OBJECT(.\Obj + ects\STARTUP.obj) EP + +LOC OBJ LINE SOURCE + + 1 $nomod51 + 2 ;------------------------------------------------------------------------------ + 3 ; This file is part of the C51 Compiler package + 4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. + 5 ; Version 8.01 + 6 ; + 7 ; *** <<< Use Configuration Wizard in Context Menu >>> *** + 8 ;------------------------------------------------------------------------------ + 9 ; STARTUP.A51: This code is executed after processor reset. + 10 ; + 11 ; To translate this file use A51 with the following invocation: + 12 ; + 13 ; A51 STARTUP.A51 + 14 ; + 15 ; To link the modified STARTUP.OBJ file to your application use the following + 16 ; Lx51 invocation: + 17 ; + 18 ; Lx51 your object file list, STARTUP.OBJ controls + 19 ; + 20 ;------------------------------------------------------------------------------ + 21 ; + 22 ; User-defined Power-On Initialization of Memory + 23 ; + 24 ; With the following EQU statements the initialization of memory + 25 ; at processor reset can be defined: + 26 ; + 27 ; IDATALEN: IDATA memory size <0x0-0x100> + 28 ; Note: The absolute start-address of IDATA memory is always 0 + 29 ; The IDATA space overlaps physically the DATA and BIT areas. + 0080 30 IDATALEN EQU 80H + 31 ; + 32 ; XDATASTART: XDATA memory start address <0x0-0xFFFF> + 33 ; The absolute start address of XDATA memory + 0000 34 XDATASTART EQU 0 + 35 ; + 36 ; XDATALEN: XDATA memory size <0x0-0xFFFF> + 37 ; The length of XDATA memory in bytes. + 0000 38 XDATALEN EQU 0 + 39 ; + 40 ; PDATASTART: PDATA memory start address <0x0-0xFFFF> + 41 ; The absolute start address of PDATA memory + 0000 42 PDATASTART EQU 0H + 43 ; + 44 ; PDATALEN: PDATA memory size <0x0-0xFF> + 45 ; The length of PDATA memory in bytes. + 0000 46 PDATALEN EQU 0H + 47 ; + 48 ; + 49 ;------------------------------------------------------------------------------ + 50 ; + 51 ; Reentrant Stack Initialization + 52 ; + 53 ; The following EQU statements define the stack pointer for reentrant + 54 ; functions and initialized it: + 55 ; + 56 ; Stack Space for reentrant functions in the SMALL model. + 57 ; IBPSTACK: Enable SMALL model reentrant stack + A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 2 + + 58 ; Stack space for reentrant functions in the SMALL model. + 0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used. + 60 ; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> + 61 ; Set the top of the stack to the highest location. + 0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 63 ; + 64 ; + 65 ; Stack Space for reentrant functions in the LARGE model. + 66 ; XBPSTACK: Enable LARGE model reentrant stack + 67 ; Stack space for reentrant functions in the LARGE model. + 0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used. + 69 ; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> + 70 ; Set the top of the stack to the highest location. + 0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 + 72 ; + 73 ; + 74 ; Stack Space for reentrant functions in the COMPACT model. + 75 ; PBPSTACK: Enable COMPACT model reentrant stack + 76 ; Stack space for reentrant functions in the COMPACT model. + 0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. + 78 ; + 79 ; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> + 80 ; Set the top of the stack to the highest location. + 0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 82 ; + 83 ; + 84 ;------------------------------------------------------------------------------ + 85 ; + 86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM + 87 ; Compact Model Page Definition + 88 ; + 89 ; Define the XDATA page used for PDATA variables. + 90 ; PPAGE must conform with the PPAGE set in the linker invocation. + 91 ; + 92 ; Enable pdata memory page initalization + 0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. + 94 ; + 95 ; PPAGE number <0x0-0xFF> + 96 ; uppermost 256-byte address of the page used for PDATA variables. + 0000 97 PPAGE EQU 0 + 98 ; + 99 ; SFR address which supplies uppermost address byte <0x0-0xFF> + 100 ; most 8051 variants use P2 as uppermost address byte + 00A0 101 PPAGE_SFR DATA 0A0H + 102 ; + 103 ; + 104 ;------------------------------------------------------------------------------ + 105 + 106 ; Standard SFR Symbols + 00E0 107 ACC DATA 0E0H + 00F0 108 B DATA 0F0H + 0081 109 SP DATA 81H + 0082 110 DPL DATA 82H + 0083 111 DPH DATA 83H + 112 + 113 NAME ?C_STARTUP + 114 + 115 + 116 ?C_C51STARTUP SEGMENT CODE + 117 ?STACK SEGMENT IDATA + 118 +---- 119 RSEG ?STACK +0000 120 DS 1 + 121 + 122 EXTRN CODE (?C_START) + 123 PUBLIC ?C_STARTUP + A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 3 + + 124 +---- 125 CSEG AT 0 +0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1 + 127 +---- 128 RSEG ?C_C51STARTUP + 129 +0000 130 STARTUP1: + 131 + 132 IF IDATALEN <> 0 +0000 787F 133 MOV R0,#IDATALEN - 1 +0002 E4 134 CLR A +0003 F6 135 IDATALOOP: MOV @R0,A +0004 D8FD 136 DJNZ R0,IDATALOOP + 137 ENDIF + 138 + 139 IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A + XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP + ENDIF + 153 + 154 IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE + ENDIF + 157 + 158 IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A + PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP + ENDIF + 166 + 167 IF IBPSTACK <> 0 + EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP + ENDIF + 172 + 173 IF XBPSTACK <> 0 + EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP + ENDIF + 179 + 180 IF PBPSTACK <> 0 + EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP + ENDIF + 184 +0006 758100 F 185 MOV SP,#?STACK-1 + 186 + 187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4 + 188 ; Code Banking + 189 ; Select Bank 0 for L51_BANK.A51 Mode 4 + A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 4 + + 190 + + + + + 195 ; +0009 020000 F 196 LJMP ?C_START + 197 + 198 END + A51 MACRO ASSEMBLER STARTUP 03/20/2023 09:24:24 PAGE 5 + +SYMBOL TABLE LISTING +------ ----- ------- + + +N A M E T Y P E V A L U E ATTRIBUTES + +?C_C51STARTUP. . . C SEG 000CH REL=UNIT +?C_START . . . . . C ADDR ----- EXT +?C_STARTUP . . . . C ADDR 0000H A +?STACK . . . . . . I SEG 0001H REL=UNIT +ACC. . . . . . . . D ADDR 00E0H A +B. . . . . . . . . D ADDR 00F0H A +DPH. . . . . . . . D ADDR 0083H A +DPL. . . . . . . . D ADDR 0082H A +IBPSTACK . . . . . N NUMB 0000H A +IBPSTACKTOP. . . . N NUMB 0100H A +IDATALEN . . . . . N NUMB 0080H A +IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP +PBPSTACK . . . . . N NUMB 0000H A +PBPSTACKTOP. . . . N NUMB 0100H A +PDATALEN . . . . . N NUMB 0000H A +PDATASTART . . . . N NUMB 0000H A +PPAGE. . . . . . . N NUMB 0000H A +PPAGEENABLE. . . . N NUMB 0000H A +PPAGE_SFR. . . . . D ADDR 00A0H A +SP . . . . . . . . D ADDR 0081H A +STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP +XBPSTACK . . . . . N NUMB 0000H A +XBPSTACKTOP. . . . N NUMB 0000H A +XDATALEN . . . . . N NUMB 0000H A +XDATASTART . . . . N NUMB 0000H A + + +REGISTER BANK(S) USED: 0 + + +ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/TM5160.lst b/Listings/TM5160.lst new file mode 100644 index 0000000..9d10771 --- /dev/null +++ b/Listings/TM5160.lst @@ -0,0 +1,28 @@ +C51 COMPILER V9.60.0.0 TM5160 03/14/2023 09:21:34 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TM5160 +OBJECT MODULE PLACED IN .\Objects\TM5160.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\TM5160.C OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT + -END PRINT(.\Listings\TM5160.lst) TABS(2) OBJECT(.\Objects\TM5160.obj) + +line level source + + 1 #include "tm5160.h" + 2 void tmc() + 3 { + 4 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 1 ---- + 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/UART.lst b/Listings/UART.lst new file mode 100644 index 0000000..fca82b1 --- /dev/null +++ b/Listings/UART.lst @@ -0,0 +1,495 @@ +C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE UART +OBJECT MODULE PLACED IN .\Objects\UART.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\UART.C OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEN + -D PRINT(.\Listings\UART.lst) TABS(2) 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 "STDIO.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 + COMx_Define COM3; + u8 xdata TX3_Buffer[COM_TX3_Lenth]; //发送缓冲 + u8 xdata RX3_Buffer[COM_RX3_Lenth]; //接收缓冲 + #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.60.0.0 UART 03/23/2023 13:25:30 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 + 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; + C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 4 + + 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 + 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.60.0.0 UART 03/23/2023 13:25:30 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 + 276 void UART1_int (void) interrupt UART1_VECTOR + 277 { + 278 1 if(RI) + 279 1 { + 280 2 RI = 0; + 281 2 if(COM1.B_RX_OK == 0) + 282 2 { + 283 3 if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0; + 284 3 RX1_Buffer[COM1.RX_Cnt++] = SBUF; + 285 3 COM1.RX_TimeOut = TimeOutSet1; + 286 3 } + 287 2 } + 288 1 + 289 1 if(TI) + 290 1 { + 291 2 TI = 0; + 292 2 if(COM1.TX_read != COM1.TX_write) + 293 2 { + 294 3 SBUF = TX1_Buffer[COM1.TX_read]; + 295 3 if(++COM1.TX_read >= COM_TX1_Lenth) COM1.TX_read = 0; + 296 3 } + 297 2 else COM1.B_TX_busy = 0; + 298 2 } + C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 6 + + 299 1 } + 300 #endif + 301 + 302 /********************* UART2 函数 ************************/ + 303 #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 + 346 + 347 /********************* UART3 函数 ************************/ + 348 #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(); //触发发送中断 + } + } + + C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 7 + + void PrintString3(u8 *puts) + { + for (; *puts != 0; puts++) TX3_write2buff(*puts); //遇到停止符0结束 + } + + void UART3_int (void) interrupt UART3_VECTOR + { + if(RI3) + { + CLR_RI3(); + if(COM3.B_RX_OK == 0) + { + if(COM3.RX_Cnt >= 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 + 391 + 392 /********************* UART4 函数 ************************/ + 393 #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; + } + } + C51 COMPILER V9.60.0.0 UART 03/23/2023 13:25:30 PAGE 8 + + + 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 + 436 void UART_config(void) + 437 { + 438 1 COMx_InitDefine COMx_InitStructure; + 439 1 COMx_InitStructure.UART_Mode = UART_8bit_BRTx; + 440 1 COMx_InitStructure.UART_BRT_Use = BRT_Timer1; + 441 1 COMx_InitStructure.UART_BaudRate = 115200ul; + 442 1 COMx_InitStructure.UART_RxEnable = ENABLE; + 443 1 COMx_InitStructure.BaudRateDouble = DISABLE; + 444 1 COMx_InitStructure.UART_Interrupt = ENABLE; + 445 1 COMx_InitStructure.UART_Priority = Priority_0; + 446 1 COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; + 447 1 UART_Configuration(UART1, &COMx_InitStructure); + 448 1 } + 449 char putchar(char c) + 450 { + 451 1 TX1_write2buff(c); + 452 1 return c; + 453 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 726 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = 64 ---- + PDATA SIZE = ---- ---- + DATA SIZE = 7 19 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/common.lst b/Listings/common.lst new file mode 100644 index 0000000..9f5338b --- /dev/null +++ b/Listings/common.lst @@ -0,0 +1,419 @@ +C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE COMMON +OBJECT MODULE PLACED IN .\Objects\common.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\common.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT + -END PRINT(.\Listings\common.lst) TABS(2) OBJECT(.\Objects\common.obj) + +line level source + + 1 #include "common.h" + 2 #include "GPIO.h" + 3 #include "tm1650.h" + 4 #include "STDIO.H" + 5 #include "EEPROM.h" + 6 #include "timer.h" + 7 u8 keyflag = 0; + 8 u8 sunmode = 1; + 9 u8 pog = 4; + 10 u16 keytime = 0; + 11 u8 keyloog = 0; + 12 u8 speedmode1 = speedstart, speedmode2 = speedstart, speedmode3 = speedstart, speedmode4 = speedstart, sub + -division1 = substart, subdivision2 = substart, subdivision3 = substart, subdivision4 = substart; + 13 u8 num[9] = 0; + 14 static void key_add(u8 *speedmode, u8 *subdivision) + 15 { + 16 1 u8 key__time = 0; + 17 1 if (keyloog) + 18 1 key__time = 100; + 19 1 else + 20 1 key__time = 500; + 21 1 switch (pog) + 22 1 { + 23 2 case 1: + 24 2 break; + 25 2 case 2: + 26 2 if (keyflag == 0) + 27 2 { + 28 3 *speedmode += 1; + 29 3 if (*speedmode >= speedmax) + 30 3 *speedmode = speedmax; + 31 3 keyflag = 1; + 32 3 } + 33 2 if (keytime > key__time) + 34 2 { + 35 3 *speedmode += 1; + 36 3 keytime = 0; + 37 3 keyloog = 1; + 38 3 if (*speedmode >= speedmax) + 39 3 *speedmode = speedmax; + 40 3 } + 41 2 break; + 42 2 case 3: + 43 2 if (keyflag == 0) + 44 2 { + 45 3 *subdivision += 1; + 46 3 if (*subdivision >= subdivisionmax) + 47 3 *subdivision = subdivisionmax; + 48 3 keyflag = 1; + 49 3 } + 50 2 if (keytime > key__time) + 51 2 { + 52 3 *subdivision += 1; + 53 3 keytime = 0; + C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 2 + + 54 3 keyloog = 1; + 55 3 if (*subdivision >= subdivisionmax) + 56 3 *subdivision = subdivisionmax; + 57 3 } + 58 2 break; + 59 2 } + 60 1 } + 61 + 62 static void key_Redu(u8 *speedmode, u8 *subdivision) + 63 { + 64 1 u8 key__time = 0; + 65 1 if (keyloog) + 66 1 key__time = 100; + 67 1 else + 68 1 key__time = 500; + 69 1 switch (pog) + 70 1 { + 71 2 case 1: + 72 2 break; + 73 2 case 2: + 74 2 if (keyflag == 0) + 75 2 { + 76 3 *speedmode -= 1; + 77 3 if (*speedmode <= speedmin) + 78 3 *speedmode = speedmin; + 79 3 keyflag = 1; + 80 3 } + 81 2 if (keytime > key__time) + 82 2 { + 83 3 *speedmode -= 1; + 84 3 keytime = 0; + 85 3 keyloog = 1; + 86 3 if (*speedmode <= speedmin) + 87 3 *speedmode = speedmin; + 88 3 } + 89 2 break; + 90 2 case 3: + 91 2 if (keyflag == 0) + 92 2 { + 93 3 if (*subdivision <= subdivisionmin) + 94 3 *subdivision = subdivisionmin; + 95 3 else + 96 3 *subdivision -= 1; + 97 3 keyflag = 1; + 98 3 } + 99 2 if (keytime > key__time) + 100 2 { + 101 3 keytime = 0; + 102 3 keyloog = 1; + 103 3 if (*subdivision <= subdivisionmin) + 104 3 *subdivision = subdivisionmin; + 105 3 else + 106 3 *subdivision -= 1; + 107 3 } + 108 2 break; + 109 2 } + 110 1 } + 111 void keyscan() + 112 { + 113 1 if (k1 == 0) + 114 1 if (keyflag == 0) + 115 1 { + C51 COMPILER V9.60.0.0 COMMON 03/23/2023 16:31:25 PAGE 3 + + 116 2 timex = 400 * subdivision1; + 117 2 DIR = 1; + 118 2 sunmode = 1; + 119 2 keyflag = 1; + 120 2 setconfig(); + 121 2 } + 122 1 if (k2 == 0) + 123 1 if (keyflag == 0) + 124 1 { + 125 2 timex = 400 * subdivision2; + 126 2 DIR = 0; + 127 2 sunmode = 2; + 128 2 keyflag = 1; + 129 2 setconfig(); + 130 2 } + 131 1 if (k3 == 0) + 132 1 if (keyflag == 0) + 133 1 { + 134 2 timex = 800 <= 200) + 56 1 { + 57 2 if (DIR) + 58 2 { + 59 3 if (displaydata >= 7) + 60 3 displaydata = 0; + 61 3 else + 62 3 displaydata++; + 63 3 } + 64 2 else + 65 2 { + 66 3 if (displaydata <= 0) + 67 3 displaydata = 7; + 68 3 else + 69 3 displaydata--; + 70 3 } + 71 2 displaytime = 0; + 72 2 } + 73 1 if (keyflag) + 74 1 keytime++; + 75 1 else + 76 1 keytime = 0; + 77 1 } + 78 + 79 /********************* Timer3中断函数************************/ + 80 void timer3_int(void) interrupt TIMER3_VECTOR + 81 { + 82 1 } + 83 + 84 /********************* Timer4中断函数************************/ + 85 void timer4_int(void) interrupt TIMER4_VECTOR + 86 { + 87 1 } + 88 + 89 //======================================================================== + 90 // 函数: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) + 91 // 描述: 定时器初始化程序. + 92 // 参数: TIMx: 结构参数,请参考timer.h里的定义. + 93 // 返回: 成功返回0, 空操作返回1,错误返回2. + 94 // 版本: V1.0, 2012-10-22 + 95 //======================================================================== + 96 u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) + 97 { + 98 1 if (TIM > Timer4) + 99 1 return 1; // 空操作 + 100 1 + 101 1 if (TIM == Timer0) + 102 1 { + 103 2 Timer0_Stop(); // 停止计数 + 104 2 if (TIMx->TIM_Interrupt == ENABLE) + 105 2 Timer0_InterruptEnable(); // 允许中断 + 106 2 else + 107 2 Timer0_InterruptDisable(); // 禁止中断 + 108 2 if (TIMx->TIM_Priority > Priority_3) + 109 2 return 2; // 错误 + 110 2 Timer0_Priority(TIMx->TIM_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Pr + -iority_3 + 111 2 + 112 2 if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) + 113 2 return 2; // 错误 + 114 2 TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; // 工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动 + -刈, 3: 不可屏蔽16位自动重装 + C51 COMPILER V9.60.0.0 TIMER 03/23/2023 16:31:25 PAGE 3 + + 115 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 116 2 Timer0_12T(); // 12T + 117 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 118 2 Timer0_1T(); // 1T + 119 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 120 2 Timer0_AsCounter(); // 对外计数或分频 + 121 2 else + 122 2 Timer0_AsTimer(); // 定时 + 123 2 if (TIMx->TIM_ClkOut == ENABLE) + 124 2 Timer0_CLKO_Enable(); // 输出时钟 + 125 2 else + 126 2 Timer0_CLKO_Disable(); // 不输出时钟 + 127 2 + 128 2 T0_Load(TIMx->TIM_Value); + 129 2 if (TIMx->TIM_Run == ENABLE) + 130 2 Timer0_Run(); // 开始运行 + 131 2 return 0; // 成功 + 132 2 } + 133 1 + 134 1 if (TIM == Timer1) + 135 1 { + 136 2 Timer1_Stop(); // 停止计数 + 137 2 if (TIMx->TIM_Interrupt == ENABLE) + 138 2 Timer1_InterruptEnable(); // 允许中断 + 139 2 else + 140 2 Timer1_InterruptDisable(); // 禁止中断 + 141 2 if (TIMx->TIM_Priority > Priority_3) + 142 2 return 2; // 错误 + 143 2 Timer1_Priority(TIMx->TIM_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Pr + -iority_3 + 144 2 if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) + 145 2 return 2; // 错误 + 146 2 TMOD = (TMOD & ~0x30) | (TIMx->TIM_Mode << 4); // 工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8 + -位自动重装, 3: 停止工作 + 147 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 148 2 Timer1_12T(); // 12T + 149 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 150 2 Timer1_1T(); // 1T + 151 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 152 2 Timer1_AsCounter(); // 对外计数或分频 + 153 2 else + 154 2 Timer1_AsTimer(); // 定时 + 155 2 if (TIMx->TIM_ClkOut == ENABLE) + 156 2 Timer1_CLKO_Enable(); // 输出时钟 + 157 2 else + 158 2 Timer1_CLKO_Disable(); // 不输出时钟 + 159 2 + 160 2 T1_Load(TIMx->TIM_Value); + 161 2 if (TIMx->TIM_Run == ENABLE) + 162 2 Timer1_Run(); // 开始运行 + 163 2 return 0; // 成功 + 164 2 } + 165 1 + 166 1 if (TIM == Timer2) // Timer2,固定为16位自动重装, 中断无优先级 + 167 1 { + 168 2 Timer2_Stop(); // 停止计数 + 169 2 if (TIMx->TIM_Interrupt == ENABLE) + 170 2 Timer2_InterruptEnable(); // 允许中断 + 171 2 else + 172 2 Timer2_InterruptDisable(); // 禁止中断 + 173 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + 174 2 return 2; + C51 COMPILER V9.60.0.0 TIMER 03/23/2023 16:31:25 PAGE 4 + + 175 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 176 2 Timer2_12T(); // 12T + 177 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 178 2 Timer2_1T(); // 1T + 179 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 180 2 Timer2_AsCounter(); // 对外计数或分频 + 181 2 else + 182 2 Timer2_AsTimer(); // 定时 + 183 2 if (TIMx->TIM_ClkOut == ENABLE) + 184 2 Timer2_CLKO_Enable(); // 输出时钟 + 185 2 else + 186 2 Timer2_CLKO_Disable(); // 不输出时钟 + 187 2 + 188 2 T2_Load(TIMx->TIM_Value); + 189 2 if (TIMx->TIM_Run == ENABLE) + 190 2 Timer2_Run(); // 开始运行 + 191 2 return 0; // 成功 + 192 2 } + 193 1 + 194 1 if (TIM == Timer3) // Timer3,固定为16位自动重装, 中断无优先级 + 195 1 { + 196 2 Timer3_Stop(); // 停止计数 + 197 2 if (TIMx->TIM_Interrupt == ENABLE) + 198 2 Timer3_InterruptEnable(); // 允许中断 + 199 2 else + 200 2 Timer3_InterruptDisable(); // 禁止中断 + 201 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + 202 2 return 2; + 203 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 204 2 Timer3_12T(); // 12T + 205 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 206 2 Timer3_1T(); // 1T + 207 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 208 2 Timer3_AsCounter(); // 对外计数或分频 + 209 2 else + 210 2 Timer3_AsTimer(); // 定时 + 211 2 if (TIMx->TIM_ClkOut == ENABLE) + 212 2 Timer3_CLKO_Enable(); // 输出时钟 + 213 2 else + 214 2 Timer3_CLKO_Disable(); // 不输出时钟 + 215 2 + 216 2 T3_Load(TIMx->TIM_Value); + 217 2 if (TIMx->TIM_Run == ENABLE) + 218 2 Timer3_Run(); // 开始运行 + 219 2 return 0; // 成功 + 220 2 } + 221 1 + 222 1 if (TIM == Timer4) // Timer3,固定为16位自动重装, 中断无优先级 + 223 1 { + 224 2 Timer4_Stop(); // 停止计数 + 225 2 if (TIMx->TIM_Interrupt == ENABLE) + 226 2 Timer4_InterruptEnable(); // 允许中断 + 227 2 else + 228 2 Timer4_InterruptDisable(); // 禁止中断 + 229 2 if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + 230 2 return 2; + 231 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + 232 2 Timer4_12T(); // 12T + 233 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + 234 2 Timer4_1T(); // 1T + 235 2 if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + 236 2 Timer4_AsCounter(); // 对外计数或分频 + C51 COMPILER V9.60.0.0 TIMER 03/23/2023 16:31:25 PAGE 5 + + 237 2 else + 238 2 Timer4_AsTimer(); // 定时 + 239 2 if (TIMx->TIM_ClkOut == ENABLE) + 240 2 Timer4_CLKO_Enable(); // 输出时钟 + 241 2 else + 242 2 Timer4_CLKO_Disable(); // 不输出时钟 + 243 2 + 244 2 T4_Load(TIMx->TIM_Value); + 245 2 if (TIMx->TIM_Run == ENABLE) + 246 2 Timer4_Run(); // 开始运行 + 247 2 return 0; // 成功 + 248 2 } + 249 1 return 2; // 错误 + 250 1 } + 251 /************************ ?¨?±?÷???? ****************************/ + 252 void Timer_config(void) + 253 { + 254 1 TIM_InitTypeDef TIM_InitStructure; //?á???¨?? + 255 1 TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //???¨?¤×÷????, TIM_16BitAutoRel + -oad,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask + 256 1 TIM_InitStructure.TIM_Priority = Priority_0; //???¨??????????(??????) Priority_0,P + -riority_1,Priority_2,Priority_3 + 257 1 TIM_InitStructure.TIM_Interrupt = ENABLE; //??????·????í, ENABLE?òDISABLE + 258 1 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //???¨?±????, TIM_CLOCK_1T,TIM_C + -LOCK_12T,TIM_CLOCK_Ext + 259 1 TIM_InitStructure.TIM_ClkOut = DISABLE; //??·?????????????, ENABLE?òDISABLE + 260 1 TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 100000UL); //????, + 261 1 TIM_InitStructure.TIM_Run = ENABLE; //??·????????ó?????¨?±?÷, ENABLE? + -òDISABLE + 262 1 Timer_Inilize(Timer0, &TIM_InitStructure); //??????Timer0 Timer0,Timer1,Timer2, + -Timer3,Timer4 + 263 1 + 264 1 TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //???¨?±????, TIM_CLOCK_1T,TIM_CLO + -CK_12T,TIM_CLOCK_Ext + 265 1 TIM_InitStructure.TIM_ClkOut = DISABLE; //??·?????????????, ENABLE?òDISABLE + 266 1 TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 1000UL); //????, + 267 1 TIM_InitStructure.TIM_Run = ENABLE; //??·????????ó?????¨?±?÷, ENABLE?ò + -DISABLE + 268 1 Timer_Inilize(Timer2, &TIM_InitStructure); + 269 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 1127 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 7 8 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Listings/tm1650.lst b/Listings/tm1650.lst new file mode 100644 index 0000000..e7410f9 --- /dev/null +++ b/Listings/tm1650.lst @@ -0,0 +1,225 @@ +C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 1 + + +C51 COMPILER V9.60.0.0, COMPILATION OF MODULE TM1650 +OBJECT MODULE PLACED IN .\Objects\tm1650.obj +COMPILER INVOKED BY: d:\Keil_v5\C51\BIN\C51.EXE mycode\tm1650.c OPTIMIZE(8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXT + -END PRINT(.\Listings\tm1650.lst) TABS(2) OBJECT(.\Objects\tm1650.obj) + +line level source + + 1 #include "tm1650.h" + 2 #include "delay.h" + 3 #include "timer.h" + 4 // 寰涓涓寚瀹氱殑鏁扮爜绠′綅鍐欏叆鎸囧畾鐨勬樉绀烘暟鎹 + 5 // 鍏遍槾鏁扮爜绠℃鐮佽〃锛 + 6 // const unsigned char TUBE_TABLE_0[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; + - //鍏遍槾锛0~9鐨勬暟瀛 + 7 const unsigned char TUBE_TABLE_0[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, + -0x7c, 0x39, 0x5e, 0x79, 0x71}; // 鍏遍槾锛0~9~A~F + 8 const unsigned char TUBE_TABLE_1[16]={0x01,0x21,0x30,0x18,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x0 + -c,0x06,0x03}; + 9 // 浜х敓IIC鎬荤嚎璧峰淇″彿 + 10 static void TM1650_IIC_start(void) + 11 { + 12 1 scl = 1; // SCL=1 + 13 1 sda = 1; // SDA=1 + 14 1 Delay4us(); + 15 1 sda = 0; // SDA=0 + 16 1 Delay4us(); + 17 1 scl = 0; // SCL=0 + 18 1 } + 19 // 浜х敓IIC鎬荤嚎缁撴潫淇″彿 + 20 static void TM1650_IIC_stop(void) + 21 { + 22 1 scl = 0; // SCL=0 + 23 1 sda = 0; // SDA=0 + 24 1 Delay4us(); + 25 1 scl = 1; // SCL=1 + 26 1 Delay4us(); + 27 1 sda = 1; // SDA=1 + 28 1 } + 29 // 閫氳繃IIC鎬荤嚎鍙戦佷竴涓瓧鑺 + 30 static void TM1650_IIC_write_byte(unsigned char dat) + 31 { + 32 1 unsigned char i; + 33 1 scl = 0; + 34 1 for (i = 0; i < 8; i++) + 35 1 { + 36 2 do + 37 2 { + 38 3 if (dat & 0x80) + 39 3 sda = 1; // SDA=1 + 40 3 else + 41 3 sda = 0; + 42 3 } while (0); + 43 2 dat <<= 1; + 44 2 Delay2us(); + 45 2 scl = 1; + 46 2 Delay2us(); + 47 2 scl = 0; + 48 2 Delay2us(); + 49 2 } + 50 1 } + 51 // 閫氳繃IIC鎬荤嚎鎺ユ敹浠庢満鍝嶅簲鐨凙CK淇″彿 + C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 2 + + 52 static unsigned char TM1650_IIC_wait_ack(void) + 53 { + 54 1 unsigned char ack_signal = 0; + 55 1 sda = 1; // SDA=1 + 56 1 Delay2us(); + 57 1 ack_signal = sda; + 58 1 scl = 1; + 59 1 Delay2us(); + 60 1 // if(sda == 0) + 61 1 // ack_signal = 1; //濡傛灉璇诲彇鍒扮殑鏄疦ACK淇″彿 + 62 1 scl = 0; + 63 1 Delay2us(); + 64 1 return ack_signal; + 65 1 } + 66 + 67 // 浣滅敤锛氳缃樉绀哄弬鏁 + 68 // 澶囨敞锛氳繖涓搷浣滀笉褰卞搷鏄惧瓨涓殑鏁版嵁 + 69 // 鐢ㄤ緥锛 + 70 // 璁剧疆浜害骞舵墦寮鏄剧ず:TM1650_cfg_display(TM1650_BRIGHTx) + 71 // 鍏抽棴鏄剧ず:TM1650_cfg_display(TM1650_DSP_OFF) + 72 static void TM1650_cfg_display(unsigned char x) + 73 { + 74 1 TM1650_IIC_start(); + 75 1 TM1650_IIC_write_byte(0x48); + 76 1 TM1650_IIC_wait_ack(); // 鍥哄畾鍛戒护 + 77 1 TM1650_IIC_write_byte(x); + 78 1 TM1650_IIC_wait_ack(); // 鍙傛暟鍊 + 79 1 TM1650_IIC_stop(); + 80 1 } + 81 // 鍦―IG1浣嶄笂鏄剧ず鏁板瓧3: TM1650_print(TM1650_DIG1,TUBE_TABLE_0[3]); + 82 void TM1650_print(unsigned char dig, unsigned char seg_data) + 83 { + 84 1 + 85 1 TM1650_IIC_start(); + 86 1 TM1650_IIC_write_byte(dig * 2 + 0x68); + 87 1 TM1650_IIC_wait_ack(); // 鏄惧瓨璧峰鍦板潃涓0x68 + 88 1 TM1650_IIC_write_byte(seg_data); + 89 1 TM1650_IIC_wait_ack(); // 鍙戦佹鐮 + 90 1 TM1650_IIC_stop(); + 91 1 } + 92 // 灏嗘樉瀛樻暟鎹叏閮ㄥ埛涓0锛屾竻绌烘樉绀 + 93 static void TM1650_clear(void) + 94 { + 95 1 unsigned char a; + 96 1 for (a = TM1650_DIG1; a <= TM1650_DIG4; a++) + 97 1 { + 98 2 TM1650_print(a, 0); // 灏嗘樉瀛樻暟鎹埛涓0 + 99 2 } + 100 1 } + 101 // TM1650鍒濆鍖 + 102 void TM1650_init(void) + 103 { + 104 1 sda = 1; // 閲婃斁SDA绾 + 105 1 scl = 1; // 閲婃斁SCL绾 + 106 1 TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + 107 1 TM1650_clear(); // 灏嗘樉瀛樺唴瀹规竻0 + 108 1 } + 109 + 110 void TM1650_printpogrun(u8 set,u8 mode) // 鏄剧ずrun + 111 { + 112 1 sda = 1; // 閲婃斁SDA绾 + 113 1 scl = 1; // 閲婃斁SCL绾 + C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 3 + + 114 1 TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + 115 1 TM1650_print(TM1650_DIG1, TUBE_TABLE_1[mode]); + 116 1 Delay4us(); + 117 1 TM1650_print(TM1650_DIG2, 0x73); + 118 1 Delay4us(); + 119 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]); + 120 1 Delay4us(); + 121 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_1[mode+8]); + 122 1 } + 123 void TM1650_printpogstop(u8 set) // 鏄剧ずrun + 124 { + 125 1 sda = 1; // 閲婃斁SDA绾 + 126 1 scl = 1; // 閲婃斁SCL绾 + 127 1 TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + 128 1 TM1650_print(TM1650_DIG1, 0x40); + 129 1 Delay4us(); + 130 1 TM1650_print(TM1650_DIG2, 0x73); + 131 1 Delay4us(); + 132 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]); + 133 1 Delay4us(); + 134 1 TM1650_print(TM1650_DIG4, 0x40); + 135 1 } + 136 void TM1650_print_SMG1(u8 set) // 鏄剧ず----椤甸潰0鏄剧ず + 137 { + 138 1 sda = 1; // 閲婃斁SDA绾 + 139 1 scl = 1; // 閲婃斁SCL绾 + 140 1 TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + 141 1 TM1650_print(TM1650_DIG1, 0x40); + 142 1 Delay4us(); + 143 1 if (set > 99) + 144 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]); + 145 1 else + 146 1 TM1650_print(TM1650_DIG2, 0x00); + 147 1 Delay4us(); + 148 1 if (set > 9) + 149 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]); + 150 1 else + 151 1 TM1650_print(TM1650_DIG3, 0x00); + 152 1 Delay4us(); + 153 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]); + 154 1 } + 155 void TM1650_print_SMG2(u16 set) // 鏄剧ず----椤甸潰0鏄剧ず + 156 { + 157 1 sda = 1; // 閲婃斁SDA绾 + 158 1 scl = 1; // 閲婃斁SCL绾 + 159 1 TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + 160 1 TM1650_print(TM1650_DIG1, 0x48); + 161 1 Delay4us(); + 162 1 if (set > 99) + 163 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]); + 164 1 else + 165 1 TM1650_print(TM1650_DIG2, 0x00); + 166 1 Delay4us(); + 167 1 if (set > 9) + 168 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]); + 169 1 else + 170 1 TM1650_print(TM1650_DIG3, 0x00); + 171 1 Delay4us(); + 172 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]); + 173 1 } + 174 void TM1650_print_SMG3(u8 set) // 鏄剧ず----椤甸潰0鏄剧ず + 175 { + C51 COMPILER V9.60.0.0 TM1650 03/23/2023 15:55:27 PAGE 4 + + 176 1 sda = 1; // 閲婃斁SDA绾 + 177 1 scl = 1; // 閲婃斁SCL绾 + 178 1 TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + 179 1 TM1650_print(TM1650_DIG1, 0x49); + 180 1 Delay4us(); + 181 1 if (set > 99) + 182 1 TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]); + 183 1 else + 184 1 TM1650_print(TM1650_DIG2, 0x00); + 185 1 Delay4us(); + 186 1 if (set > 9) + 187 1 TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]); + 188 1 else + 189 1 TM1650_print(TM1650_DIG3, 0x00); + 190 1 Delay4us(); + 191 1 TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]); + 192 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 657 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = 32 14 + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Motorcontroller.uvgui.User b/Motorcontroller.uvgui.User new file mode 100644 index 0000000..46bd112 --- /dev/null +++ b/Motorcontroller.uvgui.User @@ -0,0 +1,1941 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + E:\my code all\stc\Motorcontroller + + + + + + + 38003 + Registers + 254 56 + + + 346 + Code Coverage + 1410 160 + + + 204 + Performance Analyzer + 1570 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 143 143 143 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 300 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 296 + 1592 + 3352 + 1524 + + + + 0 + + 760 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000008000000070000000100000030453A5C6D7920636F646520616C6C5C7374635C4D6F746F72636F6E74726F6C6C65725C6D79636F64655C4750494F2E6300000000064750494F2E6300000000C5D4F200FFFFFFFF2F453A5C6D7920636F646520616C6C5C7374635C4D6F746F72636F6E74726F6C6C65725C6D79696E635C4750494F2E6800000000064750494F2E6800000000FFDC7800FFFFFFFF31453A5C6D7920636F646520616C6C5C7374635C4D6F746F72636F6E74726F6C6C65725C6D79636F64655C64656C61792E63000000000764656C61792E6300000000BECEA100FFFFFFFF30453A5C6D7920636F646520616C6C5C7374635C4D6F746F72636F6E74726F6C6C65725C6D79636F64655C6D61696E2E6300000000066D61696E2E6300000000F0A0A100FFFFFFFF31453A5C6D7920636F646520616C6C5C7374635C4D6F746F72636F6E74726F6C6C65725C6D79636F64655C74696D65722E63000000000774696D65722E6300000000BCA8E100FFFFFFFF30453A5C6D7920636F646520616C6C5C7374635C4D6F746F72636F6E74726F6C6C65725C6D79696E635C74696D65722E68000000000774696D65722E68000000009CC1B600FFFFFFFF32453A5C6D7920636F646520616C6C5C7374635C4D6F746F72636F6E74726F6C6C65725C6D79636F64655C746D313635302E630000000008746D313635302E6300000000F7B88600FFFFFFFF32453A5C6D7920636F646520616C6C5C7374635C4D6F746F72636F6E74726F6C6C65725C6D79636F64655C636F6D6D6F6E2E630000000008636F6D6D6F6E2E6300000000D9ADC200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000008407000096010000100D00000F050000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 440100004F0000007007000015010000 + + + 16 + DC03000013010000080A0000D9010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D010000AF030000 + + + 16 + 5A010000710100009A02000084020000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D010000AF030000 + + + 16 + 5A01000071010000D602000089040000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 5A010000710100001205000037020000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100009A02000084020000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100009A02000084020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100009A02000084020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D010000AF030000 + + + 16 + 5A01000071010000D602000089040000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D010000AF030000 + + + 16 + 5A01000071010000D602000089040000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000E0030000D006000092040000 + + + 16 + 5A010000710100001205000037020000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000F102000070070000CB030000 + + + 16 + 5A010000710100001205000037020000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E3030000CD06000079040000 + + + 16 + 5A010000710100001205000037020000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 5A010000710100001205000037020000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 5A010000710100001205000037020000 + + + + 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 + 5A010000710100009A02000084020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100001205000037020000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 5A010000710100001205000037020000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 5A010000710100001205000037020000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 5A010000710100001205000037020000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D01000022030000 + + + 16 + 5A01000071010000D602000089040000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E3030000CD06000079040000 + + + 16 + 5A010000710100001205000037020000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E3030000CD06000079040000 + + + 16 + 5A01000071010000D602000089040000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100009A02000084020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000080300006D070000B2030000 + + + 16 + 5A010000710100009A02000084020000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E3030000CD06000079040000 + + + 16 + 5A01000071010000D602000089040000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E3030000CD06000079040000 + + + 16 + 5A01000071010000D602000089040000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FC000000 + + + 16 + 5A010000710100001205000037020000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E8020000 + + + 16 + 5A010000710100009A02000084020000 + + + + 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 + 0000000092040000D0060000A5040000 + + + 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 + 5A010000710100009A02000084020000 + + + + 3312 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000150100007007000019010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000DC03000013010000080A0000D9010000440100004F00000070070000150100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F0000003006000001030000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000C808000013010000080A0000C5030000300600004F000000700700000103000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F00000044010000C8030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000009802000013010000D8030000FF030000000000004F00000040010000C80300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000ED02000070070000F102000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000098020000B5030000080A00008F04000000000000F102000070070000CB03000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000F1020000BC030000CB03000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000C8030000D0060000CC030000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000980200000304000068090000C904000000000000CC030000D0060000920400000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2560 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000954494D5F56616C7565960000000000000001000954494D5F56616C756500000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008546172676574203196000000000000000100085461726765742031000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 3440 + 1440 + + + + + + 1 + 0 + + 100 + 7 + + .\mycode\GPIO.c + 0 + 1 + 19 + 1 + + 0 + + + .\myinc\GPIO.h + 1 + 3 + 30 + 1 + + 0 + + + .\mycode\delay.c + 0 + 1 + 1 + 1 + + 0 + + + .\mycode\main.c + 19 + 1 + 3 + 1 + + 0 + + + .\mycode\timer.c + 15 + 1 + 19 + 1 + + 0 + + + .\myinc\timer.h + 0 + 1 + 46 + 1 + + 0 + + + .\mycode\tm1650.c + 1 + 33 + 83 + 1 + + 0 + + + .\mycode\common.c + 0 + 1 + 1 + 1 + + 0 + + + + +
diff --git a/Motorcontroller.uvopt b/Motorcontroller.uvopt new file mode 100644 index 0000000..478536d --- /dev/null +++ b/Motorcontroller.uvopt @@ -0,0 +1,289 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Target 1 + 0x0 + MCS-51 + + 35000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + 1 + 1 + 2 + 0 + 0 + 0 + .\STARTUP.A51 + STARTUP.A51 + 0 + 0 + + + + + mycode + 1 + 0 + 0 + 0 + + 2 + 2 + 1 + 0 + 0 + 0 + .\mycode\delay.c + delay.c + 0 + 0 + + + 2 + 3 + 1 + 0 + 0 + 0 + .\mycode\GPIO.c + GPIO.c + 0 + 0 + + + 2 + 4 + 1 + 0 + 0 + 0 + .\mycode\main.c + main.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + .\mycode\UART.C + UART.C + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + .\mycode\timer.c + timer.c + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + .\mycode\tm1650.c + tm1650.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + .\mycode\common.c + common.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + .\mycode\EEPROM.c + EEPROM.c + 0 + 0 + + + +
diff --git a/Motorcontroller.uvproj b/Motorcontroller.uvproj new file mode 100644 index 0000000..7b5f787 --- /dev/null +++ b/Motorcontroller.uvproj @@ -0,0 +1,435 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x0 + MCS-51 + 0 + + + STC8G1K08 Series + STC + IRAM(0-0xFF) XRAM(0-0x03FF) IROM(0-0x1FF8) CLOCK(35000000) MODP2 + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 63316 + STC8.H + + + + + + + + + + + 0 + 0 + + + + STC\ + STC\ + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + Motorcontroller + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -pDP8051 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + -1 + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + 0 + 0 + -1 + + 0 + + + + + + + 0 + + + + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x1ff9 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x400 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 1 + 1 + 0 + 0 + + + + + .\myinc + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 1 + 0 + 2 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Source Group 1 + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + + + mycode + + + delay.c + 1 + .\mycode\delay.c + + + GPIO.c + 1 + .\mycode\GPIO.c + + + main.c + 1 + .\mycode\main.c + + + UART.C + 1 + .\mycode\UART.C + + + timer.c + 1 + .\mycode\timer.c + + + tm1650.c + 1 + .\mycode\tm1650.c + + + common.c + 1 + .\mycode\common.c + + + EEPROM.c + 1 + .\mycode\EEPROM.c + + + + + + + +
diff --git a/Objects/EEPROM.__i b/Objects/EEPROM.__i new file mode 100644 index 0000000..8e4bb8b --- /dev/null +++ b/Objects/EEPROM.__i @@ -0,0 +1 @@ +"mycode\EEPROM.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\EEPROM.lst) TABS (2) OBJECT(.\Objects\EEPROM.obj) \ No newline at end of file diff --git a/Objects/EEPROM.obj b/Objects/EEPROM.obj new file mode 100644 index 0000000000000000000000000000000000000000..6107b6a1ec6290ff218cd66d65a0ea22b8f8721d GIT binary patch literal 105055 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

nxvz!GkdX^Kx!SmH7yXk15+A>=TG{L$% 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 z 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 literal 0 HcmV?d00001 diff --git a/Objects/Motorcontroller.build_log.htm b/Objects/Motorcontroller.build_log.htm new file mode 100644 index 0000000..da88a31 --- /dev/null +++ b/Objects/Motorcontroller.build_log.htm @@ -0,0 +1,39 @@ + + +

+

礦ision Build Log

+

Tool Versions:

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

Project:

+e:\my code all\stc\Motorcontroller\Motorcontroller.uvproj +Project File Date: 03/17/2023 + +

Output:

+Build target 'Target 1' +compiling timer.c... +compiling common.c... +linking... +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_PRINTSTRING1?UART +*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS + SEGMENT: ?PR?_TM1650_PRINT_SMG3?TM1650 +Program Size: data=100.1 xdata=64 code=8087 +creating hex file from ".\Objects\Motorcontroller"... +".\Objects\Motorcontroller" - 0 Error(s), 2 Warning(s). +Build Time Elapsed: 00:00:00 +
+ + diff --git a/Objects/Motorcontroller.hex b/Objects/Motorcontroller.hex new file mode 100644 index 0000000..337e586 --- /dev/null +++ b/Objects/Motorcontroller.hex @@ -0,0 +1,563 @@ +:030000000218DC07 +:0C18DC00787FE4F6D8FD758163021923C3 +:0F1F5E007D607C09ED1D70011C144C70F7DFF1E4 +:011F6D002251 +:0600030000007F0CDFFE8F +:0100090022D4 +:05000E00007F05DFFE8C +:0100130022CA +:10102300EFD394077480948040037F0122120999BF +:10103300FED394037480948040037F0222EF7044B4 +:10104300EE700B9000011209B2F4529352941209FC +:10105300996401700B9000011209B24293F4529407 +:10106300120999FE6402700A9000011209B24293B8 +:101073004294EE6403700D9000011209B2FEF45223 +:1010830093EE4294EF64017046120999FE700B903F +:1010930000011209B2F452915292EE6401700B9066 +:1010A30000011209B24291F452921209996402703A +:1010B3000A9000011209B242914292120999640303 +:1010C300700D9000011209B2FEF45291EE4292EFBC +:1010D30064027046120999FE700B9000011209B266 +:1010E300F452955296EE6401700B9000011209B20E +:1010F3004295F452961209996402700A9000011203 +:1011030009B2429542961209996403700D90000149 +:101113001209B2FEF45295EE4296EF640370461242 +:101123000999FE700B9000011209B2F452B152B248 +:10113300EE6401700B9000011209B242B1F452B295 +:101143001209996402700A9000011209B242B14275 +:10115300B21209996403700D9000011209B2FEF4F2 +:1011630052B1EE42B2EF64047046120999FE700B5D +:101173009000011209B2F452B352B4EE6401700B41 +:101183009000011209B242B3F452B41209996402F5 +:10119300700A9000011209B242B342B41209996471 +:1011A30003700D9000011209B2FEF452B3EE42B483 +:1011B300EF64057046120999FE700B900001120945 +:1011C300B2F452C952CAEE6401700B9000011209C5 +:1011D300B242C9F452CA1209996402700A9000011A +:1011E3001209B242C942CA1209996403700D9000F0 +:1011F300011209B2FEF452C9EE42CAEF6406704608 +:10120300120999FE700B9000011209B2F452CB52ED +:10121300CCEE6401700B9000011209B242CBF45280 +:10122300CC1209996402700A9000011209B242CBF0 +:1012330042CC1209996403700D9000011209B2FEA9 +:10124300F452CBEE42CCEF64077049120999FF7E4A +:1012530000700B9000011209B2F452E152E2EF6404 +:10126300014E700B9000011209B242E1F452E212F6 +:1012730009996402700A9000011209B242E142E244 +:101283001209996403700D9000011209B2FFF45220 +:07129300E1EF42E27F0022BF +:101D08007543ECE4F542FB7A0079427F0312102315 +:101D180075431C7542037F011210237543E1E4F5F6 +:101D2800427F01121023754310E4F5427F0512101B +:031D380023D2941F +:011D3B002285 +:05001E0025640D0A003D +:10002600120014121D70121D08121E58121D3CD209 +:10003600AF7F0A121F5E1200A612129A121B3A1204 +:100046001E017BFF7A00791E856148856047855FC2 +:0900560046855E4512069F80DD1F +:0614DF008B4E8A4F89507C +:1014E500EF640160030216D9755601F557F558F5F5 +:1014F50059F55AF55BF55CFFEFC394207480948031 +:10150500500F74202FF582E43400F583E4F00F804A +:10151500E7E4FFEFC3942074809480500F74002F8C +:10152500F582E43400F583E4F00F80E7AB4EAA4F73 +:10153500A95090000A1209B2FD7C00D3940374806F +:10154500948040037F0222ED4C700553B7EFC2BC77 +:10155500AB4EAA4FA95090000A1209B2640170055A +:1015650053B7EFD2BC90000A1209B2FF7E006402A5 +:10157500700543B710C2BCEF64034E700543B71046 +:10158500D2BC120999FD7C00D394C074809480402C +:10159500037F0222120999FFE598543F4FF598ED14 +:1015A50064C04C6008EF6440600302166690000258 +:1015B500120C297F807E8D7D5B7C00120B738F540E +:1015C5008E538D528C51E4FFFE7D01FCAB54AA5322 +:1015D500A952A851C3120C0540037F0222C3E4950A +:1015E50054F554E49553F55374019552F552E49529 +:1015F50051F551AB4EAA4FA9509000011209B2FB0B +:101605007A006401702CC28E538EFE5389BF5389B4 +:10161500CF438E40AF54AE53AD52AC517808120C47 +:10162500168F8D85548BC2AB5389BF538FFDD28ED8 +:101635008069EB64024A7026538EEF438E01538E08 +:10164500F7438E04AF54AE53AD52AC517808120C2B +:10165500168FD68554D753AFFB438E10803D7F023E +:1016650022AB4EAA4FA950120999FF7E0070149023 +:1016750000081209B264017005438E20801D538E47 +:10168500DF8018EF64804E70129000081209B26472 +:10169500017005438780800353877FAB4EAA4FA90E +:1016A500509000091209B264017004D2AC8002C2E4 +:1016B500AC9000071209B264017004D29C8002C28A +:1016C5009C90000B1209B254C0FFE5A2543F4FF5A0 +:0616D500A27F00227F024B +:0116DB0022EC +:101E810074202558F582E43400F583EFF00558C33A +:101E9100E5589420748094804003E4F558E5597026 +:071EA10005755901D29922D9 +:101F3800120999FF600C121E81740129F9E43AFA1A +:031F480080EE2206 +:030023000219EBD4 +:1019EB00C0E0C083C082C0D075D000C0073098283B +:1019FB00C298E55C7022C3E55A94207480948040B1 +:101A0B0003755A00AF5A055A74002FF582E434005F +:101A1B00F583E599F0755B0530992BC299E5576510 +:101A2B0058602074202557F582E43400F583E0F5E7 +:101A3B00990557C3E55794207480948040087557D7 +:101A4B00008003755900D007D0D0D082D083D0E06E +:011A5B003258 +:101E58007542407543017547007546C27545017561 +:101E68004400754901E4F54A754B01F54CF54DFB05 +:091E78007A0079427F010214DFB7 +:05009E00AE07021E8107 +:071BA80002620000015D0074 +:03000B00021836A2 +:10183600C0E0C0F0C083C082C0D075D000C000C078 +:1018460001C002C003C004C005C006C007E50964A4 +:101856000370277E017490A817088005C333CE3322 +:10186600CED8F9FFEE3395E0FDFCAB61AA60A95F27 +:10187600A85ED3120C055002C292E4FFFEFDFCAB3B +:1018860061AA60A95FA85ED3120C05500E756100AF +:10189600756000755F00755E008020E50A64017062 +:1018A6001AE56124FFF561E56034FFF560E55F3414 +:1018B600FFF55FE55E34FFF55EB293D007D006D044 +:1018C60005D004D003D002D001D000D0D0D082D031 +:0618D60083D0F0D0E032E7 +:03001B0002000AD6 +:01000A0032C3 +:03006300021C0775 +:101C0700C0E0C0D00563E56370020562C394C8E510 +:101C1700629400402E309213E55D9407748094809F +:101C27004005755D008016055D8012D3E55D940063 +:101C3700748094805005755D078002155D7562009C +:101C4700756300E514600A051EE51E700A051D8010 +:0C1C570006751D00751E00D0D0D0E032D4 +:03009B0002001A46 +:01001A0032B3 +:0300A30002005FF9 +:01005F00326E +:100CF200AD07EDD394047480948040037F0122ED0C +:100D02006003020DC7C28C9000021209B264017026 +:100D120004D2A98002C2A99000011209B2FED394A2 +:100D2200037480948040037F0222EEFF7E007005F0 +:100D320053B7FDC2B9EF64014E700553B7FDD2B986 +:100D4200EF64024E700543B702C2B9EF64034E70FE +:100D52000543B702D2B9120999FEC3940374809471 +:100D62008040037F0222E58954FC4EF589900003FE +:100D72001209B2FF7E0064017003538E7FEF4E7042 +:100D820003438E80EF64024E70054389048003534F +:100D920089FB9000041209B264017005438F01803F +:100DA20003538FFE900005120AB0E5F0F58C900017 +:100DB20005120AB0F58A9000071209B264017002A6 +:100DC200D28C7F0022ED64016003020E94C28E90E9 +:100DD20000021209B264017004D2AB8002C2AB906D +:100DE20000011209B2FED394037480948040037F01 +:100DF2000222EEFF7E00700553B7F7C2BBEF64011B +:100E02004E700553B7F7D2BBEF64024E700543B77D +:100E120008C2BBEF64034E700543B708D2BB120988 +:100E220099FEC394037480948040037F0222EEC42F +:100E320054F0FFE58954CF4FF5899000031209B2AF +:100E4200FF7E0064017003538EBFEF4E7003438E2A +:100E520040EF64024E700543894080035389BF907E +:100E620000041209B264017005438F028003538F9C +:100E7200FD900005120AB0E5F0F58D900005120A0A +:100E8200B0F58B9000071209B264017002D28E7F16 +:100E92000022ED6402707C538EEF9000021209B2C0 +:100EA2006401700543AF04800353AFFB900003124B +:100EB20009B2FED394027480948040037F0222EE32 +:100EC200FF7E0064017003538EFBEF4E7003438E6E +:100ED20004EF64024E7005438E088003538EF79030 +:100EE20000041209B264017005438F048003538F1A +:100EF200FB900005120AB0E5F0F5D6900005120A43 +:100F0200B0F5D79000071209B264017003438E1046 +:100F12007F0022ED6403707C53D1F7900002120926 +:100F2200B26401700543AF20800353AFDF9000032A +:100F32001209B2FED394027480948040037F02228D +:100F4200EEFF7E006401700353D1FDEF4E70034348 +:100F5200D102EF64024E700543D104800353D1FBEA +:100F62009000041209B26401700543D10180035359 +:100F7200D1FE900005120AB0E5F0F5D490000512FA +:100F82000AB0F5D59000071209B26401700343D18B +:100F9200087F0022ED6404600302102053D17F9089 +:100FA20000021209B26401700543AF40800353AFDF +:100FB200BF9000031209B2FD7C00D39402748094A6 +:100FC2008040037F0222ED64014C700353D1DF9015 +:100FD20000031209B2700343D1209000031209B238 +:100FE2006402700543D140800353D1BF90000412C4 +:100FF20009B26401700543D110800353D1EF900010 +:1010020005120AB0FDACF0ECF5D2AF058FD390001B +:10101200071209B26401700343D1807F00227F026C +:0110220022AB +:101D7000E4F542F543754401F545F5467547FF75B1 +:101D80004810754901FB7A007942FF120CF2E4F524 +:101D900045F5467547A27548407549017F02020C1A +:011DA000F250 +:101BAF0010223F065B4F666D7D077F6F777C395E36 +:101BBF007971103201213018080000000100000077 +:041BCF00080C0603F5 +:0F1F6E00D2B2D2B3120003C2B3120003C2B22226 +:0F1F7D00C2B2C2B3120003D2B2120003D2B32217 +:020066008F49C0 +:10006800C2B2E4F54AC3E54A9408748094805022E9 +:10007800E54930E704D2B38002C2B3E54925E0F58B +:100088004912000ED2B212000EC2B212000E054A78 +:0200980080D313 +:01009A002243 +:101EEA00E4F549D2B312000EA2B3E433F549D2B2F3 +:0A1EFA0012000EC2B212000EAF4932 +:011F040022BA +:061ECC00D2B3D2B27F5137 +:101ED2008F47121F6E7F48120066121EEAAF47122A +:081EE2000066121EEA021F7DDA +:051EA800F8E6FD7F02D9 +:101EAD008F478D48121F6EE54725E02468FF12000D +:0F1EBD0066121EEAAF48120066121EEA021F7D6F +:101F0500E4F542D3E542940374809480500BE4FDDC +:091F1500AF42121EAD054280EA44 +:011F1E0022A0 +:06001400121ECC021F05C4 +:101CD2008F458D46121ECC74322546F8E6FDE4FF90 +:101CE200121EAD1200037D737F01121EAD1200039E +:101CF20074222545121EA8120003743A2546F8E6FE +:061D0200FD7F03021EAD8F +:101E2E008F45121ECC7D40E4FF121EAD1200037DC5 +:101E3E00737F01121EAD12000374222545121EA8D7 +:0A1E4E001200037D407F03021EAD69 +:101A5C008F45121ECC7D40E4FF121EAD120003D345 +:101A6C00E5459463748094804012E54575F0648478 +:101A7C0075F00A84742225F0F8E68001E4FD7F01FC +:101A8C00121EAD120003D3E5459409748094804076 +:101A9C0012E54575F00A8475F00A84742225F0F875 +:101AAC00E68001E4FD7F02121EAD120003E54575D0 +:0F1ABC00F00A84742225F0F8E6FD7F03021EADC8 +:101968008E458F46121ECC7D48E4FF121EAD120034 +:1019780003D3E5469463E54594004019AE45AF4668 +:101988007C007D64120A257C007D0A120A257422D7 +:101998002DF8E68001E4FD7F01121EAD120003D38D +:1019A800E5469409E54594004019AE45AF467C00EC +:1019B8007D0A120A257C007D0A120A2574222DF858 +:1019C800E68001E4FD7F02121EAD120003AE45AFB2 +:1019D800467C007D0A120A2574222DF8E6FD7F0355 +:0319E800021EAD2F +:101ACB008F1F121ECC7D49E4FF121EAD120003D3F3 +:101ADB00E51F9463748094804012E51F75F0648455 +:101AEB0075F00A84742225F0F8E68001E4FD7F018D +:101AFB00121EAD120003D3E51F940974809480402D +:101B0B0012E51F75F00A8475F00A84742225F0F82B +:101B1B00E68001E4FD7F02121EAD120003E51F7586 +:0F1B2B00F00A84742225F0F8E6FD7F03021EAD58 +:101BD300011400010901010A04021D0000010800AB +:101BE30001193C011A3C011B3C011C3C0115040179 +:101BF3001604011704011804090B0000000000007B +:031C0300000000DE +:10178A00E50860047F6480027FF4E50A24FD604B6B +:10179A00046003021835E5147018041209DF1209EF +:1017AA0099C394647480948040057464120A017524 +:1017BA001401EFFDD3E51E9DE51D9400406D7401F3 +:1017CA001209DFE4F51DF51E750801120999C39483 +:1017DA00647480948040547464804DE514701EAB28 +:1017EA0045AA46A947041209DF120999C394087445 +:1017FA0080948040057408120A01751401D3E51E0D +:10180A009FE51D94004024AB45AA46A947740112DE +:10181A0009DFE4F51DF51E750801120999C394083C +:0B182A007480948040057408120A01CD +:011835002290 +:1016DC00E50860047F6480027FF4E50A24FD604C19 +:1016EC00046003021789E514701974FF1209DF12E4 +:1016FC000999D3940A748094805005740A120A01D3 +:10170C00751401EFFDD3E51E9DE51D9400406E742C +:10171C00FF1209DFE4F51DF51E750801120999D3B6 +:10172C00940A748094805055740A8049E514702092 +:10173C00AB45AA46A947120999D3940074809480AA +:10174C005006E4120A01800574FF1209DF751401BA +:10175C00D3E51E9FE51D94004023E4F51DF51E7591 +:10176C000801AB45AA46A947120999D39400748085 +:0D177C0094805004E4020A0174FF1209DF9A +:01178900223D +:10129A0020951FE514701BAF15FE7C017D90120A84 +:1012AA0013E48F618E60F55FF55ED29275090112C3 +:1012BA001C6320961FE514701BAF16FE7C017D90FF +:1012CA00120A13E48F618E60F55FF55EC2927509AA +:1012DA0002121C6320972CE51470287E037420A840 +:1012EA0017088005C333CE33CED8F9FFEE3395E025 +:1012FA008F618E60F55FF55ED292750903751401F0 +:10130A00121C6620CC15E5147011F561F560F55FC5 +:10131A00F55E750904751401121C66209029E514FE +:10132A007025E50A24FE600C14600E146004240380 +:10133A007012800D750A03800B750A04121C6680F0 +:10134A0003750A0275140120B755E50924FE601BCE +:10135A0014602914603724037045754500754600EA +:10136A007547157B007A00791980317545007546F5 +:10137A00007547167B007A00791A8020754500753A +:10138A0046007547177B007A00791B800F75450068 +:10139A007546007547187B007A00791C12178A2057 +:1013AA00B655E50924FE601B14602914603724032E +:1013BA0070457545007546007547157B007A0079BA +:1013CA001980317545007546007547167B007A000D +:1013DA00791A80207545007546007547177B007A93 +:1013EA0000791B800F7545007546007547187B000C +:1013FA007A00791C1216DC20B577E5147073E50AB9 +:10140A0064016005750A018003750A04121C667579 +:10141A001401E50924FE6019146037240270527E13 +:10142A00017490A815088005C333CE33CED8F9804D +:10143A00317E017490A816088005C333CE33CED806 +:10144A00F9FFEE3395E08F618E60F55FF55EC2922B +:10145A00801F7E037420A817088005C333CE33CEBD +:10146A00D8F9FFEE3395E08F618E60F55FF55ED2B5 +:10147A00923096047F0180027F003095047E0180BD +:10148A00027E00EE5FFF3097047E0180027E00EE4E +:10149A005FFF30CC047E0180027E00EE5FFF309059 +:1014AA00047E0180027E00EE5FFF30B7047E018079 +:1014BA00027E00EE5FFF30B6047E0180027E00EEFF +:1014CA005FFF30B5047E0180027E00EE5F6005E4B6 +:0514DA00F514F50822E5 +:101DD2008F428C438D44E50A24FE60111460131473 +:101DE200601724037018AD5DAF09021CD2AF420226 +:0F1DF2001A5CAF44AE43021968AF09121E2E22CD +:101B3A00E50924FE60211460351460492403705DB0 +:101B4A007E007401A815088005C333CE33CED8F9B8 +:101B5A00FDAC06AF1980437E007401A81608800503 +:101B6A00C333CE33CED8F9FDAC06AF1A802C7E0033 +:101B7A007401A817088005C333CE33CED8F9FDAC5B +:101B8A0006AF1B80157E007401A818088005C333B0 +:0E1B9A00CE33CED8F9FDAC06AF1C121DD22200 +:1000A600E50924FE700302024A1470030203961443 +:1000B60070030204E22403600302063CE51975F0AE +:1000C60014A4FBAAF07E007401A815088005C333AA +:1000D600CE33CED8F9FDAC06AF03AE02120A137CBE +:1000E600007D03120A7AC3EF9490EE940140030256 +:1000F6000194538E7FAF197E007C007D50120C59FF +:10010600C004C005C006C0077E007401A81508809B +:1001160005C333CE33CED8F9FFEE3395E0FDFCD0E0 +:1001260003D002D001D000120AE8A804A905AA0645 +:10013600AB077F007E367D6E7C01120B73C3E49F96 +:10014600FFE49EFE74019DFDE49CFCE4FB7A01F94C +:10015600F8120B738F8CAF197E007C007D50120C49 +:1001660059C004C005C006C0077E007401A8150862 +:100176008005C333CE33CED8F9FFEE3395E0FDFCD0 +:10018600D003D002D001D000120AE802023F438E0B +:1001960080AF197E007C007D14120C59C004C00586 +:1001A600C006C0077E007401A815088005C333CEBB +:1001B60033CED8F9FFEE3395E0FDFCD003D002D064 +:1001C60001D000120AE8E47B03FAF9F8120B73A8CF +:1001D60004A905AA06AB077F007E367D6E7C011258 +:1001E6000B73C3E49FFFE49EFE74019DFDE49CFC3B +:1001F600E4FB7A01F9F8120B738F8CAF197E007C41 +:10020600007D14120C59C004C005C006C0077E004C +:100216007401A815088005C333CE33CED8F9FFEE96 +:100226003395E0FDFCD003D002D001D000120AE8DD +:10023600E47B03FAF9F8120B73A804A905AA06AB26 +:100246000702062BE51A75F014A4FBAAF07E0074CB +:1002560001A816088005C333CE33CED8F9FDAC0607 +:10026600AF03AE02120A137C007D03120A7AC3EFB3 +:100276009490EE94014003020304538E7FE51A75B1 +:10028600F050A4FBAAF07E007401A816088005C3EE +:1002960033CE33CED8F9FDAC06AF03AE02120A1345 +:1002A600AB07AA06EA3395E0F9F87F007E367D6E45 +:1002B6007C01120B73C3E49FFFE49EFE74019DFD57 +:1002C600E49CFCE4FB7A01F9F8120B738F8CE51AB7 +:1002D60075F050A4FBAAF07E007401A816088005EC +:1002E600C333CE33CED8F9FDAC06AF03AE02120A45 +:1002F60013AB07AA06EA3395E0F9F802062B438EFC +:1003060080E51A75F014A4FBAAF07E007401A81605 +:10031600088005C333CE33CED8F9FDAC06AF03AEA5 +:1003260002120A137C007D03120A7AAB07AA06EAB8 +:100336003395E0F9F87F007E367D6E7C01120B73F3 +:10034600C3E49FFFE49EFE74019DFDE49CFCE4FB78 +:100356007A01F9F8120B738F8CE51A75F014A4FB69 +:10036600AAF07E007401A816088005C333CE33CEEA +:10037600D8F9FDAC06AF03AE02120A137C007D036A +:10038600120A7AAB07AA06EA3395E0F9F802062BB9 +:10039600E51B75F014A4FBAAF07E007401A81708EB +:1003A6008005C333CE33CED8F9FDAC06AF03AE021B +:1003B600120A137C007D03120A7AC3EF9490EE941E +:1003C600014003020450538E7FE51B75F050A4FBD9 +:1003D600AAF07E007401A817088005C333CE33CE79 +:1003E600D8F9FDAC06AF03AE02120A13AB07AA0694 +:1003F600EA3395E0F9F87F007E367D6E7C01120BBC +:1004060073C3E49FFFE49EFE74019DFDE49CFCE43F +:10041600FB7A01F9F8120B738F8CE51B75F050A46B +:10042600FBAAF07E007401A817088005C333CE33FB +:10043600CED8F9FDAC06AF03AE02120A13AB07AA7B +:1004460006EA3395E0F9F802062B438E80E51B7524 +:10045600F014A4FBAAF07E007401A817088005C357 +:1004660033CE33CED8F9FDAC06AF03AE02120A1373 +:100476007C007D03120A7AAB07AA06EA3395E0F9F7 +:10048600F87F007E367D6E7C01120B73C3E49FFFFE +:10049600E49EFE74019DFDE49CFCE4FB7A01F9F800 +:1004A600120B738F8CE51B75F014A4FBAAF07E006B +:1004B6007401A817088005C333CE33CED8F9FDAC36 +:1004C60006AF03AE02120A137C007D03120A7AAB52 +:1004D60007AA06EA3395E0F9F802062BE51C75F043 +:1004E60014A4FBAAF07E007401A818088005C33383 +:1004F600CE33CED8F9FDAC06AF03AE02120A137C9A +:10050600007D03120A7AC3EF9490EE940140030231 +:10051600059C538E7FE51C75F050A4FBAAF07E0067 +:100526007401A818088005C333CE33CED8F9FDACC4 +:1005360006AF03AE02120A13AB07AA06EA3395E02A +:10054600F9F87F007E367D6E7C01120B73C3E49F43 +:10055600FFE49EFE74019DFDE49CFCE4FB7A01F938 +:10056600F8120B738F8CE51C75F050A4FBAAF07E75 +:10057600007401A818088005C333CE33CED8F9FD20 +:10058600AC06AF03AE02120A13AB07AA06EA33950E +:10059600E0F9F802062B438E80E51C75F014A4FBE7 +:1005A600AAF07E007401A818088005C333CE33CEA6 +:1005B600D8F9FDAC06AF03AE02120A137C007D0328 +:1005C600120A7AAB07AA06EA3395E0F9F87F007EAD +:1005D600367D6E7C01120B73C3E49FFFE49EFE74AE +:1005E600019DFDE49CFCE4FB7A01F9F8120B738F84 +:1005F6008CE51C75F014A4FBAAF07E007401A81803 +:10060600088005C333CE33CED8F9FDAC06AF03AEB2 +:1006160002120A137C007D03120A7AAB07AA06EAC5 +:100626003395E0F9F87F007E367D6E7C01120B7300 +:07063600C3E49FFF8F8A223D +:101E0100E50A24FE602314602014601D2403701C65 +:101E1100E4FFFEFDFCAB61AA60A95FA85EC3120CE2 +:0D1E2100057003750A04C29422D294222297 +:101D3C007B007A00790B7547007548097F047E009B +:101D4C00121DA1E50BF4601B850B19850C1A850D72 +:101D5C001B850E1C850F15851016851117851218FD +:041D6C0085130922B0 +:031C6300751401F4 +:101C66007F047E00121F4B85190B851A0C851B0DF0 +:101C7600851C0E85150F851610851711851812857A +:101C860009137B007A00790B7547007548097F04B4 +:051C96007E00021C9B12 +:0E1F8C00E4F5C7F5C5F5C675C3FF75C4FF22A1 +:061F1F008CC3AF058FC466 +:101F2500A2AF92D5C2AF75C65A75C6A50000A2D597 +:031F350092AF2246 +:101DA100AD07AC0675C78075F51875C501121F1F03 +:101DB100E5C2120A010DBD00010C740129F9E43AD2 +:101DC100FAE54815487002154714454770DF021FB0 +:011DD1008C85 +:101F4B00AD07AC0675C78075F51875C503121F1F55 +:031F5B00021F8CD6 +:101C9B00AD07AC0675C78075F51875C5028CC3AF5B +:101CAB00058FC4120999F5C2121F250DBD00010C39 +:101CBB00740129F9E43AFAE54815487002154714FE +:071CCB00454770D9021F8C90 +:1018E800020026E493A3F8E493A34003F68001F2F0 +:1018F80008DFF48029E493A3F85407240CC8C33301 +:10190800C4540F4420C8834004F456800146F6DFCF +:10191800E4800B0102040810204080901BA8E47E9C +:10192800019360BCA3FF543F30E509541FFEE493C4 +:10193800A360010ECF54C025E060A840B8E493A38B +:10194800FAE493A3F8E493A3C8C582C8CAC583CAB6 +:10195800F0A3C8C582C8CAC583CADFE9DEE780BE6E +:011C060000DD +:10099900BB010689828A83E0225002E722BBFE025C +:0909A900E32289828A83E493228F +:1009B200BB010CE58229F582E5833AF583E02250FA +:1009C20006E92582F8E622BBFE06E92582F8E22244 +:0D09D200E58229F582E5833AF583E493225E +:1009DF00BB010989828A83F8E028F022500327F7A8 +:1009EF0022BBFE05F8E328F3228A838982F8E49379 +:0209FF002822AC +:100A0100BB010689828A83F0225002F722BBFE01D4 +:020A1100F322CE +:100A1300EF8DF0A4A8F0CF8CF0A428CE8DF0A42EF7 +:020A2300FE22B1 +:100A2500BC000BBE0029EF8DF084FFADF022E4CCB5 +:100A3500F875F008EF2FFFEE33FEEC33FCEE9DEC7E +:100A4500984005FCEE9DFE0FD5F0E9E4CEFD22EDC4 +:100A5500F8F5F0EE8420D21CFEADF075F008EF2F0E +:100A6500FFED33FD4007985006D5F0F222C398FDFF +:050A75000FD5F0EA229C +:100A7A00C2D5EC30E709B2D5E4C39DFDE49CFCEE97 +:100A8A0030E715B2D5E4C39FFFE49EFE120A25C3E0 +:100A9A00E49DFDE49CFC8003120A2530D507C3E4DB +:060AAA009FFFE49EFE2206 +:100AB000BB0110E58229F582E5833AF583E0F5F084 +:100AC000A3E0225009E92582F886F008E622BBFE61 +:100AD0000AE92582F8E2F5F008E222E5832AF583A7 +:080AE000E993F5F0A3E993226C +:100AE800E88FF0A4CC8BF0A42CFCE98EF0A42CFCAD +:100AF8008AF0EDA42CFCEA8EF0A4CDA8F08BF0A42B +:100B08002DCC3825F0FDE98FF0A42CCD35F0FCEB89 +:100B18008EF0A4FEA9F0EB8FF0A4CFC5F02ECD394E +:0F0B2800FEE43CFCEAA42DCE35F0FDE43CFC22BB +:100B370075F008758200EF2FFFEE33FECD33CDCC75 +:100B470033CCC58233C5829BED9AEC99E5829840F8 +:100B57000CF582EE9BFEED9AFDEC99FC0FD5F0D6D5 +:100B6700E4CEFBE4CDFAE4CCF9A88222B800C1B9FF +:100B77000059BA002DEC8BF084CFCECDFCE5F0CB3D +:100B8700F97818EF2FFFEE33FEED33FDEC33FCEB76 +:100B970033FB10D703994004EB99FB0FD8E5E4F931 +:100BA700FA227818EF2FFFEE33FEED33FDEC33FC1E +:100BB700C933C910D7059BE99A4007EC9BFCE99A12 +:100BC700F90FD8E0E4C9FAE4CCFB2275F010EF2F57 +:100BD700FFEE33FEED33FDCC33CCC833C810D70757 +:100BE7009BEC9AE899400AED9BFDEC9AFCE899F892 +:0E0BF7000FD5F0DAE4CDFBE4CCFAE4C8F92225 +:100C0500EB9FF5F0EA9E42F0E99D42F0E89C45F045 +:010C150022BC +:100C1600E8600FECC313FCED13FDEE13FEEF13FFBC +:030C2600D8F122E0 +:100C2900BB010DE58229F582E5833AF583020C9330 +:100C39005007E92582F8020C86BBFE07E92582F8F0 +:100C4900020C9FE58229F582E5833AF583020CAC13 +:100C5900EC8EF0A4CCC5F0CCCDF8EFA4CEC5F02D28 +:100C6900FDE43CFCE8A42EC8C5F03DFDE43CFCEFE6 +:0D0C7900A4FFE5F028FEE43DFDE43CFC2274 +:10063D00E5512445F8E60551227842300702784508 +:10064D00E475F001120CBC0209992000EB7F2ED24B +:10065D00008018EF540F2490D43440D4FF30040B95 +:10066D00EF24BFB41A0050032461FFE55260021558 +:10067D00520555E5557002055430070D7842E47565 +:10068D00F001120CBCEF020A0102009E7403D207A6 +:10069D008003E4C207F5518B428A438944E4F55245 +:1006AD00F554F555E55260077F2012067880F575F3 +:1006BD0053FFC201C200C202C203C205C206C20874 +:1006CD00120646FF700D3007057F00120689AF55E3 +:1006DD00AE5422B4255FC2D5C204120646FF24D003 +:1006ED00B40A00501A75F00A785230D50508B6FFD5 +:1006FD000106C6A426F620D5047002D20380D924A3 +:10070D00CFB41A00EF5004C2E5D204020889D20119 +:10071D0080C6D20080C0D20280BCD2D580BAD205AC +:10072D0080B47F201206782002077401B552004074 +:10073D00F112063DFF1206780206B1D208D20680EC +:10074D009512063DFB12063DFA12063DF94A4B7015 +:10075D0006795A7A097BFF20022EE552602A7E0027 +:10076D008E827583001209B260060EEE655370F02D +:10077D00C2D5EBC0E0EAC0E0E9C0E0EE1208D0D08F +:10078D00E0F9D0E0FAD0E0FB120999FF60AAEBC0C6 +:10079D00E0EAC0E0E9C0E0120678D0E02401F9D02B +:1007AD00E03400FAD0E0FBE5530460DCD553D9808A +:1007BD00877BFF7A0879CCD202809C7910800279F0 +:1007CD0008C206C2088008D2D5790A8004790AC207 +:1007DD00D5E553047002F553E4FAFDFEFF12063D14 +:1007ED00FC7B0820011312063DFD7B1030000A1220 +:1007FD00063DFE12063DFF7B20EC3382D592D5508F +:10080D0013C3E43000069FFFE49EFEE42001039D28 +:10081D00FDE49CFCE4CBF8C201EC700CCFCECDCC4A +:10082D00E824F8F870F38017C3EF33FFEE33FEEDD5 +:10083D0033FDEC33FCEB33FB994002FB0FD8E9EBB6 +:10084D00300105F8D0E0C448B201C0E00AEC4D4ECD +:10085D004F78207B0070C2EAB5530040BCC0E01257 +:10086D0008D2D0F0D0E0200104C4C0E0C4B201C071 +:10087D00F0120661D0F0D5F0EB0206B1120CCC07E8 +:10088D004E5307C858071F4C071B4207CC4F07D4C0 +:0F089D004407D44907344307DA5507BE4607BE60 +:1008AC004507BE47097A5007232D07272E074A2BE9 +:1008BC00072B2307482009632A06E3480000074258 +:1008CC003F3F3F00790AA2D5200314300509B91027 +:1008DC00020404B9080104A2D52006025001042028 +:1008EC0002689202B552005034C0E07F20300319E8 +:1008FC007F30A20272067205500F120929C202C281 +:10090C0006C205C2087F30800F300503E9C0E01233 +:10091C000678300503D0E0F9D0E0B552CC3005179D +:10092C007F30B9100C1206787F583004077F78801E +:10093C0003B908031206783002057F2D0206787F72 +:10094C00202008F87F2B2006F322920280CF286EFD +:10095C00756C6C2900D20112063D3001F8C2017889 +:10096C005230D50108F60206E32D504349581206C1 +:10097C003D2403B405004001E49009759312066907 +:0D098C00743A120669D2037552040207C8BE +:0D0C8600E6FB08E6F908E6FA08E6CBF822DE +:0C0C9300E0F8A3E0F9A3E0FAA3E0FB22E4 +:0D0C9F00E2FB08E2F908E2FA08E2CBF822D5 +:100CAC00E493F8740193F9740293FA740393FB229E +:100CBC00FAE6FB0808E6F925F0F618E6CA3AF62239 +:100CCC00D083D082F8E4937012740193700DA3A3B7 +:100CDC0093F8740193F5828883E4737402936860CB +:060CEC00EFA3A3A380DFCB +:00000001FF diff --git a/Objects/Motorcontroller.lnp b/Objects/Motorcontroller.lnp new file mode 100644 index 0000000..a15f4cb --- /dev/null +++ b/Objects/Motorcontroller.lnp @@ -0,0 +1,11 @@ +".\Objects\STARTUP.obj", +".\Objects\delay.obj", +".\Objects\GPIO.obj", +".\Objects\main.obj", +".\Objects\UART.obj", +".\Objects\timer.obj", +".\Objects\tm1650.obj", +".\Objects\common.obj", +".\Objects\EEPROM.obj" +TO ".\Objects\Motorcontroller" +PRINT(".\Listings\Motorcontroller.m51") RAMSIZE(256) diff --git a/Objects/PWM.obj b/Objects/PWM.obj new file mode 100644 index 0000000000000000000000000000000000000000..2051eb7c40deb8aabc77a7086931b909aca08a96 GIT binary patch literal 119318 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 <7k zLPbvoM*BmH1#ipi5#}8MJR3%s;ZCXcwPXPS_zDpCI=%6v22$^CqE~slGs^Lh4=cS2 zVBO6Q>)KoDPUIA?>E-75C{UYo+y`98e@x-zAFlK(f zww7N!(sP=xspXeWA7>?1`f_bk)WnjtxyttC^SfV4D$a|8*RIWB+954Xb#D&)@)nF* zG{rf5t`mG$S}d*rX3M{2yP6`ERyVI;SM|=2(5(l7x)}$`z_xl4wbJI&P++*c)8KSU zLSne5LABol${<8>Pc9ZJdos+5WAz&KR`R(@s7nU&$U95R5x^P*;D4aw zPl1kS_w8#1+;f1t%aQazMOvCV_XKJksar~FjE$TKtj2%jDcBwJwgr;0n9l;S?ybel zS$OGe=;)NZj6Q;XyHum8MtscFvb5PLuDi*`Tqv6-8>1-AO=Okx4H&}KPFS$C%+oGy zO!|qc5iAs|IlFkO;CAf<&=}mcI4gU$z_KL?u`OHPBJAPG zRX2?6YarML=;Cq}6`LLzi9hcHA#*~!FnJSc>;6c|H2)K*yGDz*=8be^eQ$cKz!FjNB^fmC4yW>O=W31aSPZcV07+8kef^Ojx9+GZZ2fF2Fz?l?^ znYLezUXM5RaL;AYWgVQ#{mH$lwPM;nSQhu>Dxf?3n`eYJk3;x9dhhxX`&#GE`p% zVZT9hzOCV-py4GuyBzYEv=yl}`wOl362#^_2TY5B9J;MCmaP6w0ACH@w{-1oxy2D( zTI1ax^1wY0VtO$k-`T*tcrGcxBe-O9p8+iRFBmx30^-;PYj8|@t&pDV^rkawNz@h#y}2!@ZYO3s%K{yhB(JVoY2WEr=*5$@vCaoNGOZ0O znx$QZ2Lbt@p5|LyUE!d(iUlh3XFUz!ZT?8rGoDtu8sG)cm8=0$(4`q&KIg&#*XDRK za>vQvfdNi-$|qpF>P-RmGr-nq%|*SOsg}cm>W9Lvc{C4$>SY)agvHOuy0!gc{S9;|n)()qzO@ zcp4Bq08RnCdO;CLv{OKxkj48jmRt^lnzgLTfhlb}=1?J%IAk(W4-3=?6^sVL`M)aU zu@mI609KiUmStcD=#nf+JB5G?57hImcqCbQl2GW;V1N|^3li&^l0V{1V8L-3$NQpm zagJm~-2>Eqcq`NnP82Fz4b!@cJV{&0WMk7di_I4A z3+O9h!1zG-60t>uHshq#%RxYuR*+M2i;@E|wE|i2)DOE;h=G_U05A(BvTae_C^T^$ zsFYu{PU!&Yh8Va*b+md2Q0K+MkoSSVTfx=`8zfbFXF z7+H`t6gm1l0XGDcLyNZ2)v#F6)wyySA^r5<_QYiT!^7;`mH5u!e!x`xSH1(7f5Srj zjMl>{qJwE4CzAB(d7v^r1uAJ44V4Ows09`suWbx8+ zYqI9WJPI8Qz^!S`6~Mr|YuUCf!n9d+sV8e!o7F(pQK%Eoi0iy;=1w%n0g&s&7wGYe zg{H5r15c4Ht6bV~I~yeC3(fR)^+RrS#nql>xV3o4_n^ah0dDx%%bJmd=&diQfakSg)m! z^(}2-Zxjk14Wcj$aACS;<9q?P2^e}k@Bs6rxt9Q(1w1eoRBo9%IKij3c#g-d;U8iE z??Zq-yz+Abq_QkyKhy0f;EmANLI&>wZ)|WhZN{vU+~7}yMIm&9Cx#NE zg^mM;nxUJ?jL2~>=L)s#1Hcsk40GH|3HS=I;w=E=$%q&ZZz%u=0gxvnB5)r7X0)c@ ztDoAJHMixOIvQHqwijAD8FbhFFo-c@(q(P`r?6`ekE%N2Aw&d4{KQ9^u$kQKS~DqKo=Zf*jg;=P8jxEKBtz;;(8&G{gsidfHvNT!yTuT zp6`hq?YLkfG&96E6pF?{q<>dvD4ve!3vI9wIS!Ok%GV|tk%IGZXR2$~bnWD86&QmZ zV%so=?|3)^L&Ngy$(f)tlD>oeNZ?>UrXK7Mgm!SF&!za)(tSf>)Z!;4=mK1c>hQAP|*Y<#U_@ z>;s}Z4}eq-*;1dPy8~GBJ^)9T=&{j*LOpsjb};~%hpjMU{uhBrI;;;uEqT&W7ig&( zTH=a|YupUw6cG^1k#_rfuV=nk0n6I~#adMVHanPFPpmYq3oSyc8frisZ2z@INGoSq|RGgXQgZ&0Rj9WZyRbnR!Z zrA5E@0CN}kbe*r5?j~gjCqolIl46avsg5}L4qOQ)Usr1Api4j(X-9*7KwWip@B*~3 zK{f{TvIu8VXhG^zK>`~Em#WK`^4aKoWyE*G_7b0NWgk(k7CIEhCsOM@3Dkuy zngxgjiVw;}pw^m!x~4E%T&7IUJzxs|2-{AUMY_RdE)@4t+IR$H=_Q{$%l)m%&CW+1 zs_|9gloBsHDSo4j<2so3Paz~?zt7;m zd>1~5^8DQjXoi==P!Q3Km{VtqOAiJ(($E$fme<}KutnTn8rpjZ+H-3cS{8YWXNB7H z)J_$&S1X@s>pShPTw-q!Ux2V&>ld>4rAn_K z18$j|5b$GC;^4ihfTsZ1)W0B3a8jmPt@38joA}xVCx5BHCIFs{Yl6$-Pf~{Z8LWwA z0A#mN1#SS~D{4jw|NeS!+txWoyPLpYkQh+m*8Q zrF^?s!!ZhKBA|u_q|{XCbtLt9rI{v>(h)x69`THOL22MXXrNP+6Wzgv;sEC;@E1Vj zo{*2{qA-~Q71U2)CsGdFx41rUlL8zG@>VOOB?%`J7H@E7iz5X+S<@C^Hd|9pb76U6 z>uO#e&E~8ZsSQ3L?QL7|va&1S(6koXV0Cpk(d?vh8%!So^gl&!IPX?9h;*=oPi#Rde8lYDb&4Xl7`K=U9%;sV*gv8Ce|GAj{J^w_!_zfx)H?FsabPnjT zvLIO-LRro6vq6Cm`c(G)o!k7>~jU22k=Qgy&3cLrn*o;Z$?a%v>3^BD!rZo(^Mm%bZt#` zjsjW=Tj2k|+)@>EE2HV=7yugp$nJnzDDxIz3chv9?tls$55SXPjHKiGYnh9(ot2VoraGC=@=n8!CnsW5>-j7Rz9Q^+C$ z1*~_vPE4TED4C=JTny$M3+TkT$gUPy*a7l#hj_`ovKgVY@CigRehMu_ z?E{-x6iq9&wRdR&*mt3YRkBKH43ScMM|;aGrSGkPTo*VsH-5XDR<8vG4ui!uP4tty zQ0-fgS!ECv0KU}tn6yyMHZi<`_Y}=qkd!weh~phl$@4lI8z+L;oPhGiWpTB$(>MU@ zVJY!bvg?(PUJY`y6NYWyPcgAnzMZ9|qAmwJ@i*~we6c61dbl!*MKJZ>h~zjGmC0WT zpOSggz8#GJT8QI#({4Z7q8aG0t|r^`s?yhA0JcVWV>q{+X1JCJOF-9$kh{9 zDowlsuE;~uyo% zY%yuL*#=5LIc zP;fgt zBw{c-ns}6kI*KNb=Yi++?B)}C4W$2a&}uJuD11PLQ3|H{Op(1U z@Ff6GZf=1kwp*Bx%cdVzQH++?QKXX9BWOOmiNf3_A%sozuXlv$y@mr{nYS{gqbM zgYteAPBz)hQr59K+3cgVaXYl}j-O#_ndVNI_=83N(&X_M5mAB}ZfU)>WT-Y4HJCxDZ??Ql;85r4^R7Uf)wty%+BD)IPyznK%^ITT4PT_xu zH(pSiGiy=1GAlXv7g>2V&<_hgs3%%0jrE*8A{iDB}&sc5$L zIt8={yehP@#7wmUbT#ngY-A=E=1nUd9tpr{GD=!I-JHD2u2+Bhc;>yVJvcz~i!S*0V*)fEfaBkX1nA=e z^a%m_!~p%h0L`TcuzfB?fHapPK$=StAdP3Vyl22eHl|U*F{X6DWU1!8L(w=t1pj!X(Kv1G5$y=- zQ~-@N`i%qZq^nL*dfVNP#!f$;s+){A&QbB;bqvjyc^g`}UEDR>!=MZu=XTK<${;!b z?ho2A9BLVLDUHkrZ+@>>p&aE=We!$Q3GfcGFx$~81r&kVK6{^^8`Xj^GvISg#EY&u zW^1*aqqo3b{#w3|t!(bQ%23Y()N#f?u<;vzc1fFW1&}K)jI6o@EUe|y~^j9*KH3C-g8V|1K7jR zU4)8su2gW30M4Y4rzaF?&(oM1yGcRrcE)K>&q^8SgvJ7GC$$6g_W*Vm$gZVrjiMmC zS@}BG6Yu##4i%07AN&Mip*$`fPvqiNZz^B-dk}~XW~h{DsKq%?15m9d7Aha8@Pn6WI;nANR!j zM07J=5|-M}cYWdzG(w7d)BO60fn3A5G<^Xl*X4nf(FKMEkzQ+}fxN;a-q6yf~69c{RrB z+nS@#DQ$E>8v{g9apjvrT|Qk5U$6Bna5*67iDI%Py)e2|+cvAS>qDjACqdYs0ioq< zv}+aI0U+#i0LO32Ylh=Rkk}_h5tcezXYHiUoRnfm>n|~d!uIpspeUy^9o};Dk9G6O z(nzkYy)veZI1XZ8Yt$j8)wEJ-gqD*2F^KE+Ag;-hU0>gb>($CA63|9k_-rrs#$0_; z%Vh5YKKFy56CEnrB>=SWQ72#z@QvIjq1Lm?$Y($s2gxd-k;kB@c{l;llhe}yZ>oCO z!D%Wv)+vR5BUQ_kF*Jj;4l;}{#4|G#(Cgsi+~*fnRm3-es6Jsjt1RSOl+JnsXrTcm za^sp6(7zmUw&i)50kyR!ECo~v@|^COr?F?0Hf91(`it%$p1N7ZZ4>jzQ7;8kgutrtzb7F1YC>?ul_Pc__)*5ozEr!Rnv&8Dwp<~nW@Z}EHDnoI?C z!CRBbM00~|4(~FS%{gLCm?WyOqls5er3IBwpmwx{Xd~wGe-ab literal 0 HcmV?d00001 diff --git a/Objects/STARTUP.obj b/Objects/STARTUP.obj new file mode 100644 index 0000000000000000000000000000000000000000..73d8f49d64ce64d36760f82c750b4d6c4b0c1874 GIT binary patch literal 819 zcmZuvJ#5oJ7=5;r)=pZI6rs`uSv5k<(25M5E88(8V3JepNF6Fgw4kaLf=WpxCZHgG zc2)*#dgz?bgM*53W?;kozG z)?VEX1n~9a{Jl&6^=p{>_O3UR)uTL)^$RGi`TdkT!*QjIbQ!>p%4KMf4`wjSIDfT~ zhH8}>bQsd5VQP)6fBVWpg&dcemF&;YNz9c~8C7Q|@RzGq8BxwPHgX*3vNryar6jpj zZ`rx1dLxr7|G~K~GxhI);rc$U-|W%j_XU}zxJm1|vO=K9NVDY$)xU%q${CD19B1*F z3~0Ks8wPFGrM#8Ej&jRp^0dl^wKQFC?SCr<`K? z(Ty(gA>T;I|D$d?utt(;ZsgkFI5T+O#>QkD3aT2X)26D(!~11foIyd85~q%-#*HV4 zr)z4|kDvbhb8>cYD9^cN)nJmvtAOjpZ*OE)|QaN66H}IN!0dKfZVZ`0SXN-9X QjNGYxDpd1_C~wu#U-Jl{0RR91 literal 0 HcmV?d00001 diff --git a/Objects/TM5160.__i b/Objects/TM5160.__i new file mode 100644 index 0000000..46990be --- /dev/null +++ b/Objects/TM5160.__i @@ -0,0 +1 @@ +"mycode\TM5160.C" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\TM5160.lst) TABS (2) OBJECT(.\Objects\TM5160.obj) \ No newline at end of file diff --git a/Objects/TM5160.obj b/Objects/TM5160.obj new file mode 100644 index 0000000000000000000000000000000000000000..19d99ea6f592b21d8a88e3872762390a4c2285a6 GIT binary patch literal 100125 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 literal 0 HcmV?d00001 diff --git a/Objects/common.__i b/Objects/common.__i new file mode 100644 index 0000000..1894baa --- /dev/null +++ b/Objects/common.__i @@ -0,0 +1 @@ +"mycode\common.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\common.lst) TABS (2) OBJECT(.\Objects\common.obj) \ No newline at end of file diff --git a/Objects/common.obj b/Objects/common.obj new file mode 100644 index 0000000000000000000000000000000000000000..35dfee0e6bee25b7c4713a0dd6a65d8ff7f2c969 GIT binary patch literal 127385 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 MjglF@EVT3g0tT;gbN~PV literal 0 HcmV?d00001 diff --git a/Objects/delay.__i b/Objects/delay.__i new file mode 100644 index 0000000..4358c39 --- /dev/null +++ b/Objects/delay.__i @@ -0,0 +1 @@ +"mycode\delay.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\delay.lst) TABS (2) OBJECT(.\Objects\delay.obj) \ No newline at end of file diff --git a/Objects/delay.obj b/Objects/delay.obj new file mode 100644 index 0000000000000000000000000000000000000000..5cd74e64eb5a3d5bbb2072eac8c6ee6120c80946 GIT binary patch literal 101171 zcmb7t2Vhjy*6z@xDk#_y5fmHhoHHfChLg#Jj7*Z_%!H!In2;dRkc1Qk8}@7O1r>Ym zz4zXG!`^%E*M@KHbIv;RO~CK|kN19V5Wc%U)0hzXY;X@ zsfzk3W9uq*P9^iH8TnLgZv8jyjeBh#3O)7V`b{HO@>hLAZ@)OaX|>X|_I3Z`aDPGmT=V*do|HkhkyVa0 zA2zn3wRKik_ncWZ?cMF2bK2XwJKI}Zn>)R)m?i&VZp)rq3#$LQsRrx+h|1-Y9#quT4bh{wyv$`4e2{LG@vq-Nz7c{=g{HP zLVZH!|A$6|MoxCJlMC+O6l!vl-5>gTe>pI;hWShPKSk^Pzw77y-74^Rw*Fn$+S`QW z@8#DZ7bJfnLj`}7G0dEy(BNRcZAT0W`RnT5c$oRSfi80E8AIjV>7(1xa$fDiTCI9^j`S0nJ`zafF|2^vd z_dCpgcjO-|3-#-tOxD%Pk4xmoocH5V@?+ln@%vD}J{9t}?}z&JOC*yn8O9GTxbj|@ zZ{~PG{>I5oe`>_AP~RebhRKJ@ufE=wemtU|eCF5Vhq(W(e`r9Tme~VGxr{t;j{^pO zvq49n(W5dQzrFWEUjAkO&=&(&k-r=s8u#G%iLwAejdB0+hVJhhxxbH--}{Hg%kQg( zHkRLqhc*eFBa0YNT*TlJLqmN%jtUD;Dp`aqtWV4C1LYr>HH8)rdvE#S!Q6dAtAxfq zY34S6JHh=oo4UVmA;0$tZ7IL^4Na8)>mS-meqSZDO{hgC8xTx(d~s?Krc+in^$<_w z77uuD`LV&w{XzrG%oBvDGIQAdCzktrRDSOhiplT&LUH-O0ip6xLvc=-J!<#T@W8oNYy4PGO0Vs0ImIt1B`0) z);UlXA4yKl9YS!;p18Z~-k@=?J8{3-I_DCC+0s>8?_2A1u`Z!1Ive(GPPH{Owl?2J z2H0V6aj`o#uJ2B|rbp>y+$kg*I=Xv0o3kxl&8v`6ZUvG*-nfoC${PMCF{hAe-*;L= zYfDp>3~>z%@j~Oe?hqqoh(sZojOGfJEuG?1TiV-RAY&W?WBjSqsHw@d73z|9HdR%~ zXQ$LL7MwP)NR2NVS9cdN)E%JSsZ8Wk{mJAf1NLjh=A5)Fy~}XnP=dW1WbWa{q3*l` z(zVmlb%O}%Kb~K71?G>&)m+pdAz3Vvx2k6opqMoGm(h>~0E}39E5m@DAfh8cw5_sa zb_tnq4Zw9Yj&N5x#Fvk3JaZa>?&JD3Pr_Gi9PUB~d(hf^mg(W1fE*3TL?MyQRzE`K ztODc?YJNNuFim2@y6k%ddB_6f7=MCGI20+LtVmbY5#V%S*%nH9;dd;W%$`Yb8vw2eCX5NI zGqVWrFEG$Y0x)WeM_|B*0eJrkytYmzbKV5JenOpI(x_GiL45=?J-cz3tB zR|xESSm(>|ftDpoFoyu&2VuS#fMMfg8SrudzP$ov?32ixHv?rboHDVHT`SvGFQQ

zFd7-MIOTAn> z8Dufg_iz2)ME#7IvmQas1r=CZ!`xi7P?60S>bsgfZ~G+~;HLq_`0qH~A({BbDmcEG zt|9R00N)H`%kxR$LZUKR@MP;@GD;)xdPB5vWqFG^j<+V4%O6fwx<26M=@vvXn1y6^ zW-gz|3@6wxJdtoW6X!snAzSWbDr>3DIgku-B}ntjx@_aM%JTNb1ZM+B>wr#HxH?nG z%*9*qy;rFEFt>JfQYy9O-(HRV6i?%0>!ac+Xty*`W9DH?HlXSCQX^^~huDP3ikp%-yRj$ZDWlo{4 zK3}Lz=h(JmQ!t6sRC@gliyP^CUowJx$(|7CudUQ@hlohp$j>`D;n?Y9j5-)&n}4y) z(a*^MKZ0pJUUwVLjA-@V1aufAoc;#=iA2P*6$tQfux!f#Xvf5|F<=z{w+En!rZNop z0qEXE05s7Q1zrKbw*s~E(?b#xdHnsBeC%@|VAnNz>B8Y6V8&s`Y9xs&0?I_J58(G# z0j(@dugn*6$wVequumnk9{`fk7e3s!#Kz4az==TWX}av1hL*Of_O3aFbT%2WryfA? zpMhOJS2ZJm~it|)sV{%fw$dHBUQ(4E3|hsw-uT?MGsabUs?t5sD5cKVlq*_)ILto zZ-6nrEI?acF2agCRvF6!UJvLOfKIWP$oy_(+VP+)vjG^Dz?cHR1OhJspz#A4HscWh zLPFXBBF~3oVvMlcU67#RmnrXra8ZrF$Y-=_eovX9HWJ5mA^t0lom# zy(tiW&tt{is3=@c;QK(FIY7lXoouTrOo|JC+UM-e=(`yh{k)>xz%Eyl%ocJrxkfVg zT@a5wtQmCIJjp)9*rz`T_zxiT;V^Z$AZKvy!Z#=AGeLd6L~@I-$;>3c*MQvD0MPgv z3OpNtpRbfpRvDRhU*J=J*iM^RK2mZ7$4)&T1b*EOfp~=!I>dSh;{TB4*f7w}N_|w! z^5Y5mAmCl7akOjD*K*a;DnKAEnfut!WSA{rn7qo5ISSGI#7hKx62!yb10!QmQMfDt zjsek`1HiB`*=$R97kJ|*K>`vITSh!h-JZ<5H%Pz;{aQcQoK2;6O+7=vzk#Y9sr(W} zwQF_b#Nvo`0Nq@|uW0eS=6@%1_6B~9)F@LHp(!ChV|f_)4hM*D0r8E$%uFZ1jRCkj z0FA$-z^_1W&s-_jtnJ9Wt-!V6y+~Ig>f!iLWSABp-I^uCh!-`7R37!sS=X;*nAKsJ z`9K9LF0#wcbO!+y_5)x=A)Cw&B{Oz_(2rE|85{2&SC++{vND!PS>}0DHvqUsh2A6~ zH4F1DnR^KYb|1o)#La)CbvyVA8Q}>K{9Ah+RJvsMMYbRZrbm%+b^^NZ7(@kbG!fsQ z;QoQA;9wwo*cd4$?zaNjp9{7N;dF`}2aEtvmuAWwt2UY2jI8ljV9^PIX$iL#I(oY1 z$#1Q#EPUA(c(juyRKzBjjA9HbI-VmdSR0&CvnEvBD5O4}O8Ba=E*anvVDp_SWimjS z9;!1LsR3|UrL0&ABsnQl3$z!Rem=OOk-%kJQli!DTx}+3<>ml1u81DU-3^?6LXT`D zBQFWgH^@RK0Bmm^6Kn?b-v&lmG123C0(9#a{ZC#T zC|3-Wi=7bXfZ&?~!Hjan)&4Q>bt6#xY27~=kL^fC$YQ)c2B`H@V1OhzV@ZzvKoM36 z3{ZY*uAVuyZa@t~;)+wF2Z@70eHN)zHeV+dPS+8pybWq_d9X~uB{w0c=Kysp%oYwO zvlkHDX@L6sYQPFN>q`43= zua9gLuasfQ=v{%0MX^gJB;^v9EJ(q%nXIbj4dBK_O39jJeZi@lp2`*~>!#O^Bnv+c zjO~{tL0i;|m4l!y96y|lvlomrO5K&eOVu6bkp#aB1aDizW?Qy9{y|Z!m|}c_4AcRf zSRFVKDHDa-g#a%HPP_#QWe!r9LR|(5^^W>UH)H3Mj!k;E>!Up{{bXQuk_ijhzbaYv z$H4wG19kRJajc-Oh3)N6110!eIp^zA+&{%(XJwNBpA>={G7d^7#OYLQ@*5duG7K}h zR7mV=2<}P{k~aenZ{@Nr1oRIO=!gJhJN5Gj=vx4tp&qc{U*)O3@n4aBL#qLDVIWGz z6sc#JD;K23{_6<+L$8A{UIIA_vxk%@NQ>6lUhH&`rq7hwnjcL_iC`{WnKB$>zVSwI zs?UH(NBu2|DR+#K@0bku9Rrn?eR#5_vXDz8r!tNF1VrR4HONv+1fGNu;0G{-CxC=S z!+DEI*o|PmUJQa?Nm>O7zB9-d{{dkkro3W7f|zBtF9VzV7UWxt#yjk9ESHlt>;a=} zRQl!i)dY77eED+$w`#>g_y(9o{da=UKdr$`X;rja6#W5NfDIhafXj(iRVK4L5#SB5 z@|PM1xfZf-Pq~RQcan7(dKkNr0i(GbRO~=?82*Kfs9wleOy)cTWcxF<55`=lvWZ;k zZGt=pKJz0DaHVdsF2w@e!$F?^RJj!QSS*ZV@q7x<+p5_%yN+U5pjU*W*9e87Gt3@@l5S`-6)aq-x+q z+6rCW4Q)*golPtruZGR9tvL=?Dr)a1%e@#x0%Im2k9`%v?GK+h5crXhip!~^2(TVL za%){@DlsFQsCkyaUJ)%azf3aZhQJ|65xlv7<|my75&U(ab_n{32>M#k zz?YQbB9V5o`b`2`6F59yjfE4J^yqkk`qN{R%crB&8fT_e_C7dShm5fRM0v1&t}HlF zsBCU%G9e#JT+ISbZx{qY2JK$|^F0bnUu_Q~Ojbs@DqNq!hqG zLA3&Eb@*PnYv`BxG2z$*&@(i~l+05VtLS+OBHq>-6F_a6yA(qa^<$WO2=+!0;Fkjxj~9*bTLe5E zBzL^>U#_cK;mHIw3{Y+QjrHj&Yd->725i4n!w6SMy;!@wr*ls8J7j?CVSwj!twvVu z2tmyURB$Y74!BHUofY-GnSehAsXH44Jz8*bUJ(N`;TJ&&@Sc(>X{W1>B~u;(pb!YG zEtL;f65LK8=oKrt@ysa%dH_h@K$ReKLK5{$sTo(!0$KP#xnd;9+L27TDxl^=kmcLF zx}I)1tMGDq>ycq5g5j%E{CT#P4|*q&)VsiquPhfy;DW0jH~~$h>a?2QOA{X#&sb z*>pbjAVHoD=HO#xp~MPRa|q~o0R5mD3O5ZD!8Fk7WQZ&bF|i~d%DhHkYXLJ`K?tOp zz+$GPKj4BIIgz<=j0?{_U`HN@WrovL%g8d11K4j$)x0o~d6P##&Y^GI7WWPG-+0t9=}Z zezy``$Y&>6LTePD+F&+I8jc)BW_uB|=O&%aC_-#of?6F|+@cvnm&MX#!>e^;rh89d z>nNR64j#)KwoPgR1zHzAQ5a!gP8PccFrppQCMM^=w4%>VXNjROd+X&e1YL)!Qxf?5Mm^MXl@_9$sBW}@Z+X-5Wm0}meY&qmm7)M=nA6VwPN>uMxA zXPeM>fHxPY5q9FaY!ms^{vdmc15lY$&-~#}V7X65s+N_LsYU`-_f!+$MtbF@PF?Dt z*?G>UK$Q9tqS#-NNk0XmoT<41(Gsc8sH@4&_|^#p9%dN zU=OYYp*OyQws*N1fX~B(5otSc7Fp;CfcqKwQeH+-qku1SLE61zagz-QGiB)pX&)GD ze9i8xeg1sOAzn(R{ub=|NdZ>kI6u3VC)g_i`zjDgxME*MaBl;VE(5NFjVWSnIL-uB z`C5Zc5v8z62Uq`1raT6azXwWYS7!Gmpuqsz51BbBPEczCGn<15#~cmgaomPvgb#tA z!AX>>F{WdI5eJKDc@Mx>(OB72xTM@6)zdtOtl%|J^~=D1`Ui3GxDzkiir{wwecb^# zY@7|P+3N#d>R`xkh~3ZS(tb4$+s#zL$Hz*nO`^4B&o*QG3pFiG)b#%CTswpbR^;}K|TT1I!`^3QwAk}HDtZJgNkkN z?@YGYHuL~sa&URiXO10kwjgufiV_ z4Mn}n4PoYj7l2X>DVe&mr+ZOsB$;|BKs)}O)R70s7zYBWgKS(?CSR3F*Rg%i(O?Yz z3(_Uc*?6CdZXh)t8``p2p?xai0K^kvRQjVyy7PGMy z0JG|6D(Z8EtXxsb$|Z?1`M>z?Wa=Y8jeY?u4`O9~N${N@8-rI6t2oDm77$uc_Q7bl8;mqTKg3ndWY(TYmS6+> zc3FXVWh|4m0T6FC(7-R(fm2PkF*_4{{3j)@R*HVKZaP7};8Ymki<0!SX_{dgD+R@z zr;}k8!Z7_+3QMl#XOqtm{3yWB)6gzimaaOIfDQn*4S*O)#7LMI)!GDBkWmRkV2mS; z!g#NVN5RP43nCLSU33a$(MJRDcK{kUO3R7_IjtYT&p z(7ah7l@Ze=X$G0F9rOV2AQ^GC*C)UNi1Wt!eUej5Wf-VgA@c(Dvze$18RwyF@*rtmV(#FzNFO&Ix0kH}CnHV==ngg-m z;7tHt0Sh$&EbXAu1He@QXaZOYECb+FWxWwOYX|ayYlFzm3Gz>VnU&Y(o0Yy^3-b0H ztTt*o`b;D9J^-tI2!L+8LUwr~1^T!nex}W`!t20iHmaF+HA{{=;Tq;kWXUNo^<^6L zxCfEp-o;LjlVL`Jx!qesI0-qMJKGvsXPD;o8iH&|M)@1G2fM1qOi!TQ2yin{gqdJ@ zqtd;a#cJOH!%hW;nV5&RM|li@_W;nuJQR2g0RJ0^rkg0x+nCHT%?6f_MnQ?Nv%7Tx zg=vkLY3#!?qN@R2yWlhBE{aXhCa(g4exoFKaeEH3Qrl*Lj?qud*F>D$T0{ai22?@4 z4D24GQhy!|&m|)q2}HtFw;g3?X6pfJ57j}bk%3DgQnwwBvnX)^C=XgkWB+M;l2O2( z`M@4y$SLqGkV3o+8A*;O6lw(2*cF&+pHHB3fjt{2Q;i*uv4ep1fw%=l$%$gQvo@J) z4mkexG;TCrQCvsw{SNfX8B4&e4{&VlEPcs%Z<7B4 zQI7@ohmE;p`M3K4_=wWga3jw0@S}knvx}s$A0ec<55Da|Sfa7$w1dayAlfqk7&azr zCYkY4__lX70&~hLvz-LA8i0C`AZ6^BYXcz2?r>MoH0CMm-I(WZGJP93;nh@tu#~~h z-$mdS*pHebV6a|!FW@VG#G(Nz!=N)Fq=(gTor&l05raYo?TuI%vq++ zy--NbunUEqR+!Md)nl%!3@EurX8t@HwlC(-W8u$1y@Jt#^7sm)7T=&515BT#TYA&S zUhaYwQpt2B!CnD@<;$=yH|L_|{xNA`e(6K=3AAnWbBQPwrtW^YW1GT4u6Y{I!Q?>UH@Wue1sasbGDvG5|Z0p(%=3uz$ zOEQx+-5>TRvtA0!4(^7^-nEX^?H>nr`WMh@X|2ZFpezM*@F@U|*P}42OV@Wb?#w)|q~vj|;}2dVx>!zR;QR?5YtGwnbEJpx$y zd*B$%gIA_=u~#oj;57iZN+rSGkKi5vNw{BySCSvW6;5`AYbj*GJ_i2Sru|VpnY9um zBIvi|$!&xsN?(Q5UZq4bM#{~7yR{UDt}yK;avfaWV3RB1SAhhZKVJ`jUPE`p-f(^g zfS_gi2`da+^b@V;&*!v*uKSe4w;W;e;61^;_Hm{@aMXZfeVtc0@}Z2elL(j8q$R{b@| z%c(1zl?2RPQD%zFtpVmnfnpKU8YoBRJ`+g&6#&IQrLyeYItHY!T{*F=Z^*=Rfmmy5 zf<~m;bQLNOZVnojtwTn6AH3qyz(JdXdueDHba{AzjBp=}5Zpl!fibRa0>P~XrfeP% z&iEPH*yLQG_$L~#nUfpea@%Cm)4+0n3PdxXYX?L#vd&_Xi{O*-h}Xz@q@>)L?P_Pj zDC5;83j_U2o3`~E`H*S|C}QgRDkWsin!}Wv335N6dw)f`jz?O91VG{rE^0ao z?Lwyf95{Bi>a~2S91GG8Pa6QP*lpWNrw%5QtqywCsm>#4b?Cmy#)@EG2OD;+`gY?f zz2_ztkeQc)aJ{=CL(5{!_Duzb+R7HwMK#ya+}xBV(>?-hxl1GSOtLaRb5(*m6>R3$ zpnk@iWmro5TVTp*rOc%5p~eEPQ9sZKfm<5MGC1o3vZX}fy}LvAkla;5)K+O;Xj0Tm6nFddF1Q-Y4)PVC*ynw*mi35VO1n4_-yq$ZtbSua&rri&EVpg%IGTVz1@pW_rOLEXOIK!6 zn-Jis0Q^eVEFWF$Z*nF<{|s7j9Ijat*dYSG2*B?Kswh)SInK2N_c8e1^8pu@<|OPe zVJYA~3qI9?Vp|r1PX?jh4)w=oM`+^!74#=Co`Hox0|3+mI}JBnE>^CyP4WF8O!w+) z9nrz+jR<99U>tV_$_htld$7-dvP*R~^OX^%F5V0C-i@m1U|XVXWQnT)ZMrpb5_y%% z9;xBA*e+xU==TDhPu|_MjwkcI2mawMZ~p6WP2{s2ff6v?o#dp!t6aMKbt zE`puAJ_~%fP5IzNrE3W@0l!1^a;z$`Ifv3L)%%1#CjdXbR*D-swD0#H!r zDvt)a7g%b@oX>zgy}6Vjv?bh)z>t?z!W}!8oku2fuT~2)%mvlM0#L-M-;;p81MZ!! zrC>AU1+iq7?IS+|*oDZqco~^&0O*)kb4)Wfj~D05#3b@RJ8liJadhQ08f8M@hM|RsG9;R2jWw{7g^^J0CfZ# zUVWXjxoJ=Lb9c-6GQ28Gcu(oeB5_5bNtfJVmT& zo4tELJReiLD<5u|#*|4i;maVLH)!bPIy951X50Mdz_8t>-zmt5)*;rCY3~5=Gbq;O zF@o9*Bs2?RJ&7IZ4+T)Wu2V=OTZHx=Q$NX40iVO>;ItBnHqS_U1qH3Qk|i$ziTXru zhI+?}#p+MLLc5-fGaaOAQze)%x5i=hWXD1xh*HlEE>502>qsZPj;nRj`r{g^?k|w zgF(8xl<5B3S#{ZDsxU2)ktWP!gug(%4+&y-+Za1vs9CM;Jz(t~hSMMKT-k=l&>tjg zm=8ie3aD?MZoHD<4g>1{1G9ViVebx)=d#u%qx1tBE($1Mp83n?+DzBNDps#_4bbmJ zHNU2EL0*1t?q(;$M}k54uZE){0Fh+%8)Uh2;G;KGku#6Zdm_gYXD5QleFe_d(95rn z3V%bUZUOCDL-~}m3zOvagRKbeE|8K(mBR9+Qhd{9^e9CZL!f~Bwck3A=bfQ zE&2eFP4Ne7OH~c>u$d=H(rDx({OPY?#&F`^f4L1R+pDbZ@I$2&NDVkP^qTKVW4ag`*1FL`1*xFYN zCs`qH-M31GLUYp(WQ>czT)w4DFo}Qf%F+D<`Wo2FD-`MnV%eUyy9snEKqFeOq$l*| z?Uv%5PiE^kfMFUy@?w&VKbuTH03`MRU3p+pB4-fj9FRP`PhisHQd)N*f$jj%D)ldg zLR))BVIzSJlJefwrMk=ftM;ZI{{iX&p^<)IZ~mu`{J$;W&;8-gQ6Yx;`z?F@z5ZGM zKHBT=_0NlhDBo*XDy1>$Di)@^1#)wdhVkxUzNsm$mHvSZt<~QVYCHhEyHBTegb870 z-4?;I%|NB0fFjAvt7Nh!Fg0U9P)wN_Gf~3;w-0UtO`pSNGU2Ph>+4{hR=VnS0(%Ky zH^Mr@(maL<^do?~e+7Y#o=&E00%#Dv2t_@Cwl5&i9RZrs&0}5!XAuEC?2Dht6h2sD zy1mHoUV^;|urI01$POwR-kzYg0E_K_nKWN$*A|bo*vb86U}|5}h)L?Piq*|5PD_ET zPYRU9l7{`#ZL`ZuR$DCPc{TXuSM&{gVc8g9#Y-{EOr|l zLg-x&^xh=!kS1O;t+T2cy1M<147=Sj6bQaR32qcU=*-TF0M-NRG^fPB_-}(1{R=a4 z{eW-#{|n!2#`tT1Z!aU?=$X%Bz_+_pMdaJ%I-py9{Tw0wdEnYU0-nd@80K<s9Mv`rtmIRrQXfU|-S$mBJuTlSn+aC%z1nmvo~CK=@u2&B#k zNM&wKOX)$Ou9jt1E&=T80oKjXr?Z86hsk&+2-r|n5x*qVZRBd_S^TpO2-aMb3wjjv zD9FX#s1rdG_rZiz=L3haF_}mP?G(5k;P%u{4XO<Pg8p8kBH{bW z>SqGJ80`Nt2%7!2(Jak-59FM$LbE#}8vweX5xNmyH-}Xgb;@E+S==cr`;;uKn9-GuvJVJyU*OiTz+w1@Xob0wQk6&LyL-q8?*Y@6 zY82$kWwzNr^{gZCz5rhYxnUbB#|IJoEui_&fN-0zp0+<)2QHDU5su6V&jY^ z8lk}b05}M2jV*m`SWb60z-`)_yX7pX*blfnIPe0pU-I^fsoDn!W!HpAV4hCvXECk( ze1dd90k+m4UXG7bwd)boLEy-Pp0^@MG1EA08UZc``Wz0Nl)k8TbrS)e4dnSkZH0N< zu%oAIp8VF@x(h+4A!4(7S*vnr*z`0R<4~|Sf56g>-=dv|`h)Zy2teb1DDY_@*6sSu zrof=8y=zWkMm|B)g`dKnC2)K4c#vC~#z_4>054IIs7hpVDONgpHIVpuuuihypI#GK zr*1;vFTuQ=tU@ec*A{1fA;{~1P_F=mP1QB+mh?GD)j0q(^_~=XJpf-(=Tq`dp&!4q zv&2py*&y8$$_KkSJ-sfm6Z!7*KqTKS$q?DaDiSY{dz1{502{Calt_5z?J?bouoABX z$oNh`NMqV*L!@;9SW>BNEXi(U(We6kz6EKikUT;%dj~=81;}+ZZZ+p_=_*!o_W-EH zBj6HZlGbLq>8;=k^FSJD!NoxE6reeZcq`+DYjPkeRb#M&oBF@CE?B3|3BDL~TBM7g_6MKvo7w zvs-9uZ);vakZ*$@K0ol}#x2$5a#`&gyO4}f0V7OO6%ofKjLn(?CgzNG1g<85RJQ3q zHl0iw1?JSkq}p#_bAr7D^zt?MWV0zN5AwTDkrCbooxA{isDA>fKJ-8`#62*?1N!As z2<2XqU{$lXLp1(`>X9Vnp!58$WZtU)j(TKX->IHOfbRgsFVzJLo6YMY6nG&3KLDU{ ziL{f@wg9XKpmB*5xE!?Mh!s3rW-s!UtpHtHJzKs;np&+%P@4d1wyw0PxwTh}L81WDO*eS_{p#1NvWAO}!{2q2IKmEWuPZmE1h8Y8H zR_u>?8#3M2)Z8KO?liY`|4ByK9!5zi?TmPv9&Ggl_#cqcKTE6$J|RAZjIbjZ&>esd zZofMBgdunl;UqH5eqd4hYED5fMAwQNV3&R02k(3yg5^e<+w6iJI=>0vOVlLEb0Sj0 znoB0+R5KoBq1hn-{~Jgz-79$yr!9eJ(*S5<0@{k{c;FefQ!_CE1=ayDqMP)BH0sZ1 z)3v!mb)oR@7w!jye81yfIa{Q3lDiT?Nrs(gTbbQ}PUCe?BF4eg&TdHr<5SSlvsAlt zcD|zAw5IuyARh+gJ^HzN02GZl(I|_ZZvgc3z@DgSQO53$F9RxHr5|ccf}9TCK$d#~ znBiZ*7+HQZgebut3rhHXFP9!o2T{S{WQb=WP`*JUbvG{;l{Rw!hm`9aVDS1XAAv!1 zFG3$o=D!-$A*lE<@PZr@x}}+$5%k%B{tUTg8luf0z;}ULmjKWN1{8P^0N*cVvwc08 z@MK`~kFbw4(U%3M5d+B>XMnN%R7vf*&z|RALuLJH#69V%LVyc!MdXEF}Zff(2td$2*SXy%w zpz-j+_%hnTX(CX%J_sX{iLjed)r*%*{a*zOcG(Ie=!p?K=6eN3xO{~X%-t(<=F~_i z|1yklMJe~>$+=?TVt+Em3!q!qK)%9%Q^ai+wk^SL2P~*i)eg+C`vW^^Yy=e>t;t?- z($H$&HofMf*O4{s4ufo@F{wLs*sb9y7V|NF41iG<1;s8VE+F zV2(>~{JWP{&LVS80;SzqEt=?zwCJvrM)LCrGz`#O<3M+Z)Td>lAWWA~qZH;J9NBbw z$cUDyH6JVgYkrw>T(hGZCqJ8|>z~KV&jx4yZ2tXb^0WD+e?L)v#(%$+{2BkfZT_+R z(tjV5pYh+v<gA&W2gM+_eVFJ1c@(+CiH8Uxf3NUcYM!gIoepSf`;sGUC@lFAL zC1igLMz~!~qfuGJDaRwIS9fbx<8U85~c{48O`SaccZS| z)JjR3!oMUpnM}JE1Q2Vf^or(4B%1TKkt}{c1Ne=tmo3wemZkBA8XqgajE&xR1%5}* zAS>P;_&o)kSyfNlobHzPHnv%K6eBK%W3NG)s`GBZo$xNG8=CwBgUpHOV zJ*ZBM#H2%;9J0!_gXLriF93ssU8~B5xnWvOz+(WshvxXqPNCL3=lniF9s}0mmzBDk zXwh#yNe1c$$-?)wY}1C1l@`we37G&AA|grKC~gM0T_M;p=Xhn12MUozzYd(cRE?b* z2j}t$*U__@{6B%}hv_y?l*xoj-dn~EO`e@!i>zT^Si=Aq#XN8nFR2sQkc?6Tqimxx z=x;fvG;}u`>n|oeV!uEJ84MrP1AA}j_8T->V3&-p1K;ryu+oz1w`<6}UxWIc3AnHn zXq-oImjLcPh)>-9%)#mPzGQ?-$XJxAvvgS~m(jcCG_*E%RuT9QK=or)?*uLjaB3SOVBYyV|mgBt?wg<1O`;paJUMFmJ%6}Zt>APOa7KftB zXUQj50kPufr;|06g=``@bu|M12t>13y(f#8R@T)!5a6>QlYy@mTue?Am~#IH<^|t< zi-5ajI*oTOBxB42u~|!L=8uuBTz9-uQD zdG(LR+1Bk6@TKp-%yw{;!@`ks0sS$U7Lj<`K<*C^+@k;&mVyhWDYt=1dKLsk9I+gX zR<{!(%>(HAI%SPvZZd0B#s6#ffAPZC2fk{U-NMCz*^c9d@4*DVD`>;mfW86`3e0N> zdIq4!sU35qA4^wvLt9frXVZHGoCI*-aEk2>rzG;Je?LR+AG!_P#^b@<(`(B7PMh{` zWbQfuZ>{cKcZQM@NmOJ~-xK`aU`p3iZiz^XfKb7@6S({oc*#V;eE2vCYaf6o411m?H09J0A zS~(%A$yUh4z@R72Ph z?0>)s{;cV!WHON}r0esJ97sxM^eV?%j|?#!WMn>YNZyq4PBiZ#;LU(T^$Ira-qee+ zgM!_G(Bm36bPe&k^5Mm_gKf5l{;|g_vW&gJE3FNrH?M$SNpOz<>F?8U%GD2Ptj7`o zQ7{8_`rWQZ`>U-Xv)&Fm{j7o==_sN${%r!zf{ov-mr6$M3m458yMsIl%vd5|n0K>XUik5? z=+k87uL8X1VdwZJ?*^qsTgj!w~I(L6rC?S-p(F zt^~rr0j?)vnyImlBP{@2SC{PC!;(J4uamhafvi^m@r|rowJPjCkP*%T;^X}z_m$?7 zydtx-N5LpR>rTt7l#7SG==Kk?h%Eq~RaaPAPUBY7d`QNa1>744r0`B5WB!@yH)MpJ zK=Tryd8Xi(XjgTjsq_AX`V)P4lCHh@}z zK)zk{74>;C!jr(Jo57`+Ot$xWW>AC9PU3cjVa93DV$$h}rY1?JcAZC-Fc@rWw|;pt znyxyUfEEK|`+|m=Cm?7CqPu`YPXK2{B4~3c2XJGee@ zr0%Cv9)K}5VRb#-9X;A?jwRY{unuWBGjKUx(s_3SLcM2!UDty~ zc=HhKmL3YC!09z|s^^^?FxPM%M1gOkO;4Fp!BlNI`O4*>-Un;^XADG*hR&=|uY($14Qg-V2ih~} zZU8=B;z&#!kYT~$R8Zk^g;shE;N;F+H(Bofz>t0=FUd#`EjSUAEmiCYGR~GTPEP%h zpR^6GD#;k9kuf%bF=hhEg;lge+c;oV@I0LH4W`>9YgMxh=!U!s8<)U<=L7I#wO}%% zHgRBQX_tZZ!$MTQSliQriG)lqfeKFc%ACTCI(Z}{ZMTpSj)xJ7N4I7hUN32? z3U>Z_C_w*IQS-OX(){s0GV4HK@4kWVyRBw?_x%JxKLWacw|YfcZB-`!D1n^lbyvK2eJ{IZi`$=idJG@L*}o@x9$!h z{1}~C&~7eCuHCY{%H^nzaOh_tmiliJsQfh$EBI!S2uawOYc$M8OayWTj{`f=%4`prZzzBk>Q~Bq{;86vDEIsgc?3IJ`>!HZod*b#u005m>_Hc5H|NOTnd zjnARL3jp{L0OiO#Yq33f9Dp?%vN`f@eetmuR$fpC!oQ_P+;WKB`}$h^Y9bh&Ai%>) z!UM_pL72fz%?KEy4G3VHUSI5VV`Jb|&`iVCf?U=fO;%k7l*>RRtI2oTvb~q{PQRj0 ztZP3qP#tLhRw^TmI;cgEi!05E)F!4f3HTZ)cZ&K>bICVS&1!~TfYA8{ zAh>iM>$31(Ln}j0J5!L;*2HNnVi?q z*4EsbYi@mt46!9>R93&fQZf&w!wA#kML_NW3X~5p?+4J9Me9R&H5Y)Uoj3)42=u-H zfX1`YmPH2w5SMB^8wE}VV6xYdXhctmCKKx33kJMz zG|Z=KQrWO?YgvZlSg;)5!L%{cOese`bS?PMy#Xk#^Y}{?H-Te#QDsnA680+F7m+!S zf_>OeB{JdW^^*-9lA~-kj~I?2qdWvMahJM>5@YG53Rvv62aGW~h^XCiIO$~dIhp-( za1hJXv6${x`LxBX^Cf_LOS8$2IMhSPWIYgQ3|(m#g8v{*S$BYJG zGXRZ&rofLtuFqdVPAry0KN{rZM+h(7YdXEd%jJZA4zPKm9^lj^+mfjP1oaD8*`w4O z7wd*owaL25RJKrKu|3;OFv!#T`GKj<{7L427)2f+C^8^rF_1E8K*+n_xcwr;)tFfE zPymLFp)Zg%KMrQ>9_5d$R#F$HlAfvZP5=#BX^JM-#E|zWtz(&YJ=?m2BlJ#B$ zhJKl{$SK1z{6Pd>0QmX=i%dn>9M9?&OjX$CWQ31EDVLOlm+s@1TBCFj8R8UB$1l~@ z`2{XseG5zPjsx_r!6$gt+mWCZ$IoQ`r$8rfCW>vdllYrqkf$^ZbQ8Vug0}V^W9Li*w@&<2rc&pja>^A&qP?X z{gMSh2Y_J{vCJSdUJKguni_K_Eaj_AY=40`^hDKj311`LWrGdLgpULCUS*UUXt-4* zB^4y>RCOEBoQ#T{XKIqBRfu`h&VAJ7RBY3pJ-Apk={PBFBxb)3^ZImox?Ms_v@K7_ z)(YCThT1Oa`0Bmv9F~`zza;3#;JfeC16qj~A10WK0P_xfvSpe&P9wlS;ggR7Hxu*s z6B7vba_|!`L*-P(zf?{QCSyfG?x(1wbmiWCiOq`&)*}PF08(~sk!tos1amJ??IE=i z5(K5I*q&lBph7@v>8xm1??$G(1myBv0Ghyso`&@S;2{7sfeQsb0o)CuL!qj?LSS7_ zR(b~DzEMNySs@8{GOYxf0B8lQHBm@S$*xI&`MmZA+8qH zW2=1~q0?DF;xB`JW!R}_G0fNC*_NnzuO+y7fLl*P-V!GHW?&yONCLRDU9VFu+dtJ}S%Y%GSN7UJn@*Dc68=M$@Hj~6 zZ5rE1&cUi>m5qA5ki+a_1IW;5RatYEDk2oE zAk!TOBJ`7rkoZ99kK{M@xR9VH19~Tr23u-Et|7RsKpN@+XUX03^9b%kAkKvWBP6+W z5CM$@P=`*I%O}gHEL<4=S6si)`rzRAf;@~{L{V}=w(-A?(m#{|u?wrK$8d~Qj(iA$ zw^Wzl%B=SQda-$O4_U&7FiJtGmJFw>SbTpNDEe}6`Cf1q@x2eL{i=cywo{oD>l8Cx zgP8yO6{O=hWtj1sa&&w(`OYxlf(v$n^Y_L<8i$$ia@f`+)k?@1aydkbz!L2AY#-3U zfeKA09KX@z#bo7I0Eb>v4mmTzv|-HlpnS=IOomQXl}D4wy1+24s_S$=QR=lL)k_J~ z0ac2qadKjk;$tfC2Po1pssg5tOB)CaT9qd(rgi9g6{mjP8TQ^#r;lAE5* z<*y{jO9A0f%`k6Z$4_=2D&5duBvVB0nP&KLp5o1D?tmjTApH(f=73b0Xlv zauNMpGT$|Td%eU-WtI`xe*pFusJ3WYcIrq1JP?4Z^a|1x@0w-XAZB^6q=_+e~GV8mb+2^YOOKwr#qVi^(O2BsmOY!|oVJYnt^c#@sIH0jK zAWUW}$%MxP@Yld{oA(p&C}|5a!ZIMz#VhBM^%cRl0e)3=TdpB?FAYH*0n0Al2A=aV zNDr8zt9WVm?Ni8Nc7$Pe1diML5zuGA@iRc5PwzX_Q2JNf>dfy)u#mU-Hmxre?G*(?T}yahw0 z<33>4qw327&zo67mbwc-Z8g+VfSgNZo+Yri!1Z3Kj?8;LT$|{>PvAR)fCRy-EI8&L ztCamjz?DGVNx{~_cDw1{{bT9CN)U@UsBMMpavUW!Z0d@h! z-vZRuj{#D(>j#4wtMB_;?vUh^oM&yS5Ib^X10j@vb!g9m@aDqDuMB~pu z`OJPKD8Ek;_>W-Piea<#H`FBY-2^-VXf$0dw7YYZgLSyKV4m+``=NS>gg4jx=}N}A zh^!?CW0c%TGreOP2=Ko^_+xr}N0Hv8QTo!zXS;RB%4xp1PO7w}lfb}^{r>m|Vwcw{eFU6*{o)}WU)y&^Y} zJ3n$W$0GyCD9eBhmna!rQfkJZas6%(-QbG8Az~`)J;=jC&%c3&hp1su4rHt9t<}l8 zKLhZY>N{LvmlozdZFdpq9snIvq9;&wvn`OFzYQs zP8%kj3c`wa0nB5r)hxz55k&6i;ERJuI#t_`eDM%4r(Nn*jJ(Q~At?~4Wv2tbz?UAa z0jDXF&b2n|)68bn0FTjlbsG+erY>ibvMZWSmuwOUndH_-J6|p1RI-Hfcwt{WJ55?}FVZCNs@JjVV+( zjx6;VK;EGSOGqORkT&~I$2kPv2aLvkYOrc*a&6|eU^Z1%$Y-b29ZCi`6$J20O&ZIo zs9no~q1k}iPzfxnwx#}x+1Gkt%vON2B1XPNeCP2}_50ghgV_Sn0K zc_4wF3_;r$s@F1STfub7E@Z;n67W>uOBha6%|=(Qt?P+u9U0;sFvI7AKkzbarU#dQ z=)Hgpl7vAfsYP|gOS&^chu@dU7;C{8b0Ohqc}~?1J2o{M5fGN0HQ-Oi(p5*1Ne_Zp zr5{L&NSMvamS%vYY@s-FI3z9OS-^28aQnfPaNC+h7MlTXZ-YwYY(P*2pvxGT($C-6 z;ok{33E*utppT(QMLwEtyMux8eK~g)Q2ET=ad+UL~F~QZKgb@kdg~7 z%tE)p7{gZ-=CbJbWC2wGE>m9lai47M?jg`Pgfi92DV5-(_};rOyX@kL>i7|GEYUp?My74E)(72{)EM z8*Ma6!Vzi!+?%hqU*pIW`3#WNkAYq4+#+S_F?B-ywV$!~icapgm1nyA)MoeF#J;;oQ0I&}LO~gbS!n_NjdMN-Ua>-f~$&51r zxP>aQA8KUn>T?OS2B2}6)9irim>6vVz?nLy*#ddt9n12c3L5a43bDW3h@5WuUi4tH z>_k4 zSuXBv5bTRpi;UrvW3o%hM{f$Eyer_M(rWrlf_o1H@?zkzkt=&k0^AjNyt#go#>N*;Jy^ChI;6Jkuw-?p_>rENI*((S=w>Jqn zPtSt>#N@ncF`4~mSo{e{XVa%@Isx7Rz^7o@rp=rb_rkK-j{jm<_8TQJqG|JA+|dps zD>(OnAD>BR+WkY(%uHX>1S5Ew2=c$z|Cb`ZD*jD!0!(~g!l0vZe2+kjGK zT4T*3E58q<3Ja$q(p!c_!j}Q=ZJ5vmG<3p40T|M3r|Sml(zz_-(_(NS{WVAsq)~vZ zongD0T7br2QWt7{PUw>c^>@6zSB!(ZH-P2AVa(iB7UWY z*zOSKVW!I3(FD5~M0>fC%*0imNdG{fcY!EA0t}9s9$@tZxC)5k{s5E~hBke~Bk=tJ9@1o9GFg*tGu=iCHPW2LdY9n;2FW-$_z20w#tMGATC30hB%|yJ zyj~AjW}*$+?`aqSdjM#n4GMf2%m=<1=4x_;xr#bqTU2#H9y~M#x)9BuNIvr_AohzZ zC$`PfbjyL*i%YCPNmIHf$r2{Q5W8p-B-crWy)#YsmO`db+b$*Bd$Xg4RY0*9s^FP6 zH+FD_ogoW31_IMx!5qn5mRvy!l3pO#CBXGBfa~TBYFeZ6J@D>S0GgL#De!gxKGWMY zL_Z;G%>vR=p4UidX{x{q-eJ-rg8u~aJm+iqmT85Utt?E>7M!S*3`8UBFzRrKQ-gj) zo{DGdGMTz*sq84SfImQD4$}p=?y^3eN~q_#ij43mjBtmBxYDWGbR}ll%WXiy>J*pE zWDD7}bs(AVGT12L^H(PNpfY3~3RbZV4=Xa<7+4i#0X$aOEGT&p zScQ*dO8-dSswx5YI{~b+OsmTR`P2abJP?2;te_93Tns#Zzqj4D@~4nFuLQgQ66`Jv zi{)L8;I302GR7^yq9;nkL<{U2nml0}Nk-WLMhPC)5JOU#FXWPmOiFwJi}Du(oBvUp zFGWj1e{nm1JDI%$;H#A?bYy>mdkv)IO5mAg+HKAtz^{O3OLV=C`(CzIR5O1&6D;RO zaJSpE&MWWTCg?A+j^lvr-@{JVZQ@&cJA!5D`@=8`)t9)YI4NCaJ?^)VW$X)v7%%kr zjdyI@u_KcSz6|hH`Wdd7@at5)C73eRU&%0e5Q8n$R^|M+VZyc(rt#O$APmQr3Q=@F zGV3>hJ4Ms0rZd0Zon1!2a{wG%*%iv0Dk9oy=`=7m*aF#9Mo{2108T`iH@#DLCrkYS zWd0NYniz)y?*QP_CDK)wjQV%-+0jThNar986udaYyF@T8kx5rhAxr-+$k!2iTq(sT zk=ii?H49K1^^(e<1)L|DkC0)efmCi*;se7)ADANp421!@)Y!3EHLs+%y8*9^|V^mC)a8BOT2JJ4mU($(MIshwkq!>J&IQTWP;X_J;G6Q2lQ8I)JJ zXJ6TrT%)aGP+0S~YM8~gmizTYk)H@S3*aqFv^G-IS}Mt)wc#LjlMh#Sky*C`GF2)l zRaKeZmw=9e-NkP}TWRuWS2N2H0bnfvjq{;BlTHVw;Il-=`B30=0B%{b-Ib^(dnftG z3J}|b@B=JqBNA1u_Lm2kcQ1PMt8+OT9CFOO5a8k9Jn&|C)bv+l+r9TeJ}%N2OeU0fX=vNLS3o+h2T7KII+bMyBfA4|0sxJ@ zr!A#Eg_SNXT`BDZ_c}~?jcRy4Tc2Vjnpc5Wd_h4@E>gXKFyU2T!qxC;G1KRZS+1?Y zEaU(vO%M4I?Njh=cY;SsR!#YvEOcFf?WOUZBtGqutLmGP5x#|e@bNH$Jf$wV=1xg* z6k6K4SuX2c7~x#iQdvW|(AM78+)3ts5s+8)I$8^&M8C*`Z7D~AvhAhz$yZeOQb?LC zqCbH53xY1whEAO`+x}evlClg^0L5Ipb_Zu{oCRXD35bnxLm74;69r%msFHb8>N@h# z=YiaO0?Rh3c6piz4xCw)*AnmxA8TY&lDV+UCy-Sf3Z(x_CC6*TC-DhO_`eR${tCzf z6v^(s8{q9Q*!}L=K)~^(1hkoNxDW{VVPICmx$Iu#dzV96@yGyVIrS_-@C|^@RLdae z8kOm3&yl&_0odir8`tRxO6!LP(C7sXO41EPK=~Xq}^2PFCkoQ8`{p6e11#pv2Enxq7HMvy4{LdPI z4qkBA_|nd^%Ol%^cwon1ajYgKg&Vf~}P=Lz;4u&IISC^l(s=CJI^S%Cf=2xOV&nJm{c62i)M z?V#IZ#c!3R?j%xf=wN8LbJLn$ad)VH=pTqc4$!TUe>W?lce7Z1>FFRspX;PfI(0Ll z&%wZvf57KNr0(|`g6n_}#J8es>5X$9!Hox8L3t@BVH%k*1-nHEW`3Cx_7^mP=2%#d zw;Gu`0nzs)h%?-+XAozYgS3HUleAi4-m(#aKIu{2CHvh9^&+dPOk&DH0$m7}X%#i-u2J*f_4b0I zkz|O?V2EkTbU&U>bh$sU!l)qt?+z@ElqOX(`*tK)oIf?pZZ>(-p4s3#!YHZK*8Caktstl&1XZ6B`+x*LYFC>N>?a}``p&b;Ez?Z_h9 z0Y0o``(xm6v$vZJav=Dee^j6xIp3@vPEc`B&NNWlDkGpUP}HrQEZtm|65K6-dtMVNsTp~x zgRDzVeUczQhk#?LE_6m+PIjH_XyHA8T?(>lv-rRQSxxKL`HpWqS>sG_d7CH;^@XBn z+=-SgBk0FL0PYBuDkuJIhd2p9RVv};QOjzkjE8`mMC)$e%(;>*@gHE{;YGsaqfWY( z1)7@zZk7_py=NNrZ`qweW<3Yk@m@ffmbM71QMLh84fe*nCt^14VMd{aU~l>bS!XZ1 zBwpH&zJ4OBeg>?_jT(Kq-LXv4!TorPZEUUr{L30YiAMV;oRKIipw9s~sFo41-+k|Y zq#Z^BxulOO^S| z&MOxI+{`vCYt?u-_S_krW`uKkw5hb zO@Kf5lRt0a|9OF|&HQ;w`11!KztJf9un5TSl$FY_#Z1^Dkl((IV`UYg(0W3b6Ww4YA{6G%Js>=$hMUiq=b;4QL0_0ilh2F*li*zM?wg z;Lj6v5DCg-5whYah<#OHck#S%?*Dk4`Wq0}6F^)O-urohxE@7T5r;8S%4gTA)HyW? zRuI+=d>*W+EEnlrm|`2XF2D{cS$Tuw z2=aVN0BUKA+XNH?c}^)kU3nq*wG26b#yZ?IvoG^R~JBX8m1A-Y*b1Ly~n0-N62ZKaP>LlkqBRzzmmx3sL0wN)z zM7t}#0-U{Wg;+0hCYdr13cpRjU8^$70-r$u+CT6`URhc^INxQwy$QJTl!lnb8k?4L ztnriy9nCM}OIL?aHG-9mS1%!-+5@Xzt;7R){Y=&)*b70PgI7_Um}wfWS07lAlLz<& zAXq|D#>KATEb4W@@ow2Gs};elRuB1#0#JPerGSaj{1$E<1p7MpuFF-jO`Mj?rKiXR z$F}BG3HlB|Kc+!D)|*7^*#v$tz?TQAn9f~FFo%Nr{vB)+c@UA{ z^wIFJ0K`qT5SaEcJO^-}!Gy+# Z(*8{w0&q_Mp`ihlsZ3&~+5H~y{{Vg;zBvE@ literal 0 HcmV?d00001 diff --git a/Objects/main.__i b/Objects/main.__i new file mode 100644 index 0000000..442891a --- /dev/null +++ b/Objects/main.__i @@ -0,0 +1 @@ +"mycode\main.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\main.lst) TABS (2) OBJECT(.\Objects\main.obj) \ No newline at end of file diff --git a/Objects/main.obj b/Objects/main.obj new file mode 100644 index 0000000000000000000000000000000000000000..6049e810ffb9cfd62212027aa08931468687ffd8 GIT binary patch literal 113791 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 Ifc*LY08O5IzyJUM literal 0 HcmV?d00001 diff --git a/Objects/timer.__i b/Objects/timer.__i new file mode 100644 index 0000000..695df70 --- /dev/null +++ b/Objects/timer.__i @@ -0,0 +1 @@ +"mycode\timer.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\timer.lst) TABS (2) OBJECT(.\Objects\timer.obj) \ No newline at end of file diff --git a/Objects/timer.obj b/Objects/timer.obj new file mode 100644 index 0000000000000000000000000000000000000000..ac7982732a36ff574ebf299c29ef033696a1eddb GIT binary patch literal 117554 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 literal 0 HcmV?d00001 diff --git a/Objects/tm1650.__i b/Objects/tm1650.__i new file mode 100644 index 0000000..0694374 --- /dev/null +++ b/Objects/tm1650.__i @@ -0,0 +1 @@ +"mycode\tm1650.c" OPTIMIZE (8,SPEED) BROWSE INCDIR(.\myinc) DEBUG OBJECTEXTEND PRINT(.\Listings\tm1650.lst) TABS (2) OBJECT(.\Objects\tm1650.obj) \ No newline at end of file diff --git a/Objects/tm1650.obj b/Objects/tm1650.obj new file mode 100644 index 0000000000000000000000000000000000000000..beaa31c08406e2b66680262fcb0273fef03eee38 GIT binary patch literal 116092 zcmb@v2Y4IB7B;+g>^Ke5NGBnM1Ofr1m1H}iB(^NaA}&Ib(+CK+Bqok+Tp*z(gmUS< z_ZE5&z4zXG?;S23?gcLJpEJ8>^-8wS_kGXv3$pfj_0G(mIc;XnoNYfZ=bzKUA^+s5 ztJgNPH8w5lTJ0|k`F3oWI=Lp6j8;XLMz$@Um54$M_xW2kZqeJl9P7nvCNvJs>Tj;K;pz#E!`x0udn{yX&Rlaq8?Us#mmMv&%Zb|JQT1KQ@7Hw@<)=Vumw{~*X@4hs&aj5jO zv8knQE&ug9dR*_XUCpbTI(A%Hn>)zrpRD2m`8#LB&~y9cSQhQ$w;bnNiyPoHP4#LZRXNf%aZz6 z^PO5JSd+3^UQ`lIrb@yK+$#G!Rp!w5s7h=+^LqtOeUqH}q?h6H`KhvKB34bZFtqKX^=eZSbSLg#$cz8@zxl4#&Bh%M8;!?bY=`Z9DZRlr-uI4 zXs97t9TiG!?%XfTd}`B&Sk3%+ZMECiq0(1FMS1F;-y7!Cx1F_BkEf>k5=oCKhD*=4 z>hbWIUmW4o*k(=aQDZ7mHQ(=caHP~Xu}6LQwJn_54)3Ej+pTSsJZ|r`$=62feG9m? zjnVriUmNSxwzV~AZaBqbl!(k9XXUa$Os2o3xp&<5Bq8(}P!=J+v}+UQJ5DJ`CB8Xe zZg_5Ov@E*tu`$nCR0|EvkYsIXBt;6bGLrJspXgioCm%fxeMV#qF4HbRMCP1~b5c>=^#4 zV5UV>w1!!8`|nw^eDxs(>)H-Dc=q0F_Zw#AO!18!K=+uO1BUePx6i=g{CmzgDvvZj zhgm01a~_qN9h{1WBdN05s;VWaxs%JR$xN<({TiEBHP&_2O&dIU+F%;p zVOGD%TyejColRZS25;?tn+o*pywzk3rVXAkY}$yN9P>z1yhmy$McqXTZ@twoH|C>X zPUc_y^vlKki%q}W#J>dSmk0TmApP6icVFGXgQr)7+? z;f0Jpacfu6*P{_LY}37AGo5R1ThZCo)=uBKlfM%)L2kVD-x>rJo-XnM=aqk0wvGT%yxZ@JRIIn&^M$uQ_X`4W54Cw1X{+43K3_87*wY zHtc|o=B}nx{o1Z3Vlc~^IuaT^psu+qRoAeJN8Fk=6z(t~NGDs?)qWmZpHWaSuvn&OF|A+AwhhA*e} zyun0$k?0XiEHdIdz2{c~D~F9F`G?0a27K27LsjeLTVCEo%|2`{w@kf`#3J9yGa6-( z`}3)3#YB2~>_HY^2b=2N;KrVHNxqqNF zo~}cz33T1u+R{3jn$FK|`iNol)eQbfdnTpRhFDZ1wMNok*L8eBf#Ii5#@ypa(rtNO^<5q&Et&q7E(zTyeMAv+)nEnm0X47?ZYYtt9 zSv%8pq_rDeM_F^}I@X#;*YQ?~HG&>9zqiLsO&e;_0Mlns|H`>OUohB6wk_BBJ#a$7 zU~}{3O)uZFZja6BPQH8R*j{i^&#F5i%s~y`gFWB_t(KX4C2 z4x%8DBPWNIA8AIHEL`TvkwcylE*VC--y7rpeZ2ekiS(1na|4ry+m2HY23iSot)=S_ zYav}nTZ`yA&RR^@N!Aj&PO+9+6X^l-GaqpDu%TA2*dXKYU!2xJL!9xh+oxa>k==;O zE2Mw=8T~W()4$9!lA`%KIB+I?H7AD@9CgY0$%=-{Jh0r+(QdialaRsG!Kv3zBl+jb z_cBfFZLa&!b#trETp#J7(^!I{cn_Ic!ys)$T8u2^3G!8F5XS}n# z92So}>IygY*fi2e{FUYAi!01^rMWhn>%MgDXRWe+pt|$1?w5_G5e9=CAbbx@>Yt=Q_64^grK7|HjPOk7~Pr;9-V$NWcy6uxVu8 z;m0BIA*XW~8`B*AJLx1t=`BbnvB*tu%ah#l6!U%ZM9lXsYLCBfk=k{>zrDFXmQ=4( zU(m&0!%B=Fp_Lva&uTN*c5~g&Ts!DmV0F@UBt6FFG}PU6ooMY(*U8oablt{UL)Y!B zwbo4;A_^4TX&6~t&tsGuY|lSn!#UieZA-yU^w3ODBG)1FG)f*a&k*sEflCY#hZBnR z5fhJG5<{%b+=nNknKB8SA>MeGSZpU5M?^Hln&RFkqM7fHWa4ml4x&!wS_hl!A?A9h zxvrxt$p~GCSclPdsI`Hvqpic~I?g(Ru9K}J={n6i%JLBn@_VJhyTiyg@mw-P9plcO z&9ot}j1?5|-M$4~OqFcfu+%oN)Xp36nbrM6;}P9I3_5}s?uY+=zCP#Ezk~((YXj3? z8ua&HP_?J^?17G8;w20I+1=KYN$2dI+=c- zWt~dbfOQ&O3$4@XT4J3+*MxNzU6)#C({(TF94kn}k>AU3oYDI**=O-E8Sm1#?8^&| zCXdsi<{c)k5GFPQMWbNN8+QX))Pt=<8tGB!#~}LAW$n<*cx8N>zt-d1?y$KPdNnyi z_u9aZ%+QT8Lzk07hR0JdLtK)QaWX?Ql1R??$C#fMNjR4+Yb*Efq)^O~0sD?@q;_(L zW{z9Wu5LZ#9hiC|E`EXgv&#K@!o@Fjf9~bhv(l|+m0M4%i)(jr`@7#?>wf<*_xm-> z5=`&&i0XOP`R00oxn5|l7tyuAx|pt;TbIyvxOFLAx3n&!YslJ2*IleD=sMTBlCHa3 zSJAb>x`wX%TG!HbwRN4fzIT?ePw$;20%tNy@Fc^L+~p*>Jn?cEBAUSvX_5T@U2^Yt zC6}z1D!F{0C6|9{lFRp5a`~qwxqLrcaxdp$VjA2)l*lFa=j%=8db7FSLf3q26J3W` zx6*Z}bsJsBTes77mUSmx1J+%1Ewt{YYl(FaT@%)QbX{uQPuIPy2P__rUL-eg8aaaf z+|{7{IwnTM7&FpYk4~o?moqJ zbcc5;;EuajF~6QBZp3jitCB@1UY}`c*o+98Z&o1qJME1d$!j3hLR?ASf%$Bh5u;KL z8UJ*dC-CdsauJ>OWD1Dgp}R;M@reff0UHzepmen zs*#ptV~eUvQ{lGm)~=?GLG&>ENB;276B}8P^K6YK^*j%w&p-4zt=?J8**wXcIsQ~h zr}-tMz^73k1ioiIx%pHWR!ciOHmyA;Q;}+3C%#Lmpd~L|!4~ySKMSbyf$)OFVG6E^ zZ47<5-xKS34TXqVT@$-p!EDbXNFT=3NM{Y9N;~RSHAPzM>RXy_S1Q<*J!ZFp-Remt z((j`jN{0($sc>C;S9eEKyt%Wfzf#L>K=LQ*$C_G3xV400smitk7S^>iH^!AJu7fIG z6gH+RN>br)Fp(;2?x5Yt=C;-sl{yZCI{p-DR8=KfQ#D~b9w|>HKg81N_kl^U=ESacY$w!bJGKU-;V1mN21 zc_ox)EG~b<3oB1op!@T8>BD{9te)qEmNn3URwv_{9MXn_`7m-zK$fIR;_-?{l{U)( zxvQujM+GdT?e&`Y2MYL95XmpSX2T_RsuzdoSex?O$y6*5yk4m!0F^8d zo#I-8aOHv;5lv0Q&V)K@>z#%Eyl`Q({9j7Lhk$_P)zf@}s4$M0)*liB79?Uw^GlVQ zx}l~apjoLVsxKf_tXHa-4^_+oY4`b(c14o{JQc*?N0IiZ9Zpmxl1D1IiGW+~Nqa|g z8|^KvP5Dk$pf`i?JSD>(3zxVez|0@B3uAWC2&Ix+L5`m2QAr>e3xr~U!dReabET3^ zP|1_RJK=Cuyfsx`6Q?auQqLuo(XwllI{pNcumLF_E{&GgD8NN9WZMblX}m+haQrL< zHxY1+&|rv$x^kHU{2wUjqW~DR$s%aLM*#RhkFoZjqO^GnjP;XZ^ujD!r3&g3py|2w zyxB&(8AO_3wER^Cb|duj6?j0upM;=60e%R~d>H_JY-Bayl>mIV2W9M&l{Pm4Wzd~s zU&yYe-FL^M&^(!q;0nEw;n&rKL#cREOIux|;~j3HbR-{YIY5X_j32Iw-LJro0yg{; zXvU67rKatM1F&6Kf(F+Yo}n~%BvATqu~vjKhQ9Ja1vwv(yYv{Nz)1@9Rv4qlJtf0a zl$vmHs=TgKtX!K?$vU9#U-G;qwTnZs@d|1=h`<k*}vdKl}iP{$P|{hC4E32<@1 z1q;LRGnMwf01a>+Fr{si2B=ejegN(PK!1=lfCl^(xa&j!vf-`NfTscQ2YEy?yj6)r z@(87;69BhTrXUmynhM94P;5ixPzC#y!xDxk&I3n-rrhC3+%G!k5T%N%ftz2EZnM=Y zO4^qxI2%T^2I%DXRaBN~>f#-E-m64>l2vvrF-B=_8ld(OR2QuetXWPd+Ek;pQ(gqI ztV7*Z1r9fu1@u{1PfN#C-i%^%Bk@4WnG|S-`CQNzAJ)@?Gogo*Ut_Zum+GMDb&BGh z_ECEM75F2kia%nM9L7@(U$XE}BSD$!O9u7pZn%jif=IA|1~ zBm18y9XS~4u<9ona*Q<(6Ak-gi7=_5rp|^siV03Mb!kuJhl&=+s8B^ku~bcMk|R{L z$;vjMNEZsv8}%7XnfZb9B*T;^Spn07F+vSfMSvEY+|{a>FLZ`dM-9}mQy=;~_@z?8 zPoR)bkU2_haj;^Q0y-R)sr~|~3j|0XrWD{2pb!5BpdBK8r~%6XxC;Q;2dmV8AA!VP z3PAS3RNz$re8&?zcTtHPDQA4YQy%ttV6YqNokhl>#9(aZLshg0O$@5Bm8}T1ppZCJ1D*rGuK>tCLZt?@0T=@y`v@xVH{j3{1Zd{iC1vr1@{E%J*yPE4 zVOhLW0c{4L{l!6`)>4u9;wUX`&rz`d176(F8z%>~$=)G=&XMONISSas$=X8DI-qPn zSrzXN*mqD@=Mk5(3g@S)Xq-+~+t~py`x^8+3thJDo-O`v%x+D!wKuh<8aqfXHdCIw z9E^8Ro;(rY^(>c*pHR?mfpWgWL;IZ-4S!+GU!<)j-U#Ryfo`D?$-tgUvlR4eK1_qX z0T?9rS_OU$1V0;qY!@oE7LNoV8Wgq*DsVmkca~Wg?X~z)VU8l6syyY>&O@4!zFYKM zhI$PZZmr-C2e$lErjEvZ`)Hw4Tdds-ko$?VoA9Tqd~5vLY8-_CdgF4ahYO~P>zlh~ zDLwrR7~xzPmSBJcD5(Hn1nS=6F~4KM3XPZKD^}q9gWs7i>>CZYmZxSH()hGBtkUSa zEf|5MppB!Ks0zm^-J?Mu;4p6U2Z1$`EX z&(}z9vOSec6yWPX?&|=^wnqh?3&1bMUb?~Q>3H{iYC3Zl_c4kdaCUJiw$prM7x!o= z^RDdiZdrD5PjJh!i+iG!iE{k?lch|o$K_MA%BM-${r(wJcE5jCR{3lxyWc-Y%JluK zd*w`jkwWPMfHU)88G>gsfsCz7ZMXO#;Lv+uDpE@4TteAXk$;r#*ig~#!f&XGice6` zhXS`+^%SK?v>9y_ksqfbwBr%_MX6>xs3s{A!&^wQuJf`2J{e{NKLG27f}~>N3UCq# zO9KFXY^1bF?cLyyJk=M^+dKj6i|4m=c}RHvJSa2IUgVaA=P!24!t<9%+2zU0r0nwW z#;o!cQg*+8m6YA@Uz1h7R?6=8uah!;{|(^z5}Hp09BsUdLg`h&^TT9(-Cc=zB(gN} ztOEWIsMDi_LrEFi)iPPue8;hXZpz@$V0vfo|GezCiU`3U_De>}%z`>0i-+#o_TkEN z#DLxWz;5glRW4G1TLW+}0J2Y{0>1&>d{$q48t6w&_r<3Zou{^hPj7%S^XV;aS@?95 zTNXaORmv_O-7aO9@9xYh-z8=D`}auM{r-Jf<@=@Ve*Xa})Av2IPs?4TjB3IQQjs-X zeLD>W6hY~Hc#!LR<#PYd$~d(Emk-TiHCUHP#e9W7E7ddutBuO2hCEB&{&l#OcaeWn zsu>Q|tOl;}7m{|U%B- zj~%a9aKr@1ce5yPGY7kCocT19ng+lEnr>4)?XD+Pgbf(xs(En+wc=F`6f_HG7>KO>6~BpCh}Ew}o$u|5{4^|Pmd$nV!y5Dx@F=F`i+|szh6NM?=%qgzn45nBhp65wXRhzs*KygA;0OHbb=u`?o-* zlQL|W1YS6#)_j#iLDK#f)oK>C?2x;vrOmQu0X!y-C9$&E6f(gzosI51<}`(p{h^xu zdyNtdK$PH~N=?gQVlx4mfNWZ&wokMam>|ux;SyT?ETjd=l+n0anA}@18kY(stHQOZ zSk0nHJXKb+sCuN*@zX(7f1Tm-xjV2f8QIl8LaAq8sAmf?cJA_tEPWiM;P(L6Z%0@K zqFJfChZ{<-_CKjq)D9yt97ZBgMB=!I0=yDN;vEo2-s9B7@d^;f_r%JY#dDW*TB9;6 zWP|sVXuDL(q|ZrJ+}vk(`_sWP=flV@Puqn{{Kz<)^;tol^(iopH>D;S;?+C97viQZ zSDg;x^QDZrD}{yb)~vPxJ{$018Y&)u0nrjNw(;ovG1PTFOw!M+d|KAwaKK~E?;cQyP#!0L{@E@g`xlqmAO!l&`Q*c)Ud%f*> z7XC!MSpoe61Uk|K*|FM{3g|lkoe7q~mlDgcobtv^R%&}<~I>7i!j|a%X%}I3|I*UI`{ASY8&6&r^UmLC;^VA7GY)a=VM!N1aE)$n;?8uWTG;QUXJ(Zt z2ZZ?ueus>54yAy=`{{#^&i8ZZ(0%58S+?c-r;FKhPnZSegxNZU=4XOze<2o^jZP$9 zl8C&kAkTwg{zRq+6o_3D(WVDSfIR;xa!Kw%I?`904MhMwM~n|iby~7Q!sW**UGD_Z z+8jAFNvj}X1$Z5B=<6Vp0XmkT$>bWq4Fa6)563T1+S?v*izE`kxD?@VytqPBVF!Vs z93W~S7HH*EZLN)U9gW(2qym->Y*`^PTv7di(%s8|CD3Oi^4QlXxP#y^3t&7-D1>~$ z77DNy9&$(NXQX6tyrk+m1@(-hR7FiyvaHL6@#mc73>R;gn@VC8}GxYXg2 zR9RD9BRj6zvfnZo>8(5`kkRHmvujbc#lKykhPg6OMucnQiPBq@o*xE7{6C>tNjw(u z2NhHcpoYWq(&1@00$F2@>407=o-(c5m21I4Ja>qfcF)7Vi70t+@yd%1+F_67(JMZC7gIFO@&_yF2DyuCfXM)KTc`#FaTM= zur>u@@gk$kDds00LY@bVUfRQqSDvas4+iclkdc8Dp(gQalqzsG`W+8>zs7D8hsvi$ zTy`)U{k*X+3nd*yJ}&dZD1W$|L;vmW6wUWJv89wb5PVfNIJ@%ySQ(;!&bM`e#{3 zHs(|MW;dW3ddN)45r^D3*TH4ZD2HXvdW2=3CSrL?R+*<|c%L$DWt8V+m3PZ3H)oai z%PJq5RX#4Od|_6Z?TGYeGodWYiM^{r+08*tS~8p$=h&_zBHD?E%Yn(?ly*6MqP$#b z_ife`;dY>7j*ik!sg`gl{YA$69Dw1EVG#v$pEfM4p*v(Llv_!yxPjw z71(GV6Z$aQwSb^dB#vLR2YG<=Vy;OpeIZ@I?geA;1a#9EEq_z#=J5dgk5Dy9gQ&R# zk2;TLp6$W3SO(Z*$rQ_9DNz`+Cy8p7SaJ?fVOthU=X+@}&c< zt2~>^{H&q|R%YFA&nh31RX#SWd_h+ECMYi!abPhF?4po=D2U-Iv5+*{ZhT1~@UsH0 z23gt(WSCYw5)nFH-P*jotz-2mN)0=M(^4)rhm8QOpjK$n?zaG!zL?3~_Ek!Q1%NvU zsTABdk(1*z^%I*y^8)ANBwsRrV4$^ngdLt(T!02j2w@pF~lJ^@6(M~F`3v%}g-^%j6? zh1UF(8tibTwU9AcW>9sNpcg&9W6>hM3Y}IkCo?Ia>k4x`i}K@d!mRZT{Z~ z0yGXDkp{xPQt9jn7>G6yn-GPEs4?VbothK{E1|=@r=*3q^x>`{O1leyNIS_>GHDBE zE2t5GTIn^)(j%nxYbt6bkancEAm+dW?$)K2H)0{k$_z0~;hHL%c516D@4?tyEQTpo zn20wjkD3R(x6T6<#cDMl;b$5U{_vojf>bRkR+<_KR9zt|z|0Ve`79WnHPW_Qw*jKm zW)Q{xMrrhOAj(;?=tWXOVOup-iCWG%*%a>TXt_nH<3gz817P|f9evZ7{w>f4R|C_t ztxyxOZ35s6&|rWP1f8RF^hCh@g5y$Lq@cEdaaj)B?!>$BGM7&imM-A-0&hi!mmS(x zucpQEjY`wsfnGn^!;)|7E*mEm?A3sM4TwaeVqc-)-UT9E0i)t$Rn(*a&jL~TRvd9+ zB_Ho|RQ#nNj|JrKo{-sP@dFglKmZ+xgE_lUL5+gJZ1OxDj@-a~_N|l}K8Er1wwR5? zaBd-H2frre-2m?|^9M)Z!j!i`l10Xp9=r~seg)`HcZa>OFjiQ!gMyz2^13UGFdG{+ zls5;g)OuMSqP~;fPb8vlke@cgD~E>;6<#bEE%ZrS}Ix?{g(+N|x~w z{AQq3qN%kp6{k>vOO<-Q0{J*Ys6e3tRW)T1U!?;41Xf4R2f+%^IT}r{E(XE+7;rYF z?m1g&F9Eonq@zT2n={yHW@rik>i|f(1NG!xpMhvyC~C)D2IMzNo1tuN8Q@@GDDQB- z%Lx7jO5>jbBb)~VN{nD@TKzH@mk%-)XlX|wme@yWat9b0FSCUsf#INYkjG*W4LFhJY;CUxLJrH(^@)ZUVId1bP^GFqd}v5o=7^Iza(O4+JsuVOCa z4|`&`_iod~NX=eV2tW)gVJoO+uR0q>=$mXSSoym`oZ|qA4@vvHalfX|{Q!)MO)ITU zq~de{H%BK!=c znl(^Oo^WAC+MRg#Sp~lZ;8%(p87_*JAEkf}hGEMGe~j3O1}`W9K3Y^$8B~G(6r~T< zb4fi0O6ERbnE>b3ODUZ`27tc^?gKz}2~^cChacVBHO3T%D8cRVB%Ah2-14PU*w% zU|f$7GmwtnHJK1A7ibG~cR~%1$=Wfy)|9Y|B3PmcZSD9s(8ouMBS&tOiS!BCu~2~b z*j#QfKXKFgSMa5dmDya30{kjQDX0yw1@O0wG?6_-TN_%q+H{cEWx&k=&bhc)X|N6C z2aiv(7}ygOU<$-wYk59e_l#6(sCR)Quaa#MT9V-|@)n42@llN-^E+?BPXY{YgUp~Z zH_p<)Wey5u9G8ESp3st??bCL_M}vpZD9mLT+)Vx4(4@l@3d{!)2}-+RR?nJg`4m|4 z9FMC44p;enF`r*^ci#i9x>S@8F;zU0&}IZj0_+blB;{q%^8J1e zjRat;bds4kTK-B?C8ZOlxjwT3STAeB)Pv$9rTLT#r&cn zafh~7YWWMK2lKv%IRD_D3UFHxge9QOgYk?hP?}SqCO?Qj`FWp@SwJsZb3Uwq8$G@@D;{#PU9*&X1HWvETo%waJjVeF*MdTv zflymU-W&#{6KF&y^K5lP_ZpCfw=%pblTuj=yl(>NBzeSSRUnoa-6vi1tgQi+5-girwC+Wj3yrZkh2MOeAHAXRFS- zFJ-yEDC@qIIo^%yUy^lS%6$IA^F8+R?ZP1*s!Blg_Z2>H~8d#Dop9*{j#1;?J2g1`73e^K@at}tfFH)e( zfh8x3LPeJJ-Z#IK!j$6C2~*B;nLwCw$E>ms%FHwivY1B7!gN(x_oXcN7iQg;vM}Z1 ztou^t``%d{HuoWIpKJoKR7!-NHr$J2V-yNEfPXk%G%-6*;vxR2fFl4d7WX@LaB1~WO4rmRyq!t-p5u|TQYtCfR74Yc{B>OZK^F{ zH1;p73_u?nrzJ{@8{ygB7e_r-R2J`0K$`=o8wpaR z?E+5(g6sunp!TjSDSQ6r} zfnqnxrCGsu1D_OtW^?luMyj<<(lMafmZ!NSsA0YaF7Y-*iA(&PV^^DL{S0GvG78k} zkn((60d4mb*M(@C-ihZIL-2Z?TfO;-YepXdh0g_%q?2`YFfQvo3OPze#{sE-grSl& z)jm2RP_E!@p!Nb7D)$srr21Y3yfuKA$O;FYXGll>X)7FUpbmzLyo4*`oHOYlrPYlv z*j{D>TH>hD&TAbHdiqz8YRc}bCl5Ox)WPQfWUHq}9Q+Qfbu0kc>Z!m70r&`P!_kgb zG!fSh!Yu;iEN?vcRVRM;jLA6)T~7e6{B`SC53uI>YJF-_!xHgbF^ zem`zGWhc>25I+a@_YP38yu<8w0~fRi=O)ngqcgcXxJK#qx4_&|cw~%eU?~Y? zoF&la#7m%-X`<0-0Ntbhw*NoMgH(V!5)#8%MhHZu^jU2?)z$D6NMUVF=pmigO9Qt^05Y9`|OL2wgO$Y zS4M0S#uZR6maCe9%B&!edT4xDY!M@84rNTX*xX3q_=c< zXpm-$V!$}tA&;tOd!_(t3Gk@huJkkyK;DbF zWSNCRllE4y8-cxE7cpc3PF2^$t4b;Z3ic$xe(O;PWkcPdZUngZCR%Em9i<{kd93ZC zyb8>HRfcE;+?)WsSJjtjYz^qeqS(`c@NMnKDB#aQJ)bRH#hFW^WtEZX3h*=lej|OR zhfb%|I!i(S0#b22_F0UerGPI5@cW)9QqvT?cD;i86b$!8fb&s4EN%DZe87F-J*po< z(>3pZE->}ZC_lEgPdgP*UP>Ic44VIx51?+CFujUs(+4H3}e#(F*F4N#K7lCdGwkloh51=mboQPj3o{b{j{n`{}5Xkp_ z(jL9L-hYD9-UncBE(C`n#A(cJ%~Bl?$R7b|T#-u6XCDu)2+nwXY$CMH{pVmDZkKV0 z1u0RMrUHHkXY@D`V%`Fi1+otn`kV;k@vVS)$2t*u@G`#`X<~12ZnkakADKVwdyMcS27Vx6FRnD8+ zX^m8Kh7N>LvE(_K0Ychl=5#>S0s|DbDE%A&ppG645YQq~wgd)9iE*V@W}2gARZ5%B zf|VcoK5B2MWY$d2z|D(EP+bm+xWp&X8cm#q>Vi za9o>5egd#daNG)ul*VSj5G19CG}=Y06wp8b?dOe~yJwg5ou)vqgmHV-gNm&Pj#8l0 z0lHAQngp=ejYA0hs(_Oq``)`%Tz>IaD!}J}Uv2?@3DPO0YZcsGAox!KELi- zfZHO2K<4CHodTT+EV@)=qO)m5io*(d8q<3`bFMWOScgNj;!x)37LGRIx|xkH7s{s% zN-(L}+{1uben-A6(zb=S0aOC`vUp#G0D}P3?#-mbB^05xs4CUexPsqm({-p)!#BWV zCuhusO?pUYDtU)e!Ol>@JedopPY6&{bR_wLg1-&;^hv=}?`?<4{Wj&MDN*o+fS>P0 zjb)^S=X}q;PnA06gQY8y;U-y$FLpB|?yi7e1bMj;_@3lNO&NPH@crY$y!7CHPBI-< z8hiz~{wDG1jHTrDb8Y?Ld0_L~BoS%;TU+JO0O?M{$H%WX=R&jybAOb&y)*|@yT5_gfRR;gzZ zaMdbpOt_SJM z1)NP;iq2Qs3jnT0hNqU?X=l+~b8{{RLcc9hHE_v@Y}PKiB`_QTdu`mT?h1gNz^Y# zV{|liHg##c-A92!_^kN zbTdfT2pOk@otjN=GTK4G-3?swm{6FWlmaT;cUNdG^H4yyORI$D*WPQ~5dlK&3OGNd z@HtQE?H^!Jj}Zb>d%Wga75AU5KMc-Emx=#FNp?Md zRGYtD4APU%3mu4-AFJ@=dQiwYz{eajq$T^S0Fj&1Lv-x3lqTzm1^B~rtSPd|Vw_P& zulW`18KBob^EO#*UPYJVPTG=R1mGdh64P|voGa!jho5qkQ;v(tN*`{4p?)f3sH5TH za#~(%AxG8hMNU*|IR=LMXPLgZx+fMcjdf6>gSy71#vheBE(MG9jtl~C+BgRqA5fsL zgGstdpsue=C)@8)pbG#RkT5q1&EQwvrBA7A=5!)dQwN+EqK%YumFDw-V-J>|drCWS zrUGpM&cnkuytP3QnU^TgT>)AyE;a=pMawmp>m3-NOJ$O6A|5#AyPDFU*0of8uQdB0 z5b1ttHbzhD)6~dX*xM?|@HZ-7QyOaonVtkA!eM}#E*Jv1{k@36HYI45|9(qtn*Jy(o|!QmYHVgp+ zRX~q8D$?l4hca}e$5#!@zaZRC|Pi)v!d_U)`hPH1Nf>uI17uqG4})r%U!@t#Pw>H z)uF)konneyr>vA-dsvb5-`^*_bLkX`^WjlS=USx~B&Tz&4(b!0XVt=RP4_GryRMu# z5ayKH;ibVaUi-;-5xoN53sDeu)T0~JzT1Pp>%9f`5jG^^tQw?ZD(izW>O=$#ZAU%myp=vskisIoxchmLa1 z`&zgLR%PpCX^KRN=RP4XI{P{0xvvF9^pd9oI5ITtCslrcT`)- zybyGU_ZAm68S4JrqcF&r>Va|%>lp-Z19^N71essLr)Cgb3&4Q@WEV@#Aox0XAJ>cb z5i6oK3Wb{a06Mf+ehBt0Ik~h3;e41M4wYGKdK1k~Y9Sr#!La?|=^V$f6=y`P4_BUG zEihC+V964Sn~6}gPIG5neM^(JtN9XWkL!e^Twi8urR6fne)wjCMvnB&{ zZ_ypz>+K3@TKbOC@D0GqUKlX5a!6a6d<0lI9jZm3@D!!3AAucD5#q4a&`G*06x>IE zy996nO0lJ_ww(z$%m&RGCLa1kX>mVb2in%f$pG~hqs=ThK|5QH1EH;%-UV{; zm^V!%cJoze8_Y)nYySy4lQL85nH2khH9Zu#l(<_>#rr96>4nf>kn_W)6xu!wz&ioR z{+*ggaT@^cDO(am7$X;jA1h6Efm{rQCh6o}bT(%hKaXY+a1^1&$;jMK`2yD~ zxN8CT2DE5ct4Ld9JpcxKNUwukbZ4Ip=URhZrOJbSkY~ExZRyluZ67u8xDC4Q1G{c-gy>8i)V*wF1@j!cbWmnZl#(M?{*j~ zY?0kc6?h;32Y{xtDM^~Pguf@?w#jCWV$Hof5SU}2j7`Q=qxg}vZl(0vUGw%QS1ZUEh~JJf7o>QONcDIHbtrgbUM_gz!w@G1 zU8n&62J#*Oj6nIq?TSVPcrH-)E74T^=Ir+F&Xsg&Y1u>XX(mfNFMl%QpX0+ zc7H(E+32cS@bZB94*?(>PZjtK5bF+kW{&tNZ|iJGEl!rGYu=xOw()E>z4*}tp=zZ5 z5P+8pOO%&XCL&sp^tC|Z7eKi=aeJcNx)cI`4ch4xVPaw`V+ksMRggCTprc_e``eRqwz^8sV!80M5 zk81InB_JR3U=Y}9n-fgqhuo2}qW0KZFy-tlMaoyV1GW`W*`i?`+J9b+;yopT)s z)@v~El+spD^>#c6)^7l`IltiEN{6cfi0M(-MyaXZz5<>(7g}T+r2=mP;47fz$V5~p z<2{#a(kmi!0a@lDd7{$V*4nh6@|5p_4Zq0q0@y6oBoc8s2fs$Cp%iMEEh6F!Y@DMJ zHDk0JjA|H2WpjeWMM|SV7@X?*0%Njs>Vkym{kTPrl>&{fgPMpjLp zHV1$e0AwSp0{;g2Ih6lReOK1AGW(`a%TL0alY6M~k0$8^D)~ zCZTtAQDAx^TtYkSg+a|nI}G4|0qH5vuAXgfdl<8Y0A%MtO&WIsj2R|=WamHy)&MXd zGyN33%_bR-Rwq&wsZ`(jIr1|Wk<)9?fpl<^oz&(udjg%N$>fCINW&5F+bfLmImqZa zBHal)Sz63#uzpgIj{x#sd0g2J3%zhZvkLEz&+2!F`3#KEX%%#Tp2cn&<~o5W=|i+e#zc=>;^ z?ArhXJVE5hQ-~&S!g{6sYe5{m*f)l!Xw%q418=LKIr}<)*b({yM~hQ8E>?i=!)RR& zK(^;9@KOMNm^sY$jY@;3z%c&=6H0cP{IH=?pww|DD9g`<)Mi7)Kiegiwve?w!1oY! z$)t8tKSrt_QQ95}e6p{26|x9yC$&l09>5_x$aL1k7glJ|VlTsfzzr}&Ax`^Gq~hVYb}p|1fIDXnF1-;w9XPS2Lf{vGz&F6?P|gy5pK+vG z3xSvl;5|j>rH7W@8rG#Wy#=6g1BGpwn(%EFP`Xx>bc$j{C{b^!qHoh(ka6_VJC;X# z>b{JF*qY*a4RqfXo(m&2$da(O$N4JMaAl7g_$(&xnAIzUdj)E^Ds$ZFm7VF}-#n#` z7eOkogC!65^;#yS;T#3OGYnp-CW^Rw_^*KohbS&^(I}nQH-(Ejh=UYz$m_?mv~vEOu=20%EYe)Ge;( zt})D7SOCcJ*q&EWNCQD z_#fbtb&^-VIvTl6!5ju|-QO~^jnO=@Vh06P1gHv_KQjsL4^lqdvA| z+J@$Rz%7phqp{Oa6}Pp;=Q#k4dJk+2YW*%_moGeuu09Bf=^!_nWrFXz^nbW(Ob5d=Weix`_o)}Y;p~D<^ zE}I|Gwkoa$)_zsw(=BWaAubzZMTO%C}=oNxCl9fo-7}2^w zX*&nd2Md~JYrMSXNVT?X{sV~1Nxi1qH1BbCDtcDw#!?WNZD3v_hvr=^cbHPe?odS$ z=qRTOc`NmIN)2JCVK0d%A`pt0W00Ih%rXQ-W?&>f|8`zaX0 zTSX2XH$dKCpiL=@LAjQTKS09|uOD>A?_8x1e*+^NCX*z}55r;Qn!bG=a5qceIp&Mj zD%``FbCqWI1z%vaa4!*_oXUhVm(-m2Ghw_jQ@o!OU~6l6gTa$HpvQOz&s2K63yk-C zdGk5zTYq6G9tf>&tE%f4IhosG0I#Kht(uEgcfW1ku@CKie zu28^}0KAXPMtS;BP5G<}KU9#%g5LSHSHl%dTfnE3in@Ta@O6qdCjr%BwU+^h%m5A{ zmQ<6tZVR}j;5PAYUJ)!SSxTqhfRWoMYSVQYN{q{(9r*YYsD8N2{fxD%3DX{sIgamG zjL}LT4uC%7LoNJfx5AA0gRPWWs-Tvg#CW;$(D`*;O>9TV7zFGWl}ZM}19iiMoN|qO z*;usmb2oq$dKre&PZ4?7DeZm>;&&F{d=&U`p@O>{a36rDW3t10yW$5ZHI%_JMv<6Z zGlY~*p|hc`rKzJ_f&U0pKThP1;M9RwRq4YDay|Gef59UYsnk@P-@_xH4r}HCH^tAk zN}C&DqVbxTAL^~&$-}Qj4;&A4`aVn83L((*Ii>k>AXXvT>2Ot9Dqa#^u(<;M1Xwd2 zQAnMqMEVuGD!}J}Cp}wDxDahlXu|y;P%rqx%K+!xD^VI;0l*1jxyqU-+m7Ac$+0ue z*&!!>v90knYcuj+a_Hpj7Oo$|KRDE37L@s{kd!&04&RseuJYITzLe#@yoXipOIhw0 zXVoudPSC^k%gcrZFJ-wuHw!OizW2ah%Bpb?+uEKVM$(EB=I z%@;hVaJ65P{u2QDou~f8t>r17yQ$z;8lD9Fytl}NQMvSDiOK~v;*VXT)UguSdbH5Y zts~LZ)~@YC*8z5-^qx4I_VV4#S!XCM_XER!u(Ztb*1rcW+uqKV<}O_T z=ubiQkwmIlF#iC-IvQ|33JcLB`F2p5&jEvwqd@z>6>SQURswW_G+D)i8;-LmySL3x z+@1W$6%AggyiC^VIvZMQdSLQ%cvUHv{u>P#7QZ1`<>6W7?C+1ux<4hWyhB!br>ydv ztnzMI<>svNep%&1v&zS1l`qUH-wfsS?r9;Wvl!TeTh zsbY&_lohJ8tFE=NuA}h-1sn#j=QO1A*v>CWM*0pb$g^$-)Bl9m_M)mHH&?U$AEoUY z0PiR+nyeGh0$E9EW#k71zY5IZDB)-ldlDj5`0fHpcp5yNk`zC9-)H^vtNAU9NzB0FF9c1f2{JzvqX}?M_mlj|236AuF#&L|dD?l55+W%9@sc zL-=|0y`l7vyEm^Y-T=-H(vh}nlolTXv+@w&0+dzkdua{`W0{w1*)?<(Lp*o9%nz&NI91fE7zg{IN z1d^o1WbOx&G_2RgYv&uzT<=I)~m09KXtnwjQ!TW`>Tc7e^hEX z2Z)b{5Gm76IGC{spqap@Pnn{$9s69st(O^x8GmwdDj!gK+6Dr< zg*Qnpibf7pKw|*Z0t9mPqARE`C^b9qhk?5TrAGcxi z6PFa9gW`t{4|J0 z@Iq5=SCF^{yHYf$VH-;P4SUjBDBpuHQ1@ok!Q#z%dL0}3X`lVbv-XBMCdmwn{I00_ zx{`N6sxOh}HodQnCrbK$?mVj-kORbpjwNhuUGN~7TILHwQfrQ-@VS=aC*>(?fU#^) zC?U>`nNolQ0Jt{8#i)E$fn5U(`6jf-E{2+PZC?P6h4$=d`Rhu169BdX1jk3YmNbET z7P$Wo(auR4d~JvKVPN`)J@0c-6>a@H+jp8tx)8k2chQzaIH);NU93Fi-=J33i{HtL ziQ>K}_KpKEyE{6%+q<+yy!WA!i$&lm?9OCN3;ALpzveu@5A*O#((D_!N9p#{z`nO< zxQ*d(Vfy^T9!eFPKuWV;3lYk2`X(#2>;$z`fnjhHNB9e4{-PoUzZ=NzTyYvP1-qTR zOM#aI<%>PaJIB%;MfH?|z8Wb1dYbY|>~*@B;z3MtFm^8ssJA+79vYz#Cp%3h@;!^pm5`Wahm{mt%X(6!wDo#w2N( z&}QL_@&jm#KvzPq@s->`Ivl)FY4a;kb?1Pf2PhHOSqkn#zQQS-bE&(8i z8mhp5gP@-&oXc6_94|-PmpB=Ql2uAUfy} z(&*TiD^&g#h~+&qaRjX{@u@vcN6Z3pEfT#L3zo&ZmG%Y$XpKB2wdd|llDKMQo(Z}o zDbtWd(A@&of*ZaEDL)yQg0hZvly}0U#SH z6?icKKLH>GV#NL00zx4GtAz3E8djw`n^&~fwXn9&+;mB2H7|s@0q<6DnIBwsJ9sw& z%k!wrt?~VKaVcX#eCL`LUsD5ew!O>jXU2nMNA%$s9Zm-Y!OutpHE`NITngD8GpKDKGK zg!c8_XlBy?{rapZ&#D3av;)inDNlnFRq&7k9u9)*Ep28lF;$l=(0KG)Ao!{B_?#~x zP@%;mz6djdn}FPu30BWK_Z*DVZ2$~#I>)`0M?D3AKLU{LmYO_nI{+>QAloe!_#JS@ z8A2Mz9q*eH3oL${Cx4hTT1D!4OdNA}n(~Ynff&966H8ua_PZ;N`zd&Ns|PoIaFztZ z1VTL}HUt==L;Q+p^+Gz^QnOlV`xLMQ-vOBeoPctX0z3f5XK)6Y?Zth<3cT2DepW9U zC;bAG;^f^= z0UR$4WhK@61k-eApKOv|m>B1Z_AxDt3V#0e7nw%U1?4}g0B zkj<8Q{`7gE?yUf1v!w!01>g_jnA6TiB<^z!g0?7i9O$X16zs&CGDNW= zJlQiqfu{gI!5bouJ#284c8cQh zXfpebAD+n6NqP}@V2AR!kqAm zUlnX#v38qM$>Shmw}av3C9goX;muVlS`8HqmEQDXLIc_|`K=&nPh~QAP+Ou-tTG4WC-m?x+ z7SNiK1ltvRD$QLEeEB{A**jAAOLG8t7y#KjQh`sx=z16w80w`f~O z3z1h<*`h#809p!tElEY@$44o^VgN4i+H}(#6edqlpw|NPyeKnK+Bt+x5em)@gtR!P zaUiozY5oal{`Skj3DI|!WgF>fs zfW%*mC5-uEwVI>!Em*#@MMH$cr3qeVp!1lcl?I1{{a7Wwp6q%g=uHMDx5)&hhOc2* zPEQX@@IeLh6%5Onf{7(6v;e4Lz|4ohaVO%ETtYek>N;~;!lqX6ibmp)a(2MJ_agGF zI1H&zOoj=Gh*QR4UW(B+cVB=px=qH28N$`#+bh(%0JQjfu&ou8ZLRwi@I=tMUUIEO zz}=75riyO@!LI~L1vsysM&gTrQlAJH9qB`!2G0%)5ZWif0tq3!rLl_NYxTdJSvE zTm`refH~kw!YqSVz8w3k^`IFf!;AB!$fQ`JRa-z_46vDA$LVo7by`g6_zytrQ$a^^ zK=SnpZYAKxi_4oaNUj>#U#X-7Mrr4)?Lph!9@Lg5iUD7iHA&}G%5E3_rF7v5;L_X0 zx1og%f3+4cyAPly;@VS;>}Qd-J@GG)=l_ZVW4`qA-b`0|dl?M#`(l|Q)#YU!3g~D6 z{hm3*YIeL;FvMfBs7vW|E87k*Gc3(*z8D7RT~Q&<5{T_)Mf^?a`AmQ(#Mdzs4IdxC z*hPVE4hFGZC>5(slxkZ}9U#S6+L%8ByrLCjDU-%1oD5mMhI^dx#MPzwXnph}U zsx)^zu+Y!KLSzFeH=mod=@JD!7tr&78*GXix=z9E0NhXuI6vjMxKP1;48*y_8wgs# zI#dCT1W>y)mPm$+=dW4g>l4>6BaiF8u-IdQSTc6;w(hf*JgXAe&L^fG-7ziT=VM^J z^Q8-hXZ=~({JWJdYz4KXglb`5v|RJ=4+la28%)0AoCRF#qeTanLk&9%Pm*>DamG5$ z{{05ral8x|+fCX`zgBrpAK>ERgVL)6BZSFZbGj{u54`ii`OGz^+>FEbd>;?Sb9qbf z`nWtXqug`N>HxaW{Ksonyry*!e4p2_j>x)ybk_Zo;68u<-db%I83t+dq%W z{E;=ZOX+v%AJ>0bR{6@T@>N;o>!8f_-#}&lNd33b?^yrsS>?O4%J*cIc?VwbpMn48 zu6KA#bDCK$hN)^;G{12#IIg@z+qK;v^lE`Xqa`sn1@>hMH(mu&_qs@3Y_U&G@U{ym z)Ue0;%=_hK$0&_;g0b05`e`1Kj&=kp&R3u@CNF(>!~$Y)Vj)@^*3{Y`4#=R66}848 zm6Ci$^INK5`m=-dmUW_Y#Oe>Fw{HSfuMlU62PCm5o=9G;AU6W?EpZ>{NEU1&YfI>F z!^muuhMl*d(GK_*O2ZEW@;+}&X>*T4d^C0T3k=Ljfb&rjlM9sgt^?c~8IDKgn+oh- z0Q(=PYm&71f{_aF5CHbia=Zghb}!$z3Vt<+=jIv9kmg;o&NN3Oa0yf}Mpn&gzA;tH6(~zoJ>;40zIv!|D35~Ia2XE+cSn}b}!otk=f}E;! zW;dv2HyCmIKn3&#jQE)#Pa#^E)wYMoZkrD)$io2_q?GZRV!Z=!&){GuX<=)=($QmJ zu>TO& zo~?9s4}jXDsOd;#B2xLB0(%Ec@6}?+VgWqO@Sy_V9T>!$kWhz1?p9gR&kDEChzy^gNrlqtN)3Br`4P@DhMg6BI^=1{%VbE(po1k{mn?v&G6)hWRL z0^yGZ!gEmZRSND|z}@c2psy^hP1g!ww7er8q+r;+2*GOqM@qwkV8}W|th@!AuDXsc zE%4hy3N`ojFBq4@L|MtG#>;E{!#lEUiqqRvHYw=yV6O71p!w*7x5BGUCeMV0g|C5s(tA-s*%>)b z>BIrxT@3;)z$XMWEpReufu8_pQ;v*tmG;7bn=2z`IE_7q$}<#bC+Lu2&?IU6gch5) z6X23!DVW2Y2&7=lAG%U$_H_{Y8@yR?xWuLxkkQ+gQik1zC>4AUB6_^{$Zjl$ojgT> zUIEb8GWOpnM-v9XY0lkCAl%mqr@Okh5OlBRo0dWyb9#|ddzkVRUxJvN>49l!h%<_n zmqaW7qkyjf@SDP^X<@RhVDta2*8>RcpIOzrvFqBTg$v=qFn0_HWYG_8$P`12R2zHmZVt zbp-^}*iYhK^Co<#;%Vh6p9lSQi?qim&XL7N*(IU*iJsfRD$&X(jN_5=R5CulW`k0}X&_Ty%UU`G0NB-<&$u_Bwi2G9UfUFEsF{pf z;I$n9=cgnm+MIY0;MNGQQG0$)eA%cx-h05LSD=Y;4sRc#Ku-Zb^ea(S)Mjgnv%sb* zeRCA>0vH#ca4La${!ckPBzT}ksp37bEEj=^a~2*si=i9ev7b^&7%G`9MuPfb60Shf z{8yAZMnfITVI9`*_zAWzW~+KI0L-$x%!|UIX!+4fqlbd~)eks@ILy`}^cDlBY$rJ0 zGo!buJjHf;vD zZ1J9gz64Cu`$8pRix6$pXzPEYU{qQ_4k=tpPd3y7!-5A$IP5}AHnbxElh7i28kP0R zBc2SB|FcLwO(OWUWb`T%C$~Bh}18pDHch2`uEz_CR6S#R|9zSZGI> zu5##xKO=Nwx>C!IAga~Eh+&qsu!8y+cvA;q)A2$a;5s*74XeekRx}C+Q2b8AQfLS?p?1BQAGfB{azwvW={ zVF1hlAbUh=_N(`S6*mHqJd?P8meS%90B$Ej>beqfyW#=`S_RNTXp<*xH5waj2f!t= zHc3LjK4$NNlbup>gpsu&I7v8)z?sv7&-(2~0?E?@S=f~6fh=sw^q|%?4MV77?EdpY zCx7^jpj=+$6fJ&(CzltyWx2m3>;6)=oJ(qqCoA=CncL$xl1iChvBmdgIwJR_JdfCz z@5^*V?n_zj%XCEUOIhyAbVTk;S?;gT>YtSP&)oiotou@y`y4#RAE{r;{5QrQ#lO%; z?n{~f#`jO)U+5$ErOZKUe4m5O_#^kFEcZ`!ZhQBoEcegIx-Vt9e^%CgDa-wHvhGV+ z?q8gBU&>4e?*C<3_oXcNH)h?JvfRHa>%Nrb{xwF~-zY!zO>s^sVvWAm_YcWcc zT-SVf3+5168KB^?(s(je+u7uJSK9u=yI>hF6En=76@?dUR33U8u!Tzj7o@j{oTcDC zAQi_S?(k(`B-k+7+bh7OU?gVBlTt^`Tw4-EY16lNV3;luSIdOy``jpft@+7-UMBtK z_`Z0gq|8?OeGa&;pGm*7Mkw&LQo%bgLYI3EPr|Oyjzjz_FHL4V4nf1JWmNxIbJlf{a zGN@*9MptN26!vvKSGqC)>gdX-gH(5-w!M+|FvDFPE!sZj1)zdI6bphoG|t3ggwl;& zK}VEi1XTDkHhK8a%)gX+MnFBdaKjn@)ii;VL3-2?Y=sK^K$xTF2yeMYFA}%KJ2_aX;uT==t7VREs^FKQmQ`=5VAla_|1BhA zzsh0h9~J1`z>1H;0EalSXsrV553G0)04d?Kt-hb`QXut505q>)-Ark5H2_CvkFNcN zf~*8&k!PAiW$`Wr#FI+?um^O2r-*q&oezzqV%;sBO%8qEQfm1DIODip8OtA1;0FQR zlGXljxGLVt>Ag}_lnu@QzJmV?IAgu{5VTbjO1b-4auVxLrIr;i*5hHw*xOL^GY$b@ zHvrk&P=T+2`oQ<}8c7alrlJOhEhw@;FBxYAoeCyTQXcafAofeW6Wi9-@&5*5uglN^ z87XU@Qo1k;s@Ox478)Z(hfFz+gWuE^uS`|9(NULG+FoRT5bQO=c$` zj_Gfpj_6!xB1M6nFDlrxVbs5ZQKy{HdV0(sVC+r2pqZ zpL5zdK*m}CWXxzjSxigyo-KP9=!*#cfF~qeDe-f2gVjXIg{JaFg>v2zHz_B<#=ZjV z)F1(%x5Nu=t*veCnZgJ%fRBM=uCoES>T+r>lQPZ2;uH2j3p>rkm3KY#4F`6;F%CGa z&2Z_~Lb;HOEhQtq8#YS#vZ-1>G%Mz4;Hw$P9;&M@COxhPBEM;@@&0{n4;eHaM5 z7bK{=pAGDB^<1nYt-Jx+eSOWQHtu-o_r6ZhV*owf_NJ~>h*k66F=y>FfKl5VYweGts;Hi3v&NO z*j*@zB{V6B5$#9X*a0N^Lk*i)VA9Nr$85t%E8m1xg15^=kTjLb#dNAQBRYUt`PTrM z51GstN6p|hmU!t`r1!Z1A6C1d6H5s0kH97O0?lHYReKr%{sU;X+QhbhIgl+Mc_*e$ z&)%OJXDf_k!IPG*l9c`F%*ys7_I^xoyP$1!*lgvK7ze|&{dADqqan+RX3A|0C+z$5 zh~ub>+yq2_ANJYqy9Bi{ZS0b<4w~sTP39_sv}C;Zc&~#DVYo37GI}CMk>l4}leLtYu+mG3oVPz^$^w zU42E#vRJ%Iz?TC!NS+}xuYQ{}>EW#)?C@0wb=;!Bb^xA>D^4@5UrL7hFIaJ_0H_ug z1?~jkGd0}RmUjH?IP7M30dVI)GgCY(#|!;xPqpTnTFB5p0{*(*yeY&tE-~d4g1Q7y zqeEO7q=)o4^LM0~cHqjfH5xct)xbs4zz}Gl+k}mT3q$nybOPT4EcS?fyk?Ne4k4)T zgAtD}RL3>nYdZl>0RC#WMd&?v)P04-hs~M8wjNVJGM)>(BKkCtL|2gBuLGKW40zwg zEg8)xV-pD80elXaT+*)dWRC~nv)2Pq%^jMvaUuXO0HB&X6gU8YSDWXHTq>2OH8I_D zDy+tev4gIK{7Gb9E`@nH&F0nLT$-F?$Ci_T2_5*#geEL4k&b^1Um19Rxi@cxj3hs3 zW>6UOdnTAgwl@0ij)@NlxB%dDYF2Hcx@svW!>Wx22S=r7wwv@i9;T_uK$+&I+(H8S zA?$7b3v(+uo#R<184>`T0zg$hG<)G~KoopJQk4${UIf5%%xZHD4Y7I(yU0gQ1h!2X zJp}1q$=KZ>TiKgIi@eyE8yXte1>IEOhOxFoaM|C{1YV6~;In}bM%pL4PzkRoF}*h) zkZJQ9R_FTpv*z{8>b!iBcCC3%?<3uhf<`K~fAtq`aY5JINd!9(u+o z2_s!sJ5rjHbsu!N)mC_^Fg3$G$Tx#leBMC$Vj??_5aAUd!WQ_ndd;}WB-eQ$7K#9r z^uzpu_-XjIU7(TD%`Kmifu0DkD+Ap!IhL%CmUFqZq@L)S`;g#0S1)x>iA3gAdR)H< zjr}RwBB5~%=N^|8riYgBu8oL#7w!Q zp2TI>y}M4lyoR~(NTj#2$9*GN2j>e8_mEE;S3fQN0Npuic}1ukPO_zbOZa>BL&EaL zPDBvYY|9yVye8YrSVGSC;7H_0&_c|;c9<`xU1bUIVaJ-U zLksIoWXc$#<<73oS@TKXF933L=$17w*?oT>cDgVEB;S<*$>p)(`TkjYjtrs>z>5P5 zShMq*rNs8)n_$_#3a3HUYZrT&g{`SeU=5!MYglc9R(3b%0B|zMHGPbA8~Nxvl!@d| z`T9UGW7S0x`$)jGi^QVP`^n1o{%ldGGbA#lIxkwe8|Fl>bmTcsaBN`i$g9Bu_`AuO zniH~k<5}brmjhitHMaDUAB!c*E|&IzS+@z!d#W^b-;?t8k}UtqWk8)VwbY3-D_{dq z=Wl@mi53f2lJET-sIoEu#qv|xQP8^py4`eu+@Ce&+MgqR{RLq67;Rkhu6iK%A;EtF zw7u4BCBeHKf?>q$5OWGjs-^;y7JGoNcAH)7l1&^g8nU;O zK6?Q=#P*^2gyjBXYw#oBlbb@*EE&u#9FOfNp9V^852i{&UCSkjw#=0ZafaRmM0&;K zoP4poKk2;+{22M>69HVYt_3VIOu-V}#+2I$fc~CMw(TV1B^Jdv0oVgyX;71nUZy_- zRN4ugA-992!XWag?Enk{M1>(W_Jai{>;+bQAYhAvWOy1%dV2|!=6$wwbYlH0=e-2G z7G!F$bPSu;5K(qcwg%7#VS-|su)IjR9S$3aE{llhi6tKv%mu>bIuAOB7gp@?@w&(% zFmE)-0W-p?sX11DuYaaT*Lp>_++mw$Kd3liLB-7P`8Hs=gEq)~E~DnSPhj_7j9y;` z6g&hvDj@+aTM2G1ObEU?8kbymcM#kdz?F^mazkro5?hcvV1k~vqt$#2{X~b6u2Zlt zJ0I*4_fR6ROZ0;G7}Cl%5J=D2g_JO$st$464DJvIkTy0z8?V()I?Y?$4U>1A$rR~Z zzo5|2dJE}t5v=gR26gA%jmsQOpijZH|JtCQCDz=UYUw4=UXWx1OaZt;Fy{GDdPdZ6 z(!^M3qTPt@ABm*8-Tz)SC|wkVbXEE2#(u%)w1 zq3;FS?66t#SgLKZ`gVA;bR(Ii=V0mI4;Gn!r0%Rg-j@m|;j|*`kHEn5zbT|@#!G2xkxTP)KPr%;-DL%nIG2hV{ zZ6u&^0GbpGRnJL;Va_AKgP_B233P@YZiIb9*#iGFw6eiun7hE`PStZd9#00*1@NIY z+a-lVN{R)fk)@z>4jDt`<>otk96=>vapp{2+xx`1me>P*uy)edKk_Be8+v#)BUH8^ zO0$2Kh3YNH(CY6D)mspp*1rv$5Nqf&D2wlwr^|s8E<7wLV$3w33#174L2|5-Yi2jv ze}ZNCOPhOL%=xd9p?(KYr<=Tyo8-nX2*}>X1nN|{`q%A$^ zDS|u*Ot{VlI<2iJ1{k{#djnv1^<78t`}=fxTSQq+9iWZ}tgfS;P;8FX%1&eC=JXmLOW_QJ4o#l)&zCkgj&&O8R=X5Y7&NTM3*EyYJ-f4K1 zpnng{yE7Q7_}H+W`uPBAw$+)JyZI~=B-euZfm&1Fi@cW%QSK4kKb_4L)rl!N`P>v{ zz@H7cOZsw9qVI8Um4i+QQP{%Ibqsc`p+B**gKv|IUUQC;w-$WU8dqK`06Hnm7n-yb63uwb7efCJw;0s9%3zu@TVBtXx! z4WC9Cd9Q9fOTKzHEZ@hCyQO0ZAfefsj{&{07;uif^R$-q_ZXOxzqO%Cf4UnlI9UcQ z!h(vLP1rPR&dfzlPxsZ*r+0&?*MgBqSEZ-_+466{$biUjpWF2xT|L8~tT&Wa*0>_A zH#6jUrF!uy*jGe+{T+Gd1v@-TUqbs^v}vG zy<$*a6DsS4wEo%eEwO`^tI4)IIvs~B(geujmcz>87&9dnfh_L--P2@-Bau*%rFL;}b z{ZY^mPk^M?5W`IbHyAX;Lcr-W+sxj2QrSiRlw%(?>!I8|d%gyX)h07KQ_5;`9~~L( zLOhU`Plxik)`%QB)F;S@9bo(Bz=lBQjM?i;& z3qZ;I)CvLp8~Axu0P5&W#tEn%_&HGDGjP3fcT^MEEpO?F5d{(IJ9n0Ap7oC4^w z`S=SOv&Q*X_snH(5r~q3KpzcOW+LbXFg70qTtd=!{)`NJCE(D(GOlU68JSK2V8sp_ zMC_#I%we9O4M3U&AdUe1HcJ|}eEpTP6}9`Y4s znDvuw2GqXuvobRUwhy%4J+>y)!YdYYEs~O;bJnq>=beCl(#(DI+)KnSBk*Ma|2$a4 zx#C>}vm6%wXTf2Kd47!KlRs)m2 z1Gu>4ZCgWdlK|IX+Ynb9>r))T!n}qwu@_h*@WXKpq-I@YJiH yz_@P!pra|NXOJF$13)}lk_o1%$=3qzE$C3SFHPBcDgZC98yXql-FvBsy!!voc4N-~ literal 0 HcmV?d00001 diff --git a/STARTUP.A51 b/STARTUP.A51 new file mode 100644 index 0000000..ec99b9e --- /dev/null +++ b/STARTUP.A51 @@ -0,0 +1,198 @@ +$NOMOD51 +;------------------------------------------------------------------------------ +; This file is part of the C51 Compiler package +; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. +; Version 8.01 +; +; *** <<< Use Configuration Wizard in Context Menu >>> *** +;------------------------------------------------------------------------------ +; STARTUP.A51: This code is executed after processor reset. +; +; To translate this file use A51 with the following invocation: +; +; A51 STARTUP.A51 +; +; To link the modified STARTUP.OBJ file to your application use the following +; Lx51 invocation: +; +; Lx51 your object file list, STARTUP.OBJ controls +; +;------------------------------------------------------------------------------ +; +; User-defined Power-On Initialization of Memory +; +; With the following EQU statements the initialization of memory +; at processor reset can be defined: +; +; IDATALEN: IDATA memory size <0x0-0x100> +; Note: The absolute start-address of IDATA memory is always 0 +; The IDATA space overlaps physically the DATA and BIT areas. +IDATALEN EQU 80H +; +; XDATASTART: XDATA memory start address <0x0-0xFFFF> +; The absolute start address of XDATA memory +XDATASTART EQU 0 +; +; XDATALEN: XDATA memory size <0x0-0xFFFF> +; The length of XDATA memory in bytes. +XDATALEN EQU 0 +; +; PDATASTART: PDATA memory start address <0x0-0xFFFF> +; The absolute start address of PDATA memory +PDATASTART EQU 0H +; +; PDATALEN: PDATA memory size <0x0-0xFF> +; The length of PDATA memory in bytes. +PDATALEN EQU 0H +; +; +;------------------------------------------------------------------------------ +; +; Reentrant Stack Initialization +; +; The following EQU statements define the stack pointer for reentrant +; functions and initialized it: +; +; Stack Space for reentrant functions in the SMALL model. +; IBPSTACK: Enable SMALL model reentrant stack +; Stack space for reentrant functions in the SMALL model. +IBPSTACK EQU 0 ; set to 1 if small reentrant is used. +; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> +; Set the top of the stack to the highest location. +IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +; Stack Space for reentrant functions in the LARGE model. +; XBPSTACK: Enable LARGE model reentrant stack +; Stack space for reentrant functions in the LARGE model. +XBPSTACK EQU 0 ; set to 1 if large reentrant is used. +; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 +; +; +; Stack Space for reentrant functions in the COMPACT model. +; PBPSTACK: Enable COMPACT model reentrant stack +; Stack space for reentrant functions in the COMPACT model. +PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. +; +; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +;------------------------------------------------------------------------------ +; +; Memory Page for Using the Compact Model with 64 KByte xdata RAM +; Compact Model Page Definition +; +; Define the XDATA page used for PDATA variables. +; PPAGE must conform with the PPAGE set in the linker invocation. +; +; Enable pdata memory page initalization +PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. +; +; PPAGE number <0x0-0xFF> +; uppermost 256-byte address of the page used for PDATA variables. +PPAGE EQU 0 +; +; SFR address which supplies uppermost address byte <0x0-0xFF> +; most 8051 variants use P2 as uppermost address byte +PPAGE_SFR DATA 0A0H +; +; +;------------------------------------------------------------------------------ + +; Standard SFR Symbols +ACC DATA 0E0H +B DATA 0F0H +SP DATA 81H +DPL DATA 82H +DPH DATA 83H + + NAME ?C_STARTUP + + +?C_C51STARTUP SEGMENT CODE +?STACK SEGMENT IDATA + + RSEG ?STACK + DS 1 + + EXTRN CODE (?C_START) + PUBLIC ?C_STARTUP + + CSEG AT 0 +?C_STARTUP: LJMP STARTUP1 + + RSEG ?C_C51STARTUP + +STARTUP1: + +IF IDATALEN <> 0 + MOV R0,#IDATALEN - 1 + CLR A +IDATALOOP: MOV @R0,A + DJNZ R0,IDATALOOP +ENDIF + +IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A +XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP +ENDIF + +IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE +ENDIF + +IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A +PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP +ENDIF + +IF IBPSTACK <> 0 +EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP +ENDIF + +IF XBPSTACK <> 0 +EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP +ENDIF + +IF PBPSTACK <> 0 +EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP +ENDIF + + MOV SP,#?STACK-1 + +; This code is required if you use L51_BANK.A51 with Banking Mode 4 +; Code Banking +; Select Bank 0 for L51_BANK.A51 Mode 4 +#if 0 +; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4. +EXTRN CODE (?B_SWITCH0) + CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 +#endif +; + LJMP ?C_START + + END diff --git a/mycode/EEPROM.c b/mycode/EEPROM.c new file mode 100644 index 0000000..0b8c773 --- /dev/null +++ b/mycode/EEPROM.c @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------*/ +/* --- 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系列的内置EEPROM读写程序,用户几乎可以不修改这个程序. + +******************************************/ + +#include "config.h" +#include "eeprom.h" + +//======================================================================== +// 函数: void ISP_Disable(void) +// 描述: 禁止访问ISP/IAP. +// 参数: non. +// 返回: non. +// 版本: V1.0, 2012-10-22 +//======================================================================== +void DisableEEPROM(void) +{ + IAP_CONTR = 0; //禁止IAP操作 + IAP_CMD = 0; //去除IAP命令 + IAP_TRIG = 0; //防止IAP命令误触发 + IAP_ADDRH = 0xff; //清0地址高字节 + IAP_ADDRL = 0xff; //清0地址低字节,指向非EEPROM区,防止误操作 +} + +//======================================================================== +// 函数: void EEPROM_Trig(void) +// 描述: 触发EEPROM操作. +// 参数: none. +// 返回: none. +// 版本: V1.0, 2014-6-30 +//======================================================================== +void EEPROM_Trig(void) +{ + F0 = EA; //保存全局中断 + EA = 0; //禁止中断, 避免触发命令无效 + IAP_TRIG = 0x5A; + IAP_TRIG = 0xA5; //先送5AH,再送A5H到IAP触发寄存器,每次都需要如此 + //送完A5H后,IAP命令立即被触发启动 + //CPU等待IAP完成后,才会继续执行程序。 + _nop_(); + _nop_(); + EA = F0; //恢复全局中断 +} + +//======================================================================== +// 函数: void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number) +// 描述: 从指定EEPROM首地址读出n个字节放指定的缓冲. +// 参数: EE_address: 读出EEPROM的首地址. +// DataAddress: 读出数据放缓冲的首地址. +// number: 读出的字节长度. +// 返回: non. +// 版本: V1.0, 2012-10-22 +//======================================================================== +void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number) +{ + IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够 + IAP_READ(); //送字节读命令,命令不需改变时,不需重新送命令 + do + { + IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址) + IAP_ADDRL = EE_address % 256; //送地址低字节 + EEPROM_Trig(); //触发EEPROM操作 + *DataAddress = IAP_DATA; //读出的数据送往 + EE_address++; + DataAddress++; + }while(--number); + + DisableEEPROM(); +} + +//======================================================================== +// 函数: void EEPROM_SectorErase(u16 EE_address) +// 描述: 把指定地址的EEPROM扇区擦除. +// 参数: EE_address: 要擦除的扇区EEPROM的地址. +// 返回: non. +// 版本: V1.0, 2013-5-10 +//======================================================================== +void EEPROM_SectorErase(u16 EE_address) +{ + IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够 + IAP_ERASE(); //宏调用, 送扇区擦除命令,命令不需改变时,不需重新送命令 + //只有扇区擦除,没有字节擦除,512字节/扇区。 + //扇区中任意一个字节地址都是扇区地址。 + IAP_ADDRH = EE_address / 256; //送扇区地址高字节(地址需要改变时才需重新送地址) + IAP_ADDRL = EE_address % 256; //送扇区地址低字节 + EEPROM_Trig(); //触发EEPROM操作 + DisableEEPROM(); //禁止EEPROM操作 +} + +//======================================================================== +// 函数: void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number) +// 描述: 把缓冲的n个字节写入指定首地址的EEPROM. +// 参数: EE_address: 写入EEPROM的首地址. +// DataAddress: 写入源数据的缓冲的首地址. +// number: 写入的字节长度. +// 返回: non. +// 版本: V1.0, 2012-10-22 +//======================================================================== +void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number) +{ + IAP_ENABLE(); //设置等待时间,允许IAP操作,送一次就够 + IAP_WRITE(); //宏调用, 送字节写命令 + do + { + IAP_ADDRH = EE_address / 256; //送地址高字节(地址需要改变时才需重新送地址) + IAP_ADDRL = EE_address % 256; //送地址低字节 + IAP_DATA = *DataAddress; //送数据到IAP_DATA,只有数据改变时才需重新送 + EEPROM_Trig(); //触发EEPROM操作 + EE_address++; //下一个地址 + DataAddress++; //下一个数据 + }while(--number); //直到结束 + DisableEEPROM(); +} + diff --git a/mycode/GPIO.c b/mycode/GPIO.c new file mode 100644 index 0000000..1f15eff --- /dev/null +++ b/mycode/GPIO.c @@ -0,0 +1,145 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ +/*---------------------------------------------------------------------*/ + +/*************** 功能说明 **************** + +本文件为STC8系列的端口初始化程序,用户几乎可以不修改这个程序. + +******************************************/ + +#include "GPIO.h" +//======================================================================== +// 函数: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) +// 描述: 初始化IO口. +// 参数: GPIOx: 结构参数,请参考timer.h里的定义. +// 返回: 成功返回0, 空操作返回1,错误返回2. +// 版本: V1.0, 2012-10-22 +//======================================================================== +u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx) +{ + if (GPIO > GPIO_P7) + return 1; // 空操作 + if (GPIOx->Mode > GPIO_OUT_PP) + return 2; // 错误 + if (GPIO == GPIO_P0) + { + if (GPIOx->Mode == GPIO_PullUp) + P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // 上拉准双向口 + if (GPIOx->Mode == GPIO_HighZ) + P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; // 浮空输入 + if (GPIOx->Mode == GPIO_OUT_OD) + P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; // 开漏输出 + if (GPIOx->Mode == GPIO_OUT_PP) + P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; // 推挽输出 + } + if (GPIO == GPIO_P1) + { + if (GPIOx->Mode == GPIO_PullUp) + P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // 上拉准双向口 + if (GPIOx->Mode == GPIO_HighZ) + P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; // 浮空输入 + if (GPIOx->Mode == GPIO_OUT_OD) + P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; // 开漏输出 + if (GPIOx->Mode == GPIO_OUT_PP) + P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; // 推挽输出 + } + if (GPIO == GPIO_P2) + { + if (GPIOx->Mode == GPIO_PullUp) + P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // 上拉准双向口 + if (GPIOx->Mode == GPIO_HighZ) + P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; // 浮空输入 + if (GPIOx->Mode == GPIO_OUT_OD) + P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; // 开漏输出 + if (GPIOx->Mode == GPIO_OUT_PP) + P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; // 推挽输出 + } + if (GPIO == GPIO_P3) + { + if (GPIOx->Mode == GPIO_PullUp) + P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // 上拉准双向口 + if (GPIOx->Mode == GPIO_HighZ) + P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; // 浮空输入 + if (GPIOx->Mode == GPIO_OUT_OD) + P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; // 开漏输出 + if (GPIOx->Mode == GPIO_OUT_PP) + P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; // 推挽输出 + } + if (GPIO == GPIO_P4) + { + if (GPIOx->Mode == GPIO_PullUp) + P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // 上拉准双向口 + if (GPIOx->Mode == GPIO_HighZ) + P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; // 浮空输入 + if (GPIOx->Mode == GPIO_OUT_OD) + P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; // 开漏输出 + if (GPIOx->Mode == GPIO_OUT_PP) + P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; // 推挽输出 + } + if (GPIO == GPIO_P5) + { + if (GPIOx->Mode == GPIO_PullUp) + P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // 上拉准双向口 + if (GPIOx->Mode == GPIO_HighZ) + P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; // 浮空输入 + if (GPIOx->Mode == GPIO_OUT_OD) + P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; // 开漏输出 + if (GPIOx->Mode == GPIO_OUT_PP) + P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; // 推挽输出 + } + if (GPIO == GPIO_P6) + { + if (GPIOx->Mode == GPIO_PullUp) + P6M1 &= ~GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // 上拉准双向口 + if (GPIOx->Mode == GPIO_HighZ) + P6M1 |= GPIOx->Pin, P6M0 &= ~GPIOx->Pin; // 浮空输入 + if (GPIOx->Mode == GPIO_OUT_OD) + P6M1 |= GPIOx->Pin, P6M0 |= GPIOx->Pin; // 开漏输出 + if (GPIOx->Mode == GPIO_OUT_PP) + P6M1 &= ~GPIOx->Pin, P6M0 |= GPIOx->Pin; // 推挽输出 + } + if (GPIO == GPIO_P7) + { + if (GPIOx->Mode == GPIO_PullUp) + P7M1 &= ~GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // 上拉准双向口 + if (GPIOx->Mode == GPIO_HighZ) + P7M1 |= GPIOx->Pin, P7M0 &= ~GPIOx->Pin; // 浮空输入 + if (GPIOx->Mode == GPIO_OUT_OD) + P7M1 |= GPIOx->Pin, P7M0 |= GPIOx->Pin; // 开漏输出 + if (GPIOx->Mode == GPIO_OUT_PP) + P7M1 &= ~GPIOx->Pin, P7M0 |= GPIOx->Pin; // 推挽输出 + } + return 0; // 成功 +} +/******************** IO口配置 ********************/ +void GPIO_config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; // 结构定义 + + GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // 指定要初始化 或操作p32 + GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P3, &GPIO_InitStructure); // 初始化 + + GPIO_InitStructure.Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; // 指定要初始化 或操作输出使能 + GPIO_InitStructure.Mode = GPIO_OUT_PP; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // 初始化 + + GPIO_InitStructure.Pin = GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // 指定要初始化 或操作输出使能 + GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P1, &GPIO_InitStructure); // 初始化 + + GPIO_InitStructure.Pin = GPIO_Pin_4; // 指定要初始化 或操作输出使能 + GPIO_InitStructure.Mode = GPIO_PullUp; // 指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + GPIO_Inilize(GPIO_P5, &GPIO_InitStructure); // 初始化 + EN=1; +} + diff --git a/mycode/UART.C b/mycode/UART.C new file mode 100644 index 0000000..65cd0a9 --- /dev/null +++ b/mycode/UART.C @@ -0,0 +1,453 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 "STDIO.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 UART1_int (void) interrupt UART1_VECTOR +{ + if(RI) + { + RI = 0; + if(COM1.B_RX_OK == 0) + { + if(COM1.RX_Cnt >= COM_RX1_Lenth) COM1.RX_Cnt = 0; + 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 UART3_int (void) interrupt UART3_VECTOR +{ + if(RI3) + { + CLR_RI3(); + if(COM3.B_RX_OK == 0) + { + if(COM3.RX_Cnt >= 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 UART_config(void) +{ + COMx_InitDefine COMx_InitStructure; + COMx_InitStructure.UART_Mode = UART_8bit_BRTx; + COMx_InitStructure.UART_BRT_Use = BRT_Timer1; + COMx_InitStructure.UART_BaudRate = 115200ul; + COMx_InitStructure.UART_RxEnable = ENABLE; + COMx_InitStructure.BaudRateDouble = DISABLE; + COMx_InitStructure.UART_Interrupt = ENABLE; + COMx_InitStructure.UART_Priority = Priority_0; + COMx_InitStructure.UART_P_SW = UART1_SW_P30_P31; + UART_Configuration(UART1, &COMx_InitStructure); +} +char putchar(char c) +{ + TX1_write2buff(c); + return c; +} diff --git a/mycode/common.c b/mycode/common.c new file mode 100644 index 0000000..4c05f98 --- /dev/null +++ b/mycode/common.c @@ -0,0 +1,382 @@ +#include "common.h" +#include "GPIO.h" +#include "tm1650.h" +#include "STDIO.H" +#include "EEPROM.h" +#include "timer.h" +u8 keyflag = 0; +u8 sunmode = 1; +u8 pog = 4; +u16 keytime = 0; +u8 keyloog = 0; +u8 speedmode1 = speedstart, speedmode2 = speedstart, speedmode3 = speedstart, speedmode4 = speedstart, subdivision1 = substart, subdivision2 = substart, subdivision3 = substart, subdivision4 = substart; +u8 num[9] = 0; +static void key_add(u8 *speedmode, u8 *subdivision) +{ + u8 key__time = 0; + if (keyloog) + key__time = 100; + else + key__time = 500; + switch (pog) + { + case 1: + break; + case 2: + if (keyflag == 0) + { + *speedmode += 1; + if (*speedmode >= speedmax) + *speedmode = speedmax; + keyflag = 1; + } + if (keytime > key__time) + { + *speedmode += 1; + keytime = 0; + keyloog = 1; + if (*speedmode >= speedmax) + *speedmode = speedmax; + } + break; + case 3: + if (keyflag == 0) + { + *subdivision += 1; + if (*subdivision >= subdivisionmax) + *subdivision = subdivisionmax; + keyflag = 1; + } + if (keytime > key__time) + { + *subdivision += 1; + keytime = 0; + keyloog = 1; + if (*subdivision >= subdivisionmax) + *subdivision = subdivisionmax; + } + break; + } +} + +static void key_Redu(u8 *speedmode, u8 *subdivision) +{ + u8 key__time = 0; + if (keyloog) + key__time = 100; + else + key__time = 500; + switch (pog) + { + case 1: + break; + case 2: + if (keyflag == 0) + { + *speedmode -= 1; + if (*speedmode <= speedmin) + *speedmode = speedmin; + keyflag = 1; + } + if (keytime > key__time) + { + *speedmode -= 1; + keytime = 0; + keyloog = 1; + if (*speedmode <= speedmin) + *speedmode = speedmin; + } + break; + case 3: + if (keyflag == 0) + { + if (*subdivision <= subdivisionmin) + *subdivision = subdivisionmin; + else + *subdivision -= 1; + keyflag = 1; + } + if (keytime > key__time) + { + keytime = 0; + keyloog = 1; + if (*subdivision <= subdivisionmin) + *subdivision = subdivisionmin; + else + *subdivision -= 1; + } + break; + } +} +void keyscan() +{ + if (k1 == 0) + if (keyflag == 0) + { + timex = 400 * subdivision1; + DIR = 1; + sunmode = 1; + keyflag = 1; + setconfig(); + } + if (k2 == 0) + if (keyflag == 0) + { + timex = 400 * subdivision2; + DIR = 0; + sunmode = 2; + keyflag = 1; + setconfig(); + } + if (k3 == 0) + if (keyflag == 0) + { + timex = 800 <= 200) + { + if (DIR) + { + if (displaydata >= 7) + displaydata = 0; + else + displaydata++; + } + else + { + if (displaydata <= 0) + displaydata = 7; + else + displaydata--; + } + displaytime = 0; + } + if (keyflag) + keytime++; + else + keytime = 0; +} + +/********************* Timer3中断函数************************/ +void timer3_int(void) interrupt TIMER3_VECTOR +{ +} + +/********************* Timer4中断函数************************/ +void timer4_int(void) interrupt TIMER4_VECTOR +{ +} + +//======================================================================== +// 函数: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) +// 描述: 定时器初始化程序. +// 参数: TIMx: 结构参数,请参考timer.h里的定义. +// 返回: 成功返回0, 空操作返回1,错误返回2. +// 版本: V1.0, 2012-10-22 +//======================================================================== +u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx) +{ + if (TIM > Timer4) + return 1; // 空操作 + + if (TIM == Timer0) + { + Timer0_Stop(); // 停止计数 + if (TIMx->TIM_Interrupt == ENABLE) + Timer0_InterruptEnable(); // 允许中断 + else + Timer0_InterruptDisable(); // 禁止中断 + if (TIMx->TIM_Priority > Priority_3) + return 2; // 错误 + Timer0_Priority(TIMx->TIM_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3 + + if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) + return 2; // 错误 + TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; // 工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 不可屏蔽16位自动重装 + if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + Timer0_12T(); // 12T + if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + Timer0_1T(); // 1T + if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + Timer0_AsCounter(); // 对外计数或分频 + else + Timer0_AsTimer(); // 定时 + if (TIMx->TIM_ClkOut == ENABLE) + Timer0_CLKO_Enable(); // 输出时钟 + else + Timer0_CLKO_Disable(); // 不输出时钟 + + T0_Load(TIMx->TIM_Value); + if (TIMx->TIM_Run == ENABLE) + Timer0_Run(); // 开始运行 + return 0; // 成功 + } + + if (TIM == Timer1) + { + Timer1_Stop(); // 停止计数 + if (TIMx->TIM_Interrupt == ENABLE) + Timer1_InterruptEnable(); // 允许中断 + else + Timer1_InterruptDisable(); // 禁止中断 + if (TIMx->TIM_Priority > Priority_3) + return 2; // 错误 + Timer1_Priority(TIMx->TIM_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3 + if (TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) + return 2; // 错误 + TMOD = (TMOD & ~0x30) | (TIMx->TIM_Mode << 4); // 工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 停止工作 + if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + Timer1_12T(); // 12T + if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + Timer1_1T(); // 1T + if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + Timer1_AsCounter(); // 对外计数或分频 + else + Timer1_AsTimer(); // 定时 + if (TIMx->TIM_ClkOut == ENABLE) + Timer1_CLKO_Enable(); // 输出时钟 + else + Timer1_CLKO_Disable(); // 不输出时钟 + + T1_Load(TIMx->TIM_Value); + if (TIMx->TIM_Run == ENABLE) + Timer1_Run(); // 开始运行 + return 0; // 成功 + } + + if (TIM == Timer2) // Timer2,固定为16位自动重装, 中断无优先级 + { + Timer2_Stop(); // 停止计数 + if (TIMx->TIM_Interrupt == ENABLE) + Timer2_InterruptEnable(); // 允许中断 + else + Timer2_InterruptDisable(); // 禁止中断 + if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + return 2; + if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + Timer2_12T(); // 12T + if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + Timer2_1T(); // 1T + if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + Timer2_AsCounter(); // 对外计数或分频 + else + Timer2_AsTimer(); // 定时 + if (TIMx->TIM_ClkOut == ENABLE) + Timer2_CLKO_Enable(); // 输出时钟 + else + Timer2_CLKO_Disable(); // 不输出时钟 + + T2_Load(TIMx->TIM_Value); + if (TIMx->TIM_Run == ENABLE) + Timer2_Run(); // 开始运行 + return 0; // 成功 + } + + if (TIM == Timer3) // Timer3,固定为16位自动重装, 中断无优先级 + { + Timer3_Stop(); // 停止计数 + if (TIMx->TIM_Interrupt == ENABLE) + Timer3_InterruptEnable(); // 允许中断 + else + Timer3_InterruptDisable(); // 禁止中断 + if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + return 2; + if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + Timer3_12T(); // 12T + if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + Timer3_1T(); // 1T + if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + Timer3_AsCounter(); // 对外计数或分频 + else + Timer3_AsTimer(); // 定时 + if (TIMx->TIM_ClkOut == ENABLE) + Timer3_CLKO_Enable(); // 输出时钟 + else + Timer3_CLKO_Disable(); // 不输出时钟 + + T3_Load(TIMx->TIM_Value); + if (TIMx->TIM_Run == ENABLE) + Timer3_Run(); // 开始运行 + return 0; // 成功 + } + + if (TIM == Timer4) // Timer3,固定为16位自动重装, 中断无优先级 + { + Timer4_Stop(); // 停止计数 + if (TIMx->TIM_Interrupt == ENABLE) + Timer4_InterruptEnable(); // 允许中断 + else + Timer4_InterruptDisable(); // 禁止中断 + if (TIMx->TIM_ClkSource > TIM_CLOCK_Ext) + return 2; + if (TIMx->TIM_ClkSource == TIM_CLOCK_12T) + Timer4_12T(); // 12T + if (TIMx->TIM_ClkSource == TIM_CLOCK_1T) + Timer4_1T(); // 1T + if (TIMx->TIM_ClkSource == TIM_CLOCK_Ext) + Timer4_AsCounter(); // 对外计数或分频 + else + Timer4_AsTimer(); // 定时 + if (TIMx->TIM_ClkOut == ENABLE) + Timer4_CLKO_Enable(); // 输出时钟 + else + Timer4_CLKO_Disable(); // 不输出时钟 + + T4_Load(TIMx->TIM_Value); + if (TIMx->TIM_Run == ENABLE) + Timer4_Run(); // 开始运行 + return 0; // 成功 + } + return 2; // 错误 +} +/************************ ?¨?±?÷???? ****************************/ +void Timer_config(void) +{ + TIM_InitTypeDef TIM_InitStructure; //?á???¨?? + TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; //???¨?¤×÷????, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask + TIM_InitStructure.TIM_Priority = Priority_0; //???¨??????????(??????) Priority_0,Priority_1,Priority_2,Priority_3 + TIM_InitStructure.TIM_Interrupt = ENABLE; //??????·????í, ENABLE?òDISABLE + TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //???¨?±????, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext + TIM_InitStructure.TIM_ClkOut = DISABLE; //??·?????????????, ENABLE?òDISABLE + TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 100000UL); //????, + TIM_InitStructure.TIM_Run = ENABLE; //??·????????ó?????¨?±?÷, ENABLE?òDISABLE + Timer_Inilize(Timer0, &TIM_InitStructure); //??????Timer0 Timer0,Timer1,Timer2,Timer3,Timer4 + + TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T; //???¨?±????, TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext + TIM_InitStructure.TIM_ClkOut = DISABLE; //??·?????????????, ENABLE?òDISABLE + TIM_InitStructure.TIM_Value = 65536UL - (MAIN_Fosc / 1000UL); //????, + TIM_InitStructure.TIM_Run = ENABLE; //??·????????ó?????¨?±?÷, ENABLE?òDISABLE + Timer_Inilize(Timer2, &TIM_InitStructure); +} \ No newline at end of file diff --git a/mycode/tm1650.c b/mycode/tm1650.c new file mode 100644 index 0000000..969a8d8 --- /dev/null +++ b/mycode/tm1650.c @@ -0,0 +1,192 @@ +#include "tm1650.h" +#include "delay.h" +#include "timer.h" +// 寰涓涓寚瀹氱殑鏁扮爜绠′綅鍐欏叆鎸囧畾鐨勬樉绀烘暟鎹 +// 鍏遍槾鏁扮爜绠℃鐮佽〃锛 +// const unsigned char TUBE_TABLE_0[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //鍏遍槾锛0~9鐨勬暟瀛 +const unsigned char TUBE_TABLE_0[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; // 鍏遍槾锛0~9~A~F +const unsigned char TUBE_TABLE_1[16]={0x01,0x21,0x30,0x18,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x0c,0x06,0x03}; +// 浜х敓IIC鎬荤嚎璧峰淇″彿 +static void TM1650_IIC_start(void) +{ + scl = 1; // SCL=1 + sda = 1; // SDA=1 + Delay4us(); + sda = 0; // SDA=0 + Delay4us(); + scl = 0; // SCL=0 +} +// 浜х敓IIC鎬荤嚎缁撴潫淇″彿 +static void TM1650_IIC_stop(void) +{ + scl = 0; // SCL=0 + sda = 0; // SDA=0 + Delay4us(); + scl = 1; // SCL=1 + Delay4us(); + sda = 1; // SDA=1 +} +// 閫氳繃IIC鎬荤嚎鍙戦佷竴涓瓧鑺 +static void TM1650_IIC_write_byte(unsigned char dat) +{ + unsigned char i; + scl = 0; + for (i = 0; i < 8; i++) + { + do + { + if (dat & 0x80) + sda = 1; // SDA=1 + else + sda = 0; + } while (0); + dat <<= 1; + Delay2us(); + scl = 1; + Delay2us(); + scl = 0; + Delay2us(); + } +} +// 閫氳繃IIC鎬荤嚎鎺ユ敹浠庢満鍝嶅簲鐨凙CK淇″彿 +static unsigned char TM1650_IIC_wait_ack(void) +{ + unsigned char ack_signal = 0; + sda = 1; // SDA=1 + Delay2us(); + ack_signal = sda; + scl = 1; + Delay2us(); + // if(sda == 0) + // ack_signal = 1; //濡傛灉璇诲彇鍒扮殑鏄疦ACK淇″彿 + scl = 0; + Delay2us(); + return ack_signal; +} + +// 浣滅敤锛氳缃樉绀哄弬鏁 +// 澶囨敞锛氳繖涓搷浣滀笉褰卞搷鏄惧瓨涓殑鏁版嵁 +// 鐢ㄤ緥锛 +// 璁剧疆浜害骞舵墦寮鏄剧ず:TM1650_cfg_display(TM1650_BRIGHTx) +// 鍏抽棴鏄剧ず:TM1650_cfg_display(TM1650_DSP_OFF) +static void TM1650_cfg_display(unsigned char x) +{ + TM1650_IIC_start(); + TM1650_IIC_write_byte(0x48); + TM1650_IIC_wait_ack(); // 鍥哄畾鍛戒护 + TM1650_IIC_write_byte(x); + TM1650_IIC_wait_ack(); // 鍙傛暟鍊 + TM1650_IIC_stop(); +} +// 鍦―IG1浣嶄笂鏄剧ず鏁板瓧3: TM1650_print(TM1650_DIG1,TUBE_TABLE_0[3]); +void TM1650_print(unsigned char dig, unsigned char seg_data) +{ + + TM1650_IIC_start(); + TM1650_IIC_write_byte(dig * 2 + 0x68); + TM1650_IIC_wait_ack(); // 鏄惧瓨璧峰鍦板潃涓0x68 + TM1650_IIC_write_byte(seg_data); + TM1650_IIC_wait_ack(); // 鍙戦佹鐮 + TM1650_IIC_stop(); +} +// 灏嗘樉瀛樻暟鎹叏閮ㄥ埛涓0锛屾竻绌烘樉绀 +static void TM1650_clear(void) +{ + unsigned char a; + for (a = TM1650_DIG1; a <= TM1650_DIG4; a++) + { + TM1650_print(a, 0); // 灏嗘樉瀛樻暟鎹埛涓0 + } +} +// TM1650鍒濆鍖 +void TM1650_init(void) +{ + sda = 1; // 閲婃斁SDA绾 + scl = 1; // 閲婃斁SCL绾 + TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + TM1650_clear(); // 灏嗘樉瀛樺唴瀹规竻0 +} + +void TM1650_printpogrun(u8 set,u8 mode) // 鏄剧ずrun +{ + sda = 1; // 閲婃斁SDA绾 + scl = 1; // 閲婃斁SCL绾 + TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + TM1650_print(TM1650_DIG1, TUBE_TABLE_1[mode]); + Delay4us(); + TM1650_print(TM1650_DIG2, 0x73); + Delay4us(); + TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]); + Delay4us(); + TM1650_print(TM1650_DIG4, TUBE_TABLE_1[mode+8]); +} +void TM1650_printpogstop(u8 set) // 鏄剧ずrun +{ + sda = 1; // 閲婃斁SDA绾 + scl = 1; // 閲婃斁SCL绾 + TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + TM1650_print(TM1650_DIG1, 0x40); + Delay4us(); + TM1650_print(TM1650_DIG2, 0x73); + Delay4us(); + TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set]); + Delay4us(); + TM1650_print(TM1650_DIG4, 0x40); +} +void TM1650_print_SMG1(u8 set) // 鏄剧ず----椤甸潰0鏄剧ず +{ + sda = 1; // 閲婃斁SDA绾 + scl = 1; // 閲婃斁SCL绾 + TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + TM1650_print(TM1650_DIG1, 0x40); + Delay4us(); + if (set > 99) + TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]); + else + TM1650_print(TM1650_DIG2, 0x00); + Delay4us(); + if (set > 9) + TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]); + else + TM1650_print(TM1650_DIG3, 0x00); + Delay4us(); + TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]); +} +void TM1650_print_SMG2(u16 set) // 鏄剧ず----椤甸潰0鏄剧ず +{ + sda = 1; // 閲婃斁SDA绾 + scl = 1; // 閲婃斁SCL绾 + TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + TM1650_print(TM1650_DIG1, 0x48); + Delay4us(); + if (set > 99) + TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]); + else + TM1650_print(TM1650_DIG2, 0x00); + Delay4us(); + if (set > 9) + TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]); + else + TM1650_print(TM1650_DIG3, 0x00); + Delay4us(); + TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]); +} +void TM1650_print_SMG3(u8 set) // 鏄剧ず----椤甸潰0鏄剧ず +{ + sda = 1; // 閲婃斁SDA绾 + scl = 1; // 閲婃斁SCL绾 + TM1650_cfg_display(TM1650_BRIGHT5); // 鍒濆鍖栦负5绾т寒搴︼紝鎵撳紑鏄剧ず + TM1650_print(TM1650_DIG1, 0x49); + Delay4us(); + if (set > 99) + TM1650_print(TM1650_DIG2, TUBE_TABLE_0[set / 100 % 10]); + else + TM1650_print(TM1650_DIG2, 0x00); + Delay4us(); + if (set > 9) + TM1650_print(TM1650_DIG3, TUBE_TABLE_0[set / 10 % 10]); + else + TM1650_print(TM1650_DIG3, 0x00); + Delay4us(); + TM1650_print(TM1650_DIG4, TUBE_TABLE_0[set % 10]); +} \ No newline at end of file diff --git a/myinc/EEPROM.h b/myinc/EEPROM.h new file mode 100644 index 0000000..0c0869f --- /dev/null +++ b/myinc/EEPROM.h @@ -0,0 +1,55 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 __EEPROM_H +#define __EEPROM_H + +#include "config.h" + +#define STC8X1K08 8 +#define STC8X1K16 16 +#define STC8XxK32 32 +#define STC8XxK60 60 + +// 选择MCU型号 +#define MCU_Type STC8X1K08 //STC8X1K08, STC8X1K16, STC8XxK32, STC8XxK32, STC8XxK60 + +/************************** ISP/IAP ***************************** + + 型号 大小 扇区数 开始地址 结束地址 MOVC读偏移地址 +STC8X1K08 4K 8扇区 0x0000 ~ 0x0FFF 0x2000 +STC8X1K16 12K 24扇区 0x0000 ~ 0x2FFF 0x4000 +STC8XxK32 32K 64扇区 0x0000 ~ 0x7FFF 0x8000 +STC8XxK60 4K 8扇区 0x0000 ~ 0x0FFF 0xF000 + +*/ + +#if (MCU_Type == STC8X1K08) + #define MOVC_ShiftAddress 0x2000 +#elif (MCU_Type == STC8X1K16) + #define MOVC_ShiftAddress 0x4000 +#elif (MCU_Type == STC8XxK32) + #define MOVC_ShiftAddress 0x8000 +#elif (MCU_Type == STC8XxK60) + #define MOVC_ShiftAddress 0xF000 +#else + #define MOVC_ShiftAddress 0xC000 //用户自定义 +#endif + + +void DisableEEPROM(void); +void EEPROM_read_n(u16 EE_address,u8 *DataAddress,u16 number); +void EEPROM_write_n(u16 EE_address,u8 *DataAddress,u16 number); +void EEPROM_SectorErase(u16 EE_address); + + +#endif \ No newline at end of file diff --git a/myinc/GPIO.h b/myinc/GPIO.h new file mode 100644 index 0000000..99eea71 --- /dev/null +++ b/myinc/GPIO.h @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* 锟斤拷锟揭拷诔锟斤拷锟斤拷锟绞癸拷么舜锟斤拷锟,锟斤拷锟节筹拷锟斤拷锟斤拷注锟斤拷使锟斤拷锟斤拷STC锟斤拷锟斤拷锟较硷拷锟斤拷锟斤拷 */ +/*---------------------------------------------------------------------*/ + +#ifndef __GPIO_H +#define __GPIO_H + +#include "config.h" + +#define GPIO_PullUp 0 //锟斤拷锟斤拷准双锟斤拷锟 +#define GPIO_HighZ 1 //锟斤拷锟斤拷锟斤拷锟斤拷 +#define GPIO_OUT_OD 2 //锟斤拷漏锟斤拷锟 +#define GPIO_OUT_PP 3 //锟斤拷锟斤拷锟斤拷锟 + +#define GPIO_Pin_0 0x01 //IO锟斤拷锟斤拷 Px.0 +#define GPIO_Pin_1 0x02 //IO锟斤拷锟斤拷 Px.1 +#define GPIO_Pin_2 0x04 //IO锟斤拷锟斤拷 Px.2 +#define GPIO_Pin_3 0x08 //IO锟斤拷锟斤拷 Px.3 +#define GPIO_Pin_4 0x10 //IO锟斤拷锟斤拷 Px.4 +#define GPIO_Pin_5 0x20 //IO锟斤拷锟斤拷 Px.5 +#define GPIO_Pin_6 0x40 //IO锟斤拷锟斤拷 Px.6 +#define GPIO_Pin_7 0x80 //IO锟斤拷锟斤拷 Px.7 +#define GPIO_Pin_All 0xFF //IO锟斤拷锟斤拷锟斤拷锟斤拷 + +#define GPIO_P0 0 // +#define GPIO_P1 1 +#define GPIO_P2 2 +#define GPIO_P3 3 +#define GPIO_P4 4 +#define GPIO_P5 5 +#define GPIO_P6 6 +#define GPIO_P7 7 + +#define k5 P10 +#define k6 P37 +#define k7 P36 +#define k8 P35 +#define k1 P15 +#define k2 P16 +#define k3 P17 +#define k4 P54 +#define DIR P12 +#define PUL P13 +#define EN P14 + + +typedef struct +{ + u8 Mode; //IO模式, GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP + u8 Pin; //要锟斤拷锟矫的端匡拷 +} GPIO_InitTypeDef; + +u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx); +void GPIO_config(void); +#endif diff --git a/myinc/PWM.h b/myinc/PWM.h new file mode 100644 index 0000000..34c77d5 --- /dev/null +++ b/myinc/PWM.h @@ -0,0 +1,141 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ +/*---------------------------------------------------------------------*/ + +#ifndef __PWM_H +#define __PWM_H + +#include "config.h" + +#define ENO1P 0x01 +#define ENO1N 0x02 +#define ENO2P 0x04 +#define ENO2N 0x08 +#define ENO3P 0x10 +#define ENO3N 0x20 +#define ENO4P 0x40 +#define ENO4N 0x80 + +#define ENO5P 0x01 +#define ENO6P 0x04 +#define ENO7P 0x10 +#define ENO8P 0x40 + +#define PWMA 1 +#define PWMB 2 + +#define PWM1_SW_P10_P11 0 +#define PWM1_SW_P20_P21 1 +#define PWM1_SW_P60_P61 2 + +#define PWM2_SW_P12_P13 0 +#define PWM2_SW_P22_P23 (1<<2) +#define PWM2_SW_P62_P63 (2<<2) + +#define PWM3_SW_P14_P15 0 +#define PWM3_SW_P24_P25 (1<<4) +#define PWM3_SW_P64_P65 (2<<4) + +#define PWM4_SW_P16_P17 0 +#define PWM4_SW_P26_P27 (1<<6) +#define PWM4_SW_P66_P67 (2<<6) +#define PWM4_SW_P34_P33 (3<<6) + +#define PWM5_SW_P20 0 +#define PWM5_SW_P17 1 +#define PWM5_SW_P00 2 +#define PWM5_SW_P74 3 + +#define PWM6_SW_P21 0 +#define PWM6_SW_P54 (1<<2) +#define PWM6_SW_P01 (2<<2) +#define PWM6_SW_P75 (3<<2) + +#define PWM7_SW_P22 0 +#define PWM7_SW_P33 (1<<4) +#define PWM7_SW_P02 (2<<4) +#define PWM7_SW_P76 (3<<4) + +#define PWM8_SW_P23 0 +#define PWM8_SW_P34 (1<<6) +#define PWM8_SW_P03 (2<<6) +#define PWM8_SW_P77 (3<<6) + +typedef struct +{ + u8 PWM1_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM2_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM3_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM4_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM5_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM6_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM7_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + u8 PWM8_Mode; //模式, CCMRn_FREEZE,CCMRn_MATCH_VALID,CCMRn_MATCH_INVALID,CCMRn_ROLLOVER,CCMRn_FORCE_INVALID,CCMRn_FORCE_VALID,CCMRn_PWM_MODE1,CCMRn_PWM_MODE2 + + u16 PWM_Period; //周期时间, 0~65535 + u16 PWM1_Duty; //PWM1占空比时间, 0~Period + u16 PWM2_Duty; //PWM2占空比时间, 0~Period + u16 PWM3_Duty; //PWM3占空比时间, 0~Period + u16 PWM4_Duty; //PWM4占空比时间, 0~Period + u16 PWM5_Duty; //PWM5占空比时间, 0~Period + u16 PWM6_Duty; //PWM6占空比时间, 0~Period + u16 PWM7_Duty; //PWM7占空比时间, 0~Period + u16 PWM8_Duty; //PWM8占空比时间, 0~Period + u8 PWM_DeadTime; //死区发生器设置, 0~255 + + u8 PWM_CC1Enable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC1NEnable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC2Enable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC2NEnable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC3Enable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC3NEnable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC4Enable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC4NEnable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC5Enable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC6Enable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC7Enable; //开启输入捕获/比较输出, ENABLE,DISABLE + u8 PWM_CC8Enable; //开启输入捕获/比较输出, ENABLE,DISABLE + + u8 PWM_Reload; //输出比较的预装载使能, ENABLE,DISABLE + u8 PWM_Fast; //输出比较快速功能使能, ENABLE,DISABLE + + u8 PWM1_SetPriority; //设置PWM1优先级, Priority_0,Priority_1,Priority_2,Priority_3 + u8 PWM2_SetPriority; //设置PWM2优先级, Priority_0,Priority_1,Priority_2,Priority_3 + u8 PWM3_SetPriority; //设置PWM3优先级, Priority_0,Priority_1,Priority_2,Priority_3 + u8 PWM4_SetPriority; //设置PWM4优先级, Priority_0,Priority_1,Priority_2,Priority_3 + u8 PWM5_SetPriority; //设置PWM4优先级, Priority_0,Priority_1,Priority_2,Priority_3 + + u8 PWM_EnoSelect; //输出通道选择, ENO1P,ENO1N,ENO2P,ENO2N,ENO3P,ENO3N,ENO4P,ENO4N / ENO5P,ENO6P,ENO7P,ENO8P + u8 PWM_PreLoad; //预装载, ENABLE,DISABLE + u8 PWM_PS_SW; //切换端口, PWM1_SW_P10_P11,PWM1_SW_P20_P21,PWM1_SW_P60_P61 + u8 PWM_CEN_Enable; //使能计数器, ENABLE,DISABLE + + u8 PWM_BrakeEnable; //刹车输入使能, ENABLE,DISABLE + u8 PWM_MainOutEnable;//主输出使能, ENABLE,DISABLE +} PWMx_InitDefine; + +typedef struct +{ + u16 PWM1_Duty; //PWM1占空比时间, 0~Period + u16 PWM2_Duty; //PWM2占空比时间, 0~Period + u16 PWM3_Duty; //PWM3占空比时间, 0~Period + u16 PWM4_Duty; //PWM4占空比时间, 0~Period + u16 PWM5_Duty; //PWM5占空比时间, 0~Period + u16 PWM6_Duty; //PWM6占空比时间, 0~Period + u16 PWM7_Duty; //PWM7占空比时间, 0~Period + u16 PWM8_Duty; //PWM8占空比时间, 0~Period +} PWMx_Duty; + +u8 PWM_Configuration(u8 PWM, PWMx_InitDefine *PWMx); +void UpdatePwm(u8 PWM, PWMx_Duty *PWMx); +void PWM_config(void); +#endif + diff --git a/myinc/STC8xxxx.H b/myinc/STC8xxxx.H new file mode 100644 index 0000000..18458c7 --- /dev/null +++ b/myinc/STC8xxxx.H @@ -0,0 +1,2747 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */ +/*---------------------------------------------------------------------*/ + +#ifndef _STC8xxxx_H +#define _STC8xxxx_H + +#include + +/* BYTE Registers */ +sfr P0 = 0x80; +sfr SP = 0x81; +sfr DPL = 0x82; +sfr DPH = 0x83; +sfr S4CON = 0x84; +sfr S4BUF = 0x85; +sfr PCON = 0x87; + +sfr TCON = 0x88; +sfr TMOD = 0x89; +sfr TL0 = 0x8A; +sfr TL1 = 0x8B; +sfr TH0 = 0x8C; +sfr TH1 = 0x8D; +sfr AUXR = 0x8E; +sfr WAKE_CLKO = 0x8F; +sfr INT_CLKO = 0x8F; + +sfr P1 = 0x90; +sfr P1M1 = 0x91; //P1M1.n,P1M0.n =00--->Standard, 01--->push-pull 实际上1T的都一样 +sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain +sfr P0M1 = 0x93; //P0M1.n,P0M0.n =00--->Standard, 01--->push-pull +sfr P0M0 = 0x94; // =10--->pure input, 11--->open drain +sfr P2M1 = 0x95; //P2M1.n,P2M0.n =00--->Standard, 01--->push-pull +sfr P2M0 = 0x96; // =10--->pure input, 11--->open drain +//sfr PCON2 = 0x97; +//sfr AUXR2 = 0x97; + +sfr SCON = 0x98; +sfr SBUF = 0x99; +sfr S2CON = 0x9A; // +sfr S2BUF = 0x9B; // + +sfr P2 = 0xA0; +sfr BUS_SPEED = 0xA1; +sfr P_SW1 = 0xA2; + +sfr IE = 0xA8; +sfr SADDR = 0xA9; +sfr WKTCL = 0xAA; //唤醒定时器低字节 +sfr WKTCH = 0xAB; //唤醒定时器高字节 +sfr S3CON = 0xAC; +sfr S3BUF = 0xAD; +sfr TA = 0xAE; +sfr IE2 = 0xAF; + +sfr P3 = 0xB0; +sfr P3M1 = 0xB1; //P3M1.n,P3M0.n =00--->Standard, 01--->push-pull +sfr P3M0 = 0xB2; // =10--->pure input, 11--->open drain +sfr P4M1 = 0xB3; //P4M1.n,P4M0.n =00--->Standard, 01--->push-pull +sfr P4M0 = 0xB4; // =10--->pure input, 11--->open drain +sfr IP2 = 0xB5; +sfr IP2H = 0xB6; +sfr IPH = 0xB7; + +sfr IP = 0xB8; +sfr SADEN = 0xB9; +sfr P_SW2 = 0xBA; +sfr VOCTRL = 0xBB; +sfr ADC_CONTR = 0xBC; //ADC控制寄存器 +sfr ADC_RES = 0xBD; //ADC结果高字节 +sfr ADC_RESL = 0xBE; //ADC结果低字节 + +sfr P4 = 0xC0; +sfr WDT_CONTR = 0xC1; + +sfr IAP_DATA = 0xC2; +sfr IAP_ADDRH = 0xC3; +sfr IAP_ADDRL = 0xC4; +sfr IAP_CMD = 0xC5; +sfr IAP_TRIG = 0xC6; +sfr IAP_CONTR = 0xC7; + +sfr ISP_DATA = 0xC2; +sfr ISP_ADDRH = 0xC3; +sfr ISP_ADDRL = 0xC4; +sfr ISP_CMD = 0xC5; +sfr ISP_TRIG = 0xC6; +sfr ISP_CONTR = 0xC7; + +sfr P5 = 0xC8; // +sfr P5M1 = 0xC9; // P5M1.n,P5M0.n =00--->Standard, 01--->push-pull +sfr P5M0 = 0xCA; // =10--->pure input, 11--->open drain +sfr P6M1 = 0xCB; // P5M1.n,P5M0.n =00--->Standard, 01--->push-pull +sfr P6M0 = 0xCC; // =10--->pure input, 11--->open drain +sfr SPSTAT = 0xCD; // +sfr SPCTL = 0xCE; // +sfr SPDAT = 0xCF; // + +sfr PSW = 0xD0; +sfr T4T3M = 0xD1; +sfr T4H = 0xD2; +sfr T4L = 0xD3; +sfr T3H = 0xD4; +sfr T3L = 0xD5; +sfr T2H = 0xD6; +sfr T2L = 0xD7; + +sfr TH4 = 0xD2; +sfr TL4 = 0xD3; +sfr TH3 = 0xD4; +sfr TL3 = 0xD5; +sfr TH2 = 0xD6; +sfr TL2 = 0xD7; + +sfr CCON = 0xD8; // +sfr CMOD = 0xD9; // +sfr CCAPM0 = 0xDA; //PCA模块0的工作模式寄存器。 +sfr CCAPM1 = 0xDB; //PCA模块1的工作模式寄存器。 +sfr CCAPM2 = 0xDC; //PCA模块2的工作模式寄存器。 +//sfr CCAPM3 = 0xDD; //PCA模块3的工作模式寄存器。 +sfr USBCLK = 0xDC; +sfr ADCCFG = 0xDE; // +sfr IP3 = 0xDF; //中断优先级寄存器 + +sfr ACC = 0xE0; +sfr P7M1 = 0xE1; +sfr P7M0 = 0xE2; +sfr DPS = 0xE3; +sfr DPL1 = 0xE4; +sfr DPH1 = 0xE5; +sfr CMPCR1 = 0xE6; +sfr CMPCR2 = 0xE7; + +sfr P6 = 0xE8; +sfr CL = 0xE9; // +sfr CCAP0L = 0xEA; //PCA模块0的捕捉/比较寄存器低8位。 +sfr CCAP1L = 0xEB; //PCA模块1的捕捉/比较寄存器低8位。 +sfr CCAP2L = 0xEC; //PCA模块2的捕捉/比较寄存器低8位。 +//sfr CCAP3L = 0xED; //PCA模块3的捕捉/比较寄存器低8位。 +sfr USBDAT = 0xEC; +sfr IP3H = 0xEE; +sfr AUXINTIF = 0xEF; //辅助中断标志 B6-INT4IF, B5-INT3IF, B4-INT2IF, B2-T4IF, B1-T3IF, B0-T2IF + +sfr B = 0xF0; +sfr PWMSET = 0xF1; //增强型PWM全局配置寄存器 +sfr PCA_PWM0 = 0xF2; //PCA模块0 PWM寄存器。 +sfr PCA_PWM1 = 0xF3; //PCA模块1 PWM寄存器。 +sfr PCA_PWM2 = 0xF4; //PCA模块2 PWM寄存器。 +//sfr PCA_PWM3 = 0xF5; //PCA模块3 PWM寄存器。 +sfr PWMCFG01 = 0xF6; //增强型PWM配置寄存器 +sfr PWMCFG23 = 0xF7; //增强型PWM配置寄存器 +sfr USBCON = 0xF4; +sfr IAP_TPS = 0xF5; + +sfr P7 = 0xF8; +sfr CH = 0xF9; +sfr CCAP0H = 0xFA; //PCA模块0的捕捉/比较寄存器高8位。 +sfr CCAP1H = 0xFB; //PCA模块1的捕捉/比较寄存器高8位。 +sfr CCAP2H = 0xFC; //PCA模块2的捕捉/比较寄存器高8位。 +//sfr CCAP3H = 0xFD; //PCA模块3的捕捉/比较寄存器高8位。 +sfr PWMCFG45 = 0xFE; //增强型PWM配置寄存器 +sfr USBADR = 0xFC; +sfr RSTCFG = 0xFF; // + + +// 7 6 5 4 3 2 1 0 Reset Value +//INT_CLKO: 中断与时钟输出控制寄存器 - EX4 EX3 EX2 - T2CLKO T1CLKO T0CLKO 0000,0000 +#define INT4_Enable() INT_CLKO |= (1 << 6) +#define INT3_Enable() INT_CLKO |= (1 << 5) +#define INT2_Enable() INT_CLKO |= (1 << 4) +#define INT1_Enable() EX1 = 1 +#define INT0_Enable() EX0 = 1 + +#define INT4_Disable() INT_CLKO &= ~(1 << 6) +#define INT3_Disable() INT_CLKO &= ~(1 << 5) +#define INT2_Disable() INT_CLKO &= ~(1 << 4) +#define INT1_Disable() EX1 = 0 +#define INT0_Disable() EX0 = 0 + +// 7 6 5 4 3 2 1 0 Reset Value +//AUXINTIF: 辅助中断标志寄存器 - INT4IF INT3IF INT2IF - T4IF T3IF T2IF 0000,0000 +#define INT4IF 0x40 +#define INT3IF 0x20 +#define INT2IF 0x10 +#define T4IF 0x04 +#define T3IF 0x02 +#define T2IF 0x01 + +#define INT4_Clear() AUXINTIF &= ~INT4IF /* 清除外中断4标志位 */ +#define INT3_Clear() AUXINTIF &= ~INT3IF /* 清除外中断3标志位 */ +#define INT2_Clear() AUXINTIF &= ~INT2IF /* 清除外中断2标志位 */ +#define INT1_Clear() IE1 = 0 /* 清除外中断1标志位 */ +#define INT0_Clear() IE0 = 0 /* 清除外中断0标志位 */ + +#define INT0_Fall() IT0 = 1 /* INT0 下降沿中断 */ +#define INT0_RiseFall() IT0 = 0 /* INT0 下降沿上升沿均中断 */ +#define INT1_Fall() IT1 = 1 /* INT1 下降沿中断 */ +#define INT1_RiseFall() IT0 = 0 /* INT1 下降沿上升沿均中断 */ + + +//=============================================================== +#define EAXSFR() P_SW2 |= 0x80 /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */ +#define EAXRAM() P_SW2 &= ~0x80 /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */ + +#define I2C_USE_P14P15() P_SW2 &= ~0x30 /* 将I2C切换到P1.4(SDA) P1.5(SCL)(上电默认).*/ +#define I2C_USE_P24P25() P_SW2 = (P_SW2 & ~0x30) | 0x10 /* 将I2C切换到P2.4(SDA) P2.5(SCL).*/ +#define I2C_USE_P76P77() P_SW2 = (P_SW2 & ~0x30) | 0x20 /* 将I2C切换到P7.6(SDA) P7.7(SCL).*/ +#define I2C_USE_P33P32() P_SW2 |= 0x30 /* 将I2C切换到P3.3(SDA) P3.2(SCL).*/ + +#define CLKSEL (*(unsigned char volatile xdata *)0xfe00) +#define CKSEL (*(unsigned char volatile xdata *)0xfe00) /* 主时钟源选择 */ +#define CLKDIV (*(unsigned char volatile xdata *)0xfe01) /* 主时钟分频 */ +#define IRC24MCR (*(unsigned char volatile xdata *)0xfe02) /* IRC 24MHZ控制 */ +#define XOSCCR (*(unsigned char volatile xdata *)0xfe03) /* XOSC控制 */ +#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04) /* IRC 32KHZ控制 */ +#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05) +#define IRCDB (*(unsigned char volatile xdata *)0xfe06) +#define X32KCR (*(unsigned char volatile xdata *)0xfe08) + +#define MainFosc_IRC24M() CKSEL = (CKSEL & ~0x03) /* 选择内部24MHZ时钟 */ +#define MainFosc_XTAL() CKSEL = (CKSEL & ~0x03) | 0x01 /* 选择外部晶振或时钟 */ +#define MainFosc_IRC32K() CKSEL = CKSEL | 0x03 /* 选择内部32K时钟 */ +#define EXT_CLOCK() XOSCCR = 0x80 /* 选择外部时钟 */ +#define EXT_CRYSTAL() XOSCCR = 0xC0 /* 选择外部晶振 */ + + +#define P0PU (*(unsigned char volatile xdata *)0xfe10) /* P0 4.1K Pull Up Enable */ +#define P1PU (*(unsigned char volatile xdata *)0xfe11) /* P1 4.1K Pull Up Enable */ +#define P2PU (*(unsigned char volatile xdata *)0xfe12) /* P2 4.1K Pull Up Enable */ +#define P3PU (*(unsigned char volatile xdata *)0xfe13) /* P3 4.1K Pull Up Enable */ +#define P4PU (*(unsigned char volatile xdata *)0xfe14) /* P4 4.1K Pull Up Enable */ +#define P5PU (*(unsigned char volatile xdata *)0xfe15) /* P5 4.1K Pull Up Enable */ +#define P6PU (*(unsigned char volatile xdata *)0xfe16) /* P6 4.1K Pull Up Enable */ +#define P7PU (*(unsigned char volatile xdata *)0xfe17) /* P7 4.1K Pull Up Enable */ + +#define P0NCS (*(unsigned char volatile xdata *)0xfe18) /* P0 Non Schmit Trigger 0: 使能端口施密特触发功能(默认), 1: 禁止 */ +#define P1NCS (*(unsigned char volatile xdata *)0xfe19) /* P1 Non Schmit Trigger */ +#define P2NCS (*(unsigned char volatile xdata *)0xfe1a) /* P2 Non Schmit Trigger */ +#define P3NCS (*(unsigned char volatile xdata *)0xfe1b) /* P3 Non Schmit Trigger */ +#define P4NCS (*(unsigned char volatile xdata *)0xfe1c) /* P4 Non Schmit Trigger */ +#define P5NCS (*(unsigned char volatile xdata *)0xfe1d) /* P5 Non Schmit Trigger */ +#define P6NCS (*(unsigned char volatile xdata *)0xfe1e) /* P6 Non Schmit Trigger */ +#define P7NCS (*(unsigned char volatile xdata *)0xfe1f) /* P7 Non Schmit Trigger */ + +#define P0SR (*(unsigned char volatile xdata *)0xfe20) /* 端口电平转换速度 0: 快, 1: 慢(默认) */ +#define P1SR (*(unsigned char volatile xdata *)0xfe21) +#define P2SR (*(unsigned char volatile xdata *)0xfe22) +#define P3SR (*(unsigned char volatile xdata *)0xfe23) +#define P4SR (*(unsigned char volatile xdata *)0xfe24) +#define P5SR (*(unsigned char volatile xdata *)0xfe25) +#define P6SR (*(unsigned char volatile xdata *)0xfe26) +#define P7SR (*(unsigned char volatile xdata *)0xfe27) + +#define P0DR (*(unsigned char volatile xdata *)0xfe28) /* 端口驱动电流控制 0: 增强驱动能力, 1: 一般驱动能力(默认) */ +#define P1DR (*(unsigned char volatile xdata *)0xfe29) +#define P2DR (*(unsigned char volatile xdata *)0xfe2a) +#define P3DR (*(unsigned char volatile xdata *)0xfe2b) +#define P4DR (*(unsigned char volatile xdata *)0xfe2c) +#define P5DR (*(unsigned char volatile xdata *)0xfe2d) +#define P6DR (*(unsigned char volatile xdata *)0xfe2e) +#define P7DR (*(unsigned char volatile xdata *)0xfe2f) + +#define P0IE (*(unsigned char volatile xdata *)0xfe30)/* 端口数字信号输入使能 0: 禁止数字信号输入, 1: 使能数字信号输入(默认) */ +#define P1IE (*(unsigned char volatile xdata *)0xfe31) +#define P2IE (*(unsigned char volatile xdata *)0xfe32) +#define P3IE (*(unsigned char volatile xdata *)0xfe33) +#define P4IE (*(unsigned char volatile xdata *)0xfe34) +#define P5IE (*(unsigned char volatile xdata *)0xfe35) +#define P6IE (*(unsigned char volatile xdata *)0xfe36) +#define P7IE (*(unsigned char volatile xdata *)0xfe37) + +#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) /* */ +#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) /* */ +#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) /* */ +#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) /* */ +#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) /* */ +#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) /* */ +#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) /* */ +#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) /* */ +#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88) + +#define TM2PS (*(unsigned char volatile xdata *)0xfea2) +#define TM3PS (*(unsigned char volatile xdata *)0xfea3) +#define TM4PS (*(unsigned char volatile xdata *)0xfea4) +#define ADCTIM (*(unsigned char volatile xdata *)0xfea8) +#define T3T4PIN (*(unsigned char volatile xdata *)0xfeac) + +#define PWMA_ETRPS (*(unsigned char volatile xdata *)0xfeb0) +#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1) +#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2) +#define PWMA_IOAUX (*(unsigned char volatile xdata *)0xfeb3) +#define PWMB_ETRPS (*(unsigned char volatile xdata *)0xfeb4) +#define PWMB_ENO (*(unsigned char volatile xdata *)0xfeb5) +#define PWMB_PS (*(unsigned char volatile xdata *)0xfeb6) +#define PWMB_IOAUX (*(unsigned char volatile xdata *)0xfeb7) +#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0) +#define PWMA_CR2 (*(unsigned char volatile xdata *)0xfec1) +#define PWMA_SMCR (*(unsigned char volatile xdata *)0xfec2) +#define PWMA_ETR (*(unsigned char volatile xdata *)0xfec3) +#define PWMA_IER (*(unsigned char volatile xdata *)0xfec4) +#define PWMA_SR1 (*(unsigned char volatile xdata *)0xfec5) +#define PWMA_SR2 (*(unsigned char volatile xdata *)0xfec6) +#define PWMA_EGR (*(unsigned char volatile xdata *)0xfec7) +#define PWMA_CCMR1 (*(unsigned char volatile xdata *)0xfec8) +#define PWMA_CCMR2 (*(unsigned char volatile xdata *)0xfec9) +#define PWMA_CCMR3 (*(unsigned char volatile xdata *)0xfeca) +#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb) +#define PWMA_CCER1 (*(unsigned char volatile xdata *)0xfecc) +#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd) +#define PWMA_CNTR (*(unsigned int volatile xdata *)0xfece) +#define PWMA_CNTRH (*(unsigned char volatile xdata *)0xfece) +#define PWMA_CNTRL (*(unsigned char volatile xdata *)0xfecf) +#define PWMA_PSCR (*(unsigned int volatile xdata *)0xfed0) +#define PWMA_PSCRH (*(unsigned char volatile xdata *)0xfed0) +#define PWMA_PSCRL (*(unsigned char volatile xdata *)0xfed1) +#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2) +#define PWMA_ARRH (*(unsigned char volatile xdata *)0xfed2) +#define PWMA_ARRL (*(unsigned char volatile xdata *)0xfed3) +#define PWMA_RCR (*(unsigned char volatile xdata *)0xfed4) +#define PWMA_CCR1 (*(unsigned int volatile xdata *)0xfed5) +#define PWMA_CCR1H (*(unsigned char volatile xdata *)0xfed5) +#define PWMA_CCR1L (*(unsigned char volatile xdata *)0xfed6) +#define PWMA_CCR2 (*(unsigned int volatile xdata *)0xfed7) +#define PWMA_CCR2H (*(unsigned char volatile xdata *)0xfed7) +#define PWMA_CCR2L (*(unsigned char volatile xdata *)0xfed8) +#define PWMA_CCR3 (*(unsigned int volatile xdata *)0xfed9) +#define PWMA_CCR3H (*(unsigned char volatile xdata *)0xfed9) +#define PWMA_CCR3L (*(unsigned char volatile xdata *)0xfeda) +#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb) +#define PWMA_CCR4H (*(unsigned char volatile xdata *)0xfedb) +#define PWMA_CCR4L (*(unsigned char volatile xdata *)0xfedc) +#define PWMA_BRK (*(unsigned char volatile xdata *)0xfedd) +#define PWMA_DTR (*(unsigned char volatile xdata *)0xfede) +#define PWMA_OISR (*(unsigned char volatile xdata *)0xfedf) + +#define PWMB_CR1 (*(unsigned char volatile xdata *)0xfee0) +#define PWMB_CR2 (*(unsigned char volatile xdata *)0xfee1) +#define PWMB_SMCR (*(unsigned char volatile xdata *)0xfee2) +#define PWMB_ETR (*(unsigned char volatile xdata *)0xfee3) +#define PWMB_IER (*(unsigned char volatile xdata *)0xfee4) +#define PWMB_SR1 (*(unsigned char volatile xdata *)0xfee5) +#define PWMB_SR2 (*(unsigned char volatile xdata *)0xfee6) +#define PWMB_EGR (*(unsigned char volatile xdata *)0xfee7) +#define PWMB_CCMR1 (*(unsigned char volatile xdata *)0xfee8) +#define PWMB_CCMR2 (*(unsigned char volatile xdata *)0xfee9) +#define PWMB_CCMR3 (*(unsigned char volatile xdata *)0xfeea) +#define PWMB_CCMR4 (*(unsigned char volatile xdata *)0xfeeb) +#define PWMB_CCER1 (*(unsigned char volatile xdata *)0xfeec) +#define PWMB_CCER2 (*(unsigned char volatile xdata *)0xfeed) +#define PWMB_CNTR (*(unsigned int volatile xdata *)0xfeee) +#define PWMB_CNTRH (*(unsigned char volatile xdata *)0xfeee) +#define PWMB_CNTRL (*(unsigned char volatile xdata *)0xfeef) +#define PWMB_PSCR (*(unsigned int volatile xdata *)0xfef0) +#define PWMB_PSCRH (*(unsigned char volatile xdata *)0xfef0) +#define PWMB_PSCRL (*(unsigned char volatile xdata *)0xfef1) +#define PWMB_ARR (*(unsigned int volatile xdata *)0xfef2) +#define PWMB_ARRH (*(unsigned char volatile xdata *)0xfef2) +#define PWMB_ARRL (*(unsigned char volatile xdata *)0xfef3) +#define PWMB_RCR (*(unsigned char volatile xdata *)0xfef4) +#define PWMB_CCR5 (*(unsigned int volatile xdata *)0xfef5) +#define PWMB_CCR5H (*(unsigned char volatile xdata *)0xfef5) +#define PWMB_CCR5L (*(unsigned char volatile xdata *)0xfef6) +#define PWMB_CCR6 (*(unsigned int volatile xdata *)0xfef7) +#define PWMB_CCR6H (*(unsigned char volatile xdata *)0xfef7) +#define PWMB_CCR6L (*(unsigned char volatile xdata *)0xfef8) +#define PWMB_CCR7 (*(unsigned int volatile xdata *)0xfef9) +#define PWMB_CCR7H (*(unsigned char volatile xdata *)0xfef9) +#define PWMB_CCR7L (*(unsigned char volatile xdata *)0xfefa) +#define PWMB_CCR8 (*(unsigned int volatile xdata *)0xfefb) +#define PWMB_CCR8H (*(unsigned char volatile xdata *)0xfefb) +#define PWMB_CCR8L (*(unsigned char volatile xdata *)0xfefc) +#define PWMB_BRK (*(unsigned char volatile xdata *)0xfefd) +#define PWMB_DTR (*(unsigned char volatile xdata *)0xfefe) +#define PWMB_OISR (*(unsigned char volatile xdata *)0xfeff) + +///////////////////////////////////////////////// +//FD00H-FDFFH +///////////////////////////////////////////////// + +#define PWM0C (*(unsigned int volatile xdata *)0xff00) +#define PWM0CH (*(unsigned char volatile xdata *)0xff00) +#define PWM0CL (*(unsigned char volatile xdata *)0xff01) +#define PWM0CKS (*(unsigned char volatile xdata *)0xff02) +#define PWM0TADC (*(unsigned int volatile xdata *)0xff03) +#define PWM0TADCH (*(unsigned char volatile xdata *)0xff03) +#define PWM0TADCL (*(unsigned char volatile xdata *)0xff04) +#define PWM0IF (*(unsigned char volatile xdata *)0xff05) +#define PWM0FDCR (*(unsigned char volatile xdata *)0xff06) +#define PWM00T1 (*(unsigned int volatile xdata *)0xff10) +#define PWM00T1H (*(unsigned char volatile xdata *)0xff10) +#define PWM00T1L (*(unsigned char volatile xdata *)0xff11) +#define PWM00T2 (*(unsigned int volatile xdata *)0xff12) +#define PWM00T2H (*(unsigned char volatile xdata *)0xff12) +#define PWM00T2L (*(unsigned char volatile xdata *)0xff13) +#define PWM00CR (*(unsigned char volatile xdata *)0xff14) +#define PWM00HLD (*(unsigned char volatile xdata *)0xff15) +#define PWM01T1 (*(unsigned int volatile xdata *)0xff18) +#define PWM01T1H (*(unsigned char volatile xdata *)0xff18) +#define PWM01T1L (*(unsigned char volatile xdata *)0xff19) +#define PWM01T2 (*(unsigned int volatile xdata *)0xff1a) +#define PWM01T2H (*(unsigned char volatile xdata *)0xff1a) +#define PWM01T2L (*(unsigned char volatile xdata *)0xff1b) +#define PWM01CR (*(unsigned char volatile xdata *)0xff1c) +#define PWM01HLD (*(unsigned char volatile xdata *)0xff1d) +#define PWM02T1 (*(unsigned int volatile xdata *)0xff20) +#define PWM02T1H (*(unsigned char volatile xdata *)0xff20) +#define PWM02T1L (*(unsigned char volatile xdata *)0xff21) +#define PWM02T2 (*(unsigned int volatile xdata *)0xff22) +#define PWM02T2H (*(unsigned char volatile xdata *)0xff22) +#define PWM02T2L (*(unsigned char volatile xdata *)0xff23) +#define PWM02CR (*(unsigned char volatile xdata *)0xff24) +#define PWM02HLD (*(unsigned char volatile xdata *)0xff25) +#define PWM03T1 (*(unsigned int volatile xdata *)0xff28) +#define PWM03T1H (*(unsigned char volatile xdata *)0xff28) +#define PWM03T1L (*(unsigned char volatile xdata *)0xff29) +#define PWM03T2 (*(unsigned int volatile xdata *)0xff2a) +#define PWM03T2H (*(unsigned char volatile xdata *)0xff2a) +#define PWM03T2L (*(unsigned char volatile xdata *)0xff2b) +#define PWM03CR (*(unsigned char volatile xdata *)0xff2c) +#define PWM03HLD (*(unsigned char volatile xdata *)0xff2d) +#define PWM04T1 (*(unsigned int volatile xdata *)0xff30) +#define PWM04T1H (*(unsigned char volatile xdata *)0xff30) +#define PWM04T1L (*(unsigned char volatile xdata *)0xff31) +#define PWM04T2 (*(unsigned int volatile xdata *)0xff32) +#define PWM04T2H (*(unsigned char volatile xdata *)0xff32) +#define PWM04T2L (*(unsigned char volatile xdata *)0xff33) +#define PWM04CR (*(unsigned char volatile xdata *)0xff34) +#define PWM04HLD (*(unsigned char volatile xdata *)0xff35) +#define PWM05T1 (*(unsigned int volatile xdata *)0xff38) +#define PWM05T1H (*(unsigned char volatile xdata *)0xff38) +#define PWM05T1L (*(unsigned char volatile xdata *)0xff39) +#define PWM05T2 (*(unsigned int volatile xdata *)0xff3a) +#define PWM05T2H (*(unsigned char volatile xdata *)0xff3a) +#define PWM05T2L (*(unsigned char volatile xdata *)0xff3b) +#define PWM05CR (*(unsigned char volatile xdata *)0xff3c) +#define PWM05HLD (*(unsigned char volatile xdata *)0xff3d) +#define PWM06T1 (*(unsigned int volatile xdata *)0xff40) +#define PWM06T1H (*(unsigned char volatile xdata *)0xff40) +#define PWM06T1L (*(unsigned char volatile xdata *)0xff41) +#define PWM06T2 (*(unsigned int volatile xdata *)0xff42) +#define PWM06T2H (*(unsigned char volatile xdata *)0xff42) +#define PWM06T2L (*(unsigned char volatile xdata *)0xff43) +#define PWM06CR (*(unsigned char volatile xdata *)0xff44) +#define PWM06HLD (*(unsigned char volatile xdata *)0xff45) +#define PWM07T1 (*(unsigned int volatile xdata *)0xff48) +#define PWM07T1H (*(unsigned char volatile xdata *)0xff48) +#define PWM07T1L (*(unsigned char volatile xdata *)0xff49) +#define PWM07T2 (*(unsigned int volatile xdata *)0xff4a) +#define PWM07T2H (*(unsigned char volatile xdata *)0xff4a) +#define PWM07T2L (*(unsigned char volatile xdata *)0xff4b) +#define PWM07CR (*(unsigned char volatile xdata *)0xff4c) +#define PWM07HLD (*(unsigned char volatile xdata *)0xff4d) +#define PWM1C (*(unsigned int volatile xdata *)0xff50) +#define PWM1CH (*(unsigned char volatile xdata *)0xff50) +#define PWM1CL (*(unsigned char volatile xdata *)0xff51) +#define PWM1CKS (*(unsigned char volatile xdata *)0xff52) +#define PWM1IF (*(unsigned char volatile xdata *)0xff55) +#define PWM1FDCR (*(unsigned char volatile xdata *)0xff56) +#define PWM10T1 (*(unsigned int volatile xdata *)0xff60) +#define PWM10T1H (*(unsigned char volatile xdata *)0xff60) +#define PWM10T1L (*(unsigned char volatile xdata *)0xff61) +#define PWM10T2 (*(unsigned int volatile xdata *)0xff62) +#define PWM10T2H (*(unsigned char volatile xdata *)0xff62) +#define PWM10T2L (*(unsigned char volatile xdata *)0xff63) +#define PWM10CR (*(unsigned char volatile xdata *)0xff64) +#define PWM10HLD (*(unsigned char volatile xdata *)0xff65) +#define PWM11T1 (*(unsigned int volatile xdata *)0xff68) +#define PWM11T1H (*(unsigned char volatile xdata *)0xff68) +#define PWM11T1L (*(unsigned char volatile xdata *)0xff69) +#define PWM11T2 (*(unsigned int volatile xdata *)0xff6a) +#define PWM11T2H (*(unsigned char volatile xdata *)0xff6a) +#define PWM11T2L (*(unsigned char volatile xdata *)0xff6b) +#define PWM11CR (*(unsigned char volatile xdata *)0xff6c) +#define PWM11HLD (*(unsigned char volatile xdata *)0xff6d) +#define PWM12T1 (*(unsigned int volatile xdata *)0xff70) +#define PWM12T1H (*(unsigned char volatile xdata *)0xff70) +#define PWM12T1L (*(unsigned char volatile xdata *)0xff71) +#define PWM12T2 (*(unsigned int volatile xdata *)0xff72) +#define PWM12T2H (*(unsigned char volatile xdata *)0xff72) +#define PWM12T2L (*(unsigned char volatile xdata *)0xff73) +#define PWM12CR (*(unsigned char volatile xdata *)0xff74) +#define PWM12HLD (*(unsigned char volatile xdata *)0xff75) +#define PWM13T1 (*(unsigned int volatile xdata *)0xff78) +#define PWM13T1H (*(unsigned char volatile xdata *)0xff78) +#define PWM13T1L (*(unsigned char volatile xdata *)0xff79) +#define PWM13T2 (*(unsigned int volatile xdata *)0xff7a) +#define PWM13T2H (*(unsigned char volatile xdata *)0xff7a) +#define PWM13T2L (*(unsigned char volatile xdata *)0xff7b) +#define PWM13CR (*(unsigned char volatile xdata *)0xff7c) +#define PWM13HLD (*(unsigned char volatile xdata *)0xff7d) +#define PWM14T1 (*(unsigned int volatile xdata *)0xff80) +#define PWM14T1H (*(unsigned char volatile xdata *)0xff80) +#define PWM14T1L (*(unsigned char volatile xdata *)0xff81) +#define PWM14T2 (*(unsigned int volatile xdata *)0xff82) +#define PWM14T2H (*(unsigned char volatile xdata *)0xff82) +#define PWM14T2L (*(unsigned char volatile xdata *)0xff83) +#define PWM14CR (*(unsigned char volatile xdata *)0xff84) +#define PWM14HLD (*(unsigned char volatile xdata *)0xff85) +#define PWM15T1 (*(unsigned int volatile xdata *)0xff88) +#define PWM15T1H (*(unsigned char volatile xdata *)0xff88) +#define PWM15T1L (*(unsigned char volatile xdata *)0xff89) +#define PWM15T2 (*(unsigned int volatile xdata *)0xff8a) +#define PWM15T2H (*(unsigned char volatile xdata *)0xff8a) +#define PWM15T2L (*(unsigned char volatile xdata *)0xff8b) +#define PWM15CR (*(unsigned char volatile xdata *)0xff8c) +#define PWM15HLD (*(unsigned char volatile xdata *)0xff8d) +#define PWM16T1 (*(unsigned int volatile xdata *)0xff90) +#define PWM16T1H (*(unsigned char volatile xdata *)0xff90) +#define PWM16T1L (*(unsigned char volatile xdata *)0xff91) +#define PWM16T2 (*(unsigned int volatile xdata *)0xff92) +#define PWM16T2H (*(unsigned char volatile xdata *)0xff92) +#define PWM16T2L (*(unsigned char volatile xdata *)0xff93) +#define PWM16CR (*(unsigned char volatile xdata *)0xff94) +#define PWM16HLD (*(unsigned char volatile xdata *)0xff95) +#define PWM17T1 (*(unsigned int volatile xdata *)0xff98) +#define PWM17T1H (*(unsigned char volatile xdata *)0xff98) +#define PWM17T1L (*(unsigned char volatile xdata *)0xff99) +#define PWM17T2 (*(unsigned int volatile xdata *)0xff9a) +#define PWM17T2H (*(unsigned char volatile xdata *)0xff9a) +#define PWM17T2L (*(unsigned char volatile xdata *)0xff9b) +#define PWM17CR (*(unsigned char volatile xdata *)0xff9c) +#define PWM17HLD (*(unsigned char volatile xdata *)0xff9d) +#define PWM2C (*(unsigned int volatile xdata *)0xffa0) +#define PWM2CH (*(unsigned char volatile xdata *)0xffa0) +#define PWM2CL (*(unsigned char volatile xdata *)0xffa1) +#define PWM2CKS (*(unsigned char volatile xdata *)0xffa2) +#define PWM2TADC (*(unsigned int volatile xdata *)0xffa3) +#define PWM2TADCH (*(unsigned char volatile xdata *)0xffa3) +#define PWM2TADCL (*(unsigned char volatile xdata *)0xffa4) +#define PWM2IF (*(unsigned char volatile xdata *)0xffa5) +#define PWM2FDCR (*(unsigned char volatile xdata *)0xffa6) +#define PWM20T1 (*(unsigned int volatile xdata *)0xffb0) +#define PWM20T1H (*(unsigned char volatile xdata *)0xffb0) +#define PWM20T1L (*(unsigned char volatile xdata *)0xffb1) +#define PWM20T2 (*(unsigned int volatile xdata *)0xffb2) +#define PWM20T2H (*(unsigned char volatile xdata *)0xffb2) +#define PWM20T2L (*(unsigned char volatile xdata *)0xffb3) +#define PWM20CR (*(unsigned char volatile xdata *)0xffb4) +#define PWM20HLD (*(unsigned char volatile xdata *)0xffb5) +#define PWM21T1 (*(unsigned int volatile xdata *)0xffb8) +#define PWM21T1H (*(unsigned char volatile xdata *)0xffb8) +#define PWM21T1L (*(unsigned char volatile xdata *)0xffb9) +#define PWM21T2 (*(unsigned int volatile xdata *)0xffba) +#define PWM21T2H (*(unsigned char volatile xdata *)0xffba) +#define PWM21T2L (*(unsigned char volatile xdata *)0xffbb) +#define PWM21CR (*(unsigned char volatile xdata *)0xffbc) +#define PWM21HLD (*(unsigned char volatile xdata *)0xffbd) +#define PWM22T1 (*(unsigned int volatile xdata *)0xffc0) +#define PWM22T1H (*(unsigned char volatile xdata *)0xffc0) +#define PWM22T1L (*(unsigned char volatile xdata *)0xffc1) +#define PWM22T2 (*(unsigned int volatile xdata *)0xffc2) +#define PWM22T2H (*(unsigned char volatile xdata *)0xffc2) +#define PWM22T2L (*(unsigned char volatile xdata *)0xffc3) +#define PWM22CR (*(unsigned char volatile xdata *)0xffc4) +#define PWM22HLD (*(unsigned char volatile xdata *)0xffc5) +#define PWM23T1 (*(unsigned int volatile xdata *)0xffc8) +#define PWM23T1H (*(unsigned char volatile xdata *)0xffc8) +#define PWM23T1L (*(unsigned char volatile xdata *)0xffc9) +#define PWM23T2 (*(unsigned int volatile xdata *)0xffca) +#define PWM23T2H (*(unsigned char volatile xdata *)0xffca) +#define PWM23T2L (*(unsigned char volatile xdata *)0xffcb) +#define PWM23CR (*(unsigned char volatile xdata *)0xffcc) +#define PWM23HLD (*(unsigned char volatile xdata *)0xffcd) +#define PWM24T1 (*(unsigned int volatile xdata *)0xffd0) +#define PWM24T1H (*(unsigned char volatile xdata *)0xffd0) +#define PWM24T1L (*(unsigned char volatile xdata *)0xffd1) +#define PWM24T2 (*(unsigned int volatile xdata *)0xffd2) +#define PWM24T2H (*(unsigned char volatile xdata *)0xffd2) +#define PWM24T2L (*(unsigned char volatile xdata *)0xffd3) +#define PWM24CR (*(unsigned char volatile xdata *)0xffd4) +#define PWM24HLD (*(unsigned char volatile xdata *)0xffd5) +#define PWM25T1 (*(unsigned int volatile xdata *)0xffd8) +#define PWM25T1H (*(unsigned char volatile xdata *)0xffd8) +#define PWM25T1L (*(unsigned char volatile xdata *)0xffd9) +#define PWM25T2 (*(unsigned int volatile xdata *)0xffda) +#define PWM25T2H (*(unsigned char volatile xdata *)0xffda) +#define PWM25T2L (*(unsigned char volatile xdata *)0xffdb) +#define PWM25CR (*(unsigned char volatile xdata *)0xffdc) +#define PWM25HLD (*(unsigned char volatile xdata *)0xffdd) +#define PWM26T1 (*(unsigned int volatile xdata *)0xffe0) +#define PWM26T1H (*(unsigned char volatile xdata *)0xffe0) +#define PWM26T1L (*(unsigned char volatile xdata *)0xffe1) +#define PWM26T2 (*(unsigned int volatile xdata *)0xffe2) +#define PWM26T2H (*(unsigned char volatile xdata *)0xffe2) +#define PWM26T2L (*(unsigned char volatile xdata *)0xffe3) +#define PWM26CR (*(unsigned char volatile xdata *)0xffe4) +#define PWM26HLD (*(unsigned char volatile xdata *)0xffe5) +#define PWM27T1 (*(unsigned int volatile xdata *)0xffe8) +#define PWM27T1H (*(unsigned char volatile xdata *)0xffe8) +#define PWM27T1L (*(unsigned char volatile xdata *)0xffe9) +#define PWM27T2 (*(unsigned int volatile xdata *)0xffea) +#define PWM27T2H (*(unsigned char volatile xdata *)0xffea) +#define PWM27T2L (*(unsigned char volatile xdata *)0xffeb) +#define PWM27CR (*(unsigned char volatile xdata *)0xffec) +#define PWM27HLD (*(unsigned char volatile xdata *)0xffed) + +///////////////////////////////////////////////// +//FC00H-FCFFH +///////////////////////////////////////////////// + +#define PWM3C (*(unsigned int volatile xdata *)0xfc00) +#define PWM3CH (*(unsigned char volatile xdata *)0xfc00) +#define PWM3CL (*(unsigned char volatile xdata *)0xfc01) +#define PWM3CKS (*(unsigned char volatile xdata *)0xfc02) +#define PWM3IF (*(unsigned char volatile xdata *)0xfc05) +#define PWM3FDCR (*(unsigned char volatile xdata *)0xfc06) +#define PWM30T1 (*(unsigned int volatile xdata *)0xfc10) +#define PWM30T1H (*(unsigned char volatile xdata *)0xfc10) +#define PWM30T1L (*(unsigned char volatile xdata *)0xfc11) +#define PWM30T2 (*(unsigned int volatile xdata *)0xfc12) +#define PWM30T2H (*(unsigned char volatile xdata *)0xfc12) +#define PWM30T2L (*(unsigned char volatile xdata *)0xfc13) +#define PWM30CR (*(unsigned char volatile xdata *)0xfc14) +#define PWM30HLD (*(unsigned char volatile xdata *)0xfc15) +#define PWM31T1 (*(unsigned int volatile xdata *)0xfc18) +#define PWM31T1H (*(unsigned char volatile xdata *)0xfc18) +#define PWM31T1L (*(unsigned char volatile xdata *)0xfc19) +#define PWM31T2 (*(unsigned int volatile xdata *)0xfc1a) +#define PWM31T2H (*(unsigned char volatile xdata *)0xfc1a) +#define PWM31T2L (*(unsigned char volatile xdata *)0xfc1b) +#define PWM31CR (*(unsigned char volatile xdata *)0xfc1c) +#define PWM31HLD (*(unsigned char volatile xdata *)0xfc1d) +#define PWM32T1 (*(unsigned int volatile xdata *)0xfc20) +#define PWM32T1H (*(unsigned char volatile xdata *)0xfc20) +#define PWM32T1L (*(unsigned char volatile xdata *)0xfc21) +#define PWM32T2 (*(unsigned int volatile xdata *)0xfc22) +#define PWM32T2H (*(unsigned char volatile xdata *)0xfc22) +#define PWM32T2L (*(unsigned char volatile xdata *)0xfc23) +#define PWM32CR (*(unsigned char volatile xdata *)0xfc24) +#define PWM32HLD (*(unsigned char volatile xdata *)0xfc25) +#define PWM33T1 (*(unsigned int volatile xdata *)0xfc28) +#define PWM33T1H (*(unsigned char volatile xdata *)0xfc28) +#define PWM33T1L (*(unsigned char volatile xdata *)0xfc29) +#define PWM33T2 (*(unsigned int volatile xdata *)0xfc2a) +#define PWM33T2H (*(unsigned char volatile xdata *)0xfc2a) +#define PWM33T2L (*(unsigned char volatile xdata *)0xfc2b) +#define PWM33CR (*(unsigned char volatile xdata *)0xfc2c) +#define PWM33HLD (*(unsigned char volatile xdata *)0xfc2d) +#define PWM34T1 (*(unsigned int volatile xdata *)0xfc30) +#define PWM34T1H (*(unsigned char volatile xdata *)0xfc30) +#define PWM34T1L (*(unsigned char volatile xdata *)0xfc31) +#define PWM34T2 (*(unsigned int volatile xdata *)0xfc32) +#define PWM34T2H (*(unsigned char volatile xdata *)0xfc32) +#define PWM34T2L (*(unsigned char volatile xdata *)0xfc33) +#define PWM34CR (*(unsigned char volatile xdata *)0xfc34) +#define PWM34HLD (*(unsigned char volatile xdata *)0xfc35) +#define PWM35T1 (*(unsigned int volatile xdata *)0xfc38) +#define PWM35T1H (*(unsigned char volatile xdata *)0xfc38) +#define PWM35T1L (*(unsigned char volatile xdata *)0xfc39) +#define PWM35T2 (*(unsigned int volatile xdata *)0xfc3a) +#define PWM35T2H (*(unsigned char volatile xdata *)0xfc3a) +#define PWM35T2L (*(unsigned char volatile xdata *)0xfc3b) +#define PWM35CR (*(unsigned char volatile xdata *)0xfc3c) +#define PWM35HLD (*(unsigned char volatile xdata *)0xfc3d) +#define PWM36T1 (*(unsigned int volatile xdata *)0xfc40) +#define PWM36T1H (*(unsigned char volatile xdata *)0xfc40) +#define PWM36T1L (*(unsigned char volatile xdata *)0xfc41) +#define PWM36T2 (*(unsigned int volatile xdata *)0xfc42) +#define PWM36T2H (*(unsigned char volatile xdata *)0xfc42) +#define PWM36T2L (*(unsigned char volatile xdata *)0xfc43) +#define PWM36CR (*(unsigned char volatile xdata *)0xfc44) +#define PWM36HLD (*(unsigned char volatile xdata *)0xfc45) +#define PWM37T1 (*(unsigned int volatile xdata *)0xfc48) +#define PWM37T1H (*(unsigned char volatile xdata *)0xfc48) +#define PWM37T1L (*(unsigned char volatile xdata *)0xfc49) +#define PWM37T2 (*(unsigned int volatile xdata *)0xfc4a) +#define PWM37T2H (*(unsigned char volatile xdata *)0xfc4a) +#define PWM37T2L (*(unsigned char volatile xdata *)0xfc4b) +#define PWM37CR (*(unsigned char volatile xdata *)0xfc4c) +#define PWM37HLD (*(unsigned char volatile xdata *)0xfc4d) +#define PWM4C (*(unsigned int volatile xdata *)0xfc50) +#define PWM4CH (*(unsigned char volatile xdata *)0xfc50) +#define PWM4CL (*(unsigned char volatile xdata *)0xfc51) +#define PWM4CKS (*(unsigned char volatile xdata *)0xfc52) +#define PWM4TADC (*(unsigned int volatile xdata *)0xfc53) +#define PWM4TADCH (*(unsigned char volatile xdata *)0xfc53) +#define PWM4TADCL (*(unsigned char volatile xdata *)0xfc54) +#define PWM4IF (*(unsigned char volatile xdata *)0xfc55) +#define PWM4FDCR (*(unsigned char volatile xdata *)0xfc56) +#define PWM40T1 (*(unsigned int volatile xdata *)0xfc60) +#define PWM40T1H (*(unsigned char volatile xdata *)0xfc60) +#define PWM40T1L (*(unsigned char volatile xdata *)0xfc61) +#define PWM40T2 (*(unsigned int volatile xdata *)0xfc62) +#define PWM40T2H (*(unsigned char volatile xdata *)0xfc62) +#define PWM40T2L (*(unsigned char volatile xdata *)0xfc63) +#define PWM40CR (*(unsigned char volatile xdata *)0xfc64) +#define PWM40HLD (*(unsigned char volatile xdata *)0xfc65) +#define PWM41T1 (*(unsigned int volatile xdata *)0xfc68) +#define PWM41T1H (*(unsigned char volatile xdata *)0xfc68) +#define PWM41T1L (*(unsigned char volatile xdata *)0xfc69) +#define PWM41T2 (*(unsigned int volatile xdata *)0xfc6a) +#define PWM41T2H (*(unsigned char volatile xdata *)0xfc6a) +#define PWM41T2L (*(unsigned char volatile xdata *)0xfc6b) +#define PWM41CR (*(unsigned char volatile xdata *)0xfc6c) +#define PWM41HLD (*(unsigned char volatile xdata *)0xfc6d) +#define PWM42T1 (*(unsigned int volatile xdata *)0xfc70) +#define PWM42T1H (*(unsigned char volatile xdata *)0xfc70) +#define PWM42T1L (*(unsigned char volatile xdata *)0xfc71) +#define PWM42T2 (*(unsigned int volatile xdata *)0xfc72) +#define PWM42T2H (*(unsigned char volatile xdata *)0xfc72) +#define PWM42T2L (*(unsigned char volatile xdata *)0xfc73) +#define PWM42CR (*(unsigned char volatile xdata *)0xfc74) +#define PWM42HLD (*(unsigned char volatile xdata *)0xfc75) +#define PWM43T1 (*(unsigned int volatile xdata *)0xfc78) +#define PWM43T1H (*(unsigned char volatile xdata *)0xfc78) +#define PWM43T1L (*(unsigned char volatile xdata *)0xfc79) +#define PWM43T2 (*(unsigned int volatile xdata *)0xfc7a) +#define PWM43T2H (*(unsigned char volatile xdata *)0xfc7a) +#define PWM43T2L (*(unsigned char volatile xdata *)0xfc7b) +#define PWM43CR (*(unsigned char volatile xdata *)0xfc7c) +#define PWM43HLD (*(unsigned char volatile xdata *)0xfc7d) +#define PWM44T1 (*(unsigned int volatile xdata *)0xfc80) +#define PWM44T1H (*(unsigned char volatile xdata *)0xfc80) +#define PWM44T1L (*(unsigned char volatile xdata *)0xfc81) +#define PWM44T2 (*(unsigned int volatile xdata *)0xfc82) +#define PWM44T2H (*(unsigned char volatile xdata *)0xfc82) +#define PWM44T2L (*(unsigned char volatile xdata *)0xfc83) +#define PWM44CR (*(unsigned char volatile xdata *)0xfc84) +#define PWM44HLD (*(unsigned char volatile xdata *)0xfc85) +#define PWM45T1 (*(unsigned int volatile xdata *)0xfc88) +#define PWM45T1H (*(unsigned char volatile xdata *)0xfc88) +#define PWM45T1L (*(unsigned char volatile xdata *)0xfc89) +#define PWM45T2 (*(unsigned int volatile xdata *)0xfc8a) +#define PWM45T2H (*(unsigned char volatile xdata *)0xfc8a) +#define PWM45T2L (*(unsigned char volatile xdata *)0xfc8b) +#define PWM45CR (*(unsigned char volatile xdata *)0xfc8c) +#define PWM45HLD (*(unsigned char volatile xdata *)0xfc8d) +#define PWM46T1 (*(unsigned int volatile xdata *)0xfc90) +#define PWM46T1H (*(unsigned char volatile xdata *)0xfc90) +#define PWM46T1L (*(unsigned char volatile xdata *)0xfc91) +#define PWM46T2 (*(unsigned int volatile xdata *)0xfc92) +#define PWM46T2H (*(unsigned char volatile xdata *)0xfc92) +#define PWM46T2L (*(unsigned char volatile xdata *)0xfc93) +#define PWM46CR (*(unsigned char volatile xdata *)0xfc94) +#define PWM46HLD (*(unsigned char volatile xdata *)0xfc95) +#define PWM47T1 (*(unsigned int volatile xdata *)0xfc98) +#define PWM47T1H (*(unsigned char volatile xdata *)0xfc98) +#define PWM47T1L (*(unsigned char volatile xdata *)0xfc99) +#define PWM47T2 (*(unsigned int volatile xdata *)0xfc9a) +#define PWM47T2H (*(unsigned char volatile xdata *)0xfc9a) +#define PWM47T2L (*(unsigned char volatile xdata *)0xfc9b) +#define PWM47CR (*(unsigned char volatile xdata *)0xfc9c) +#define PWM47HLD (*(unsigned char volatile xdata *)0xfc9d) +#define PWM5C (*(unsigned int volatile xdata *)0xfca0) +#define PWM5CH (*(unsigned char volatile xdata *)0xfca0) +#define PWM5CL (*(unsigned char volatile xdata *)0xfca1) +#define PWM5CKS (*(unsigned char volatile xdata *)0xfca2) +#define PWM5IF (*(unsigned char volatile xdata *)0xfca5) +#define PWM5FDCR (*(unsigned char volatile xdata *)0xfca6) +#define PWM50T1 (*(unsigned int volatile xdata *)0xfcb0) +#define PWM50T1H (*(unsigned char volatile xdata *)0xfcb0) +#define PWM50T1L (*(unsigned char volatile xdata *)0xfcb1) +#define PWM50T2 (*(unsigned int volatile xdata *)0xfcb2) +#define PWM50T2H (*(unsigned char volatile xdata *)0xfcb2) +#define PWM50T2L (*(unsigned char volatile xdata *)0xfcb3) +#define PWM50CR (*(unsigned char volatile xdata *)0xfcb4) +#define PWM50HLD (*(unsigned char volatile xdata *)0xfcb5) +#define PWM51T1 (*(unsigned int volatile xdata *)0xfcb8) +#define PWM51T1H (*(unsigned char volatile xdata *)0xfcb8) +#define PWM51T1L (*(unsigned char volatile xdata *)0xfcb9) +#define PWM51T2 (*(unsigned int volatile xdata *)0xfcba) +#define PWM51T2H (*(unsigned char volatile xdata *)0xfcba) +#define PWM51T2L (*(unsigned char volatile xdata *)0xfcbb) +#define PWM51CR (*(unsigned char volatile xdata *)0xfcbc) +#define PWM51HLD (*(unsigned char volatile xdata *)0xfcbd) +#define PWM52T1 (*(unsigned int volatile xdata *)0xfcc0) +#define PWM52T1H (*(unsigned char volatile xdata *)0xfcc0) +#define PWM52T1L (*(unsigned char volatile xdata *)0xfcc1) +#define PWM52T2 (*(unsigned int volatile xdata *)0xfcc2) +#define PWM52T2H (*(unsigned char volatile xdata *)0xfcc2) +#define PWM52T2L (*(unsigned char volatile xdata *)0xfcc3) +#define PWM52CR (*(unsigned char volatile xdata *)0xfcc4) +#define PWM52HLD (*(unsigned char volatile xdata *)0xfcc5) +#define PWM53T1 (*(unsigned int volatile xdata *)0xfcc8) +#define PWM53T1H (*(unsigned char volatile xdata *)0xfcc8) +#define PWM53T1L (*(unsigned char volatile xdata *)0xfcc9) +#define PWM53T2 (*(unsigned int volatile xdata *)0xfcca) +#define PWM53T2H (*(unsigned char volatile xdata *)0xfcca) +#define PWM53T2L (*(unsigned char volatile xdata *)0xfccb) +#define PWM53CR (*(unsigned char volatile xdata *)0xfccc) +#define PWM53HLD (*(unsigned char volatile xdata *)0xfccd) +#define PWM54T1 (*(unsigned int volatile xdata *)0xfcd0) +#define PWM54T1H (*(unsigned char volatile xdata *)0xfcd0) +#define PWM54T1L (*(unsigned char volatile xdata *)0xfcd1) +#define PWM54T2 (*(unsigned int volatile xdata *)0xfcd2) +#define PWM54T2H (*(unsigned char volatile xdata *)0xfcd2) +#define PWM54T2L (*(unsigned char volatile xdata *)0xfcd3) +#define PWM54CR (*(unsigned char volatile xdata *)0xfcd4) +#define PWM54HLD (*(unsigned char volatile xdata *)0xfcd5) +#define PWM55T1 (*(unsigned int volatile xdata *)0xfcd8) +#define PWM55T1H (*(unsigned char volatile xdata *)0xfcd8) +#define PWM55T1L (*(unsigned char volatile xdata *)0xfcd9) +#define PWM55T2 (*(unsigned int volatile xdata *)0xfcda) +#define PWM55T2H (*(unsigned char volatile xdata *)0xfcda) +#define PWM55T2L (*(unsigned char volatile xdata *)0xfcdb) +#define PWM55CR (*(unsigned char volatile xdata *)0xfcdc) +#define PWM55HLD (*(unsigned char volatile xdata *)0xfcdd) +#define PWM56T1 (*(unsigned int volatile xdata *)0xfce0) +#define PWM56T1H (*(unsigned char volatile xdata *)0xfce0) +#define PWM56T1L (*(unsigned char volatile xdata *)0xfce1) +#define PWM56T2 (*(unsigned int volatile xdata *)0xfce2) +#define PWM56T2H (*(unsigned char volatile xdata *)0xfce2) +#define PWM56T2L (*(unsigned char volatile xdata *)0xfce3) +#define PWM56CR (*(unsigned char volatile xdata *)0xfce4) +#define PWM56HLD (*(unsigned char volatile xdata *)0xfce5) +#define PWM57T1 (*(unsigned int volatile xdata *)0xfce8) +#define PWM57T1H (*(unsigned char volatile xdata *)0xfce8) +#define PWM57T1L (*(unsigned char volatile xdata *)0xfce9) +#define PWM57T2 (*(unsigned int volatile xdata *)0xfcea) +#define PWM57T2H (*(unsigned char volatile xdata *)0xfcea) +#define PWM57T2L (*(unsigned char volatile xdata *)0xfceb) +#define PWM57CR (*(unsigned char volatile xdata *)0xfcec) +#define PWM57HLD (*(unsigned char volatile xdata *)0xfced) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMSET = 0xF1H; ENGLBSET PWMRST ENPWM5 ENPWM4 ENPWM3 ENPWM2 ENPWM1 ENPWM0 0000,0000 /* 增强型PWM全局配置寄存器 */ +#define PWM15_SET_Uniform() PWMSET |= 0x80 //1:6组PWM采用统一的设置方式 +#define PWM15_SET_Independent() PWMSET &= ~0x80 //0:6组PWM采用各自独立的设置方式 + +#define PWM15_Reset() PWMSET |= 0x40 //1:复位所有PWM的XFR寄存器,SFR不变 + +#define PWM15_PWM5_Enable() PWMSET |= 0x20 //1:使能PWM5(包括 PWM50~PWM54)。 +#define PWM15_PWM5_Disable() PWMSET &= ~0x20 //0:关闭PWM5 + +#define PWM15_PWM4_Enable() PWMSET |= 0x10 //1:使能PWM4(包括 PWM40~PWM47)。 +#define PWM15_PWM4_Disable() PWMSET &= ~0x10 //0:关闭PWM4 + +#define PWM15_PWM3_Enable() PWMSET |= 0x08 //1:使能PWM3(包括 PWM30~PWM37)。 +#define PWM15_PWM3_Disable() PWMSET &= ~0x08 //0:关闭PWM3 + +#define PWM15_PWM2_Enable() PWMSET |= 0x04 //1:使能PWM2(包括 PWM20~PWM27)。 +#define PWM15_PWM2_Disable() PWMSET &= ~0x04 //0:关闭PWM2 + +#define PWM15_PWM1_Enable() PWMSET |= 0x02 //1:使能PWM1(包括 PWM10~PWM17)。 +#define PWM15_PWM1_Disable() PWMSET &= ~0x02 //0:关闭PWM1 + +#define PWM15_PWM0_Enable() PWMSET |= 0x01 //1:使能PWM0(包括 PWM00~PWM07)。 +#define PWM15_PWM0_Disable() PWMSET &= ~0x01 //0:关闭PWM0 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMCFG01= 0xF6H; PWM1CBIF EPWM1CBI FLTPS0 PWM1CEN PWM0CBIF EPWM0CBI ENPWM0TA PWM0CEN 0000,0000 /* 增强型PWM配置寄存器 */ +//sfr PWMCFG23= 0xF7H; PWM3CBIF EPWM3CBI FLTPS1 PWM3CEN PWM2CBIF EPWM2CBI ENPWM2TA PWM2CEN 0000,0000 /* 增强型PWM配置寄存器 */ +//sfr PWMCFG45= 0xFEH; PWM5CBIF EPWM5CBI FLTPS2 PWM5CEN PWM4CBIF EPWM4CBI ENPWM4TA PWM4CEN 0000,0000 /* 增强型PWM配置寄存器 */ +#define PWM1CBIF 0x80 +#define PWM0CBIF 0x08 +#define FLTPSn 0x20 + +#define PWM15_Counter1Int_Enable() PWMCFG01 |= 0x40 //1:使能计数器归零中断 +#define PWM15_Counter1Int_Disable() PWMCFG01 &= ~0x40 //0:关闭计数器归零中断 +#define PWM15_Counter1_Enable() PWMCFG01 |= 0x10 //1:使能计数器 +#define PWM15_Counter1_Disable() PWMCFG01 &= ~0x10 //0:关闭计数器 +#define PWM15_Counter0Int_Enable() PWMCFG01 |= 0x04 //1:使能计数器归零中断 +#define PWM15_Counter0Int_Disable() PWMCFG01 &= ~0x04 //0:关闭计数器归零中断 +#define PWM15_Counter0_Enable() PWMCFG01 |= 0x01 //1:使能计数器 +#define PWM15_Counter0_Disable() PWMCFG01 &= ~0x01 //0:关闭计数器 +#define PWM15_PWM0_ADC_Enable() PWMCFG01 |= 0x02 //1:PWM与ADC相关联 +#define PWM15_PWM0_ADC_Disable() PWMCFG01 &= ~0x02 //0:PWM与ADC不关联 + +#define PWM15_Counter3Int_Enable() PWMCFG23 |= 0x40 //1:使能计数器归零中断 +#define PWM15_Counter3Int_Disable() PWMCFG23 &= ~0x40 //0:关闭计数器归零中断 +#define PWM15_Counter3_Enable() PWMCFG23 |= 0x10 //1:使能计数器 +#define PWM15_Counter3_Disable() PWMCFG23 &= ~0x10 //0:关闭计数器 +#define PWM15_Counter2Int_Enable() PWMCFG23 |= 0x04 //1:使能计数器归零中断 +#define PWM15_Counter2Int_Disable() PWMCFG23 &= ~0x04 //0:关闭计数器归零中断 +#define PWM15_Counter2_Enable() PWMCFG23 |= 0x01 //1:使能计数器 +#define PWM15_Counter2_Disable() PWMCFG23 &= ~0x01 //0:关闭计数器 +#define PWM15_PWM2_ADC_Enable() PWMCFG23 |= 0x02 //1:PWM与ADC相关联 +#define PWM15_PWM2_ADC_Disable() PWMCFG23 &= ~0x02 //0:PWM与ADC不关联 + +#define PWM15_Counter5Int_Enable() PWMCFG45 |= 0x40 //1:使能计数器归零中断 +#define PWM15_Counter5Int_Disable() PWMCFG45 &= ~0x40 //0:关闭计数器归零中断 +#define PWM15_Counter5_Enable() PWMCFG45 |= 0x10 //1:使能计数器 +#define PWM15_Counter5_Disable() PWMCFG45 &= ~0x10 //0:关闭计数器 +#define PWM15_Counter4Int_Enable() PWMCFG45 |= 0x04 //1:使能计数器归零中断 +#define PWM15_Counter4Int_Disable() PWMCFG45 &= ~0x04 //0:关闭计数器归零中断 +#define PWM15_Counter4_Enable() PWMCFG45 |= 0x01 //1:使能计数器 +#define PWM15_Counter4_Disable() PWMCFG45 &= ~0x01 //0:关闭计数器 +#define PWM15_PWM4_ADC_Enable() PWMCFG45 |= 0x02 //1:PWM与ADC相关联 +#define PWM15_PWM4_ADC_Disable() PWMCFG45 &= ~0x02 //0:PWM与ADC不关联 + +/* PWMnIF */ +#define C7IF = (1<<7) +#define C6IF = (1<<6) +#define C5IF = (1<<5) +#define C4IF = (1<<4) +#define C3IF = (1<<3) +#define C2IF = (1<<2) +#define C1IF = (1<<1) +#define C0IF = 1 + +/* PWMnFDCR */ +#define INVCMP = (1<<7) +#define INVIO = (1<<6) +#define ENFD = (1<<5) +#define FLTFLIO = (1<<4) +#define EFDI = (1<<3) +#define FDCMP = (1<<2) +#define FDIO = (1<<1) +#define FDIF = 1 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWM0CKS = 0xFF02H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* 增强型PWM时钟选择存器 */ +//sfr PWM1CKS = 0xFF52H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* 增强型PWM时钟选择存器 */ +//sfr PWM2CKS = 0xFFA2H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* 增强型PWM时钟选择存器 */ +//sfr PWM3CKS = 0xFC02H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* 增强型PWM时钟选择存器 */ +//sfr PWM4CKS = 0xFC52H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* 增强型PWM时钟选择存器 */ +//sfr PWM5CKS = 0xFCA2H; - - - SELT2 PWM_PS[3:0] xxx0,0000 /* 增强型PWM时钟选择存器 */ +#define PWM0_PS_Clock() PWM0CKS &= ~0x10 //0:PWMn时钟源为系统时钟分频后的时钟 +#define PWM0_T2_Clock() PWM0CKS |= 0x10 //1:PWMn时钟源为定时器2的溢出脉冲 +#define PWM0_PS_Set(n) PWM0CKS = (PWM0CKS & ~0x0F) | (n & 0x0F) //系统时钟预分频参数设置:SYSclk / (PWM_PS+1) +#define PWM1_PS_Clock() PWM1CKS &= ~0x10 //0:PWMn时钟源为系统时钟分频后的时钟 +#define PWM1_T2_Clock() PWM1CKS |= 0x10 //1:PWMn时钟源为定时器2的溢出脉冲 +#define PWM1_PS_Set(n) PWM1CKS = (PWM1CKS & ~0x0F) | (n & 0x0F) //系统时钟预分频参数设置:SYSclk / (PWM_PS+1) +#define PWM2_PS_Clock() PWM2CKS &= ~0x10 //0:PWMn时钟源为系统时钟分频后的时钟 +#define PWM2_T2_Clock() PWM2CKS |= 0x10 //1:PWMn时钟源为定时器2的溢出脉冲 +#define PWM2_PS_Set(n) PWM2CKS = (PWM2CKS & ~0x0F) | (n & 0x0F) //系统时钟预分频参数设置:SYSclk / (PWM_PS+1) +#define PWM3_PS_Clock() PWM3CKS &= ~0x10 //0:PWMn时钟源为系统时钟分频后的时钟 +#define PWM3_T2_Clock() PWM3CKS |= 0x10 //1:PWMn时钟源为定时器2的溢出脉冲 +#define PWM3_PS_Set(n) PWM3CKS = (PWM3CKS & ~0x0F) | (n & 0x0F) //系统时钟预分频参数设置:SYSclk / (PWM_PS+1) +#define PWM4_PS_Clock() PWM4CKS &= ~0x10 //0:PWMn时钟源为系统时钟分频后的时钟 +#define PWM4_T2_Clock() PWM4CKS |= 0x10 //1:PWMn时钟源为定时器2的溢出脉冲 +#define PWM4_PS_Set(n) PWM4CKS = (PWM4CKS & ~0x0F) | (n & 0x0F) //系统时钟预分频参数设置:SYSclk / (PWM_PS+1) +#define PWM5_PS_Clock() PWM5CKS &= ~0x10 //0:PWMn时钟源为系统时钟分频后的时钟 +#define PWM5_T2_Clock() PWM5CKS |= 0x10 //1:PWMn时钟源为定时器2的溢出脉冲 +#define PWM5_PS_Set(n) PWM5CKS = (PWM5CKS & ~0x0F) | (n & 0x0F) //系统时钟预分频参数设置:SYSclk / (PWM_PS+1) + +/* PWMnTADC */ +#define PWM15_PWM0TADC(n) PWM0TADC = (n & 0x7fff) //PWM触发ADC时间点 +#define PWM15_PWM2TADC(n) PWM2TADC = (n & 0x7fff) //PWM触发ADC时间点 +#define PWM15_PWM4TADC(n) PWM4TADC = (n & 0x7fff) //PWM触发ADC时间点 + +/* PWMnTADC */ +#define PWM15_PWM0TADC(n) PWM0TADC = (n & 0x7fff) //PWM触发ADC时间点 + + +/* BIT Registers */ +/* PSW */ +sbit CY = PSW^7; +sbit AC = PSW^6; +sbit F0 = PSW^5; +sbit RS1 = PSW^4; +sbit RS0 = PSW^3; +sbit OV = PSW^2; +sbit F1 = PSW^1; +sbit P = PSW^0; + +/* TCON */ +sbit TF1 = TCON^7; //定时器1溢出中断标志位 +sbit TR1 = TCON^6; //定时器1运行控制位 +sbit TF0 = TCON^5; //定时器0溢出中断标志位 +sbit TR0 = TCON^4; //定时器0运行控制位 +sbit IE1 = TCON^3; //外中断1标志位 +sbit IT1 = TCON^2; //外中断1信号方式控制位,1:下降沿中断,0:上升下降均中断。 +sbit IE0 = TCON^1; //外中断0标志位 +sbit IT0 = TCON^0; //外中断0信号方式控制位,1:下降沿中断,0:上升下降均中断。 + +/* P0 */ +sbit P00 = P0^0; +sbit P01 = P0^1; +sbit P02 = P0^2; +sbit P03 = P0^3; +sbit P04 = P0^4; +sbit P05 = P0^5; +sbit P06 = P0^6; +sbit P07 = P0^7; + +/* P1 */ +sbit P10 = P1^0; +sbit P11 = P1^1; +sbit P12 = P1^2; +sbit P13 = P1^3; +sbit P14 = P1^4; +sbit P15 = P1^5; +sbit P16 = P1^6; +sbit P17 = P1^7; + +sbit RXD2 = P1^0; +sbit TXD2 = P1^1; +sbit CCP1 = P1^0; +sbit CCP0 = P1^1; +sbit SPI_SS = P1^2; +sbit SPI_MOSI = P1^3; +sbit SPI_MISO = P1^4; +sbit SPI_SCLK = P1^5; + +sbit SPI_SS_2 = P2^2; +sbit SPI_MOSI_2 = P2^3; +sbit SPI_MISO_2 = P2^4; +sbit SPI_SCLK_2 = P2^5; + +sbit SPI_SS_3 = P5^4; +sbit SPI_MOSI_3 = P4^0; +sbit SPI_MISO_3 = P4^1; +sbit SPI_SCLK_3 = P4^3; + +sbit SPI_SS_4 = P3^5; +sbit SPI_MOSI_4 = P3^4; +sbit SPI_MISO_4 = P3^3; +sbit SPI_SCLK_4 = P3^2; + +/* P2 */ +sbit P20 = P2^0; +sbit P21 = P2^1; +sbit P22 = P2^2; +sbit P23 = P2^3; +sbit P24 = P2^4; +sbit P25 = P2^5; +sbit P26 = P2^6; +sbit P27 = P2^7; + +/* P3 */ +sbit P30 = P3^0; +sbit P31 = P3^1; +sbit P32 = P3^2; +sbit P33 = P3^3; +sbit P34 = P3^4; +sbit P35 = P3^5; +sbit P36 = P3^6; +sbit P37 = P3^7; + +sbit RXD = P3^0; +sbit TXD = P3^1; +sbit INT0 = P3^2; +sbit INT1 = P3^3; +sbit T0 = P3^4; +sbit T1 = P3^5; +sbit WR = P3^6; +sbit RD = P3^7; + +sbit INT2 = P3^6; +sbit INT3 = P3^7; +sbit INT4 = P3^0; +sbit CCP2 = P3^7; + +sbit CLKOUT0 = P3^5; +sbit CLKOUT1 = P3^4; + +/* P4 */ +sbit P40 = P4^0; +sbit P41 = P4^1; +sbit P42 = P4^2; +sbit P43 = P4^3; +sbit P44 = P4^4; +sbit P45 = P4^5; +sbit P46 = P4^6; +sbit P47 = P4^7; + +/* P5 */ +sbit P50 = P5^0; +sbit P51 = P5^1; +sbit P52 = P5^2; +sbit P53 = P5^3; +sbit P54 = P5^4; +sbit P55 = P5^5; +sbit P56 = P5^6; +sbit P57 = P5^7; + +/* P6 */ +sbit P60 = P6^0; +sbit P61 = P6^1; +sbit P62 = P6^2; +sbit P63 = P6^3; +sbit P64 = P6^4; +sbit P65 = P6^5; +sbit P66 = P6^6; +sbit P67 = P6^7; + +/* P7 */ +sbit P70 = P7^0; +sbit P71 = P7^1; +sbit P72 = P7^2; +sbit P73 = P7^3; +sbit P74 = P7^4; +sbit P75 = P7^5; +sbit P76 = P7^6; +sbit P77 = P7^7; + + +/* SCON */ +sbit SM0 = SCON^7; //SM0/FE SM0 SM1 = 00 ~ 11: 方式0~3 +sbit SM1 = SCON^6; // +sbit SM2 = SCON^5; //多机通讯 +sbit REN = SCON^4; //接收允许 +sbit TB8 = SCON^3; //发送数据第8位 +sbit RB8 = SCON^2; //接收数据第8位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + +/* IE */ +sbit EA = IE^7; //中断允许总控制位 +sbit ELVD = IE^6; //低压监测中断允许位 +sbit EADC = IE^5; //ADC 中断 允许位 +sbit ES = IE^4; //串行中断 允许控制位 +sbit ET1 = IE^3; //定时中断1允许控制位 +sbit EX1 = IE^2; //外部中断1允许控制位 +sbit ET0 = IE^1; //定时中断0允许控制位 +sbit EX0 = IE^0; //外部中断0允许控制位 + +sbit ACC0 = ACC^0; +sbit ACC1 = ACC^1; +sbit ACC2 = ACC^2; +sbit ACC3 = ACC^3; +sbit ACC4 = ACC^4; +sbit ACC5 = ACC^5; +sbit ACC6 = ACC^6; +sbit ACC7 = ACC^7; + +sbit B0 = B^0; +sbit B1 = B^1; +sbit B2 = B^2; +sbit B3 = B^3; +sbit B4 = B^4; +sbit B5 = B^5; +sbit B6 = B^6; +sbit B7 = B^7; + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IE2 = 0xAF; ETKSUI ET4 ET3 ES4 ES3 ET2 ESPI ES2 x000,0000B //Auxiliary Interrupt +#define SPI_INT_ENABLE() IE2 |= 2 /* 允许SPI中断 */ +#define SPI_INT_DISABLE() IE2 &= ~2 /* 允许SPI中断 */ +#define UART2_INT_ENABLE() IE2 |= 1 /* 允许串口2中断 */ +#define UART2_INT_DISABLE() IE2 &= ~1 /* 允许串口2中断 */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP2 = 0xB5; // PPWM2FD PI2C PCMP PX4 PPWM0FD PPWM0 PSPI PS2 0000,0000 +#define PUSB 0x80 +#define PPWM2FD 0x80 +#define PTKSU 0x80 +#define PI2C 0x40 +#define PCMP 0x20 +#define PX4 0x10 +#define PPWM0FD 0x08 +#define PPWM0 0x04 +#define PSPI 0x02 +#define PS2 0x01 +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP2H = 0xB6; // PPWM2FDH PI2CH PCMPH PX4H PPWM0FDH PPWM0H PSPIH PS2H 0000,0000 +#define PUSBH 0x80 +#define PPWM2FDH 0x80 +#define PTKSUH 0x80 +#define PI2CH 0x40 +#define PCMPH 0x20 +#define PX4H 0x10 +#define PPWM0FDH 0x08 +#define PPWM0H 0x04 +#define PSPIH 0x02 +#define PS2H 0x01 + +//串口2中断优先级控制 +#define UART2_Priority(n) do{if(n == 0) IP2H &= ~PS2H, IP2 &= ~PS2; \ + if(n == 1) IP2H &= ~PS2H, IP2 |= PS2; \ + if(n == 2) IP2H |= PS2H, IP2 &= ~PS2; \ + if(n == 3) IP2H |= PS2H, IP2 |= PS2; \ + }while(0) +//SPI中断优先级控制 +#define SPI_Priority(n) do{if(n == 0) IP2H &= ~PSPIH, IP2 &= ~PSPI; \ + if(n == 1) IP2H &= ~PSPIH, IP2 |= PSPI; \ + if(n == 2) IP2H |= PSPIH, IP2 &= ~PSPI; \ + if(n == 3) IP2H |= PSPIH, IP2 |= PSPI; \ + }while(0) +//外部中断4中断优先级控制 +#define INT4_Priority(n) do{if(n == 0) IP2H &= ~PX4H, IP2 &= ~PX4; \ + if(n == 1) IP2H &= ~PX4H, IP2 |= PX4; \ + if(n == 2) IP2H |= PX4H, IP2 &= ~PX4; \ + if(n == 3) IP2H |= PX4H, IP2 |= PX4; \ + }while(0) +//比较器中断优先级控制 +#define CMP_Priority(n) do{if(n == 0) IP2H &= ~PCMPH, IP2 &= ~PCMP; \ + if(n == 1) IP2H &= ~PCMPH, IP2 |= PCMP; \ + if(n == 2) IP2H |= PCMPH, IP2 &= ~PCMP; \ + if(n == 3) IP2H |= PCMPH, IP2 |= PCMP; \ + }while(0) +//I2C中断优先级控制 +#define I2C_Priority(n) do{if(n == 0) IP2H &= ~PI2CH, IP2 &= ~PI2C; \ + if(n == 1) IP2H &= ~PI2CH, IP2 |= PI2C; \ + if(n == 2) IP2H |= PI2CH, IP2 &= ~PI2C; \ + if(n == 3) IP2H |= PI2CH, IP2 |= PI2C; \ + }while(0) +//增强型PWM0中断优先级控制 +#define PWM0_Priority(n) do{if(n == 0) IP2H &= ~PPWM0H, IP2 &= ~PPWM0; \ + if(n == 1) IP2H &= ~PPWM0H, IP2 |= PPWM0; \ + if(n == 2) IP2H |= PPWM0H, IP2 &= ~PPWM0; \ + if(n == 3) IP2H |= PPWM0H, IP2 |= PPWM0; \ + }while(0) +//增强型PWM0异常检测中断优先级控制 +#define PWM0FD_Priority(n) do{if(n == 0) IP2H &= ~PPWM0FDH, IP2 &= ~PPWM0FD; \ + if(n == 1) IP2H &= ~PPWM0FDH, IP2 |= PPWM0FD; \ + if(n == 2) IP2H |= PPWM0FDH, IP2 &= ~PPWM0FD; \ + if(n == 3) IP2H |= PPWM0FDH, IP2 |= PPWM0FD; \ + }while(0) +//增强型PWM2异常检测中断优先级控制 +#define PWM2FD_Priority(n) do{if(n == 0) IP2H &= ~PPWM2FDH, IP2 &= ~PPWM2FD; \ + if(n == 1) IP2H &= ~PPWM2FDH, IP2 |= PPWM2FD; \ + if(n == 2) IP2H |= PPWM2FDH, IP2 &= ~PPWM2FD; \ + if(n == 3) IP2H |= PPWM2FDH, IP2 |= PPWM2FD; \ + }while(0) +//触摸按键中断优先级控制 +#define PTKSU_Priority(n) do{if(n == 0) IP2H &= ~PTKSUH, IP2 &= ~PTKSU; \ + if(n == 1) IP2H &= ~PTKSUH, IP2 |= PTKSU; \ + if(n == 2) IP2H |= PTKSUH, IP2 &= ~PTKSU; \ + if(n == 3) IP2H |= PTKSUH, IP2 |= PTKSU; \ + }while(0) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP3 = 0xDF; // PPWM4FD PPWM5 PPWM4 PPWM3 PPWM2 PPWM1 PS4 PS3 0000,0000 +#define PPWM4FD 0x80 +#define PPWM5 0x40 +#define PPWM4 0x20 +#define PPWM3 0x10 +#define PPWM2 0x08 +#define PPWM1 0x04 +#define PRTC 0x04 +#define PS4 0x02 +#define PS3 0x01 +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP3H = 0xEE; // PPWM4FDH PPWM5H PPWM4H PPWM3H PPWM2H PPWM1H PS4H PS3H 0000,0000 +#define PPWM4FDH 0x80 +#define PPWM5H 0x40 +#define PPWM4H 0x20 +#define PPWM3H 0x10 +#define PPWM2H 0x08 +#define PPWM1H 0x04 +#define PRTCH 0x04 +#define PS4H 0x02 +#define PS3H 0x01 + +#ifdef STC8Hxx + +//增强型PWM1中断优先级控制 +#define PWM1_Priority(n) do{if(n == 0) IP2H &= ~PPWM1H, IP2 &= ~PPWM1; \ + if(n == 1) IP2H &= ~PPWM1H, IP2 |= PPWM1; \ + if(n == 2) IP2H |= PPWM1H, IP2 &= ~PPWM1; \ + if(n == 3) IP2H |= PPWM1H, IP2 |= PPWM1; \ + }while(0) +//增强型PWM2中断优先级控制 +#define PWM2_Priority(n) do{if(n == 0) IP2H &= ~PPWM2H, IP2 &= ~PPWM2; \ + if(n == 1) IP2H &= ~PPWM2H, IP2 |= PPWM2; \ + if(n == 2) IP2H |= PPWM2H, IP2 &= ~PPWM2; \ + if(n == 3) IP2H |= PPWM2H, IP2 |= PPWM2; \ + }while(0) +//USB中断优先级控制 +#define USB_Priority(n) do{if(n == 0) IP2H &= ~PUSBH, IP2 &= ~PUSB; \ + if(n == 1) IP2H &= ~PUSBH, IP2 |= PUSB; \ + if(n == 2) IP2H |= PUSBH, IP2 &= ~PUSB; \ + if(n == 3) IP2H |= PUSBH, IP2 |= PUSB; \ + }while(0) +//RTC中断优先级控制 +#define RTC_Priority(n) do{if(n == 0) IP3H &= ~PRTCH, IP3 &= ~PRTC; \ + if(n == 1) IP3H &= ~PRTCH, IP3 |= PRTC; \ + if(n == 2) IP3H |= PRTCH, IP3 &= ~PRTC; \ + if(n == 3) IP3H |= PRTCH, IP3 |= PRTC; \ + }while(0) +#else + +//增强型PWM1中断优先级控制 +#define PWM1_Priority(n) do{if(n == 0) IP3H &= ~PPWM1H, IP3 &= ~PPWM1; \ + if(n == 1) IP3H &= ~PPWM1H, IP3 |= PPWM1; \ + if(n == 2) IP3H |= PPWM1H, IP3 &= ~PPWM1; \ + if(n == 3) IP3H |= PPWM1H, IP3 |= PPWM1; \ + }while(0) +//增强型PWM2中断优先级控制 +#define PWM2_Priority(n) do{if(n == 0) IP3H &= ~PPWM2H, IP3 &= ~PPWM2; \ + if(n == 1) IP3H &= ~PPWM2H, IP3 |= PPWM2; \ + if(n == 2) IP3H |= PPWM2H, IP3 &= ~PPWM2; \ + if(n == 3) IP3H |= PPWM2H, IP3 |= PPWM2; \ + }while(0) + +#endif + +//增强型PWM3中断优先级控制 +#define PWM3_Priority(n) do{if(n == 0) IP3H &= ~PPWM3H, IP3 &= ~PPWM3; \ + if(n == 1) IP3H &= ~PPWM3H, IP3 |= PPWM3; \ + if(n == 2) IP3H |= PPWM3H, IP3 &= ~PPWM3; \ + if(n == 3) IP3H |= PPWM3H, IP3 |= PPWM3; \ + }while(0) +//增强型PWM4中断优先级控制 +#define PWM4_Priority(n) do{if(n == 0) IP3H &= ~PPWM4H, IP3 &= ~PPWM4; \ + if(n == 1) IP3H &= ~PPWM4H, IP3 |= PPWM4; \ + if(n == 2) IP3H |= PPWM4H, IP3 &= ~PPWM4; \ + if(n == 3) IP3H |= PPWM4H, IP3 |= PPWM4; \ + }while(0) +//增强型PWM5中断优先级控制 +#define PWM5_Priority(n) do{if(n == 0) IP3H &= ~PPWM5H, IP3 &= ~PPWM5; \ + if(n == 1) IP3H &= ~PPWM5H, IP3 |= PPWM5; \ + if(n == 2) IP3H |= PPWM5H, IP3 &= ~PPWM5; \ + if(n == 3) IP3H |= PPWM5H, IP3 |= PPWM5; \ + }while(0) +//增强型PWM4异常检测中断优先级控制 +#define PWM4FD_Priority(n) do{if(n == 0) IP3H &= ~PPWM4FDH, IP3 &= ~PPWM4FD; \ + if(n == 1) IP3H &= ~PPWM4FDH, IP3 |= PPWM4FD; \ + if(n == 2) IP3H |= PPWM4FDH, IP3 &= ~PPWM4FD; \ + if(n == 3) IP3H |= PPWM4FDH, IP3 |= PPWM4FD; \ + }while(0) +//串口3中断优先级控制 +#define UART3_Priority(n) do{if(n == 0) IP3H &= ~PS3H, IP3 &= ~PS3; \ + if(n == 1) IP3H &= ~PS3H, IP3 |= PS3; \ + if(n == 2) IP3H |= PS3H, IP3 &= ~PS3; \ + if(n == 3) IP3H |= PS3H, IP3 |= PS3; \ + }while(0) +//串口4中断优先级控制 +#define UART4_Priority(n) do{if(n == 0) IP3H &= ~PS4H, IP3 &= ~PS4; \ + if(n == 1) IP3H &= ~PS4H, IP3 |= PS4; \ + if(n == 2) IP3H |= PS4H, IP3 &= ~PS4; \ + if(n == 3) IP3H |= PS4H, IP3 |= PS4; \ + }while(0) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IP = 0xB8; //中断优先级低位 PPCA PLVD PADC PS PT1 PX1 PT0 PX0 0000,0000 +//-------- +sbit PPCA = IP^7; //PCA 模块中断优先级 +sbit PLVD = IP^6; //低压监测中断优先级 +sbit PADC = IP^5; //ADC 中断优先级 +sbit PS = IP^4; //串行中断0优先级设定位 +sbit PT1 = IP^3; //定时中断1优先级设定位 +sbit PX1 = IP^2; //外部中断1优先级设定位 +sbit PT0 = IP^1; //定时中断0优先级设定位 +sbit PX0 = IP^0; //外部中断0优先级设定位 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IPH = 0xB7; //中断优先级高位 PPCAH PLVDH PADCH PSH PT1H PX1H PT0H PX0H 0000,0000 +#define PPCAH 0x80 +#define PLVDH 0x40 +#define PADCH 0x20 +#define PSH 0x10 +#define PT1H 0x08 +#define PX1H 0x04 +#define PT0H 0x02 +#define PX0H 0x01 + +//外部中断0中断优先级控制 +#define INT0_Priority(n) do{if(n == 0) IPH &= ~PX0H, PX0 = 0; \ + if(n == 1) IPH &= ~PX0H, PX0 = 1; \ + if(n == 2) IPH |= PX0H, PX0 = 0; \ + if(n == 3) IPH |= PX0H, PX0 = 1; \ + }while(0) +//外部中断1中断优先级控制 +#define INT1_Priority(n) do{if(n == 0) IPH &= ~PX1H, PX1 = 0; \ + if(n == 1) IPH &= ~PX1H, PX1 = 1; \ + if(n == 2) IPH |= PX1H, PX1 = 0; \ + if(n == 3) IPH |= PX1H, PX1 = 1; \ + }while(0) +//定时器0中断优先级控制 +#define Timer0_Priority(n) do{if(n == 0) IPH &= ~PT0H, PT0 = 0; \ + if(n == 1) IPH &= ~PT0H, PT0 = 1; \ + if(n == 2) IPH |= PT0H, PT0 = 0; \ + if(n == 3) IPH |= PT0H, PT0 = 1; \ + }while(0) +//定时器1中断优先级控制 +#define Timer1_Priority(n) do{if(n == 0) IPH &= ~PT1H, PT1 = 0; \ + if(n == 1) IPH &= ~PT1H, PT1 = 1; \ + if(n == 2) IPH |= PT1H, PT1 = 0; \ + if(n == 3) IPH |= PT1H, PT1 = 1; \ + }while(0) +//串口1中断优先级控制 +#define UART1_Priority(n) do{if(n == 0) IPH &= ~PSH, PS = 0; \ + if(n == 1) IPH &= ~PSH, PS = 1; \ + if(n == 2) IPH |= PSH, PS = 0; \ + if(n == 3) IPH |= PSH, PS = 1; \ + }while(0) +//ADC中断优先级控制 +#define ADC_Priority(n) do{if(n == 0) IPH &= ~PADCH, PADC = 0; \ + if(n == 1) IPH &= ~PADCH, PADC = 1; \ + if(n == 2) IPH |= PADCH, PADC = 0; \ + if(n == 3) IPH |= PADCH, PADC = 1; \ + }while(0) +//低压检测中断优先级控制 +#define LVD_Priority(n) do{if(n == 0) IPH &= ~PLVDH, PADC = 0; \ + if(n == 1) IPH &= ~PLVDH, PADC = 1; \ + if(n == 2) IPH |= PLVDH, PADC = 0; \ + if(n == 3) IPH |= PLVDH, PADC = 1; \ + }while(0) +//CCP/PCA/PWM中断优先级控制 +#define PCA_Priority(n) do{if(n == 0) IPH &= ~PPCAH, PPCA = 0; \ + if(n == 1) IPH &= ~PPCAH, PPCA = 1; \ + if(n == 2) IPH |= PPCAH, PPCA = 0; \ + if(n == 3) IPH |= PPCAH, PPCA = 1; \ + }while(0) + +//#define PCA_InterruptFirst() PPCA = 1 +//#define LVD_InterruptFirst() PLVD = 1 +//#define ADC_InterruptFirst() PADC = 1 +//#define UART1_InterruptFirst() PS = 1 +//#define Timer1_InterruptFirst() PT1 = 1 +//#define INT1_InterruptFirst() PX1 = 1 +//#define Timer0_InterruptFirst() PT0 = 1 +//#define INT0_InterruptFirst() PX0 = 1 + + +/*************************************************************************************************/ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMPCR1 = 0xE6; CMPEN CMPIF PIE NIE PIS NIS CMPOE CMPRES 00000000B +#define CMPEN 0x80 //1: 允许比较器, 0: 禁止,关闭比较器电源 +#define CMPIF 0x40 //比较器中断标志, 包括上升沿或下降沿中断, 软件清0 +#define PIE 0x20 //1: 比较结果由0变1, 产生上升沿中断 +#define NIE 0x10 //1: 比较结果由1变0, 产生下降沿中断 +#define PIS 0x08 //输入正极性选择, 0: 选择内部P3.7做正输入, 1: 由ADC_CHS[3:0]所选择的ADC输入端做正输入. +#define NIS 0x04 //输入负极性选择, 0: 选择内部BandGap电压BGv做负输入, 1: 选择外部P3.6做输入. +#define CMPOE 0x02 //1: 允许比较结果输出, 0: 禁止. +#define CMPRES 0x01 //比较结果, 1: CMP+电平高于CMP-, 0: CMP+电平低于CMP-, 只读 + +#define CMP_P_P37 0x00 //输入正极性选择, 0: 选择内部P3.7做正输入 +#define CMP_P_ADC 0x08 //输入正极性选择, 1: 由ADC_CHS[3:0]所选择的ADC输入端做正输入. +#define CMP_N_GAP 0x00 //输入负极性选择, 0: 选择内部BandGap电压BGv做负输入. +#define CMP_N_P36 0x04 //输入负极性选择, 1: 选择外部P3.6做输入. + +#define CMPO_P34() P_SW2 &= ~0x08 //结果输出到P3.4. +#define CMPO_P41() P_SW2 |= 0x08 //结果输出到P4.1. + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMPCR2 = 0xE7; INVCMPO DISFLT LCDTY[5:0] 00001001B +#define INVCMPO 0x80 //1: 比较器输出IO取反, 0: 不取反 +#define DISFLT 0x40 //1: 关闭0.1uF滤波, 0: 允许 +#define LCDTY 0x00 //0~63, 比较结果变化延时周期数 + + + +/*************************************************************************************************/ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr SCON = 0x98; SM0 SM1 SM2 REN TB8 RB8 TI RI 00000000B //S1 Control + +#define S1_DoubleRate() PCON |= 0x80 +#define S1_SHIFT() SCON &= 0x3f + +#define S1_8bit() SCON = (SCON & 0x3f) | 0x40 +#define S1_9bit() SCON = (SCON & 0x3f) | 0xc0 +#define S1_RX_Enable() SCON |= 0x10 +#define S1_RX_Disable() SCON &= ~0x10 +#define TI1 TI /* 判断TI1是否发送完成 */ +#define RI1 RI /* 判断RI1是否接收完成 */ +#define SET_TI1() TI = 1 /* 设置TI1(引起中断) */ +#define CLR_TI1() TI = 0 /* 清除TI1 */ +#define CLR_RI1() RI = 0 /* 清除RI1 */ +#define S1TB8_SET() TB8 = 1 /* 设置TB8 */ +#define S1TB8_CLR() TB8 = 0 /* 清除TB8 */ +#define S1_Int_Enable() ES = 1 /* 串口1允许中断 */ +#define S1_Int_Disable() ES = 0 /* 串口1禁止中断 */ +#define S1_BRT_UseTimer1() AUXR &= ~1 +#define S1_BRT_UseTimer2() AUXR |= 1 +#define S1_USE_P30P31() P_SW1 &= ~0xc0 //UART1 使用P30 P31口 默认 +#define S1_USE_P36P37() P_SW1 = (P_SW1 & ~0xc0) | 0x40 //UART1 使用P36 P37口 +#define S1_USE_P16P17() P_SW1 = (P_SW1 & ~0xc0) | 0x80 //UART1 使用P16 P17口 +#define S1_USE_P43P44() P_SW1 |= 0xc0 //UART1 使用P43 P44口 +//#define S1_TXD_RXD_SHORT() PCON2 |= (1<<4) //将TXD与RXD连接中继输出 +//#define S1_TXD_RXD_OPEN() PCON2 &= ~(1<<4) //将TXD与RXD连接中继断开 默认 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S2CON = 0x9A; S2SM0 - S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B //S2 Control + +#define S2_MODE0() S2CON &= ~(1<<7) /* 串口2模式0,8位UART,波特率 = 定时器2的溢出率 / 4 */ +#define S2_MODE1() S2CON |= (1<<7) /* 串口2模式1,9位UART,波特率 = 定时器2的溢出率 / 4 */ +#define S2_8bit() S2CON &= ~(1<<7) /* 串口2模式0,8位UART,波特率 = 定时器2的溢出率 / 4 */ +#define S2_9bit() S2CON |= (1<<7) /* 串口2模式1,9位UART,波特率 = 定时器2的溢出率 / 4 */ +#define S2_RX_Enable() S2CON |= (1<<4) /* 允许串2接收 */ +#define S2_RX_Disable() S2CON &= ~(1<<4) /* 禁止串2接收 */ +#define TI2 (S2CON & 2) /* 判断TI2是否发送完成 */ +#define RI2 (S2CON & 1) /* 判断RI2是否接收完成 */ +#define SET_TI2() S2CON |= (1<<1) /* 设置TI2(引起中断) */ +#define CLR_TI2() S2CON &= ~(1<<1) /* 清除TI2 */ +#define CLR_RI2() S2CON &= ~1 /* 清除RI2 */ +#define S2TB8_SET() S2CON |= (1<<3) /* 设置TB8 */ +#define S2TB8_CLR() S2CON &= ~(1<<3) /* 清除TB8 */ +#define S2_Int_Enable() IE2 |= 1 /* 串口2允许中断 */ +#define S2_Int_Disable() IE2 &= ~1 /* 串口2禁止中断 */ +#define S2_USE_P10P11() P_SW2 &= ~1 /* UART2 使用P1口 默认 */ +#define S2_USE_P46P47() P_SW2 |= 1 /* UART2 使用P4口 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S3CON = 0xAC; S3SM0 S3ST3 S3SM2 S3REN S3TB8 S3RB8 S3TI S3RI 00000000B //S3 Control + +#define S3_MODE0() S3CON &= ~(1<<7) /* 串口3模式0,8位UART,波特率 = 定时器的溢出率 / 4 */ +#define S3_MODE1() S3CON |= (1<<7) /* 串口3模式1,9位UART,波特率 = 定时器的溢出率 / 4 */ +#define S3_8bit() S3CON &= ~(1<<7) /* 串口3模式0,8位UART,波特率 = 定时器的溢出率 / 4 */ +#define S3_9bit() S3CON |= (1<<7) /* 串口3模式1,9位UART,波特率 = 定时器的溢出率 / 4 */ +#define S3_RX_Enable() S3CON |= (1<<4) /* 允许串3接收 */ +#define S3_RX_Disable() S3CON &= ~(1<<4) /* 禁止串3接收 */ +#define TI3 (S3CON & 2) != 0 /* 判断TI3是否发送完成 */ +#define RI3 (S3CON & 1) != 0 /* 判断RI3是否接收完成 */ +#define SET_TI3() S3CON |= (1<<1) /* 设置TI3(引起中断) */ +#define CLR_TI3() S3CON &= ~(1<<1) /* 清除TI3 */ +#define CLR_RI3() S3CON &= ~1 /* 清除RI3 */ +#define S3TB8_SET() S3CON |= (1<<3) /* 设置TB8 */ +#define S3TB8_CLR() S3CON &= ~(1<<3) /* 清除TB8 */ +#define S3_Int_Enable() IE2 |= (1<<3) /* 串口3允许中断 */ +#define S3_Int_Disable() IE2 &= ~(1<<3) /* 串口3禁止中断 */ +#define S3_BRT_UseTimer3() S3CON |= (1<<6) /* BRT select Timer3 */ +#define S3_BRT_UseTimer2() S3CON &= ~(1<<6) /* BRT select Timer2 */ +#define S3_USE_P00P01() P_SW2 &= ~2 /* UART3 使用P0口 默认 */ +#define S3_USE_P50P51() P_SW2 |= 2 /* UART3 使用P5口 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr S4CON = 0x84; S4SM0 S4ST4 S4SM2 S4REN S4TB8 S4RB8 S4TI S4RI 00000000B //S4 Control + +#define S4_MODE0() S4CON &= ~(1<<7) /* 串口4模式0,8位UART,波特率 = 定时器的溢出率 / 4 */ +#define S4_MODE1() S4CON |= (1<<7) /* 串口4模式1,9位UART,波特率 = 定时器的溢出率 / 4 */ +#define S4_8bit() S4CON &= ~(1<<7) /* 串口4模式0,8位UART,波特率 = 定时器的溢出率 / 4 */ +#define S4_9bit() S4CON |= (1<<7) /* 串口4模式1,9位UART,波特率 = 定时器的溢出率 / 4 */ +#define S4_RX_Enable() S4CON |= (1<<4) /* 允许串4接收 */ +#define S4_RX_Disable() S4CON &= ~(1<<4) /* 禁止串4接收 */ +#define TI4 (S4CON & 2) != 0 /* 判断TI3是否发送完成 */ +#define RI4 (S4CON & 1) != 0 /* 判断RI3是否接收完成 */ +#define SET_TI4() S4CON |= 2 /* 设置TI3(引起中断) */ +#define CLR_TI4() S4CON &= ~2 /* 清除TI3 */ +#define CLR_RI4() S4CON &= ~1 /* 清除RI3 */ +#define S4TB8_SET() S4CON |= 8 /* 设置TB8 */ +#define S4TB8_CLR() S4CON &= ~8 /* 清除TB8 */ +#define S4_Int_Enable() IE2 |= (1<<4) /* 串口4允许中断 */ +#define S4_Int_Disable() IE2 &= ~(1<<4) /* 串口4禁止中断 */ +#define S4_BRT_UseTimer4() S4CON |= (1<<6) /* BRT select Timer4 */ +#define S4_BRT_UseTimer2() S4CON &= ~(1<<6) /* BRT select Timer2 */ +#define S4_USE_P02P03() P_SW2 &= ~4 /* UART4 使用P0口 默认 */ +#define S4_USE_P52P53() P_SW2 |= 4 /* UART4 使用P5口 */ + + + +/**********************************************************/ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr AUXR = 0x8E; T0x12 T1x12 UART_M0x6 T2R T2_C/T T2x12 EXTRAM S1ST2 0000,0000 //Auxiliary Register + +#define InternalXdata_Disable() AUXR |= 2 /* 禁止使用内部xdata, 所有访问xdata都是访问外部xdata */ +#define InternalXdata_Enable() AUXR &= ~2 /* 允许使用内部xdata, 当访问的地址在内部xdata范围时, 访问内部的xadta, 当地址超过内部xdata时, 访问外部xdata */ +#define S1_M0x6() AUXR |= (1<<5) /* UART Mode0 Speed is 6x Standard */ +#define S1_M0x1() AUXR &= ~(1<<5) /* default, UART Mode0 Speed is Standard */ + +//==================================== +#define Timer0_16bitAutoReload() TMOD &= ~0x03 /* 16位自动重装 */ +#define Timer0_16bit() TMOD = (TMOD & ~0x03) | 0x01 /* 16位 */ +#define Timer0_8bitAutoReload() TMOD = (TMOD & ~0x03) | 0x02 /* 8位自动重装 */ +#define Timer0_16bitAutoRL_NoMask() TMOD |= 0x03 /* 16位自动重装不可屏蔽中断 */ +#define Timer0_Run() TR0 = 1 /* 允许定时器0计数 */ +#define Timer0_Stop() TR0 = 0 /* 禁止定时器0计数 */ +#define Timer0_Gate_INT0_P32() TMOD |= (1<<3) /* 时器0由外部INT0高电平允许定时计数 */ +#define Timer0_AsTimer() TMOD &= ~(1<<2) /* 时器0用做定时器 */ +#define Timer0_AsCounter() TMOD |= (1<<2) /* 时器0用做计数器 */ +#define Timer0_AsCounterP34() TMOD |= (1<<2) /* 时器0用做计数器 */ +#define Timer0_1T() AUXR |= (1<<7) /* Timer0 clodk = fo */ +#define Timer0_12T() AUXR &= ~(1<<7) /* Timer0 clodk = fo/12 12分频, default */ +#define Timer0_CLKO_Enable() INT_CLKO |= 1 /* 允许 T0 溢出脉冲在T0(P3.5)脚输出,Fck0 = 1/2 T0 溢出率,T0可以1T或12T。 */ +#define Timer0_CLKO_Disable() INT_CLKO &= ~1 +#define Timer0_CLKO_Enable_P34() INT_CLKO |= 1 /* 允许 T0 溢出脉冲在T0(P3.5)脚输出,Fck0 = 1/2 T0 溢出率,T0可以1T或12T。 */ +#define Timer0_CLKO_Disable_P34() INT_CLKO &= ~1 +#define Timer0_InterruptEnable() ET0 = 1 /* 允许Timer1中断.*/ +#define Timer0_InterruptDisable() ET0 = 0 /* 禁止Timer1中断.*/ + +#define T0_Load(n) TH0 = (n) / 256, TL0 = (n) % 256 +#define T0_Load_us_1T(n) Timer0_AsTimer(),Timer0_1T(), Timer0_16bitAutoReload(),TH0=(65536-((MAIN_Fosc/1000)*(n))/1000)/256, TL0=(65536-((MAIN_Fosc/1000)*(n))/1000)%256 +#define T0_Load_us_12T(n) Timer0_AsTimer(),Timer0_12T(),Timer0_16bitAutoReload(),TH0=(65536-((MAIN_Fosc/12000)*(n))/1000)/256,TL0=(65536-((MAIN_Fosc/12000)*(n))/1000)%256 +#define T0_Frequency_1T_P35(n) ET0=0,Timer0_AsTimer(),Timer0_1T(),Timer0_16bitAutoReload(),TH0=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL0=(65536-(n/2+MAIN_Fosc/2)/(n))%256,INT_CLKO |= bit0,TR0=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T0_Frequency_12T_P35(n) ET0=0,Timer0_AsTimer(),Timer0_12T(),Timer0_16bitAutoReload(),TH0=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL0=(65536-(n/2+MAIN_Fosc/24)/(n))%256,INT_CLKO |= bit0,TR0=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer1_16bitAutoReload() TMOD &= ~0x30 /* 16位自动重装 */ +#define Timer1_16bit() TMOD = (TMOD & ~0x30) | 0x10 /* 16位 */ +#define Timer1_8bitAutoReload() TMOD = (TMOD & ~0x30) | 0x20 /* 8位自动重装 */ +#define Timer1_Run() TR1 = 1 /* 允许定时器1计数 */ +#define Timer1_Stop() TR1 = 0 /* 禁止定时器1计数 */ +#define Timer1_Gate_INT1_P33() TMOD |= (1<<7) /* 时器1由外部INT1高电平允许定时计数 */ +#define Timer1_AsTimer() TMOD &= ~(1<<6) /* 时器1用做定时器 */ +#define Timer1_AsCounter() TMOD |= (1<<6) /* 时器1用做计数器 */ +#define Timer1_AsCounterP35() TMOD |= (1<<6) /* 时器1用做计数器 */ +#define Timer1_1T() AUXR |= (1<<6) /* Timer1 clodk = fo */ +#define Timer1_12T() AUXR &= ~(1<<6) /* Timer1 clodk = fo/12 12分频, default */ +#define Timer1_CLKO_Enable() INT_CLKO |= 2 /* 允许 T1 溢出脉冲在T1(P3.4)脚输出,Fck1 = 1/2 T1 溢出率,T1可以1T或12T。 */ +#define Timer1_CLKO_Disable() INT_CLKO &= ~2 +#define Timer1_CLKO_Enable_P35() INT_CLKO |= 2 /* 允许 T1 溢出脉冲在T1(P3.4)脚输出,Fck1 = 1/2 T1 溢出率,T1可以1T或12T。 */ +#define Timer1_CLKO_Disable_P35() INT_CLKO &= ~2 +#define Timer1_InterruptEnable() ET1 = 1 /* 允许Timer1中断. */ +#define Timer1_InterruptDisable() ET1 = 0 /* 禁止Timer1中断. */ + +#define T1_Load(n) TH1 = (n) / 256, TL1 = (n) % 256 +#define T1_Load_us_1T(n) Timer1_AsTimer(),Timer1_1T(), Timer1_16bitAutoReload(),TH1=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL1=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T1_Load_us_12T(n) Timer1_AsTimer(),Timer1_12T(),Timer1_16bitAutoReload(),TH1=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL1=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T1_Frequency_1T_P34(n) ET1=0,Timer1_AsTimer(),Timer1_1T(),Timer1_16bitAutoReload(),TH1=(65536-(n/2+MAIN_Fosc/2)/(n))/256,TL1=(65536-(n/2+MAIN_Fosc/2)/(n))%256,INT_CLKO |= bit1,TR1=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T1_Frequency_12T_P34(n) ET1=0,Timer1_AsTimer(),Timer1_12T(),Timer1_16bitAutoReload(),TH1=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL1=(65536-(n/2+MAIN_Fosc/24)/(n))%256,INT_CLKO |= bit1,TR1=1 /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer2_Run() AUXR |= (1<<4) /* 允许定时器2计数 */ +#define Timer2_Stop() AUXR &= ~(1<<4) /* 禁止定时器2计数 */ +#define Timer2_AsTimer() AUXR &= ~(1<<3) /* 时器2用做定时器 */ +#define Timer2_AsCounter() AUXR |= (1<<3) /* 时器2用做计数器 */ +#define Timer2_AsCounterP31() AUXR |= (1<<3) /* 时器2用做计数器 */ +#define Timer2_1T() AUXR |= (1<<2) /* Timer0 clock = fo */ +#define Timer2_12T() AUXR &= ~(1<<2) /* Timer0 clock = fo/12 12分频, default */ +#define Timer2_CLKO_Enable() INT_CLKO |= 4 /* 允许 T2 溢出脉冲在P1.3脚输出,Fck2 = 1/2 T2 溢出率,T2可以1T或12T。 */ +#define Timer2_CLKO_Disable() INT_CLKO &= ~4 +#define Timer2_CLKO_Enable_P13() INT_CLKO |= 4 /* 允许 T2 溢出脉冲在P1.3脚输出,Fck2 = 1/2 T2 溢出率,T2可以1T或12T。 */ +#define Timer2_CLKO_Disable_P13() INT_CLKO &= ~4 +#define Timer2_InterruptEnable() IE2 |= (1<<2) /* 允许Timer2中断. */ +#define Timer2_InterruptDisable() IE2 &= ~(1<<2) /* 禁止Timer2中断. */ + +#define T2_Load(n) TH2 = (n) / 256, TL2 = (n) % 256 +#define T2_Load_us_1T(n) Timer2_AsTimer(),Timer2_1T(), TH2=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL2=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T2_Load_us_12T(n) Timer2_AsTimer(),Timer2_12T(),TH2=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL2=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T2_Frequency_1T_P30(n) Timer2_InterruptDisable(),Timer2_AsTimer(),Timer2_1T(), TH2=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL2=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer2_CLKO_Enable_P30(),Timer2_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T2_Frequency_12T_P30(n) Timer2_InterruptDisable(),Timer2_AsTimer(),Timer2_12T(),TH2=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL2=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer2_CLKO_Enable_P30(),Timer2_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer3_Run() T4T3M |= (1<<3) /* 允许定时器3计数 */ +#define Timer3_Stop() T4T3M &= ~(1<<3) /* 禁止定时器3计数 */ +#define Timer3_AsTimer() T4T3M &= ~(1<<2) /* 时器3用做定时器 */ +#define Timer3_AsCounter() T4T3M |= (1<<2) /* 时器3用做计数器, P0.5为外部脉冲 */ +#define Timer3_AsCounterP05() T4T3M |= (1<<2) /* 时器3用做计数器, P0.5为外部脉冲 */ +#define Timer3_1T() T4T3M |= (1<<1) /* 1T模式 */ +#define Timer3_12T() T4T3M &= ~(1<<1) /* 12T模式, default */ +#define Timer3_CLKO_Enable() T4T3M |= 1 /* 允许T3溢出脉冲在T3(P0.4)脚输出,Fck = 1/2 T2 溢出率,T2可以1T或12T。 */ +#define Timer3_CLKO_Disable() T4T3M &= ~1 /* 禁止T3溢出脉冲在T3(P0.4)脚输出 */ +#define Timer3_CLKO_Enable_P04() T4T3M |= 1 /* 允许T3溢出脉冲在T3(P0.4)脚输出,Fck = 1/2 T2 溢出率,T2可以1T或12T。 */ +#define Timer3_CLKO_Disable_P04() T4T3M &= ~1 /* 禁止T3溢出脉冲在T3(P0.4)脚输出 */ +#define Timer3_InterruptEnable() IE2 |= (1<<5) /* 允许Timer3中断. */ +#define Timer3_InterruptDisable() IE2 &= ~(1<<5) /* 禁止Timer3中断. */ + +#define T3_Load(n) TH3 = (n) / 256, TL3 = (n) % 256 +#define T3_Load_us_1T(n) Timer3_AsTimer(),Timer3_1T(), TH3=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL3=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T3_Load_us_12T(n) Timer3_AsTimer(),Timer3_12T(),TH3=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL3=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T3_Frequency_1T_P04(n) Timer3_InterruptDisable(),Timer3_AsTimer(),Timer3_1T(), TH3=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL3=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer3_CLKO_P04_Enable,Timer3_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T3_Frequency_12T_P04(n) Timer3_InterruptDisable(),Timer3_AsTimer(),Timer3_12T(),TH3=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL3=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer3_CLKO_P04_Enable,Timer3_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ + +//==================================== +#define Timer4_Run() T4T3M |= (1<<7) /* 允许定时器4计数 */ +#define Timer4_Stop() T4T3M &= ~(1<<7) /* 禁止定时器4计数 */ +#define Timer4_AsTimer() T4T3M &= ~(1<<6) /* 时器4用做定时器 */ +#define Timer4_AsCounter() T4T3M |= (1<<6) /* 时器4用做计数器, P0.7为外部脉冲 */ +#define Timer4_AsCounterP07() T4T3M |= (1<<6) /* 时器4用做计数器, P0.7为外部脉冲 */ +#define Timer4_1T() T4T3M |= (1<<5) /* 1T模式 */ +#define Timer4_12T() T4T3M &= ~(1<<5) /* 12T模式, default */ +#define Timer4_CLKO_Enable() T4T3M |= (1<<4) /* 允许T4溢出脉冲在T4(P0.6)脚输出,Fck = 1/2 T2 溢出率,T2可以1T或12T。 */ +#define Timer4_CLKO_Disable() T4T3M &= ~(1<<4) /* 禁止T4溢出脉冲在T4(P0.6)脚输出 */ +#define Timer4_CLKO_Enable_P06() T4T3M |= (1<<4) /* 允许T4溢出脉冲在T4(P0.6)脚输出,Fck = 1/2 T2 溢出率,T2可以1T或12T。 */ +#define Timer4_CLKO_Disable_P06() T4T3M &= ~(1<<4) /* 禁止T4溢出脉冲在T4(P0.6)脚输出 */ +#define Timer4_InterruptEnable() IE2 |= (1<<6) /* 允许Timer4中断. */ +#define Timer4_InterruptDisable() IE2 &= ~(1<<6) /* 禁止Timer4中断. */ + +#define T4_Load(n) TH4 = (n) / 256, TL4 = (n) % 256 +#define T4_Load_us_1T(n) Timer4_AsTimer(),Timer4_1T(), TH4=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)/256, TL4=(65536-((MAIN_Fosc/1000)*(n)+500)/1000)%256 +#define T4_Load_us_12T(n) Timer4_AsTimer(),Timer4_12T(),TH4=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)/256,TL4=(65536-((MAIN_Fosc/12000)*(n)+500)/1000)%256 +#define T4_Frequency_1T_P06(n) Timer4_InterruptDisable(),Timer4_AsTimer(),Timer4_1T(), TH4=(65536-(n/2+MAIN_Fosc/2)/(n))/256, TL4=(65536-(n/2+MAIN_Fosc/2)/(n))%256, Timer4_CLKO_P06_Enable(),Timer4_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +#define T4_Frequency_12T_P06(n) Timer4_InterruptDisable(),Timer4_AsTimer(),Timer4_12T(),TH4=(65536-(n/2+MAIN_Fosc/24)/(n))/256,TL4=(65536-(n/2+MAIN_Fosc/24)/(n))%256,Timer4_CLKO_P06_Enable(),Timer4_Run() /* fx=fosc/(2*M)/n, M=1 or M=12 */ +//==================================================================================================================== + +//sfr WDT_CONTR = 0xC1; //Watch-Dog-Timer Control register +// 7 6 5 4 3 2 1 0 Reset Value +// WDT_FLAG - EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0 xx00,0000 +#define D_WDT_FLAG (1<<7) +#define D_EN_WDT (1<<5) +#define D_CLR_WDT (1<<4) /* auto clear */ +#define D_IDLE_WDT (1<<3) /* WDT counter when Idle */ +#define D_WDT_SCALE_2 0 +#define D_WDT_SCALE_4 1 +#define D_WDT_SCALE_8 2 /* T=393216*N/fo */ +#define D_WDT_SCALE_16 3 +#define D_WDT_SCALE_32 4 +#define D_WDT_SCALE_64 5 +#define D_WDT_SCALE_128 6 +#define D_WDT_SCALE_256 7 + +#define WDT_PS_Set(n) WDT_CONTR = (WDT_CONTR & ~0x07) | (n & 0x07) /* 看门狗定时器时钟分频系数设置 */ +#define WDT_reset(n) WDT_CONTR = D_EN_WDT + D_CLR_WDT + D_IDLE_WDT + (n) /* 初始化WDT,喂狗 */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PCON = 0x87; SMOD SMOD0 LVDF POF GF1 GF0 PD IDL 0001,0000 //Power Control +//SMOD //串口双倍速 +//SMOD0 +#define LVDF (1<<5) /* P4.6低压检测标志 */ +//POF +//GF1 +//GF0 +//#define D_PD 2 /* set 1, power down mode */ +//#define D_IDLE 1 /* set 1, idle mode */ +#define MCU_IDLE() PCON |= 1 /* MCU 进入 IDLE 模式 */ +#define MCU_POWER_DOWN() PCON |= 2 /* MCU 进入 睡眠 模式 */ + + +//sfr IAP_CMD = 0xC5; +#define IAP_STANDBY() IAP_CMD = 0 //IAP空闲命令(禁止) +#define IAP_READ() IAP_CMD = 1 //IAP读出命令 +#define IAP_WRITE() IAP_CMD = 2 //IAP写入命令 +#define IAP_ERASE() IAP_CMD = 3 //IAP擦除命令 + +//sfr IAP_TRIG = 0xC6; +#define IAP_TRIG() IAP_TRIG = 0x5A, IAP_TRIG = 0xA5 /* IAP触发命令 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr IAP_CONTR = 0xC7; IAPEN SWBS SWRST CFAIL - - - - 0000,x000 //IAP Control Register + +#define IAP_EN (1<<7) +#define IAP_SWBS (1<<6) +#define IAP_SWRST (1<<5) +#define IAP_CMD_FAIL (1<<4) + +#define IAP_ENABLE() IAP_CONTR = IAP_EN; IAP_TPS = MAIN_Fosc / 1000000 +#define IAP_DISABLE() IAP_CONTR = 0; IAP_CMD = 0; IAP_TRIG = 0; IAP_ADDRH = 0xff; IAP_ADDRL = 0xff + + +/* ADC Register */ +// 7 6 5 4 3 2 1 0 Reset Value +//sfr ADC_CONTR = 0xBC; ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0 0000,0000 /* AD 转换控制寄存器 */ +//sfr ADC_RES = 0xBD; ADCV.9 ADCV.8 ADCV.7 ADCV.6 ADCV.5 ADCV.4 ADCV.3 ADCV.2 0000,0000 /* A/D 转换结果高8位 */ +//sfr ADC_RESL = 0xBE; ADCV.1 ADCV.0 0000,0000 /* A/D 转换结果低2位 */ +//sfr ADC_CONTR = 0xBC; //直接用MOV操作,不要用与或 + + +//sfr SPCTL = 0xCE; SPI控制寄存器 +// 7 6 5 4 3 2 1 0 Reset Value +// SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 0x00 + +#define SPI_SSIG_None() SPCTL |= (1<<7) /* 1: 忽略SS脚 */ +#define SPI_SSIG_Enable() SPCTL &= ~(1<<7) /* 0: SS脚用于决定主从机 */ +#define SPI_Enable() SPCTL |= (1<<6) /* 1: 允许SPI */ +#define SPI_Disable() SPCTL &= ~(1<<6) /* 0: 禁止SPI */ +#define SPI_LSB_First() SPCTL |= (1<<5) /* 1: LSB先发 */ +#define SPI_MSB_First() SPCTL &= ~(1<<5) /* 0: MSB先发 */ +#define SPI_Master() SPCTL |= (1<<4) /* 1: 设为主机 */ +#define SPI_Slave() SPCTL &= ~(1<<4) /* 0: 设为从机 */ +#define SPI_SCLK_NormalH() SPCTL |= (1<<3) /* 1: 空闲时SCLK为高电平 */ +#define SPI_SCLK_NormalL() SPCTL &= ~(1<<3) /* 0: 空闲时SCLK为低电平 */ +#define SPI_PhaseH() SPCTL |= (1<<2) /* 1: */ +#define SPI_PhaseL() SPCTL &= ~(1<<2) /* 0: */ +#define SPI_Speed(n) SPCTL = (SPCTL & ~3) | (n) /*设置速度, 0 -- fosc/4, 1 -- fosc/8, 2 -- fosc/16, 3 -- fosc/32 */ + +//sfr SPDAT = 0xCF; //SPI Data Register 0000,0000 +//sfr SPSTAT = 0xCD; //SPI状态寄存器 +// 7 6 5 4 3 2 1 0 Reset Value +// SPIF WCOL - - - - - - +#define SPIF 0x80 /* SPI传输完成标志。写入1清0。*/ +#define WCOL 0x40 /* SPI写冲突标志。写入1清0。 */ + +#define SPI_USE_P12P13P14P15() P_SW1 &= ~0x0c /* 将SPI切换到P12(SS) P13(MOSI) P14(MISO) P15(SCLK)(上电默认)。*/ +#define SPI_USE_P22P23P24P25() P_SW1 = (P_SW1 & ~0x0c) | 0x04 /* 将SPI切换到P22(SS) P23(MOSI) P24(MISO) P25(SCLK)。*/ +#define SPI_USE_P74P75P76P77() P_SW1 = (P_SW1 & ~0x0c) | 0x08 /* 将SPI切换到P74(SS) P75(MOSI) P76(MISO) P77(SCLK)。*/ +#define SPI_USE_P35P34P33P32() P_SW1 = P_SW1 | 0x0C /* 将SPI切换到P35(SS) P34(MOSI) P33(MISO) P32(SCLK)。*/ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CCFG = 0xFE80H; ENI2C MSSL MSSPEED[5:0] 0000,0000 /* I2C配置寄存器 */ +#define I2C_Function(n) (n==0?(I2CCFG &= ~0x80):(I2CCFG |= 0x80)) //0:禁止 I2C 功能;1:使能 I2C 功能 +#define I2C_ENABLE() I2CCFG |= 0x80 /* 使能 I2C 功能 */ +#define I2C_DISABLE() I2CCFG &= ~0x80 /* 禁止 I2C 功能 */ +#define I2C_Master() I2CCFG |= 0x40 /* 1: 设为主机 */ +#define I2C_Slave() I2CCFG &= ~0x40 /* 0: 设为从机 */ +#define I2C_SetSpeed(n) I2CCFG = (I2CCFG & ~0x3f) | (n & 0x3f) /* 总线速度=Fosc/2/(Speed*2+4) */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSCR = 0xFE81H; EMSI - - - MSCMD[3:0] 0000,0000 /* I2C配置寄存器 */ +#define I2C_Master_Inturrupt(n) (n==0?(I2CMSCR &= ~0x80):(I2CMSCR |= 0x80)) //0:禁止 I2C 功能;1:使能 I2C 功能 + +#define I2C_CMD_None 0 +#define I2C_CMD_Start 1 +#define I2C_CMD_Send 2 +#define I2C_CMD_RACK 3 +#define I2C_CMD_Read 4 +#define I2C_CMD_SACK 5 +#define I2C_CMD_Stop 6 +#define I2C_CMD_RFU1 7 +#define I2C_CMD_RFU2 8 +#define I2C_CMD_Start_Send_RACK 9 +#define I2C_CMD_Send_RACK 10 +#define I2C_CMD_Read_SACK 11 +#define I2C_CMD_Read_SNAK 12 + +#define I2C_Command(n) I2CMSCR = (I2CMSCR & ~0x0f) | (n & 0x0f) /* 主机命令 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSST = 0xFE82H; MSBUSY MSIF - - - - MSACKI MSACKO 0000,0000 /* I2C主机状态寄存器 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CMSAUX = 0xFE88H; - - - - - - - WDTA 0000,0000 /* I2C主机辅助控制寄存器 */ +#define I2C_WDTA_EN() I2CMSAUX |= 0x01 /* 使能自动发送 */ +#define I2C_WDTA_DIS() I2CMSAUX &= ~0x01 /* 禁止自动发送 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLCR = 0xFE83H; - ESTAI ERXI ETXI ESTOI - - SLRET 0000,0000 /* I2C从机控制寄存器 */ +#define I2C_ESTAI_EN() I2CSLCR |= 0x40 /* 使能从机接收START信号中断 */ +#define I2C_ESTAI_DIS() I2CSLCR &= ~0x40 /* 禁止从机接收START信号中断 */ +#define I2C_ERXI_EN() I2CSLCR |= 0x20 /* 使能从机接收1字节数据中断 */ +#define I2C_ERXI_DIS() I2CSLCR &= ~0x20 /* 禁止从机接收1字节数据中断 */ +#define I2C_ETXI_EN() I2CSLCR |= 0x10 /* 使能从机发送1字节数据中断 */ +#define I2C_ETXI_DIS() I2CSLCR &= ~0x10 /* 禁止从机发送1字节数据中断 */ +#define I2C_ESTOI_EN() I2CSLCR |= 0x08 /* 使能从机接收STOP信号中断 */ +#define I2C_ESTOI_DIS() I2CSLCR &= ~0x08 /* 禁止从机接收STOP信号中断 */ +#define I2C_SLRET() I2CSLCR |= 0x01 /* 复位从机模式 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLST = 0xFE84H; SLBUSY STAIF RXIF TXIF STOIF - SLACKI SLACKO 0000,0000 /* I2C从机状态寄存器 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr I2CSLADR = 0xFE85H; I2CSLADR[7:1] MA 0000,0000 /* I2C从机地址寄存器 */ +#define I2C_Address(n) I2CSLADR = (I2CSLADR & 0x01) | (n << 1) /* 从机地址 */ +#define I2C_MATCH_EN() I2CSLADR &= ~0x01 /* 使能从机地址比较功能,只接受相匹配地址 */ +#define I2C_MATCH_DIS() I2CSLADR |= 0x01 /* 禁止从机地址比较功能,接受所有设备地址 */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ENO = 0xFEB1H; ENO4N ENO4P ENO3N ENO3P ENO2N ENO2P ENO1N ENO1P 0000,0000 /* 输出使能寄存器 */ +//sfr PWMB_ENO = 0xFEB5H; - ENO8P - ENO7P - ENO6P - ENO5P 0000,0000 /* 输出使能寄存器 */ +#define PWM1P_OUT_EN() PWMA_ENO |= 0x01 /* 使能 PWM1P 输出 */ +#define PWM1P_OUT_DIS() PWMA_ENO &= ~0x01 /* 禁止 PWM1P 输出 */ +#define PWM1N_OUT_EN() PWMA_ENO |= 0x02 /* 使能 PWM1N 输出 */ +#define PWM1N_OUT_DIS() PWMA_ENO &= ~0x02 /* 禁止 PWM1N 输出 */ +#define PWM2P_OUT_EN() PWMA_ENO |= 0x04 /* 使能 PWM2P 输出 */ +#define PWM2P_OUT_DIS() PWMA_ENO &= ~0x04 /* 禁止 PWM2P 输出 */ +#define PWM2N_OUT_EN() PWMA_ENO |= 0x08 /* 使能 PWM2N 输出 */ +#define PWM2N_OUT_DIS() PWMA_ENO &= ~0x08 /* 禁止 PWM2N 输出 */ +#define PWM3P_OUT_EN() PWMA_ENO |= 0x10 /* 使能 PWM3P 输出 */ +#define PWM3P_OUT_DIS() PWMA_ENO &= ~0x10 /* 禁止 PWM3P 输出 */ +#define PWM3N_OUT_EN() PWMA_ENO |= 0x20 /* 使能 PWM3N 输出 */ +#define PWM3N_OUT_DIS() PWMA_ENO &= ~0x20 /* 禁止 PWM3N 输出 */ +#define PWM4P_OUT_EN() PWMA_ENO |= 0x40 /* 使能 PWM3P 输出 */ +#define PWM4P_OUT_DIS() PWMA_ENO &= ~0x40 /* 禁止 PWM3P 输出 */ +#define PWM4N_OUT_EN() PWMA_ENO |= 0x80 /* 使能 PWM3N 输出 */ +#define PWM4N_OUT_DIS() PWMA_ENO &= ~0x80 /* 禁止 PWM3N 输出 */ + +#define PWM5P_OUT_EN() PWMB_ENO |= 0x01 /* 使能 PWM5P 输出 */ +#define PWM5P_OUT_DIS() PWMB_ENO &= ~0x01 /* 禁止 PWM5P 输出 */ +#define PWM6P_OUT_EN() PWMB_ENO |= 0x04 /* 使能 PWM6P 输出 */ +#define PWM6P_OUT_DIS() PWMB_ENO &= ~0x04 /* 禁止 PWM6P 输出 */ +#define PWM7P_OUT_EN() PWMB_ENO |= 0x10 /* 使能 PWM7P 输出 */ +#define PWM7P_OUT_DIS() PWMB_ENO &= ~0x10 /* 禁止 PWM7P 输出 */ +#define PWM8P_OUT_EN() PWMB_ENO |= 0x40 /* 使能 PWM8P 输出 */ +#define PWM8P_OUT_DIS() PWMB_ENO &= ~0x40 /* 禁止 PWM8P 输出 */ + +#define PWMA_OutChannelSel(n) PWMA_ENO = n //选择输出通道 +#define PWMB_OutChannelSel(n) PWMB_ENO = n //选择输出通道 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_PS = 0xFEB2H; C4PS1 C4PS0 C3PS1 C3PS0 C2PS1 C2PS0 C1PS1 C1PS0 0000,0000 /* 输出使能寄存器 */ +//sfr PWMB_PS = 0xFEB6H; C8PS1 C8PS0 C7PS1 C7PS0 C6PS1 C6PS0 C5PS1 C5PS0 0000,0000 /* 输出使能寄存器 */ + +#define PWM1_USE_P10P11() PWMA_PS = (PWMA_PS & ~0x03) /* PWM 通道 1 输出脚切换到P10(PWM1P) P11(PWM1N) */ +#define PWM1_USE_P20P21() PWMA_PS = (PWMA_PS & ~0x03) | 0x01 /* PWM 通道 1 输出脚切换到P20(PWM1P) P21(PWM1N) */ +#define PWM1_USE_P60P61() PWMA_PS = (PWMA_PS & ~0x03) | 0x02 /* PWM 通道 1 输出脚切换到P60(PWM1P) P61(PWM1N) */ + +#define PWM2_USE_P12P13() PWMA_PS = (PWMA_PS & ~0x0C) /* PWM 通道 2 输出脚切换到P12/P54(PWM2P) P13(PWM2N) */ +#define PWM2_USE_P22P23() PWMA_PS = (PWMA_PS & ~0x0C) | 0x04 /* PWM 通道 2 输出脚切换到P22(PWM2P) P23(PWM2N) */ +#define PWM2_USE_P62P63() PWMA_PS = (PWMA_PS & ~0x0C) | 0x08 /* PWM 通道 2 输出脚切换到P62(PWM2P) P63(PWM2N) */ + +#define PWM3_USE_P14P15() PWMA_PS = (PWMA_PS & ~0x30) /* PWM 通道 3 输出脚切换到P14(PWM3P) P15(PWM3N) */ +#define PWM3_USE_P24P25() PWMA_PS = (PWMA_PS & ~0x30) | 0x10 /* PWM 通道 3 输出脚切换到P24(PWM3P) P25(PWM3N) */ +#define PWM3_USE_P64P65() PWMA_PS = (PWMA_PS & ~0x30) | 0x20 /* PWM 通道 3 输出脚切换到P64(PWM3P) P65(PWM3N) */ + +#define PWM4_USE_P16P17() PWMA_PS = (PWMA_PS & ~0xC0) /* PWM 通道 4 输出脚切换到P16(PWM4P) P17(PWM4N) */ +#define PWM4_USE_P26P27() PWMA_PS = (PWMA_PS & ~0xC0) | 0x40 /* PWM 通道 4 输出脚切换到P26(PWM4P) P27(PWM4N) */ +#define PWM4_USE_P66P67() PWMA_PS = (PWMA_PS & ~0xC0) | 0x80 /* PWM 通道 4 输出脚切换到P66(PWM4P) P67(PWM4N) */ +#define PWM4_USE_P34P33() PWMA_PS = (PWMA_PS | 0xC0) /* PWM 通道 4 输出脚切换到P34(PWM4P) P33(PWM4N) */ + +#define PWM5_USE_P20() PWMB_PS = (PWMB_PS & ~0x03) /* PWM 通道 5 输出脚切换到P20(PWM5) */ +#define PWM5_USE_P17() PWMB_PS = (PWMB_PS & ~0x03) | 0x01 /* PWM 通道 5 输出脚切换到P17(PWM5) */ +#define PWM5_USE_P00() PWMB_PS = (PWMB_PS & ~0x03) | 0x02 /* PWM 通道 5 输出脚切换到P00(PWM5) */ +#define PWM5_USE_P74() PWMB_PS = (PWMB_PS | 0x03) /* PWM 通道 5 输出脚切换到P74(PWM5) */ + +#define PWM6_USE_P21() PWMB_PS = (PWMB_PS & ~0x0C) /* PWM 通道 6 输出脚切换到P21(PWM6) */ +#define PWM6_USE_P54() PWMB_PS = (PWMB_PS & ~0x0C) | 0x04 /* PWM 通道 6 输出脚切换到P54(PWM6) */ +#define PWM6_USE_P01() PWMB_PS = (PWMB_PS & ~0x0C) | 0x08 /* PWM 通道 6 输出脚切换到P01(PWM6) */ +#define PWM6_USE_P75() PWMB_PS = (PWMB_PS | 0x0C) /* PWM 通道 6 输出脚切换到P75(PWM6) */ + +#define PWM7_USE_P22() PWMB_PS = (PWMB_PS & ~0x30) /* PWM 通道 7 输出脚切换到P22(PWM7) */ +#define PWM7_USE_P33() PWMB_PS = (PWMB_PS & ~0x30) | 0x10 /* PWM 通道 7 输出脚切换到P33(PWM7) */ +#define PWM7_USE_P02() PWMB_PS = (PWMB_PS & ~0x30) | 0x20 /* PWM 通道 7 输出脚切换到P02(PWM7) */ +#define PWM7_USE_P76() PWMB_PS = (PWMB_PS | 0x30) /* PWM 通道 7 输出脚切换到P76(PWM7) */ + +#define PWM8_USE_P23() PWMB_PS = (PWMB_PS & ~0xC0) /* PWM 通道 8 输出脚切换到P23(PWM8) */ +#define PWM8_USE_P34() PWMB_PS = (PWMB_PS & ~0xC0) | 0x40 /* PWM 通道 8 输出脚切换到P34(PWM8) */ +#define PWM8_USE_P03() PWMB_PS = (PWMB_PS & ~0xC0) | 0x80 /* PWM 通道 8 输出脚切换到P03(PWM8) */ +#define PWM8_USE_P77() PWMB_PS = (PWMB_PS | 0xC0) /* PWM 通道 8 输出脚切换到P77(PWM8) */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_IOAUX = 0xFEB3H; AUX4N AUX4P AUX3N AUX3P AUX2N AUX2P AUX1N AUX1P 0000,0000 /* 输出附加使能寄存器 */ +//sfr PWMB_IOAUX = 0xFEB7H; - AUX8P - AUX7P - AUX6P - AUX5P 0000,0000 /* 输出附加使能寄存器 */ +#define AUX4N (1<<7) +#define AUX4P (1<<6) +#define AUX3N (1<<5) +#define AUX3P (1<<4) +#define AUX2N (1<<3) +#define AUX2P (1<<2) +#define AUX1N (1<<1) +#define AUX1P (1) + +#define AUX8P (1<<6) +#define AUX7P (1<<4) +#define AUX6P (1<<2) +#define AUX5P (1) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CR1 = 0xFEC0H; ARPEA CMSA1 CMSA0 DIRA OPMA URSA UDISA CENA 0000,0000 /* 控制寄存器 1 */ +//sfr PWMB_CR1 = 0xFEE0H; ARPEB CMSB1 CMSB0 DIRB OPMB URSB UDISB CENB 0000,0000 /* 控制寄存器 1 */ +#define ARPE1 (1<<7) +#define ARPE2 (1<<7) +#define PWMA_AlignMode_Edge() PWMA_CR1 = (PWMA_CR1 & ~0x60) +#define PWMA_AlignMode_Mid1() PWMA_CR1 = (PWMA_CR1 & ~0x60) | 0x20 +#define PWMA_AlignMode_Mid2() PWMA_CR1 = (PWMA_CR1 & ~0x60) | 0x40 +#define PWMA_AlignMode_Mid3() PWMA_CR1 = (PWMA_CR1 | 0x60) +#define PWMA_DIR_UP() PWMA_CR1 &= ~0x10 +#define PWMA_DIR_DN() PWMA_CR1 |= 0x10 +#define PWMA_OPMA(n) (n==0?(PWMA_CR1 &= ~0x08):(PWMA_CR1 |= 0x08)) //单脉冲模式 0:在发生更新事件时,计数器不停止;1:在发生下一次更新事件时,清除 CEN 位,计数器停止 +#define PWMA_URSA(n) (n==0?(PWMA_CR1 &= ~0x04):(PWMA_CR1 |= 0x04)) //更新请求源 +#define PWMA_UDISA(n) (n==0?(PWMA_CR1 &= ~0x02):(PWMA_CR1 |= 0x02)) //禁止更新 0:产生更新(UEV)事件;1:不产生更新事件 +#define PWMA_CEN_Enable() PWMA_CR1 |= 0x01 //1:使能计数器 +#define PWMA_CEN_Disable() PWMA_CR1 &= ~0x01 //0:禁止计数器 + +#define PWMB_AlignMode_Edge() PWMB_CR1 = (PWMB_CR1 & ~0x60) +#define PWMB_AlignMode_Mid1() PWMB_CR1 = (PWMB_CR1 & ~0x60) | 0x20 +#define PWMB_AlignMode_Mid2() PWMB_CR1 = (PWMB_CR1 & ~0x60) | 0x40 +#define PWMB_AlignMode_Mid3() PWMB_CR1 = (PWMB_CR1 | 0x60) +#define PWMB_DIR_UP() PWMB_CR1 &= ~0x10 +#define PWMB_DIR_DN() PWMB_CR1 |= 0x10 +#define PWMB_OPMB(n) (n==0?(PWMB_CR1 &= ~0x08):(PWMB_CR1 |= 0x08)) //单脉冲模式 0:在发生更新事件时,计数器不停止;1:在发生下一次更新事件时,清除 CEN 位,计数器停止 +#define PWMB_URSB(n) (n==0?(PWMB_CR1 &= ~0x04):(PWMB_CR1 |= 0x04)) //更新请求源 +#define PWMB_UDISB(n) (n==0?(PWMB_CR1 &= ~0x02):(PWMB_CR1 |= 0x02)) //禁止更新 0:产生更新(UEV)事件;1:不产生更新事件 +#define PWMB_CEN_Enable() PWMB_CR1 |= 0x01 //1:使能计数器 +#define PWMB_CEN_Disable() PWMB_CR1 &= ~0x01 //0:禁止计数器 + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CR2 = 0xFEC1H; TI1S MMSA2 MMSA1 MMSA0 - COMSA - CCPCA 0000,x0x0 /* 控制寄存器 2 */ +//sfr PWMB_CR2 = 0xFEE1H; TI5S MMSB2 MMSB1 MMSB0 - COMSB - CCPCB 0000,x0xx /* 控制寄存器 2 */ +#define PWM1P_TI1() PWMA_CR2 &= ~0x80 +#define PWM1P2P3P_XOR_TI1() PWMA_CR2 |= 0x80 +#define PWM5P_TI2() PWMB_CR2 &= ~0x80 +#define PWM5P6P7P_XOR_TI2() PWMB_CR2 |= 0x80 + +#define MMSn_RESET 0 //复位 +#define MMSn_ENABLE 1 //使能 +#define MMSn_UPDATE 2 //更新 +#define MMSn_COMP_TRGO 3 //比较脉冲 +#define MMSn_OC1REF_TRGO 4 //比较 +#define MMSn_OC2REF_TRGO 5 //比较 +#define MMSn_OC3REF_TRGO 6 //比较 +#define MMSn_OC4REF_TRGO 7 //比较 + +#define PWMA_MainModeSel(n) PWMA_CR2 = (PWMA_CR2 & ~0x70) | (n<<4) //主模式选择 +#define PWMB_MainModeSel(n) PWMB_CR2 = (PWMB_CR2 & ~0x70) | (n<<4) //主模式选择 + +//0:当 CCPC=1 时,只有在 COMG 位置 1 的时候这些控制位才被更新 +//1:当 CCPC=1 时,只有在 COMG 位置 1 或 TRGI 发生上升沿的时候这些控制位才被更新 +#define PWMA_COMSUpdateCtrl(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x04):(PWMA_CR2 |= 0x04)) //捕获/比较控制位的更新控制选择 +#define PWMB_COMSUpdateCtrl(n) PWMB_CR2 = (n==0?(PWMB_CR2 &= ~0x04):(PWMB_CR2 |= 0x04)) //捕获/比较控制位的更新控制选择 +//0: CCIE, CCINE, CCiP, CCiNP 和 OCIM 位不是预装载的 +//1: CCIE, CCINE, CCiP, CCiNP 和 OCIM 位是预装载的;设置该位后,它们只在设置了 COMG位后被更新。 +#define PWMA_CCPCAPreloaded(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x01):(PWMA_CR2 |= 0x01)) //捕获/比较预装载控制位(该位只对具有互补输出的通道起作用) +#define PWMB_CCPCBPreloaded(n) PWMA_CR2 = (n==0?(PWMA_CR2 &= ~0x01):(PWMA_CR2 |= 0x01)) //捕获/比较预装载控制位(该位只对具有互补输出的通道起作用) + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SMCR = 0xFEC2H; MSMA TSA2 TSA1 TSA0 - SMSA2 SMSA1 SMSA0 0000,x000 /* 从模式控制寄存器 */ +//sfr PWMB_SMCR = 0xFEE2H; MSMB TSB2 TSB1 TSB0 - SMSB2 SMSB1 SMSB0 0000,x000 /* 从模式控制寄存器 */ +#define SMCR_TSn_ITR2 2 +#define SMCR_TSn_EDGE 4 +#define SMCR_TSn_TIMER1 5 +#define SMCR_TSn_TIMER2 6 +#define SMCR_TSn_ETRF 7 + +#define PWMA_SMCR_Source(n) PWMA_SMCR = (PWMA_SMCR & ~0x70) | (n<<4) //触发源选择 +#define PWMB_SMCR_Source(n) PWMB_SMCR = (PWMB_SMCR & ~0x70) | (n<<4) //触发源选择 + +#define SMCR_SMSA_INSIDE_CLK 0 +#define SMCR_SMSA_ENCODER_M1 1 +#define SMCR_SMSA_ENCODER_M2 2 +#define SMCR_SMSA_ENCODER_M3 3 +#define SMCR_SMSA_RESET 4 +#define SMCR_SMSA_GATE 5 +#define SMCR_SMSA_TRIG 6 +#define SMCR_SMSA_EXT_CLK 7 + +#define PWMA_SMCR_SMS(n) PWMA_SMCR = (PWMA_SMCR & ~0x07) | (n & 7) //时钟/触发/从模式选择 +#define PWMB_SMCR_SMS(n) PWMB_SMCR = (PWMB_SMCR & ~0x07) | (n & 7) //时钟/触发/从模式选择 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ETR = 0xFEC3H; ETP1 ECE1 ETPS11 ETPS10 ETF13 ETF12 ETF11 ETF10 0000,0000 /* 外部触发寄存器 */ +//sfr PWMB_ETR = 0xFEE3H; ETP2 ECE2 ETPS21 ETPS20 ETF23 ETF22 ETF21 ETF20 0000,0000 /* 外部触发寄存器 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_IER = 0xFEC4H; BIEA TIEA COMIEA CC4IE CC3IE CC2IE CC1IE UIEA 0000,0000 /* 中断使能寄存器 */ +//sfr PWMB_IER = 0xFEE4H; BIEB TIEB COMIEB CC8IE CC7IE CC6IE CC5IE UIEB 0000,0000 /* 中断使能寄存器 */ +#define PWMA_UIEA_Enable() PWMA_IER |= 0x01 //1:允许更新中断 +#define PWMA_UIEA_Disable() PWMA_IER &= ~0x01 //0:禁止更新中断 +#define PWMA_CC1IE_Enable() PWMA_IER |= 0x02 //1:允许捕获/比较中断 +#define PWMA_CC1IE_Disable() PWMA_IER &= ~0x02 //0:禁止捕获/比较中断 +#define PWMA_CC2IE_Enable() PWMA_IER |= 0x04 //1:允许捕获/比较中断 +#define PWMA_CC2IE_Disable() PWMA_IER &= ~0x04 //0:禁止捕获/比较中断 +#define PWMA_CC3IE_Enable() PWMA_IER |= 0x08 //1:允许捕获/比较中断 +#define PWMA_CC3IE_Disable() PWMA_IER &= ~0x08 //0:禁止捕获/比较中断 +#define PWMA_CC4IE_Enable() PWMA_IER |= 0x10 //1:允许捕获/比较中断 +#define PWMA_CC4IE_Disable() PWMA_IER &= ~0x10 //0:禁止捕获/比较中断 +#define PWMA_COMIEA_Enable() PWMA_IER |= 0x20 //1:允许COM中断 +#define PWMA_COMIEA_Disable() PWMA_IER &= ~0x20 //0:禁止COM中断 +#define PWMA_TIEA_Enable() PWMA_IER |= 0x40 //1:允许触发中断 +#define PWMA_TIEA_Disable() PWMA_IER &= ~0x40 //0:禁止触发中断 +#define PWMA_BIEA_Enable() PWMA_IER |= 0x80 //1:允许刹车中断 +#define PWMA_BIEA_Disable() PWMA_IER &= ~0x80 //0:禁止刹车中断 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SR1 = 0xFEC5H; BIF1 TIF1 COMIF1 CC4IF CC3IF CC2IF CC1IF UIF1 0000,0000 /* 状态寄存器 1 */ +//sfr PWMB_SR1 = 0xFEE5H; BIF2 TIF2 COMIF2 CC8IF CC7IF CC6IF CC5IF UIF2 0000,0000 /* 状态寄存器 1 */ +#define UIF1 1 +#define CC1IF (1<<1) +#define CC2IF (1<<2) +#define CC3IF (1<<3) +#define CC4IF (1<<4) +#define COMIF1 (1<<5) +#define TIF1 (1<<6) +#define BIF1 (1<<7) + +#define UIF2 1 +#define CC5IF (1<<1) +#define CC6IF (1<<2) +#define CC7IF (1<<3) +#define CC8IF (1<<4) +#define COMIF2 (1<<5) +#define TIF2 (1<<6) +#define BIF2 (1<<7) + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_SR2 = 0xFEC6H; - - - CC4OF CC3OF CC2OF CC1OF - xxx0,000x /* 状态寄存器 2 */ +//sfr PWMB_SR2 = 0xFEE6H; - - - CC8OF CC7OF CC6OF CC5OF - xxx0,000x /* 状态寄存器 2 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_EGR = 0xFEC7H; BG1 TG1 COMG1 CC4G CC3G CC2G CC1G UG1 0000,0000 /* 事件产生寄存器 */ +//sfr PWMB_EGR = 0xFEE7H; BG2 TG2 COMG2 CC8G CC7G CC6G CC5G UG2 0000,0000 /* 事件产生寄存器 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR1 = 0xFEC8H; OC1CE OC1M2 OC1M1 OC1M0 OC1PE OC1FE CC1S1 CC1S0 0000,0000 /* 捕获/比较模式寄存器 1 - 通道配置为比较输出模式 */ +//sfr PWMB_CCMR1 = 0xFEE8H; OC5CE OC5M2 OC5M1 OC5M0 OC5PE OC5FE CC5S1 CC5S0 0000,0000 /* 捕获/比较模式寄存器 1 - 通道配置为比较输出模式 */ +#define OCnCE (1<<7) + +#define CCMRn_FREEZE 0x00 //冻结 +#define CCMRn_MATCH_VALID 0x10 //匹配时设置通道 n 的输出为有效电平 +#define CCMRn_MATCH_INVALID 0x20 //匹配时设置通道 n 的输出为无效电平 +#define CCMRn_ROLLOVER 0x30 //翻转 +#define CCMRn_FORCE_INVALID 0x40 //强制为无效电平 +#define CCMRn_FORCE_VALID 0x50 //强制为有效电平 +#define CCMRn_PWM_MODE1 0x60 //PWM 模式 1 +#define CCMRn_PWM_MODE2 0x70 //PWM 模式 2 + +#define PWMA_OC1ModeSet(n) PWMA_CCMR1 = (PWMA_CCMR1 & ~0x70) | (n) //输出比较模式设置 +#define PWMB_OC5ModeSet(n) PWMB_CCMR1 = (PWMB_CCMR1 & ~0x70) | (n) //输出比较模式设置 + +#define PWMA_OC1_ReloadEnable() PWMA_CCMR1 |= 0x08 //1:开启 OC1PE 输出比较的预装载功能 +#define PWMA_OC1_RelosdDisable() PWMA_CCMR1 &= ~0x08 //0:禁止 OC1PE 输出比较的预装载功能 +#define PWMB_OC5_ReloadEnable() PWMB_CCMR1 |= 0x08 //1:开启 OC5PE 输出比较的预装载功能 +#define PWMB_OC5_RelosdDisable() PWMB_CCMR1 &= ~0x08 //0:禁止 OC5PE 输出比较的预装载功能 + +#define PWMA_OC1_FastEnable() PWMA_CCMR1 |= 0x04 //1:开启 OC1FE 输出比较快速功能 +#define PWMA_OC1_FastDisable() PWMA_CCMR1 &= ~0x04 //0:禁止 OC1FE 输出比较快速功能 +#define PWMB_OC5_FastEnable() PWMB_CCMR1 |= 0x04 //1:开启 OC5FE 输出比较快速功能 +#define PWMB_OC5_FastDisable() PWMB_CCMR1 &= ~0x04 //0:禁止 OC5FE 输出比较快速功能 + +#define CCAS_OUTPUT 0x00 //输出 +#define CCAS_IUTPUT_TI1FP1 0x01 //输入,IC1/IC2/IC3/IC4 映射在 TI1FP1 上 +#define CCAS_IUTPUT_TI2FP1 0x02 //输入,IC1/IC2/IC3/IC4 映射在 TI2FP1 上 +#define CCAS_IUTPUT_TRC 0x03 //输入,IC1/IC2/IC3/IC4 映射在 TRC 上 +#define CCBS_OUTPUT 0x00 //输出 +#define CCBS_IUTPUT_TI5FP5 0x01 //输入,IC5/IC6/IC7/IC8 映射在 TI5FP5 上 +#define CCBS_IUTPUT_TI6FP5 0x02 //输入,IC5/IC6/IC7/IC8 映射在 TI6FP5 上 +#define CCBS_IUTPUT_TRC 0x03 //输入,IC5/IC6/IC7/IC8 映射在 TRC 上 + +#define PWMA_CC1S_Direction(n) PWMA_CCMR1 = (PWMA_CCMR1 & ~0x03) | (n) //捕获/比较 1 选择。这两位定义通道的方向(输入/输出),及输入脚的选择 +#define PWMB_CC5S_Direction(n) PWMB_CCMR1 = (PWMB_CCMR1 & ~0x03) | (n) //捕获/比较 5 选择。这两位定义通道的方向(输入/输出),及输入脚的选择 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR1 = 0xFEC8H; IC1F3 IC1F2 IC1F1 IC1F0 IC1PSC1 IC1PSC0 CC1S1 CC1S0 0000,0000 /* 捕获/比较模式寄存器 1 - 通道配置为捕获输入模式 */ +//sfr PWMB_CCMR1 = 0xFEE8H; IC5F3 IC5F2 IC5F1 IC5F0 IC5PSC1 IC5PSC0 CC5S1 CC5S0 0000,0000 /* 捕获/比较模式寄存器 1 - 通道配置为捕获输入模式 */ + +#define ICnF_01_Clock 0 +#define ICnF_02_Clock 1 +#define ICnF_04_Clock 2 +#define ICnF_08_Clock 3 +#define ICnF_12_Clock 4 +#define ICnF_16_Clock 5 +#define ICnF_24_Clock 6 +#define ICnF_32_Clock 7 +#define ICnF_48_Clock 8 +#define ICnF_64_Clock 9 +#define ICnF_80_Clock 10 +#define ICnF_96_Clock 11 +#define ICnF_128_Clock 12 +#define ICnF_160_Clock 13 +#define ICnF_192_Clock 14 +#define ICnF_256_Clock 15 + +#define PWMA_IC1F_FilterClock(n) PWMA_CCMR1 = (PWMA_CCMR1 & 0x0F) | (n<<4) //输入捕获 1 滤波器选择,该位域定义了 TIn 的采样频率及数字滤波器长度 +#define PWMB_IC5F_FilterClock(n) PWMB_CCMR1 = (PWMB_CCMR1 & 0x0F) | (n<<4) //输入捕获 5 滤波器选择,该位域定义了 TIn 的采样频率及数字滤波器长度 + +#define PWMA_IC1PSC_PrescalerSet(n) PWMA_CCMR1 = (PWMA_CCMR1 & 0xF3) | ((n&3)<<2) //输入/捕获 1 预分频器,0~3 +#define PWMB_IC5PSC_PrescalerSet(n) PWMB_CCMR1 = (PWMB_CCMR1 & 0xF3) | ((n&3)<<2) //输入/捕获 5 预分频器,0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR2 = 0xFEC9H; OC2CE OC2M2 OC2M1 OC2M0 OC2PE OC2FE CC2S1 CC2S0 0000,0000 /* 捕获/比较模式寄存器 2 - 通道配置为比较输出模式 */ +//sfr PWMB_CCMR2 = 0xFEE9H; OC6CE OC6M2 OC6M1 OC6M0 OC6PE OC6FE CC6S1 CC6S0 0000,0000 /* 捕获/比较模式寄存器 2 - 通道配置为比较输出模式 */ + +#define PWMA_OC2ModeSet(n) PWMA_CCMR2 = (PWMA_CCMR2 & ~0x70) | (n) //输出比较模式设置 +#define PWMB_OC6ModeSet(n) PWMB_CCMR2 = (PWMB_CCMR2 & ~0x70) | (n) //输出比较模式设置 + +#define PWMA_OC2_ReloadEnable() PWMA_CCMR2 |= 0x08 //1:开启 OC2PE 输出比较的预装载功能 +#define PWMA_OC2_RelosdDisable() PWMA_CCMR2 &= ~0x08 //0:禁止 OC2PE 输出比较的预装载功能 +#define PWMB_OC6_ReloadEnable() PWMB_CCMR2 |= 0x08 //1:开启 OC6PE 输出比较的预装载功能 +#define PWMB_OC6_RelosdDisable() PWMB_CCMR2 &= ~0x08 //0:禁止 OC6PE 输出比较的预装载功能 + +#define PWMA_OC2_FastEnable() PWMA_CCMR2 |= 0x04 //1:开启 OC2FE 输出比较快速功能 +#define PWMA_OC2_FastDisable() PWMA_CCMR2 &= ~0x04 //0:禁止 OC2FE 输出比较快速功能 +#define PWMB_OC6_FastEnable() PWMB_CCMR2 |= 0x04 //1:开启 OC6FE 输出比较快速功能 +#define PWMB_OC6_FastDisable() PWMB_CCMR2 &= ~0x04 //0:禁止 OC6FE 输出比较快速功能 + +#define PWMA_CC2S_Direction(n) PWMA_CCMR2 = (PWMA_CCMR2 & ~0x03) | (n) //捕获/比较 2 选择。这两位定义通道的方向(输入/输出),及输入脚的选择 +#define PWMB_CC6S_Direction(n) PWMB_CCMR2 = (PWMB_CCMR2 & ~0x03) | (n) //捕获/比较 6 选择。这两位定义通道的方向(输入/输出),及输入脚的选择 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR2 = 0xFEC9H; IC2F3 IC2F2 IC2F1 IC2F0 IC2PSC1 IC2PSC0 CC2S1 CC2S0 0000,0000 /* 捕获/比较模式寄存器 2 - 通道配置为捕获输入模式 */ +//sfr PWMB_CCMR2 = 0xFEE9H; IC6F3 IC6F2 IC6F1 IC6F0 IC6PSC1 IC6PSC0 CC6S1 CC6S0 0000,0000 /* 捕获/比较模式寄存器 2 - 通道配置为捕获输入模式 */ + +#define PWMA_IC2F_FilterClock(n) PWMA_CCMR2 = (PWMA_CCMR2 & 0x0F) | (n<<4) //输入捕获 2 滤波器选择,该位域定义了 TIn 的采样频率及数字滤波器长度 +#define PWMB_IC6F_FilterClock(n) PWMB_CCMR2 = (PWMB_CCMR2 & 0x0F) | (n<<4) //输入捕获 6 滤波器选择,该位域定义了 TIn 的采样频率及数字滤波器长度 + +#define PWMA_IC2PSC_PrescalerSet(n) PWMA_CCMR2 = (PWMA_CCMR2 & 0xF3) | ((n&3)<<2) //输入/捕获 2 预分频器,0~3 +#define PWMB_IC6PSC_PrescalerSet(n) PWMB_CCMR2 = (PWMB_CCMR2 & 0xF3) | ((n&3)<<2) //输入/捕获 6 预分频器,0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR3 = 0xFECAH; OC3CE OC3M2 OC3M1 OC3M0 OC3PE OC3FE CC3S1 CC3S0 0000,0000 /* 捕获/比较模式寄存器 3 - 通道配置为比较输出模式 */ +//sfr PWMB_CCMR3 = 0xFEEAH; OC7CE OC7M2 OC7M1 OC7M0 OC7PE OC7FE CC7S1 CC7S0 0000,0000 /* 捕获/比较模式寄存器 3 - 通道配置为比较输出模式 */ + +#define PWMA_OC3ModeSet(n) PWMA_CCMR3 = (PWMA_CCMR3 & ~0x70) | (n) //输出比较模式设置 +#define PWMB_OC7ModeSet(n) PWMB_CCMR3 = (PWMB_CCMR3 & ~0x70) | (n) //输出比较模式设置 + +#define PWMA_OC3_ReloadEnable() PWMA_CCMR3 |= 0x08 //1:开启 OC3PE 输出比较的预装载功能 +#define PWMA_OC3_RelosdDisable() PWMA_CCMR3 &= ~0x08 //0:禁止 OC3PE 输出比较的预装载功能 +#define PWMB_OC7_ReloadEnable() PWMB_CCMR3 |= 0x08 //1:开启 OC7PE 输出比较的预装载功能 +#define PWMB_OC7_RelosdDisable() PWMB_CCMR3 &= ~0x08 //0:禁止 OC7PE 输出比较的预装载功能 + +#define PWMA_OC3_FastEnable() PWMA_CCMR3 |= 0x04 //1:开启 OC3FE 输出比较快速功能 +#define PWMA_OC3_FastDisable() PWMA_CCMR3 &= ~0x04 //0:禁止 OC3FE 输出比较快速功能 +#define PWMB_OC7_FastEnable() PWMB_CCMR3 |= 0x04 //1:开启 OC7FE 输出比较快速功能 +#define PWMB_OC7_FastDisable() PWMB_CCMR3 &= ~0x04 //0:禁止 OC7FE 输出比较快速功能 + +#define PWMA_CC3S_Direction(n) PWMA_CCMR3 = (PWMA_CCMR3 & ~0x03) | (n) //捕获/比较 3 选择。这两位定义通道的方向(输入/输出),及输入脚的选择 +#define PWMB_CC7S_Direction(n) PWMB_CCMR3 = (PWMB_CCMR3 & ~0x03) | (n) //捕获/比较 7 选择。这两位定义通道的方向(输入/输出),及输入脚的选择 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR3 = 0xFECAH; IC3F3 IC3F2 IC3F1 IC3F0 IC3PSC1 IC3PSC0 CC3S1 CC3S0 0000,0000 /* 捕获/比较模式寄存器 3 - 通道配置为捕获输入模式 */ +//sfr PWMB_CCMR3 = 0xFEEAH; IC7F3 IC7F2 IC7F1 IC7F0 IC7PSC1 IC7PSC0 CC7S1 CC7S0 0000,0000 /* 捕获/比较模式寄存器 3 - 通道配置为捕获输入模式 */ + +#define PWMA_IC3F_FilterClock(n) PWMA_CCMR3 = (PWMA_CCMR3 & 0x0F) | (n<<4) //输入捕获 3 滤波器选择,该位域定义了 TIn 的采样频率及数字滤波器长度 +#define PWMB_IC7F_FilterClock(n) PWMB_CCMR3 = (PWMB_CCMR3 & 0x0F) | (n<<4) //输入捕获 7 滤波器选择,该位域定义了 TIn 的采样频率及数字滤波器长度 + +#define PWMA_IC3PSC_PrescalerSet(n) PWMA_CCMR3 = (PWMA_CCMR3 & 0xF3) | ((n&3)<<2) //输入/捕获 3 预分频器,0~3 +#define PWMB_IC7PSC_PrescalerSet(n) PWMB_CCMR3 = (PWMB_CCMR3 & 0xF3) | ((n&3)<<2) //输入/捕获 7 预分频器,0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR4 = 0xFECBH; OC4CE OC4M2 OC4M1 OC4M0 OC4PE OC4FE CC4S1 CC4S0 0000,0000 /* 捕获/比较模式寄存器 4 - 通道配置为比较输出模式 */ +//sfr PWMB_CCMR4 = 0xFEEBH; OC8CE OC8M2 OC8M1 OC8M0 OC8PE OC8FE CC8S1 CC8S0 0000,0000 /* 捕获/比较模式寄存器 4 - 通道配置为比较输出模式 */ + +#define PWMA_OC4ModeSet(n) PWMA_CCMR4 = (PWMA_CCMR4 & ~0x70) | (n) //输出比较模式设置 +#define PWMB_OC8ModeSet(n) PWMB_CCMR4 = (PWMB_CCMR4 & ~0x70) | (n) //输出比较模式设置 + +#define PWMA_OC4_ReloadEnable() PWMA_CCMR4 |= 0x08 //1:开启 OC4PE 输出比较的预装载功能 +#define PWMA_OC4_RelosdDisable() PWMA_CCMR4 &= ~0x08 //0:禁止 OC4PE 输出比较的预装载功能 +#define PWMB_OC8_ReloadEnable() PWMB_CCMR4 |= 0x08 //1:开启 OC8PE 输出比较的预装载功能 +#define PWMB_OC8_RelosdDisable() PWMB_CCMR4 &= ~0x08 //0:禁止 OC8PE 输出比较的预装载功能 + +#define PWMA_OC4_FastEnable() PWMA_CCMR4 |= 0x04 //1:开启 OC4FE 输出比较快速功能 +#define PWMA_OC4_FastDisable() PWMA_CCMR4 &= ~0x04 //0:禁止 OC4FE 输出比较快速功能 +#define PWMB_OC8_FastEnable() PWMB_CCMR4 |= 0x04 //1:开启 OC8FE 输出比较快速功能 +#define PWMB_OC8_FastDisable() PWMB_CCMR4 &= ~0x04 //0:禁止 OC8FE 输出比较快速功能 + +#define PWMA_CC4S_Direction(n) PWMA_CCMR4 = (PWMA_CCMR4 & ~0x03) | (n) //捕获/比较 4 选择。这两位定义通道的方向(输入/输出),及输入脚的选择 +#define PWMB_CC8S_Direction(n) PWMB_CCMR4 = (PWMB_CCMR4 & ~0x03) | (n) //捕获/比较 8 选择。这两位定义通道的方向(输入/输出),及输入脚的选择 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCMR4 = 0xFECBH; IC4F3 IC4F2 IC4F1 IC4F0 IC4PSC1 IC4PSC0 CC4S1 CC4S0 0000,0000 /* 捕获/比较模式寄存器 4 - 通道配置为捕获输入模式 */ +//sfr PWMB_CCMR4 = 0xFEEBH; IC8F3 IC8F2 IC8F1 IC8F0 IC8PSC1 IC8PSC0 CC8S1 CC8S0 0000,0000 /* 捕获/比较模式寄存器 4 - 通道配置为捕获输入模式 */ + +#define PWMA_IC4F_FilterClock(n) PWMA_CCMR4 = (PWMA_CCMR4 & 0x0F) | (n<<4) //输入捕获 4 滤波器选择,该位域定义了 TIn 的采样频率及数字滤波器长度 +#define PWMB_IC8F_FilterClock(n) PWMB_CCMR4 = (PWMB_CCMR4 & 0x0F) | (n<<4) //输入捕获 8 滤波器选择,该位域定义了 TIn 的采样频率及数字滤波器长度 + +#define PWMA_IC4PSC_PrescalerSet(n) PWMA_CCMR4 = (PWMA_CCMR4 & 0xF3) | ((n&3)<<2) //输入/捕获 4 预分频器,0~3 +#define PWMB_IC8PSC_PrescalerSet(n) PWMB_CCMR4 = (PWMB_CCMR4 & 0xF3) | ((n&3)<<2) //输入/捕获 8 预分频器,0~3 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCER1 = 0xFECCH; CC2NP CC2NE CC2P CC2E CC1NP CC1NE CC1P CC1E 0000,0000 /* 捕获/比较使能寄存器 1 */ +//sfr PWMB_CCER1 = 0xFEECH; - - CC6P CC6E - - CC5P CC5E 0000,0000 /* 捕获/比较使能寄存器 1 */ + +#define PWMA_CCER1_Disable() PWMA_CCER1 = 0x00 //关闭所有输入捕获/比较输出 +#define PWMA_CC1E_Enable() PWMA_CCER1 |= 0x01 //1:开启输入捕获/比较输出 +#define PWMA_CC1E_Disable() PWMA_CCER1 &= ~0x01 //0:关闭输入捕获/比较输出 +#define PWMA_CC1P_LowValid() PWMA_CCER1 |= 0x02 //1:低电平有效 +#define PWMA_CC1P_HighValid() PWMA_CCER1 &= ~0x02 //0:高电平有效 +#define PWMA_CC1P_CaptureRise() PWMA_CCER1 |= 0x02 //1:捕获发生在 TI1F 或 TI2F 的下降沿 +#define PWMA_CC1P_CaptureFall() PWMA_CCER1 &= ~0x02 //0:捕获发生在 TI1F 或 TI2F 的上升沿 +#define PWMA_CC1NE_Enable() PWMA_CCER1 |= 0x04 //1:开启比较输出 +#define PWMA_CC1NE_Disable() PWMA_CCER1 &= ~0x04 //0:关闭比较输出 +#define PWMA_CC1NP_LowValid() PWMA_CCER1 |= 0x08 //1:低电平有效 +#define PWMA_CC1NP_HighValid() PWMA_CCER1 &= ~0x08 //0:高电平有效 + +#define PWMA_CC2E_Enable() PWMA_CCER1 |= 0x10 //1:开启输入捕获/比较输出 +#define PWMA_CC2E_Disable() PWMA_CCER1 &= ~0x10 //0:关闭输入捕获/比较输出 +#define PWMA_CC2P_LowValid() PWMA_CCER1 |= 0x20 //1:低电平有效 +#define PWMA_CC2P_HighValid() PWMA_CCER1 &= ~0x20 //0:高电平有效 +#define PWMA_CC2P_CaptureRise() PWMA_CCER1 |= 0x20 //1:捕获发生在 TI1F 或 TI2F 的下降沿 +#define PWMA_CC2P_CaptureFall() PWMA_CCER1 &= ~0x20 //0:捕获发生在 TI1F 或 TI2F 的上升沿 +#define PWMA_CC2NE_Enable() PWMA_CCER1 |= 0x40 //1:开启比较输出 +#define PWMA_CC2NE_Disable() PWMA_CCER1 &= ~0x40 //0:关闭比较输出 +#define PWMA_CC2NP_LowValid() PWMA_CCER1 |= 0x80 //1:低电平有效 +#define PWMA_CC2NP_HighValid() PWMA_CCER1 &= ~0x80 //0:高电平有效 + +#define PWMB_CCER1_Disable() PWMB_CCER1 = 0x00 //关闭所有输入捕获/比较输出 +#define PWMB_CC5E_Enable() PWMB_CCER1 |= 0x01 //1:开启输入捕获/比较输出 +#define PWMB_CC5E_Disable() PWMB_CCER1 &= ~0x01 //0:关闭输入捕获/比较输出 +#define PWMB_CC5P_LowValid() PWMB_CCER1 |= 0x02 //1:低电平有效 +#define PWMB_CC5P_HighValid() PWMB_CCER1 &= ~0x02 //0:高电平有效 +#define PWMB_CC5P_CaptureRise() PWMB_CCER1 |= 0x02 //1:捕获发生在 TI1F 或 TI2F 的下降沿 +#define PWMB_CC5P_CaptureFall() PWMB_CCER1 &= ~0x02 //0:捕获发生在 TI1F 或 TI2F 的上升沿 + +#define PWMB_CC6E_Enable() PWMB_CCER1 |= 0x10 //1:开启输入捕获/比较输出 +#define PWMB_CC6E_Disable() PWMB_CCER1 &= ~0x10 //0:关闭输入捕获/比较输出 +#define PWMB_CC6P_LowValid() PWMB_CCER1 |= 0x20 //1:低电平有效 +#define PWMB_CC6P_HighValid() PWMB_CCER1 &= ~0x20 //0:高电平有效 +#define PWMB_CC6P_CaptureRise() PWMB_CCER1 |= 0x20 //1:捕获发生在 TI1F 或 TI2F 的下降沿 +#define PWMB_CC6P_CaptureFall() PWMB_CCER1 &= ~0x20 //0:捕获发生在 TI1F 或 TI2F 的上升沿 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCER2 = 0xFECDH; CC4NP CC4NE CC4P CC4E CC3NP CC3NE CC3P CC3E 0000,0000 /* 捕获/比较使能寄存器 2 */ +//sfr PWMB_CCER2 = 0xFEEDH; - - CC8P CC8E - - CC7P CC7E 0000,0000 /* 捕获/比较使能寄存器 2 */ + +#define PWMA_CCER2_Disable() PWMA_CCER2 = 0x00 //关闭所有输入捕获/比较输出 +#define PWMA_CC3E_Enable() PWMA_CCER2 |= 0x01 //1:开启输入捕获/比较输出 +#define PWMA_CC3E_Disable() PWMA_CCER2 &= ~0x01 //0:关闭输入捕获/比较输出 +#define PWMA_CC3P_LowValid() PWMA_CCER2 |= 0x02 //1:低电平有效 +#define PWMA_CC3P_HighValid() PWMA_CCER2 &= ~0x02 //0:高电平有效 +#define PWMA_CC3P_CaptureRise() PWMA_CCER2 |= 0x02 //1:捕获发生在 TI1F 或 TI2F 的下降沿 +#define PWMA_CC3P_CaptureFall() PWMA_CCER2 &= ~0x02 //0:捕获发生在 TI1F 或 TI2F 的上升沿 +#define PWMA_CC3NE_Enable() PWMA_CCER2 |= 0x04 //1:开启比较输出 +#define PWMA_CC3NE_Disable() PWMA_CCER2 &= ~0x04 //0:关闭比较输出 +#define PWMA_CC3NP_LowValid() PWMA_CCER2 |= 0x08 //1:低电平有效 +#define PWMA_CC3NP_HighValid() PWMA_CCER2 &= ~0x08 //0:高电平有效 + +#define PWMA_CC4E_Enable() PWMA_CCER2 |= 0x10 //1:开启输入捕获/比较输出 +#define PWMA_CC4E_Disable() PWMA_CCER2 &= ~0x10 //0:关闭输入捕获/比较输出 +#define PWMA_CC4P_LowValid() PWMA_CCER2 |= 0x20 //1:低电平有效 +#define PWMA_CC4P_HighValid() PWMA_CCER2 &= ~0x20 //0:高电平有效 +#define PWMA_CC4P_CaptureRise() PWMA_CCER2 |= 0x20 //1:捕获发生在 TI1F 或 TI2F 的下降沿 +#define PWMA_CC4P_CaptureFall() PWMA_CCER2 &= ~0x20 //0:捕获发生在 TI1F 或 TI2F 的上升沿 +#define PWMA_CC4NE_Enable() PWMA_CCER2 |= 0x40 //1:开启比较输出 +#define PWMA_CC4NE_Disable() PWMA_CCER2 &= ~0x40 //0:关闭比较输出 +#define PWMA_CC4NP_LowValid() PWMA_CCER2 |= 0x80 //1:低电平有效 +#define PWMA_CC4NP_HighValid() PWMA_CCER2 &= ~0x80 //0:高电平有效 + +#define PWMB_CCER2_Disable() PWMB_CCER2 = 0x00 //关闭所有输入捕获/比较输出 +#define PWMB_CC7E_Enable() PWMB_CCER2 |= 0x01 //1:开启输入捕获/比较输出 +#define PWMB_CC7E_Disable() PWMB_CCER2 &= ~0x01 //0:关闭输入捕获/比较输出 +#define PWMB_CC7P_LowValid() PWMB_CCER2 |= 0x02 //1:低电平有效 +#define PWMB_CC7P_HighValid() PWMB_CCER2 &= ~0x02 //0:高电平有效 +#define PWMB_CC7P_CaptureRise() PWMB_CCER2 |= 0x02 //1:捕获发生在 TI1F 或 TI2F 的下降沿 +#define PWMB_CC7P_CaptureFall() PWMB_CCER2 &= ~0x02 //0:捕获发生在 TI1F 或 TI2F 的上升沿 + +#define PWMB_CC8E_Enable() PWMB_CCER2 |= 0x10 //1:开启输入捕获/比较输出 +#define PWMB_CC8E_Disable() PWMB_CCER2 &= ~0x10 //0:关闭输入捕获/比较输出 +#define PWMB_CC8P_LowValid() PWMB_CCER2 |= 0x20 //1:低电平有效 +#define PWMB_CC8P_HighValid() PWMB_CCER2 &= ~0x20 //0:高电平有效 +#define PWMB_CC8P_CaptureRise() PWMB_CCER2 |= 0x20 //1:捕获发生在 TI1F 或 TI2F 的下降沿 +#define PWMB_CC8P_CaptureFall() PWMB_CCER2 &= ~0x20 //0:捕获发生在 TI1F 或 TI2F 的上升沿 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CNTRH = 0xFECEH; CNT1[15:8] 0000,0000 /* 计数器高 8 位 */ +//sfr PWMB_CNTRH = 0xFEEEH; CNT2[15:8] 0000,0000 /* 计数器高 8 位 */ +//sfr PWMA_CNTRL = 0xFECFH; CNT1[7:0] 0000,0000 /* 计数器低 8 位 */ +//sfr PWMB_CNTRL = 0xFEEFH; CNT2[7:0] 0000,0000 /* 计数器低 8 位 */ + +#define PWMA_Counter(n) PWMA_CNTR = n //计数器设置 +#define PWMB_Counter(n) PWMB_CNTR = n //计数器设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_PSCRH = 0xFED0H; PSC1[15:8] 0000,0000 /* 预分频器高 8 位 */ +//sfr PWMB_PSCRH = 0xFEF0H; PSC2[15:8] 0000,0000 /* 预分频器高 8 位 */ +//sfr PWMA_PSCRL = 0xFED1H; PSC1[7:0] 0000,0000 /* 预分频器低 8 位 */ +//sfr PWMB_PSCRL = 0xFEF1H; PSC2[7:0] 0000,0000 /* 预分频器低 8 位 */ + +#define PWMA_Prescaler(n) PWMA_PSCR = n //预分频器设置 +#define PWMB_Prescaler(n) PWMB_PSCR = n //预分频器设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_ARRH = 0xFED2H; ARR1[15:8] 0000,0000 /* 自动重装载寄存器高 8 位 */ +//sfr PWMB_ARRH = 0xFEF2H; ARR2[15:8] 0000,0000 /* 自动重装载寄存器高 8 位 */ +//sfr PWMA_ARRL = 0xFED3H; ARR1[7:0] 0000,0000 /* 自动重装载寄存器低 8 位 */ +//sfr PWMB_ARRL = 0xFEF3H; ARR2[7:0] 0000,0000 /* 自动重装载寄存器低 8 位 */ + +#define PWMA_AutoReload(n) PWMA_ARR = n //自动重装载寄存器设置 +#define PWMB_AutoReload(n) PWMB_ARR = n //自动重装载寄存器设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_RCR = 0xFED4H; REP1[7:0] 0000,0000 /* 重复计数器寄存器 */ +//sfr PWMB_RCR = 0xFEF4H; REP2[7:0] 0000,0000 /* 重复计数器寄存器 */ + +#define PWMA_ReCounter(n) PWMA_RCR = n //重复计数器寄存器设置 +#define PWMB_ReCounter(n) PWMB_RCR = n //重复计数器寄存器设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR1H = 0xFED5H; CCR1[15:8] 0000,0000 /* 捕获/比较寄存器 1 高 8 位 */ +//sfr PWMB_CCR5H = 0xFEF5H; CCR5[15:8] 0000,0000 /* 捕获/比较寄存器 1 高 8 位 */ +//sfr PWMA_CCR1L = 0xFED6H; CCR1[7:0] 0000,0000 /* 捕获/比较寄存器 1 低 8 位 */ +//sfr PWMB_CCR5L = 0xFEF6H; CCR5[7:0] 0000,0000 /* 捕获/比较寄存器 1 低 8 位 */ + +#define PWMA_Duty1(n) PWMA_CCR1 = n //捕获/比较寄存器 1 设置 +#define PWMB_Duty5(n) PWMB_CCR5 = n //捕获/比较寄存器 1 设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR2H = 0xFED7H; CCR2[15:8] 0000,0000 /* 捕获/比较寄存器 2 高 8 位 */ +//sfr PWMB_CCR6H = 0xFEF7H; CCR6[15:8] 0000,0000 /* 捕获/比较寄存器 2 高 8 位 */ +//sfr PWMA_CCR2L = 0xFED8H; CCR2[7:0] 0000,0000 /* 捕获/比较寄存器 2 低 8 位 */ +//sfr PWMB_CCR6L = 0xFEF8H; CCR6[7:0] 0000,0000 /* 捕获/比较寄存器 2 低 8 位 */ + +#define PWMA_Duty2(n) PWMA_CCR2 = n //捕获/比较寄存器 2 设置 +#define PWMB_Duty6(n) PWMB_CCR6 = n //捕获/比较寄存器 2 设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR3H = 0xFED9H; CCR3[15:8] 0000,0000 /* 捕获/比较寄存器 3 高 8 位 */ +//sfr PWMB_CCR7H = 0xFEF9H; CCR7[15:8] 0000,0000 /* 捕获/比较寄存器 3 高 8 位 */ +//sfr PWMA_CCR3L = 0xFEDAH; CCR3[7:0] 0000,0000 /* 捕获/比较寄存器 3 低 8 位 */ +//sfr PWMB_CCR7L = 0xFEFAH; CCR7[7:0] 0000,0000 /* 捕获/比较寄存器 3 低 8 位 */ + +#define PWMA_Duty3(n) PWMA_CCR3 = n //捕获/比较寄存器 3 设置 +#define PWMB_Duty7(n) PWMB_CCR7 = n //捕获/比较寄存器 3 设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_CCR4H = 0xFEDBH; CCR4[15:8] 0000,0000 /* 捕获/比较寄存器 4 高 8 位 */ +//sfr PWMB_CCR8H = 0xFEFBH; CCR8[15:8] 0000,0000 /* 捕获/比较寄存器 4 高 8 位 */ +//sfr PWMA_CCR4L = 0xFEDCH; CCR4[7:0] 0000,0000 /* 捕获/比较寄存器 4 低 8 位 */ +//sfr PWMB_CCR8L = 0xFEFCH; CCR8[7:0] 0000,0000 /* 捕获/比较寄存器 4 低 8 位 */ + +#define PWMA_Duty4(n) PWMA_CCR4 = n //捕获/比较寄存器 4 设置 +#define PWMB_Duty8(n) PWMB_CCR8 = n //捕获/比较寄存器 4 设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_BRK = 0xFEDDH; MOE1 AOE1 BKP1 BKE1 OSSR1 OSSI1 LOCK11 LOCK10 0000,0000 /* 刹车寄存器 */ +//sfr PWMB_BRK = 0xFEFDH; MOE2 AOE2 BKP2 BKE2 OSSR2 OSSI2 LOCK21 LOCK20 0000,0000 /* 刹车寄存器 */ + +#define PWMA_BrakeOutputEnable() PWMA_BRK |= 0x80 //1:主输出使能 +#define PWMA_BrakeOutputDisable() PWMA_BRK &= ~0x80 //0:主输出禁止 +#define PWMB_BrakeOutputEnable() PWMB_BRK |= 0x80 //1:主输出使能 +#define PWMB_BrakeOutputDisable() PWMB_BRK &= ~0x80 //0:主输出禁止 + +#define PWMA_BrakeAutoOutputEnable() PWMA_BRK |= 0x40 //1:自动输出使能 +#define PWMA_BrakeAutoOutputDisable() PWMA_BRK &= ~0x40 //0:自动输出禁止 +#define PWMB_BrakeAutoOutputEnable() PWMB_BRK |= 0x40 //1:自动输出使能 +#define PWMB_BrakeAutoOutputDisable() PWMB_BRK &= ~0x40 //0:自动输出禁止 + +#define PWMA_BrakeHighValid() PWMA_BRK |= 0x20 //1:刹车输入高电平有效 +#define PWMA_BrakeLowValid() PWMA_BRK &= ~0x20 //0:刹车输入低电平有效 +#define PWMB_BrakeHighValid() PWMB_BRK |= 0x20 //1:刹车输入高电平有效 +#define PWMB_BrakeLowValid() PWMB_BRK &= ~0x20 //0:刹车输入低电平有效 + +#define PWMA_BrakeEnable() PWMA_BRK |= 0x10 //1:开启刹车输入 +#define PWMA_BrakeDisable() PWMA_BRK &= ~0x10 //0:禁止刹车输入 +#define PWMB_BrakeEnable() PWMB_BRK |= 0x10 //1:开启刹车输入 +#define PWMB_BrakeDisable() PWMB_BRK &= ~0x10 //0:禁止刹车输入 + +//运行模式下“关闭状态”选择 +#define PWMA_OSSRnEnable() PWMA_BRK |= 0x08 //1:当 PWM 不工作时,一旦 CCiE=1 或 CCiNE=1,首先开启 OC/OCN 并输出无效电平,然后置OC/OCN 使能输出信号=1 +#define PWMA_OSSRnDisable() PWMA_BRK &= ~0x08 //0:当 PWM 不工作时,禁止 OC/OCN 输出(OC/OCN 使能输出信号=0) +#define PWMB_OSSRnEnable() PWMB_BRK |= 0x08 //1:当 PWM 不工作时,一旦 CCiE=1 或 CCiNE=1,首先开启 OC/OCN 并输出无效电平,然后置OC/OCN 使能输出信号=1 +#define PWMB_OSSRnDisable() PWMB_BRK &= ~0x08 //0:当 PWM 不工作时,禁止 OC/OCN 输出(OC/OCN 使能输出信号=0) +//空闲模式下“关闭状态”选择 +#define PWMA_OSSInEnable() PWMA_BRK |= 0x04 //1:当 PWM 不工作时,一旦 CCiE=1 或 CCiNE=1,OC/OCN 首先输出其空闲电平,然后 OC/OCN使能输出信号=1 +#define PWMA_OSSInDisable() PWMA_BRK &= ~0x04 //0:当 PWM 不工作时,禁止 OC/OCN 输出(OC/OCN 使能输出信号=0) +#define PWMB_OSSInEnable() PWMB_BRK |= 0x04 //1:当 PWM 不工作时,一旦 CCiE=1 或 CCiNE=1,OC/OCN 首先输出其空闲电平,然后 OC/OCN使能输出信号=1 +#define PWMB_OSSInDisable() PWMB_BRK &= ~0x04 //0:当 PWM 不工作时,禁止 OC/OCN 输出(OC/OCN 使能输出信号=0) + +#define PWMn_lock_L0 0 //寄存器无写保护 +#define PWMn_lock_L1 1 //锁定级别 1:不能写入 PWMn_BKR 寄存器的 BKE、BKP、AOE 位和PWMn_OISR 寄存器的 OISI 位 +#define PWMn_lock_L2 2 //锁定级别 2:不能写入锁定级别 1 中的各位,也不能写入 CC 极性位以及 OSSR/OSSI 位 +#define PWMn_lock_L3 3 //锁定级别 3:不能写入锁定级别 2 中的各位,也不能写入 CC 控制位 + +#define PWMA_LockLevelSet(n) PWMA_BRK = (PWMA_BRK & ~0x03) | (n&3) //锁定设置。该位为防止软件错误而提供的写保护措施 +#define PWMB_LockLevelSet(n) PWMB_BRK = (PWMB_BRK & ~0x03) | (n&3) //锁定设置。该位为防止软件错误而提供的写保护措施 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_DTR = 0xFEDEH; DTG1[7:0] 0000,0000 /* 死区寄存器 */ +//sfr PWMB_DTR = 0xFEFEH; DTG2[7:0] 0000,0000 /* 死区寄存器 */ + +//DTGn[7:5] = 000~011: 死区时间 = DTGn[7:0] * tCK_PSC +//DTGn[7:5] = 100~101: 死区时间 = (64 + DTGn[6:0]) * 2 * tCK_PSC +//DTGn[7:5] = 110: 死区时间 = (32 + DTGn[5:0]) * 8 * tCK_PSC +//DTGn[7:5] = 111: 死区时间 = (32 + DTGn[4:0]) * 16 * tCK_PSC + +#define PWMA_DeadTime(n) PWMA_DTR = n //死区发生器设置 +#define PWMB_DeadTime(n) PWMB_DTR = n //死区发生器设置 + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr PWMA_OISR = 0xFEDFH; OIS4N OIS4 OIS3N OIS3 OIS2N OIS2 OIS1N OIS1 0000,0000 /* 输出空闲状态寄存器 */ +//sfr PWMB_OISR = 0xFEFFH; - OIS8 - OIS7 - OIS6 - OIS5 x0x0,x0x0 /* 输出空闲状态寄存器 */ + +#define PWMA_OC1_OUT_0() PWMA_OISR &= ~0x01 /* 当 MOE=0 时,如果 OC1N 使能,则在一个死区后,OC1=0 */ +#define PWMA_OC1_OUT_1() PWMA_OISR |= 0x01 /* 当 MOE=0 时,如果 OC1N 使能,则在一个死区后,OC1=1 */ +#define PWMA_OC1N_OUT_0() PWMA_OISR &= ~0x02 /* 当 MOE=0 时,则在一个死区后,OC1N=0 */ +#define PWMA_OC1N_OUT_1() PWMA_OISR |= 0x02 /* 当 MOE=0 时,则在一个死区后,OC1N=1 */ +#define PWMA_OC2_OUT_0() PWMA_OISR &= ~0x04 /* 当 MOE=0 时,如果 OC2N 使能,则在一个死区后,OC2=0 */ +#define PWMA_OC2_OUT_1() PWMA_OISR |= 0x04 /* 当 MOE=0 时,如果 OC2N 使能,则在一个死区后,OC2=1 */ +#define PWMA_OC2N_OUT_0() PWMA_OISR &= ~0x08 /* 当 MOE=0 时,则在一个死区后,OC2N=0 */ +#define PWMA_OC2N_OUT_1() PWMA_OISR |= 0x08 /* 当 MOE=0 时,则在一个死区后,OC2N=1 */ +#define PWMA_OC3_OUT_0() PWMA_OISR &= ~0x10 /* 当 MOE=0 时,如果 OC3N 使能,则在一个死区后,OC3=0 */ +#define PWMA_OC3_OUT_1() PWMA_OISR |= 0x10 /* 当 MOE=0 时,如果 OC3N 使能,则在一个死区后,OC3=1 */ +#define PWMA_OC3N_OUT_0() PWMA_OISR &= ~0x20 /* 当 MOE=0 时,则在一个死区后,OC3N=0 */ +#define PWMA_OC3N_OUT_1() PWMA_OISR |= 0x20 /* 当 MOE=0 时,则在一个死区后,OC3N=1 */ +#define PWMA_OC4_OUT_0() PWMA_OISR &= ~0x40 /* 当 MOE=0 时,如果 OC4N 使能,则在一个死区后,OC4=0 */ +#define PWMA_OC4_OUT_1() PWMA_OISR |= 0x40 /* 当 MOE=0 时,如果 OC4N 使能,则在一个死区后,OC4=1 */ +#define PWMA_OC4N_OUT_0() PWMA_OISR &= ~0x80 /* 当 MOE=0 时,则在一个死区后,OC4N=0 */ +#define PWMA_OC4N_OUT_1() PWMA_OISR |= 0x80 /* 当 MOE=0 时,则在一个死区后,OC4N=1 */ + +#define PWMB_OC5_OUT_0() PWMB_OISR &= ~0x01 /* 当 MOE=0 时,则在一个死区后,OC5=0 */ +#define PWMB_OC5_OUT_1() PWMB_OISR |= 0x01 /* 当 MOE=0 时,则在一个死区后,OC5=1 */ +#define PWMB_OC6_OUT_0() PWMB_OISR &= ~0x04 /* 当 MOE=0 时,则在一个死区后,OC6=0 */ +#define PWMB_OC6_OUT_1() PWMB_OISR |= 0x04 /* 当 MOE=0 时,则在一个死区后,OC6=1 */ +#define PWMB_OC7_OUT_0() PWMB_OISR &= ~0x10 /* 当 MOE=0 时,则在一个死区后,OC7=0 */ +#define PWMB_OC7_OUT_1() PWMB_OISR |= 0x10 /* 当 MOE=0 时,则在一个死区后,OC7=1 */ +#define PWMB_OC8_OUT_0() PWMB_OISR &= ~0x40 /* 当 MOE=0 时,则在一个死区后,OC8=0 */ +#define PWMB_OC8_OUT_1() PWMB_OISR |= 0x40 /* 当 MOE=0 时,则在一个死区后,OC8=1 */ + + + + +/* +;PCA_PWMn: 7 6 5 4 3 2 1 0 +; EBSn_1 EBSn_0 - - - - EPCnH EPCnL +;B5-B2: 保留 +;B1(EPCnH): 在PWM模式下,与CCAPnH组成9位数。 +;B0(EPCnL): 在PWM模式下,与CCAPnL组成9位数。 +*/ +#define PWM0_NORMAL() PCA_PWM0 &= ~3 /* PWM0正常输出(默认) */ +#define PWM0_OUT_0() PCA_PWM0 |= 3, CCAP0H = 0xff /* PWM0一直输出0 */ +#define PWM0_OUT_1() PCA_PWM0 &= 0xc0, CCAP0H = 0 /* PWM0一直输出1 */ + +#define PWM1_NORMAL() PCA_PWM1 &= ~3 /* PWM1正常输出(默认) */ +#define PWM1_OUT_0() PCA_PWM1 |= 3, CCAP1H = 0xff /* PWM1一直输出0 */ +#define PWM1_OUT_1() PCA_PWM1 &= 0xc0, CCAP1H = 0 /* PWM1一直输出1 */ + +#define PWM2_NORMAL() PCA_PWM2 &= ~3 /* PWM2正常输出(默认) */ +#define PWM2_OUT_0() PCA_PWM2 |= 3, CCAP2H = 0xff /* PWM2一直输出0 */ +#define PWM2_OUT_1() PCA_PWM2 &= 0xc0, CCAP2H = 0 /* PWM2一直输出1 */ + +//#define PWM3_NORMAL() PCA_PWM3 &= ~3 /* PWM3正常输出(默认) */ +//#define PWM3_OUT_0() PCA_PWM3 |= 3, CCAP3H = 0xff /* PWM3一直输出0 */ +//#define PWM3_OUT_1() PCA_PWM3 &= 0xc0, CCAP3H = 0 /* PWM3一直输出1 */ + + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CCON = 0xD8; CF CR - - CCF3 CCF2 CCF1 CCF0 00xx,xx00 //PCA 控制寄存器。 +sbit CCF0 = CCON^0; /* PCA 模块0中断标志,由硬件置位,必须由软件清0。 */ +sbit CCF1 = CCON^1; /* PCA 模块1中断标志,由硬件置位,必须由软件清0。 */ +sbit CCF2 = CCON^2; /* PCA 模块2中断标志,由硬件置位,必须由软件清0。 */ +//sbit CCF3 = CCON^3; /* PCA 模块3中断标志,由硬件置位,必须由软件清0。 */ +sbit CR = CCON^6; /* 1: 允许PCA计数器计数,必须由软件清0。*/ +sbit CF = CCON^7; /* PCA计数器溢出(CH,CL由FFFFH变为0000H)标志。PCA计数器溢出后由硬件置位,必须由软件清0。*/ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr CMOD = 0xD9; CIDL - - - CPS2 CPS1 CPS0 ECF 0xxx,0000 //PCA 工作模式寄存器。 +#define PCA_IDLE_OFF() CMOD |= (1<<7) /* IDLE状态PCA停止计数。 */ +#define PCA_IDLE_ON() CMOD &= ~(1<<7) /* IDLE状态PCA继续计数。 */ +#define PCA_CLK_12T() CMOD &= ~0x0E /* PCA计数脉冲选择 fosc/12 */ +#define PCA_CLK_2T() CMOD = (CMOD & ~0x0E) + 2 /* PCA计数脉冲选择 fosc/2 */ +#define PCA_CLK_T0() CMOD = (CMOD & ~0x0E) + 4 /* PCA计数脉冲选择Timer0中断,Timer0可通过AUXR寄存器设置成工作在12T或1T模式。 */ +#define PCA_CLK_ECI() CMOD = (CMOD & ~0x0E) + 6 /* PCA计数脉冲选择从ECI/P3.4脚输入的外部时钟,最大 fosc/2。 */ +#define PCA_CLK_1T() CMOD = (CMOD & ~0x0E) + 8 /* PCA计数脉冲选择 Fosc */ +#define PCA_CLK_4T() CMOD = (CMOD & ~0x0E) + 10 /* PCA计数脉冲选择 Fosc/4 */ +#define PCA_CLK_6T() CMOD = (CMOD & ~0x0E) + 12 /* PCA计数脉冲选择 Fosc/6 */ +#define PCA_CLK_8T() CMOD = (CMOD & ~0x0E) + 14 /* PCA计数脉冲选择 Fosc/8 */ +#define PCA_INT_ENABLE() CMOD |= 1 /* PCA计数器溢出中断允许位,1---允许CF(CCON.7)产生中断。 */ +#define PCA_INT_DISABLE() CMOD &= ~1 /* PCA计数器溢出中断禁止。 */ + +// 7 6 5 4 3 2 1 0 Reset Value +//sfr P_SW1 = 0xA2; S1_S1 S1_S0 CCP_S1 CCP_S0 SPI_S1 SPI_S0 0 - nn00,000x //Auxiliary Register 1 +#define PCA_USE_P12P11P10P37() P_SW1 &= ~0x30 /* 将PCA/PWM切换到P12(ECI) P11(CCP0) P10(CCP1) P37(CCP2)(上电默认) */ +#define PCA_USE_P34P35P36P37() P_SW1 = (P_SW1 & ~0x30) | 0x10 /* 将PCA/PWM切换到P34(ECI) P35(CCP0) P36(CCP1) P37(CCP2) */ +#define PCA_USE_P24P25P26P27() P_SW1 = (P_SW1 & ~0x30) | 0x20 /* 将PCA/PWM切换到P24(ECI) P25(CCP0) P26(CCP1) P27(CCP2) */ + + +/* 7 6 5 4 3 2 1 0 Reset Value +//sfr CCAPM0 = 0xDA; PWM 寄存器 - ECOM0 CCAPP0 CCAPN0 MAT0 TOG0 PWM0 ECCF0 x000,0000 //PCA 模块0 +//sfr CCAPM1 = 0xDB; PWM 寄存器 - ECOM1 CCAPP1 CCAPN1 MAT1 TOG1 PWM1 ECCF1 x000,0000 //PCA 模块1 +//sfr CCAPM2 = 0xDC; PWM 寄存器 - ECOM2 CCAPP2 CCAPN2 MAT2 TOG2 PWM2 ECCF2 x000,0000 //PCA 模块2 +//sfr CCAPM3 = 0xDD; PWM 寄存器 - ECOM3 CCAPP3 CCAPN3 MAT3 TOG3 PWM3 ECCF3 x000,0000 //PCA 模块3 +;ECOMn = 1: 允许比较功能。 +;CAPPn = 1: 允许上升沿触发捕捉功能。 +;CAPNn = 1: 允许下降沿触发捕捉功能。 +;MATn = 1: 当匹配情况发生时,允许CCON中的CCFn置位。 +;TOGn = 1: 当匹配情况发生时,CEXn将翻转。(CEX0/PCA0/PWM0/P3.7,CEX1/PCA1/PWM1/P3.5) +;PWMn = 1: 将CEXn设置为PWM输出。 +;ECCFn = 1: 允许CCON中的CCFn触发中断。 +;ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn +; 0 0 0 0 0 0 0 00H 未启用任何功能。 +; x 1 0 0 0 0 x 20H 16位CEXn上升沿触发捕捉功能。 +; x 0 1 0 0 0 x 10H 16位CEXn下降沿触发捕捉功能。 +; x 1 1 0 0 0 x 30H 16位CEXn/PCAn边沿(上、下沿)触发捕捉功能。 +; 1 0 0 1 0 0 x 48H 16位软件定时器。 +; 1 0 0 1 1 0 x 4CH 16位高速脉冲输出。 +; 1 0 0 0 0 1 0 42H 8位PWM。无中断 +; 1 1 0 0 0 1 1 63H 8位PWM。低变高可产生中断 +; 1 0 1 0 0 1 1 53H 8位PWM。高变低可产生中断 +; 1 1 1 0 0 1 1 73H 8位PWM。低变高或高变低均可产生中断 +;******************************************************************* +;*******************************************************************/ + +#define PCA0_none() CCAPM0 = 0 +#define PCA0_PWM(nbit) CCAPM0 = 0x42,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_rise_int(nbit) CCAPM0 = 0x63,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_fall_int(nbit) CCAPM0 = 0x53,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_PWM_edge_int(nbit) CCAPM0 = 0x73,PCA_PWM0 = (PCA_PWM0 & 0x3f) | (nbit<<6) +#define PCA0_capture_rise() CCAPM0 = (0x20 + 1) +#define PCA0_capture_fall() CCAPM0 = (0x10 + 1) +#define PCA0_capture_edge() CCAPM0 = (0x30 + 1) +#define PCA0_16bit_Timer() CCAPM0 = (0x48 + 1) +#define PCA0_High_PulseEnable() CCAPM0 |= 0x04 + +#define PCA1_none() CCAPM1 = 0 +#define PCA1_PWM(nbit) CCAPM1 = 0x42,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_rise_int(nbit) CCAPM1 = 0x63,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_fall_int(nbit) CCAPM1 = 0x53,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_PWM_edge_int(nbit) CCAPM1 = 0x73,PCA_PWM1 = (PCA_PWM1 & 0x3f) | (nbit<<6) +#define PCA1_capture_rise() CCAPM1 = (0x20 + 1) +#define PCA1_capture_fall() CCAPM1 = (0x10 + 1) +#define PCA1_capture_edge() CCAPM1 = (0x30 + 1) +#define PCA1_16bit_Timer() CCAPM1 = (0x48 + 1) +#define PCA1_High_PulseEnable() CCAPM1 |= 0x04 + +#define PCA2_none() CCAPM2 = 0 +#define PCA2_PWM(nbit) CCAPM2 = 0x42,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_rise_int(nbit) CCAPM2 = 0x63,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_fall_int(nbit) CCAPM2 = 0x53,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_PWM_edge_int(nbit) CCAPM2 = 0x73,PCA_PWM2 = (PCA_PWM2 & 0x3f) | (nbit<<6) +#define PCA2_capture_rise() CCAPM2 = (0x20 + 1) +#define PCA2_capture_fall() CCAPM2 = (0x10 + 1) +#define PCA2_capture_edge() CCAPM2 = (0x30 + 1) +#define PCA2_16bit_Timer() CCAPM2 = (0x48 + 1) +#define PCA2_High_PulseEnable() CCAPM2 |= 0x04 + +//#define PCA3_none() CCAPM3 = 0 +//#define PCA3_PWM(nbit) CCAPM3 = 0x42,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_rise_int(nbit) CCAPM3 = 0x63,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_fall_int(nbit) CCAPM3 = 0x53,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_PWM_edge_int(nbit) CCAPM3 = 0x73,PCA_PWM3 = (PCA_PWM3 & 0x3f) | (nbit<<6) +//#define PCA3_capture_rise() CCAPM3 = (0x20 + 1) +//#define PCA3_capture_fall() CCAPM3 = (0x10 + 1) +//#define PCA3_capture_edge() CCAPM3 = (0x30 + 1) +//#define PCA3_16bit_Timer() CCAPM3 = (0x48 + 1) +//#define PCA3_High_PulseEnable() CCAPM3 |= 0x04 + +/**********************************************************/ +typedef unsigned char u8; +typedef unsigned int u16; +typedef unsigned long u32; + +/**********************************************************/ +#define NOP1() _nop_() +#define NOP2() NOP1(),NOP1() +#define NOP3() NOP2(),NOP1() +#define NOP4() NOP3(),NOP1() +#define NOP5() NOP4(),NOP1() +#define NOP6() NOP5(),NOP1() +#define NOP7() NOP6(),NOP1() +#define NOP8() NOP7(),NOP1() +#define NOP9() NOP8(),NOP1() +#define NOP10() NOP9(),NOP1() +#define NOP11() NOP10(),NOP1() +#define NOP12() NOP11(),NOP1() +#define NOP13() NOP12(),NOP1() +#define NOP14() NOP13(),NOP1() +#define NOP15() NOP14(),NOP1() +#define NOP16() NOP15(),NOP1() +#define NOP17() NOP16(),NOP1() +#define NOP18() NOP17(),NOP1() +#define NOP19() NOP18(),NOP1() +#define NOP20() NOP19(),NOP1() +#define NOP21() NOP20(),NOP1() +#define NOP22() NOP21(),NOP1() +#define NOP23() NOP22(),NOP1() +#define NOP24() NOP23(),NOP1() +#define NOP25() NOP24(),NOP1() +#define NOP26() NOP25(),NOP1() +#define NOP27() NOP26(),NOP1() +#define NOP28() NOP27(),NOP1() +#define NOP29() NOP28(),NOP1() +#define NOP30() NOP29(),NOP1() +#define NOP31() NOP30(),NOP1() +#define NOP32() NOP31(),NOP1() +#define NOP33() NOP32(),NOP1() +#define NOP34() NOP33(),NOP1() +#define NOP35() NOP34(),NOP1() +#define NOP36() NOP35(),NOP1() +#define NOP37() NOP36(),NOP1() +#define NOP38() NOP37(),NOP1() +#define NOP39() NOP38(),NOP1() +#define NOP40() NOP39(),NOP1() +#define NOP(N) NOP##N() + + +/**********************************************/ +#define Pin0 0x01 //IO引脚 Px.0 +#define Pin1 0x02 //IO引脚 Px.1 +#define Pin2 0x04 //IO引脚 Px.2 +#define Pin3 0x08 //IO引脚 Px.3 +#define Pin4 0x10 //IO引脚 Px.4 +#define Pin5 0x20 //IO引脚 Px.5 +#define Pin6 0x40 //IO引脚 Px.6 +#define Pin7 0x80 //IO引脚 Px.7 +#define PinAll 0xFF //IO所有引脚 + +#define P0n_standard(bitn) P0M1 &= ~(bitn), P0M0 &= ~(bitn) /* 00 */ +#define P0n_push_pull(bitn) P0M1 &= ~(bitn), P0M0 |= (bitn) /* 01 */ +#define P0n_pure_input(bitn) P0M1 |= (bitn), P0M0 &= ~(bitn) /* 10 */ +#define P0n_open_drain(bitn) P0M1 |= (bitn), P0M0 |= (bitn) /* 11 */ + +#define P1n_standard(bitn) P1M1 &= ~(bitn), P1M0 &= ~(bitn) +#define P1n_push_pull(bitn) P1M1 &= ~(bitn), P1M0 |= (bitn) +#define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= ~(bitn) +#define P1n_open_drain(bitn) P1M1 |= (bitn), P1M0 |= (bitn) + +#define P2n_standard(bitn) P2M1 &= ~(bitn), P2M0 &= ~(bitn) +#define P2n_push_pull(bitn) P2M1 &= ~(bitn), P2M0 |= (bitn) +#define P2n_pure_input(bitn) P2M1 |= (bitn), P2M0 &= ~(bitn) +#define P2n_open_drain(bitn) P2M1 |= (bitn), P2M0 |= (bitn) + +#define P3n_standard(bitn) P3M1 &= ~(bitn), P3M0 &= ~(bitn) +#define P3n_push_pull(bitn) P3M1 &= ~(bitn), P3M0 |= (bitn) +#define P3n_pure_input(bitn) P3M1 |= (bitn), P3M0 &= ~(bitn) +#define P3n_open_drain(bitn) P3M1 |= (bitn), P3M0 |= (bitn) + +#define P4n_standard(bitn) P4M1 &= ~(bitn), P4M0 &= ~(bitn) +#define P4n_push_pull(bitn) P4M1 &= ~(bitn), P4M0 |= (bitn) +#define P4n_pure_input(bitn) P4M1 |= (bitn), P4M0 &= ~(bitn) +#define P4n_open_drain(bitn) P4M1 |= (bitn), P4M0 |= (bitn) + +#define P5n_standard(bitn) P5M1 &= ~(bitn), P5M0 &= ~(bitn) +#define P5n_push_pull(bitn) P5M1 &= ~(bitn), P5M0 |= (bitn) +#define P5n_pure_input(bitn) P5M1 |= (bitn), P5M0 &= ~(bitn) +#define P5n_open_drain(bitn) P5M1 |= (bitn), P5M0 |= (bitn) + +#define P6n_standard(bitn) P6M1 &= ~(bitn), P6M0 &= ~(bitn) +#define P6n_push_pull(bitn) P6M1 &= ~(bitn), P6M0 |= (bitn) +#define P6n_pure_input(bitn) P6M1 |= (bitn), P6M0 &= ~(bitn) +#define P6n_open_drain(bitn) P6M1 |= (bitn), P6M0 |= (bitn) + +#define P7n_standard(bitn) P7M1 &= ~(bitn), P7M0 &= ~(bitn) +#define P7n_push_pull(bitn) P7M1 &= ~(bitn), P7M0 |= (bitn) +#define P7n_pure_input(bitn) P7M1 |= (bitn), P7M0 &= ~(bitn) +#define P7n_open_drain(bitn) P7M1 |= (bitn), P7M0 |= (bitn) + + +/****************************************************************/ + + +//sfr INT_CLKO = 0x8F; //附加的 SFR WAKE_CLKO (地址:0x8F) +/* + 7 6 5 4 3 2 1 0 Reset Value + - EX4 EX3 EX2 - T2CLKO T1CLKO T0CLKO 0000,0000B +b6 - EX4 : 外中断INT4允许 +b5 - EX3 : 外中断INT3允许 +b4 - EX2 : 外中断INT2允许 +b2 - T1CLKO : 允许 T2 溢出脉冲在P3.0脚输出,Fck1 = 1/2 T1 溢出率 +b1 - T1CLKO : 允许 T1 溢出脉冲在P3.4脚输出,Fck1 = 1/2 T1 溢出率 +b0 - T0CLKO : 允许 T0 溢出脉冲在P3.5脚输出,Fck0 = 1/2 T0 溢出率 +*/ + +#define LVD_InterruptEnable() ELVD = 1 +#define LVD_InterruptDisable() ELVD = 0 + + +//sfr WKTCL = 0xAA; //唤醒定时器低字节 +//sfr WKTCH = 0xAB; //唤醒定时器高字节 +// B7 B6 B5 B4 B3 B2 B1 B0 B7 B6 B5 B4 B3 B2 B1 B0 +// WKTEN S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0 n * 560us +#define WakeTimerDisable() WKTCH &= 0x7f /* WKTEN = 0 禁止睡眠唤醒定时器 */ +#define WakeTimerSet(scale) WKTCL = (scale) % 256,WKTCH = (scale) / 256 | 0x80 /* WKTEN = 1 允许睡眠唤醒定时器 */ + + + +//sfr BUS_SPEED = 0xA1; //Stretch register - - - - - - EXRTS1 EXRTSS0 xxxx,xx10 +#define BUS_SPEED_1T() BUS_SPEED = BUS_SPEED & ~3 +#define BUS_SPEED_2T() BUS_SPEED = (BUS_SPEED & ~3) | 1 +#define BUS_SPEED_4T() BUS_SPEED = (BUS_SPEED & ~3) | 2 +#define BUS_SPEED_8T() BUS_SPEED = (BUS_SPEED & ~3) | 3 + +#define BUS_RD_WR_P44_P43() BUS_SPEED = BUS_SPEED & 0x3f +#define BUS_RD_WR_P37_P36() BUS_SPEED = (BUS_SPEED & 0x3f) | 0x40 +#define BUS_RD_WR_P42_P40() BUS_SPEED = (BUS_SPEED & 0x3f) | 0x80 + + +/* interrupt vector */ +#define INT0_VECTOR 0 +#define TIMER0_VECTOR 1 +#define INT1_VECTOR 2 +#define TIMER1_VECTOR 3 +#define UART1_VECTOR 4 +#define ADC_VECTOR 5 +#define LVD_VECTOR 6 +#define PCA_VECTOR 7 +#define UART2_VECTOR 8 +#define SPI_VECTOR 9 +#define INT2_VECTOR 10 +#define INT3_VECTOR 11 +#define TIMER2_VECTOR 12 +#define INT4_VECTOR 16 +#define UART3_VECTOR 17 +#define UART4_VECTOR 18 +#define TIMER3_VECTOR 19 +#define TIMER4_VECTOR 20 +#define CMP_VECTOR 21 +#define PWM0_VECTOR 22 +#define PWMFD_VECTOR 23 +#define I2C_VECTOR 24 +#define USB_VECTOR 25 +#define PWMA_VECTOR 26 +#define PWMB_VECTOR 27 +#define PWM1_VECTOR 28 +#define PWM2_VECTOR 29 +#define PWM3_VECTOR 30 +#define PWM4_VECTOR 31 +#define PWM5_VECTOR 32 + + +#define TRUE 1 +#define FALSE 0 + +//============================================================= + +//======================================== + +#define Priority_0 0 //中断优先级为 0 级(最低级) +#define Priority_1 1 //中断优先级为 1 级(较低级) +#define Priority_2 2 //中断优先级为 2 级(较高级) +#define Priority_3 3 //中断优先级为 3 级(最高级) + +//======================================== + +#define ENABLE 1 +#define DISABLE 0 + +#endif diff --git a/myinc/UART.h b/myinc/UART.h new file mode 100644 index 0000000..756ae00 --- /dev/null +++ b/myinc/UART.h @@ -0,0 +1,135 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 128 +#define COM_RX3_Lenth 128 +#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); +#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); +#endif +#ifdef UART4 +void TX4_write2buff(u8 dat); //写入发送缓冲,指针+1 +void PrintString4(u8 *puts); +#endif + + +void UART_config(void); +#endif + diff --git a/myinc/common.h b/myinc/common.h new file mode 100644 index 0000000..f1df02e --- /dev/null +++ b/myinc/common.h @@ -0,0 +1,21 @@ +#ifndef __common_H +#define __common_H +#include "config.h" +#define speedmax 100 +#define speedmin 10 +#define subdivisionmax 8 +#define subdivisionmin 0 +#define MYaddress 0004 +#define speedstart 60 +#define substart 4 +extern u8 speedmode1, speedmode2, speedmode3, speedmode4, subdivision1, subdivision2, subdivision3, subdivision4; +extern u16 keytime; +extern u8 keyflag; +extern u8 sunmode, pog; +void getconfig(); +void keyscan(); +void display(); +void shuju(); +void setconfig(); +void run(); +#endif \ No newline at end of file diff --git a/myinc/config.h b/myinc/config.h new file mode 100644 index 0000000..d31a65d --- /dev/null +++ b/myinc/config.h @@ -0,0 +1,34 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* 锟斤拷锟揭拷诔锟斤拷锟斤拷锟绞癸拷么舜锟斤拷锟,锟斤拷锟节筹拷锟斤拷锟斤拷注锟斤拷使锟斤拷锟斤拷STC锟斤拷锟斤拷锟较硷拷锟斤拷锟斤拷 */ +/*---------------------------------------------------------------------*/ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/*********************************************************/ + +//#define MAIN_Fosc 22118400L //锟斤拷锟斤拷锟斤拷时锟斤拷 +//#define MAIN_Fosc 12000000L //锟斤拷锟斤拷锟斤拷时锟斤拷 +// #define MAIN_Fosc 11059200L //锟斤拷锟斤拷锟斤拷时锟斤拷 +//#define MAIN_Fosc 5529600L //锟斤拷锟斤拷锟斤拷时锟斤拷 +#define MAIN_Fosc 24000000L //锟斤拷锟斤拷锟斤拷时锟斤拷 + + +// #define STC8Hxx //STC8H系锟斤拷 + +#define STC8Gxx //STC8G系锟斤拷 + +/*********************************************************/ + +#include "STC8xxxx.H" + + +#endif diff --git a/myinc/delay.h b/myinc/delay.h new file mode 100644 index 0000000..b40de2d --- /dev/null +++ b/myinc/delay.h @@ -0,0 +1,21 @@ +/*---------------------------------------------------------------------*/ +/* --- 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 __DELAY_H +#define __DELAY_H + +#include "config.h" + +void delay_ms(unsigned char ms); +void Delay4us(); +void Delay2us(); +#endif diff --git a/myinc/timer.h b/myinc/timer.h new file mode 100644 index 0000000..bc228cd --- /dev/null +++ b/myinc/timer.h @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------*/ +/* --- STC MCU Limited ------------------------------------------------*/ +/* --- STC 1T Series MCU Demo Programme -------------------------------*/ +/* --- Mobile: (86)13922805190 ----------------------------------------*/ +/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/ +/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/ +/* --- Web: www.STCMCU.com --------------------------------------------*/ +/* --- Web: www.STCMCUDATA.com ---------------------------------------*/ +/* --- QQ: 800003751 -------------------------------------------------*/ +/* 锟斤拷锟揭拷诔锟斤拷锟斤拷锟绞癸拷么舜锟斤拷锟,锟斤拷锟节筹拷锟斤拷锟斤拷注锟斤拷使锟斤拷锟斤拷STC锟斤拷锟斤拷锟较硷拷锟斤拷锟斤拷 */ +/*---------------------------------------------------------------------*/ + +#ifndef __TIMER_H +#define __TIMER_H + +#include "config.h" + +#define Timer0 0 +#define Timer1 1 +#define Timer2 2 +#define Timer3 3 +#define Timer4 4 + +#define TIM_16BitAutoReload 0 +#define TIM_16Bit 1 +#define TIM_8BitAutoReload 2 +#define TIM_16BitAutoReloadNoMask 3 + +#define TIM_CLOCK_1T 0 +#define TIM_CLOCK_12T 1 +#define TIM_CLOCK_Ext 2 + +typedef struct +{ + u8 TIM_Mode; // 锟斤拷锟斤拷模式, TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask + u8 TIM_Priority; // 锟斤拷锟饺硷拷锟斤拷锟斤拷 Priority_0,Priority_1,Priority_2,Priority_3 + u8 TIM_Interrupt; // 锟叫讹拷锟斤拷锟斤拷 ENABLE,DISABLE + u8 TIM_ClkSource; // 时锟斤拷源 TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext + u8 TIM_ClkOut; // 锟缴憋拷锟绞憋拷锟斤拷锟斤拷, ENABLE,DISABLE + u16 TIM_Value; // 装锟截筹拷值 + u8 TIM_Run; // 锟角凤拷锟斤拷锟斤拷 ENABLE,DISABLE +} TIM_InitTypeDef; +extern u8 displaydata; +extern u32 timex; +u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx); +void Timer_config(); +#endif diff --git a/myinc/tm1650.h b/myinc/tm1650.h new file mode 100644 index 0000000..c086399 --- /dev/null +++ b/myinc/tm1650.h @@ -0,0 +1,30 @@ +#ifndef TM1650_H_ +#define TM1650_H_ +#include "config.h" +// 鏄剧ず鍙傛暟 +#define TM1650_BRIGHT1 0x11 /*涓绾т寒搴︼紝鎵撳紑LED鏄剧ず*/ +#define TM1650_BRIGHT2 0x21 /*浜岀骇浜害锛屾墦寮LED鏄剧ず*/ +#define TM1650_BRIGHT3 0x31 /*涓夌骇浜害锛屾墦寮LED鏄剧ず*/ +#define TM1650_BRIGHT4 0x41 /*鍥涚骇浜害锛屾墦寮LED鏄剧ず*/ +#define TM1650_BRIGHT5 0x51 /*浜旂骇浜害锛屾墦寮LED鏄剧ず*/ +#define TM1650_BRIGHT6 0x61 /*鍏骇浜害锛屾墦寮LED鏄剧ず*/ +#define TM1650_BRIGHT7 0x71 /*涓冪骇浜害锛屾墦寮LED鏄剧ず*/ +#define TM1650_BRIGHT8 0x01 /*鍏骇浜害锛屾墦寮LED鏄剧ず*/ +#define TM1650_DSP_OFF 0x00 /*鍏抽棴LED鏄剧ず*/ + +// 鏁扮爜绠′綅閫 +#define TM1650_DIG1 0 +#define TM1650_DIG2 1 +#define TM1650_DIG3 2 +#define TM1650_DIG4 3 + +#define sda P33 +#define scl P32 +void TM1650_init(void); // 鍒濆鍖 +void TM1650_print(unsigned char dig, unsigned char seg_data); +void TM1650_printpogrun(u8 set,u8 mode);// 鏄剧ず----椤甸潰0鏄剧ず +void TM1650_printpogstop(u8 set);// 鏄剧ず----椤甸潰0鏄剧ず +void TM1650_print_SMG1(u8 set); +void TM1650_print_SMG2(u16 set); +void TM1650_print_SMG3(u8 set) ; +#endif