Files
OldPeopleHome/zigbee/ZStack-CC2530-r200/Projects/SappWsn/RouterEB/List/IR.lst
LitterDryFish 6b0d1c0743 add node
2019-08-23 12:26:53 +08:00

837 lines
37 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
###############################################################################
#
# IAR C/C++ Compiler V10.30.1.6000 for 8051 23/Aug/2019 12:13:02
# Copyright 2004-2018 IAR Systems AB.
# PC-locked license - IAR Embedded Workbench for 8051
#
# Core = plain
# Code model = banked
# Data model = large
# Calling convention = xdata reentrant
# Constant location = data_rom
# Dptr setup = 1,16
#
# Source file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\hal\target\CC2530EB\IR.c
# Command line =
# -f C:\Users\VULCAN\AppData\Local\Temp\EWC74F.tmp
# (E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\hal\target\CC2530EB\IR.c
# -D ZIGBEEPRO -D ZTOOL_P1 -D MT_TASK -D MT_SYS_FUNC -D MT_ZDO_FUNC -D
# LCD_SUPPORTED=DEBUG -D SAPP_ZSTACK -lC
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
# -lA
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List
# --diag_suppress Pe001,Pa010 -o
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj
# -e --debug --core=plain --dptr=16,1 --data_model=large
# --code_model=banked --calling_convention=xdata_reentrant
# --place_constants=data_rom --nr_virtual_regs 8 -f
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wRouter.cfg
# (-DCPU32MHZ -DROOT=__near_func -DMAC_CFG_APP_PENDING_QUEUE=TRUE
# -DMAC_CFG_TX_DATA_MAX=5 -DMAC_CFG_TX_MAX=8 -DMAC_CFG_RX_MAX=5
# -DRTR_NWK) -f
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\Tools\CC2530DB\f8wConfig.cfg
# (-DZIGBEEPRO -DSECURE=0 -DZG_SECURE_DYNAMIC=0 -DREFLECTOR
# -DDEFAULT_CHANLIST=0x00800000 -DZDAPP_CONFIG_PAN_ID=0x0057
# -DNWK_START_DELAY=100 -DEXTENDED_JOINING_RANDOM_MASK=0x007F
# -DBEACON_REQUEST_DELAY=100 -DBEACON_REQ_DELAY_MASK=0x00FF
# -DLINK_STATUS_JITTER_MASK=0x007F -DROUTE_EXPIRY_TIME=30
# -DAPSC_ACK_WAIT_DURATION_POLLED=3000 -DNWK_INDIRECT_MSG_TIMEOUT=7
# -DMAX_RREQ_ENTRIES=8 -DAPSC_MAX_FRAME_RETRIES=3
# -DNWK_MAX_DATA_RETRIES=2 -DMAX_POLL_FAILURE_RETRIES=2 -DMAX_BCAST=9
# -DAPS_MAX_GROUPS=16 -DMAX_RTG_ENTRIES=40 -DNWK_MAX_BINDING_ENTRIES=4
# -DMAX_BINDING_CLUSTER_IDS=4 "-DDEFAULT_KEY={0x01, 0x03, 0x05, 0x07,
# 0x09, 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C,
# 0x0D}" -DMAC_MAX_FRAME_SIZE=116 -DZDNWKMGR_MIN_TRANSMISSIONS=20
# "-DCONST=const __code" -DGENERIC=__generic -DRFD_RCVC_ALWAYS_ON=FALSE
# -DPOLL_RATE=1000 -DQUEUED_POLL_RATE=100 -DRESPONSE_POLL_RATE=100
# -DREJOIN_POLL_RATE=440) -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\Source\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\zstack\ZMain\TI2530DB\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\hal\target\CC2530EB\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\high_level\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mac\low_level\srf04\single_chip\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\mt\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\osal\include\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\saddr\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\services\sdata\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\af\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\nwk\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sapi\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sec\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\sys\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\stack\zdo\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\
# -I
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\..\..\Components\zmac\f8w\
# -Ohz --require_prototypes --no_code_motion)
# Locale = Chinese (Simplified)_CHN.936
# List file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\List\IR.lst
# Object file =
# E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Projects\SappWsn\RouterEB\Obj\IR.r51
#
###############################################################################
E:\qq下载文件\ZStack-CC2530-r200\ZStack-CC2530-r200\Components\hal\target\CC2530EB\IR.c
1 /***********************************************************
2 ** FileName: IR.c
3 ** Introductions: Sunplusapp CC2530 ZigBee Node IR Romoter Signal Send Functions
4 ** Last Modify time: 2013.05.21
5 ** Modify: 修改红外编码发送,优化时序,添加注释
6 ** Author: GuoZhenjiang <zhenjiang.guo@sunplusapp.com>
7 ***********************************************************/
8
9 #include "IR.h"
\ In segment SFR_AN, at 0x90
\ union <unnamed> volatile __sfr _A_P1
\ _A_P1:
\ 000000 DS 1
\ In segment SFR_AN, at 0xa8
\ union <unnamed> volatile __sfr _A_IEN0
\ _A_IEN0:
\ 000000 DS 1
\ In segment SFR_AN, at 0xaf
\ unsigned char volatile __sfr T1STAT
\ T1STAT:
\ 000000 DS 1
\ In segment SFR_AN, at 0xb8
\ union <unnamed> volatile __sfr _A_IEN1
\ _A_IEN1:
\ 000000 DS 1
\ In segment SFR_AN, at 0xc0
\ union <unnamed> volatile __sfr _A_IRCON
\ _A_IRCON:
\ 000000 DS 1
\ In segment SFR_AN, at 0xcb
\ unsigned char volatile __sfr T3CTL
\ T3CTL:
\ 000000 DS 1
\ In segment SFR_AN, at 0xcc
\ unsigned char volatile __sfr T3CCTL0
\ T3CCTL0:
\ 000000 DS 1
\ In segment SFR_AN, at 0xcd
\ unsigned char volatile __sfr T3CC0
\ T3CC0:
\ 000000 DS 1
\ In segment SFR_AN, at 0xd8
\ union <unnamed> volatile __sfr _A_TIMIF
\ _A_TIMIF:
\ 000000 DS 1
\ In segment SFR_AN, at 0xda
\ unsigned char volatile __sfr T1CC0L
\ T1CC0L:
\ 000000 DS 1
\ In segment SFR_AN, at 0xdb
\ unsigned char volatile __sfr T1CC0H
\ T1CC0H:
\ 000000 DS 1
\ In segment SFR_AN, at 0xe4
\ unsigned char volatile __sfr T1CTL
\ T1CTL:
\ 000000 DS 1
\ In segment SFR_AN, at 0xe5
\ unsigned char volatile __sfr T1CCTL0
\ T1CCTL0:
\ 000000 DS 1
\ In segment SFR_AN, at 0xf4
\ unsigned char volatile __sfr P1SEL
\ P1SEL:
\ 000000 DS 1
\ In segment SFR_AN, at 0xf5
\ unsigned char volatile __sfr P2SEL
\ P2SEL:
\ 000000 DS 1
\ In segment SFR_AN, at 0xfe
\ unsigned char volatile __sfr P1DIR
\ P1DIR:
\ 000000 DS 1
10 #include "OSAL.h"
11
12 #if defined(HAL_IRENC) && (HAL_IRENC == TRUE)
13
14 // 定时器1中自增量,控制每一位编码的周期
\ In segment XDATA_Z, align 1, keep-with-next
15 volatile uint16 T1_80usCnt = 0;
\ T1_80usCnt:
\ 000000 DS 2
\ 000002 REQUIRE __INIT_XDATA_Z
16
17 // Timer1红外编码初始化
18 void IRSend_T1_Init(void);
19 // Timer3红外编码初始化
20 void IRSend_T3_Init(void);
21 // Timer1 & Timer3 中断处理函数声明
22 __near_func __interrupt void IRSend_T1IntHandle(void);
23 __near_func __interrupt void IRSend_T3IntHandle(void);
24
25 /***********************************************************
26 ** 函数名称: GenIR
27 ** 实现功能: 系统时钟设置
28 ** 入口参数: IRData: 红外编码数据首地址
29 ** Mode: 引导码分类:1 周期9ms 2:周期13.56ms
30 ** CodeLen: 编码位数(bit,不是Byte)
31 ** 返回结果: 0:发送失败 1:发送成功
32 ***********************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
33 int GenIR(uint8 *IRData , uint8 Mode , uint8 CodeLen )
\ GenIR:
34 {
\ 000000 REQUIRE ?V0
\ 000000 REQUIRE ?V1
\ 000000 REQUIRE ?V2
\ 000000 REQUIRE ?V3
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
35 uint16 GuideCodeLen=0;
\ 000009 75..00 MOV ?V0,#0x0
36 static IRSendSta_t IRSendSta = IRSta_Guide;
37 static uint8 cntByte=0, cntbit=0, bitNum;
38 bitNum = CodeLen; //保存位数
\ 00000C EC MOV A,R4
\ 00000D 90.... MOV DPTR,#??bitNum
\ 000010 F0 MOVX @DPTR,A
39
40 if(Mode == 1)
\ 000011 7401 MOV A,#0x1
\ 000013 69 XRL A,R1
\ 000014 7005 JNZ ??GenIR_0
41 GuideCodeLen = 56;//226; 引导码长度4.5ms、4.5ms
\ 000016 75..38 MOV ?V0,#0x38
\ 000019 8008 SJMP ??GenIR_1
42 else if(Mode == 2)
\ ??GenIR_0:
\ 00001B 7402 MOV A,#0x2
\ 00001D 69 XRL A,R1
\ 00001E 7003 JNZ ??GenIR_1
43 GuideCodeLen = 114; //引导码长度9ms、4.5ms
\ 000020 75..72 MOV ?V0,#0x72
44
45 IRSend_T1_Init();
\ ??GenIR_1:
\ 000023 ; Setup parameters for call to function IRSend_T1_Init
\ 000023 12.... LCALL `??IRSend_T1_Init::?relay`; Banked call to: IRSend_T1_Init
46 IRSend_T3_Init();
\ 000026 ; Setup parameters for call to function IRSend_T3_Init
\ 000026 12.... LCALL `??IRSend_T3_Init::?relay`; Banked call to: IRSend_T3_Init
47 IR_SEL_IOOUT;
\ 000029 12.... LCALL ?Subroutine2 & 0xFFFF
48 CLR_IOB_BIT;
49 IRSendSta = IRSta_Guide;
50 T1_80usCnt = 0;
\ ??CrossCallReturnLabel_4:
\ 00002C 90.... MOV DPTR,#T1_80usCnt
\ 00002F E4 CLR A
\ 000030 F0 MOVX @DPTR,A
\ 000031 A3 INC DPTR
\ 000032 F0 MOVX @DPTR,A
51 IR_SEL_T3PWM;
\ ??GenIR_2:
\ 000033 43F408 ORL 0xf4,#0x8
\ 000036 8003 SJMP ??CrossCallReturnLabel_5
52 while(1)
53 {
54 // 查询红外编码发送状态
55 switch(IRSendSta)
56 {
57 // 引导码阶段
58 case IRSta_Guide:
59 // 引导码4.5ms或9ms载波阶段
60 if(T1_80usCnt <= GuideCodeLen)
61 {
62 IRSendSta = IRSta_Guide;
63 IR_SEL_T3PWM;
64 }
65 // 引导码4.5ms低电平阶段
66 else if((T1_80usCnt > GuideCodeLen) && (T1_80usCnt <= GuideCodeLen+56))
67 {
68 IRSendSta = IRSta_Guide;
69 IR_SEL_IOOUT;
\ ??GenIR_3:
\ 000038 12.... LCALL ?Subroutine2 & 0xFFFF
70 CLR_IOB_BIT;
71 }
\ ??CrossCallReturnLabel_5:
\ 00003B 12.... LCALL ?Subroutine3 & 0xFFFF
\ ??CrossCallReturnLabel_7:
\ 00003E 50F3 JNC ??GenIR_2
\ 000040 12.... LCALL ?Subroutine3 & 0xFFFF
\ ??CrossCallReturnLabel_8:
\ 000043 5017 JNC ??GenIR_4
\ 000045 E5.. MOV A,?V0
\ 000047 2438 ADD A,#0x38
\ 000049 FA MOV R2,A
\ 00004A E4 CLR A
\ 00004B 3400 ADDC A,#0x0
\ 00004D FB MOV R3,A
\ 00004E 90.... MOV DPTR,#T1_80usCnt
\ 000051 E0 MOVX A,@DPTR
\ 000052 F8 MOV R0,A
\ 000053 A3 INC DPTR
\ 000054 E0 MOVX A,@DPTR
\ 000055 F9 MOV R1,A
\ 000056 EA MOV A,R2
\ 000057 98 SUBB A,R0
\ 000058 EB MOV A,R3
\ 000059 99 SUBB A,R1
\ 00005A 50DC JNC ??GenIR_3
72 // 引导码发送完毕,准备发送数据位
73 else
74 {
75 IRSendSta = IRSta_T3PWM;
76 IR_SEL_T3PWM;
\ ??GenIR_4:
\ 00005C 12.... LCALL ?Subroutine4 & 0xFFFF
77 T1_80usCnt = 0;
78 }
79 break;
80 // 数据位中的位0、位1的0.56ms的38kHz载波阶段
81 case IRSta_T3PWM:
82 if(T1_80usCnt >= 7) // 7 * 80us = 560us
\ ??CrossCallReturnLabel_9:
\ 00005F 90.... MOV DPTR,#T1_80usCnt
\ 000062 C3 CLR C
\ 000063 E0 MOVX A,@DPTR
\ 000064 9407 SUBB A,#0x7
\ 000066 A3 INC DPTR
\ 000067 E0 MOVX A,@DPTR
\ 000068 9400 SUBB A,#0x0
\ 00006A 40F3 JC ??CrossCallReturnLabel_9
83 {
84 IR_SEL_IOOUT;
\ 00006C 12.... LCALL ?Subroutine1 & 0xFFFF
85 CLR_IOB_BIT;
86 IRSendSta = IRSta_Data0;
87 }
88 break;
89 // 数据位中的位0、位1的低电平持续阶段
90 case IRSta_Data0:
91 //发送数据0,低电平持续 0.565ms。
92 if(!(IRData[cntByte] & (0x80 >> (cntbit % 8))))
\ ??CrossCallReturnLabel_2:
\ 00006F E0 MOVX A,@DPTR
\ 000070 5407 ANL A,#0x7
\ 000072 F8 MOV R0,A
\ 000073 7480 MOV A,#-0x80
\ 000075 B80002 CJNE R0,#0x0,??GenIR_5
\ 000078 8004 SJMP ??GenIR_6
\ ??GenIR_5:
\ 00007A C3 CLR C
\ 00007B 13 RRC A
\ 00007C D8FC DJNZ R0,??GenIR_5
\ ??GenIR_6:
\ 00007E FA MOV R2,A
\ 00007F 90.... MOV DPTR,#??cntByte
\ 000082 E0 MOVX A,@DPTR
\ 000083 F8 MOV R0,A
\ 000084 EE MOV A,R6
\ 000085 28 ADD A,R0
\ 000086 F582 MOV DPL,A
\ 000088 E4 CLR A
\ 000089 3F ADDC A,R7
\ 00008A F583 MOV DPH,A
\ 00008C E0 MOVX A,@DPTR
\ 00008D 5A ANL A,R2
\ 00008E 90.... MOV DPTR,#T1_80usCnt
\ 000091 C3 CLR C
\ 000092 7010 JNZ ??GenIR_7
93 {
94 if(T1_80usCnt >= 14)
\ 000094 E0 MOVX A,@DPTR
\ 000095 940E SUBB A,#0xe
\ 000097 A3 INC DPTR
\ 000098 E0 MOVX A,@DPTR
\ 000099 9400 SUBB A,#0x0
\ 00009B 401B JC ??GenIR_8
95 {
96 IR_SEL_T3PWM;
\ 00009D 12.... LCALL ?Subroutine0 & 0xFFFF
97 T1_80usCnt = 0;
98 cntbit++;
99 if(0 == (cntbit % 8))
100 cntByte++;
101 }
102 }
\ ??CrossCallReturnLabel_0:
\ 0000A0 7016 JNZ ??GenIR_8
\ 0000A2 800E SJMP ??GenIR_9
103 //发送数据1,低电平持续 1.685ms。
104 else if(IRData[cntByte] & (0x80 >> (cntbit % 8)))
105 {
106 if(T1_80usCnt >= 28)
\ ??GenIR_7:
\ 0000A4 E0 MOVX A,@DPTR
\ 0000A5 941C SUBB A,#0x1c
\ 0000A7 A3 INC DPTR
\ 0000A8 E0 MOVX A,@DPTR
\ 0000A9 9400 SUBB A,#0x0
\ 0000AB 400B JC ??GenIR_8
107 {
108 IR_SEL_T3PWM;
\ 0000AD 12.... LCALL ?Subroutine0 & 0xFFFF
109 T1_80usCnt = 0;
110 cntbit++;
111 if(0 == (cntbit % 8))
\ ??CrossCallReturnLabel_1:
\ 0000B0 7006 JNZ ??GenIR_8
112 cntByte++;
\ ??GenIR_9:
\ 0000B2 90.... MOV DPTR,#??cntByte
\ 0000B5 E0 MOVX A,@DPTR
\ 0000B6 04 INC A
\ 0000B7 F0 MOVX @DPTR,A
113 }
114 }
115 // 发送完毕?
116 if(cntbit >= bitNum)
\ ??GenIR_8:
\ 0000B8 90.... MOV DPTR,#??bitNum
\ 0000BB E0 MOVX A,@DPTR
\ 0000BC F8 MOV R0,A
\ 0000BD 90.... MOV DPTR,#??cntbit
\ 0000C0 E0 MOVX A,@DPTR
\ 0000C1 C3 CLR C
\ 0000C2 98 SUBB A,R0
\ 0000C3 409A JC ??CrossCallReturnLabel_9
117 IRSendSta = IRSta_Stop;
\ 0000C5 90.... MOV DPTR,#??IRSendSta
\ 0000C8 7403 MOV A,#0x3
\ 0000CA F0 MOVX @DPTR,A
118 // 继续发送?
119 else
120 IRSendSta = IRSta_T3PWM;
121 break;
122 // 红外编码数据部分发送完毕
123 case IRSta_Stop:
124 // 一组编码发送完毕 结束位是 0.56ms 的 38K 载波
125 while(T1_80usCnt < 7)
\ ??GenIR_10:
\ 0000CB 90.... MOV DPTR,#T1_80usCnt
\ 0000CE C3 CLR C
\ 0000CF E0 MOVX A,@DPTR
\ 0000D0 9407 SUBB A,#0x7
\ 0000D2 A3 INC DPTR
\ 0000D3 E0 MOVX A,@DPTR
\ 0000D4 9400 SUBB A,#0x0
\ 0000D6 40F3 JC ??GenIR_10
126 ;
127 STOP_T1_T3; // stop T1 & T3
\ 0000D8 75CB00 MOV 0xcb,#0x0
\ 0000DB 75E400 MOV 0xe4,#0x0
128 T1_80usCnt = 0;
\ 0000DE 90.... MOV DPTR,#T1_80usCnt
\ 0000E1 E4 CLR A
\ 0000E2 F0 MOVX @DPTR,A
\ 0000E3 A3 INC DPTR
\ 0000E4 F0 MOVX @DPTR,A
129 IR_SEL_IOOUT;
\ 0000E5 12.... LCALL ?Subroutine1 & 0xFFFF
130 CLR_IOB_BIT;
131 cntbit = 0;
\ ??CrossCallReturnLabel_3:
\ 0000E8 F0 MOVX @DPTR,A
132 cntByte = 0;
\ 0000E9 90.... MOV DPTR,#??cntByte
\ 0000EC F0 MOVX @DPTR,A
133 return 1;
\ 0000ED 7A01 MOV R2,#0x1
\ 0000EF FB MOV R3,A
\ 0000F0 7F04 MOV R7,#0x4
\ 0000F2 02.... LJMP ?BANKED_LEAVE_XDATA
\ 0000F5 REQUIRE P1SEL
\ 0000F5 REQUIRE P1DIR
\ 0000F5 REQUIRE _A_P1
\ 0000F5 REQUIRE T3CTL
\ 0000F5 REQUIRE T1CTL
134 break;
135 default:
136 return 0;
137 break;
138 }
139 }
140 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine3:
\ 000000 90.... MOV DPTR,#T1_80usCnt
\ 000003 E0 MOVX A,@DPTR
\ 000004 F8 MOV R0,A
\ 000005 A3 INC DPTR
\ 000006 E0 MOVX A,@DPTR
\ 000007 F9 MOV R1,A
\ 000008 C3 CLR C
\ 000009 E5.. MOV A,?V0
\ 00000B 98 SUBB A,R0
\ 00000C E4 CLR A
\ 00000D 99 SUBB A,R1
\ 00000E 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine1:
\ 000000 12.... LCALL ?Subroutine5 & 0xFFFF
\ ??CrossCallReturnLabel_11:
\ 000003 90.... MOV DPTR,#??cntbit
\ 000006 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine0:
\ 000000 12.... LCALL ?Subroutine4 & 0xFFFF
\ ??CrossCallReturnLabel_10:
\ 000003 90.... MOV DPTR,#??cntbit
\ 000006 E0 MOVX A,@DPTR
\ 000007 04 INC A
\ 000008 F0 MOVX @DPTR,A
\ 000009 5407 ANL A,#0x7
\ 00000B 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine4:
\ 000000 43F408 ORL 0xf4,#0x8
\ 000003 90.... MOV DPTR,#T1_80usCnt
\ 000006 E4 CLR A
\ 000007 F0 MOVX @DPTR,A
\ 000008 A3 INC DPTR
\ 000009 F0 MOVX @DPTR,A
\ 00000A 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine2:
\ 000000 12.... LCALL ?Subroutine5 & 0xFFFF
\ ??CrossCallReturnLabel_12:
\ 000003 22 RET
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine5:
\ 000000 53F4F7 ANL 0xf4,#0xf7
\ 000003 43FE08 ORL 0xfe,#0x8
\ 000006 C293 CLR 0x90.3
\ 000008 22 RET
\ In segment XDATA_Z, align 1, keep-with-next
\ ??IRSendSta:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
\ ??cntByte:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
\ ??cntbit:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
\ In segment XDATA_Z, align 1, keep-with-next
\ ??bitNum:
\ 000000 DS 1
\ 000001 REQUIRE __INIT_XDATA_Z
141
142 /***********************************************************
143 ** 函数名称: IRSend_T1_Init
144 ** 实现功能: 红外编码发送定时器1初始化
145 ** 入口参数: None
146 ** 返回结果: None
147 ***********************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
148 void IRSend_T1_Init(void)
\ IRSend_T1_Init:
149 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
150 T1CTL = 0x0E; // f = 32MHz / 128 = 250 000Hz, T = 4us;模模式,从0~T1CC0反复计数。
\ 000004 75E40E MOV 0xe4,#0xe
151 T1CCTL0 = 0x44; // Timer1通道0中断允许,比较匹配模式,比较比配时输出置位。
\ 000007 75E544 MOV 0xe5,#0x44
152 T1CC0L = 19; // 先写T1CC0L,再写T1CC0H,T1CNT=0时更新。 4us*20 = 80us;
\ 00000A 75DA13 MOV 0xda,#0x13
153 T1CC0H = 0;
\ 00000D 75DB00 MOV 0xdb,#0x0
154 TIMIF |= BIT_1(6); // TIMIF.T1OVFIM Timer1溢出中断允许
\ 000010 D2DE SETB 0xd8.6
155 IEN1 |= BIT_1(1); // IEN1.T1IE Timer1总中断允许
\ 000012 D2B9 SETB 0xb8.1
156 EA = 1; // 打开全局总中断
\ 000014 D2AF SETB 0xa8.7
157 T1_80usCnt = 0; // 80us溢出中断自增量清零
\ 000016 90.... MOV DPTR,#T1_80usCnt
\ 000019 E4 CLR A
\ 00001A F0 MOVX @DPTR,A
\ 00001B A3 INC DPTR
\ 00001C F0 MOVX @DPTR,A
158 }
\ 00001D D083 POP DPH
\ 00001F D082 POP DPL
\ 000021 02.... LJMP ?BRET
\ 000024 REQUIRE T1CTL
\ 000024 REQUIRE T1CCTL0
\ 000024 REQUIRE T1CC0L
\ 000024 REQUIRE T1CC0H
\ 000024 REQUIRE _A_TIMIF
\ 000024 REQUIRE _A_IEN1
\ 000024 REQUIRE _A_IEN0
159
160 /***********************************************************
161 ** 函数名称: IRSend_T3_Init
162 ** 实现功能: 红外编码发送定时器3初始化
163 ** 入口参数: None
164 ** 返回结果: None
165 ***********************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
166 void IRSend_T3_Init(void)
\ IRSend_T3_Init:
167 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
168 P1SEL |= BIT_1(3); // P1.3 us as T3 PWM Out Pin.
\ 000000 43F408 ORL 0xf4,#0x8
169 T3CTL = 0x02; // T3CTL.MODE[10] 模模式,从0~T3CC0反复计数
\ 000003 75CB02 MOV 0xcb,#0x2
170 T3CTL |= BIT_1(5); // T3CTL.MODE[001] f = 32MHz / 2 = 16MHz;
\ 000006 43CB20 ORL 0xcb,#0x20
171 T3CCTL0 |= BIT_1(2); // T3CCTL0.MODE 输出比较比配模式
\ 000009 43CC04 ORL 0xcc,#0x4
172 T3CCTL0 |= BIT_1(4); // T3CCTL0.CMP[010] 比较匹配时,输出取反
\ 00000C 43CC10 ORL 0xcc,#0x10
173
174 T3CC0 = 208; // Timer3通道0输出比较匹配上限值,16MHz / 208 = 76923.076923Hz; 76923 / 2 =38k(比较匹配时取反).
\ 00000F 75CDD0 MOV 0xcd,#-0x30
175 T3CTL |= BIT_1(4); // T3CTL.START 启动Timer3
\ 000012 43CB10 ORL 0xcb,#0x10
176 P2SEL |= BIT_1(5); // P2SEL.PRI2P1 当USART1和Timer3占用相同引脚,Timer3优先。
\ 000015 43F520 ORL 0xf5,#0x20
177 T3CCTL0 |= BIT_1(6); // T3CCTL0.IM Timer3通道0中断允许。
\ 000018 43CC40 ORL 0xcc,#0x40
178 IEN1 |= BIT_1(3); // IEN1.T3IE Timer3总中断允许。
\ 00001B D2BB SETB 0xb8.3
179 EA = 1; // 全局总中断允许。
\ 00001D D2AF SETB 0xa8.7
180 }
\ 00001F 02.... LJMP ?BRET
\ 000022 REQUIRE P1SEL
\ 000022 REQUIRE T3CTL
\ 000022 REQUIRE T3CCTL0
\ 000022 REQUIRE T3CC0
\ 000022 REQUIRE P2SEL
\ 000022 REQUIRE _A_IEN1
\ 000022 REQUIRE _A_IEN0
181
182 /***********************************************************
183 ** 函数名称: IRSendInit
184 ** 实现功能: 红外编码发送初始化
185 ** 入口参数: None
186 ** 返回结果: None
187 ***********************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
188 void IRSendInit(void)
\ IRSendInit:
189 {
\ 000000 ; Saved register size: 0
\ 000000 ; Auto size: 0
190 IR_SEL_IOOUT;
\ 000000 12.... LCALL ?Subroutine2 & 0xFFFF
191 CLR_IOB_BIT;
192 }
\ ??CrossCallReturnLabel_6:
\ 000003 02.... LJMP ?BRET
\ 000006 REQUIRE P1SEL
\ 000006 REQUIRE P1DIR
\ 000006 REQUIRE _A_P1
193
194 /***********************************************************
195 ** 函数名称: IRSend_T1IntHandle
196 ** 实现功能: Timer1 红外编码发送中的中断处理函数
197 ** 入口参数: None
198 ** 返回结果: None
199 ***********************************************************/
200 #pragma vector = T1_VECTOR
\ In segment NEAR_CODE, align 1, keep-with-next
201 __interrupt void IRSend_T1IntHandle(void)
\ IRSend_T1IntHandle:
202 {
\ 000000 C0E0 PUSH A
\ 000002 C0D0 PUSH PSW
\ 000004 C082 PUSH DPL
\ 000006 C083 PUSH DPH
\ 000008 ; Saved register size: 4
\ 000008 ; Auto size: 0
203 T1STAT &= BIT_0(5); // T1STAT.OVFIF 清除Timer1溢出中断标志
\ 000008 53AFDF ANL 0xaf,#0xdf
204 T1STAT &= BIT_0(1); // T1STAT.CH0IF 清除Timer1通道0中断标志
\ 00000B 53AFFD ANL 0xaf,#0xfd
205 IRCON &= BIT_0(1); // IRCON.T1IF 清除Timer1总中断标志
\ 00000E C2C1 CLR 0xc0.1
206 T1_80usCnt++;
\ 000010 90.... MOV DPTR,#T1_80usCnt
\ 000013 E0 MOVX A,@DPTR
\ 000014 2401 ADD A,#0x1
\ 000016 F0 MOVX @DPTR,A
\ 000017 A3 INC DPTR
\ 000018 E0 MOVX A,@DPTR
\ 000019 3400 ADDC A,#0x0
\ 00001B F0 MOVX @DPTR,A
207 }
\ 00001C D083 POP DPH
\ 00001E D082 POP DPL
\ 000020 D0D0 POP PSW
\ 000022 D0E0 POP A
\ 000024 32 RETI
\ 000025 REQUIRE T1STAT
\ 000025 REQUIRE _A_IRCON
208
209 /***********************************************************
210 ** 函数名称: IRSend_T3IntHandle
211 ** 实现功能: Timer3 红外编码发送中的中断处理函数
212 ** 入口参数: None
213 ** 返回结果: None
214 ***********************************************************/
215 #pragma vector = T3_VECTOR
\ In segment NEAR_CODE, align 1, keep-with-next
216 __near_func __interrupt void IRSend_T3IntHandle(void)
\ IRSend_T3IntHandle:
217 {
\ 000000 ; Saved register size: 1
\ 000000 ; Auto size: 0
218 TIMIF &= BIT_0(1); // TIMIF.T3CH0IF
\ 000000 C2D9 CLR 0xd8.1
219 }
\ 000002 32 RETI
\ 000003 REQUIRE _A_TIMIF
\ In segment INTVEC, offset 0x4b, root
\ `??IRSend_T1IntHandle::??INTVEC 75`:
\ 00004B 02.... LJMP (IRSend_T1IntHandle)
\ In segment INTVEC, offset 0x5b, root
\ `??IRSend_T3IntHandle::??INTVEC 91`:
\ 00005B 02.... LJMP (IRSend_T3IntHandle)
220
221
222 #endif // defined(HAL_IRENC) && (HAL_IRENC == TRUE)
Maximum stack usage in bytes:
ISTACK XSTACK Function
------ ------ --------
1 12 GenIR
0 12 -> IRSend_T1_Init
0 12 -> IRSend_T3_Init
0 0 IRSendInit
4 0 IRSend_T1IntHandle
2 12 IRSend_T1_Init
1 0 IRSend_T3IntHandle
0 12 IRSend_T3_Init
Segment part sizes:
Bytes Function/Label
----- --------------
12 ?Subroutine0
7 ?Subroutine1
4 ?Subroutine2
15 ?Subroutine3
11 ?Subroutine4
9 ?Subroutine5
245 GenIR
6 IRSendInit
1 IRSendSta
37 IRSend_T1IntHandle
3 IRSend_T1IntHandle::??INTVEC 75
36 IRSend_T1_Init
3 IRSend_T3IntHandle
3 IRSend_T3IntHandle::??INTVEC 91
34 IRSend_T3_Init
1 P1DIR
1 P1SEL
1 P2SEL
1 T1CC0H
1 T1CC0L
1 T1CCTL0
1 T1CTL
1 T1STAT
2 T1_80usCnt
1 T3CC0
1 T3CCTL0
1 T3CTL
1 _A_IEN0
1 _A_IEN1
1 _A_IRCON
1 _A_P1
1 _A_TIMIF
1 bitNum
1 cntByte
1 cntbit
24 -- Other
379 bytes in segment BANKED_CODE
24 bytes in segment BANK_RELAYS
6 bytes in segment INTVEC
40 bytes in segment NEAR_CODE
16 bytes in segment SFR_AN
6 bytes in segment XDATA_Z
64 bytes of CODE memory (+ 6 bytes shared)
0 bytes of DATA memory (+ 16 bytes shared)
379 bytes of HUGECODE memory
6 bytes of XDATA memory
Errors: none
Warnings: none