jianming(dingshi).lst

来自「义隆单片机控制8个LED的渐明渐暗」· LST 代码 · 共 132 行

LST
132
字号
     1                     ; ===========================================
     2                     ;中断方式实现内部TCC功能
     3                     ;晶振=4MHZ,指令周期为4个时钟 
     4                     ;============================================
     5                     ;--------------------------------------------------
     6                     ;       定义变量
     7                     ;-------------------------------------------------------
     8       0001          TCC           ==      0x01        ; TCC计数器
     9       0003          psw           ==      0x03        ; 状态寄存器
    10       0005          PORT5         ==      0x05        ; PORT5端口
    11       0005          ioc5          ==      0x05        ; port5控制端口
    12       000E          IOCE          ==      0x0E        ; WDT控制寄存器
    13       000F          IOCF          ==      0x0F        ; 中断控制寄存器
    14       000F          ISR           ==      0x0F        ; 中断状态寄存器
    15       0010          A_BUF         ==      0x10        ; 保存中断前A的值
    16       0011          flag_100ms    ==      0x11        ;100ms到标志位
    17       0012          count_100ms   ==      0x12        ;100ms计数器
    18       0013          count1_100ms  ==      0x13        ;100ms计数器1
    19       0014          count_gu      ==      0x14        ;固定计数器
    20       0015          count_bian    ==      0x15        ;可变计数器
    21       0016          flag_ad       ==      0x16        ;选择可变计数器的加和减
    22       0000          c             ==      0           ; 进位标志位
    23       0002          Z             ==      2           ; 为0标志位
    24                     ;----------------------------程序入口地址------------------------------;
    25                             ORG     0x00
    26                     
    27 00000 1411                  JMP     tcc_start       ;开始程序入口
    28                             ORG     0x08            ;中断入口地址
    29                     ;----------------------------------------------------------------------;
    30 00008               TCC_INT:
    31 00008 0050                  MOV     A_BUF, A       ; 保存A的值
    32 00009 18EB                  mov     a,@0xeb        ;TCC计数初值
    33 0000A 0041                  mov     TCC,a
    34 0000B 18FE                  MOV     A, @0xFE        
    35 0000C 02CF                  AND     ISR, A          ; 清中断标志位
    36                     ;----------------------------------------------------------------------- 
    37 0000D 1035                  call    gu_loop         ;调用固定计数子程序
    38 0000E 1027                  call    sub_100ms       ;调用延时100ms子程序
    39                     ;----------------------------------------------------------------------
    40 0000F               TCC_out:
    41 0000F 0410                  MOV     A, A_BUF        ; 恢复A的值
    42 00010 0013                  RETI                    ; 中断返回
    43                     ;---------------------主程序-----------------------------------------------;
    44 00011               tcc_start:
    45 00011 1800                  MOV     A, @0x00
    46 00012 000E                  IOW     IOCE               ; 关闭看门狗
    47 00013 0005                  IOW     ioc5              ; Port5为输出口
    48                     ;------------------赋初值-------------------------------------------------;
    49 00014 0816                  bc      flag_ad,0
    50 00015 0811                  bc      flag_100ms,0
    51 00016 00D2                  clr     count_100ms
    52 00017 00D3                  clr     count1_100ms
    53 00018 00D4                  clr     count_gu
    54 00019 00D5                  clr     count_bian
    55                            ; Bs      PORT5,0          ; 关闭LED灯
    56                     ;----------------------------------------------------------------
    57 0001A 18D0                  MOV     A, @0b11010000           ; 保留不需要设置的状态位
    58 0001B 1900                  OR      A, @0b00000000           ; 预除数2
    59 0001C 0002                  CONTW
    60 0001D 1801                  MOV     A, @0x01           ; 允许计数器中断
    61 0001E 000F                  IOW     IOCF
    62 0001F 0010                  ENI                       ; 开中断
    63                     ;----------------------等待中断----------------------------------------------;
    64 00020               main:
    65 00020 0E11                  jbs     flag_100ms,0      ;100ms到否
    66 00021 1426                  jmp     main_out          ;否,返回
    67 00022 0811                  bc      flag_100ms,0
    68 00023 1043                  call    bian_loop         ;是,调用可变子程序
    69 00024 0000                  nop
    70 00025 0000                  nop
    71 00026               main_out:
    72 00026 1420                  jmp     main
    73                     
    74                     ;======================================================================
    75                                      ;100ms子程序
    76                     ;-----------------------------------------------------------------------
    77 00027               sub_100ms:
    78 00027 0552                   inc    count_100ms
    79 00028 1864                   mov    a,@0x64
    80 00029 0112                   sub    a,count_100ms
    81 0002A 0E03                   jbs    psw,c             ;是否大于等于100
    82 0002B 0012                   ret                      ;否,返回主程序
    83 0002C 00D2                   clr    count_100ms       ;5ms到
    84 0002D 0553                   inc    count1_100ms     
    85 0002E 1814                   mov    a,@20
    86 0002F 0113                   sub    a,count1_100ms
    87 00030 0E03                   jbs    psw,c              ;是否大于20
    88 00031 0012                   ret                       ;否,返回
    89 00032 00D3                   clr    count1_100ms       ;是,100ms到
    90 00033 0A11                   bs     flag_100ms,0
    91 00034 0012                   ret
    92                     ;------------------------------------------------------------------------------
    93                                      ;固定计数子程序
    94                                      ;可以在此改变IO口的状态,50us-5ms,100等份
    95                     ;-----------------------------------------------------------------------------
    96 00035               gu_loop:
    97 00035 0554                   inc   count_gu
    98 00036 1864                   mov   a,@0x64
    99 00037 0314                   xor   a,count_gu       ;是否等于100
   100 00038 0E83                   jbs   psw,z
   101 00039 143D                   jmp   gu_next          ;否,返回
   102 0003A 00D4                   clr   count_gu
   103 0003B 0A05                   bs    port5,0          ;P50置1
   104 0003C 0012                   ret
   105 0003D               gu_next:
   106 0003D 0415                   mov   a,count_bian     ;小于,从此处执行
   107 0003E 0114                   sub   a,count_gu
   108 0003F 0E03                   jbs   psw,c
   109 00040 0012                   ret
   110 00041 0805                   bc    port5,0         ;大于等于COUNT_BIAN,P50置0
   111 00042 0012                   ret
   112                     ;------------------------------------------------------------------------
   113                                    ;可变计数器,决定占空比
   114                     ;-----------------------------------------------------------------------
   115 00043               bian_loop:
   116 00043 0C16                  jbc    flag_ad,0        ;flag_ad为0,执行递增
   117 00044 144C                  jmp    bian_next        ;flag_ad为1,执行递减
   118 00045 0555                  inc    count_bian
   119 00046 1864                  mov    a,@0x64
   120 00047 0115                  sub    a,count_bian
   121 00048 0E03                  jbs    psw,c
   122 00049 0012                  ret
   123 0004A 0A16                  bs     flag_ad,0
   124 0004B 0012                  ret
   125 0004C               bian_next:                      ;递减开始
   126 0004C 05D5                  djz   count_bian
   127 0004D 0012                  ret
   128 0004E 0816                  bc    flag_ad,0
   129 0004F 00D5                  clr   count_bian
   130 00050 0012                  ret
   131                             END
  0 Error(s), 0 Warning(s), 0 User Message(s)

⌨️ 快捷键说明

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