📄 5410ad000.asm
字号:
;--------------------------------------------------------------------
;SPI总线
;--------------------------------------------------------------------
SPCTL DATA 085H ;SPI Control Register
SPDAT DATA 086H ;SPI Data Register
;系统管理特殊功能寄存器
CLK_DIV DATA 0C7H ;CLOCK DIVDER
;I/O口特殊功能寄存器
P0M0 DATA 093H
P0M1 DATA 094H
P1M0 DATA 091H
P1M1 DATA 092H
P2M0 DATA 095H
P2M1 DATA 096H
P3M0 DATA 0B1H
P3M1 DATA 0B2H
;串行口特殊功能寄存器
SADEN DATA 0B9H ;Slave Address Mask
SADDR DATA 0A9H ;Slave Address
;看门狗定时器特殊功能寄存器
WDT_CONTR DATA 0E1H ;Watch Dog Timer Control Register
;中断特殊功能寄存器
IPH DATA 0B7H ;Interrupt Priority High
AUXR DATA 08EH ;Auxiliary Register
ADC_CONTR DATA 0C5H ;A/D转换控制寄存器
ADC_DATA DATA 0C6H ;A/D转换结果寄存器,为10位A/D转换结果的高8位
ADC_LOW2 DATA 0BEH ;A/D转换结果寄存器,低2位有效,为10位A/D转换结果的高8位
;如果不用ADC_LOW2的低2位,只用ADC_DATA的8位,则为8位A/D
SPSTAT DATA 084H ;SPI Status Register
;PCA/PWM 特殊功能寄存器,
CCON DATA 0D8H ;PCA Control Register
CCF0 DATA CCON.0 ;PCA模块0中断标志位
CCF1 DATA CCON.1 ;PCA模块1中断标志位
CCF2 DATA CCON.2 ;PCA模块2中断标志位
CCF3 DATA CCON.3 ;PCA模块3中断标志位
CR DATA CCON.6 ;PCA计数器阵列运行控制位
CF DATA CCON.7 ;PCA计数器阵列溢出标志位
CMOD DATA 0D9H ;PCA Mode Register
CCAPM0 DATA 0DAH ;PCA Mode 0 Mode Register
CCAPM1 DATA 0DBH ;PCA Mode 1 Mode Register
CCAPM2 DATA 0DCH ;PCA Mode 2 Mode Register
CCAPM3 DATA 0DDH ;PCA Mode 3 Mode Register
CL DATA 0E9H ;PCA Base Timer Low
CH DATA 0F9H ;PCA Base Timer High
CCAP0L DATA 0EAH ;PCA Module0 Capture Register Low
CCAP0H DATA 0FAH ;PCA Module0 Capture Register High
CCAP1L DATA 0EBH ;PCA Module1 Capture Register Low
CCAP1H DATA 0FBH ;PCA Module1 Capture Register High
CCAP2L DATA 0ECH ;PCA Module2 Capture Register Low
CCAP2H DATA 0FCH ;PCA Module2 Capture Register High
CCAP3L DATA 0EDH ;PCA Module3 Capture Register Low
CCAP3H DATA 0FDH ;PCA Module3 Capture Register High
PCA_PWM0 DATA 0F2H ;PCA PWM Mode Auxiliary Register 0
PCA_PWM1 DATA 0F3H ;PCA PWM Mode Auxiliary Register 1
PCA_PWM2 DATA 0F4H ;PCA PWM Mode Auxiliary Register 2
PCA_PWM3 DATA 0F5H ;PCA PWM Mode Auxiliary Register 3
;ISP/IAP特殊功能寄存器
;ISP_DATA DATA 0E2H ;SPI/IAP FLASH DATA REGISTER
;ISP_ADDRH DATA 0E3H ;SPI/IAP FLASH ADDRESS HIGHT
;ISP_ADDRL DATA 0E4H ;SPI/IAP FLASH ADDRESS LOW
;ISP_CMD DATA 0E5H ;SPI/IAP FLASH COMMAND REGISTER
;ISP_TRIG DATA 0E6H ;SPI/IAP FLASH COMMAND TRIGGER
;ISP_CONTR DATA 0E7H ;SPI/IAP CONTROL REGISTER
;WAIT_TIME EQU 0
;ISP_IAP_BYTE_READ EQU 1
;ISP_IAP_BYTE_PROGRAM EQU 2
;ISP_IAP_SECTOR_ERASE EQU 3
;AD特殊端口定义
ADC_SHURU_CHANNEL_0 EQU 0E0H ;P1.0作为A/D输入
ADC_SHURU_CHANNEL_1 EQU 0E1H ;P1.1作为A/D输入
ADC_SHURU_CHANNEL_2 EQU 0E2H ;P1.2作为A/D输入
ADC_SHURU_CHANNEL_3 EQU 0E3H ;P1.3作为A/D输入
ADC_SHURU_CHANNEL_4 EQU 0E4H ;P1.4作为A/D输入
ADC_SHURU_CHANNEL_5 EQU 0E5H ;P1.5作为A/D输入
ADC_SHURU_CHANNEL_6 EQU 0E6H ;P1.6作为A/D输入
ADC_SHURU_CHANNEL_7 EQU 0E7H ;P1.7作为A/D输入
;****************** 程 控 电 源 ********************
;********************************************************** ;6M以下为4;3M以下为5;2M以下为6;1M以下为7
ADC_CHANNEL0_GRESULT EQU 40H ;P1.0通道A/D转换高位结果
ADC_CHANNEL0_DRESULT EQU 41H ;P1.0通道A/D转换低位结果
ADC_CHANNEL1_GRESULT EQU 42H ;P1.1通道A/D转换高位结果
ADC_CHANNEL1_DRESULT EQU 43H ;P1.1通道A/D转换低位结果
ADC_CHANNEL2_GRESULT EQU 44H ;P1.2通道A/D转换高位结果
ADC_CHANNEL2_DRESULT EQU 45H ;P1.2通道A/D转换低位结果
ADC_CHANNEL3_GRESULT EQU 46H ;P1.3通道A/D转换高位结果
ADC_CHANNEL3_DRESULT EQU 47H ;P1.3通道A/D转换低位结果
ADC_CHANNEL4_GRESULT EQU 48H ;P1.4通道A/D转换高位结果
ADC_CHANNEL4_DRESULT EQU 49H ;P1.4通道A/D转换低位结果
ADC_CHANNEL5_GRESULT EQU 4AH ;P1.5通道A/D转换高位结果
ADC_CHANNEL5_DRESULT EQU 4BH ;P1.5通道A/D转换低位结果
ADC_CHANNEL6_GRESULT EQU 4CH ;P1.6通道A/D转换高位结果
ADC_CHANNEL6_DRESULT EQU 4DH ;P1.6通道A/D转换低位结果
ADC_CHANNEL7_GRESULT EQU 4EH ;P1.7通道A/D转换高位结果
ADC_CHANNEL7_DRESULT EQU 4FH ;P1.7通道A/D转换低位结果
org 0000h
ljmp start
org 0003h
reti
ORG 000BH ;定时器0中断
ljmp INTT0
org 0013h
reti
org 001bh
reti
org 0023h
ljmp seript ;SERIPT 串口
org 0100h
start: mov sp,#0c0h ;设置栈
clr psW.3
clr psW.4
mov r0,#02h ;开始清内存
clr a
mov r1,#0fdh
clrram: mov @r0,a
inc r0
djnz r1,clrram ;0区工作
mov auxr,#0c0h ;定时器0,1 为1T模式
mov clk_div,#00h ;时钟分频:00:不分,01/2,02/4,03/8,04/16,05/32,06/64,07/128
lcall init ;清内存结束,调用初始化子程序init
lcall HUNDMS3
lcall HUNDMS3
lcall HUNDMS3
lcall HUNDMS3
;***********主程序**************************
main: lcall HUNDMS3
lcall HUNDMS3
lcall HUNDMS3
lcall HUNDMS3
lcall HUNDMS3
lcall HUNDMS3
lcall HUNDMS3
lcall HUNDMS
lcall ADC_POWER_ON
lcall HUNDMS3
lcall HUNDMS3
lcall SET_P12_OPEN
lcall HUNDMS3
lcall HUNDMS3
lcall SET_ADC_CHANNEL2
lcall HUNDMS3
lcall HUNDMS3
lcall GET_ADC_RESULT
lcall HUNDMS3
lcall HUNDMS3
lcall SEND_ADC_RESULT
lcall HUNDMS3
lcall HUNDMS3
lcall SET_P12_NORMOL_IO
mainend:ljmp main
;***********初始化子程序init************************
init:
mov a,#11010000b
mov scon,a ;方式3
mov pcon,#00h ;smod=0
mov tmod,#21h ;
mov th1,#0c4h ;baud rate=19200bps
mov tl1,#0c4h ;baud rate=19200bps
mov th0,#87h
mov tl0,#0ffh
clr tr0
clr tr1
clr it0
clr it1
clr et0
clr et1
clr ri
clr ti
setb ren
setb es ;开串口中断
setb ea ;总中断
setb tr1
setb tr0
setb et0
ret
;***************串口中断**************
seript: jb ti,sendchp
Jnb ri,sendchs
push dph
push dpl
push acc
push psw
clr psw.3
setb psw.4
recive: mov a,sbuF
seript_end: clr ri
pop psw
pop acc
pop dpl
pop dph
sendchp: reti
sendchs: clr ti
reti
;***********T0中断*******************
INTT0: push dph
push dpl
push acc
push psw
setb psw.3
setb psw.4
Timcnta:
intout: pop psw
pop acc
pop dpl
pop dph
RETI
;********开ADC电源*****************
ADC_POWER_ON:
PUSH ACC
ORL ADC_CONTR,#80H
LCALL YANSHI
LCALL HUNDMS
POP ACC
RET
;***********设置P1.2为开漏**************
SET_P12_OPEN:
PUSH ACC
MOV A,#04H
ORL P1M0,A
ORL P1M1,A
POP ACC
RET
;**********设置P1.2为A/D转换通道***************
SET_ADC_CHANNEL2:
MOV ADC_CONTR,#11000010B
LCALL YANSHI
LCALL HUNDMS
RET
;********测量电压并取A/D转换结果*****************
GET_ADC_RESULT:
PUSH ACC
MOV ADC_DATA,#00
ORL ADC_CONTR,#08H
WAIT_AD:
MOV A,#10H
ANL A,ADC_CONTR
JZ WAIT_AD
ANL ADC_CONTR,#0E7H
MOV A,ADC_DATA
MOV ADC_CHANNEL2_GRESULT,A
MOV A,ADC_LOW2
MOV ADC_CHANNEL2_DRESULT,A
POP ACC
RET
;********发送转换结果*****************
SEND_ADC_RESULT:
PUSH ACC
MOV A,#55h
LCALL SWJ
MOV A,#0FFH
LCALL SWJ
MOV A,ADC_CHANNEL2_GRESULT
LCALL SWJ
MOV A,ADC_CHANNEL2_DRESULT
LCALL SWJ
POP ACC
RET
;*********设置P1.2为普通IO****************
SET_P12_NORMOL_IO:
PUSH ACC
MOV A,#0FBH
ORL P1M0,A
ORL P1M1,A
POP ACC
RET
;**********串口发送子程序(偶校验)*********
SWJ: mov c,psw.0
mov tb8,c
MOV SBUF,A
JNB TI,$
CLR TI
RET
;*********延时1ms************
yanshi: MOV R3,#15H
yan2: MOV R4,#0FFH
yan3: DJNZ R4,yan3
DJNZ R3,yan2
RET
;*********延时10ms************
HUNDMS: MOV R2,#02H
HMS1: MOV R3,#0FFH
HMS2: MOV R4,#0FFH
HMS3: DJNZ R4,HMS3
DJNZ R3,HMS2
DJNZ R2,HMS1
RET
;*********延时100ms************
HUNDMS1: MOV R2,#16H
HMSa1: MOV R3,#0ffH
HMSb1: MOV R4,#0FfH
HMSc1: DJNZ R4,HMSc1
DJNZ R3,HMSb1
DJNZ R2,HMSa1
RET
;*********延时400ms************
HUNDMS2: MOV R2,#64H
HMSa2: MOV R3,#0ffH
HMSb2: MOV R4,#0FfH
HMSc2: DJNZ R4,HMSc2
DJNZ R3,HMSb2
DJNZ R2,HMSa2
ret
;*********延时200ms************
HUNDMS3: MOV R2,#30
HMS1a3: MOV R3,#0FFH
HMS2a3: MOV R4,#0FFH
HMS3a3: DJNZ R4,HMS3a3
DJNZ R3,HMS2a3
DJNZ R2,HMS1a3
RET
;*********延时825ms************
HUNDMS4: MOV R2,#120
HMS1a4: MOV R3,#0FFH
HMS2a4: MOV R4,#0FFH
HMS3a4: DJNZ R4,HMS3a4
DJNZ R3,HMS2a4
DJNZ R2,HMS1a4
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -