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

📄 12.asm

📁 单片机实验程序-13种-17.4M-pdf.zip
💻 ASM
字号:
;                   *************************
;                   *  可在系统修改程序     *
;                   *  电子屏字符显示器     *
;                   *   "电子设计"        *
;                   *    2001.10.23   LRM   *
;                   *************************
;          四个显示字符数据表以在50H-6FH单元内,字符用8*8点阵,R4(30H)用于
;          控制显示静止字的时间,R5(31H)静止字显示跳转地址步距,B内放显示首址
;
                T2CON           EQU     0C8H    ; T2 控制寄存器
                T2MOD           EQU     0C9H    ;
                TL2             EQU     0CCH    ; T2 计数寄存器低字节
                TH2             EQU     0CDH    ; T2 计数寄存器高字节
                TR2             EQU     0CAH    ; T2 启动位
                RCAP2L          EQU     0CAH    ; T2 计数重栽寄存器低字节
                RCAP2H          EQU     0CBH    ; T2 计数重栽寄存器高字节
                CHPCON          EQU     0BFH    ; 在系统编程控制寄存器
                CHPENR          EQU     0F6H    ; 编程状态下 MTP ROM 的控制字节寄存器
                SFRAL           EQU     0C4H    ; 编程状态下的目标低地址
                SFRAH           EQU     0C5H    ; 编程状态下的目标高地址
                SFRFD           EQU     0C6H    ; 编程状态下 MTP ROM 的编程数据
                SFRCN           EQU     0C7H    ;
                TXOKFLAG        EQU     003H
;
;
ORG     0000H
LJMP    START
;
;************;
;中断入口程序;
;************;
;
ORG     0003H
RETI
ORG     000BH
RETI
ORG     0013H
RETI
ORG     001BH
RETI
ORG     0023H
LJMP    INTS
ORG     002BH
RETI
;
;初始化
CLEARMEN:       MOV     PSW, #00H               ; 设第一组寄存器
                MOV     SP, #0F1H               ; 设置堆栈指针
                MOV     SCON, #01010000B  ; 串口工作方式1(8 BIT UART) 允许接收
                MOV     T2CON, #00110000B       ; T2CON
                MOV     A,#0ECH
                MOV     TL2, A                  ;设置波特率 ( 19200)
                MOV     RCAP2L, A               ;
                MOV     A,#0FFH
                MOV     TH2, A                  ;
                MOV     RCAP2H, A               ;
                SETB    ES                      ; 允许串口中断
                MOV     IP, #00H                ; 低优先级
                SETB    TR2                     ; 启动定时计数器 2
                SETB    REN                     ; 启动串口接收中断
                CLR     TI                      ; 清串口发送中断标志位
                CLR     RI                      ; 清串口接收中断标志位
                SETB    EA                      ; 开放所有中断
                RET
CLEARMEN1:      MOV     A,#0FFH
                MOV     P1,A
                MOV     P2,A
                MOV     P3,A
                MOV     P0,A
                MOV     DPTR,#TAB2
                CLR     A
                MOV     20H,A
                MOV     21H,A
                MOV     22H,A
                MOV     23H,A
                MOV     R3,A
                MOV     R1,#50H
                MOV     R2,#20H
CLLOOP:         MOVC     A,@A+DPTR
                MOV     @R1,A
                MOV     A,R3
                INC     A
                MOV     R3,A
                INC     R1
                DJNZ    R2,CLLOOP
                MOV     30H,#0A0H
                MOV     31H,#08H
                RET
;
START:          LCALL    CLEARMEN          ;初始化
                LCALL    CLEARMEN1
START1:         LCALL    DISP1
                AJMP     START1
PUTPASS:        MOV  	DPTR,#PASSTBL           ;
                LCALL 	DISPINFO               ;显示"Pass Error"
                AJMP  	LOOP3                 ;
APROM:          LJMP 	APROMOUT                ;
;
;
DISP1:          MOV     B,#50H
                MOV     R4,30H
                MOV     R5,31H
LOOP:           JBC     04H,APROM          ;进入4K-LDROM模式处理程序
                JBC     05H,PUTPASS        ;口令提示处理程序
LOOP3:          LCALL   DISPLAY
                DJNZ    R4,LOOP
                MOV     R4,30H
                MOV     A,B
                CJNE    A,#68H,CONT
                RET
CONT:           ADD     A,R5
                MOV     B,A
                AJMP    LOOP
;
;
DISPLAY:        MOV     A,#0FFH
                MOV     P0,A
                MOV     P2,A
                MOV     R6,#0FEH
                MOV     R0,B
                MOV     R7,#08H
DISLOOP:        MOV     A,@R0
                MOV     P0,A
                MOV     P2,R6
                LCALL   DL1MS
                INC     R0
                MOV     A,R6
                RL      A
                MOV     R6,A
                DJNZ    R7,DISLOOP
                RET
;
;
DL1MS:          MOV     R3,#0FFH  ;256*4
LOOPK:          NOP
                NOP
                DJNZ    R3,LOOPK
                RET
;
;
TAB1:   DB      0EFH,83H,0ABH,83H,0ABH,83H,0EEH,0E0H    ;   电
        DB      0FFH,0C7H,0EFH,83H,0EFH,0EFH,0CFH,0EFH  ;   子
        DB      0B1H,0B5H,04H,0BFH,0B1H,0B5H,9BH,0A4H   ;   设
        DB      0BBH,0BBH,1BH,0A0H,0BBH,0BBH,9BH,0BBH   ;   计
        DB      00H,00H,00H,00H
;
TAB2:   DB      0F7H,0EFH,0C1H,0D5H,000H,0D5H,0D9H,0BDH  ;舟
        DB      0FFH,0F7H,0F7H,0F7H,0D5H,0D5H,0C1H,0FFH  ;山
        DB      0F7H,0EFH,0C1H,0D5H,000H,0D5H,0D9H,0BDH  ;舟
        DB      0FFH,0F7H,0F7H,0F7H,0D5H,0D5H,0C1H,0FFH  ;山
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           进入4K-LDROM的程序      ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTS:       PUSH PSW                		;堆栈保护
            PUSH ACC                		;
            PUSH B                		;
            MOV  PSW,#08H               ;启用第1组寄存器
            JBC  RI,RXINTS              ;RI为1,接收中断,RI清0
            JNB  TI,INTSOUT             ;TI为0,中断退出
            CLR  TI                		;TI为1,先清0
            SETB TXOKFLAG               ;设发送OK标志
            LJMP INTSOUT                ;中断退出
;
RXINTS:     MOV  A,SBUF                	;接收中断处理。
            XRL  A,#0DH                	;是否回车符
            JNZ  PASSFLAG               ;不是回车,口令出错处理
            SETB 04H                		;进入4K-LDROM标志置1
INTSOUT:    POP  B                		;出栈
            POP  ACC                		;
            POP  PSW                		;
            RETI                			;中断退出
PASSFLAG:   SETB 05H                		;口令出错标志置1
            LJMP INTSOUT                ;中断退出
;
;口令出错提示表
PASSTBL:    DB   "  pass ERROR !  ",0DH,0AH,0FFH,0FFH,0FFH,0FFH,0FFH
            RET
; DPTR 内容是表的首址
; 显示表格内容
DISPINFO:       CLR     A                       ;
                MOV     R2, A                   ;
READDISPCODE:   MOV     A, R2                   ;
                MOVC    A, @A+DPTR              ; 查表
                MOV     R1, A                   ;
                INC     R2                      ; 计数器加一
                MOV     A, R2                   ;
                JNZ     READOVER                ; 计数器溢出处理
                INC     DPH                     ;
READOVER:       MOV     A, R1                   ;
                INC     A                       ;
                JZ      DISPINFOOUT             ; 读到结束符结束
                CLR     TXOKFLAG                ;
                DEC     A                       ;
                LCALL   PUTCHAR                 ; 发送字符
                LJMP    READDISPCODE            ;
DISPINFOOUT:    RET
; A 内容待发字符
PUTCHAR:        CLR     TXOKFLAG                ;
                MOV     SBUF, A                 ;
                JNB     TXOKFLAG, $             ;
                RET

APROMOUT:   MOV  CHPENR,#87H      ;进入LDROM方式
            MOV  CHPENR,#59H
            MOV  CHPCON,#03H
            MOV  TCON,#00H        ;关T0、T1
            MOV  T2CON,#00H       ;关T2
            MOV  IP,#00H          ;同优先级
            MOV  IE,#82H          ;允许T0中断,总中断开放
            MOV  TL0,#0FBH        ;装初值,定时为5微秒
            MOV  TH0,#0FFH
            MOV  TMOD,#01H        ;T0为16位定时器
            MOV  TCON,#10H        ;开启T0
            MOV  PCON,#01H       ;进入在线编程模式,等待唤醒后进入4K-LDROM程序
END      			 ;程序结束

⌨️ 快捷键说明

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