久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5219|回復: 2
打印 上一主題 下一主題
收起左側

pic單片機驅動SM311電源開關匯編程序

[復制鏈接]
跳轉到指定樓層
樓主
;LIST P=SM311, CLOCK=4MHZ, WDT=DISBALE,INT=ENABLE
;-----------------------------------------------------------
;     LOUDOUT  RA0  1             14  RA1  WHITE_BULB
;   SIGNAL_IN  RB7  2             13  RA2  BLUE_BULB
;        READ  RB6  3             12  RA3  BROWN_BULB
;              VDD  4             11  VSS  
;          K1  RB5  5             10  RB0  YELLOW_BULB
;          K2  RB4  6             9   RB1  BUZ  
;       RESET  RB3  7             8   RB2  POWER_CUT  
;-----------------------------------------------------------
INDF            EQU    00H
TMR0            EQU    01H
PCL             EQU    02H
STATUS          EQU    03H
FSR             EQU    04H
RA              EQU    05H
;-----------------------------------------------------------
LOUDOUT            EQU    0
WHITE_BULB        EQU    1
BLUE_BULB        EQU    2
BROWN_BULB        EQU    3
;-----------------------------------------------------------
RB              EQU    06H
;-----------------------------------------------------------
YELLOW_BULB            EQU    0
BUZ                EQU    1
POWER_CUT        EQU    2
K2                EQU    4
K1                EQU    5
READ                EQU    6
SIGNAL_IN        EQU    7
;-----------------------------------------------------------
IRQM            EQU    09H
;-----------------------------------------------------------
TM0M            EQU    0
PBM             EQU    1
INTM            EQU    7
;-----------------------------------------------------------
IRQF            EQU    0AH
;-----------------------------------------------------------
TM0F            EQU    0
PBF             EQU    1
;-----------------------------------------------------------
PA_PDM          EQU    0BH
PB_PUP          EQU    0CH
PB_PDM          EQU    0DH
PB_POD          EQU    0EH
WAKEUP          EQU    0FH
;-----------------------------------------------------------
A               EQU    0
M               EQU    1  
;---STATUS REG----------------------------------------------
C               EQU    0
DC              EQU    1
Z               EQU    2
PD              EQU    3
TO              EQU    4
GP0             EQU    5
GP1             EQU    6
GP2             EQU    7
;---OPTION REG----------------------------------------------
PS0             EQU    0
PS1             EQU    1
PS2             EQU    2
PSA             EQU    3
T0SE            EQU    4
T0CS            EQU    5
INTEDG          EQU    6
;---PA_PDM REG----------------------------------------------
DB0                    EQU    0
DB1                    EQU    1
DB2                    EQU    2
EXTEN                  EQU    6
RTCEN                  EQU    7
;---PB_POD REG----------------------------------------------
OB0                    EQU    0
OB1                    EQU    1
OB2                    EQU    2
OB4                    EQU    4
OB5                    EQU    5
OB6                    EQU    6
OB7                    EQU    7
;---WAKEUP REG----------------------------------------------
EN0                    EQU    0
EN1                    EQU    1
EN2                    EQU    2
EN4                    EQU    4
EN5                    EQU    5
EN6                    EQU    6
EN7                    EQU    7
;-----------------------------------------------------------
;CONSUMER REGISTER
;-----------------------------------------------------------
MAXDATA              EQU    .250     ; 高低電平寬度最大值
;-----------------------------------------------------------
CODE_TOTAL         EQU          20H
LCODE           EQU            21H            ; 記錄一幀碼的低8位數據
MCODE           EQU            22H            ; 記錄一幀碼的中8位數據
HCODE           EQU            23H            ; 記錄一幀碼的高8位數據                                                            
;-----------------------------------------------------------
LBIT            EQU            25H     ; 記錄'0'和'1'碼的低電平寬度
HBIT            EQU           26H     ; 記錄'0'和'1'碼的高電平寬度

LCODE_EE         EQU           27H     ; 記錄EEPROM低8位數據
MCODE_EE         EQU           28H     ; 記錄EEPROM中8位數據
HCODE_EE         EQU           29H     ; 記錄EEPROM高4位數據

MODEREG          EQU           2AH     ; 按鍵定時器
SHIFT            EQU           2BH

KEYREG           EQU           2CH
CNT_LW           EQU           2DH     ; 定時寄存器
CNT_HI           EQU           2EH
;-----------------------------------------------------------
FRAME            EQU           2FH     ;
;-----------------------------------------------------------
CNT                EQU            30H
CNT2                EQU            31H
DEL1                EQU        32H
CNT_32MS        EQU        33H
CNT_4S                EQU        34H
CNT_1M                EQU        35H

W_REG                EQU        36H
S_REG                EQU        37H
R_BUZ                EQU        38H
;-----------------------------------------------------------
LREG                EQU        3DH        ; 手動開關瞬間按燈閃爍順序
                                ; LREG值為"1":白燈亮
                                ; LREG值為"2":白燈+藍燈亮
                                ; LREG值為"3":白燈+藍燈+棕燈亮
                                ; LREG值為"4":白燈+藍燈+棕燈+黃燈亮
;-----------------------------------------------------------
FREG_1            EQU            3EH
UP_FLAG                EQU        7        ; FREG_1.7 上電標志位。
DELAY_FLAG         EQU          6        ; FREG_1.6 按鍵延時1分鐘標志
DELAY200MS_FLAG EQU          5          ; FREG_1.5 延時10秒標志位。  
REMOTE_FLAG          EQU           4          ; FREG_1.4 遙控按鍵成功標志位。
OUT4_FLAG        EQU        3          ; FREG_1.3 4路輸出狀態標志位。
OUT3_FLAG        EQU            2          ; FREG_1.2 3路輸出狀態標志位。
OUT2_FLAG           EQU            1          ; FREG_1.1 2路輸出狀態標志位。
OUT1_FLAG           EQU            0          ; FREG_1.0 1路輸出狀態標志位。
;-----------------------------------------------------------
FREG_2                EQU        3FH
R_K1                EQU        0        ;'0'->延時1路輸出不閃動,'1'->延時1路輸出閃動
R_K2                EQU        1        ;'0'->四路遙控輸出,'1'->三路輸出
R_LOADOUT        EQU        2        ;'0'->無負載輸出,'1'->有負載輸出
R_80M                EQU        3        ;80分鐘定時器,'0'->
R_AGAINST        EQU        4        ;'0'->防盜功能未開啟,'1'->防盜功能已開啟
R_AGAINST_L1        EQU        5        ;'0'->L1燈閃兩次,'1'->L1燈閃一次
OUT_ONOFF        EQU        6        ;ON/OFF松鍵標志
OUT_DLEY        EQU        7        ;DLEAY松鍵標志
;=======================================================
;=======================================================
        ORG     3FFH
        LGOTO   0X00
        ORG        0X00
        LGOTO        BOOT
        ORG     3FEH
        LGOTO   INTERRUPT_TMR0
;=======================================================
;2262,8位地址碼
;=======================================================
        ORG        001H
LOW_ADDRESS:
        RETLA        0X30
HIGH_ADDRESS:
        RETLA        0XEF
;========================================================
;中斷子程序
;========================================================
        ORG        004H
INTERRUPT_TMR0:
        MOVAM        W_REG
        SWAP        STATUS,A
        MOVAM        S_REG

INT_TMR0_START:
        BTSC        IRQF,TM0F
        LGOTO        INT_TMR0_DEAL

INT_TMR0_END:
        BC        IRQF,TM0F
        SWAP        S_REG,A
        MOVAM        STATUS
        SWAP        W_REG,M
        RETI
       
INT_TMR0_DEAL:
        MOVLA        .250
        MOVAM        TMR0
       
        INC        CNT_32MS,M
        BTSC        FREG_1,REMOTE_FLAG
        INC        MODEREG,M        ;按鍵松鍵時間寄存器

;        BTSC        FREG_1,DELAY200MS_FLAG
;        INC        R_BUZ,M
       
        MOVLA        .125
        SUB        CNT_32MS,A
        BTSS        STATUS,Z
        LGOTO        INT_TMR0_END

        CLR        CNT_32MS
        INC        CNT_4S,M
;        MOVLA   .1
        MOVLA        .15
        SUB        CNT_4S,A
        BTSS        STATUS,Z
        LGOTO        INT_TMR0_END

        CLR        CNT_4S
        INC        CNT_1M,M
        MOVLA        .100                ;80分鐘定時器
        SUB        CNT_1M,A
        BTSS        STATUS,Z
        LGOTO        INT_TMR0_END

        CLR        CNT_32MS
        CLR        CNT_4S
        CLR        CNT_1M
        LGOTO        INT_TMR0_END
;=======================================================       
;延時子程序
;=======================================================
DELAY:
       MOVLA    0XFF
       MOVAM    DEL1
LOOP_DELAY:
       CLRWDT
       LGOTO        $+1
       LGOTO        $+1
       LGOTO        $+1
       LGOTO        $+1
       LGOTO        $+1
       DECSZ    DEL1,M
       LGOTO    LOOP_DELAY
       RETLA    0X00      
;----------------------------------
DELAY1:
        LGOTO        $+1                ;2
        LGOTO        $+1             ;2
DELAY2: NOP                     ;1
DELAY3: NOP                     ;1
DELAY4: NOP                     ;1
DELAY5: NOP                     ;1
DELAY6: NOP                     ;1
DEALY7: LGOTO        $+1             ;2
DELAY8: NOP                     ;1
DELAY9: NOP                     ;1
DEALYA: NOP                     ;1
DELAYB: NOP                     ;1
        RETLA   0X00
;=======================================================
;重新計時子程序
;=======================================================
RESTART_TIME:
        MOVLA        .250
        MOVAM        TMR0
        CLR        CNT_32MS
        CLR        CNT_4S
        CLR        CNT_1M
        RETLA        0X00
;=======================================================
;L1燈即:WHITE_BULB,閃爍一次子程序
;=======================================================
WHITE_BULB_FLISH:
        MOVLA        0X02                                ;按鍵取反讓其閃爍
        XOR        RA,M

        MOVLA        .168
        MOVAM        SHIFT

        MOVLA        .255
        MOVAM        CNT
       
        NOP
        NOP
        NOP
        NOP
       
        DECSZ        CNT,M
        LGOTO        $-3
       
        DECSZ        SHIFT,M
        LGOTO        $-7

        RETLA        0X00
;=======================================================
;按鍵延時1與延時80分鐘定時關閉子程序
;=======================================================
TST_KEYDELAY:       
        MOVLA        .3                        ;去遙控器按鍵抖動
        SUB        MODEREG,A                ;松開鍵
        BTSS        STATUS,C
        LGOTO        TST_KEYDELAY_END
       
        MOVLA        0X07
        BTSS        FREG_2,R_K2                ;判斷是三路或者是四路遙控
        MOVLA        0X0F
        AND        FREG_1,A
        BTSC        STATUS,Z
        LGOTO        OPEN_LOAD
        BC        RA,LOUDOUT
        LGOTO        LOAD_JUDGE_END
       
OPEN_LOAD:
        BS        RA,LOUDOUT                ;如果沒有燈亮,打開負載
       
LOAD_JUDGE_END:       
;        BTSS        FREG_1,DELAY200MS_FLAG
;        LGOTO        BUZ100MS_END
;        MOVLA        .7
;        SUB        R_BUZ,A
;        BTSS        STATUS,C
;        LGOTO        OPEN_BUZPRO
;        LGOTO        OFF_BUZPRO
       
;OPEN_BUZPRO:
;        BS        RB,BUZ
;        LGOTO        BUZ100MS_END
;OFF_BUZPRO:
;        BC        RB,BUZ
;        CLR        R_BUZ
;        BC        FREG_1,DELAY200MS_FLAG
       
;BUZ100MS_END:
        BTSS        FREG_1,REMOTE_FLAG        ;遙控成功標志檢測,
        LGOTO        DLEAY_START
               
;        BTSS        FREG_1,DELAY_FLAG
;        LGOTO        STATE_BEGIN
;
;        BTSS        FREG_2,R_K1                ;檢測延時L1燈,是否閃爍
;        LGOTO        STATE_BEGIN                ;FREG_2.R_K1=0不閃爍
;       
;        BTSC        FREG_2,R_AGAINST
;        LGOTO        STATE_BEGIN                ;當防盜功能開啟后燈不用再閃爍
;
;        BTSC        FREG_1,DELAY200MS_FLAG
;        LGOTO        STATE_BEGIN
;       
;        LCALL        WHITE_BULB_FLISH
;        MOVLA        0X02                        ;按鍵取反讓其閃爍停止
;        XOR        RA,M

STATE_BEGIN:
        LCALL        RESTART_TIME
        BC        FREG_1,REMOTE_FLAG        ;設置按鍵松開標志
               

DLEAY_START:
        BTSC        FREG_1,DELAY_FLAG        ;延時按鍵標志=0
        LGOTO        DELAY_1M_PRO
        BTSS        FREG_2,R_AGAINST        ;檢測防盜是否開啟
            LGOTO        TST_KEYDELAY_END        ;防盜沒有開啟,直接返回
        LGOTO        AGAINST_80M_PRO                ;進入防盜功能子程序
       
DELAY_1M_PRO:
        MOV        CNT_1M,A
        BTSC        STATUS,Z
        LGOTO        TST_KEYDELAY_END        ;CNT_1M=0,未到1分鐘返回

        MOVLA        0X1
        MOVAM        RA
        CLR        RB
        MOVLA        0XB0
        AND        FREG_1,M                ;清除四盞燈的點亮標志,和延時按鍵標志  
        LCALL        RESTART_TIME
        LGOTO        TST_KEYDELAY_END
       
AGAINST_80M_PRO:       
            BTSC        FREG_2,R_80M                ;0->應進入關閉的80分鐘,1->應輸出全部負載4分鐘
            LGOTO        AGAINST_L1_SHINE4M

        MOVLA        .80                        ;80分鐘定時
;       MOVLA   .4
        SUB        CNT_1M,A       
        BTSS        STATUS,Z
        LGOTO        TST_KEYDELAY_END
       
          BS        FREG_2,R_80M                ;80分鐘,將R_80標志置1,
          MOVLA        0X0E
        MOVAM        RA                        ;點亮L1/L2/L3
        MOVLA   0X0F
        IOR     FREG_1,A
        MOVAM   FREG_1
        LGOTO        AGAINST_L1_SHINE_CHANGE
         
AGAINST_L1_SHINE4M:
        MOVLA        .4
;        MOVLA   .1
        SUB        CNT_1M,A                ;4分鐘定時
        BTSS        STATUS,Z
        LGOTO        TST_KEYDELAY_END
       
        BC        FREG_2,R_80M
        MOVLA        0X00
        MOVAM        RA
        MOVLA        0XF8
        AND        FREG_1,A                ;清除燈的標志
        MOVAM        FREG_1
       
AGAINST_L1_SHINE_CHANGE:
        BC        FREG_1,REMOTE_FLAG
        LCALL        RESTART_TIME
        LGOTO        TST_KEYDELAY_END

;=======================================================
;掉電子程序
;=======================================================
POWER_CUT_PRO:
        MOVLA        00H                ;關閉中斷
        MOVAM        IRQM

        MOVLA        0X00
        MOVAM        RA                        ;熄滅白/藍/棕三盞燈
        MOVAM        RB                        ;熄滅黃燈
       
        MOVLA        .8
        MOVAM        CNT
        LCALL        DELAY
        LCALL        DELAY
       
        DECSZ        CNT,M
        LGOTO        $-3
       
               BTSC    RB,POWER_CUT
        LGOTO        HAND_SWITCH_PRO_END
       
POWER_CUT_PRO_LOOP:
        BTSS        RB,POWER_CUT
        LGOTO        POWER_CUT_PRO_LOOP
       
        BTSS        FREG_1,UP_FLAG                ;檢測掉電標志,
        LGOTO        POWER_CUT_PRO_END        ;"0"表示未掉電,"1"表示掉電
       
               INC        LREG,M                        ;手動開關的4個狀態
               MOVLA        .5                        ;四路遙控
               BTSC        FREG_2,R_K2                ;判斷是三路和四路遙控
               MOVLA        .4                        ;三路遙控
               SUB        LREG,A
               BTSS        STATUS,C
               LGOTO        HAND_SWITCH_PRO
               MOVLA        .1
               MOVAM        LREG
               LGOTO        HAND_SWITCH_PRO
              
POWER_CUT_PRO_END
        BS        FREG_1,UP_FLAG                ;將掉電標志設為"1"
;        MOVLA        0X00
;        MOVAM        RA                        ;熄滅白/藍/棕三盞燈
;        MOVAM        RB                        ;熄滅黃燈
        LGOTO        POWER_CUT_PRO_LOOP   
;=======================================================
;掉電上電后燈狀態
;=======================================================
HAND_SWITCH_PRO:
        BC        FREG_1,UP_FLAG                ;將掉電標志值為"0"
        BC        FREG_1,DELAY_FLAG        ;清除按鍵延時標志
        BC        FREG_2,R_AGAINST
       
        MOVLA        .1
        MOVAM        CNT
        LCALL        DELAY
        LCALL        DELAY
       
        DECSZ        CNT,M
        LGOTO        $-3
       
        MOVLA        .1
        SUB        LREG,A
        BTSC        STATUS,Z
        LGOTO        SWITCH_1_PRO

        MOVLA        .2
        SUB        LREG,A
        BTSC        STATUS,Z
        LGOTO        SWITCH_2_PRO

        MOVLA        .3
        SUB        LREG,A
        BTSC        STATUS,Z
        LGOTO        SWITCH_3_PRO

;        MOVLA        0X0E                        ;點亮白/藍/棕三盞燈
;        MOVAM        RA
;        MOVLA        0X01                        ;點亮黃燈
;        MOVAM   RB
        BS        RA,WHITE_BULB
        BS        RA,BLUE_BULB
        BS        RA,BROWN_BULB
        BS        RB,YELLOW_BULB
       
        MOVLA        0X0F
        IOR        FREG_1,A
        MOVAM        FREG_1
        LGOTO        HAND_SWITCH_PRO_END
       
SWITCH_1_PRO:
;        MOVLA        0X00
;        MOVAM        RB
;        MOVLA        0X02
;        MOVAM        RA                        ;點亮白燈
        BS        RA,WHITE_BULB                ;點亮白燈
        MOVLA        0XF1
        AND        FREG_1,A
        MOVAM        FREG_1
        BS        FREG_1,OUT1_FLAG
        LGOTO        HAND_SWITCH_PRO_END
       
SWITCH_2_PRO:
;        MOVLA        0X00
;        MOVAM        RB
;        MOVLA        0X06                        ;點亮白/藍兩盞燈
;        MOVAM        RA
        BS        RA,WHITE_BULB                ;點亮白/藍兩盞燈
        BS        RA,BLUE_BULB
        MOVLA        0XF3
        AND        FREG_1,A
        MOVAM        FREG_1
        MOVLA        0X03
        IOR        FREG_1,A
        MOVAM        FREG_1
        LGOTO        HAND_SWITCH_PRO_END
       
SWITCH_3_PRO:
;        MOVLA        0X00
;        MOVAM        RB
;        MOVLA        0X0E                        ;點亮白/藍/棕三盞燈
;        MOVAM        RA
        BS        RA,WHITE_BULB
        BS        RA,BLUE_BULB
        BS        RA,BROWN_BULB
        BC        FREG_1,OUT4_FLAG
        MOVLA        0X07
        IOR        FREG_1,A
        MOVAM        FREG_1
        LGOTO        HAND_SWITCH_PRO_END
       
HAND_SWITCH_PRO_END:
        BTSC        FREG_1,OUT1_FLAG
        BS        RA,WHITE_BULB
        BTSC        FREG_1,OUT2_FLAG
        BS        RA,BLUE_BULB
        BTSC        FREG_1,OUT3_FLAG
        BS        RA,BROWN_BULB
        BTSC        FREG_1,OUT4_FLAG
        BS        RB,YELLOW_BULB
        LCALL        RESTART_TIME
        MOVLA        81H
        MOVAM        IRQM
        LGOTO        MAIN
;=======================================================
;接收讀碼器發送的碼型
;=======================================================
RX:
        CLR        LBIT
       
REC_LOW_LEVEL:                                ;接收電平信號,并記錄其寬度
        BTSC        RB,READ               
        LGOTO        RX_TOTAL
        DECSZ        LBIT,M                        ;所接收到的為,2262,A0低電平寬度
        LGOTO        REC_LOW_LEVEL
       
RX_ERROR:                                ; STATUS.C=1,返回錯誤信息。
        BS        STATUS,C
        RETLA        0X00
       
;----------------------------------       
RX_TOTAL:
        MOVLA        0X08
        MOVAM         CNT
       
RX_LOOP:       
        CLR        HBIT
       
RX_HIGH_LEVEL:       
        BTSS        RB,READ
        LGOTO        RX_JUDGE
        DECSZ        HBIT,M                        ;記錄高電平的寬度
        LGOTO        RX_HIGH_LEVEL
        LGOTO        RX_ERROR
       
RX_JUDGE:       
        MOV        LBIT,A
        SUB        HBIT,A                        ;HBIT>LBIT,則:A=1
        RR        MCODE,M
        RR        LCODE,M
        CLR        HBIT
       
RX_LOW_LEVEL:                                ;低電平持續時間檢測
        BTSC        RB,READ
        LGOTO        RX_JUDGE_1                ;高電平,跳轉RX_JUDGE_1
        DECSZ        HBIT,M
        LGOTO        RX_LOW_LEVEL
        LGOTO        RX_ERROR                ;低電平時間過長,錯誤返回。
       
RX_JUDGE_1:       
        MOV        LBIT,A
        SUB        HBIT,A
        RR        MCODE,M
        RR        LCODE,M
        DECSZ        CNT,M
        LGOTO        RX_LOOP
RX_OK:   
        BC        STATUS,C
        RETLA        0X00
       
;=======================================================
;發送碼型給外在讀碼器
;=======================================================
TX:  
               BS      RB,READ
               MOVLA   0X84
               IODIR   RB
               MOVLA   0X07
               MOVAM   CNT
               BC      RB,READ
               LCALL   DELAY9
               DECSZ   CNT,M
               LGOTO   $-2
               BS      RB,READ
               MOVLA   0X10
               MOVAM   CNT
BIT_OUT:
               MOVLA   0X03
               BTSC    LCODE,0
               MOVLA   0X09
               MOVAM   CNT2
               RR      MCODE,M
               RR      LCODE,M

               LCALL   DELAY9
               DECSZ   CNT2,M
               LGOTO   $-2

        CLRWDT
               MOVLA   0X40
               XOR     RB,M
               DECSZ   CNT,M
               LGOTO   BIT_OUT
               LCALL   DELAY1
               RETLA   0X00       
;=======================================================
;程序開始
;=======================================================  
BOOT:
        MOVLA        0X80
        MOVAM        FREG_1                        ;上電時,將上電標志置"1"

        CLR     CNT_32MS
        CLR        CNT_4S
        CLR        CNT_1M
        CLR     LREG

        CLR        RA
        MOVLA        0X00                        ;RA0上電檢測/RA1白燈/RA2藍燈/RA3棕燈
        IODIR        RA
        CLR     RB
        MOVLA        0XF4                        ;RB6讀碼輸入/R7信號輸入/R2電源檢測
        IODIR        RB

;        MOVLA        0X04                        B2 掉電檢測下拉
;        MOVAM        PB_PDM               
;        MOVLA        0X70                        ;RB6 讀碼上拉
;        MOVAM        PB_PUP

        MOVLA        0X74                        ;RB6 讀碼上拉
        MOVAM        PB_PUP

        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        LCALL          DELAY
        BTSS           RB,READ
        LGOTO        SEND_CODE_PRO

BOOT_CONTR:

        CLR     RB
        MOVLA        0XF4                        ;RB6讀碼輸入/R7信號輸入/R2電源檢測
        IODIR        RB

        CLR        FREG_2
       
        MOVLA        0X02                        ;三路
        BTSS        RB,K2                        ;三路遙控或四路遙控選擇
        MOVLA        0X00                        ;四路
        MOVAM        FREG_2

        MOVLA        0X01                        ;L1閃爍
        BTSS        RB,K1                        ;延時,L1燈是否閃爍
        MOVLA        0X00                        ;L1不閃爍
        IOR        FREG_2,A
        MOVAM        FREG_2
       
        MOVLA   .250
        MOVAM   TMR0
        MOVLA        0XC6                        ;1:128分頻
        SELECT
        MOVLA        81H
        MOVAM        IRQM
        BS        RA,WHITE_BULB
        INC        LREG,M                        ;手動開關的4個狀態
        BS        FREG_1,OUT1_FLAG
;=======================================================         
MAIN:       
        LGOTO   TST_KEYDELAY

TST_KEYDELAY_END:
        LCALL   RECEIVE_2262
        BTSS        STATUS,C
        LGOTO        M_COMPARE

        BTSS        RB,POWER_CUT                ;如上電狀態斷電狀態則,
        LGOTO        POWER_CUT_PRO                ;進入斷電狀態子程序
       
        LGOTO        MAIN      
;=======================================================
;HS2262, 接收,用兩個位標識2262中的一個位,因有"F"碼存在
;=======================================================
RECEIVE_2262:
        BTSS        RB,SIGNAL_IN
        LGOTO   RECEIVE_2262_ERROR_END
        CLR     CODE_TOTAL
        CLR     HBIT
       
RECEIVE_2262_HIGH:
             INC     HBIT,M
             MOVLA   MAXDATA
             SUB     HBIT,A
             BTSC    STATUS,C
             LGOTO   RECEIVE_2262_ERROR_END           
             BTSC    RB,SIGNAL_IN
             LGOTO   RECEIVE_2262_HIGH  
            
             CLR     LBIT

RECEIVE_2262_JUDGE:
             INC     CODE_TOTAL,M
             MOVLA   .25
             SUB     CODE_TOTAL,A
             BTSC    STATUS,Z
             LGOTO   RECEIVE_2262_END
            
RECEIVE_2262_LOW:
             INC     LBIT,M
             MOVLA   MAXDATA
             SUB     LBIT,A
             BTSC    STATUS,C
             LGOTO   RECEIVE_2262_ERROR_END
             BTSS    RB,SIGNAL_IN
             LGOTO        RECEIVE_2262_LOW

             MOV     LBIT,A
             SUB     HBIT,A
             RR      HCODE,M
             RR      MCODE,M
             RR      LCODE,M
             CLR     HBIT
             LGOTO   RECEIVE_2262_HIGH

RECEIVE_2262_ERROR_END:
             BS      STATUS,C                ;通過STATUS.C位置,來判斷是否有遙控,或解碼是否真確
             RETLA   0X00                        ;"1",表示不正確
RECEIVE_2262_END:     
             BC      STATUS,C                ;STATUS.C=0,解碼成功
             RETLA   0X00
;=======================================================
;接收到的2262碼型進行比較
;=======================================================
M_COMPARE:
        MOV     HCODE,A
        MOVAM   KEYREG

        LCALL   LOW_ADDRESS
        XOR     LCODE,A
        BTSS    STATUS,Z
        LGOTO   MAIN

        LCALL   HIGH_ADDRESS
        XOR     MCODE,A
        BTSS    STATUS,Z
        LGOTO   MAIN

REMOTE_KEY_JUDGE:
        CLR        MODEREG
;        CLR        R_BUZ
        BTSC    FREG_1,REMOTE_FLAG
        LGOTO   MAIN
        BS        FREG_1,REMOTE_FLAG
;        BS        FREG_1,DELAY200MS_FLAG

        MOVLA   0XC0                        ;按鍵"A",鍵值"1",兩位標識即="0XC0"
        XOR     KEYREG,A
        BTSC    STATUS,Z
        LGOTO   KEY1_PRO

        MOVLA   0X03                        ;按鍵"B",鍵值"8",兩位標識即="0X03"
        XOR     KEYREG,A
        BTSC    STATUS,Z
        LGOTO   KEY2_PRO

        MOVLA   0X0C                        ;按鍵"C",鍵值"4",兩位標識即="0X0C"
        XOR     KEYREG,A
        BTSC    STATUS,Z
        LGOTO   KEY3_PRO

        MOVLA   0XCC                        ;按鍵"D",鍵值"5",兩位標識即="0XCC"
        XOR     KEYREG,A
        BTSC    STATUS,Z
        LGOTO   KEY4_PRO

        MOVLA        0X30                        ;按鍵"ON/OFF",鍵值"2",兩位標識即="0X30"
        XOR        KEYREG,A
        BTSC        STATUS,Z
        LGOTO        KEY5_ON0FF_PRO

        MOVLA   0X0F                        ;按鍵"延時"或者"按鍵(B+C)",鍵值"5",兩位標識即="0X0F"
        XOR     KEYREG,A
        BTSC    STATUS,Z
        LGOTO   KEY6_DELAY_PRO
        LGOTO   MAIN
;=======================================================
;遙控按鍵, 遙控功能處理
;=======================================================
KEY1_PRO:
;        LCALL        BUZZ_200MS
;        BS        FREG_1,DELAY200MS_FLAG
        BC        FREG_1,DELAY_FLAG        ;清除按鍵延時標志
        BC        FREG_2,R_AGAINST
        BTSS        FREG_1,OUT1_FLAG
        LGOTO        WHITE_BULB_ON
       
        BC        RA,WHITE_BULB
        BC        FREG_1,OUT1_FLAG
        LGOTO        MAIN
       
WHITE_BULB_ON:
        BS        RA,WHITE_BULB
        BS        FREG_1,OUT1_FLAG
        LGOTO        MAIN
;----------------------------------       
KEY2_PRO:
;        LCALL        BUZZ_200MS
;        BS        FREG_1,DELAY200MS_FLAG
        BC        FREG_1,DELAY_FLAG        ;清除按鍵延時標志
        BC        FREG_2,R_AGAINST
        BTSS        FREG_1,OUT2_FLAG
        LGOTO        BLUE_BULB_ON

        BC        RA,BLUE_BULB
        BC        FREG_1,OUT2_FLAG
        LGOTO        MAIN
       
BLUE_BULB_ON:
        BS        RA,BLUE_BULB
        BS        FREG_1,OUT2_FLAG
        LGOTO        MAIN
;----------------------------------       
KEY3_PRO:
;        LCALL        BUZZ_200MS
;        BS        FREG_1,DELAY200MS_FLAG
        BC        FREG_1,DELAY_FLAG        ;清除按鍵延時標志
        BC        FREG_2,R_AGAINST
        BTSS        FREG_1,OUT3_FLAG
        LGOTO        BROWN_BULB_ON

        BC        RA,BROWN_BULB
        BC        FREG_1,OUT3_FLAG
        LGOTO        MAIN
       
BROWN_BULB_ON:
        BS        RA,BROWN_BULB
        BS        FREG_1,OUT3_FLAG
        LGOTO        MAIN
;----------------------------------
KEY4_PRO:
;        LCALL        BUZZ_200MS
        BC        FREG_1,DELAY_FLAG        ;清除按鍵延時標志
        BTSC        FREG_2,R_K2                ;"三路"或"四路"電路判斷
        LGOTO        AGAINST_THEFT_PR0        ;進入"三路電路"防盜鍵程序
        BC        FREG_2,R_AGAINST
        BTSS        FREG_1,OUT4_FLAG
        LGOTO        YELLOW_BULB_ON

        BC        RB,YELLOW_BULB
        BC        FREG_1,OUT4_FLAG
;        BS        FREG_1,DELAY200MS_FLAG
        LGOTO        MAIN
       
YELLOW_BULB_ON:       
        BS        RB,YELLOW_BULB
        BS        FREG_1,OUT4_FLAG
;        BS        FREG_1,DELAY200MS_FLAG
        LGOTO        MAIN
       
AGAINST_THEFT_PR0:
        BTSC        FREG_2,R_AGAINST
        LGOTO        AGAINST_THEFT_OFF
        LCALL        WHITE_BULB_FLISH
        LCALL        WHITE_BULB_FLISH
        LCALL        WHITE_BULB_FLISH
        MOVLA        0X02                        ;按鍵取反讓其閃爍停止
        XOR        RA,M       
       
        MOVLA        0X07                        ;FREG_1,OUT1_FLAG/2/3/4
        AND        FREG_1,A                ;判斷是否有負載輸出
        BTSS        STATUS,Z
        BS        FREG_1,DELAY_FLAG        ;表有負載輸出,延時1分鐘后關閉
        BS        FREG_2,R_AGAINST
        LGOTO        AGAINST_THEFT_PR0_END
       
AGAINST_THEFT_OFF:
        LCALL        WHITE_BULB_FLISH
        MOVLA        0X02                        ;按鍵取反讓其閃爍停止
        XOR        RA,M
        BC        FREG_2,R_AGAINST
        LGOTO        AGAINST_THEFT_PR0_END
       
AGAINST_THEFT_PR0_END:
;        LCALL        RESTART_TIME
        CLR        MODEREG
;        CLR        R_BUZ
;        BS        FREG_1,DELAY200MS_FLAG
        LGOTO        MAIN
;----------------------------------
KEY5_ON0FF_PRO:
;        LCALL        BUZZ_200MS
;        BS        FREG_1,DELAY200MS_FLAG
        BC        FREG_1,DELAY_FLAG        ;清除按鍵延時標志
        BC        FREG_2,R_AGAINST
        MOVLA        0X0F                        ;FREG_1,OUT1_FLAG/2/3/4
        AND        FREG_1,A
        BTSS        STATUS,Z
        LGOTO        WHOLE_BULB_OFF                ;只要有一盞燈亮,則跳,全熄滅

       
        MOVLA        0X0E                        ;點亮白/藍/棕三盞燈,關閉負載
        MOVAM        RA
        MOVLA        0X00
        BTSS        FREG_2,R_K2
        MOVLA        0X01                        ;點亮黃燈
        MOVAM        RB
        MOVLA        0X0F
        IOR        FREG_1,M                ;打開四盞燈的點亮標志       
        LGOTO        MAIN
       
WHOLE_BULB_OFF:
        MOVLA        0X01
        MOVAM        RA                        ;熄滅白/藍/棕三盞燈
        CLR        RB                        ;熄滅黃燈
        MOVLA        0XF0
        AND        FREG_1,M                ;清除四盞燈的點亮標志
        LGOTO        MAIN
;----------------------------------
KEY6_DELAY_PRO:
;        LCALL        BUZZ_200MS
        BC        FREG_2,R_AGAINST
;        BS        FREG_1,DELAY200MS_FLAG
        BS        FREG_1,DELAY_FLAG        ;按鍵延時標志

        BTSS        FREG_2,R_K1                ;檢測延時L1燈,是否閃爍
        LGOTO        STATE_BEGIN                ;FREG_2.R_K1=0不閃爍
       
        LCALL        WHITE_BULB_FLISH
        MOVLA        0X02                        ;按鍵取反讓其閃爍停止
        XOR        RA,M

        CLR        MODEREG
       
        LGOTO        MAIN
;=======================================================
;讀碼子程序
;=======================================================
SEND_CODE_PRO:
               MOVLA   0XC4                        ;0010,0011,READ腳設置輸入
               IODIR   RB
               LGOTO   $+1

               BTSC    RB,READ                        ;檢測低電平,高電平跳出
               LGOTO   $-1

               BTSS    RB,READ                        ;檢測高電平,低電平跳出
               LGOTO   $-1

               MOVLA   0X84                        ;0010,0001,READ腳設置輸輸出
               IODIR   RB
               BC      RB,READ                        ;輸出電平信號,給讀碼器件
               MOVLA   0X21                        ;低電平延時33(21H)*3指令周期
               MOVAM   CNT

               DECSZ   CNT,M
               LGOTO   $-1

               MOVLA   0XC4                        ;1000,1100,READ腳設置輸入       
               IODIR   RB
              
               MOVLA   0X14                        ;20(14H)*5個指令周期是否接收
               MOVAM   CNT                        ;到讀碼器發送出的高電平
               BTSS    RB,READ
               LGOTO   READ_CODE_SEND
              
               DECSZ   CNT,M
               LGOTO   $-3
               LGOTO   SEND_CODE_PRO                ;20*5指令周期未能收到高電平,返回重讀
              
READ_CODE_SEND:                                       
               BTSS    RB,READ                        ;檢測低電平,高電平逃過
               LGOTO   $-1                        ;其高電平為2262,A0

               BTSC    RB,READ                        ;檢測高電平,低電平跳過
               LGOTO   $-1                        ;其低電平為2262,A0

               LCALL   RX
               BTSC    STATUS,C
               LGOTO   SEND_CODE_PRO

        BTSS    RB,READ                        ;檢測高電平,低電平跳出
               LGOTO   $-1
              
        MOVLA        0X00
               MOVAM        RB
               MOVLA   0X84
        IODIR   RB
       
               MOVLA   0XA3
               XOR     LCODE,C
               BTSS    STATUS,Z
               LGOTO   SEND_CODE_PRO

               LCALL   DELAY1

               LCALL   LOW_ADDRESS
               MOVAM   LCODE
               LCALL   HIGH_ADDRESS
               MOVAM   MCODE
              
               LCALL   TX
        LGOTO   BOOT_CONTR
;=======================================================
END
;=======================================================
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品日本中文字幕 | 日韩一区二区成人 | 精品国产免费一区二区三区演员表 | 久久久久久久一区 | 亚洲二区在线 | 亚洲最大av | 日本爱爱 | 日韩欧美亚洲一区 | av中文字幕网站 | 中文字幕91 | 国产综合欧美 | 久久久.com | 国产精品永久久久久 | 国产目拍亚洲精品99久久精品 | 一区二区三区四区视频 | 精品国产一区三区 | 中文字幕在线观看一区二区 | 中文字幕免费视频 | 日韩中文字幕在线视频 | cao视频| 一本一道久久a久久精品蜜桃 | 韩国久久 | 天天影视网天天综合色在线播放 | 国产99视频精品免视看9 | 国产精品视频久久久久久 | 日日射影院| wwwxxx日本在线观看 | 久久av网站 | 亚洲二区视频 | 久久久久久亚洲 | 91传媒在线观看 | 国产成人高清视频 | 日韩在线一区二区三区 | 2020国产在线 | 亚州一区二区三区 | 国产伦精品一区二区三区精品视频 | 精品一区在线免费观看 | 国产九九精品视频 | 国产精品视频免费观看 | 中文字幕第90页 | 成人av电影免费在线观看 |