哪位大神有SNC27系列常用的简单汇编例程发一点出来好吗?

[复制链接]
查看5678 | 回复4 | 2017-10-18 11:10:36 | 显示全部楼层 |阅读模式
之前是学C语言的,找了份工作,全公司都用汇编,C用不上。
MCU | 2017-10-26 08:28:14 | 显示全部楼层
还是看规格看ASM指令介绍来的快
MARK | 2017-11-1 17:00:19 | 显示全部楼层
同求同求同求
草率的人 | 2017-12-18 14:32:01 | 显示全部楼层
这个跟汇编和C没什么关系,你擅长什么就用什么。
草率的人 | 2017-12-18 14:42:59 | 显示全部楼层
CHIP     SN8P2501B



.CONST   ;片内寄存器定义

  PM_KEY       EQU        FP00M        ;I/O模式寄存器   1=输出,0=输入
  PM_LED30S    EQU        FP54M
  PM_LED60S    EQU        FP10M
  PM_OUT    EQU        FP13M        ;
  
                                     ; I/O口数据寄存器
  P_KEY     EQU        FP00
  P_OUT     EQU        FP13         ;
  P_LED30S  EQU        FP54
  P_LED60S  EQU        FP10
  
.DATA              ;RAM寄存器定义

TIME_2MS_COUNT                DS        1
TIME_100MS_COUNT        DS        1
TIME_1S_COUNT                DS        1
  CLOCK_1               DS      1
  CLOCK                 DS      1
  CLOCK_2               DS      1
  CLOCK_3               DS      1
  CLOCK_BUS             DS      1
  SUBS_KEY              DS       1
  TIME_1S               DS       1

FLAG1                        DS        1
F_2ms                  EQU     FLAG1.0
F_100MS                EQU        FLAG1.1
F_1S                        EQU        FLAG1.2
F_CHAO                 EQU     FLAG1.3
GAOO                    DS       1
E1                     EQU     GAOO.0
E2                     EQU     GAOO.1
E3                     EQU     GAOO.2
E4                     EQU     GAOO.3
.CODE
                  ORG  00H
                JMP  RESET
                ORG  08H
                   JMP  INT

                   ORG  10H
RESET:
                BCLR          FGIE                        ;DISABLE INTERRUPT GAIN(关总断)
                MOV        A,#00000011B
                MOV        Stkp,A                        ;Initial stack pointer  (堆栈寄存器复位)
                CLR        INTEN                        ;CLEAR WATCHDOG TIMER AND INITIAL SYSTEM MODE(中断寄存器请0
                CLR        INTRQ                   ; (溢出标志清0
                CLR        OSCM                    ;   (震荡模式寄存器清00
                CLR        PFLAG                        FLAG = X,X,X,X,X,C,DC,Z  
                CALL    RAM_REST
                JMP     IOREST
  
;*********************************************RAM通用区域利用数据指针@YZ数据清零********************************************
RAM_REST:
                CLR         Y
                MOV        A, #0X2F                 
                MOV        Z, A               
ClrRAM10:
                CLR         @YZ               
                DECMS        Z                           ;z = z - 1
                JMP         ClrRAM10
                CLR         @YZ

                RET                  


               
                                 

;**********************************************************************************************************************               
;              定时器TO定时初始化
                      MOV        A,#01100000B                ;DISABLE TC0,FCPU/4,FCPU/011
                B0MOV        T0M,A
                MOV        A,#06H                       
                       
                B0MOV        T0C,A
                CLR        INTRQ                   ;(定时2ms)
               
               B0BSET        FT0ENB                         ;(开定时器)               
                    B0BSET  FT0IEN
            

                NOP
                NOP

              ;  MOV   A,#05H              ;定时5秒数
              ;  MOV     CLOCK_BUS,A
;********************外中断初始化***********************
               MOV      A,#00010000B        ;下降沿触发
               B0MOV  PEDGE,A
               B0BCLR    FP00IRQ
               B0BSET    FP00IEN

;************************************************************************
                  B0BSET  FGIE

MAIN:           
            
                CLR      TIME_2MS_COUNT
                CLR      TIME_100MS_COUNT
           
                CLR      SUBS_KEY  
                B0BCLR  F_CHAO
               
                B0BCLR    PM_KEY       ;端口初始化
                B0BSET    PM_OUT
                B0BSET    FP20M
                B0BSET    FP21M
                B0BSET    FP22M
                B0BSET   PM_LED30S
                B0BSET   PM_LED60S
                B0BSET   P_LED30S
                B0BSET   P_LED60S
           
MAIN_1:
                MOV       A,#05AH
                B0MOV     WDTR,A
      
                CALL    KK_KEY
                NOP
                NOP
            
                NOP
                NOP
            
                CALL     SUBS_01


               JMP        MAIN_1

;****************************************************************************************

WHENR:               
                B0BSET    FP12
                B0BTS1    F_1S
                JMP       MAIN_1
                B0BCLR    FP12
                B0BCLR     F_1S

WHEAR:
               
                MOV       A,#05AH
                B0MOV     WDTR,A

              ;  CALL    KK_KEY

                CALL     SUBS_01
                          
                B0BTS1     F_1S
                JMP       WHEAR
                B0BCLR     F_1S

              ;  CALL    KK_KEY
               
                JMP      MAIN_1
                NOP
                NOP
                NOP
                JMP      RESET
                NOP
                NOP
                NOP
                JMP      RESET
               
              RET
  
               
;*********************按键处理程序**********************************************
KK_KEY:
              
               B0BTS0     P_KEY
               JMP     KK_EXIT
               CALL    TINE_YANSHI            
               B0BTS0     P_KEY
               JMP     KK_EXIT
               CALL    TINE_YANSHI
               B0BTS0      P_KEY
               JMP     KK_EXIT
            
                CLR      SUBS_KEY
                CLR     TIME_1S
                B0BCLR   P_OUT                  ;关灯
                CLR      TIME_2MS_COUNT
                CLR      TIME_100MS_COUNT
                CLR      CLOCK_BUS
                 
                B0BCLR  F_CHAO
                CLR      GAOO
                 B0BCLR   FP20
              B0BSET   P_LED30S
              B0BSET   P_LED60S
            
KK_EXIT:
              RET


;*******************按键SUBS数据处理程序*************************************************

SUBS_01:
               
             MOV     A,#01H
             CMPRS   A,SUBS_KEY
             JMP     SUBS_02
             B0BTS0  E1
             JMP     SUBS_02
             B0BSET  P_OUT
           
             MOV   A,#01CH              ;定时5秒数
             MOV     CLOCK_BUS,A
             B0BSET  E1
             B0BSET   F_CHAO
             B0BCLR    P_LED30S
           ;  CLR            SUBS_KEY
             JMP     SUBS_EXRT
SUBS_02:     
             MOV     A,#02H
             CMPRS   A,SUBS_KEY
             JMP     SUBS_EXRT
             B0BTS0  E2
             JMP    SUBS_EXRT
             B0BSET  P_OUT
             MOV   A,#03AH              ;定时30秒数
             MOV     CLOCK_BUS,A
             B0BSET  E2
             B0BSET   F_CHAO
              B0BSET   FP21
             B0BSET    P_LED30S
             B0BCLR    P_LED60S
              CLR            SUBS_KEY



SUBS_EXRT:
           
            RET              
               
;****************************************************************************************************************
TINE_YANSHI:                                      ;1MS延时
              MOV   A,#0FFH
              MOV   CLOCK,A
              MOV    A,#0FEH
              MOV   CLOCK_1,A
            
TINM:
              MOV       A,#05AH
              B0MOV     WDTR,A

              DECMS  CLOCK
              JMP    TINM
              MOV   A,#0FEH
              MOV   CLOCK,A
              DECMS   CLOCK_1
               JMP    TINM
              NOP
              NOP
            
               RET
            
               

              

                 
;******************************中断服务程序******************************************************
INT:
                PUSH
                BTS0    FP00IRQ
                JMP      INT00
                BTS0        FT0IRQ                       
                JMP        TC0INT
                             
                JMP        TC1INT_EXIT
TC0INT:
                BCLR    FT0IRQ  ;溢出标志位清O
                MOV     A,#0AH  ;2ms计时初值
                B0MOV   T0C,A     ;装T0的初值

               

                INCMS        TIME_2MS_COUNT
                MOV        A,#014H             ;  49除以2=18H
                SUB        A,TIME_2MS_COUNT   ;(如果A中的数小于2MS  C=0)
                BTS0        FC
                JMP        TC1INT_EXIT
                CLR        TIME_2MS_COUNT
               
              
              
               
       
               
                INCMS        TIME_100MS_COUNT
                MOV        A,#064H
                SUB        A,TIME_100MS_COUNT
                BTS0        FC
                JMP        TC1INT_EXIT
                CLR        TIME_100MS_COUNT
                       BSET        F_1S
;****************1秒定时器***********************
                   NOP
            
               


                B0BTS1   F_CHAO
                JMP      TC1INT_EXIT       
                INCMS  TIME_1S
                MOV     A,CLOCK_BUS
                SUB     A,TIME_1S
                BTS0    FC
                      JMP        TC1INT_EXIT

              
;*********************到时关机***************************  
         
                CLR     TIME_1S
                B0BCLR   P_OUT                  ;关灯
                CLR      TIME_2MS_COUNT
                CLR      TIME_100MS_COUNT
                CLR      CLOCK_BUS
                CLR      SUBS_KEY  
                B0BCLR  F_CHAO
                CLR      GAOO
                 B0BCLR   FP20
            
                B0BSET   P_LED30S
                B0BSET   P_LED60S
               JMP     TC1INT_EXIT
;********************************************************

INT00:
                B0BCLR   FP00IRQ
                B0BCLR   FP00IEN
                B0BTS0   P_KEY
                JMP      INT_EXT
                CALL     TEMP_01  
                B0BTS0   P_KEY
                JMP      INT_EXT
                INCMS      SUBS_KEY              
INT_EXT:
               B0BSET    FP00IEN
               JMP       TC1INT_EXIT           
            


            



TC1INT_EXIT:
                POP               
                   RET
;****************按键消除抖动*************
TEMP_01:
               MOV    A,#0FEH
               MOV    CLOCK_2,A
CLOCK__:
               DECMS  CLOCK_2
               JMP    CLOCK__
               RET
您需要登录后才可以回帖 登录 | 注册

本版积分规则