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

📄 shuma10-20.lst

📁 义隆单片机控制8个LED的渐明渐暗
💻 LST
字号:
     1                     ; ===========================================
     2                     ;中断方式实现内部TCC功能
     3                     ;晶振=4MHZ,指令周期为4个时钟 
     4                     ;============================================
     5                     ;--------------------------------------------------------------
     6                     ;              定义变量
     7                     ;--------------------------------------------------------------
     8       0000          r0          ==      0x00
     9       0001          TCC         ==      0x01
    10       0002          pc          ==      0x02
    11       0003          status      ==      0x03        ; 状态寄存器
    12       0004          r4          ==      0x04     
    13       0005          PORT5       ==      0x05        ; PORT5端口
    14       0005          ioc5        ==      0x05
    15       0006          port6       ==      0x06        ;PORT6端口
    16       0006          ioc6        ==      0x06
    17       000B          iocb        ==      0x0b        ;设置下拉端口
    18       000E          IOCE        ==      0x0E        ; WDT控制寄存器
    19       000F          IOCF        ==      0x0F        ; 中断控制寄存器
    20       000F          ISR         ==      0x0F        ; 中断状态寄存器
    21       0010          A_BUF       ==      0x10        ; 保存中断前A的值
    22       0011          TCC_Count   ==      0x11        ; 自定义计数器
    23                     ;-------------------------------------------------------------------
    24       0012          scancnt     ==      0x12
    25       0013          scanmap     ==      0x13
    26       0014          count       ==      0x14
    27       0015          dispbuf     ==      0x15
    28       0016          dispbuf1    ==      0x16
    29       0017          year        ==      0x17
    30       0018          flag_lian   ==      0x18
    31       0019          flag_ying   ==      0x19
    32       00FB          num         ==      251
    33       0002          z           ==      2
    34       0000          c           ==      0
    35                     ;----------------------------主程序-----------------------------------;
    36                             ORG     0x00
    37 00000 1416                  JMP     tcc_start
    38                             ORG     0x08
    39                     ;-------------------中断子程序-----------------------------------------;
    40 00008               TCC_INT:
    41 00008 0050                  MOV     A_BUF, A       ; 保存A的值
    42 00009 180E                  mov     a,@0x0e
    43 0000A 0041                  mov     TCC,a
    44 0000B 18FE                  MOV     A, @0xFE        
    45 0000C 02CF                  AND     ISR, A          ; 清中断标志位
    46                     ;----------------------------------------------------------------------;
    47 0000D 1039                  call    led_disp        ;2ms的时间到
    48 0000E 0551                  INC     TCC_Count       ; 每中断一次TCC_Count计数器加1
    49 0000F 0E83                  JBS     status,z        ; 判断TCC_Count是否溢出
    50 00010 1414                  JMP     TCC_out         ; 没有溢出
    51 00011 18FB                  mov     a,@num
    52 00012 0051                  mov     TCC_Count,a
    53 00013 104C                  call    key_scan          ;10ms的时间到,调用按键检测
    54                       ;------------------中断返回----------------------------------------------;
    55 00014               TCC_out:
    56 00014 0410                  MOV     A, A_BUF        ; 恢复A的值
    57 00015 0013                  RETI                    ; 中断返回
    58                     ;------------------初始化-------------------------------------------------;
    59 00016               tcc_start:
    60 00016 1800                  MOV     A, @0x00
    61 00017 000E                  IOW     IOCE               ; 关闭看门狗
    62 00018 1804                  mov     a,@0x04            ;p50,p51位输出口
    63 00019 0005                  IOW     ioc5              ;p52位按键输入口
    64 0001A 1808                  mov     a,@0x08           ;P63位输入口
    65 0001B 0006                  iow     ioc6              ;其他口位输入口
    66 0001C 18FB                  mov     a,@0xfb
    67 0001D 000B                  iow     iocb
    68                     ;----------------赋初值------------------------------------------------ 
    69 0001E 00D7                  clr     year
    70 0001F 0818                  bc      flag_lian,0
    71 00020 0819                  bc      flag_ying,0  
    72                     ;-------------------------------------------------------------------      
    73 00021 18FB                  mov     a,@num
    74 00022 0051                  mov     TCC_Count,a       ;TCC置初值
    75 00023 18FE                  mov     a,@0b11111110
    76 00024 0053                  mov     scanmap,a
    77 00025 1800                  mov     a,@0x00
    78 00026 0052                  mov     scancnt,a
    79 00027 0054                  mov     count,a
    80 00028 1032                  call    disp_chuli
    81                     ;----------------------开中断-----------------------------------------------
    82 00029 18D0                  mov     A, @0b11010000           ; 保留不需要设置的状态位
    83 0002A 1902                  OR      A, @0b00000010           ; 预除数为8
    84 0002B 0002                  CONTW
    85 0002C 1801                  MOV     A, @0x01           ; 允许计数器中断
    86 0002D 000F                  IOW     IOCF
    87 0002E 0010                  ENI                       ; 开中断
    88                     ;----------------------等待中断-----------------------------------------------
    89 0002F               main:
    90                              
    91 0002F 0000                  nop
    92 00030 0000                  nop
    93 00031 142F                  jmp     main
    94                     ;----------------------------------------------------------------------------
    95                                           ;显示处理子程序
    96                     ;----------------------------------------------------------------------------
    97 00032               disp_chuli:
    98 00032 180F                  mov     a,@0x0f
    99 00033 0294                  and     a,count        ;保留低四位
   100 00034 0055                  mov     dispbuf,a
   101 00035 0714                  swapa   count          ;高四位和低四位转换
   102 00036 1A0F                  and     a,@0x0f
   103 00037 0056                  mov     dispbuf1,a     ;保留高四位
   104 00038 0012                  ret
   105                     ;-------------------------------------------------------------------------
   106                                         ;LED显示子程序
   107                     ;-------------------------------------------------------------------------
   108 00039               led_disp:
   109 00039 0A03                  bs      status,c       ;状态位置1
   110 0003A 06D3                  rlc     scanmap        ;位选左移
   111 0003B 0552                  inc     scancnt        ;buf寄存器加一
   112 0003C 0412                  mov     a,scancnt
   113 0003D 1B02                  xor     a,@2           ;是否等于2
   114 0003E 0E83                  jbs     status,z
   115 0003F 1443                  jmp     disp_next      ;否,转到disp_next
   116 00040 00D2                  clr     scancnt        ;是,清0
   117 00041 18FE                  mov     a,@0b11111110
   118 00042 0053                  mov     scanmap,a      ;为选重新赋位
   119 00043               disp_next:
   120 00043 0412                  mov     a,scancnt
   121 00044 1F15                  add     a,@dispbuf     ;选择寄存器
   122 00045 0044                  mov     r4,a           ;把寄存器的地址赋予R4
   123 00046 0400                  mov     a,r0           ;通过间接寄存器把R4对应的地址赋予A
   124 00047 1075                  call    led_table      ;调用显示字符
   125 00048 0046                  mov     port6,a        ;把显示的字符赋给P6
   126 00049 0413                  mov     a,scanmap      
   127 0004A 0045                  mov     port5,a        ;把位选赋给P5
   128 0004B 0012                  ret
   129                     ;-----------------------------------------------------------------------
   130                                         ;按键扫描子程序
   131                     ;----------------------------------------------------------------------
   132 0004C               key_scan:
   133 0004C 0405                  mov    a,port5
   134 0004D 0557                  inc    year
   135 0004E 1A04                  and    a,@0x04
   136 0004F 1B04                  xor    a,@0x04
   137 00050 0E83                  jbs    status,z
   138 00051 1459                  jmp    key_next
   139 00052 0C18                  jbc    flag_lian,0
   140 00053 145D                  jmp    key_lianjia
   141 00054 0C19                  jbc    flag_ying,0
   142 00055 1464                  jmp    key_next1
   143 00056 106C                  call   disp_add
   144 00057 0A19                  bs     flag_ying,0
   145 00058 0012                  ret
   146 00059               key_next:
   147 00059 00D7                  clr    year
   148 0005A 0819                  bc     flag_ying,0
   149 0005B 0818                  bc     flag_lian,0
   150 0005C 0012                  ret
   151 0005D               key_lianjia:
   152 0005D 1805                  mov    a,@0x05
   153 0005E 0117                  sub    a,year
   154 0005F 0E03                  jbs    status,c
   155 00060 0012                  ret
   156 00061 00D7                  clr    year
   157 00062 106C                  call   disp_add
   158 00063 0012                  ret
   159 00064               key_next1:
   160 00064 1864                  mov   a,@100
   161 00065 0117                  sub   a,year
   162 00066 0E03                  jbs   status,c
   163 00067 0012                  ret
   164 00068 00D7                  clr   year
   165 00069 0A18                  bs    flag_lian,0
   166 0006A 0012                  ret  
   167 0006B               key_out:
   168 0006B 0012                  ret
   169                     ;----------------------------------------------------------------------------
   170                                     ;字符增加
   171                     ;-------------------------------------------------------------------------
   172 0006C               disp_add:
   173 0006C 0414                  mov   a,count
   174 0006D 1F01                  add   a,@1
   175 0006E 0001                  daa
   176 0006F 0E03                  jbs   status,c
   177 00070 1472                  jmp   disp_add_next
   178 00071 00D4                  clr   count
   179 00072               disp_add_next:
   180 00072 0054                  mov   count,a
   181 00073 1032                  call    disp_chuli
   182 00074 0012                  ret
   183                     ;-----------------------------------------------------------------------------
   184                                              ;字符显示子程序
   185                     ;-----------------------------------------------------------------------------
   186 00075               led_table:
   187 00075 03C2                  add     pc,a
   188                             
   189 00076 1C77                  retl    @0x77       ;0
   190 00077 1C06                  retl    @0x06       ;1
   191 00078 1CB3                  retl    @0xb3       ;2
   192 00079 1C97                  retl    @0x97       ;3
   193 0007A 1CC6                  retl    @0xc6       ;4
   194 0007B 1CD5                  retl    @0xd5       ;5
   195 0007C 1CF5                  retl    @0xf5       ;6
   196 0007D 1C07                  retl    @0x07       ;7
   197 0007E 1CF7                  retl    @0xf7       ;8
   198 0007F 1CD7                  retl    @0xd7       ;9
   199                             END
  0 Error(s), 0 Warning(s), 0 User Message(s)

⌨️ 快捷键说明

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