请选择 进入手机版 | 继续访问电脑版

EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 618|回复: 0

[转帖] pic单片机驱动SM311电源开关汇编程序

[复制链接]

137

主题

0

回帖

336

E币

助理工程师

Rank: 3Rank: 3

积分
274
发表于 2017-4-25 14:33:54 | 显示全部楼层 |阅读模式
  1. ;LIST P=SM311, CLOCK=4MHZ, WDT=DISBALE,INT=ENABLE
  2. ;-----------------------------------------------------------
  3. ;     LOUDOUT  RA0  1             14  RA1  WHITE_BULB
  4. ;   SIGNAL_IN  RB7  2             13  RA2  BLUE_BULB
  5. ;        READ  RB6  3             12  RA3  BROWN_BULB
  6. ;              VDD  4             11  VSS  
  7. ;          K1  RB5  5             10  RB0  YELLOW_BULB
  8. ;          K2  RB4  6             9   RB1  BUZ  
  9. ;       RESET  RB3  7             8   RB2  POWER_CUT  
  10. ;-----------------------------------------------------------
  11. INDF            EQU    00H
  12. TMR0            EQU    01H
  13. PCL             EQU    02H
  14. STATUS          EQU    03H
  15. FSR             EQU    04H
  16. RA              EQU    05H
  17. ;-----------------------------------------------------------
  18. LOUDOUT            EQU    0
  19. WHITE_BULB        EQU    1
  20. BLUE_BULB        EQU    2
  21. BROWN_BULB        EQU    3
  22. ;-----------------------------------------------------------
  23. RB              EQU    06H
  24. ;-----------------------------------------------------------
  25. YELLOW_BULB            EQU    0
  26. BUZ                EQU    1
  27. POWER_CUT        EQU    2
  28. K2                EQU    4
  29. K1                EQU    5
  30. READ                EQU    6
  31. SIGNAL_IN        EQU    7
  32. ;-----------------------------------------------------------
  33. IRQM            EQU    09H
  34. ;-----------------------------------------------------------
  35. TM0M            EQU    0
  36. PBM             EQU    1
  37. INTM            EQU    7
  38. ;-----------------------------------------------------------
  39. IRQF            EQU    0AH
  40. ;-----------------------------------------------------------
  41. TM0F            EQU    0
  42. PBF             EQU    1
  43. ;-----------------------------------------------------------
  44. PA_PDM          EQU    0BH
  45. PB_PUP          EQU    0CH
  46. PB_PDM          EQU    0DH
  47. PB_POD          EQU    0EH
  48. WAKEUP          EQU    0FH
  49. ;-----------------------------------------------------------
  50. A               EQU    0
  51. M               EQU    1  
  52. ;---STATUS REG----------------------------------------------
  53. C               EQU    0
  54. DC              EQU    1
  55. Z               EQU    2
  56. PD              EQU    3
  57. TO              EQU    4
  58. GP0             EQU    5
  59. GP1             EQU    6
  60. GP2             EQU    7
  61. ;---OPTION REG----------------------------------------------
  62. PS0             EQU    0
  63. PS1             EQU    1
  64. PS2             EQU    2
  65. PSA             EQU    3
  66. T0SE            EQU    4
  67. T0CS            EQU    5
  68. INTEDG          EQU    6
  69. ;---PA_PDM REG----------------------------------------------
  70. DB0                    EQU    0
  71. DB1                    EQU    1
  72. DB2                    EQU    2
  73. EXTEN                  EQU    6
  74. RTCEN                  EQU    7
  75. ;---PB_POD REG----------------------------------------------
  76. OB0                    EQU    0
  77. OB1                    EQU    1
  78. OB2                    EQU    2
  79. OB4                    EQU    4
  80. OB5                    EQU    5
  81. OB6                    EQU    6
  82. OB7                    EQU    7
  83. ;---WAKEUP REG----------------------------------------------
  84. EN0                    EQU    0
  85. EN1                    EQU    1
  86. EN2                    EQU    2
  87. EN4                    EQU    4
  88. EN5                    EQU    5
  89. EN6                    EQU    6
  90. EN7                    EQU    7
  91. ;-----------------------------------------------------------
  92. ;CONSUMER REGISTER
  93. ;-----------------------------------------------------------
  94. MAXDATA              EQU    .250     ; 高低电平宽度最大值
  95. ;-----------------------------------------------------------
  96. CODE_TOTAL         EQU          20H
  97. LCODE           EQU            21H            ; 记录一帧码的低8位数据
  98. MCODE           EQU            22H            ; 记录一帧码的中8位数据
  99. HCODE           EQU            23H            ; 记录一帧码的高8位数据                                                            
  100. ;-----------------------------------------------------------
  101. LBIT            EQU            25H     ; 记录'0'和'1'码的低电平宽度
  102. HBIT            EQU           26H     ; 记录'0'和'1'码的高电平宽度

  103. LCODE_EE         EQU           27H     ; 记录EEPROM低8位数据
  104. MCODE_EE         EQU           28H     ; 记录EEPROM中8位数据
  105. HCODE_EE         EQU           29H     ; 记录EEPROM高4位数据

  106. MODEREG          EQU           2AH     ; 按键定时器
  107. SHIFT            EQU           2BH

  108. KEYREG           EQU           2CH
  109. CNT_LW           EQU           2DH     ; 定时寄存器
  110. CNT_HI           EQU           2EH
  111. ;-----------------------------------------------------------
  112. FRAME            EQU           2FH     ;
  113. ;-----------------------------------------------------------
  114. CNT                EQU            30H
  115. CNT2                EQU            31H
  116. DEL1                EQU        32H
  117. CNT_32MS        EQU        33H
  118. CNT_4S                EQU        34H
  119. CNT_1M                EQU        35H

  120. W_REG                EQU        36H
  121. S_REG                EQU        37H
  122. R_BUZ                EQU        38H
  123. ;-----------------------------------------------------------
  124. LREG                EQU        3DH        ; 手动开关瞬间按灯闪烁顺序
  125.                                 ; LREG值为"1":白灯亮
  126.                                 ; LREG值为"2":白灯+蓝灯亮
  127.                                 ; LREG值为"3":白灯+蓝灯+棕灯亮
  128.                                 ; LREG值为"4":白灯+蓝灯+棕灯+黄灯亮
  129. ;-----------------------------------------------------------
  130. FREG_1            EQU            3EH
  131. UP_FLAG                EQU        7        ; FREG_1.7 上电标志位。
  132. DELAY_FLAG         EQU          6        ; FREG_1.6 按键延时1分钟标志
  133. DELAY200MS_FLAG EQU          5          ; FREG_1.5 延时10秒标志位。  
  134. REMOTE_FLAG          EQU           4          ; FREG_1.4 遥控按键成功标志位。
  135. OUT4_FLAG        EQU        3          ; FREG_1.3 4路输出状态标志位。
  136. OUT3_FLAG        EQU            2          ; FREG_1.2 3路输出状态标志位。
  137. OUT2_FLAG           EQU            1          ; FREG_1.1 2路输出状态标志位。
  138. OUT1_FLAG           EQU            0          ; FREG_1.0 1路输出状态标志位。
  139. ;-----------------------------------------------------------
  140. FREG_2                EQU        3FH
  141. R_K1                EQU        0        ;'0'->延时1路输出不闪动,'1'->延时1路输出闪动
  142. R_K2                EQU        1        ;'0'->四路遥控输出,'1'->三路输出
  143. R_LOADOUT        EQU        2        ;'0'->无负载输出,'1'->有负载输出
  144. R_80M                EQU        3        ;80分钟定时器,'0'->
  145. R_AGAINST        EQU        4        ;'0'->防盗功能未开启,'1'->防盗功能已开启
  146. R_AGAINST_L1        EQU        5        ;'0'->L1灯闪两次,'1'->L1灯闪一次
  147. OUT_ONOFF        EQU        6        ;ON/OFF松键标志
  148. OUT_DLEY        EQU        7        ;DLEAY松键标志
  149. ;=======================================================
  150. ;=======================================================
  151.         ORG     3FFH
  152.         LGOTO   0X00
  153.         ORG        0X00
  154.         LGOTO        BOOT
  155.         ORG     3FEH
  156.         LGOTO   INTERRUPT_TMR0
  157. ;=======================================================
  158. ;2262,8位地址码
  159. ;=======================================================
  160.         ORG        001H
  161. LOW_ADDRESS:
  162.         RETLA        0X30
  163. HIGH_ADDRESS:
  164.         RETLA        0XEF
  165. ;========================================================
  166. ;中断子程序
  167. ;========================================================
  168.         ORG        004H
  169. INTERRUPT_TMR0:
  170.         MOVAM        W_REG
  171.         SWAP        STATUS,A
  172.         MOVAM        S_REG

  173. INT_TMR0_START:
  174.         BTSC        IRQF,TM0F
  175.         LGOTO        INT_TMR0_DEAL

  176. INT_TMR0_END:
  177.         BC        IRQF,TM0F
  178.         SWAP        S_REG,A
  179.         MOVAM        STATUS
  180.         SWAP        W_REG,M
  181.         RETI
  182.       
  183. INT_TMR0_DEAL:
  184.         MOVLA        .250
  185.         MOVAM        TMR0
  186.       
  187.         INC        CNT_32MS,M
  188.         BTSC        FREG_1,REMOTE_FLAG
  189.         INC        MODEREG,M        ;按键松键时间寄存器

  190. ;        BTSC        FREG_1,DELAY200MS_FLAG
  191. ;        INC        R_BUZ,M
  192.       
  193.         MOVLA        .125
  194.         SUB        CNT_32MS,A
  195.         BTSS        STATUS,Z
  196.         LGOTO        INT_TMR0_END

  197.         CLR        CNT_32MS
  198.         INC        CNT_4S,M
  199. ;        MOVLA   .1
  200.         MOVLA        .15
  201.         SUB        CNT_4S,A
  202.         BTSS        STATUS,Z
  203.         LGOTO        INT_TMR0_END

  204.         CLR        CNT_4S
  205.         INC        CNT_1M,M
  206.         MOVLA        .100                ;80分钟定时器
  207.         SUB        CNT_1M,A
  208.         BTSS        STATUS,Z
  209.         LGOTO        INT_TMR0_END

  210.         CLR        CNT_32MS
  211.         CLR        CNT_4S
  212.         CLR        CNT_1M
  213.         LGOTO        INT_TMR0_END
  214. ;=======================================================      
  215. ;延时子程序
  216. ;=======================================================
  217. DELAY:
  218.        MOVLA    0XFF
  219.        MOVAM    DEL1
  220. LOOP_DELAY:
  221.        CLRWDT
  222.        LGOTO        $+1
  223.        LGOTO        $+1
  224.        LGOTO        $+1
  225.        LGOTO        $+1
  226.        LGOTO        $+1
  227.        DECSZ    DEL1,M
  228.        LGOTO    LOOP_DELAY
  229.        RETLA    0X00      
  230. ;----------------------------------
  231. DELAY1:
  232.         LGOTO        $+1                ;2
  233.         LGOTO        $+1             ;2
  234. DELAY2: NOP                     ;1
  235. DELAY3: NOP                     ;1
  236. DELAY4: NOP                     ;1
  237. DELAY5: NOP                     ;1
  238. DELAY6: NOP                     ;1
  239. DEALY7: LGOTO        $+1             ;2
  240. DELAY8: NOP                     ;1
  241. DELAY9: NOP                     ;1
  242. DEALYA: NOP                     ;1
  243. DELAYB: NOP                     ;1
  244.         RETLA   0X00
  245. ;=======================================================
  246. ;重新计时子程序
  247. ;=======================================================
  248. RESTART_TIME:
  249.         MOVLA        .250
  250.         MOVAM        TMR0
  251.         CLR        CNT_32MS
  252.         CLR        CNT_4S
  253.         CLR        CNT_1M
  254.         RETLA        0X00
  255. ;=======================================================
  256. ;L1灯即:WHITE_BULB,闪烁一次子程序
  257. ;=======================================================
  258. WHITE_BULB_FLISH:
  259.         MOVLA        0X02                                ;按键取反让其闪烁
  260.         XOR        RA,M

  261.         MOVLA        .168
  262.         MOVAM        SHIFT

  263.         MOVLA        .255
  264.         MOVAM        CNT
  265.       
  266.         NOP
  267.         NOP
  268.         NOP
  269.         NOP
  270.       
  271.         DECSZ        CNT,M
  272.         LGOTO        $-3
  273.       
  274.         DECSZ        SHIFT,M
  275.         LGOTO        $-7

  276.         RETLA        0X00
  277. ;=======================================================
  278. ;按键延时1与延时80分钟定时关闭子程序
  279. ;=======================================================
  280. TST_KEYDELAY:      
  281.         MOVLA        .3                        ;去遥控器按键抖动
  282.         SUB        MODEREG,A                ;松开键
  283.         BTSS        STATUS,C
  284.         LGOTO        TST_KEYDELAY_END
  285.       
  286.         MOVLA        0X07
  287.         BTSS        FREG_2,R_K2                ;判断是三路或者是四路遥控
  288.         MOVLA        0X0F
  289.         AND        FREG_1,A
  290.         BTSC        STATUS,Z
  291.         LGOTO        OPEN_LOAD
  292.         BC        RA,LOUDOUT
  293.         LGOTO        LOAD_JUDGE_END
  294.       
  295. OPEN_LOAD:
  296.         BS        RA,LOUDOUT                ;如果没有灯亮,打开负载
  297.       
  298. LOAD_JUDGE_END:      
  299. ;        BTSS        FREG_1,DELAY200MS_FLAG
  300. ;        LGOTO        BUZ100MS_END
  301. ;        MOVLA        .7
  302. ;        SUB        R_BUZ,A
  303. ;        BTSS        STATUS,C
  304. ;        LGOTO        OPEN_BUZPRO
  305. ;        LGOTO        OFF_BUZPRO
  306.       
  307. ;OPEN_BUZPRO:
  308. ;        BS        RB,BUZ
  309. ;        LGOTO        BUZ100MS_END
  310. ;OFF_BUZPRO:
  311. ;        BC        RB,BUZ
  312. ;        CLR        R_BUZ
  313. ;        BC        FREG_1,DELAY200MS_FLAG
  314.       
  315. ;BUZ100MS_END:
  316.         BTSS        FREG_1,REMOTE_FLAG        ;遥控成功标志检测,
  317.         LGOTO        DLEAY_START
  318.                
  319. ;        BTSS        FREG_1,DELAY_FLAG
  320. ;        LGOTO        STATE_BEGIN
  321. ;
  322. ;        BTSS        FREG_2,R_K1                ;检测延时L1灯,是否闪烁
  323. ;        LGOTO        STATE_BEGIN                ;FREG_2.R_K1=0不闪烁
  324. ;      
  325. ;        BTSC        FREG_2,R_AGAINST
  326. ;        LGOTO        STATE_BEGIN                ;当防盗功能开启后灯不用再闪烁
  327. ;
  328. ;        BTSC        FREG_1,DELAY200MS_FLAG
  329. ;        LGOTO        STATE_BEGIN
  330. ;      
  331. ;        LCALL        WHITE_BULB_FLISH
  332. ;        MOVLA        0X02                        ;按键取反让其闪烁停止
  333. ;        XOR        RA,M

  334. STATE_BEGIN:
  335.         LCALL        RESTART_TIME
  336.         BC        FREG_1,REMOTE_FLAG        ;设置按键松开标志
  337.                

  338. DLEAY_START:
  339.         BTSC        FREG_1,DELAY_FLAG        ;延时按键标志=0
  340.         LGOTO        DELAY_1M_PRO
  341.         BTSS        FREG_2,R_AGAINST        ;检测防盗是否开启
  342.             LGOTO        TST_KEYDELAY_END        ;防盗没有开启,直接返回
  343.         LGOTO        AGAINST_80M_PRO                ;进入防盗功能子程序
  344.       
  345. DELAY_1M_PRO:
  346.         MOV        CNT_1M,A
  347.         BTSC        STATUS,Z
  348.         LGOTO        TST_KEYDELAY_END        ;CNT_1M=0,未到1分钟返回

  349.         MOVLA        0X1
  350.         MOVAM        RA
  351.         CLR        RB
  352.         MOVLA        0XB0
  353.         AND        FREG_1,M                ;清除四盏灯的点亮标志,和延时按键标志  
  354.         LCALL        RESTART_TIME
  355.         LGOTO        TST_KEYDELAY_END
  356.       
  357. AGAINST_80M_PRO:      
  358.             BTSC        FREG_2,R_80M                ;0->应进入关闭的80分钟,1->应输出全部负载4分钟
  359.             LGOTO        AGAINST_L1_SHINE4M

  360.         MOVLA        .80                        ;80分钟定时
  361. ;       MOVLA   .4
  362.         SUB        CNT_1M,A      
  363.         BTSS        STATUS,Z
  364.         LGOTO        TST_KEYDELAY_END
  365.       
  366.           BS        FREG_2,R_80M                ;80分钟,将R_80标志置1,
  367.           MOVLA        0X0E
  368.         MOVAM        RA                        ;点亮L1/L2/L3
  369.         MOVLA   0X0F
  370.         IOR     FREG_1,A
  371.         MOVAM   FREG_1
  372.         LGOTO        AGAINST_L1_SHINE_CHANGE
  373.          
  374. AGAINST_L1_SHINE4M:
  375.         MOVLA        .4
  376. ;        MOVLA   .1
  377.         SUB        CNT_1M,A                ;4分钟定时
  378.         BTSS        STATUS,Z
  379.         LGOTO        TST_KEYDELAY_END
  380.       
  381.         BC        FREG_2,R_80M
  382.         MOVLA        0X00
  383.         MOVAM        RA
  384.         MOVLA        0XF8
  385.         AND        FREG_1,A                ;清除灯的标志
  386.         MOVAM        FREG_1
  387.       
  388. AGAINST_L1_SHINE_CHANGE:
  389.         BC        FREG_1,REMOTE_FLAG
  390.         LCALL        RESTART_TIME
  391.         LGOTO        TST_KEYDELAY_END

  392. ;=======================================================
  393. ;掉电子程序
  394. ;=======================================================
  395. POWER_CUT_PRO:
  396.         MOVLA        00H                ;关闭中断
  397.         MOVAM        IRQM

  398.         MOVLA        0X00
  399.         MOVAM        RA                        ;熄灭白/蓝/棕三盏灯
  400.         MOVAM        RB                        ;熄灭黄灯
  401.       
  402.         MOVLA        .8
  403.         MOVAM        CNT
  404.         LCALL        DELAY
  405.         LCALL        DELAY
  406.       
  407.         DECSZ        CNT,M
  408.         LGOTO        $-3
  409.       
  410.                BTSC    RB,POWER_CUT
  411.         LGOTO        HAND_SWITCH_PRO_END
  412.       
  413. POWER_CUT_PRO_LOOP:
  414.         BTSS        RB,POWER_CUT
  415.         LGOTO        POWER_CUT_PRO_LOOP
  416.       
  417.         BTSS        FREG_1,UP_FLAG                ;检测掉电标志,
  418.         LGOTO        POWER_CUT_PRO_END        ;"0"表示未掉电,"1"表示掉电
  419.       
  420.                INC        LREG,M                        ;手动开关的4个状态
  421.                MOVLA        .5                        ;四路遥控
  422.                BTSC        FREG_2,R_K2                ;判断是三路和四路遥控
  423.                MOVLA        .4                        ;三路遥控
  424.                SUB        LREG,A
  425.                BTSS        STATUS,C
  426.                LGOTO        HAND_SWITCH_PRO
  427.                MOVLA        .1
  428.                MOVAM        LREG
  429.                LGOTO        HAND_SWITCH_PRO
  430.               
  431. POWER_CUT_PRO_END
  432.         BS        FREG_1,UP_FLAG                ;将掉电标志设为"1"
  433. ;        MOVLA        0X00
  434. ;        MOVAM        RA                        ;熄灭白/蓝/棕三盏灯
  435. ;        MOVAM        RB                        ;熄灭黄灯
  436.         LGOTO        POWER_CUT_PRO_LOOP   
  437. ;=======================================================
  438. ;掉电上电后灯状态
  439. ;=======================================================
  440. HAND_SWITCH_PRO:
  441.         BC        FREG_1,UP_FLAG                ;将掉电标志值为"0"
  442.         BC        FREG_1,DELAY_FLAG        ;清除按键延时标志
  443.         BC        FREG_2,R_AGAINST
  444.       
  445.         MOVLA        .1
  446.         MOVAM        CNT
  447.         LCALL        DELAY
  448.         LCALL        DELAY
  449.       
  450.         DECSZ        CNT,M
  451.         LGOTO        $-3
  452.       
  453.         MOVLA        .1
  454.         SUB        LREG,A
  455.         BTSC        STATUS,Z
  456.         LGOTO        SWITCH_1_PRO

  457.         MOVLA        .2
  458.         SUB        LREG,A
  459.         BTSC        STATUS,Z
  460.         LGOTO        SWITCH_2_PRO

  461.         MOVLA        .3
  462.         SUB        LREG,A
  463.         BTSC        STATUS,Z
  464.         LGOTO        SWITCH_3_PRO

  465. ;        MOVLA        0X0E                        ;点亮白/蓝/棕三盏灯
  466. ;        MOVAM        RA
  467. ;        MOVLA        0X01                        ;点亮黄灯
  468. ;        MOVAM   RB
  469.         BS        RA,WHITE_BULB
  470.         BS        RA,BLUE_BULB
  471.         BS        RA,BROWN_BULB
  472.         BS        RB,YELLOW_BULB
  473.       
  474.         MOVLA        0X0F
  475.         IOR        FREG_1,A
  476.         MOVAM        FREG_1
  477.         LGOTO        HAND_SWITCH_PRO_END
  478.       
  479. SWITCH_1_PRO:
  480. ;        MOVLA        0X00
  481. ;        MOVAM        RB
  482. ;        MOVLA        0X02
  483. ;        MOVAM        RA                        ;点亮白灯
  484.         BS        RA,WHITE_BULB                ;点亮白灯
  485.         MOVLA        0XF1
  486.         AND        FREG_1,A
  487.         MOVAM        FREG_1
  488.         BS        FREG_1,OUT1_FLAG
  489.         LGOTO        HAND_SWITCH_PRO_END
  490.       
  491. SWITCH_2_PRO:
  492. ;        MOVLA        0X00
  493. ;        MOVAM        RB
  494. ;        MOVLA        0X06                        ;点亮白/蓝两盏灯
  495. ;        MOVAM        RA
  496.         BS        RA,WHITE_BULB                ;点亮白/蓝两盏灯
  497.         BS        RA,BLUE_BULB
  498.         MOVLA        0XF3
  499.         AND        FREG_1,A
  500.         MOVAM        FREG_1
  501.         MOVLA        0X03
  502.         IOR        FREG_1,A
  503.         MOVAM        FREG_1
  504.         LGOTO        HAND_SWITCH_PRO_END
  505.       
  506. SWITCH_3_PRO:
  507. ;        MOVLA        0X00
  508. ;        MOVAM        RB
  509. ;        MOVLA        0X0E                        ;点亮白/蓝/棕三盏灯
  510. ;        MOVAM        RA
  511.         BS        RA,WHITE_BULB
  512.         BS        RA,BLUE_BULB
  513.         BS        RA,BROWN_BULB
  514.         BC        FREG_1,OUT4_FLAG
  515.         MOVLA        0X07
  516.         IOR        FREG_1,A
  517.         MOVAM        FREG_1
  518.         LGOTO        HAND_SWITCH_PRO_END
  519.       
  520. HAND_SWITCH_PRO_END:
  521.         BTSC        FREG_1,OUT1_FLAG
  522.         BS        RA,WHITE_BULB
  523.         BTSC        FREG_1,OUT2_FLAG
  524.         BS        RA,BLUE_BULB
  525.         BTSC        FREG_1,OUT3_FLAG
  526.         BS        RA,BROWN_BULB
  527.         BTSC        FREG_1,OUT4_FLAG
  528.         BS        RB,YELLOW_BULB
  529.         LCALL        RESTART_TIME
  530.         MOVLA        81H
  531.         MOVAM        IRQM
  532.         LGOTO        MAIN
  533. ;=======================================================
  534. ;接收读码器发送的码型
  535. ;=======================================================
  536. RX:
  537.         CLR        LBIT
  538.       
  539. REC_LOW_LEVEL:                                ;接收电平信号,并记录其宽度
  540.         BTSC        RB,READ               
  541.         LGOTO        RX_TOTAL
  542.         DECSZ        LBIT,M                        ;所接收到的为,2262,A0低电平宽度
  543.         LGOTO        REC_LOW_LEVEL
  544.       
  545. RX_ERROR:                                ; STATUS.C=1,返回错误信息。
  546.         BS        STATUS,C
  547.         RETLA        0X00
  548.       
  549. ;----------------------------------      
  550. RX_TOTAL:
  551.         MOVLA        0X08
  552.         MOVAM         CNT
  553.       
  554. RX_LOOP:      
  555.         CLR        HBIT
  556.       
  557. RX_HIGH_LEVEL:      
  558.         BTSS        RB,READ
  559.         LGOTO        RX_JUDGE
  560.         DECSZ        HBIT,M                        ;记录高电平的宽度
  561.         LGOTO        RX_HIGH_LEVEL
  562.         LGOTO        RX_ERROR
  563.       
  564. RX_JUDGE:      
  565.         MOV        LBIT,A
  566.         SUB        HBIT,A                        ;HBIT>LBIT,则:A=1
  567.         RR        MCODE,M
  568.         RR        LCODE,M
  569.         CLR        HBIT
  570.       
  571. RX_LOW_LEVEL:                                ;低电平持续时间检测
  572.         BTSC        RB,READ
  573.         LGOTO        RX_JUDGE_1                ;高电平,跳转RX_JUDGE_1
  574.         DECSZ        HBIT,M
  575.         LGOTO        RX_LOW_LEVEL
  576.         LGOTO        RX_ERROR                ;低电平时间过长,错误返回。
  577.       
  578. RX_JUDGE_1:      
  579.         MOV        LBIT,A
  580.         SUB        HBIT,A
  581.         RR        MCODE,M
  582.         RR        LCODE,M
  583.         DECSZ        CNT,M
  584.         LGOTO        RX_LOOP
  585. RX_OK:   
  586.         BC        STATUS,C
  587.         RETLA        0X00
  588.       
  589. ;=======================================================
  590. ;发送码型给外在读码器
  591. ;=======================================================
  592. TX:  
  593.                BS      RB,READ
  594.                MOVLA   0X84
  595.                IODIR   RB
  596.                MOVLA   0X07
  597.                MOVAM   CNT
  598.                BC      RB,READ
  599.                LCALL   DELAY9
  600.                DECSZ   CNT,M
  601.                LGOTO   $-2
  602.                BS      RB,READ
  603.                MOVLA   0X10
  604.                MOVAM   CNT
  605. BIT_OUT:
  606.                MOVLA   0X03
  607.                BTSC    LCODE,0
  608.                MOVLA   0X09
  609.                MOVAM   CNT2
  610.                RR      MCODE,M
  611.                RR      LCODE,M

  612.                LCALL   DELAY9
  613.                DECSZ   CNT2,M
  614.                LGOTO   $-2

  615.         CLRWDT
  616.                MOVLA   0X40
  617.                XOR     RB,M
  618.                DECSZ   CNT,M
  619.                LGOTO   BIT_OUT
  620.                LCALL   DELAY1
  621.                RETLA   0X00      
  622. ;=======================================================
  623. ;程序开始
  624. ;=======================================================  
  625. BOOT:
  626.         MOVLA        0X80
  627.         MOVAM        FREG_1                        ;上电时,将上电标志置"1"

  628.         CLR     CNT_32MS
  629.         CLR        CNT_4S
  630.         CLR        CNT_1M
  631.         CLR     LREG

  632.         CLR        RA
  633.         MOVLA        0X00                        ;RA0上电检测/RA1白灯/RA2蓝灯/RA3棕灯
  634.         IODIR        RA
  635.         CLR     RB
  636.         MOVLA        0XF4                        ;RB6读码输入/R7信号输入/R2电源检测
  637.         IODIR        RB

  638. ;        MOVLA        0X04                        B2 掉电检测下拉
  639. ;        MOVAM        PB_PDM               
  640. ;        MOVLA        0X70                        ;RB6 读码上拉
  641. ;        MOVAM        PB_PUP

  642.         MOVLA        0X74                        ;RB6 读码上拉
  643.         MOVAM        PB_PUP

  644.         LCALL          DELAY
  645.         LCALL          DELAY
  646.         LCALL          DELAY
  647.         LCALL          DELAY
  648.         LCALL          DELAY
  649.         LCALL          DELAY
  650.         LCALL          DELAY
  651.         LCALL          DELAY
  652.         LCALL          DELAY
  653.         LCALL          DELAY
  654.         LCALL          DELAY
  655.         LCALL          DELAY
  656.         LCALL          DELAY
  657.         LCALL          DELAY
  658.         BTSS           RB,READ
  659.         LGOTO        SEND_CODE_PRO

  660. BOOT_CONTR:

  661.         CLR     RB
  662.         MOVLA        0XF4                        ;RB6读码输入/R7信号输入/R2电源检测
  663.         IODIR        RB

  664.         CLR        FREG_2
  665.       
  666.         MOVLA        0X02                        ;三路
  667.         BTSS        RB,K2                        ;三路遥控或四路遥控选择
  668.         MOVLA        0X00                        ;四路
  669.         MOVAM        FREG_2

  670.         MOVLA        0X01                        ;L1闪烁
  671.         BTSS        RB,K1                        ;延时,L1灯是否闪烁
  672.         MOVLA        0X00                        ;L1不闪烁
  673.         IOR        FREG_2,A
  674.         MOVAM        FREG_2
  675.       
  676.         MOVLA   .250
  677.         MOVAM   TMR0
  678.         MOVLA        0XC6                        ;1:128分频
  679.         SELECT
  680.         MOVLA        81H
  681.         MOVAM        IRQM
  682.         BS        RA,WHITE_BULB
  683.         INC        LREG,M                        ;手动开关的4个状态
  684.         BS        FREG_1,OUT1_FLAG
  685. ;=======================================================         
  686. MAIN:      
  687.         LGOTO   TST_KEYDELAY

  688. TST_KEYDELAY_END:
  689.         LCALL   RECEIVE_2262
  690.         BTSS        STATUS,C
  691.         LGOTO        M_COMPARE

  692.         BTSS        RB,POWER_CUT                ;如上电状态断电状态则,
  693.         LGOTO        POWER_CUT_PRO                ;进入断电状态子程序
  694.       
  695.         LGOTO        MAIN      
  696. ;=======================================================
  697. ;HS2262, 接收,用两个位标识2262中的一个位,因有"F"码存在
  698. ;=======================================================
  699. RECEIVE_2262:
  700.         BTSS        RB,SIGNAL_IN
  701.         LGOTO   RECEIVE_2262_ERROR_END
  702.         CLR     CODE_TOTAL
  703.         CLR     HBIT
  704.       
  705. RECEIVE_2262_HIGH:
  706.              INC     HBIT,M
  707.              MOVLA   MAXDATA
  708.              SUB     HBIT,A
  709.              BTSC    STATUS,C
  710.              LGOTO   RECEIVE_2262_ERROR_END           
  711.              BTSC    RB,SIGNAL_IN
  712.              LGOTO   RECEIVE_2262_HIGH  
  713.             
  714.              CLR     LBIT

  715. RECEIVE_2262_JUDGE:
  716.              INC     CODE_TOTAL,M
  717.              MOVLA   .25
  718.              SUB     CODE_TOTAL,A
  719.              BTSC    STATUS,Z
  720.              LGOTO   RECEIVE_2262_END
  721.             
  722. RECEIVE_2262_LOW:
  723.              INC     LBIT,M
  724.              MOVLA   MAXDATA
  725.              SUB     LBIT,A
  726.              BTSC    STATUS,C
  727.              LGOTO   RECEIVE_2262_ERROR_END
  728.              BTSS    RB,SIGNAL_IN
  729.              LGOTO        RECEIVE_2262_LOW

  730.              MOV     LBIT,A
  731.              SUB     HBIT,A
  732.              RR      HCODE,M
  733.              RR      MCODE,M
  734.              RR      LCODE,M
  735.              CLR     HBIT
  736.              LGOTO   RECEIVE_2262_HIGH

  737. RECEIVE_2262_ERROR_END:
  738.              BS      STATUS,C                ;通过STATUS.C位置,来判断是否有遥控,或解码是否真确
  739.              RETLA   0X00                        ;"1",表示不正确
  740. RECEIVE_2262_END:     
  741.              BC      STATUS,C                ;STATUS.C=0,解码成功
  742.              RETLA   0X00
  743. ;=======================================================
  744. ;接收到的2262码型进行比较
  745. ;=======================================================
  746. M_COMPARE:
  747.         MOV     HCODE,A
  748.         MOVAM   KEYREG

  749.         LCALL   LOW_ADDRESS
  750.         XOR     LCODE,A
  751.         BTSS    STATUS,Z
  752.         LGOTO   MAIN

  753.         LCALL   HIGH_ADDRESS
  754.         XOR     MCODE,A
  755.         BTSS    STATUS,Z
  756.         LGOTO   MAIN

  757. REMOTE_KEY_JUDGE:
  758.         CLR        MODEREG
  759. ;        CLR        R_BUZ
  760.         BTSC    FREG_1,REMOTE_FLAG
  761.         LGOTO   MAIN
  762.         BS        FREG_1,REMOTE_FLAG
  763. ;        BS        FREG_1,DELAY200MS_FLAG

  764.         MOVLA   0XC0                        ;按键"A",键值"1",两位标识即="0XC0"
  765.         XOR     KEYREG,A
  766.         BTSC    STATUS,Z
  767.         LGOTO   KEY1_PRO

  768.         MOVLA   0X03                        ;按键"B",键值"8",两位标识即="0X03"
  769.         XOR     KEYREG,A
  770.         BTSC    STATUS,Z
  771.         LGOTO   KEY2_PRO

  772.         MOVLA   0X0C                        ;按键"C",键值"4",两位标识即="0X0C"
  773.         XOR     KEYREG,A
  774.         BTSC    STATUS,Z
  775.         LGOTO   KEY3_PRO

  776.         MOVLA   0XCC                        ;按键"D",键值"5",两位标识即="0XCC"
  777.         XOR     KEYREG,A
  778.         BTSC    STATUS,Z
  779.         LGOTO   KEY4_PRO

  780.         MOVLA        0X30                        ;按键"ON/OFF",键值"2",两位标识即="0X30"
  781.         XOR        KEYREG,A
  782.         BTSC        STATUS,Z
  783.         LGOTO        KEY5_ON0FF_PRO

  784.         MOVLA   0X0F                        ;按键"延时"或者"按键(B+C)",键值"5",两位标识即="0X0F"
  785.         XOR     KEYREG,A
  786.         BTSC    STATUS,Z
  787.         LGOTO   KEY6_DELAY_PRO
  788.         LGOTO   MAIN
  789. ;=======================================================
  790. ;遥控按键, 遥控功能处理
  791. ;=======================================================
  792. KEY1_PRO:
  793. ;        LCALL        BUZZ_200MS
  794. ;        BS        FREG_1,DELAY200MS_FLAG
  795.         BC        FREG_1,DELAY_FLAG        ;清除按键延时标志
  796.         BC        FREG_2,R_AGAINST
  797.         BTSS        FREG_1,OUT1_FLAG
  798.         LGOTO        WHITE_BULB_ON
  799.       
  800.         BC        RA,WHITE_BULB
  801.         BC        FREG_1,OUT1_FLAG
  802.         LGOTO        MAIN
  803.       
  804. WHITE_BULB_ON:
  805.         BS        RA,WHITE_BULB
  806.         BS        FREG_1,OUT1_FLAG
  807.         LGOTO        MAIN
  808. ;----------------------------------      
  809. KEY2_PRO:
  810. ;        LCALL        BUZZ_200MS
  811. ;        BS        FREG_1,DELAY200MS_FLAG
  812.         BC        FREG_1,DELAY_FLAG        ;清除按键延时标志
  813.         BC        FREG_2,R_AGAINST
  814.         BTSS        FREG_1,OUT2_FLAG
  815.         LGOTO        BLUE_BULB_ON

  816.         BC        RA,BLUE_BULB
  817.         BC        FREG_1,OUT2_FLAG
  818.         LGOTO        MAIN
  819.       
  820. BLUE_BULB_ON:
  821.         BS        RA,BLUE_BULB
  822.         BS        FREG_1,OUT2_FLAG
  823.         LGOTO        MAIN
  824. ;----------------------------------      
  825. KEY3_PRO:
  826. ;        LCALL        BUZZ_200MS
  827. ;        BS        FREG_1,DELAY200MS_FLAG
  828.         BC        FREG_1,DELAY_FLAG        ;清除按键延时标志
  829.         BC        FREG_2,R_AGAINST
  830.         BTSS        FREG_1,OUT3_FLAG
  831.         LGOTO        BROWN_BULB_ON

  832.         BC        RA,BROWN_BULB
  833.         BC        FREG_1,OUT3_FLAG
  834.         LGOTO        MAIN
  835.       
  836. BROWN_BULB_ON:
  837.         BS        RA,BROWN_BULB
  838.         BS        FREG_1,OUT3_FLAG
  839.         LGOTO        MAIN
  840. ;----------------------------------
  841. KEY4_PRO:
  842. ;        LCALL        BUZZ_200MS
  843.         BC        FREG_1,DELAY_FLAG        ;清除按键延时标志
  844.         BTSC        FREG_2,R_K2                ;"三路"或"四路"电路判断
  845.         LGOTO        AGAINST_THEFT_PR0        ;进入"三路电路"防盗键程序
  846.         BC        FREG_2,R_AGAINST
  847.         BTSS        FREG_1,OUT4_FLAG
  848.         LGOTO        YELLOW_BULB_ON

  849.         BC        RB,YELLOW_BULB
  850.         BC        FREG_1,OUT4_FLAG
  851. ;        BS        FREG_1,DELAY200MS_FLAG
  852.         LGOTO        MAIN
  853.       
  854. YELLOW_BULB_ON:      
  855.         BS        RB,YELLOW_BULB
  856.         BS        FREG_1,OUT4_FLAG
  857. ;        BS        FREG_1,DELAY200MS_FLAG
  858.         LGOTO        MAIN
  859.       
  860. AGAINST_THEFT_PR0:
  861.         BTSC        FREG_2,R_AGAINST
  862.         LGOTO        AGAINST_THEFT_OFF
  863.         LCALL        WHITE_BULB_FLISH
  864.         LCALL        WHITE_BULB_FLISH
  865.         LCALL        WHITE_BULB_FLISH
  866.         MOVLA        0X02                        ;按键取反让其闪烁停止
  867.         XOR        RA,M      
  868.       
  869.         MOVLA        0X07                        ;FREG_1,OUT1_FLAG/2/3/4
  870.         AND        FREG_1,A                ;判断是否有负载输出
  871.         BTSS        STATUS,Z
  872.         BS        FREG_1,DELAY_FLAG        ;表有负载输出,延时1分钟后关闭
  873.         BS        FREG_2,R_AGAINST
  874.         LGOTO        AGAINST_THEFT_PR0_END
  875.       
  876. AGAINST_THEFT_OFF:
  877.         LCALL        WHITE_BULB_FLISH
  878.         MOVLA        0X02                        ;按键取反让其闪烁停止
  879.         XOR        RA,M
  880.         BC        FREG_2,R_AGAINST
  881.         LGOTO        AGAINST_THEFT_PR0_END
  882.       
  883. AGAINST_THEFT_PR0_END:
  884. ;        LCALL        RESTART_TIME
  885.         CLR        MODEREG
  886. ;        CLR        R_BUZ
  887. ;        BS        FREG_1,DELAY200MS_FLAG
  888.         LGOTO        MAIN
  889. ;----------------------------------
  890. KEY5_ON0FF_PRO:
  891. ;        LCALL        BUZZ_200MS
  892. ;        BS        FREG_1,DELAY200MS_FLAG
  893.         BC        FREG_1,DELAY_FLAG        ;清除按键延时标志
  894.         BC        FREG_2,R_AGAINST
  895.         MOVLA        0X0F                        ;FREG_1,OUT1_FLAG/2/3/4
  896.         AND        FREG_1,A
  897.         BTSS        STATUS,Z
  898.         LGOTO        WHOLE_BULB_OFF                ;只要有一盏灯亮,则跳,全熄灭

  899.       
  900.         MOVLA        0X0E                        ;点亮白/蓝/棕三盏灯,关闭负载
  901.         MOVAM        RA
  902.         MOVLA        0X00
  903.         BTSS        FREG_2,R_K2
  904.         MOVLA        0X01                        ;点亮黄灯
  905.         MOVAM        RB
  906.         MOVLA        0X0F
  907.         IOR        FREG_1,M                ;打开四盏灯的点亮标志      
  908.         LGOTO        MAIN
  909.       
  910. WHOLE_BULB_OFF:
  911.         MOVLA        0X01
  912.         MOVAM        RA                        ;熄灭白/蓝/棕三盏灯
  913.         CLR        RB                        ;熄灭黄灯
  914.         MOVLA        0XF0
  915.         AND        FREG_1,M                ;清除四盏灯的点亮标志
  916.         LGOTO        MAIN
  917. ;----------------------------------
  918. KEY6_DELAY_PRO:
  919. ;        LCALL        BUZZ_200MS
  920.         BC        FREG_2,R_AGAINST
  921. ;        BS        FREG_1,DELAY200MS_FLAG
  922.         BS        FREG_1,DELAY_FLAG        ;按键延时标志

  923.         BTSS        FREG_2,R_K1                ;检测延时L1灯,是否闪烁
  924.         LGOTO        STATE_BEGIN                ;FREG_2.R_K1=0不闪烁
  925.       
  926.         LCALL        WHITE_BULB_FLISH
  927.         MOVLA        0X02                        ;按键取反让其闪烁停止
  928.         XOR        RA,M

  929.         CLR        MODEREG
  930.       
  931.         LGOTO        MAIN
  932. ;=======================================================
  933. ;读码子程序
  934. ;=======================================================
  935. SEND_CODE_PRO:
  936.                MOVLA   0XC4                        ;0010,0011,READ脚设置输入
  937.                IODIR   RB
  938.                LGOTO   $+1

  939.                BTSC    RB,READ                        ;检测低电平,高电平跳出
  940.                LGOTO   $-1

  941.                BTSS    RB,READ                        ;检测高电平,低电平跳出
  942.                LGOTO   $-1

  943.                MOVLA   0X84                        ;0010,0001,READ脚设置输输出
  944.                IODIR   RB
  945.                BC      RB,READ                        ;输出电平信号,给读码器件
  946.                MOVLA   0X21                        ;低电平延时33(21H)*3指令周期
  947.                MOVAM   CNT

  948.                DECSZ   CNT,M
  949.                LGOTO   $-1

  950.                MOVLA   0XC4                        ;1000,1100,READ脚设置输入      
  951.                IODIR   RB
  952.               
  953.                MOVLA   0X14                        ;20(14H)*5个指令周期是否接收
  954.                MOVAM   CNT                        ;到读码器发送出的高电平
  955.                BTSS    RB,READ
  956.                LGOTO   READ_CODE_SEND
  957.               
  958.                DECSZ   CNT,M
  959.                LGOTO   $-3
  960.                LGOTO   SEND_CODE_PRO                ;20*5指令周期未能收到高电平,返回重读
  961.               
  962. READ_CODE_SEND:                                       
  963.                BTSS    RB,READ                        ;检测低电平,高电平逃过
  964.                LGOTO   $-1                        ;其高电平为2262,A0

  965.                BTSC    RB,READ                        ;检测高电平,低电平跳过
  966.                LGOTO   $-1                        ;其低电平为2262,A0

  967.                LCALL   RX
  968.                BTSC    STATUS,C
  969.                LGOTO   SEND_CODE_PRO

  970.         BTSS    RB,READ                        ;检测高电平,低电平跳出
  971.                LGOTO   $-1
  972.               
  973.         MOVLA        0X00
  974.                MOVAM        RB
  975.                MOVLA   0X84
  976.         IODIR   RB
  977.       
  978.                MOVLA   0XA3
  979.                XOR     LCODE,C
  980.                BTSS    STATUS,Z
  981.                LGOTO   SEND_CODE_PRO

  982.                LCALL   DELAY1

  983.                LCALL   LOW_ADDRESS
  984.                MOVAM   LCODE
  985.                LCALL   HIGH_ADDRESS
  986.                MOVAM   MCODE
  987.               
  988.                LCALL   TX
  989.         LGOTO   BOOT_CONTR
  990. ;=======================================================
  991. END
  992. ;=======================================================
复制代码


积分规则
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-19 02:36 , Processed in 0.044578 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表