/////////////////////////////////////////////////////////////////////////////// // // IAR C/C++ Compiler V2.10.4.157 for STM8 23/Feb/2025 18:40:36 // Copyright 2010-2015 IAR Systems AB. // // Source file = // D:\紧急按钮更新取消按键-2025-0120\紧急按钮更新取消按键-2025-0120\源代码\模拟紧急按钮V1_STM8(250120)\main.c // Command line = // D:\紧急按钮更新取消按键-2025-0120\紧急按钮更新取消按键-2025-0120\源代码\模拟紧急按钮V1_STM8(250120)\main.c // -e -Ol --no_cse --no_unroll --no_inline --no_code_motion --no_tbaa // --no_cross_call --debug --code_model medium --data_model medium -o // D:\紧急按钮更新取消按键-2025-0120\紧急按钮更新取消按键-2025-0120\源代码\模拟紧急按钮V1_STM8(250120)\Release\Obj\ // --dlib_config "D:\Program Files (x86)\IAR Systems\Embedded Workbench // 7.0\stm8\LIB\dlstm8mmn.h" -D NDEBUG -lC // D:\紧急按钮更新取消按键-2025-0120\紧急按钮更新取消按键-2025-0120\源代码\模拟紧急按钮V1_STM8(250120)\Release\List\ // -lA // D:\紧急按钮更新取消按键-2025-0120\紧急按钮更新取消按键-2025-0120\源代码\模拟紧急按钮V1_STM8(250120)\Release\List\ // --vregs 16 // List file = // D:\紧急按钮更新取消按键-2025-0120\紧急按钮更新取消按键-2025-0120\源代码\模拟紧急按钮V1_STM8(250120)\Release\List\main.s // /////////////////////////////////////////////////////////////////////////////// RTMODEL "__SystemLibrary", "DLib" RTMODEL "__code_model", "medium_or_large" RTMODEL "__core", "stm8" RTMODEL "__data_model", "medium" RTMODEL "__rt_version", "4" EXTERN ?add32_l0_l0_0x EXTERN ?b0 EXTERN ?b1 EXTERN ?b12 EXTERN ?b2 EXTERN ?inc32_l0_l0 EXTERN ?load32_0x_l0 EXTERN ?load32_l0_0x EXTERN ?mov_l0_l2 EXTERN ?pop_l0 EXTERN ?pop_w0 EXTERN ?push_l0 EXTERN ?push_l2 EXTERN ?push_w0 EXTERN ?sdiv16_x_x_y EXTERN ?sll16_x_x_a EXTERN ?smod16_y_x_y EXTERN ?sra16_x_x_a EXTERN ?ucmp32_c_l0_0x EXTERN ?w0 EXTERN ?w1 EXTERN ?w4 EXTERN ?w5 PUBLIC Addrp PUBLIC BUS_RevBuf PUBLIC BUS_RevData PUBLIC BUS_RevIndex PUBLIC BUS_RevOverTime PUBLIC BUS_Rev_Cmd PUBLIC BUS_Rev_Tick PUBLIC BUS_SendCmd PUBLIC BUS_SendCnt PUBLIC BUS_SendData PUBLIC BUS_SendInex PUBLIC BUS_SendingCmd PUBLIC BlankStr PUBLIC Bus_RevFlag PUBLIC Bus_SendLength PUBLIC CurrentCmd PUBLIC DeviceAddr PUBLIC DeviceSN PUBLIC EXTI_PORTC_IRQHandler PUBLIC GPIO_EXTI_Init PUBLIC GPIO_KEY_Init PUBLIC GPIO_KEY_Tick PUBLIC GPIO_LED_Init PUBLIC GPIO_LED_Tick PUBLIC KEY PUBLIC Ledswitch PUBLIC LocalTime PUBLIC RunMode PUBLIC STM8_Init PUBLIC SysVar_Init PUBLIC TIM1_ARRH PUBLIC TIM1_ARRL PUBLIC TIM1_CCR4H PUBLIC TIM1_CCR4L PUBLIC TIM1_PSCRH PUBLIC TIM1_PSCRL PUBLIC TIM1_PWM_Init PUBLIC TIM2_ARRH PUBLIC TIM2_ARRL PUBLIC TIM2_CCR2H PUBLIC TIM2_CCR2L PUBLIC TIM2_CNTRH PUBLIC TIM2_CNTRL PUBLIC TIM2_Init PUBLIC TIM2_PWM_Init PUBLIC TIM4_1ms_Init PUBLIC TIM4_ARR PUBLIC TIM4_CNTR PUBLIC TIM4_UPD_OVF_IRQHandler PUBLIC _A_CLK_CKDIVR PUBLIC _A_EXTI_CR1 PUBLIC _A_PA_CR1 PUBLIC _A_PA_CR2 PUBLIC _A_PA_DDR PUBLIC _A_PA_IDR PUBLIC _A_PC_CR1 PUBLIC _A_PC_CR2 PUBLIC _A_PC_DDR PUBLIC _A_PD_CR1 PUBLIC _A_PD_CR2 PUBLIC _A_PD_DDR PUBLIC _A_PD_IDR PUBLIC _A_PD_ODR PUBLIC _A_TIM1_BKR PUBLIC _A_TIM1_CCER2 PUBLIC _A_TIM1_CCMR4 PUBLIC _A_TIM1_CR1 PUBLIC _A_TIM1_OISR PUBLIC _A_TIM2_CCER1 PUBLIC _A_TIM2_CCMR2 PUBLIC _A_TIM2_CR1 PUBLIC _A_TIM2_IER PUBLIC _A_TIM2_PSCR PUBLIC _A_TIM4_CR1 PUBLIC _A_TIM4_IER PUBLIC _A_TIM4_PSCR PUBLIC _A_TIM4_SR PUBLIC _interrupt_25 PUBLIC _interrupt_7 PUBLIC main CFI Names cfiNames0 CFI StackFrame CFA SP DATA CFI Resource A:8, XL:8, XH:8, YL:8, YH:8, SP:16, CC:8, PC:24, PCL:8 CFI Resource PCH:8, PCE:8, ?b0:8, ?b1:8, ?b2:8, ?b3:8, ?b4:8, ?b5:8 CFI Resource ?b6:8, ?b7:8, ?b8:8, ?b9:8, ?b10:8, ?b11:8, ?b12:8, ?b13:8 CFI Resource ?b14:8, ?b15:8 CFI ResourceParts PC PCE, PCH, PCL CFI EndNames cfiNames0 CFI Common cfiCommon0 Using cfiNames0 CFI CodeAlign 1 CFI DataAlign 1 CFI ReturnAddress PC CODE CFI CFA SP+3 CFI A Undefined CFI XL Undefined CFI XH Undefined CFI YL Undefined CFI YH Undefined CFI CC Undefined CFI PC Frame(CFA, -2) CFI PCL Undefined CFI PCH Undefined CFI PCE Undefined CFI ?b0 Undefined CFI ?b1 Undefined CFI ?b2 Undefined CFI ?b3 Undefined CFI ?b4 Undefined CFI ?b5 Undefined CFI ?b6 Undefined CFI ?b7 Undefined CFI ?b8 SameValue CFI ?b9 SameValue CFI ?b10 SameValue CFI ?b11 SameValue CFI ?b12 SameValue CFI ?b13 SameValue CFI ?b14 SameValue CFI ?b15 SameValue CFI EndCommon cfiCommon0 CFI Common cfiCommon1 Using cfiNames0 CFI CodeAlign 1 CFI DataAlign 1 CFI ReturnAddress PC CODE CFI CFA SP+9 CFI A Frame(CFA, -7) CFI XL Frame(CFA, -5) CFI XH Frame(CFA, -6) CFI YL Frame(CFA, -3) CFI YH Frame(CFA, -4) CFI CC Frame(CFA, -8) CFI PC Frame(CFA, -2) CFI PCL Undefined CFI PCH Undefined CFI PCE Undefined CFI ?b0 SameValue CFI ?b1 SameValue CFI ?b2 SameValue CFI ?b3 SameValue CFI ?b4 SameValue CFI ?b5 SameValue CFI ?b6 SameValue CFI ?b7 SameValue CFI ?b8 SameValue CFI ?b9 SameValue CFI ?b10 SameValue CFI ?b11 SameValue CFI ?b12 SameValue CFI ?b13 SameValue CFI ?b14 SameValue CFI ?b15 SameValue CFI EndCommon cfiCommon1 // D:\紧急按钮更新取消按键-2025-0120\紧急按钮更新取消按键-2025-0120\源代码\模拟紧急按钮V1_STM8(250120)\main.c // 1 //////////////////////////////////////////////////////////////////////////////// // 2 // 3 // 4 // 5 // 6 // 7 //#define IsDebug // 8 //#define tim2Led // 9 // 10 //#define RxTestDebug // 11 // 12 //////////////////////////////////////////////////////////////////////////////// // 13 // 14 // 15 #include ASEGN `.near.noinit`:DATA:NOROOT,05001H SECTION_GROUP _A_PA_IDR // union const volatile _A_PA_IDR _A_PA_IDR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05002H SECTION_GROUP _A_PA_DDR // union volatile _A_PA_DDR _A_PA_DDR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05003H SECTION_GROUP _A_PA_CR1 // union volatile _A_PA_CR1 _A_PA_CR1: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05004H SECTION_GROUP _A_PA_CR2 // union volatile _A_PA_CR2 _A_PA_CR2: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0500cH SECTION_GROUP _A_PC_DDR // union volatile _A_PC_DDR _A_PC_DDR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0500dH SECTION_GROUP _A_PC_CR1 // union volatile _A_PC_CR1 _A_PC_CR1: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0500eH SECTION_GROUP _A_PC_CR2 // union volatile _A_PC_CR2 _A_PC_CR2: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0500fH SECTION_GROUP _A_PD_ODR // union volatile _A_PD_ODR _A_PD_ODR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05010H SECTION_GROUP _A_PD_IDR // union const volatile _A_PD_IDR _A_PD_IDR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05011H SECTION_GROUP _A_PD_DDR // union volatile _A_PD_DDR _A_PD_DDR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05012H SECTION_GROUP _A_PD_CR1 // union volatile _A_PD_CR1 _A_PD_CR1: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05013H SECTION_GROUP _A_PD_CR2 // union volatile _A_PD_CR2 _A_PD_CR2: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,050a0H SECTION_GROUP _A_EXTI_CR1 // union volatile _A_EXTI_CR1 _A_EXTI_CR1: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,050c6H SECTION_GROUP _A_CLK_CKDIVR // union volatile _A_CLK_CKDIVR _A_CLK_CKDIVR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05250H SECTION_GROUP _A_TIM1_CR1 // union volatile _A_TIM1_CR1 _A_TIM1_CR1: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0525bH SECTION_GROUP _A_TIM1_CCMR4 // union volatile _A_TIM1_CCMR4 _A_TIM1_CCMR4: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0525dH SECTION_GROUP _A_TIM1_CCER2 // union volatile _A_TIM1_CCER2 _A_TIM1_CCER2: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05260H SECTION_GROUP TIM1_PSCRH // unsigned char volatile TIM1_PSCRH TIM1_PSCRH: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05261H SECTION_GROUP TIM1_PSCRL // unsigned char volatile TIM1_PSCRL TIM1_PSCRL: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05262H SECTION_GROUP TIM1_ARRH // unsigned char volatile TIM1_ARRH TIM1_ARRH: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05263H SECTION_GROUP TIM1_ARRL // unsigned char volatile TIM1_ARRL TIM1_ARRL: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0526bH SECTION_GROUP TIM1_CCR4H // unsigned char volatile TIM1_CCR4H TIM1_CCR4H: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0526cH SECTION_GROUP TIM1_CCR4L // unsigned char volatile TIM1_CCR4L TIM1_CCR4L: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0526dH SECTION_GROUP _A_TIM1_BKR // union volatile _A_TIM1_BKR _A_TIM1_BKR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0526fH SECTION_GROUP _A_TIM1_OISR // union volatile _A_TIM1_OISR _A_TIM1_OISR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05300H SECTION_GROUP _A_TIM2_CR1 // union volatile _A_TIM2_CR1 _A_TIM2_CR1: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05303H SECTION_GROUP _A_TIM2_IER // union volatile _A_TIM2_IER _A_TIM2_IER: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05308H SECTION_GROUP _A_TIM2_CCMR2 // union volatile _A_TIM2_CCMR2 _A_TIM2_CCMR2: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0530aH SECTION_GROUP _A_TIM2_CCER1 // union volatile _A_TIM2_CCER1 _A_TIM2_CCER1: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0530cH SECTION_GROUP TIM2_CNTRH // unsigned char volatile TIM2_CNTRH TIM2_CNTRH: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0530dH SECTION_GROUP TIM2_CNTRL // unsigned char volatile TIM2_CNTRL TIM2_CNTRL: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0530eH SECTION_GROUP _A_TIM2_PSCR // union volatile _A_TIM2_PSCR _A_TIM2_PSCR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,0530fH SECTION_GROUP TIM2_ARRH // unsigned char volatile TIM2_ARRH TIM2_ARRH: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05310H SECTION_GROUP TIM2_ARRL // unsigned char volatile TIM2_ARRL TIM2_ARRL: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05313H SECTION_GROUP TIM2_CCR2H // unsigned char volatile TIM2_CCR2H TIM2_CCR2H: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05314H SECTION_GROUP TIM2_CCR2L // unsigned char volatile TIM2_CCR2L TIM2_CCR2L: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05340H SECTION_GROUP _A_TIM4_CR1 // union volatile _A_TIM4_CR1 _A_TIM4_CR1: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05343H SECTION_GROUP _A_TIM4_IER // union volatile _A_TIM4_IER _A_TIM4_IER: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05344H SECTION_GROUP _A_TIM4_SR // union volatile _A_TIM4_SR _A_TIM4_SR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05346H SECTION_GROUP TIM4_CNTR // unsigned char volatile TIM4_CNTR TIM4_CNTR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05347H SECTION_GROUP _A_TIM4_PSCR // union volatile _A_TIM4_PSCR _A_TIM4_PSCR: DS8 1 ASEGN `.near.noinit`:DATA:NOROOT,05348H SECTION_GROUP TIM4_ARR // unsigned char volatile TIM4_ARR TIM4_ARR: DS8 1 // 16 // 17 // 18 // 19 // 20 // 21 #define KEY0 KEY[0] //按键 // 22 #define KEY1 KEY[1] //紧急按钮取消按键 // 23 // 24 //============================================================== SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 25 __root unsigned int BUS_RevBuf[30]; BUS_RevBuf: DS8 60 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 26 __root unsigned char BUS_RevIndex=0; BUS_RevIndex: DS8 1 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 27 __root unsigned char BUS_Rev_Cmd[3]; //总线接收 BUS_Rev_Cmd: DS8 3 // 28 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 29 __root unsigned int BUS_RevOverTime=0; //总线接收超时,200 BUS_RevOverTime: DS8 2 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 30 __root unsigned char Bus_RevFlag=0; //总线接收成功 Bus_RevFlag: DS8 1 // 31 //============================================================== // 32 SECTION `.near.data`:DATA:REORDER:ROOT(0) // 33 __root unsigned char Ledswitch=2; //RedLED开关 Ledswitch: DC8 2 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 34 __root unsigned char KEY[2]={0}; //按键 KEY: DS8 2 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 35 __root unsigned char CurrentCmd = 0; //当前命令类型 CurrentCmd: DS8 1 // 36 // 37 //============================================ SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 38 __root unsigned char BUS_SendInex=0; BUS_SendInex: DS8 1 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 39 __root unsigned char BUS_SendCmd[30]; //应用层发送数据 BUS_SendCmd: DS8 30 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 40 __root unsigned char BUS_SendingCmd[30]; //定时器正在处理数据 BUS_SendingCmd: DS8 30 // 41 //============================================================== // 42 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 43 __root unsigned long LocalTime=0; LocalTime: DS8 4 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 44 __root unsigned char RunMode=0; //0:表示注册模式,>0表示正常工作模式 RunMode: DS8 1 SECTION `.near.data`:DATA:REORDER:ROOT(0) // 45 __root unsigned char Bus_SendLength=146; //总线发送长度,在注册模式时长度为 Bus_SendLength: DC8 146 // 46 // 47 //============================================================== // 48 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 49 __root unsigned char BUS_SendCnt = 0; //重发计数 BUS_SendCnt: DS8 1 // 50 // 51 SECTION `.near.rodata`:CONST:REORDER:ROOT(0) // 52 __root const unsigned char BlankStr[28]="555555555555"; BlankStr: DC8 "555555555555" DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 SECTION `.near.rodata`:CONST:REORDER:ROOT(0) // 53 __root const unsigned char DeviceSN[16]="SZFS20250120001"; DeviceSN: DC8 "SZFS20250120001" SECTION `.near.rodata`:CONST:REORDER:ROOT(0) // 54 __root const unsigned char DeviceAddr[10]={0x31,0x08}; DeviceAddr: DC8 49, 8, 0, 0, 0, 0, 0, 0, 0, 0 SECTION `.near.bss`:DATA:REORDER:ROOT(0) // 55 __root const unsigned char *Addrp=0; Addrp: DS8 2 // 56 // 57 // 58 // 59 // 60 // 61 // 62 void SysVar_Init(void); // 63 void BUS_RevData(void); // 64 void GPIO_KEY_Tick(void); // 65 void BUS_Rev_Tick(void); // 66 void BUS_SendData(unsigned char Length); // 67 void GPIO_MIC_SW(unsigned char status); // 68 //============================================ // 69 // 70 #ifdef RxTestDebug // 71 unsigned long rxtestDebugcnt=0; // 72 #endif // 73 // 74 //============================================================== SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock0 Using cfiCommon0 CFI Function SysVar_Init CODE // 75 void SysVar_Init(void) // 76 { // 77 // 78 Addrp=DeviceAddr; SysVar_Init: LDW X, #DeviceAddr LDW L:Addrp, X // 79 RunMode=0; MOV L:RunMode, #0x0 // 80 } RETF CFI EndBlock cfiBlock0 // 81 //============================================================== SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock1 Using cfiCommon0 CFI Function STM8_Init CODE // 82 void STM8_Init(void) // 83 { // 84 CLK_CKDIVR =0x18; //16M/8=2M STM8_Init: MOV L:0x50c6, #0x18 // 85 } RETF CFI EndBlock cfiBlock1 REQUIRE _A_CLK_CKDIVR // 86 //============================================================== SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock2 Using cfiCommon0 CFI Function GPIO_EXTI_Init CODE // 87 void GPIO_EXTI_Init(void) // 88 { // 89 EXTI_CR1_PCIS=1; //PC口为下降沿中断 GPIO_EXTI_Init: LD A, L:0x50a0 AND A, #0xcf OR A, #0x10 LD L:0x50a0, A // 90 // 91 PC_DDR_DDR7=0; BRES L:0x500c, #0x7 // 92 PC_CR1_C17=1; BSET L:0x500d, #0x7 // 93 PC_CR2_C27=1; BSET L:0x500e, #0x7 // 94 } RETF CFI EndBlock cfiBlock2 REQUIRE _A_EXTI_CR1 REQUIRE _A_PC_DDR REQUIRE _A_PC_CR1 REQUIRE _A_PC_CR2 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock3 Using cfiCommon0 CFI Function TIM2_Init CODE // 95 void TIM2_Init(void) // 96 { // 97 TIM2_IER = 0x00; //禁止中断 TIM2_Init: MOV L:0x5303, #0x0 // 98 TIM2_PSCR = 0x04; //设置预分频寄存器数 MOV L:0x530e, #0x4 // 99 // 100 TIM2_ARRH =0xFF; MOV L:0x530f, #0xff // 101 TIM2_ARRL =0xFF; MOV L:0x5310, #0xff // 102 // 103 TIM2_CNTRH=0x00; //初值 MOV L:0x530c, #0x0 // 104 TIM2_CNTRL=0x00; MOV L:0x530d, #0x0 // 105 TIM2_CR1 |= 0x01; //开启定时器 BSET L:0x5300, #0x0 // 106 } RETF CFI EndBlock cfiBlock3 REQUIRE _A_TIM2_IER REQUIRE _A_TIM2_PSCR REQUIRE TIM2_ARRH REQUIRE TIM2_ARRL REQUIRE TIM2_CNTRH REQUIRE TIM2_CNTRL REQUIRE _A_TIM2_CR1 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock4 Using cfiCommon0 CFI Function GPIO_KEY_Init CODE // 107 void GPIO_KEY_Init(void) // 108 { // 109 //============================================== // 110 PA_DDR_DDR1=0; GPIO_KEY_Init: BRES L:0x5002, #0x1 // 111 PA_DDR_DDR2=0; BRES L:0x5002, #0x2 // 112 PA_CR1_C11=1; BSET L:0x5003, #0x1 // 113 PA_CR1_C12=1; BSET L:0x5003, #0x2 // 114 PA_CR2_C21=0; BRES L:0x5004, #0x1 // 115 PA_CR2_C22=0; BRES L:0x5004, #0x2 // 116 //============================================== // 117 // 118 //============================================== // 119 PD_DDR_DDR4=0; // 设置为输入模式 BRES L:0x5011, #0x4 // 120 PD_CR1_C14=1; // 带上拉电阻输入 BSET L:0x5012, #0x4 // 121 PD_CR2_C24=0; // 禁用外部中断,只用查询方式 BRES L:0x5013, #0x4 // 122 // 123 //============================================== // 124 // 125 // 126 KEY0=0; MOV L:KEY, #0x0 // 127 KEY1=0; MOV L:KEY + 1, #0x0 // 128 BUS_SendCnt =0; MOV L:BUS_SendCnt, #0x0 // 129 } RETF CFI EndBlock cfiBlock4 REQUIRE _A_PA_DDR REQUIRE _A_PA_CR1 REQUIRE _A_PA_CR2 REQUIRE _A_PD_DDR REQUIRE _A_PD_CR1 REQUIRE _A_PD_CR2 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock5 Using cfiCommon0 CFI Function GPIO_LED_Init CODE // 130 void GPIO_LED_Init(void) // 131 { // 132 PD_DDR_DDR3 =1; //输出引脚 GPIO_LED_Init: BSET L:0x5011, #0x3 // 133 PD_CR1_C13 =1; //推挽输出模式 BSET L:0x5012, #0x3 // 134 PD_ODR_ODR3 =0; //输出低电平,LED灭 BRES L:0x500f, #0x3 // 135 // 136 Ledswitch=2; MOV L:Ledswitch, #0x2 // 137 } RETF CFI EndBlock cfiBlock5 REQUIRE _A_PD_DDR REQUIRE _A_PD_CR1 REQUIRE _A_PD_ODR SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock6 Using cfiCommon0 CFI Function TIM4_1ms_Init CODE // 138 void TIM4_1ms_Init(void) // 139 { // 140 TIM4_PSCR = 0x03; //设置预分频寄存器数 TIM4_1ms_Init: MOV L:0x5347, #0x3 // 141 //共8种分频比例1(0),2(1),4(2),8(3),16(4),32(5),64(6),128(7) // 142 TIM4_ARR = 0xF9; //设置自动重装载寄存器 MOV L:0x5348, #0xf9 // 143 // 144 TIM4_IER = 0x01; //开启TIM4更新事件中断使能 MOV L:0x5343, #0x1 // 145 TIM4_CNTR = 0xF9; //配置TIM4定时器初值,使得开始计数时发生第一次溢出 MOV L:0x5346, #0xf9 // 146 // 147 TIM4_CR1_CEN= 0x01; //使能计数器功能TIM4_CR1寄存器CEN位为"1" BSET L:0x5340, #0x0 // 148 } RETF CFI EndBlock cfiBlock6 REQUIRE _A_TIM4_PSCR REQUIRE TIM4_ARR REQUIRE _A_TIM4_IER REQUIRE TIM4_CNTR REQUIRE _A_TIM4_CR1 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock7 Using cfiCommon0 CFI Function TIM1_PWM_Init CODE // 149 void TIM1_PWM_Init(void) // 150 { // 151 PC_DDR_DDR4 =1; TIM1_PWM_Init: BSET L:0x500c, #0x4 // 152 //============================================= // 153 TIM1_PSCRH =0; MOV L:0x5260, #0x0 // 154 TIM1_PSCRL =0; //定时器1 时钟不分频 MOV L:0x5261, #0x0 // 155 // 156 TIM1_ARRH =0; MOV L:0x5262, #0x0 // 157 TIM1_ARRL =19; //定时器1的PWM输出频率:2000 000/20=100K MOV L:0x5263, #0x13 // 158 // 159 TIM1_CR1 &=0x8F; //向上计数,边沿对齐模式 LD A, L:0x5250 AND A, #0x8f LD L:0x5250, A // 160 //============================================= // 161 TIM1_CCR4H =0; MOV L:0x526b, #0x0 // 162 TIM1_CCR4L =10; MOV L:0x526c, #0xa // 163 TIM1_CCMR4 =0x60; //配置CH4为PWM模式1 MOV L:0x525b, #0x60 // 164 TIM1_CCER2 &=0x1F; //配置CH4高电平有效 LD A, L:0x525d AND A, #0x1f LD L:0x525d, A // 165 //TIM1_CCER2 |=0x10; //使能CH4输出 // 166 TIM1_OISR &=0xBF; //空闲输出低电平 BRES L:0x526f, #0x6 // 167 //通道4:100K_50% PWM输出 // 168 //============================================= // 169 TIM1_CR1 |=0x01; BSET L:0x5250, #0x0 // 170 TIM1_BKR =0x80; MOV L:0x526d, #0x80 // 171 // 172 } RETF CFI EndBlock cfiBlock7 REQUIRE _A_PC_DDR REQUIRE TIM1_PSCRH REQUIRE TIM1_PSCRL REQUIRE TIM1_ARRH REQUIRE TIM1_ARRL REQUIRE _A_TIM1_CR1 REQUIRE TIM1_CCR4H REQUIRE TIM1_CCR4L REQUIRE _A_TIM1_CCMR4 REQUIRE _A_TIM1_CCER2 REQUIRE _A_TIM1_OISR REQUIRE _A_TIM1_BKR // 173 // 174 // 175 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock8 Using cfiCommon0 CFI Function TIM2_PWM_Init CODE // 176 void TIM2_PWM_Init(void) // 177 { // 178 // TIM2_IER = 0x04; // 179 // PD_DDR_DDR3 =1; // 180 //============================================= // 181 // 182 // 183 // 184 TIM2_CCMR2 = TIM2_CCMR2 | 0x70; //配置CH2为PWM模式1 TIM2_PWM_Init: LD A, L:0x5308 OR A, #0x70 LD L:0x5308, A // 185 // TIM2_CCER1 &=0x1F; //配置CH2高电平有效 // 186 TIM2_CCER1 = TIM2_CCER1 | 0x30; //使能CH2输出 LD A, L:0x530a OR A, #0x30 LD L:0x530a, A // 187 // 188 TIM2_ARRH =0; MOV L:0x530f, #0x0 // 189 TIM2_ARRL = 19; //定时器1的PWM输出频率:2000 000/100=20K MOV L:0x5310, #0x13 // 190 // 191 // TIM2_CR1 &=0x8F; //向上计数,边沿对齐模式 // 192 //============================================= // 193 TIM2_CCR2H =0x0; MOV L:0x5313, #0x0 // 194 TIM2_CCR2L =0x00; MOV L:0x5314, #0x0 // 195 // 196 TIM2_PSCR =0; //0x03 MOV L:0x530e, #0x0 // 197 // TIM2_OISR &=0xBF; //空闲输出低电平 // 198 //通道2:1K_50% PWM输出 // 199 //============================================= // 200 TIM2_CR1 = TIM2_CR1 |0x01; BSET L:0x5300, #0x0 // 201 // TIM2_BKR =0x80; // 202 // 203 } RETF CFI EndBlock cfiBlock8 REQUIRE _A_TIM2_CCMR2 REQUIRE _A_TIM2_CCER1 REQUIRE TIM2_ARRH REQUIRE TIM2_ARRL REQUIRE TIM2_CCR2H REQUIRE TIM2_CCR2L REQUIRE _A_TIM2_PSCR REQUIRE _A_TIM2_CR1 // 204 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock9 Using cfiCommon0 CFI Function GPIO_LED_Tick CODE // 205 void GPIO_LED_Tick(void) // 206 { // 207 static unsigned long flashTime=0; // 208 static unsigned char ledflag=0; // 209 static unsigned char ledflagbak=0; // 210 #ifdef tim2Led // 211 // 212 if(Ledswitch==1) // 213 { // 214 //PD_ODR_ODR3=1; // 215 TIM2_CCR2H =0; // 216 TIM2_CCR2L =19; // 217 ledflag =0; // 218 } // 219 else if (Ledswitch==2) // 220 { // 221 if(LocalTime>flashTime) // 222 { // 223 flashTime=LocalTime+100; // 224 ledflag ++; // 225 // 226 } // 227 if (ledflagbak == ledflag ) { // 228 return; // 229 // 230 } // 231 ledflagbak = ledflag ; // 232 if(ledflag >39 ) { // 233 ledflag =0; // 234 } // 235 TIM2_CCR2H =0x0; // 236 if (ledflag > 19 ) { // 237 TIM2_CCR2L = (ledflag-19) ; // 238 } else if (ledflag > 15 ) { // 239 TIM2_CCR2L = (19-ledflag) ; // 240 ledflag = 20; // 241 } // 242 else { // 243 TIM2_CCR2L = (19-ledflag) ; // 244 } // 245 // 246 } // 247 else // 248 { // 249 TIM2_CCR2H =0x0; // 250 TIM2_CCR2L =0x0; // 251 ledflag =0; // 252 // PD_ODR_ODR3=0; // 253 } // 254 #else // 255 // 256 if(Ledswitch==1) GPIO_LED_Tick: LD A, L:Ledswitch CP A, #0x1 JRNE L:??GPIO_LED_Tick_0 // 257 { // 258 PD_ODR_ODR3=1; BSET L:0x500f, #0x3 RETF // 259 // 260 } // 261 else if (Ledswitch==2) ??GPIO_LED_Tick_0: LD A, L:Ledswitch CP A, #0x2 JRNE L:??GPIO_LED_Tick_1 // 262 { // 263 PD_ODR_ODR3=1; BSET L:0x500f, #0x3 RETF // 264 } // 265 else // 266 { // 267 PD_ODR_ODR3=0; ??GPIO_LED_Tick_1: BRES L:0x500f, #0x3 // 268 } // 269 // 270 // 271 // 272 // 273 #endif // 274 } RETF CFI EndBlock cfiBlock9 REQUIRE _A_PD_ODR // 275 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock10 Using cfiCommon0 CFI Function GPIO_KEY_Tick CODE // 276 void GPIO_KEY_Tick(void) // 277 { // 278 static unsigned long keyTime1=0; // 279 static unsigned char keyResTime =0; // 280 static unsigned long keyTime2=0; // 281 static unsigned char keyResTime2 =0; // 282 // 283 // KEY0 处理 // 284 if(PA_IDR_IDR1==1) //没有按下 GPIO_KEY_Tick: LD A, L:0x5001 SRL A AND A, #0x1 CP A, #0x0 JREQ L:??GPIO_KEY_Tick_0 // 285 { // 286 if(KEY0==1) LD A, L:KEY CP A, #0x1 JRNE L:??GPIO_KEY_Tick_1 // 287 { // 288 keyResTime ++; LD A, L:??keyResTime ADD A, #0x1 LD L:??keyResTime, A // 289 if (keyResTime >= 200) { LD A, L:??keyResTime CP A, #0xc8 JRC L:??GPIO_KEY_Tick_2 // 290 KEY0=2; MOV L:KEY, #0x2 JRA L:??GPIO_KEY_Tick_2 // 291 } // 292 } // 293 else // 294 { // 295 KEY0=0; ??GPIO_KEY_Tick_1: MOV L:KEY, #0x0 // 296 } // 297 keyTime1=LocalTime+120; ??GPIO_KEY_Tick_2: LDW X, #0x78 LDW S:?w1, X CLRW X LDW S:?w0, X LDW X, #LocalTime CALLF L:?add32_l0_l0_0x LDW X, #??keyTime1 CALLF L:?load32_0x_l0 JRA L:??GPIO_KEY_Tick_3 // 298 } // 299 else if(LocalTime>keyTime1) ??GPIO_KEY_Tick_0: LDW Y, #LocalTime LDW X, #??keyTime1 CALLF L:?load32_l0_0x LDW X, Y CALLF L:?ucmp32_c_l0_0x JRNC L:??GPIO_KEY_Tick_4 // 300 { // 301 KEY0=1; MOV L:KEY, #0x1 // 302 keyResTime = 0; MOV L:??keyResTime, #0x0 JRA L:??GPIO_KEY_Tick_3 // 303 } // 304 else { // 305 keyResTime = 0; ??GPIO_KEY_Tick_4: MOV L:??keyResTime, #0x0 // 306 } // 307 // 308 // KEY1 处理 // 309 if(PD_IDR_IDR4==1) //没有按下 ??GPIO_KEY_Tick_3: LD A, L:0x5010 SWAP A AND A, #0xf AND A, #0x1 CP A, #0x0 JREQ L:??GPIO_KEY_Tick_5 // 310 { // 311 if(KEY1==1) LD A, L:KEY + 1 CP A, #0x1 JRNE L:??GPIO_KEY_Tick_6 // 312 { // 313 keyResTime2 ++; LD A, L:??keyResTime2 ADD A, #0x1 LD L:??keyResTime2, A // 314 if (keyResTime2 >= 200) { LD A, L:??keyResTime2 CP A, #0xc8 JRC L:??GPIO_KEY_Tick_7 // 315 KEY1=2; MOV L:KEY + 1, #0x2 JRA L:??GPIO_KEY_Tick_7 // 316 } // 317 } // 318 else // 319 { // 320 KEY1=0; ??GPIO_KEY_Tick_6: MOV L:KEY + 1, #0x0 // 321 } // 322 keyTime2=LocalTime+120; ??GPIO_KEY_Tick_7: LDW X, #0x78 LDW S:?w1, X CLRW X LDW S:?w0, X LDW X, #LocalTime CALLF L:?add32_l0_l0_0x LDW X, #??keyTime2 JPF L:?load32_0x_l0 // 323 } // 324 else if(LocalTime>keyTime2) ??GPIO_KEY_Tick_5: LDW Y, #LocalTime LDW X, #??keyTime2 CALLF L:?load32_l0_0x LDW X, Y CALLF L:?ucmp32_c_l0_0x JRNC L:??GPIO_KEY_Tick_8 // 325 { // 326 KEY1=1; MOV L:KEY + 1, #0x1 // 327 keyResTime2 = 0; MOV L:??keyResTime2, #0x0 RETF // 328 } // 329 else { // 330 keyResTime2 = 0; ??GPIO_KEY_Tick_8: MOV L:??keyResTime2, #0x0 // 331 } // 332 } RETF CFI EndBlock cfiBlock10 REQUIRE _A_PA_IDR REQUIRE _A_PD_IDR SECTION `.near.bss`:DATA:REORDER:NOROOT(0) ??keyTime1: DS8 4 SECTION `.near.bss`:DATA:REORDER:NOROOT(0) ??keyResTime: DS8 1 SECTION `.near.bss`:DATA:REORDER:NOROOT(0) ??keyTime2: DS8 4 SECTION `.near.bss`:DATA:REORDER:NOROOT(0) ??keyResTime2: DS8 1 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock11 Using cfiCommon0 CFI Function BUS_RevData CODE // 333 void BUS_RevData(void) // 334 { // 335 //======================================= // 336 if(((BUS_Rev_Cmd[0]!=Addrp[0])||(BUS_Rev_Cmd[1]!=Addrp[1]))&&(BUS_Rev_Cmd[2]!=0x0E)) BUS_RevData: LD A, [L:Addrp.w] CP A, L:BUS_Rev_Cmd JRNE L:??BUS_RevData_0 LDW X, L:Addrp INCW X LD A, (X) CP A, L:BUS_Rev_Cmd + 1 JREQ L:??BUS_RevData_1 ??BUS_RevData_0: LD A, L:BUS_Rev_Cmd + 2 CP A, #0xe JREQ L:??BUS_RevData_1 // 337 { // 338 if((BUS_Rev_Cmd[0]!=0xFF)||(BUS_Rev_Cmd[1]!=0xFF)) LD A, L:BUS_Rev_Cmd CP A, #0xff JRNE L:??BUS_RevData_2 LD A, L:BUS_Rev_Cmd + 1 CP A, #0xff JREQ L:??BUS_RevData_1 // 339 return; ??BUS_RevData_2: RETF // 340 } // 341 // 342 //======================================= // 343 switch(BUS_Rev_Cmd[2]) ??BUS_RevData_1: LD A, L:BUS_Rev_Cmd + 2 TNZ A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_3 DEC A JREQ L:??BUS_RevData_4 SUB A, #0x4 JREQ L:??BUS_RevData_5 DEC A JREQ L:??BUS_RevData_6 JRA L:??BUS_RevData_3 // 344 { // 345 case 0: // 346 break; // 347 case 1: // 348 break; // 349 case 2: // 350 break; // 351 case 3: // 352 break; // 353 case 4: //主机呼叫分机,或主机应答分机 // 354 break; // 355 case 5: //主机挂断分机 // 356 break; // 357 case 6: //广播模式 // 358 break; // 359 case 7: //打开门灯 // 360 break; // 361 case 8: //关闭门灯 // 362 break; // 363 case 9: //取消紧急呼叫 // 364 RunMode=1; ??BUS_RevData_4: MOV L:RunMode, #0x1 // 365 Ledswitch=0; MOV L:Ledswitch, #0x0 // 366 BUS_SendCnt =0; MOV L:BUS_SendCnt, #0x0 // 367 break; JRA L:??BUS_RevData_3 // 368 case 13: //注册命令 // 369 BUS_SendCmd[0]=Addrp[0]; ??BUS_RevData_5: LD A, [L:Addrp.w] LD L:BUS_SendCmd, A // 370 BUS_SendCmd[1]=Addrp[1]; LDW X, L:Addrp INCW X LD A, (X) LD L:BUS_SendCmd + 1, A // 371 BUS_SendCmd[2]=0x0D; MOV L:BUS_SendCmd + 2, #0xd // 372 BUS_SendData(3); LD A, #0x3 CALLF BUS_SendData // 373 break; JRA L:??BUS_RevData_3 // 374 case 14: // 375 if(BUS_Rev_Cmd[1]=='Y') //转换盒已经注册过 ??BUS_RevData_6: LD A, L:BUS_Rev_Cmd + 1 CP A, #0x59 JRNE L:??BUS_RevData_7 // 376 { // 377 Ledswitch=0; MOV L:Ledswitch, #0x0 // 378 RunMode=1; MOV L:RunMode, #0x1 // 379 Bus_SendLength=26; //总线发送长度,在正常工作模式时,为26 (3byes*8+2) MOV L:Bus_SendLength, #0x1a JRA L:??BUS_RevData_3 // 380 // 381 } // 382 else // 383 { // 384 RunMode=0; //0:表示注册模式,>0表示正常工作模式 ??BUS_RevData_7: MOV L:RunMode, #0x0 // 385 Bus_SendLength=146; MOV L:Bus_SendLength, #0x92 // 386 } // 387 break; // 388 } // 389 Bus_RevFlag=0xFF; ??BUS_RevData_3: MOV L:Bus_RevFlag, #0xff // 390 } RETF CFI EndBlock cfiBlock11 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock12 Using cfiCommon0 CFI Function BUS_Rev_Tick CODE // 391 void BUS_Rev_Tick(void) // 392 { // 393 static unsigned char i=0,j=0,k=0; // 394 if(BUS_RevIndex==26) BUS_Rev_Tick: LD A, L:BUS_RevIndex CP A, #0x1a JREQ ??lb_5 JP L:??BUS_Rev_Tick_0 // 395 { // 396 BUS_Rev_Cmd[0]=0; ??lb_5: MOV L:BUS_Rev_Cmd, #0x0 // 397 BUS_Rev_Cmd[1]=0; MOV L:BUS_Rev_Cmd + 1, #0x0 // 398 BUS_Rev_Cmd[2]=0; MOV L:BUS_Rev_Cmd + 2, #0x0 // 399 for(k=0;k<24;k++) MOV L:??k, #0x0 JRA L:??BUS_Rev_Tick_1 // 400 { // 401 i=k / 8; ??BUS_Rev_Tick_2: LD A, L:??k MOV S:?b0, #0x8 CLRW X LD XL, A LD A, S:?b0 DIV X, A LD A, XL LD L:??i, A // 402 j=k % 8; LD A, L:??k MOV S:?b0, #0x8 CLRW X LD XL, A LD A, S:?b0 DIV X, A LD L:??j, A // 403 if ((BUS_RevBuf[k]>280)&&(BUS_RevBuf[k]<400)) LD A, L:??k CLRW X LD XL, A SLLW X LDW X, (L:BUS_RevBuf,X) SUBW X, #0x119 CPW X, #0x77 JRNC L:??BUS_Rev_Tick_3 // 404 { // 405 BUS_Rev_Cmd[i]|=(1<>4)&0x0F; LD A, L:BUS_Rev_Cmd + 2 SWAP A AND A, #0xf LD L:??j, A // 411 // 412 #ifdef RxTestDebug // 413 if(i==j) // 414 { // 415 BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F; // 416 BUS_RevData(); // 417 } else { // 418 rxtestDebugcnt ++; // 419 if (rxtestDebugcnt > 10) //200ms,100s // 420 { // 421 Ledswitch=1; // 422 } // 423 // 424 } // 425 #else // 426 // 427 BUS_Rev_Cmd[2]=BUS_Rev_Cmd[2]&0x0F; LD A, L:BUS_Rev_Cmd + 2 AND A, #0xf LD L:BUS_Rev_Cmd + 2, A // 428 BUS_RevData(); CALLF BUS_RevData // 429 #endif // 430 // 431 // 432 // 433 } // 434 } ??BUS_Rev_Tick_0: RETF CFI EndBlock cfiBlock12 SECTION `.near.bss`:DATA:REORDER:NOROOT(0) ??i: DS8 1 SECTION `.near.bss`:DATA:REORDER:NOROOT(0) ??j: DS8 1 SECTION `.near.bss`:DATA:REORDER:NOROOT(0) ??k: DS8 1 // 435 //===================TIM4计数溢出更新事件中断响应函数====================== // 436 #pragma vector=0x19 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock13 Using cfiCommon1 CFI Function TIM4_UPD_OVF_IRQHandler CODE // 437 __interrupt void TIM4_UPD_OVF_IRQHandler(void) // 438 { TIM4_UPD_OVF_IRQHandler: _interrupt_25: PUSH CC CFI CFA SP+10 POP A CFI CFA SP+9 AND A, #0xbf PUSH A CFI CFA SP+10 POP CC CFI CFA SP+9 CALLF L:?push_l0 CFI ?b3 Frame(CFA, -9) CFI ?b2 Frame(CFA, -10) CFI ?b1 Frame(CFA, -11) CFI ?b0 Frame(CFA, -12) CFI CFA SP+13 // 439 __root static unsigned char flag=0; // 440 unsigned char i,j; // 441 // 442 TIM4_SR = 0; //清除更新事件中断标志位UIF MOV L:0x5344, #0x0 // 443 LocalTime++; LDW X, #LocalTime CALLF L:?load32_l0_0x CALLF L:?inc32_l0_l0 LDW X, #LocalTime CALLF L:?load32_0x_l0 // 444 // if(BUS_RevOverTime>0)BUS_RevOverTime--; // 445 //=================================== // 446 if(flag>1) LD A, L:??flag CP A, #0x2 JRC L:??TIM4_UPD_OVF_IRQHandler_0 // 447 { // 448 TIM1_CCER2_CC4E=1; //GPIOA->BSRR = GPIO_Pin_9; //总线为低电平 BSET L:0x525d, #0x4 // 449 flag--; LD A, L:??flag ADD A, #0xff LD L:??flag, A // 450 return; JP L:??TIM4_UPD_OVF_IRQHandler_1 // 451 } // 452 else if(flag==1) ??TIM4_UPD_OVF_IRQHandler_0: LD A, L:??flag CP A, #0x1 JRNE L:??TIM4_UPD_OVF_IRQHandler_2 // 453 { // 454 TIM1_CCER2_CC4E=0; //GPIOA->BRR = GPIO_Pin_9; //总线为高电平 BRES L:0x525d, #0x4 // 455 flag=0; MOV L:??flag, #0x0 // 456 return; JP L:??TIM4_UPD_OVF_IRQHandler_1 // 457 } // 458 //=================================== // 459 if((BUS_SendInex>0)&&(flag==0)) ??TIM4_UPD_OVF_IRQHandler_2: LD A, L:BUS_SendInex CP A, #0x0 JRNE ??lb_3 JP L:??TIM4_UPD_OVF_IRQHandler_1 ??lb_3: LD A, L:??flag CP A, #0x0 JREQ ??lb_4 JP L:??TIM4_UPD_OVF_IRQHandler_1 // 460 { // 461 if(BUS_SendInex==1) //起始位:总线5ms低电平 ??lb_4: LD A, L:BUS_SendInex CP A, #0x1 JRNE L:??TIM4_UPD_OVF_IRQHandler_3 // 462 { // 463 flag=5; MOV L:??flag, #0x5 // 464 TIM1_CCER2_CC4E=1; //GPIOA->BSRR = GPIO_Pin_9; BSET L:0x525d, #0x4 // 465 BUS_SendInex++; LD A, L:BUS_SendInex ADD A, #0x1 LD L:BUS_SendInex, A JP L:??TIM4_UPD_OVF_IRQHandler_1 // 466 } // 467 else if(BUS_SendInex>j)&0x01)>0) //数据位1:2ms低电平 CLRW X EXG A, XL LD A, S:?b1 EXG A, XL LD A, (L:BUS_SendingCmd,X) CLRW X LD XL, A LD A, S:?b0 CALLF L:?sra16_x_x_a LD A, XL AND A, #0x1 CP A, #0x1 JRC L:??TIM4_UPD_OVF_IRQHandler_5 // 472 { // 473 flag=2; MOV L:??flag, #0x2 JRA L:??TIM4_UPD_OVF_IRQHandler_6 // 474 } // 475 else //数据位0:1ms低电平 // 476 { // 477 flag=1; ??TIM4_UPD_OVF_IRQHandler_5: MOV L:??flag, #0x1 // 478 } // 479 TIM1_CCER2_CC4E=1; //GPIOA->BSRR = GPIO_Pin_9; ??TIM4_UPD_OVF_IRQHandler_6: BSET L:0x525d, #0x4 // 480 BUS_SendInex++; LD A, L:BUS_SendInex ADD A, #0x1 LD L:BUS_SendInex, A JRA L:??TIM4_UPD_OVF_IRQHandler_1 // 481 } // 482 else if(BUS_SendInex==Bus_SendLength) ??TIM4_UPD_OVF_IRQHandler_4: LD A, L:Bus_SendLength CP A, L:BUS_SendInex JRNE L:??TIM4_UPD_OVF_IRQHandler_7 // 483 { // 484 flag=0; MOV L:??flag, #0x0 // 485 TIM1_CCER2_CC4E=1; //GPIOA->BSRR = GPIO_Pin_9; BSET L:0x525d, #0x4 // 486 BUS_SendInex++; LD A, L:BUS_SendInex ADD A, #0x1 LD L:BUS_SendInex, A JRA L:??TIM4_UPD_OVF_IRQHandler_1 // 487 } // 488 else // 489 { // 490 TIM1_CCER2_CC4E=0; ??TIM4_UPD_OVF_IRQHandler_7: BRES L:0x525d, #0x4 // 491 BUS_SendInex=0; MOV L:BUS_SendInex, #0x0 // 492 flag=0; MOV L:??flag, #0x0 // 493 } // 494 } // 495 // 496 } ??TIM4_UPD_OVF_IRQHandler_1: CALLF L:?pop_l0 CFI ?b0 SameValue CFI ?b1 SameValue CFI ?b2 SameValue CFI ?b3 SameValue CFI CFA SP+9 IRET CFI EndBlock cfiBlock13 REQUIRE _A_TIM4_SR REQUIRE _A_TIM1_CCER2 SECTION `.near.bss`:DATA:REORDER:ROOT(0) ??flag: DS8 1 // 497 //===================外部IO下降沿中断事件中断响应函数===================== // 498 #pragma vector=0x07 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock14 Using cfiCommon1 CFI Function EXTI_PORTC_IRQHandler CODE // 499 __interrupt void EXTI_PORTC_IRQHandler(void) // 500 { EXTI_PORTC_IRQHandler: _interrupt_7: CALLF L:?push_w0 CFI ?b1 Frame(CFA, -9) CFI ?b0 Frame(CFA, -10) CFI CFA SP+11 // 501 unsigned int i=0; CLRW X // 502 //=========================================== // 503 i=TIM2_CNTRH; LD A, L:0x530c CLRW Y LD YL, A LDW X, Y // 504 i=(i<<8)+TIM2_CNTRL; CLR A RLWA X, A LD A, L:0x530d CLRW Y LD YL, A LDW S:?w0, Y ADDW X, S:?w0 // 505 //=========================================== // 506 if(BUS_RevIndex==0) LD A, L:BUS_RevIndex CP A, #0x0 JRNE L:??EXTI_PORTC_IRQHandler_0 // 507 { // 508 //=========================================== // 509 // BUS_RevOverTime=200; //接收200ms超时 // 510 Bus_RevFlag=0; //清除接收标志位 MOV L:Bus_RevFlag, #0x0 // 511 //=========================================== // 512 if((i>400)&&(i<750)) SUBW X, #0x191 CPW X, #0x15d JRNC L:??EXTI_PORTC_IRQHandler_1 // 513 { // 514 BUS_RevIndex=2; MOV L:BUS_RevIndex, #0x2 JRA L:??EXTI_PORTC_IRQHandler_2 // 515 // 516 } // 517 else // 518 { // 519 BUS_RevIndex=0; ??EXTI_PORTC_IRQHandler_1: MOV L:BUS_RevIndex, #0x0 JRA L:??EXTI_PORTC_IRQHandler_2 // 520 } // 521 } // 522 else if(BUS_RevIndex==1) ??EXTI_PORTC_IRQHandler_0: LD A, L:BUS_RevIndex CP A, #0x1 JRNE L:??EXTI_PORTC_IRQHandler_3 // 523 { // 524 if((i>400)&&(i<750)) SUBW X, #0x191 CPW X, #0x15d JRNC L:??EXTI_PORTC_IRQHandler_4 // 525 { // 526 BUS_RevIndex=2; MOV L:BUS_RevIndex, #0x2 JRA L:??EXTI_PORTC_IRQHandler_2 // 527 } // 528 else // 529 { // 530 BUS_RevIndex=0; ??EXTI_PORTC_IRQHandler_4: MOV L:BUS_RevIndex, #0x0 JRA L:??EXTI_PORTC_IRQHandler_2 // 531 } // 532 } // 533 else if(BUS_RevIndex<26) ??EXTI_PORTC_IRQHandler_3: LD A, L:BUS_RevIndex CP A, #0x1a JRNC L:??EXTI_PORTC_IRQHandler_2 // 534 { // 535 BUS_RevBuf[BUS_RevIndex-2]=i; LD A, L:BUS_RevIndex CLRW Y LD YL, A SLLW Y ADDW Y, #BUS_RevBuf - 4 LDW (Y), X // 536 BUS_RevIndex++; LD A, L:BUS_RevIndex ADD A, #0x1 LD L:BUS_RevIndex, A // 537 } // 538 //=========================================== // 539 TIM2_CNTRH=0x00; //初值 ??EXTI_PORTC_IRQHandler_2: MOV L:0x530c, #0x0 // 540 TIM2_CNTRL=0x00; MOV L:0x530d, #0x0 // 541 } CALLF L:?pop_w0 CFI ?b0 SameValue CFI ?b1 SameValue CFI CFA SP+9 IRET CFI EndBlock cfiBlock14 REQUIRE TIM2_CNTRH REQUIRE TIM2_CNTRL // 542 // 543 SECTION `.far_func.text`:CODE:REORDER:NOROOT(0) CFI Block cfiBlock15 Using cfiCommon0 CFI Function BUS_SendData CODE // 544 void BUS_SendData(unsigned char Length) // 545 { BUS_SendData: LD S:?b2, A // 546 // 添加发送前的状态检查 // 547 if(BUS_SendInex > 0) { LD A, L:BUS_SendInex CP A, #0x0 JRNE L:??BUS_SendData_0 // 548 return; // 如果上一次发送未完成,直接返回 // 549 } // 550 // 551 unsigned char i=0,checksum=0; CLR S:?b0 CLR S:?b1 // 552 //====================================================== // 553 checksum=0; CLR A LD S:?b1, A // 554 BUS_SendCmd[Length-1]&=0x0F; CLRW X EXG A, XL LD A, S:?b2 EXG A, XL ADDW X, #BUS_SendCmd - 1 LD A, (X) AND A, #0xf CLRW X EXG A, XL LD A, S:?b2 EXG A, XL ADDW X, #BUS_SendCmd - 1 LD (X), A // 555 for(i=0;i KeySentTime)) { //重发逻辑 ??main_3: LD A, L:BUS_SendCnt CP A, #0x0 JREQ L:??main_6 LDW Y, #LocalTime LDW X, #??KeySentTime CALLF L:?load32_l0_0x LDW X, Y CALLF L:?ucmp32_c_l0_0x JRNC L:??main_6 // 637 KeySentTime = LocalTime +1000; LDW X, #0x3e8 LDW S:?w1, X CLRW X LDW S:?w0, X LDW X, #LocalTime CALLF L:?add32_l0_l0_0x LDW X, #??KeySentTime CALLF L:?load32_0x_l0 // 638 BUS_SendCnt--; LD A, L:BUS_SendCnt ADD A, #0xff LD L:BUS_SendCnt, A // 639 BUS_SendCmd[0]=Addrp[0]; LD A, [L:Addrp.w] LD L:BUS_SendCmd, A // 640 BUS_SendCmd[1]=Addrp[1]; LDW X, L:Addrp INCW X LD A, (X) LD L:BUS_SendCmd + 1, A // 641 BUS_SendCmd[2]=CurrentCmd; // 使用记录的命令类型 LD A, L:CurrentCmd LD L:BUS_SendCmd + 2, A // 642 BUS_SendData(3); LD A, #0x3 CALLF BUS_SendData JP L:??main_0 // 643 } // 644 // 按键处理 // 645 else if(KEY0==2) //紧急呼叫 ??main_6: LD A, L:KEY CP A, #0x2 JRNE L:??main_7 // 646 { // 647 BUS_SendCmd[0]=Addrp[0]; LD A, [L:Addrp.w] LD L:BUS_SendCmd, A // 648 BUS_SendCmd[1]=Addrp[1]; LDW X, L:Addrp INCW X LD A, (X) LD L:BUS_SendCmd + 1, A // 649 BUS_SendCmd[2]=0x0C; MOV L:BUS_SendCmd + 2, #0xc // 650 BUS_SendData(3); LD A, #0x3 CALLF BUS_SendData // 651 Ledswitch=2; MOV L:Ledswitch, #0x2 // 652 BUS_SendCnt = 9; MOV L:BUS_SendCnt, #0x9 // 653 KeySentTime = LocalTime +1000; LDW X, #0x3e8 LDW S:?w1, X CLRW X LDW S:?w0, X LDW X, #LocalTime CALLF L:?add32_l0_l0_0x LDW X, #??KeySentTime CALLF L:?load32_0x_l0 // 654 CurrentCmd = 0x0C; // 记录当前命令类型 MOV L:CurrentCmd, #0xc JP L:??main_0 // 655 } // 656 else if(KEY0==3) //长按关闭指示灯 ??main_7: LD A, L:KEY CP A, #0x3 JRNE L:??main_8 // 657 { // 658 Ledswitch=0; //dwd190802 MOV L:Ledswitch, #0x0 JP L:??main_0 // 659 } // 660 else if(KEY1==2) //紧急呼叫取消 ??main_8: LD A, L:KEY + 1 CP A, #0x2 JREQ ??lb_1 JP L:??main_0 // 661 { // 662 if(CurrentCmd == 0x0C) { // 只有在紧急呼叫状态下才能取消 ??lb_1: LD A, L:CurrentCmd CP A, #0xc JREQ ??lb_2 JP L:??main_0 // 663 BUS_SendCmd[0]=Addrp[0]; ??lb_2: LD A, [L:Addrp.w] LD L:BUS_SendCmd, A // 664 BUS_SendCmd[1]=Addrp[1]; LDW X, L:Addrp INCW X LD A, (X) LD L:BUS_SendCmd + 1, A // 665 BUS_SendCmd[2]=0x07; MOV L:BUS_SendCmd + 2, #0x7 // 666 BUS_SendData(3); LD A, #0x3 CALLF BUS_SendData // 667 Ledswitch=0; MOV L:Ledswitch, #0x0 // 668 BUS_SendCnt = 9; MOV L:BUS_SendCnt, #0x9 // 669 KeySentTime = LocalTime +1000; LDW X, #0x3e8 LDW S:?w1, X CLRW X LDW S:?w0, X LDW X, #LocalTime CALLF L:?add32_l0_l0_0x LDW X, #??KeySentTime CALLF L:?load32_0x_l0 // 670 CurrentCmd = 0x07; // 记录当前命令类型 MOV L:CurrentCmd, #0x7 JP L:??main_0 CFI EndBlock cfiBlock16 // 671 } // 672 } // 673 } // 674 } // 675 } SECTION `.near.bss`:DATA:REORDER:NOROOT(0) ??KeySentTime: DS8 4 SECTION VREGS:DATA:REORDER:NOROOT(0) END // // 1 757 bytes in section .far_func.text // 157 bytes in section .near.bss // 2 bytes in section .near.data // 42 bytes in section .near.noinit (abs) // 54 bytes in section .near.rodata // // 1 757 bytes of CODE memory // 54 bytes of CONST memory // 159 bytes of DATA memory (+ 42 bytes shared) // //Errors: none //Warnings: 3