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

📄 16x16_80c52.lst

📁 提供了LED点阵显示的Proteus仿真电路
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  16X16_80C52                                                          11/24/2008 12:05:32 PAGE     1


MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN 16X16_80C52.OBJ
ASSEMBLER INVOKED BY: E:\Program Files\keil\C51\BIN\A51.EXE 16X16_80C52.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

  0030                 1             ZISHU           EQU     30H     ;字数
  0031                 2             SHOWTIME        EQU     31H     ;一个字重复扫描的次数
  0032                 3             SAOMIAO         EQU     32H     ;扫描指针
  0033                 4             QUMA            EQU     33H     ;取码指针
  0034                 5             DIS_BUF_C       EQU     34H     ;缓冲区字数,这里是2
  0035                 6             OFFSET          EQU     35H     ;取码指针偏移量
                       7             ;********************************************
  0040                 8             DIS_BUFL        EQU     40H     ;显示缓冲低字节区(40H~60H攻32字节)
  0060                 9             DIS_BUFH        EQU     60H     ;显示缓冲高字节区(60H~80H攻32字节)
  0080                10             LOD_BUFL        EQU     80H     ;加载缓冲低字节区(80H~90H)
  0090                11             LOD_BUFH        EQU     90H     ;加载缓冲高字节区(90H~A0H)
0000                  12             ORG     0000H
0000 020100           13             LJMP    START
0100                  14             ORG     0100H
0100                  15     START:          
0100 759800           16             MOV     SCON,#00H       ;串行口初始化为方式0
0103 75300E           17             MOV     ZISHU,#14
0106 12017B           18             LCALL   CLRBUF          ;把显示缓冲区清零
0109 9001F8           19             MOV     DPTR,#TABLE
010C AA30             20             MOV     R2,ZISHU
                      21     ;       SETB    P1.4            ;初始状态译码器无效
010E 7880             22     NEXT:   MOV     R0,#LOD_BUFL
0110 7990             23             MOV     R1,#LOD_BUFH    
0112 120184           24             LCALL   LOADING         ;把字型码加载到加载缓冲区
0115 7B10             25             MOV     R3,#16          ;这个字是否每一行都移动了?
0117 120198           26     LOOP3:  LCALL   SHIFT           ;把显示缓冲区内的字型移位
011A 75310A           27             MOV     SHOWTIME,#10
011D 7C10             28     LOOP2:  MOV     R4,#16          ;一个字需要扫描的16次行
011F 753200           29             MOV     SAOMIAO,#0H     ;扫描指针清零
0122 753300           30             MOV     QUMA,#0H        ;取码指针清零
0125 E532             31     LOOP1:  MOV     A,SAOMIAO
                      32             
0127 F590             33             MOV     P1,A            ;扫描指针输入
0129 0532             34             INC     SAOMIAO         ;扫描指针+1     
012B 753402           35             MOV     DIS_BUF_C,#2H   ;缓冲区有2个字
012E 120142           36             LCALL   DIS_LINE
0131 0533             37             INC     QUMA            ;取码指针+1
0133 1201EF           38             LCALL   DELAY
                      39     ;       CLR     P1.4
0136 DCED             40             DJNZ    R4,LOOP1        ;一个字需要扫描的16次行
0138 D531E2           41             DJNZ    SHOWTIME,LOOP2  ;一个字的显示时间是否完成?
013B DBDA             42             DJNZ    R3,LOOP3        ;是否一个字的每一行的移动了
013D DACF             43             DJNZ    R2,NEXT
                      44     
013F 02013F           45             LJMP    $
                      46     ;****************************************************************************
0142                  47      DIS_LINE:                      ;输入一行子程序,入口参数DIS_BUF_C,与缓冲区字数相等
0142 C0D0             48             PUSH    PSW
0144 C0E0             49             PUSH    ACC
0146 753500           50             MOV     OFFSET,#0H      ;取码指针偏移量,多一个字就多+16
0149 7840             51     NE1:    MOV     R0,#DIS_BUFL
014B E8               52             MOV     A,R0
014C 2533             53             ADD     A,QUMA
014E 2535             54             ADD     A,OFFSET
0150 F8               55             MOV     R0,A
0151 E6               56             MOV     A,@R0
0152 C299             57             CLR     TI
0154 F599             58             MOV     SBUF,A
A51 MACRO ASSEMBLER  16X16_80C52                                                          11/24/2008 12:05:32 PAGE     2

0156 3099FD           59             JNB     TI,$
0159 C299             60             CLR     TI              ;清发送完标志   
015B 7860             61             MOV     R0,#DIS_BUFH
015D E8               62             MOV     A,R0
015E 2533             63             ADD     A,QUMA
0160 2535             64             ADD     A,OFFSET
0162 F8               65             MOV     R0,A
0163 E6               66             MOV     A,@R0
0164 C299             67             CLR     TI
0166 F599             68             MOV     SBUF,A
0168 3099FD           69             JNB     TI,$
016B C299             70             CLR     TI              ;清发送完标志
                      71     
016D E535             72             MOV     A,OFFSET
016F 2410             73             ADD     A,#16           ;取下一个字需要加16的偏移量
0171 F535             74             MOV     OFFSET,A
0173 D534D3           75             DJNZ    DIS_BUF_C,NE1
0176 D0E0             76             POP     ACC
0178 D0D0             77             POP     PSW
017A 22               78             RET
                      79             
                      80     ;**********************************************************************************
                      81     ;把显示缓冲区清零
017B                  82     CLRBUF:
017B 7840             83             MOV     R0,#DIS_BUFL
017D 7600             84     L1:     MOV     @R0,#0
017F 08               85             INC     R0
0180 B880FA           86             CJNE    R0,#80H,L1      
0183 22               87             RET
                      88     ;**********************************************************************************
                      89     ;把字型码加载到加载缓冲区
0184                  90     LOADING:
0184 C002             91             PUSH    02h     ;push r2
0186 7A10             92             MOV     R2,#16
0188                  93     L2:
0188 7400             94             MOV     A,#0
018A 93               95             MOVC    A,@A+DPTR
018B F6               96             MOV     @R0,A   ;把偶数个数字码存放在R0开始的缓冲区,共可以存放16个字码
018C 08               97             INC     R0
018D A3               98             INC     DPTR        
018E E4               99             CLR     A
018F 93              100             MOVC    A,@A+DPTR
0190 F7              101             MOV     @R1,A   ;把奇数个数字码存放在R1开始的缓冲区,共可以存放16个字码
0191 09              102             INC     R1
0192 A3              103             INC     DPTR
0193 DAF3            104             DJNZ    R2,L2   
0195 D002            105             POP     02h     ;pop r2
0197 22              106             RET
                     107     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;     
0198                 108     SHIFT:
0198 C0D0            109             PUSH    PSW
019A C0E0            110             PUSH    ACC
019C D2D4            111             SETB    RS1             ;选择另外一组工作寄存器
019E 7B00            112             MOV     R3,#00H         ;偏移量
01A0 7C10            113             MOV     R4,#16
01A2                 114     LOOPS:
01A2 C3              115             CLR     C               ;清进位标志C
01A3 7490            116             MOV     A,#LOD_BUFH
01A5 2B              117             ADD     A,R3
01A6 F8              118             MOV     R0,A
01A7 E6              119             MOV     A,@R0
01A8 33              120             RLC     A               ;带进位左移,高字节的最高位移进Cy
01A9 F6              121             MOV     @R0,A           ;移位后放回缓冲区
01AA 7480            122             MOV     A,#LOD_BUFL
01AC C0D0            123             PUSH    PSW             ;保护Cy,避免ADD进位影响
01AE 2B              124             ADD     A,R3    
A51 MACRO ASSEMBLER  16X16_80C52                                                          11/24/2008 12:05:32 PAGE     3

01AF F8              125             MOV     R0,A
01B0 E6              126             MOV     A,@R0
01B1 D0D0            127             POP     PSW
01B3 33              128             RLC     A               ;高字节最高位移进低字节最低位   低字节高位进入Cy
01B4 F6              129             MOV     @R0,A
                     130     
01B5 7460            131             MOV     A,#DIS_BUFH
01B7 C0D0            132             PUSH    PSW
01B9 2B              133             ADD     A,R3
01BA 2410            134             ADD     A,#16           ;取下一个字的高字节需要+16的偏移量
01BC F8              135             MOV     R0,A
01BD E6              136             MOV     A,@R0
01BE D0D0            137             POP     PSW
01C0 33              138             RLC     A
01C1 F6              139             MOV     @R0,A
                     140     
01C2 7440            141             MOV     A,#DIS_BUFL
01C4 C0D0            142             PUSH    PSW
01C6 2B              143             ADD     A,R3
01C7 2410            144             ADD     A,#16
01C9 F8              145             MOV     R0,A
01CA E6              146             MOV     A,@R0
01CB D0D0            147             POP     PSW
01CD 33              148             RLC     A
01CE F6              149             MOV     @R0,A
                     150     
01CF 7460            151             MOV     A,#DIS_BUFH     ;显示缓冲区地址送A
01D1 C0D0            152             PUSH    PSW
01D3 2B              153             ADD     A,R3
01D4 F8              154             MOV     R0,A
01D5 E6              155             MOV     A,@R0
01D6 D0D0            156             POP     PSW
01D8 33              157             RLC     A               ;上缓冲区低字节的高位进入  这个缓冲区高字节低位,
01D9 F6              158             MOV     @R0,A
                     159     
01DA 7440            160             MOV     A,#DIS_BUFL
01DC C0D0            161             PUSH    PSW
01DE 2B              162             ADD     A,R3
01DF F8              163             MOV     R0,A
01E0 E6              164             MOV     A,@R0
01E1 D0D0            165             POP     PSW
01E3 33              166             RLC     A
01E4 F6              167             MOV     @R0,A
                     168             
                     169     
                     170     
01E5 0B              171             INC     R3              ;偏移量+1,准备移下一对字节(下一行)
01E6 DCBA            172             DJNZ    R4,LOOPS        ;一个字的16行是否都移动了?
01E8 C2D4            173             CLR     RS1
01EA D0E0            174             POP     ACC
01EC D0D0            175             POP     PSW
01EE 22              176             RET
                     177     
                     178     ;***********************************************************************************
01EF                 179     DELAY:
01EF D2D3            180             SETB    RS0
01F1 7AC8            181             MOV     R2,#200
01F3 DAFE            182     J:      DJNZ    R2,J
01F5 C2D3            183             CLR     RS0
01F7 22              184             RET
                     185     ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                     186     
01F8                 187     TABLE :
                     188             
01F8 00007FFC        189                    DB 00H, 00H, 7fH, 0fcH, 7fH, 0fcH, 66H, 0ccH
01FC 7FFC66CC                
A51 MACRO ASSEMBLER  16X16_80C52                                                          11/24/2008 12:05:32 PAGE     4

0200 66CC66CC        190                    DB 66H, 0ccH, 66H, 0ccH, 66H, 0ccH, 66H, 0ccH
0204 66CC66CC                
0208 6EFC7C7C        191                    DB 6eH, 0fcH, 7cH, 7cH, 78H, 0cH, 60H, 0cH
020C 780C600C                
0210 7FFC7FFC        192                    DB 7fH, 0fcH, 7fH, 0fcH, 60H, 0cH, 00H, 00H  
0214 600C0000                
                     193                    
0218 0000180C        194                    DB 00H, 00H, 18H, 0cH, 19H, 8cH, 19H, 8cH
021C 198C198C                
0220 198C198C        195                    DB 19H, 8cH, 19H, 8cH, 19H, 8cH, 19H, 8cH
0224 198C198C                
0228 198C198C        196                    DB 19H, 8cH, 19H, 8cH, 19H, 8cH, 31H, 8cH
022C 198C318C                
0230 318C618C        197                    DB 31H, 8cH, 61H, 8cH, 40H, 0cH, 00H, 00H 
0234 400C0000                
                     198     
0238 18005AF8        199                    DB 18h, 00h, 5ah, 0f8h, 5ah, 0f8h, 5ah, 0d8h
023C 5AF85AD8                
0240 7ED800D8        200                    DB 7eh, 0d8h, 00h, 0d8h, 0feh, 0d8h, 0feh, 0d8h
0244 FED8FED8                
0248 06D87ED8        201                    DB 06h, 0d8h, 7eh, 0d8h, 60h, 0d8h, 6eh, 0d8h
024C 60D86ED8                
0250 7D9A731E        202                    DB 7dh, 9ah, 73h, 1eh, 02h, 0eh, 00h, 00h
0254 020E0000                
                     203     
0258 00003FFC        204                    DB 00h, 00h, 3fh, 0fch, 3fh, 0fch, 31h, 8ch
025C 3FFC318C                
0260 3FFC3FFC        205                    DB 3fh, 0fch, 3fh, 0fch, 31h, 8ch, 3fh, 0fch
0264 318C3FFC                
0268 3FFC0100        206                    DB 3fh, 0fch, 01h, 00h, 6dh, 8ch, 6ch, 86h
026C 6D8C6C86                
0270 CC32CFF0        207                    DB 0cch, 32h, 0cfh, 0f0h, 07h, 0f0h, 00h, 00h
0274 07F00000                
                     208     
                     209                                
0278 18601860        210                    DB 18h, 60h, 18h, 60h, 59h, 0fch, 59h, 0fch, 7ch
027C 59FC59FC                
0280 7C                      
0281 60FFFEDB        211                    DB 60h, 0ffh, 0feh, 0dbh, 0feh, 18h, 18h
0285 FE1818                  
0288 3DFEF9FE        212                    DB 3dh, 0feh, 0f9h, 0feh, 0d8h, 18h, 19h, 98h
028C D8181998                
0290 18D81838        213                    DB 18h, 0d8h, 18h, 38h, 18h, 30h, 00h, 00h
0294 18300000                
                     214     
                     215                    
0298 00000C60        216                    DB 00H, 00H, 0cH, 60H, 0cH, 60H, 0cH, 60H
029C 0C600C60                

⌨️ 快捷键说明

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