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

📄 tiaoshi.lst

📁 义隆单片机控制8个LED的渐明渐暗
💻 LST
📖 第 1 页 / 共 3 页
字号:
     1                     ; ===========================================
     2                     ;      中断方式实现内部TCC功能
     3                     ;      晶振=4MHZ,指令周期为4个时钟
     4                     ;      2008年10月30日;8个灯的流水渐灭 
     5                     ;============================================
     6                     ;--------------------------------------------------
     7                     ;               系统变量
     8                     ;-------------------------------------------------------
     9       0001          tcc           ==      0x01        ; TCC计数器
    10       0003          psw           ==      0x03        ; 状态寄存器
    11       0005          port5         ==      0x05        ; PORT5端口
    12       0005          ioc5          ==      0x05        ; port5控制端口
    13       0006          port6         ==      0x06        ; port6端口
    14       0006          ioc6          ==      0x06        ; port6控制端口
    15       000B          iocb          ==      0x0b        ; 设置下拉控制器
    16       000E          IOCE          ==      0x0E        ; WDT控制寄存器
    17       000F          IOCF          ==      0x0F        ; 中断控制寄存器
    18       000F          ISR           ==      0x0F        ; 中断状态寄存器
    19                     ;---------------------------------------------------------------------
    20                                    ;定义变量
    21                     ;---------------------------------------------------------------------
    22       0010          a_buf         ==      0x10        ; 保存中断前A的值
    23       0013          temp3         ==      0x13        ; 最暗比较器
    24       0014          temp2         ==      0x14        ; 较暗比较器
    25       0015          temp1         ==      0x15        ; 次暗比较器
    26       0016          temp0         ==      0x16        ; 最亮比较器
    27       0017          r_x1          ==      0x17       
    28       0018          r_x2          ==      0x18
    29       001A          count         ==      0x1a
    30       001B          flag          ==      0x1b        ; 0位为连击标志位,1位为响应标志位
    31       001C          time          ==      0x1c        ; 时间变换1
    32       001D          time1         ==      0x1d
    33       001E          time0         ==      0x1e        ; 时间中间量
    34       0020          count3        ==      0x20
    35       0021          count2        ==      0x21
    36       0022          count1        ==      0x22
    37       0023          count0        ==      0x23
    38       0024          count_gu      ==      0x24
    39       0000          c             ==      0           ; 进位标志位
    40       0002          Z             ==      2           ; 为0标志位
    41                     ;----------------------------程序入口地址------------------------------;
    42                                   org     0x00
    43 00000 141C                        jmp     start             ; 开始程序入口
    44                                   org     0x08              ; 中断入口地址
    45                     ;--------------------中断处理--------------------------------------------;
    46 00008               tcc_int:
    47 00008 0050                        mov     a_buf, a          ; 保存A的值
    48 00009 18EA                        mov     a,@0xea           ; TCC计数初值
    49 0000A 0041                        mov     tcc,a
    50 0000B 18FE                        mov     a, @0xfe        
    51 0000C 02CF                        and     isr, a            ; 清中断标志位
    52                     ;----------------------------------------------------------------------- 
    53 0000D 1049                        call    gu_loop           ; 调用固定计数子程序 
    54 0000E 05DD                        djz     time1
    55 0000F 141A                        jmp     tcc_out
    56 00010 180A                        mov     a,@10
    57 00011 005D                        mov     time1,a                  
    58 00012 05DC                        djz     time
    59 00013 141A                        jmp     tcc_out
    60 00014 041E                        mov     a,time0
    61 00015 005C                        mov     time,a 
    62 00016 110C                        call    bian_loop         ; 调用可变计数子程序
    63 00017 111B                        call    bian1_loop
    64 00018 112A                        call    bian2_loop
    65 00019 1139                        call    bian3_loop    
    66                                  
    67                     ;----------------------------------------------------------------------
    68 0001A               tcc_out:
    69 0001A 0410                        mov     a, a_buf           ; 恢复A的值
    70 0001B 0013                        reti                       ; 中断返回
    71                     ;---------------------主程序-----------------------------------------------;
    72 0001C               start:
    73 0001C 1880                        mov     a, @0x80
    74                                   
    75 0001D 000E                        iow     ioce               ; 开看门狗
    76                     ;---------------------设置IO口--------------------------------------------
    77 0001E 0080                        clra       
    78 0001F 0005                        iow     ioc5               ; Port5为输出口
    79 00020 180A                        mov     a,@0x0a            ; p61为输入口
    80 00021 0006                        iow     ioc6               ; 其余为输出口
    81 00022 18DF                        mov     a,@0xdf            ; p61设置下拉电阻
    82 00023 000B                        iow     iocb  
    83                     ;------------------赋初值-------------------------------------------------;
    84 00024 184B                        mov     a,@75              
    85 00025 0053                        mov     temp3,a            ;最暗计数器
    86 00026 1832                        mov     a,@50
    87 00027 0054                        mov     temp2,a            ;较暗计数器
    88 00028 1819                        mov     a,@25
    89 00029 0055                        mov     temp1,a            ;次暗计数器
    90 0002A 1800                        mov     a,@0
    91 0002B 0056                        mov     temp0,a            ;最亮计数器
    92                     ;-------------------------------------------------------------------------
    93 0002C 180A                        mov     a,@10
    94 0002D 005D                        mov     time1,a
    95 0002E 041E                        mov     a,time0
    96 0002F 005C                        mov     time,a
    97                      ;-------------------------------------------------------------------------
    98 00030 00D7                        clr     r_x1
    99 00031 00D8                        clr     r_x2
   100 00032 00DB                        clr     flag
   101 00033 00DA                        clr     count
   102 00034 00E0                        clr     count3
   103 00035 00E1                        clr     count2
   104 00036 00E2                        clr     count1
   105 00037 00E3                        clr     count0
   106 00038 00E4                        clr     count_gu
   107 00039 180F                        mov     a,@0x0f
   108 0003A 0245                        or      port5,a             ;p5和p6的LED灭
   109 0003B 18F0                        mov     a,@0xf0
   110 0003C 0246                        or      port6,a
   111 0003D 1832                        mov     a,@50
   112 0003E 005E                        mov     time0,a
   113                     ;----------------------------------------------------------------
   114 0003F 18D0                        mov     a, @0b11010000           ; 保留不需要设置的状态位
   115 00040 1900                        or      a, @0b00000000           ; 预除数2
   116 00041 0002                        contw
   117 00042 1801                        mov     a, @0x01                 ; 允许计数器中断
   118 00043 000F                        iow     iocf
   119 00044 0010                        eni                              ; 开中断
   120                     ;----------------------等待中断----------------------------------------------;
   121 00045               main:
   122 00045 1148                        call    key_scan                 ; 调用按键扫描 
   123 00046 0000                        nop
   124 00047 0000                        nop
   125 00048 1445                        jmp     main
   126                     ;------------------------------------------------------------------------------
   127                                      ;固定计数子程序
   128                                      ;可以在此改变IO口的状态,50us-5ms,100等份
   129                     ;-----------------------------------------------------------------------------
   130                     ;=========================第一部分===========================================
   131 00049               gu_loop:
   132 00049 0564                        inc     count_gu
   133 0004A 1864                        mov     a,@0x64
   134 0004B 0324                        xor     a,count_gu       ; 是否等于100
   135 0004C 0E83                        jbs     psw,z
   136 0004D 1454                        jmp     gu_next          ; 否,返回
   137 0004E 00E4                        clr     count_gu
   138 0004F 180F                        mov     a,@0x0f          ; P5置1,灯灭
   139 00050 0245                        or      port5,a
   140 00051 18F0                        mov     a,@0xf0          ; P6口置1,灯灭
   141 00052 0246                        or      port6,a
   142 00053 0012                        ret
   143 00054               gu_next:                               ; 第一灯最暗
   144                                   
   145 00054 0413                        mov     a,temp3    
   146 00055 0124                        sub     a,count_gu
   147 00056 0E03                        jbs     psw,c
   148 00057 1482                        jmp     gu_next1
   149 00058 0080                        clra
   150 00059 0320                        xor     a,count3
   151 0005A 0E83                        jbs     psw,z
   152 0005B 145E                        jmp     disp3_next
   153 0005C 0805                        bc      port5,0 
   154 0005D 1482                        jmp     gu_next1 
   155 0005E               disp3_next:                             ; 第二灯最暗
   156 0005E 1801                        mov     a,@1
   157 0005F 0320                        xor     a,count3
   158 00060 0E83                        jbs     psw,z
   159 00061 1464                        jmp     disp3_next1
   160 00062 0906                        bc      port6,4
   161 00063 1482                        jmp     gu_next1                      ; 第三灯最暗
   162 00064               disp3_next1:
   163 00064 1802                        mov     a,@2
   164 00065 0320                        xor     a,count3
   165 00066 0E83                        jbs     psw,z
   166 00067 146A                        jmp     disp3_next2
   167 00068 0986                        bc      port6,6
   168 00069 1482                        jmp     gu_next1
   169 0006A               disp3_next2:                            ; 第四灯最暗
   170 0006A 1803                        mov     a,@3
   171 0006B 0320                        xor     a,count3
   172 0006C 0E83                        jbs     psw,z
   173 0006D 1470                        jmp     disp3_next3
   174 0006E 0885                        bc      port5,2

⌨️ 快捷键说明

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