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

📄 printerb.#2

📁 C8051F.rar
💻 #2
字号:
;参考程序B:PRINTERB.ASM程序功能:按下列格式打印出当前时间表:
;YEAR:        2005                     (2005年)
;DATE:        10:05:05                ( 10月:6日:周5)
;CLOCK:       19:15:53                (19点:15分:53秒)
   $include (c8051f020.inc)   
           ORG     00H                   ;PRINTERB.ASM
           AJMP    MAIN
           ORG     100H
MAIN:      LCALL   PORTINT  ;端口初始化.外设(打印机)和片外RAM是统一编址的.
            ACALL   PRINTERA
ACALL   PRINT
STOP:      AJMP    STOP
PRINT:     MOV     A,#0AH                 ; 换行
           LCALL   PR
           MOV     A,#0DH                 ;回车
           LCALL   PR
           MOV     DPTR,#CLK               ;  打印ASCII字符:"CLOCK: "
SC:        CLR     A
           MOVC    A,@A+DPTR
           LCALL   PR
           INC     DPTR
           CJNE    A,#20H,SC
       ;   CLOCK
           MOV     R0,#71H                  ;打印  时:分:秒( "19:15:53: ")
           MOV     R5,#6
SS0:       MOV     A,@R0
          ADD     A,#30H                    ;转换数值为ASCII码
           LCALL   PR                          ;打印一个字符
           INC     R0
           MOV     A,R0
           JNB     ACC.0,SB                  ;在第1,3,5位之后应打印安": "号
           MOV     A,#3AH                    ;在第0,2,4位之后应不打印": "号
           LCALL   PR
SB:        DJNZ    R5,SS0
           MOV     A,#20H
           LCALL   PR
           MOV     A,#20H
           LCALL   PR
           MOV     A,#0DH
           LCALL   PR
           MOV     DPTR,#DATE                ;打印ASCII字符:"DATE: "
SD:        CLR     A
           MOVC    A,@A+DPTR
           LCALL   PR
           INC     DPTR
           CJNE    A,#20H,SD
      ;    DATE
           MOV     R0,#77H                 ;打印 月:日:周日:("10:6:5: ")
           MOV     R5,#5
SS1:       MOV     A,@R0
           ADD     A,#30H
           LCALL   PR
           INC     R0
           MOV     A,R0
           JNB     ACC.0,SA
           MOV     A,#3AH
          LCALL   PR
SA:        DJNZ    R5,SS1
           MOV     A,#20H
           LCALL   PR
           MOV     A,#20H
           LCALL   PR
           MOV     A,#0DH
           LCALL   PR
           MOV     DPTR,#YEAR         ;打印ASCII字符:" YEAR: "
SE:        CLR     A
           MOVC    A,@A+DPTR
           LCALL   PR
           INC     DPTR
          CJNE    A,#20H,SE
      ;   YEAR 
          MOV      R0,#7CH              ;打印年:("2003")
          MOV      R5,#4
SS2:      MOV      A,@R0
          ADD      A,#30H
          LCALL    PR
          INC      R0
          DJNZ     R5,SS2
          MOV      A,#0AH       ;打印机换行
          LCALL    PR
          MOV      A,#0DH       ; 打印机回车
          LCALL    PR
          RET
PR:       PUSH     DPH           ;打印子程序,要打引的字符在A中。
          PUSH     DPL
PUSH     ACC
MOV      DPTR,#8400H      
Z:        MOVX     A,@DPTR                ;读忙碌位
          JB       ACC.4,Z                 ;判忙碌位置"1"否?
           MOV   DPTR,#8200H               ;8200H为打印口
           POP   ACC
           MOVX   @DPTR,A                  ;开始打印A中的字符
           POP   DPL
           POP   DPH
           RET
YEAR:      DB    59H,45H,41H,52H,3AH,20H        ; "YEAR:"  ASCII 字符
DATE:      DB    44H,41H,54H,45H,3AH,20H        ;"DATE:" ASCII 字符
CLK:       DB    43H,4CH,4FH,43H,4BH,3AH,20H    ;"CLOCK:" ASCII 字符
PORTINT: ;端口初始化.外设(打印机)和片外RAM是统一编址的.	
MOV   WDTCN,#0DEH   ;关闭看门狗
	    MOV   WDTCN,#0ADH  
MOV  XBR2,#40H;   使能交叉开关,弱上拉
     MOV   P74OUT,#03FH  ;设置P7为漏极开路,P4,P5,P6为推拉模式
     MOV   EMI0CF,#2CH ;   EMIF工作在地址/数据复用方式,只用外部存储器,
                       ;ALE高/低脉宽占1个SYSCLK周期
     MOV   0A1H,#6DH    ;地址建立/保持时间占1个SYSCLK周期,
      RET                  ;/WR和/RD占12个SYSCLK周期(EMIOTC)
 PRINTERA:   子程序功能:在C8051F020的 RAM 71H~7FH中写入要打印的数据.
MOV   R7,#15       ;共写入15个数
MOV   R0,#71H      ;从RAM 71H到80H共存入15个数值.
MOV   DPTR,#TAB
SS:   MOV   A,#0
      MOVC  A,@A+DPTR   ;查表.
MOV   @R0,A
INC   R0
INC   DPTR
DJNZ  R7,SS
	 	   RET
TAB:		   DB   01,09,01,05,05,03      ;19:15:53(时:分:秒)
DB   01,0,0,06,05         ;10:06:5:(月:日:周日)
DB   02,00,00,05            ;2005   (年)
END

⌨️ 快捷键说明

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