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

📄 safeverfy.asm

📁 中颖单片机 69p43的一个加密及电源管理部分程序
💻 ASM
字号:
;*****************************************************
;Company :
;File Name : SafeVerfy.asm
;Author :
;Create Data : 2006-04-24
;Last Modified : 2006-04-24
;Description :
;Version : 1.0
;*****************************************************


//市电AD输入判断 PA.0
VAC_AD_COMPL	EQU    0BH	;0.9V
VAC_AD_COMPH	EQU    04H	;0.9V
VAC_AD_IN    	EQU    01H
VAC_AD_PCON	EQU    18H
VAC_AD_PORT	EQU    08H

//电池AD输入判断 PA.1
VBAT_AD_COMPL	EQU    08H	;2.4V  0A
VBAT_AD_COMPH	EQU    07H	;2.4V
VBAT_AD_IN    	EQU    02H
VBAT_AD_PCON	EQU    18H
VBAT_AD_PORT	EQU    08H

//电池充电控制输出 PB.0
CHG_OUT      	EQU    	01H
CHG_OUT_PCON   	EQU	19H
CHG_OUT_PORT   	EQU	09H

// SPI SCK时钟线控制输入 PC.3
PSCK	     	EQU	08H
PSCK_PCON    	EQU	1AH
PSCK_PORT    	EQU	0AH

// SPI PSDO数据线控制输入 PE.1
PSDO	    	EQU	02H
PSDO_PCON    	EQU	1CH
PSDO_PORT    	EQU	0CH

// SPI PSDI数据线控制输入 PE.2
PSDI	    	EQU	04H
PSDI_PCON    	EQU	1DH
PSDI_PORT    	EQU	0CH




//5个通用寄存器
GEN_REG1  EQU   30H			
GEN_REG2  EQU   31H	
GEN_REG3  EQU   32H
GEN_REG4  EQU   33H
GEN_REG5  EQU   34H

//市电输入AD缓存寄存器
VAC_AD_TEMPL	EQU	36H
VAC_AD_TEMPH	EQU	37H
//电池输入AD缓存寄存器
VBAT_AD_TEMPL	EQU	38H
VBAT_AD_TEMPH	EQU	39H
// 状态寄存器
STATUS_REG	EQU	3AH

READ_DATA_VALUE_TEMP  EQU 3BH    //读取数值缓存区
WRITE_REG_TEMP  EQU     3CH

READ_DATA_COUNT	EQU  	40H  //读取数值位次数
SPI_BYTE_ONE_H	EQU	41H  //读取数值高
SPI_BYTE_ONE_L	EQU 	42H  //读取数值低
SPI_BYTE_TWO_H  EQU	43H
SPI_BYTE_TWO_L  EQU	44H
SPI_BYTE_THREE_H EQU	45H
SPI_BYTE_THREE_L EQU	46H

WRITE_BYTE_ONE_H  EQU 	47H
WRITE_BYTE_ONE_L  EQU	48H
WRITE_BYTE_TWO_H  EQU	49H
WRITE_BYTE_TWO_L  EQU	4AH
WRITE_BYTE_THREE_H  EQU	4BH
WRITE_BYTE_THREE_L  EQU 4CH





	ORG	0000H
	
	JMP	START		;START PROGRAM		
	RTNI		        ;AD 中断返回
	RTNI
	//JMP	SCK_SERVER	;T0 中断
	RTNI			;T1 中断
	RTNI			;EX 中断
	



	;**** START PROGRAM ***
START: 
	CALL INITMCU		;初始化单片机寄存器,中断等
	CALL INITREG		;初始化寄存器
      ;********** 主程序 *****************
  MAIN:
	CALL AD_INPUT
	CALL CHARGE_SET
	CALL DELAY
	CALL DELAY
	

  
  JMP MAIN      

/////////////////////////////////////////////////
// 初始化寄存器
INITREG:
	LDI	GEN_REG1,0H 
	LDI	GEN_REG2,0H
	LDI	GEN_REG3,0H
	LDI	VAC_AD_TEMPL,0H
	LDI	VAC_AD_TEMPH,0H
	LDI	VBAT_AD_TEMPL,0H
	LDI	VBAT_AD_TEMPH,0H
	LDI	STATUS_REG,0H
	//LDI 	T0CON,0010B ;定时器时钟源为外部时钟,
	RTNI
/////////////////////////////////////////////////	
	
/////////////////////////////////////////////////////////////////
//检测市电 电池电压 AD转换输入
AD_INPUT:
  // AD 市电 输入
	LDI ADCH,1000B
	NOP
	LDI ADCON,1001B	
	NOP
   WAIT_LOOP:
        NOP
        LDA ADCON
        BA3 WAIT_LOOP
        NOP
        NOP
        LDA ADRESH ;A/D 转换完成,存储转换结果。
	STA VAC_AD_TEMPH
	LDA ADRESL
	STA VAC_AD_TEMPL
	NOP
   // AD 电池 输入     
	LDI ADCH,1001B
	NOP
	LDI ADCON,1001B	
	NOP
   WAIT_LOOP2:
        NOP
        LDA ADCON
        BA3 WAIT_LOOP2
        NOP
        NOP
        LDA ADRESH ;A/D 转换完成,存储转换结果。
	STA VBAT_AD_TEMPH
	LDA ADRESL
	STA VBAT_AD_TEMPL
	NOP
	RTNI	
////////////////////////////////////////////////////////////	


// 充电处理
CHARGE_SET:
       // 检测市电电压      
       SBI  VAC_AD_TEMPH,VAC_AD_COMPH
       BC   SET_VAC_FLAG   ;存在市电
       BAZ  COMP_VACL 
       JMP  CLR_VAC_FLAG   ;不存在市电情况处理
       
       COMP_VACL:
        SBI VAC_AD_TEMPL,VAC_AD_COMPL
        BC  SET_VAC_FLAG   ;存在市电
        JMP CLR_VAC_FLAG   ;不存在市电情况处理
       
       SET_VAC_FLAG:   ;存在市电 
        ORIM  STATUS_REG,01H     ;存在市电则置市电标志位
        ORIM  PSDO_PORT,02H      ;若存在市电则将该管脚置高
        JMP  VBAT_CHECK		 ;检测电池电压
        
       CLR_VAC_FLAG:   ;不存在市电情况处理 
        ANDIM  STATUS_REG,0EH     ;不存在市电则清除市电标志位
        ANDIM  PSDO_PORT,0DH      ;若不存在市电则将该管脚置低
        JMP  VBAT_CHECK		 ;检测电池电压
      
       //检测电池电压 
    VBAT_CHECK:		  
       SBI  VBAT_AD_TEMPH, VBAT_AD_COMPH ;VBAT_AD_COMPH
       BC   SET_VBAT_FLAG   ;电池充满
       BAZ  COMP_VBATL 	    ;比较电池电压低位
       JMP  CLR_VBAT_FLAG   ;电池电量不够
       
       COMP_VBATL:	;比较电池电压低位
        SBI VBAT_AD_TEMPL,VBAT_AD_COMPL
        BC  SET_VBAT_FLAG   ;电池充满
        JMP CLR_VBAT_FLAG   ;电池电量不够
       
       SET_VBAT_FLAG:	    ;电池充满
        ORIM  STATUS_REG,02H     ;存在市电则置市电标志位
        JMP  CHARGE_CTRL	 ;检测电池电压
        
       CLR_VBAT_FLAG:   ;电池电量不够
        ANDIM  STATUS_REG,0DH     ;不存在市电则清除市电标志位
        JMP  CHARGE_CTRL		 ;检测电池电压   
       
       CHARGE_CTRL:
        LDI  GEN_REG1,01H
        EOR  STATUS_REG,0H
        BAZ  $+3
        LDI  CHG_OUT_PORT,0H	 ;关闭充电
        JMP  $+2
        LDI  CHG_OUT_PORT,0FH	 ;充电
        RTNI
           
       
       

;=============================================================
;延时子程序(5ms)
DELAY:  
	 LDI   GEN_REG2,0
         LDI   GEN_REG3,0
   DELAY2:  
         NOP				;
         NOP
         NOP
         NOP
         NOP
         ADIM  GEN_REG3,1
         LDI   GEN_REG1,0
         ADCM  GEN_REG2
         BC    $+2
         JMP   DELAY2
         RTNI
  
;=============================================================

	  



  
INCLUDE  INIT_43.ASM
INCLUDE  SYS_43.ASM
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -