打印
[STC单片机]

汇编写的STC15F2K60S2程序编译出现段超过极限,求帮助

[复制链接]
1437|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子超新星|  楼主 | 2016-12-20 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
电子超新星|  楼主 | 2016-12-20 11:30 | 只看该作者

;太阳能逐日
START:
;****************************************************
;*                  常数及变量定义                  *
;****************************************************
                $MOD51
                P4      EQU     0C0H    ;P4口地址
                P5      EQU     0C8H    ;P5口地址
                P6      EQU     0E8H    ;P6口地址
                P7      EQU     0F8H    ;P7口地址
                AUXR1   EQU     0A2H    ;DPTR指针
;       7       6       5       4       3       2       1       0  
;AUXR1  S1_S1   S1_S0   CCP_S1  CCP_S0  SPI_S1  SPI_S0  0       DPS
   
                P_SW2   EQU     0BAH    ;串口切换
;       7       6       5       4       3       2       1       0  
;P_SW2                  PWM67_S PWM2-5_S        S4_S    S3_S    S2_S
;S1_S1  S1_S0
;0      0       串口1在P3.0和P3.1
;0      1       串口1在P3.6和P3.7
;1      0       串口1在P1.6和P1.7
;1      1       无效

                AUXR    EQU     08EH    ;定时2控制
;       7       6       5       4       3       2       1       0  
;AUXR   T0X12   T1X12   UART_MX6T2R     T2_C/T  T2X12   EXTRAM  S1ST2
;                               允许T2  0定时

                T4T3M   EQU     0D1H    ;定时43控制
;       7       6       5       4       3       2       1       0  
;T4T3M  T4R     T4_C/T  T4X12   T4CLKO  T3R     T3_C/T  T3X12   T3CLK
;       允许T4  0定时   0:12分频        允许T4  0定时   0:12分频

                TH4     EQU     0D2H    ;TH4
                TL4     EQU     0D3H    ;TL4
                TH3     EQU     0D4H    ;TH3
                TL3     EQU     0D5H    ;TL3
                TH2     EQU     0D6H    ;TH2
                TL2     EQU     0D7H    ;TL2
                IE2     EQU     0AFH    ;中断允许
;       7       6       5       4       3       2       1       0  
;IE2            ET4     ET3     ES4     ES3     ET2     ESPI    ES2
;               允许T4  允许T3  允许S4  允许S3  允许T2  允许SPI 允许S2

                IAPDATA EQU     0C2H    ;EEPROM数据         
                IAPADDH EQU     0C3H    ;EEPROM地址高字节      
                IAPADDL EQU     0C4H    ;EEPROM地址低字节   
                IAPCMD  EQU     0C5H    ;EEPROM模式         
                IAPTRIG EQU     0C6H    ;EEPROM触发         
                IAPCON  EQU     0C7H    ;EEPROM命令         
                  
                SPCTL   EQU     0CEH    ;SPI控制寄存器
;       7       6       5       4       3       2       1       0   
;SPCTL  SSIG    SPEN    DORD    MSTR    CPOL    CPHA    SPR1    SPR0
;       1       1       0       1       0       0       0       0
                SPSTAR  EQU     0CDH    ;SPI状态寄存器
;       7       6       5       4       3       2       1       0   
;SPSTAR SPIF    WCOL
                SPDAT   EQU     0CFH    ;SPI数据寄存器
               
                WREN    EQU     06H     ;SPI写允许命令
                WRDI    EQU     04H     ;SPI写禁止命令
                RDSR    EQU     05H     ;SPI读状态命令
                WRSR    EQU     06H     ;SPI写状态命令
                SREAD   EQU     03H     ;SPI读数据命令
                SWRIT   EQU     02H     ;SPI写数据命令
;端口设置      
;P*M1   P*M0
; 0      0      准双向口I/O
; 0      1      推挽输出OUT
; 1      0      高阻输入IN
; 1      1      开漏双向口OPEN
                P0M1    EQU     093H    ;P0设置1
                P0M0    EQU     094H    ;P0设置0
                DP0M1   EQU     000H
                DP0M0   EQU     000H
;       7       6       5       4       3       2       1       0  
;P0     NO      NO      NO      NO      NO      NO      NO      NO
;P0M1   0       0       0       0       0       0       0       0       000H
;P0M0   0       0       0       0       0       0       0       0       000H
                P1M1    EQU     091H    ;P1设置1
                P1M0    EQU     092H    ;P1设置0
                DP1M1   EQU     000H
                DP1M0   EQU     000H
;       7       6       5       4       3       2       1       0  
;P1     IN      IN      IN      IN      IN      IN      IN      IN
;P1M1   1       1       1       1       1       1       1       1       0FFH
;P1M0   0       0       0       0       0       0       0       0       000H
                P2M1    EQU     095H    ;P2设置1
                P2M0    EQU     096H    ;P2设置0
                DP2M1   EQU     000H
                DP2M0   EQU     000H
;       7       6       5       4       3       2       1       0  
;P2     NO      NO      NO      NO      NO      NO      NO      NO
;P2M1   0       0       0       0       0       0       0       0       000H
;P2M0   0       0       0       0       0       0       0       0       080H
                P3M1    EQU     0B1H    ;P3设置1
                P3M0    EQU     0B2H    ;P3设置0
                DP3M1   EQU     000H
                DP3M0   EQU     080H
;       7       6       5       4       3       2       1       0  
;P3     NO      NO      NO      NO      NO      NO      NO      NO
;P3M1   0       0       0       0       0       0       0       0       000H
;P3M0   1       0       0       0       0       0       0       0       080H
                P4M1    EQU     0B3H    ;P4设置1
                P4M0    EQU     0B4H    ;P4设置0
                DP4M1   EQU     000H
                DP4M0   EQU     002H
;       7       6       5       4       3       2       1       0  
;P0     NO      NO      NO      NO      NO      NO      NO      NO
;P4M1   0       0       0       0       0       0       0       0       000H
;P4M0   0       0       0       0       0       0       1       0       002H
                P5M1    EQU     0C9H    ;P5设置1
                P5M0    EQU     0CAH    ;P5设置0
                DP5M1   EQU     000H
                DP5M0   EQU     000H
;       7       6       5       4       3       2       1       0  
;P0     NO      NO      NO      NO      NO      NO      NO      NO
;P5M1   0       0       0       0       0       0       0       0       000H
;P5M0   0       0       0       0       0       0       0       0       000H
                P6M1    EQU     0CBH    ;P6设置1
                P6M0    EQU     0CCH    ;P6设置0
                P7M1    EQU     0E1H    ;P7设置1
                P7M0    EQU     0E2H    ;P7设置0
               
                P1ASF   EQU     09DH    ;P1模拟功能控制
                DP1ASF  EQU     00FH
;       7       6       5       4       3       2       1       0                     
;       P17ASF  P16ASF  P15ASF  P14ASF  P13ASF  P12ASF  P11ASF  P10ASF
;       0       0       0       0       1       1       1       1
                ADCCON  EQU     0BCH    ;ADC控制
                DADCCON EQU     088H
;       7       6       5       4       3       2       1       0                     
;       ADC_POW SPEAD1  SPEAD0  ADC_** ADC_STR CHS2    CHS1    CHS0
;       1       0       0       0       1       0       0       0
                ADCRES  EQU     0BDH    ;ADC转换结果
                ADCRESL EQU     0BEH    ;ADC转换结果低字节
                PCON2   EQU     097H    ;PCON2
                DPCON2  EQU     000H
;       7       6       5       4       3       2       1       0                     
;       MCKO_S1 MCKO_S0 ADJR    TX_RX   MCKO_2  CLKS2   CLKS1   CLKS0
;       0       0       0       0       0       0       0       0

                ADIN0   BIT     P1.0    ;AD输入0
                ADIN1   BIT     P1.1    ;AD输入1
                ADIN2   BIT     P1.2    ;AD输入2
                ADIN3   BIT     P1.3    ;AD输入3

                SCXZ    BIT     P3.7    ;输出Y轴
                SCYZ    BIT     P4.1    ;输出X轴
               
                DDSJ    EQU     0A5H

                BSEG
                ORG     00H
                ;20H

                DSEG               
                ORG     08H
                BCD3:   DS      1       ;BCD码3
                BCD2:   DS      1       ;BCD码2
                BCD1:   DS      1       ;BCD码1
                BCD0:   DS      1       ;BCD码0  
                HEX3:   DS      1       ;HEX码3
                HEX2:   DS      1       ;HEX码2
                HEX1:   DS      1       ;HEX码1
                HEX0:   DS      1       ;HEX码0

                BCN3:   DS      1       ;被乘数3
                BCN2:   DS      1       ;被乘数2
                BCN1:   DS      1       ;被乘数1
                BCN0:   DS      1       ;被乘数0
                CEN3:   DS      1       ;乘数3
                CEN2:   DS      1       ;乘数2
                CEN1:   DS      1       ;乘数1
                CEN0:   DS      1       ;乘数0
               
                CNJ7:   DS      1       ;乘积7
                CNJ6:   DS      1       ;乘积6
                CNJ5:   DS      1       ;乘积5
                CNJ4:   DS      1       ;乘积4
                CNJ3:   DS      1       ;乘积3
                CNJ2:   DS      1       ;乘积2
                CNJ1:   DS      1       ;乘积1
                CNJ0:   DS      1       ;乘积0

                BCU7    EQU     CNJ7    ;被除数7
                BCU6    EQU     CNJ6    ;被除数6
                BCU5    EQU     CNJ5    ;被除数5
                BCU4    EQU     CNJ4    ;被除数4
                BCU3    EQU     CNJ3    ;被除数3
                BCU2    EQU     CNJ2    ;被除数2
                BCU1    EQU     CNJ1    ;被除数1
                BCU0    EQU     CNJ0    ;被除数0
                CHU3    EQU     CEN3    ;除数3
                CHU2    EQU     CEN2    ;除数2
                CHU1    EQU     CEN1    ;除数1
                CHU0    EQU     CEN0    ;除数0
                CUS3    EQU     BCN3    ;除商3
                CUS2    EQU     BCN2    ;除商2
                CUS1    EQU     BCN1    ;除商1
                CUS0    EQU     BCN0    ;除商0
               
                BSEG
                ORG     20H
                SCBZX:  DBIT    1       ;输出标志X
                SCBZY:  DBIT    1       ;输出标志Y

                DSEG               
                ORG     30H
                TH2D:   DS      1       ;TH2数据
                TL2D:   DS      1       ;TL2数据
                TH3D:   DS      1       ;TH3数据
                TL3D:   DS      1       ;TL3数据
                ADCCOND:DS      1       ;ADCCON数据
                ADSJH:  DS      1       ;AD数据H
                ADSJL:  DS      1       ;AD数据L
                ADSJ:   DS      4       ;AD数据
               
               
                GRBZA:  DS      1       ;干扰标志A
                LSSJ:   DS      4
                SPCZ:   DS      1       ;SP初值
               
                ORG     80H             ;80-FFH RAM
                GRBZB:  DS      1       ;干扰标志B

                ORG     0000H
;****************************************************
;*                     程序入口                     *
;****************************************************
                CSEG
                ORG     0000H
                LJMP    ZCX
                ORG     0003H
               ;LJMP    WBZD0           ;外部中断0
                RETI
                ORG     000BH
                MOV     TH0,#0F7H
               ;LJMP    DSZD0           ;定时中断0
                RETI
                ORG     0013H           ;外部中断1
                RETI
                ORG     001BH           ;定时中断1
               ;LJMP    DSZD1
                RETI
                ORG     0023H           ;通信中断1
               ;LJMP    TXZD
                RETI
                ORG     002BH           ;AD转换中断
                RETI
                ORG     0033H           ;低电压中断
                RETI
                ORG     003BH           ;捕捉中断
                RETI
                ORG     0043H           ;通信中断2
                RETI
                ORG     004BH           ;SPI中断
                RETI
                ORG     0053H           ;外部中断2
                RETI
                ORG     005BH           ;外部中断3
                RETI
                ORG     0063H           ;定时中断2
                LJMP    DSZD2
                RETI
                ORG     0083H           ;外部中断4
                RETI
                ORG     008BH           ;通信中断3
                RETI
                ORG     0093H           ;通信中断4
                RETI
                ORG     009BH           ;定时中断3
                LJMP    DSZD3
                RETI
                ORG     00A3H           ;定时中断4
                RETI
                ORG     00ABH           ;比较中断
                RETI
                ORG     00B3H           ;PWM中断
                RETI
                ORG     00BBH           ;PWM异常中断
                RETI
;****************************************************
;*                      主程序                      *
;****************************************************
ZCX:            CLR     EA
                MOV     P0,#0FFH  
                MOV     P1,#0FFH
                MOV     P2,#0FFH
                MOV     P3,#07FH
                MOV     P4,#0FDH
                MOV     P5,#0FFH
                MOV     P0M0,#DP0M0
                MOV     P0M1,#DP0M1
                MOV     P1M0,#DP1M0
                MOV     P1M1,#DP1M1
                MOV     P2M0,#DP2M0
                MOV     P2M1,#DP2M1
                MOV     P3M0,#DP3M0
                MOV     P3M1,#DP3M1
                MOV     P4M0,#DP4M0
                MOV     P4M1,#DP4M1
                MOV     P5M0,#DP5M0
                MOV     P5M1,#DP5M1
                MOV     P1ASF,#DP1ASF
                MOV     PCON2,#DPCON2
               
                MOV     SP,#SPCZ
                MOV     R0,#08H
                MOV     R7,#SPCZ-8
QL:             MOV     @R0,#00H
                INC     R0
                DJNZ    R7,QL           ;08H-SPCZ存储器清零
                MOV     R0,#80H
                MOV     R7,#70H
QL1:            MOV     @R0,#00H
                INC     R0
                DJNZ    R7,QL1          ;80H-0FFH存储器清零
                MOV     R6,#0FH
                MOV     R7,#00H
                MOV     DPTR,#0000H
                MOV     A,#00H
QL2:            MOVX    @DPTR,A
                INC     DPTR
                DJNZ    R7,QL2
                DJNZ    R6,QL2          ;0000H-0EFFH存储器清零
                LCALL   CXCSH           ;程序初始化
ZCX1:           LCALL   ADCJ            ;AD采集
                CPL     P0.7
                LCALL   KZCLX           ;控制处理X
                LCALL   KZCLY           ;控制处理Y
                ORL     0C1H,#10H               
                MOV     A,GRBZA
ZCX4:           CJNE    A,#DDSJ,ZCX4
ZCX5:           MOV     R0,#GRBZB
                MOV     A,@R0
                CJNE    A,#DDSJ,ZCX5
ZCX6:           LJMP    ZCX1               
;****************************************************
;*                    程序初始化                    *
;****************************************************
CXCSH:          MOV     TH2D,#0FAH      ;定时1.5mS
                MOV     TL2D,#9AH
                MOV     TH3D,#0FAH      ;定时1.5mS
                MOV     TL3D,#9AH
;0.5mS:TH:FEH,TL:34H;1.5mS:TH:FAH,TL:9AH;2.5mS:TH:F7H,TL:00H;
                MOV     AUXR,#00H       ;允许定时2
                MOV     AUXR1,#80H      ;串口1在P1.6和P1.7
               ;MOV     P_SW2,#00H      ;串口切换
               ;MOV     TH0,#0F7H       ;定时2.5mS
               ;MOV     TL0,#00H
               ;MOV     TH1,#0FDH       ;波特率9600
               ;MOV     TL1,#0FDH
                MOV     TMOD,#21H       ;专用存储器初始化
               ;MOV     PCON,#00H
               ;MOV     SCON,#050H
                MOV     IE,#080H        ;允许中断
                MOV     0C1H,#24H
               ;SETB    TR0             ;启动定时器
               ;SETB    TR1             ;启动定时器1
                MOV     TH2,TH2D        ;定时1.5mS
                MOV     TL2,TL2D
                MOV     TH3,TH3D        ;定时1.5mS
                MOV     TL3,TL3D
                MOV     IE2,#24H        ;允许定时23中断
                SETB    SCXZ
                SETB    SCYZ
                MOV     AUXR,#10H       ;允许定时2
                MOV     T4T3M,#08H      ;允许定时3
                MOV     GRBZA,#DDSJ
                MOV     R0,#GRBZB
                MOV     @R0,#DDSJ
                RET
;****************************************************
;*                     AD采集                       *
;****************************************************
ADCJ:           MOV     ADCCOND,#00H
                MOV     R0,#ADSJ
                MOV     R7,#4
ADCJ4:          MOV     ADSJH,#00H
                MOV     ADSJL,#00H
                MOV     R6,#16
ADCJ2:          MOV     A,ADCCOND
                ORL     A,#DADCCON
                MOV     ADCCON,A
ADCJ1:          MOV     A,ADCCON
                JNB     ACC.4,ADCJ1
                MOV     A,ADCRES
                ADD     A,ADSJL
                MOV     ADSJL,A
                MOV     A,#00H
                ADDC    A,ADSJH
                MOV     ADSJH,A
                DJNZ    R6,ADCJ2
                MOV     R6,#4
ADCJ3:          CLR     C
                MOV     A,ADSJH
                RRC     A
                MOV     ADSJH,A
                MOV     A,ADSJL
                RRC     A
                MOV     ADSJL,A
                DJNZ    R6,ADCJ3
                MOV     @R0,A
                INC     ADCCOND
                INC     R0
                DJNZ    R7,ADCJ4
                RET
;****************************************************
;*                     控制处理X                    *
;****************************************************
KZCLX:          MOV     A,ADSJ+0
                CLR     C
                SUBB    A,ADSJ+1
                JNC     KZCLX1
                MOV     B,A
                MOV     A,#00H
                CLR     C
                SUBB    A,B
                CLR     C
                SUBB    A,#2
                JC      KZCLX2
                CLR     C
                MOV     A,TL2D
                SUBB    A,#034H
                MOV     A,TH2D
                SUBB    A,#0FEH
                JNC     KZCLX2
                CLR     EA
                MOV     A,TL2D
                ADD     A,#1
                MOV     TL2D,A
                MOV     A,TH2D
                ADDC    A,#0
                MOV     TH2D,A
                SETB    EA
KZCLX2:         RET
KZCLX1:         SUBB    A,#2
                JC      KZCLX2
                CLR     C
                MOV     A,#00H
                SUBB    A,TL2D
                MOV     A,#0F7H
                SUBB    A,TH2D
                JNC     KZCLX2
                CLR     EA
                CLR     C
                MOV     A,TL2D
                SUBB    A,#1
                MOV     TL2D,A
                MOV     A,TH2D
                SUBB    A,#00H
                MOV     TH2D,A
                SETB    EA
                RET

使用特权

评论回复
板凳
电子超新星|  楼主 | 2016-12-20 11:31 | 只看该作者
;****************************************************
;*                     控制处理Y                    *
;****************************************************
KZCLY:          MOV     A,ADSJ+2
                CLR     C
                SUBB    A,ADSJ+3
                JNC     KZCLY1
                MOV     B,A
                MOV     A,#00H
                CLR     C
                SUBB    A,B
                CLR     C
                SUBB    A,#2
                JC      KZCLY2
                CLR     C
                MOV     A,TL3D
                SUBB    A,#034H
                MOV     A,TH3D
                SUBB    A,#0FEH
                JNC     KZCLY2
                CLR     EA
                MOV     A,TL3D
                ADD     A,#1
                MOV     TL3D,A
                MOV     A,TH3D
                ADDC    A,#0
                MOV     TH3D,A
                SETB    EA
KZCLY2:         RET
KZCLY1:         SUBB    A,#2
                JC      KZCLY2
                CLR     C
                MOV     A,#00H
                SUBB    A,TL3D
                MOV     A,#0F7H
                SUBB    A,TH3D
                JNC     KZCLY2
                CLR     EA
                CLR     C
                MOV     A,TL3D
                SUBB    A,#1
                MOV     TL3D,A
                MOV     A,TH3D
                SUBB    A,#00H
                MOV     TH3D,A
                SETB    EA
                RET
;****************************************************
;*                     定时中断2                    *
;****************************************************
DSZD2:          PUSH    ACC
                PUSH    PSW
                MOV     AUXR,#00H
                JB      SCXZ,DSZD21
                SETB    SCXZ
                MOV     TH2,TH2D
                MOV     TL2,TL2D
                LJMP    DSZD22      
DSZD21:         CLR     SCXZ
                CLR     C
                MOV     A,#00H
                SUBB    A,TL2D
                MOV     TL2,A
                MOV     A,#0B8H
                SUBB    A,TH2D
                MOV     TH2,A
                SETB    SCBZX
DSZD22:         MOV     AUXR,#10H       ;允许定时2
                POP     PSW
                POP     ACC
                RETI
;****************************************************
;*                     定时中断3                    *
;****************************************************
DSZD3:          PUSH    ACC
                PUSH    PSW
                MOV     T4T3M,#00H
                JB      SCYZ,DSZD31
                SETB    SCYZ
                MOV     TH3,TH3D
                MOV     TL3,TL3D
                LJMP    DSZD32      
DSZD31:         CLR     SCYZ
                CLR     C
                MOV     A,#00H
                SUBB    A,TL3D
                MOV     TL3,A
                MOV     A,#0B8H
                SUBB    A,TH3D
                MOV     TH3,A
                SETB    SCBZY
DSZD32:         MOV     T4T3M,#08H      ;允许定时3
                POP     PSW
                POP     ACC
                RETI
;****************************************************
;*                       结束                       *
;****************************************************
                END


错误提示:TYNZR.ASM(228): error A29: SEGMENT LIMIT EXCEEDED

使用特权

评论回复
地板
电子超新星|  楼主 | 2016-12-20 11:34 | 只看该作者
                ORG     80H             ;80-FFH RAM
问题就是这段话

使用特权

评论回复
5
jlhgold| | 2016-12-20 13:04 | 只看该作者
你换个型号,容量大一点的编译就好了

使用特权

评论回复
6
电子超新星|  楼主 | 2016-12-20 16:12 | 只看该作者
jlhgold 发表于 2016-12-20 13:04
你换个型号,容量大一点的编译就好了

好的,我试试

使用特权

评论回复
7
资深技术| | 2016-12-21 09:44 | 只看该作者
定义地址重叠了,需要修改ORG xxH的值,预留出合适的字节。

使用特权

评论回复
8
电子超新星|  楼主 | 2016-12-21 10:32 | 只看该作者
资深技术 发表于 2016-12-21 09:44
定义地址重叠了,需要修改ORG xxH的值,预留出合适的字节。

您好,能说的详细一点吗?

使用特权

评论回复
9
资深技术| | 2016-12-22 09:34 | 只看该作者
本帖最后由 资深技术 于 2016-12-22 09:36 编辑

STC15F2K60S2 单片有80h的RAM区,不用换大容量芯片。
80h区有两部分,一个是特殊功能寄存器区,还有一个是RAM区,这两个区地址重叠,要用不同的指令读写。
STC15F2K60S2 有较大的RAM区,不妨改用其他空间试试。
还有看看keil是不是设成51了,没有80h区可用

使用特权

评论回复
10
电子超新星|  楼主 | 2016-12-22 10:34 | 只看该作者
资深技术 发表于 2016-12-22 09:34
STC15F2K60S2 单片有80h的RAM区,不用换大容量芯片。
80h区有两部分,一个是特殊功能寄存器区,还有一个是R ...

应该是设置为51了,但是不知道怎么改。。

使用特权

评论回复
11
资深技术| | 2016-12-22 11:31 | 只看该作者
STC 官网有个说明,文档名字忘了,找找看。要有耐心哦,那个网页看着有点晕。

使用特权

评论回复
12
电子超新星|  楼主 | 2016-12-22 13:55 | 只看该作者
资深技术 发表于 2016-12-22 11:31
STC 官网有个说明,文档名字忘了,找找看。要有耐心哦,那个网页看着有点晕。 ...

好的,谢谢指导

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

52

帖子

0

粉丝