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

📄 ada682.asm

📁 24V逆变AC220电源,采用SPWM双脉宽调制方法实现正弦波的输出.
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;***********************************************************
;   MCU:EM78P418NP   OSC:4M(内置RC)   2个时钟,2个周期 
;   作者:chenxiongbin                          
;   日期: 
;     开始:2006-10-8
;    结束:2006-11-2 
;   型号:ADA682 
;***********************************************************
;*****************特殊功能寄存器定义************************
           IOC50     EQU    0X05   ;端口5寄存器(0段寄存器)
           IOC60     EQU    0X06   ;端口6寄存器 
           IOC70     EQU    0X07   ;端口7寄存器 
           IOC80     EQU    0X08   ;PWM控制寄存器 
           IOC90     EQU    0X09   ;定时器控制寄存器 
           IOCA0     EQU    0X0A   ;比较器控制寄存器 
           IOCB0     EQU    0X0B   ;端口6的下拉控制寄存器 
           IOCC0     EQU    0X0C   ;端口5漏极开路控制寄存器 
           IOCD0     EQU    0X0D   ;上拉控制寄存器 
           IOCE0     EQU    0X0E   ;WDT控制寄存器     
           IOCF0     EQU    0X0F   ;中断屏蔽寄存器       
           IOC51     EQU    0X05   ;PWM1的周期PRD1(1段寄存器)
           IOC61     EQU    0X06   ;PWM2的周期PRD2
           IOC71     EQU    0X07   ;PWM3的周期PRD3
;******************操作寄存器定义***************************
           IAR       EQU    0X00   ;间接寻址寄存器 
           TCC       EQU    0X01   ;时钟/计数器  
           STATUS    EQU    0X03   ;状态寄存器 
            RSR      EQU    0X04   ;存储区选择寄存器 
           PORT5     EQU    0X05   ;端口5
           PORT6     EQU    0X06   ;端口6
           PORT7     EQU    0X07   ;端口7
           ADISR     EQU    0X08   ;ADC输出选择寄存器 
           ADCON     EQU    0X09   ;A/D控制寄存器 
           ADRUN     EQU    4      ;ADC开始运行位,1为一个A/D转换开始、0为转换的复位完成 
           ADC_H     EQU    0X0C   ;A/D转换值 
           ADC_L     EQU    0X0D   ;A/D转换值 
           IMR       EQU    0X0F   ;中断标志寄存器     
           STORE_A   EQU    0X10   ;存累加器ACC内容 
       STORE_STATUS  EQU    0X11   ;存STATUS内容 
          TIME1      EQU    0X12   ;12.5MS计数寄存器(定时器变量寄存器) 
          TIME2      EQU    0X13   ;秒计数寄存器 
          TIME3      EQU    0X14   ;分计数寄存器 
          TIME4      EQU    0X15   ;小时计数寄存器 
          JZDY_L     EQU    0X16   ;预热5分钟测得的电压作为基准电压 
          JZDY_H     EQU    0X17
          CKDY_L     EQU    0X18   ;每隔0.5V为一个电压比较数据寄存器 
          CKDY_H     EQU    0X19
          FMQ1       EQU    0X1A
          FMQ2       EQU    0X1B
          DSCS       EQU    0X1C   ;定时参数变量寄存器 
          FSCS       EQU    0X1D   ;风速选择参数寄存器 
          CNT1       EQU    0X1E
          CNT2       EQU    0X1F
          CNT3       EQU    0X20
          CNT4       EQU    0X21
          DEL1       EQU    0X22   ;延时变量寄存器 
          DEL2       EQU    0X23
          DEL3       EQU    0X24
          HWX1       EQU    0X25   ;遥控信号码寄存器 
          HWX2       EQU    0X26
          HWX3       EQU    0X27
          KJTM       EQU    0X28
          AUTO_30S   EQU    0X29
          ZTBZ1      EQU    0X2D   ;状态标志位 
          ZTBZ2      EQU    0X2E
;***********************************************************
;              主程序 
;***********************************************************
             ORG  0X000
             JMP  MAIN             ;转主程序  
             NOP
             NOP
             NOP
             NOP
             NOP
             NOP
             NOP
             ORG  0X008
             JMP  ZDFWCX           ;转中断服务程序  
        MAIN:DISI                  ;关中断 
             BC   STATUS,7         ;选择0段控制寄存器(IOC50~IOCF0)
             BC   STATUS,6         ;选择第一页程序存储页(000-3FF)
             BC   STATUS,5
             BC   RSR,7            ;选择存储区 
             BC   RSR,6
             MOV  A,@0X10          ;通用寄存器从0X10开始,到0X3F结束,0X00到0X0F为特殊功能寄存器 
             MOV  RSR,A
        CSH0:CLR  IAR
             INC  RSR
             MOV  A,RSR
             AND  A,@0X3F
             XOR  A,@0X3F
             JBS  STATUS,2
             JMP  CSH0
             MOV A,@0X81
             IOW IOC50
             MOV A,@0X0B
             IOW IOC60
             MOV  A,@0X0FF         ;禁止PORT6口内部上拉 
             IOW  IOCD0
             MOV  A,@0X02          ;选择P61为模拟输入口 
             MOV  ADISR,A
             MOV  A,@0X01          ;模拟输入选择P61,ADC中VREF与VDD相连 
             MOV  ADCON,A
             MOV A,@0X01
             IOW IOC70
             MOV  A,@0X19          ;允许PWM1IE中断、ADIE中断、EXIE中断、ICIE中断、TCIE中断 
             IOW  IOCF0
             MOV  A,@0X3C          ;允许看门狗计时,WDT比率为1:256,P50口为外部中断输入引脚 
             IOW  IOCE0          
             MOV  A,@0X0F          ;开启TMR1定时,分频比为1:256
             IOW  IOC80
             MOV  A,@0X3F          ;关闭定时器TMR2、TMR3
             IOW  IOC90
             MOV  A,@0X4F          ;INT引脚信号由下降沿引起中断,TCC由低到高变化时加1,TCC比率设置为1:256
             CONTW 
             BS  PORT6,6           ;粉尘器开关为关状态 
             CLR FSCS
             CLR DSCS              ;清定时变量寄存器 
             CLR ZTBZ1             ;清各状态标志位 
             CLR ZTBZ2             ;定时参数变量赋初值(即刚开机不进行定时设置)            
             CLR AUTO_30S
             BC  PORT5,5           ;电机刚开始不工作 
             BC  PORT6,2
             BC  PORT6,4
             BC  PORT6,5           ;负离子灯及发生器为关状态 
             BS  ZTBZ1,2           ;蜂鸣器标志位 
             MOV A,@0X3C           ;装载TCC计数初值 
             MOV TCC,A
             ENI                   ;开中断 
      MAIN_1:WDTC                  ;清看门狗 
             CALL LED_GZ           ;调用指示灯显示程序 
             CALL GZMS             ;调用按键扫描控制程序 
             JBS  ZTBZ2,5
             JMP  MAIN_2
             MOV  A,TIME2
             XOR  A,@0X02
             JBS  STATUS,2
             JMP  MAIN_2
             BC   ZTBZ2,5
             CALL ZS_L
             MOV  A,@0X02
             MOV  FSCS,A
      MAIN_2:MOV A,DSCS
             XOR A,@0X0
             JBC STATUS,2
             CLR TIME4             ;清小时变量递增寄存器(没有定时一定要清0)
             JBS ZTBZ2,3           ;判断是否工作在AUTO模式?
             JMP MAIN_1            ;不是,继续循环 
             JBS  ZTBZ2,0          ;到了,检测是否有第一次测量标志?
             JMP  MAIN_3
             MOV  A,KJTM
             XOR  A,@0X05          
             JBS  STATUS,2         ;5分钟是否到了?
             JMP  MAIN_1
             BS  ADCON,ADRUN       ;第一次测量作为基准电压 
             BC  ZTBZ2,0           ;取消第一次测量标志 
      MAIN_3:MOV A,AUTO_30S
             XOR A,@0X1E
             JBS STATUS,2
             JMP MAIN_1
             CLR AUTO_30S
             CALL FCCGQ
             JBC  ZTBZ2,1
             BS   ADCON,ADRUN      ;置ADRUN=1,启动ADC工作 
             JMP MAIN_1
;***********************************************************
;         指示灯工作状态控制程序 
;***********************************************************
      LED_GZ:JBC ZTBZ1,0           ;检测开关状态标志 
             JMP LED_1
             MOV A,@0XCF
             IOW IOC50
             NOP
             JMP LED_4
       LED_1:MOV A,@0X01           ;置P50为输入口 
             IOW IOC50
             MOV A,@0X0A           ;置P63、P61为输入口 
             IOW IOC60
             MOV A,@0X0            ;置P70为输出口 
             IOW IOC70
             NOP
             BC PORT5,3            ;扫描 
             BC PORT5,2
             BC PORT5,1
             BS PORT7,0
             BS PORT6,0
             BS PORT5,6
             JBC ZTBZ1,0           ;判开关状态?
             BC PORT5,7            ;开关为开状态,POWER指示灯亮 
             JBS ZTBZ1,0           
             BS PORT5,7            ;开关为开状态,POWER指示灯灭 
             CALL DELAY_1          ;0.05MS延时 
             BS PORT5,7
             BS PORT6,0
             MOV A,DSCS            ;判断是否是定时2小时?
             XOR A,@0X02
             JBC STATUS,2
             BC PORT7,0            ;是,2H指示灯亮 
             JBS STATUS,2
             BS PORT7,0            ;不是,2H指示灯灭 
             CALL DELAY_1
             BS PORT5,7
             BS PORT7,0
             MOV A,FSCS            ;判电机是否在L档?
             XOR A,@0X02         
             JBC STATUS,2
             BC PORT6,0            ;是,L档指示灯亮 
             JBS STATUS,2
             BS PORT6,0
             CALL DELAY_1
             MOV A,@0X01
             IOW IOC50
             MOV A,@0X0A
             IOW IOC60
             MOV A,@0X0
             IOW IOC70
             NOP
             BC PORT5,6
             BC PORT5,2
             BC PORT5,1
             BS PORT7,0
             BS PORT6,0
             BS PORT5,3
             JBS ZTBZ2,1           ;判电机的工作状态是否为MANUAL模式?
             BC PORT5,7
             JBC ZTBZ2,1
             BS PORT5,7
             CALL DELAY_1
             BS PORT5,7
             BS PORT6,0
             MOV A,DSCS            ;判电机是否是定时4小时?
             XOR A,@0X04
             JBC STATUS,2
             BC PORT7,0
             JBS STATUS,2
             BS PORT7,0
             CALL DELAY_1
             BS PORT5,7
             BS PORT7,0
             MOV A,FSCS            ;判电机是否在M档?
             XOR A,@0X03          
             JBC STATUS,2
             BC PORT6,0
             JBS STATUS,2
             BS  PORT6,0
             CALL DELAY_1
             MOV A,@0X01
             IOW IOC50
             MOV A,@0X0A
             IOW IOC60
             MOV A,@0X0
             IOW IOC70
             NOP 
             BC PORT5,6
             BC PORT5,3
             BC PORT5,1
             BS PORT7,0
             BS PORT6,0
             BS PORT5,2
             JBS ZTBZ2,3           ;判断电机的工作状态是否为AUTO工作模式?
             JMP LED_2             ;净化器在AUTO工作模式时,AUTO指示灯闪烁点亮 
             JBC TIME1,5
             BC PORT5,7
             JBS TIME1,5
             BS PORT5,7
             JMP LED_3
       LED_2:JBC ZTBZ2,3
             BC  PORT5,7
       LED_3:JBS ZTBZ2,3
             BS  PORT5,7
             CALL DELAY_1
             BS PORT5,7
             BS PORT6,0
             MOV A,DSCS            ;判断是否定时8小时?
             XOR A,@0X08
             JBC STATUS,2
             BC PORT7,0
             JBS STATUS,2
             BS PORT7,0
             CALL DELAY_1
             BS PORT5,7
             BS PORT7,0
             MOV A,FSCS            ;判断电机是否在H档?
             XOR A,@0X04
             JBC STATUS,2
             BC PORT6,0
             JBS STATUS,2
             BS PORT6,0
             CALL DELAY_1
             MOV A,@0X01
             IOW IOC50
             MOV A,@0X0A
             IOW IOC60
             MOV A,@0X0
             IOW IOC70
             NOP
             BC PORT5,6
             BC PORT5,3
             BC PORT5,2
             BS PORT7,0
             BS PORT6,0
             BS PORT5,1
             JBC ZTBZ1,1           ;判断负离子工作状态?
             BC PORT5,7
             JBS ZTBZ1,1
             BS PORT5,7
             CALL DELAY_1
             BS PORT5,7
             BS PORT7,0
             MOV A,FSCS            ;判断静音档?
             XOR A,@0X01
             JBC STATUS,2
             BC PORT6,0
             JBS STATUS,2
             BS PORT6,0
       LED_4:RET
;***********************************************************
;       按键扫描控制程序 
;***********************************************************
        GZMS:WDTC                  ;清WDT     
             MOV A,@0X89           ;扫描键盘,置初值,P57、P70、P60设为输入口,P53、P56设为输出口 
	         IOW IOC50	
             MOV A,@0X0A           ;P61为A/D输入口,P63为粉尘检测输入口		
	         IOW IOC60	
         	MOV A,@0X00	        	
	         IOW IOC70	
             NOP
             BS PORT7,0
             BS PORT6,0
             BC PORT5,2 	
             BC PORT5,1	
             BC PORT5,6   						
             NOP		
             JBC PORT5,7           ;检测开关键S1是否按下?			
             BC  ZTBZ1,5
             JBC ZTBZ1,5
             JMP GZMA
             JBC ZTBZ1,6
             JMP GZMA
             JBC ZTBZ1,4
             JMP GZMA
             JBC ZTBZ2,6
             JMP GZMA
             JBC ZTBZ1,7
             JMP GZMA
             JBC ZTBZ2,7
             JMP GZMA
             JBS PORT5,7
             CALL SET_1            ;调用开关状态控制子程序	
        GZMA:JBS ZTBZ1,0           ;判断开关状态是否为ON?        
             JMP GZM6              ;不是,返回 
        GZM1:MOV A,@0X09           ;是,继续扫描 
	         IOW IOC50	
             MOV A,@0X0A         
	         IOW IOC60	
         	MOV A,@0X01	        	
	         IOW IOC70	
             NOP
             BS PORT5,7
             BS PORT6,0
             BC PORT5,2	
             BC PORT5,1	
             BC PORT5,6   						
             NOP			
             JBC PORT7,0           ;检测UV灯键S2是否按下?
             BC  ZTBZ1,6

⌨️ 快捷键说明

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