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

📄 deng3.elc

📁 一个义隆单片机EM78P156做的调光灯程序
💻 ELC
📖 第 1 页 / 共 2 页
字号:
;#EMC78P156
;时钟频率8MHz(晶振),指令周期2,TCC分频1/4
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLl

#include D:\lyk\pro\DENG\DENG\INC156.inc

R_ACC       ==                            0X10                          ;通用计数器
cnt3        ==                            0X11
PPCNT       ==                            0X12
PWM         ==                            0X13
temp4       ==                            0X14
FLAG        ==                            0X15
KEYBUF      ==                            0X16
KEYCODE     ==                            0X17
KEYCNT      ==                            0X18
OLDKEY      ==                            0X19
DD          ==                            0X1A
SACC        ==                            0X1B
SPSW        ==                            0X1C
SACC2       ==                            0X1D
SPSW2       ==                            0X1E
TTCNT1      ==                            0X1F
N16_H8      ==                            0X20
N16_L8      ==                            0X21
temp9       ==                            0X22
temp3       ==                            0X23
TCON        ==                            0X24
TCON2       ==                            0X25
delaycnt    ==                            0X26
breakcnt    ==                            0X27
begincnt    ==                            0X28
kp5         ==                            0X29
kp6         ==                            0X2a
ktemp       ==                            0X2b
zstep       ==                            0X2c
flag1       ==                            0X2d

PTCNT       ==                            0X2e
TTcnt       ==                            0X2f
TT2         ==                            0X30
TT1         ==                            0X31
TCON3         ==                            0X32
PWM2         ==                            0X33
ramd2          ==                            0X34
ramd         ==                            0X35

cntkey         ==                            0X36

sstep          ==                            0X38
cnt1           ==                            0X39
cnt8           ==                            0X3a
IRDATA         ==                            0X3b
rec00          ==                            0X3c
rec11          ==                            0X3d
rec22          ==                            0X3e
rec33          ==                            0X3f
;*********************************************************************
#DEFINE     e0_s                          FLAG1.7
#DEFINE     e1_s                          FLAG1.6
#DEFINE     is_rec                        FLAG1.5
#DEFINE     b0_s                          FLAG1.4
#DEFINE     b1_s                          FLAG1.3
#DEFINE     is_key                        FLAG1.2      ;有键标志位 
#DEFINE     ir_key                        FLAG1.1      ;有键标志位
#DEFINE     ttt_s                         FLAG1.0      ;标志位
    
#DEFINE     POWER_S                       FLAG.1      ;可控硅总控制继电器开关标志位
#DEFINE     J1_S                          FLAG.0      ;继电器1开关标志位
#DEFINE     J2_S                          FLAG.7      ;继电器2开关标志位
#DEFINE     J3_S                          FLAG.6      ;继电器3开关标志位


#DEFINE        DANG            10          ;档调制最小单位    
#DEFINE        DDMAX           4          ;分4档        
;#DEFINE        T_CC            0xc3          ;(1/3.92M)*2*4*(256-195)=124.48us
;#DEFINE        T_CC            0xc8          ;(1/3.58M)*2*4*(256-200)=150us 
;#DEFINE        T_CC            0xc3          ;(1/8M)*2*4*(256-195)=62us
#DEFINE        T_CC            0xd2          ;(1/8M)*2*4*(256-210)=46us
;**************键值定义***********************************************
#DEFINE        KUP          0X02          ;加键
#DEFINE        J1           0X20          ;J1
#DEFINE        KPOWER       0X04          ;灯开关
#DEFINE        J2           0X80          ;J2
#DEFINE        KDOWN        0X08          ;减键
#DEFINE        J3           0X40          ;J3
;**************遥控键值定义***********************************************  
;------LCCK003L遥控器L---------------------------
#DEFINE        K1_KUP         0X01          
#DEFINE        K2_J2          0X08        
#DEFINE        K3_KPOWER      0X04          
#DEFINE        K4_J3          0X05         
#DEFINE        K5_KDOWN       0X07          
#DEFINE        K6_J1          0X02       
;------LCCK003R新遥控器R---------------------------
;#DEFINE        K1_KUP         0X0c          
;#DEFINE        K2_J2          0X09        
;#DEFINE        K3_KPOWER      0X0d          
;#DEFINE        K4_J3          0X06         
;#DEFINE        K5_KDOWN       0X0e          
;#DEFINE        K6_J1          0X03     
;*************遥控器地址***************************************************
#define        ADDR1       0x80
#define        ADDR0       0x7f
;**************************************************************************
#define        PPP0       160   ;100-255
#define        PPP1       100
;======================================================================================
            ORG     0                     ;上电时程序入口
               JMP                           RESET
               nop
               nop
               NOP
               NOP
               NOP
               NOP
               nop
            ;//中断入口
            ORG     8                     ;中断程序入口
                 disi
               if EXIF==1
                 MOV SACC,A               ;backup A
                 SWAPA 0X03   
                 MOV SPSW,A               ;backup PSW
                 RF=0
                 PPCNT=0

              _if POWER_S==0
               jmp _stoppwm

               if DD==4
                  if PWM>=245
                     jmp _fool22
                  endif
               endif
_stoppwm:
                 P6.5=0
_fool22:
;*******************以是输出处理程序****************
      ;------------------------------------------------------------------
      ;------------------------------------------------------------------    
          if DD==4
            PWM2=250
          endif 
          if DD==3
            PWM2=177
          endif 
          if DD==2
            PWM2=155
          endif 
          if DD==1
            PWM2=140
          endif 
;******************档与PWM的转换********************
          if PWM==PWM2
           PTCNT=0
           jmp _nnn
          endif

        if ++PTCNT>1
          PTCNT=0
           if PWM<PWM2
              PWM++
                 if PWM<245
                   if PWM>183
                     PWM=PWM+3
                       if DD==4
                          if PWM>=242
                             PWM=PWM2
                          endif
                       endif
                     jmp _nnn
                   endif
                 endif
           endif
           if PWM>PWM2
              PWM--
                 if PWM>183
                     PWM=PWM-3
                     jmp _nnn
                 endif
           endif
        endif
_nnn:
;***************************************************
                 TCC=PWM
                 ttt_s=0
                 if begincnt>0
                   begincnt--
                 endif
                 if is_rec==0
                   SCANKEY()    ;读键
                 endif
                 wdtc
                 !IOCF=1
                 SWAPA SPSW   ;restore PSW
                 MOV PSW,A
                 SWAP SACC    ;restore A
                 SWAPA SACC
                 RETI
               endif


;*********************************************************************************
               if TCIF==1                 ;TCC时间中断
                 MOV SACC2,A              ;backup A
                 SWAPA 0X03   
                 MOV SPSW2,A              ;backup PSW
                 TCIF=0
             if begincnt==0
               if POWER_S==1
                 P6.5=1
                 nop
                 nop
                 nop
                 nop
                 nop
               endif
             endif
                 if ttt_s==0
                   ttt_s=1
                   TCC=PPP1                 ;TCC置初值
                 else
                   ttt_s=0
                   !IOCF=4
                 endif
                 nop
                 nop
                 nop
                 nop
                 nop
                 nop
                 nop
                 nop
                 nop
                 nop

               if ttt_s==1
                if is_rec==0
                 jmp TIMER
                endif
               endif


                 jmp back
               endif

             RF=0
             eni
             jmp main

;*******************初始化**********************
            ;//判断复位方式,决定复位程序
RESET:
            DISI
            SWAPA PSW                         
            AND A,@0X01
            IF A==0X01
                                          ;是上电复位,执行完全复位
                                          initRST()                     ;定义特殊寄存器
                                          P6=0
                                          P5=0
                                          init()                        ;清零通用寄存器
                                          flag=0
                                          flag1=0
                                          TCC=T_CC
                                          DD=4                          ;上电预置为4档
                                          ttt_s=0
                                          PWM2=200
                                          PWM=200
                                          begincnt=100                   ;上电后10个电网周期不对可控硅控制
                                          ENI
            ELSE
                                          ;非上电复位
                                          initRST()
                                          ENI
            ENDIF

;*********************主程序********************
MAIN:
  ;==========红外接收前处理========
          _if P6.4==1
           jmp _no_ir
          delay()
          _if P6.4==1
           jmp _no_ir
          delay()
          _if P6.4==1
           jmp _no_ir
          delay()
          _if P6.4==1
           jmp _no_ir
          delay()
          _if P6.4==1
           jmp _no_ir
          delay()
          _if P6.4==1
           jmp _no_ir

      ;----检测start-------
          breakcnt=0
          do
           _if P6.4==1
            jmp _ir0
           delay()
          while ++breakcnt<96
           jmp _no_ir
_ir0:
          breakcnt=0
          do
           delay()
           _if P6.4==0
            jmp _no_ir
          while ++breakcnt<21
     ;-----是start---------   
          b0_s=1  
          breakcnt=0
          do
           delay()
           _if P6.4==0
            jmp _ir1
          while ++breakcnt<96
           jmp _no_ir
_ir1:
         cnt1=20
         is_rec=0
         do
           read()              ;红外接收
           delay()
         while is_rec==1


_no_ir:

         if P6.4==1
           delay()
           if cnt1<250
              cnt1++
           else
              cnt8=0
              is_rec=0
           endif
         endif
         cnt8=0
         is_rec=0
   ;=========================================


            wdtc
            _IF is_key==1
            jmp _is_key_jmp

           ;----红外遥控键处理-----------
            if ir_key==1
              ir_key=0
              switch      IRDATA
              case        k1_KUP 
                            KEYCODE=KUP

⌨️ 快捷键说明

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