EDN首页   博客首页

最新日志

发表于:2007-12-13 21:39:54
标签:无标签

2

80C51 汇编指令集

经本人整理,此指令集含80C51的汇编指令与内部储存单元分配表,常用控制寄存器的使用说明。

pdf

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(28) | 阅读(2728)
发表于:2007-12-7 16:04:42
标签:无标签

2

能显示并读写EDN-51实验板24C04的应用程序(汇编语言)

经几天的努力,终于搞出来了。

这个程序在仿真软件与EDN-51实验板上均已通过。

24C0 共有512个储存单元,所以它的地址为0000H--01FFH。

此程序把#00H写入0000H地址,每写一个地址加一数据加一,直写到FFH为止,

再从FFH写入0100H地址,每写一个地址加一数据减一,直至写到01FFH为止,

边写边读,然后送P0口,用数码管显示,显示用16进制。写完后重写,

一直循环。程序与仿真文件包如下,请各位看后多提宝贵意见。

是否还有更简便的方法。

rar

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(5) | 阅读(1890)
发表于:2007-12-3 21:13:25
标签:无标签

3

欢迎加入网友自己组建的电子论坛网站

欢迎加入网友自己组建的电子论坛网站。本网站由电子爱好者自己组建,内设单片机 Proteus 仿真版块、Keil 软件应用版块、嵌入式系统应用版块、单片机编程版块、工控技术交流版块、Protel 软件应用交流版块、电脑与网络技术交流版块、电子器件与电路基础版块以及其它一些技术交流版块。  MCU电子小组 用心致力打造中国最大的 MCU电子论坛!
  欢迎各位朋友光临寒舍!热忱欢迎各位好友与我链接,携手放飞梦想!现各大版块 招聘 版主中.欢迎大家的加入!
   早有润之求志同,今有MCU 寻道合.今向何处?直指五指山下.不悔激情岁月,共创热血年华. 觅知音,仿钟俞.呜呼!子期何在?伯牙断琴. 人生易老天难老,待到沧桑饶人时,你我在绝顶笑.应聘版主请加 QQ 89789226 联系

http://chinamcu.70bb.net/

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(1) | 阅读(640)
发表于:2007-11-27 19:53:29
标签:无标签

1

能显示并读写EDN-51实验板24C02的应用程序(汇编语言)

经几天的努力,终于搞出来了。

这个程序在仿真软件与EDN-51实验板上均已通过。

24C0 2共有256个储存单元,所以它的地址为00H--FFH。

此程序把#00H写入00H地址,每写一个加一,直写到FFH为止。

边写边读,然后送P0口,用数码管显示,显示用16进制。写完后重写,

一直循环。程序与仿真文件包如下,请各位看后多提宝贵意见。

是否还有更简便的方法。

点击下载

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(2) | 阅读(1030)
发表于:2007-11-19 22:34:58
标签:无标签

2

LCD1602常用驱动子程序(汇编语言)

最近找到了LCD1602的驱动程序,经本人整理把常用的驱动子程序现上传给大家,希望能对大家有用。此程序以EDN的51实验板为基础,数据口为P0,控制口为P1。

程序共有9段,START为主程序,INSE为中断服务子程序,INIT为LCD显示模式设置子程序,QLCD为清屏子程序,WIR为写指令子程序,WDR为写数据子程序,CKLCD为查LCD空闲子程序,STS00为延时子程序,PWDR为批量写数据子程序。程序如下:

RS BIT P1.0
RW BIT P1.1
E  BIT P1.2
ORG 0000H
                 AJMP START
ORG 000BH
                 AJMP INSE
ORG 0100H                                          ;程序地址
START:    MOV TMOD,#00H              ;设置计时/计数模式
                 MOV TL0,#00H                   ;#00H-->计时0低位
                 MOV TH0,#00H                  ;#00H-->计时0高位
                 SETB EA                              ;开中断
                 SETB ET0                            ;中断使能
                 SETB TR0                            ;计时0开绐
                 MOV 50H,#32H                  ;#32H-->50H
                 MOV SP,#60H                    ;#60h-->SP 地址指针
                 ACALL INIT                       ;调 INIT 子程序 ( LCD 模式设置)
                ACALL QLCD                     ;调清屏子程序
                MOV A,#80H                       ;#80H-->A (设LCD地址第一行第一列)
                ACALL WIR                        ;调写IR子程序
                MOV DPTR,#L1                  ;#L1-->DPTR
                ACALL PWDR                    ;调批量写DR子程序
                MOV A,#0C0H                   ;#0C0H-->A (设LCD地址第二行第一列)
                ACALL WIR                        ;调写 IR 子程序
                MOV DPTR,#L2                  ;#L2-->DPTR
                ACALL PWDR                    ;调批量写DR子程序
LOOP:     AJMP LOOP                       ;转LOOP
INSE:       MOV TL0,#00H                  ;#00H-->计时0低位
                MOV TH0,#00H                  ;#00H-->计时0高位
                DJNZ 50H,INSE0                ;50H-1 不等于0转INSE0
                MOV 50H,#32H                  ;#32H-->50H
INSE0:     RETI                                    ;中断返回
INIT:        MOV A,#38H          ;#38H-->A (使用8Bits汇流排,显示2行5*7字符)
                LCALL WIR                        ;调写IR子程序
                MOV A,#0EH                      ;#0EH-->A (显示开,光标开,光标闪烁)
                LCALL WIR                        ;调写IR子程序
                MOV A,#06H                ;#06H-->A (字符不动,光标自动右移一格)
                LCALL WIR                       ;调写IR子程序
                RET                                     ;返回
CKLCD:   PUSH Acc                         ;Acc进栈
CK00:      CLR RS                             ;RS 清 0
                SETB RW                          ;RW 置 1
                CLR E                                ;E 清 0
                SETB E                              ;E 置 1
                MOV A,P0                        ;P0-->A
                CLR E                               ;E 清 0
               JB Acc.7,CK00                  ;Acc.7=1 转 CK00
               POP Acc                            ;Acc 出栈
               ACALL STS00                  ;调延时子程序 STS00
               RET                                   ;返回
WIR:       ACALL CKLCD              ;调查空闲子程序
               CLR E                               ;E 清 0
               CLR RS                            ;RS 清 0
               CLR RW                          ;RW 清 0
               SETB E                            ;E 置 1
               MOV P0,A                      ;A-->P0
               CLR E                              ;E 清 0
               RET                                 ;返回
WDR:      ACALL CKLCD             ;调查空闲子程序
               CLR E                              ;E 清 0
               SETB RS                          ;RS 置 1
               CLR RW                          ;RW 清 0
               SETB E                            ;E 置 1
               MOV P0,A                      ;A-->P0
               CLR E                             ;E 清 0
               RET                                 ;返回
STS00:    MOV 52H,#05H              ;#05H-->52H
STS001:  MOV 51H,#0F8H            ;#0F8H-->51H
               DJNZ 51H,$                     ;51H-1不等于0转再-1
               DJNZ 52H,STS001          ;51H-1不等于0转STS001
               RET                                  ;返回
QLCD:    MOV A,#01H                  ;#01H-->A
               ACALL WIR                    ;调写IR子程序
               RET                                  ;返回
PWDR:    PUSH Acc                      ;Acc进栈
PWDR1:  CLR A                            ;A 清 0
                MOVC A,@A+DPTR    ;A+DPTR-->A
                JZ PEND                        ;A=0 转 PEND
                ACALL WDR                ;调写DR子程序
                INC DPTR                     ;DPTR+1
                AJMP PWDR1              ;转 PWDR1
                PEND: POP Acc            ;Acc 出栈
                RET     ;返回
L1:           DB      20H,4EH,61H,74H,69H,65H,62H,20H,45H,6CH

                         ,65H,63H,74H,72H,6FH,6EH,00H
L2:          DB      7EH,6EH,61H,74H,69H,65H,6DH,40H,32H,31H,63H

                         ,6EH,2EH,63H,6FH,6DH,00H
               END

此程序已在仿真与EDN-51实验板上通过,只要把L1与L2的数据改动一下,就能在LCD上显示不同的字符。

点击下载

 

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(1) | 阅读(1021)
发表于:2007-11-11 23:13:30
标签:无标签

2

4位八段数码管的十进制加计数仿真(汇编语言)改进版

本人按照EDN-51实验板的线路,做了个4位八段数码管的十进制加计数仿真实验,程序采用汇编语言编写。此程序在仿真软件上与EDN-51实验板上均通过。仿真图中的数码管位驱动采用74HC04,如按EDN-51板上用想同的PNP三极管驱动在仿真软件上则无法正常显示。程序共分5块,STAR0为数据初始化,STAR2为计数子程序,STAR3为4位数码管动态显示子程序,STAR4为按键扫描子程序,STS00是延时子程序。由于EDN-51实验板上没装BCD译码器,所以编写程序比较烦琐。

程序如下:

ORG 0000H
                LJMP STAR0                        ;转程序 SRAR0
ORG 0200H                                          ;程序地址 0200H
STAR0:   CLR 00                                  ;位 00 清 0
               MOV P1,#0FFH                    ;#0FFH-->P1
               MOV P2,#0FH                      ;#0FH-->P2
               MOV P0,#0FFH                    ;#0FFH-->P0
               MOV 30H,#00H                    ;#00H-->30H
               MOV 31H,#00H                    ;#00H-->30H
               MOV 32H,#00H                    ;#00H-->30H
               MOV 33H,#00H                    ;#00H-->30H
               LJMP STAR3                        ;转程序 SRAR3
STAR2:   MOV A,#0AH                       ;#0AH-->A
               INC 30H                                ;30H+1
               CJNE A,30H,STJE                 ;30H 与 A 比较,不等转移 STJE
               MOV 30H,#00H                    ;#00H-->30H
               INC 31H                                ;31H+1
               CJNE A,31H,STJE                 ;31H 与 A 比较,不等转移 STJE
               MOV 31H,#00H                    ;#00H-->31H
               INC 32H                                ;32H+1
               CJNE A,32H,STJE                 ;32H 与 A 比较,不等转移 STJE
               MOV 32H,#00H                    ;#00H-->32H
               INC 33H                                ;33H+1
               CJNE A,33H,STJE                 ;33H 与 A 比较,不等转移 STJE
               MOV 33H,#00H                    ;#00H-->33H
               MOV 32H,#00H                    ;#00H-->32H
               MOV 31H,#00H                    ;#00H-->31H
               MOV 30H,#00H                    ;#00H-->30H
STJE:      RET                                        ;子程序调用返回
STAR3:   MOV R0,#30H                      ;#30H-->R0
                MOV R6,#0F7H                   ;#0F7H-->R6
SMG0:    MOV P1,#0FFH                    ;#0FFH-->P1
                MOV A,R6                            ;R6-->A
                MOV P1,A                            ;A-->P1
                RR A                                     ;A向右移一位
                MOV R6,A                           ;A-->R6
                MOV A,@R0                       ;@R0-->A
                ADD A,#04H                        ;#04H-->A
                MOVC A,@A+PC               ;A+PC-->
                MOV P0,A                            ;A-->P0
                AJMP SMG1                        ;转程序 SMG1
SDATA:   DB 0C0H,0F9H,0A4H,0B0H,99H
                DB 92H,82H,0F8H,80H,90H
SMG1:     LCALL STAR4                    ;转子程序 SRAR4
                LCALL STS00                     ;转子程序 STS00
                INC R0                                 ;R0+1
                CJNE R6,#07FH,SMG0       ;#07FH 与 R6 比较,不等转移 SMG0
                AJMP STAR3                       ;转程序 SRAR3
STAR4:    JNB P2.0,ST1                      ;P2.0=0 转 ST1
                CLR 00                                 ;位 00 清 0
                SJMP ST3                            ;转ST3
ST1:         JNB 00,ST2                          ;位 00=0 转 ST2
                SJMP ST3                            ;转 ST3
ST2:         LCALL STAR2                    ;调子程序 STAR2
                SETB 00                               ;位 00 置 1
ST3:         RET                                      ;子程序调用返回
ORG 0100H                                         ;地址 0100H
STS00:     MOV 60H,#003H                ;#003H-->60H  (211)
DE001:     MOV 61H,#0FFH               ;#0FFH-->61H (255)
DE002:     DJNZ 61H,DE002               ;61H 减 1 不等于 0 转 DE002
                 DJNZ 60H,DE001               ;60H 减 1 不等于 0 转 DE001
                 RET                                     ;子程序调用返回
                 END                                    ;结束

上次的程序共有293句,经小组成员建议,本人经几天的研究写了下面的这个程序,现在的程序用了63句,精简了230句。功能没有减。如谁有更简练的程序,请发上来,大家一起学习。

下面是仿真的所有文件,包括仿真电路图。

点击下载

点击此处查看原文 >>

系统分类: 单片机   |    用户分类:    |    来源: 原创

评论(3) | 阅读(965)
发表于:2007-11-4 10:33:55
标签:无标签

1

4位八段数码管的十进制加计数仿真(汇编语言)

本人按照EDN-51实验板的线路,做了个4位八段数码管的十进制加计数仿真实验,程序采用汇编语言编写。此程序在仿真与EDN-51实验板上均通过。注:仿真程序与EDN实验板程序有个地方不一样,这是因为动态扫描的时间不能相同,在仿真上的时间要稍长点,EDN-51实验板上就要短一点,延时子程序STS00中的60H分别是#013H与#003H。仿真图中的数码管位驱动采用74HC04,如按EDN-51板上用想同的PNP三极管驱动,则无法正常显示。程序共分6块,STAR0为数据初始化,STAR1为0-9的数据处,STAR2为计数子程序,STAR3为动态显示子程序,STAR4为按键扫描子程序,最后一个为是延时子程序。由于EDN-51实验板上没装BCD译码器,所以编写程序比较烦琐。

程序如下:

ORG 0000H                               ;地址 0000H
       LJMP STAR0                     ;转 STAR0
ORG 0300H                              ;地址 0300H
STAR0:   CLR 00                      ;位 00 清 0
               MOV P1,#0FFH        ;#0FFH-->P1
               MOV P2,#0FH          ;#0FH-->P2
               MOV P0,#0FFH        ;#0FFH-->P0
               MOV 30H,#0C0H     ;#0C0H-->30H  0-->30H
               MOV 31H,#0C0H     ;#0C0H-->31H  0-->31H
               MOV 32H,#0C0H     ;0C0H-->32H  0-->32H
               MOV 33H,#0C0H     ;#0C0H-->33H  0-->33H
STAR1:   MOV 40H,#0C0H     ;#0C0H-->40H
               MOV 41H,#0F9H      ;#0F9H-->41H
               MOV 42H,#0A4H      ;#0A4H-->42H
               MOV 43H,#0B0H      ;#0B0H-->43H
               MOV 44H,#99H        ;#99H-->44H
               MOV 45H,#92H        ;#92H-->45H
               MOV 46H,#82H        ;#82H-->46H
               MOV 47H,#0F8H      ;#0F8H-->47H
               MOV 48H,#80H        ;#80H-->48H
               MOV 49H,#90H        ;#90H-->49H
               MOV R1,#00H          ;#00H-->R1
               MOV R2,#00H          ;#00H-->R2
               MOV R3,#00H          ;#00H-->R3
               MOV R4,#00H           ;#00H-->R4
               LJMP STAR3             ;转 STAR3
               NOP
STAR2:   INC R1    ;R1+1
U300:      CJNE R1,#00H,U301      ;R1 与 #00H 比较不等则转 U301  
                MOV 30H,40H               ;41H-->30H
                AJMP U3END                ;转 U3END
U301:      CJNE R1,#01H,U302      ;R1 与 #01H 比较不等则转 U302 
               MOV 30H,41H                ;41H-->30H
               AJMP U3END                 ;转 U3END
U302:      CJNE R1,#02H,U303      ;R1 与 #02H 比较不等则转 U303
               MOV 30H,42H                ;42H-->30H
               AJMP U3END                 ;转 U3END
U303:     CJNE R1,#03H,U304       ;R1 与 #03H 比较不等则转 U304
               MOV 30H,43H                 ;43H-->30H
               AJMP U3END                  ;转 U3END
U304:     CJNE R1,#04H,U305       ;R1 与 #04H 比较不等则转 U305  
               MOV 30H,44H                 ;44H-->30H
               AJMP U3END                  ;转 U3END
U305:     CJNE R1,#05H,U306        ;R1 与 #05H 比较不等则转 U306  
               MOV 30H,45H                   ;45H-->30H
               AJMP U3END                   ;转 U3END
U306:     CJNE R1,#06H,U307         ;R1 与 #06H 比较不等则转 U307 
               MOV 30H,46H                  ;46H-->30H
               AJMP U3END                   ; 转 U3END
U307:     CJNE R1,#07H,U308         ;R1 与 #07H 比较不等则转 U308 
               MOV 30H,47H                   ;47H-->30H
               AJMP U3END                    ;转 U3END
U308:     CJNE R1,#08H,U309         ;R1 与 #08H 比较不等则转 U309
               MOV 30H,48H                  ;48H-->30H
               AJMP U3END                   ;转 U3END
U309:     CJNE R1,#09H,U30A        ;R1 与 #09H 比较不等则转 U30A 
               MOV 30H,49H                  ;49H-->30H
               AJMP U3END                   ;转 U3END
U30A:     CJNE R1,#0AH,U310       ;R1 与 #0AH 比较不等则转 U310
U310:      MOV 30H,40H                 ;40H-->30H
               MOV R1,#00H                  ;#00H-->R1
                INC R2                              ;R2+1
               CJNE R2,#00H,U311        ;R2 与 #00H 比较不等则转 U311 
               MOV 31H,40H                  ;40H-->31H
               AJMP U3END                   ;转 U3END
U311:     CJNE R2,#01H,U312         ;R2 与 #01H 比较不等则转 U312
               MOV 31H,41H                   ;41H-->31H
               AJMP U3END                   ;转 U3END
U312:     CJNE R2,#02H,U313         ;R2 与 #02H 比较不等则转 U313
               MOV 31H,42H                  ;42H-->31H
               AJMP U3END                   ;转 U3END
U313:     CJNE R2,#03H,U314         ;R2 与 #03H 比较不等则转 U314
               MOV 31H,43H                  ;43H-->31H
               AJMP U3END                    ;转 U3END
U314:     CJNE R2,#04H,U315          ;R2 与 #04H 比较不等则转 U315
               MOV 31H,44H                   ;44H-->31H
              AJMP U3END                     ;转 U3END
U315:    CJNE R2,#05H,U316           ;R2 与 #05H 比较不等则转 U316
              MOV 31H,45H                    ;45H-->31H
              AJMP U3END                     ;转 U3END
U316:     CJNE R2,#06H,U317          ;R2 与 #06H 比较不等则转 U317
               MOV 31H,46H                    ;46H-->31H
              AJMP U3END                      ;转 U3END
U317:    CJNE R2,#07H,U318            ;R2 与 #07H 比较不等则转 U318
               MOV 31H,47H                    ;47H-->31H
              AJMP U3END                      ;转 U3END
U318:    CJNE R2,#08H,U319            ;R2 与 #08H 比较不等则转 U319
              MOV 31H,48H                      ;48H-->31H
              AJMP U3END                      ;转 U3END
U319:     CJNE R2,#09H,U31A           ;R2 与 #09H 比较不等则转 U31A
              MOV 31H,49H                      ;49H-->31H
              AJMP U3END                       ;转 U3END
U31A:    CJNE R2,#0AH,U320            ;R2 与 #0AH 比较不等则转 U320
U320:     MOV 31H,40H                      ;40H-->31H
              MOV R2,#00H                      ;#00H-->R2
              INC R3                                  ;R3+1
              CJNE R3,#00H,U321            ;R3 与 #00H 比较不等则转 U321 
              MOV 32H,40H                      ;40H-->32H
              AJMP U3END                       ;转 U3END   
U321:     CJNE R3,#01H,U322            ;R3 与 #01H 比较不等则转 U322
               MOV 32H,41H                      ;41H-->32H
               AJMP U3END                       ;转 U3END   
U322:     CJNE R3,#02H,U323             ;R3 与 #02H 比较不等则转 U323
              MOV 32H,42H                        ;42H-->32H
               AJMP U3END                        ;转 U3END   
U323:     CJNE R3,#03H,U324              ;R3 与 #03H 比较不等则转 U324
               MOV 32H,43H                       ;43H-->32H
               AJMP U3END                        ;转 U3END 

U324:      CJNE R3,#04H,U325             ;R3 与 #04H 比较不等则转 U325
               MOV 32H,44H                        ;44H-->32H
               AJMP U3END                         ;转 U3END
U325:     CJNE R3,#05H,U326              ;R3 与 #05H 比较不等则转 U326
               MOV 32H,45H                       ;45H-->32H
               AJMP U3END                        ;转 U3END
U326:     CJNE R3,#06H,U327              ;R3 与 #06H 比较不等则转 U327
               MOV 32H,46H                        ;46H-->32H
               AJMP U3END                        ;转 U3END
U327:     CJNE R3,#07H,U328              ;R3 与 #07H 比较不等则转 U328
               MOV 32H,47H                       ;47H-->32H
               AJMP U3END                        ;转 U3END
U328:     CJNE R3,#08H,U329              ;R3 与 #08H 比较不等则转 U329
               MOV 32H,48H                        ;48H-->32H
               AJMP U3END                         ;转 U3END
U329:     CJNE R3,#09H,U32A              ;R3 与 #09H 比较不等则转 U32A
               MOV 32H,49H                        ;49H-->32H
               AJMP U3END                         ;转 U3END
U32A:     CJNE R3,#0AH,U330             ;R3 与 #0AH 比较不等则转 U330   
U330:      MOV 32H,40H                       ;40H-->32H
                MOV R3,#00H                       ;#00H-->R3
                INC R4                                   ;R4+1
               CJNE R4,#00H,U331              ;R4 与 #00H 比较不等则转 U331
                MOV 33H,40H                      ;40H-->33H
                AJMP U3END                       ;转 U3END
U331:      CJNE R4,#01H,U332             ;R4 与 #01H 比较不等则转 U332
               MOV 33H,41H                       ;41H-->33H
               AJMP U3END                        ;转 U3END
U332:     CJNE R4,#02H,U333              ;R4 与 #02H 比较不等则转 U333
               MOV 33H,42H                       ;42H-->33H
               AJMP U3END                        ;转 U3END
U333:     CJNE R4,#03H,U334              ;R4 与 #03H 比较不等则转 U334
               MOV 33H,43H                        ;43H-->33H
               AJMP U3END                         ;转 U3END
U334:     CJNE R4,#04H,U335               ;R4 与 #04H 比较不等则转 U335
               MOV 33H,44H                        ;44H-->33H
               AJMP U3END                        ;转 U3END
U335:     CJNE R4,#05H,U336              ;R4 与 #05H 比较不等则转 U336
               MOV 33H,45H                       ;45H-->33H
               AJMP U3END                        ;转 U3END
U336:     CJNE R4,#06H,U337              ;R4 与 #06H 比较不等则转 U337
               MOV 33H,46H                       ;46H-->33H
               AJMP U3END                       ;转 U3END
U337:     CJNE R4,#07H,U338             ;R4 与 #07H 比较不等则转 U338
               MOV 33H,47H                      ;47H-->33H
               AJMP U3END                       ;转 U3END 
U338:     CJNE R4,#08H,U339             ;R4 与 #08H 比较不等则转 U339
               MOV 33H,48H                      ;48H-->33H
               AJMP U3END                       ;转 U3END
U339:     CJNE R4,#09H,U33A            ;R4 与 #09H 比较不等则转 U33A
               MOV 33H,49H                      ;49H-->33H
               AJMP U3END                       ;转 U3END
U33A:     CJNE R4,#0AH,U33B           ;R4 与 #0AH 比较不等则转 U33B   
U33B:      MOV 33H,40H                      ;40H-->33H
                MOV R4,#00H                      ;#00H-->R4
U3END:  RET                                        ;子程序调用返回
                NOP
STAR3:   MOV P1,#0FFH                    ;#0FFH-->P1
                MOV P1,#0F7H                    ;#0F7H-->P1
                MOV P0,30H                         ;30H-->P0
                LCALL STAR4                      ;调子程序 STAR4
                LCALL STS00                       ;调延时子程序 STS00
                MOV P1,#0FFH                     ;#0FFH-->P1
                MOV P1,#0FBH                    ;#0FBH-->P1
                MOV P0,31H                         ;31H-->P0
                LCALL STAR4                      ;调子程序 STAR4
                LCALL STS00                       ;调延时子程序 STS00 
                MOV P1,#0FFH                    ;#0FFH-->P1
                MOV P1,#0FDH                    ;#0FDH-->P1
                MOV P0,32H                         ;32H-->P0
                LCALL STAR4                      ;调子程序 STAR4
                LCALL STS00                       ;调延时子程序 STS00    
                MOV P1,#0FFH                    ;#0FFH-->P1
                MOV P1,#0FEH                     ;#0FEH-->P1
                MOV P0,33H                         ;33H-->P0
                LCALL STAR4                       ;调子程序 STAR4
                LCALL STS00                        ;调延时子程序 STS00
                SJMP STAR3                          ;转 STAR3
                NOP
STAR4:   JNB P2.0,ST1                          ;P2.0=0 转 ST1
               CLR 00                                     ;位 00 清 0
               SJMP ST3                                 ;转ST3
ST1:        JNB 00,ST2                              ;位 00=0 转 ST2
               SJMP ST3                                 ;转 ST3
ST2:        LCALL STAR2                         ;调子程序 STAR2
               SETB 00                                    ;位 00 置 1
ST3:        RET                                           ;子程序调用返回
               NOP
ORG 0100H                                            ;地址 0100H
STS00:   MOV 60H,#013H                     ;#013H-->60H  (211)
DE001:   MOV 61H,#0FFH                    ;#0FFH-->61H (255)
DE002:   DJNZ 61H,DE002                    ;61H 减 1 不等于 0 转 DE002
               DJNZ 60H,DE001                    ;60H 减 1 不等于 0 转 DE001
               RET                                          ;子程序调用返回
               NOP
STS01:   MOV 62H,#0D3H                     ;#0D3H-->62H  (211)
DE011:   MOV 63H,#0FFH                     ;#0FFH-->63H (255)
DE012:   DJNZ 63H,DE012                     ;63H 减 1 不等于 0 转 DE012
               DJNZ 62H,DE011                     ;62H 减 1 不等于 0 转 DE011
               RET     ;子程序调用返回
               NOP
STS02:   MOV 64H,#0D3H                     ;#0D3H-->64H  (211)
DE021:   MOV 65H,#0FFH                     ;#0FFH-->65H (255)
DE022:   DJNZ 65H,DE022                     ;65H 减 1 不等于 0 转 DE022
               DJNZ 64H,DE021                     ;64H