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

📄 串口调试.asm

📁   一个串口调试程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;整个程序不占用片外RAM,用单片机内部扩展的RAM.(更新日志:070125)
;只要用片内时就允许访问内部RAM,只要访问外部时就禁止访问内部.)
;该程序最多能控制单色35个字,双色17个字,三色10个字.要控制点数多的话要扩展外部RAM.
;以下定义是对于控制板(MCU-3)的接口定义(2007-1-29)
;该控制板可以控制32点高度,宽度根据具体情况最大可以控制60个中文字.
;以下是单片机控制引脚的定义.
    R11 BIT P1.7 ;红色数据输入
    G11 BIT P1.6 ;绿色数据输入
    B11 BIT P1.5 ;兰色数据输入
    ;R21 BIT P4.0
    ;G21 BIT P4.1
    B21 BIT P3.4
    CLK BIT P3.3 ;移位脉冲
    LAT BIT P3.2 ;数据输入允许低有效
    OE  BIT P3.5 ;显示控制高电平不显示
;74HC163N的控制信号定义.
 ROW_RST  BIT P1.3  ;用来复位A;B;C;D.
 ROW_CLK  BIT P1.4  ;产生A;B;C;D. 上升沿有效
;DS1302的控制信号定义.
 TM_DATA  BIT p1.0  ;同时有是FLASH地址线. A17
 TM_RST   BIT P1.1  ;A18
 ;TM_CLK   BIT P4.2  ;A16
;18B20的控制信号定义.
   DALLS_DQ  BIT P3.4
;红外遥控的信号定义.
   ;RX_DATA   BIT P4.3   ;红外遥控的数据输入.
   ;SPI_CE    BIT P4.3   ;485通信时的输入/输出选择.
   ;K_IN      BIT P4.3   ;屏参数数据的输入接口.
;ROM;RAM的片选信号定义.74HC139双2-4路译码器
   RAM_CE  BIT P1.2   ;等于0时选中RAM62256,通过CD4069来选择.
   ROM_CE  BIT P1.2   ;等于1时选中ROM27C2001或W29C020
   ;ROM_A16   BIT P4.2 ;下次改板时最好改为用P1.1控制
   ROM_A17   BIT P1.0
   ROM_A18   BIT P1.1
;位定义
   BIT0  BIT ACC.0
   BIT1  BIT ACC.1
   BIT2  BIT ACC.2
   BIT3  BIT ACC.3
   BIT4  BIT ACC.4
   BIT5  BIT ACC.5
   BIT6  BIT ACC.6
   BIT7  BIT ACC.7
;寄存器定义          
   ISP_CONTR  EQU 0E7H
        p4    EQU 0e8H ;对与扩展了内部RAM的单片机有用.
screen_number equ 40h ;显示屏的屏号
screen_kuan_H equ 41h ;显示屏的宽(高位)
screen_KUAN_L equ 42h ;显示屏的宽(低位)
SCREEN_GAO_H  equ 43h ;显示屏的高(高位)
SCREEN_GAO_L  EQU 44H ;显示屏的高(低位)
file_name     EQU 61h ;文件名 ;用来计算报头和数据的地址.
byteH         EQU 62H ;字节数 ;表明单个文件的数据个数.(两个字节表示)高位.
byteL         EQU 63H ;字节数 ;                                     低位.
video_mode    EQU 65H ;进入模式;一屏数据的进入的方式,同时也是上一屏数据退出的方式.
EXIT_DISPLAY  EQU 66H ;退出模式;
SPEED         EQU 67H ;进入速度
DISPLAY_TIME  EQU 68H ;显示停留时间
DEL1          EQU 6cH ;通用寄存器
DEL2          EQU 6dH ;通用寄存器
MDPH          EQU 6EH
MDPL          EQU 6FH
ADDRESS       EQU 70H
      MH      EQU 35H
      ML      EQU 36H
    HANG      EQU 37H       ;当前显示的行寄存器.提供A;B;C;D的开关设置.***1到16行***
  PINGKUAN    EQU 38H       ;屏宽度***128***(((根据实际情况)))
      YWKZ    EQU 4BH       ;屏的移位控制寄存器.每次移多少位寄存器***1***每16行扫完加一
     time1    EQU 3ah       ;该寄存器的数据表示显示信息字数.1到XX
     time2    EQU 3BH       ;通用寄存器
     dph1     equ 3dh
     dpl1     equ 3eh
     zd       equ 3fh       ;防止死机用的
   ISR_R0     EQU 50H       ;通用寄存器
   ISR_R1     EQU 51H       ;通用寄存器
PAGE_COUNT    EQU 52H       ;通用寄存器
FILE_COUNT    EQU 71H       ;通用寄存器
DEL0          EQU 72H       ;通用寄存器
ISR_BYTEL     EQU 73H       ;
ISR_BYTEH     EQU 74H
HANG_COUNT    EQU 75H       ;
BIT_0         EQU 76H
;AUXR1         EQU 0A2H
;*************************************************
     ORG 0000H           ;                       *
     SJMP MAIN           ;跳到主程序             *
;*************************************************
       ORG 0023H         ;串口中断入口地址.      *
       LJMP COM_ISR      ;串口中断服务处理程序.  *
;*************************************************
MAIN: SETB OE       ;CLOSE THE SCREEN
       LCALL INIT   ;清除显示缓冲区(0000H)起的数据和寄存器初始化,设置串口参数.
WAIT: SETB ROM_CE    ;给ROM片选.
        CLR ROM_A17      ;给页地址.
         CLR p4.2      ;给页地址.
          MOV DPTR,#000DH  ;DPTR指向000DH
           MOVX A,@DPTR      ;读取000DH单元的页数据.
            CJNE A,#0FFH,RUN_MAIN
             ;LCALL NO_DATA     ;给出无显示数据提示/或者显示当前屏的硬件设置参数.
              SJMP WAIT
RUN_MAIN:    MOV PAGE_COUNT,A   ;读出页数
             MOV FILE_COUNT,A
            JZ MAIN             ;判断是否有显示数据.
      MOV FILE_NAME,#00H ;从第一个文件开始显示.
REST:  LCALL READ_FILE     ;把相应页的控制数据和点阵数据取出到相应的地址.
       MOV A,video_mode    ;把显示模式取出,选择相应的显示方式.
MODE0: CJNE A,#00H,MODE1  ;是随机显示方式吗?stochastic
MODEN:  ;MOV A,FILE_NAME   ;以下是随机数产生程序.
          ;XRL A,#0AAH      ;
           ;ANL A,#03H      ;
            ;SJMP MODE0     ;上面是一个随机数的参生程序
MODE1:  CJNE A,#01H,MODE2   ;判断是静止显示方式吗?
         LCALL repose_MODE  ;静止显示方式
          SJMP NEXT_FILE    ;显示完了显示下一个文件
MODE2:  CJNE A,#02H,MODE3   ;判断是左移显示方式吗?
         ;LCALL LIFT_MODE    ;
          SJMP NEXT_FILE    ;
MODE3:  CJNE A,#03H,MODE4   ;判断是右移显示方式吗?
         LCALL right_mode   ;
          SJMP NEXT_FILE    ;
MODE4:  CJNE A,#05H,MODE5   ;判断是上移显示方式吗?
MODE5:   LCALL UP_MODE      ;
          SJMP NEXT_FILE    ;
NEXT_FILE: INC FILE_NAME    ;
           ;LCALL INIT      ;可以实现在每种显示方式之前从黑屏开始.
          DJNZ FILE_COUNT,REST;
          ;LCALL MCU_RESPONSE_YES   ;返回接收成功信息.*
         SJMP  MAIN
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
repose_MODE:  CLR RAM_CE       ;选中RAM
            lcall mv_repose
          MOV R4,DISPLAY_TIME  ;控制停留时间(速度)
FS23:    MOV R3,#10H
FS22:   mov dptr,#0000h
      MOV HANG_COUNT,HANG ;有8行
FS21: MOV A,SCREEN_KUAN_L;96个点1/8扫描有24个八位的数据.
     RL A
      MOV R2,A
        CLR LAT            ;允许数据移位
FS20:    MOVX A,@DPTR        ;取数
          CPL A
           LCALL YW_BT7
            DJNZ R2,FS20        ;调用送数据子程序.
             LCALL HANG_CE       ;调用行开通服务程序.
              SETB LAT            ;数据前面移入的数据.
               CLR OE             ;开显示
              ;LCALL PAUSE_DELAY   ;亮度延时
             DJNZ HANG_COUNT,FS21      ;8行显示完没有
            ;CLR C               ;清除CY标志
           ;MOV A,DPL           ;把DPL送A里.
         ;SUBB A,#10H         ;
         ;MOV DPL,A           ;
         DJNZ R3,FS22
         DJNZ R4,FS23        ;
           ret
mv_repose: mov r5,hang
            mov dptr,#0000h
           inc auxr1
          mov dph,byteh
         mov dpl,bytel
mv_rep1:mov a,screen_kuan_l
       rl a
      mov r6,a
mv_rep0:movx a,@dptr
       inc dptr
        inc auxr1
         movx @dptr,a
          inc dptr
           inc auxr1
          djnz r6,mv_rep0
          djnz r5,mv_rep1
          ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
right_mode:
UP_MODE:        CLR RAM_CE;选中RAM
               ;MOV AUXR,#00H
              MOV DPH,BYTEH  ;BYTEH,BYTEL里的数据是存放着READ_FILE的原始数据
             MOV DPL,BYTEL
            INC DPTR
           INC DPTR
          MOV MDPH,DPH
         MOV MDPL,DPL
        MOV R3,#02H      ;分两次8行移位
UP15: MOV A,HANG
     MOV YWKZ,A
UP14: LCALL MOV_UP
       MOV R4,SPEED        ;控制移位的速度
UP13:   MOV R1,#08H
UP12:    MOV DPTR,#0000H
       MOV HANG_COUNT,HANG ;有8行
UP11:   CLR LAT             ;允许数据移位
           MOV A,SCREEN_KUAN_L  ;192个点/24个八位的数据.1/8扫描
            RL A
           MOV R2,A
UP10:     MOVX A,@DPTR        ;取数
         CPL A
         LCALL YW_BT7
         DJNZ R2,UP10        ;调用送数据子程序.
         LCALL HANG_CE       ;调用行开通服务程序.
         SETB LAT            ;数据前面移入的数据.
         CLR OE             ;开显示
         DJNZ HANG_COUNT,UP11;8行显示完没有
         DJNZ R1,UP12
         DJNZ R4,UP13
         MOV A,SCREEN_KUAN_L ;计算下一行的起始地址
         RL A                ;
         ADD A,MDPL          ;
         MOV MDPL,A          ;
         MOV A,MDPH          ;
         ADDC A,#00H         ;
         MOV MDPH,A          ;
         DJNZ YWKZ,UP14      ;判断8行移完没有
         MOV MDPH,BYTEH
         MOV MDPL,BYTEL
         DJNZ R3,UP15
         MOV A,DISPLAY_TIME
         CJNE A,#00H,UP_REP
            RET
UP_REP:  LCALL repose_MODE
           RET
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
MOV_UP:
        MOV DPTR,#0000H
        MOV R0,#80H
        MOV A,SCREEN_KUAN_L
        RR A
        MOV R5,A
MV_UP0: MOVX A,@DPTR
        MOV @R0,A
        INC DPTR
        INC R0
        MOVX A,@DPTR
        MOV @R0,A
        INC DPTR
        INC DPTR
        INC DPTR
        INC R0
        DJNZ R5,MV_UP0
        MOV DPTR,#0000H
MV_UP1:PUSH DPH   ;保存DPTR地址 DPTR=0000H
       PUSH DPL   ;
       INC AUXR1  ;
       POP DPL    ;计算下一行的起始地址.
       POP DPH    ;
       MOV A,SCREEN_KUAN_L  ;
       RL A            ;
       ADD A,DPL       ;
       MOV DPL,A       ;
       MOV A,DPH       ;
       ADDC A,#00H     ;
       MOV DPH,A       ; DPTR=0018H
       MOV A,HANG      ;
       DEC A           ;
       MOV R5,A        ;
MV_UP3:MOV A,SCREEN_KUAN_L
       RL A
       MOV R6,A
MV_UP2:MOVX A,@DPTR ;取出数据区的第一个数据
       INC DPTR     ;地址加一
       INC AUXR1    ;变DPTR地址.
       MOVX @DPTR,A ;把数据移到上一行的数据区
       INC DPTR     ;地址加一
       INC AUXR1    ;变回地址
       DJNZ R6,MV_UP2
       DJNZ R5,MV_UP3
       MOV DPH,MDPH
       MOV DPL,MDPL
       MOV A,SCREEN_KUAN_L
       RR A
       ;RR A
       MOV R6,A
       MOV R0,#80H  ;取出数据区的第一个数据

⌨️ 快捷键说明

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