⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5410ad000.asm

📁 太阳能电池转换控制程序!用汇编语言编写!实用!
💻 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 + -