;太阳能逐日
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
|