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

📄 shuma.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          flag        ==      0x15
    28       0016          dispbuf     ==      0x16
    29       0017          dispbuf1    ==      0x17
    30       00F6          num         ==      246
    31       0002          z           ==      2
    32       0000          c           ==      0
    33                     ;----------------------------主程序-----------------------------------;
    34                             ORG     0x00
    35 00000 1416                  JMP     tcc_start
    36                             ORG     0x08
    37                     ;-------------------中断子程序-----------------------------------------;
    38 00008               TCC_INT:
    39 00008 0050                  MOV     A_BUF, A       ; 保存A的值
    40 00009 180E                  mov     a,@0x0e
    41 0000A 0041                  mov     TCC,a
    42 0000B 18FE                  MOV     A, @0xFE        
    43 0000C 02CF                  AND     ISR, A          ; 清中断标志位
    44                     ;----------------------------------------------------------------------;
    45 0000D 1038                  call    led_disp        ;2ms的时间到
    46 0000E 0551                  INC     TCC_Count       ; 每中断一次TCC_Count计数器加1
    47 0000F 0E83                  JBS     status,z        ; 判断TCC_Count是否溢出
    48 00010 1414                  JMP     TCC_out         ; 没有溢出
    49 00011 18F6                  mov     a,@num
    50 00012 0051                  mov     TCC_Count,a
    51 00013 0A15                  bs      flag,0          ;20ms的时间到
    52                     ;------------------中断返回----------------------------------------------;
    53 00014               TCC_out:
    54 00014 0410                  MOV     A, A_BUF        ; 恢复A的值
    55 00015 0013                  RETI                    ; 中断返回
    56                     ;------------------初始化-------------------------------------------------;
    57 00016               tcc_start:
    58 00016 1800                  MOV     A, @0x00
    59 00017 000E                  IOW     IOCE               ; 关闭看门狗
    60 00018 1804                  mov     a,@0x04            ;p50,p51位输出口
    61 00019 0005                  IOW     ioc5              ;p52位按键输入口
    62 0001A 1808                  mov     a,@0x08           ;P63位输入口
    63 0001B 0006                  iow     ioc6              ;其他口位输入口
    64 0001C 18FB                  mov     a,@0xfb
    65 0001D 000B                  iow     iocb
    66                     ;----------------赋初值------------------------------------------------ 
    67 0001E 0815                  bc      flag,0
    68 0001F 18F6                  mov     a,@num
    69 00020 0051                  mov     TCC_Count,a       ;TCC置初值
    70 00021 18FE                  mov     a,@0b11111110
    71 00022 0053                  mov     scanmap,a
    72 00023 1800                  mov     a,@0x00
    73 00024 0052                  mov     scancnt,a
    74 00025 0054                  mov     count,a
    75 00026 1031                  call    disp_chuli
    76                     ;----------------------开中断-----------------------------------------------
    77 00027 18D0                  mov     A, @0b11010000           ; 保留不需要设置的状态位
    78 00028 1902                  OR      A, @0b00000010           ; 预除数为8
    79 00029 0002                  CONTW
    80 0002A 1801                  MOV     A, @0x01           ; 允许计数器中断
    81 0002B 000F                  IOW     IOCF
    82 0002C 0010                  ENI                       ; 开中断
    83                     ;----------------------等待中断-----------------------------------------------
    84 0002D               main:
    85 0002D 104B                  call    key_scan 
    86 0002E 0000                  nop
    87 0002F 0000                  nop
    88 00030 142D                  jmp     main
    89                     ;----------------------------------------------------------------------------
    90                                           ;显示处理子程序
    91                     ;----------------------------------------------------------------------------
    92 00031               disp_chuli:
    93 00031 180F                  mov     a,@0x0f
    94 00032 0294                  and     a,count        ;保留低四位
    95 00033 0056                  mov     dispbuf,a
    96 00034 0714                  swapa   count          ;高四位和低四位转换
    97 00035 1A0F                  and     a,@0x0f
    98 00036 0057                  mov     dispbuf1,a     ;保留高四位
    99 00037 0012                  ret
   100                     ;-------------------------------------------------------------------------
   101                                         ;LED显示子程序
   102                     ;-------------------------------------------------------------------------
   103 00038               led_disp:
   104 00038 0A03                  bs      status,c       ;状态位置1
   105 00039 06D3                  rlc     scanmap        ;位选左移
   106 0003A 0552                  inc     scancnt        ;buf寄存器加一
   107 0003B 0412                  mov     a,scancnt
   108 0003C 1B02                  xor     a,@2           ;是否等于2
   109 0003D 0E83                  jbs     status,z
   110 0003E 1442                  jmp     disp_next      ;否,转到disp_next
   111 0003F 00D2                  clr     scancnt        ;是,清0
   112 00040 18FE                  mov     a,@0b11111110
   113 00041 0053                  mov     scanmap,a      ;为选重新赋位
   114 00042               disp_next:
   115 00042 0412                  mov     a,scancnt
   116 00043 1F16                  add     a,@dispbuf     ;选择寄存器
   117 00044 0044                  mov     r4,a           ;
   118 00045 0400                  mov     a,r0
   119 00046 105F                  call    led_table
   120 00047 0046                  mov     port6,a
   121 00048 0413                  mov     a,scanmap
   122 00049 0045                  mov     port5,a
   123 0004A 0012                  ret
   124                     ;-----------------------------------------------------------------------
   125                                         ;按键扫描子程序
   126                     ;----------------------------------------------------------------------
   127 0004B               key_scan:
   128 0004B 0E85                  jbs     port5,2
   129 0004C 145E                  jmp     key_out
   130 0004D 0E15                  jbs     flag,0
   131 0004E 145E                  jmp     key_out
   132 0004F 0815                  bc      flag,0
   133 00050 0E85                  jbs     port5,2
   134 00051 145E                  jmp     key_out
   135 00052               key_next:
   136 00052 0C85                  jbc     port5,2
   137 00053 1452                  jmp     key_next
   138 00054 0414                  mov     a,count        
   139 00055 1F01                  add     a,@1            ;转换成BCD码
   140 00056 0001                  daa
   141 00057 0054                  mov     count,a
   142 00058 1899                  mov     a,@0x99
   143 00059 0314                  xor     a,count
   144 0005A 0E83                  jbs     status,z
   145 0005B 145D                  jmp     key_next1
   146 0005C 00D4                  clr     count
   147 0005D               key_next1:
   148 0005D 1031                  call    disp_chuli
   149 0005E               key_out:
   150 0005E 0012                  ret
   151                     ;-----------------------------------------------------------------------------
   152                                              ;字符显示子程序
   153                     ;-----------------------------------------------------------------------------
   154 0005F               led_table:
   155 0005F 03C2                  add     pc,a
   156 00060 1C77                  retl    @0x77       ;0
   157 00061 1C06                  retl    @0x06       ;1
   158 00062 1CB3                  retl    @0xb3       ;2
   159 00063 1C97                  retl    @0x97       ;3
   160 00064 1CC6                  retl    @0xc6       ;4
   161 00065 1CD5                  retl    @0xd5       ;5
   162 00066 1CF5                  retl    @0xf5       ;6
   163 00067 1C07                  retl    @0x07       ;7
   164 00068 1CF7                  retl    @0xf7       ;8
   165 00069 1CD7                  retl    @0xd7       ;9
   166                             END
  0 Error(s), 0 Warning(s), 0 User Message(s)

⌨️ 快捷键说明

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