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

📄 vedio-ch.asm

📁 这是用MCUAT89C2051控制切换芯片MT8816,8路输入,16路输出的视频切换源程序
💻 ASM
字号:
     ;《袖珍型视频切换器》工作程序
     ;MCU-AT89C2051-切换芯片MT8816-8路输入->16路输出
     ;AT89C2051的P1口控制MT8816地址,数据线对应表:
     ;________________________________________________
     ;P1.7, P1.6, P1.5, P1.4,  P1.3, P1.2, P1.1, P1.0
     ;================================================
     ;DATA, AY2 , AY1 , AY0 ,  AX3 , AX2 , AX1 , AX0
     ;================================================
     ;开关   选择输入Y0-Y7      选择输出 X0-X15
     ;________________________________________________
     ;P3口线连接关系:
     ;P3.7->CS     :8816片选, 1有效
     ;P3.5->STROBE :下降沿将DATA锁存到指定地址中
     ;P3.4->LED3阳极, 0有效 ,MAIN 按纽 - 输出端加1
     ;P3.3->LED2阳极, 0有效 ,NUM  按纽 - 输出端减1
     ;P3.2->LED1阳极, 0有效 ,AUC  按纽 - 输入端加1
     ;********************************************
     ;内部RAM分配
     ;*** 1.显示缓冲区,数据寄存区
     ;____________________________________
     ;LED1, LED2, LED3, Xn , PC
     ;====================================
     ;31H , 32H , 33H , 34H, 35H
     ;====================================
     ;P3.2, P3.3, P3.4  (控制位)
     ;——————————————————
     ;*** 2.切换数据区:40H-4FH共16个单元, 对应 X0-X15
     ;用单元地址低四位0-F表示X0-X15输出端地址AX3-AX0
     ;用单元中的低四位表示Y0-Y7输入端地址AY2-AY0,其中D3位为0
      ORG  0000H
RESET:MOV  SP  , #6FH
      MOV  IE  , #90H
      MOV  TMOD, #20H
      MOV  SCON, #50H    ;方式1
      MOV  TH1 , #0FAH   ;波特率为4.8K
      MOV  TL1 , #0FAH
      SETB TR1      
      MOV  R0  , #40H    
      CLR  A
SETUP:MOV  @R0 , A       ;R0内部数据区清零
      INC  R0
      CJNE R0  , #50H , SETUP
      MOV  31H , A       ;显示缓冲区赋初值
      MOV  32H , #01H
      SJMP MAIN
      ;***** 串行口中断入口 *****
SIOIN:AJMP SIOVA
      ;--------------------------
MAIN: MOV  33H , A   
      MOV  34H , #01H    ;输出Xn计数初值
      MOV  R0  , #40H
      CLR  P3.7          ;CS=0
      ;***** 主循环程序段
DISUP:ACALL      DISUB
      MOV  P1  , #0FFH   ;关闭显示
MAINP:JB   P3.4, NUMAP   ;检查按键
      JNB  P3.4, $       ;MAIN键处理,输出加1
      MOV  A   , 34H
      INC  A
      CJNE A   , #11H , NEXTP
      MOV  A   , #01H         ;二进制输出端口地址初值
NEXTP:MOV  34H , A            ;按01H-10H格式存放
TOBCD:CJNE A   , #10H , BCD15
      MOV  31H , #01H
      MOV  32H , #06H         ;Xn=1000,显示16
GETAX:MOV  A   , 34H
      DEC  A
      ANL  A   , #0FH
      ADD  A   , #40H
      MOV  R0  , A            ;R0=数据区地址
      MOV  A   , @R0
      MOV  33H , A            ;LED3显示输入
      AJMP       DISUP
BCD15:ADD  A   , #00H         ;Xn=0001-1111
      DA   A                  ;转换成1-15
      MOV  R4  , A
      ANL  A   , #0FH
      MOV  32H , A
      MOV  A   , R4
      ANL  A   , #0F0H
      SWAP A
      MOV  31H , A
      SJMP       GETAX
NUMAP:JB   P3.3, AUCIO  
      JNB  P3.3, $         ;NUM键处理,输出减1
      MOV  A   , 34H
      DEC  A
      JNZ        NEXTP
      MOV  A   , #10H
      AJMP       NEXTP
AUCIO:JB   P3.2, DISUP
      JNB  P3.2, $        ;AUC键处理,输入加1
      SETB P3.7           ;CS=1,选中MT8816
      MOV  A   , 34H
      DEC  A
      ANL  A   , #0FH
      MOV  R5  , A        ;AX0-AX3地址存R5中
      MOV  A   , 33H      ;取原切换点
      JZ   GONO           ;原状态为0,断开所有输入信号
      DEC  A
      SWAP A
      ANL  A   , #70H     ;DATA=0,关闭原开关点
      ADD  A   , R5
      MOV  P1  , A        ;关闭原开关点
      SETB P3.5
      MOV  A   , 33H
      CLR  P3.5           ;STB下降沿锁存数据
      ANL  A   , #07H
      SWAP A
GONO: SETB Acc.7          ;DATA=1
      ADD  A   , R5
      MOV  P1  , A        ;接通新开关点
      SETB P3.5
      MOV  A   , 33H
      CLR  P3.5           ;STB下降沿锁存数据
      CLR  P3.7           ;CS=0
      INC  A
      CJNE A   , #09H , OUTIN
      MOV  A   , #01H
OUTIN:MOV  33H , A        ;按00H,01H,....08H格式存放
      MOV  @R0 , A        ;保存输入端口地址
TODIS:AJMP       DISUP
      ;******串行口中断子程序
SIOVA:CLR  ES
      SETB RS0             ;转换到1区
      MOV  R6  , A
      MOV  R7  , PSW
      JBC  RI  , CINTE
      CLR  TI
SIOED:MOV  PSW , R7        ;中断结束,返回
      MOV  A   , R6
      SETB ES
      CLR  RS0
      RETI
CINTE:MOV  A   , SBUF
      MOV  35H , A         ;按DATT,AY2..AY0,AX3...AX0原格式接收
      ANL  A   , #0FH
      MOV  R3  , A         ;保存AX3-AX0地址,二进制数
      MOV  34H , A         ;保存输出通道数
      INC  34H             ;变成01H-10H格式
      ADD  A   , #00H      ;计算显示输出地址,
      DA   A               ;按1-16BCD码格式显示
      ADD  A   , #01H
      DA   A
      MOV  R4  , A
      ANL  A   , #0FH
      MOV  32H , A         ;显示个位数
      MOV  A   , R4
      ANL  A   , #0F0H
      SWAP A
      MOV  31H , A         ;显示十位数
      MOV  A   , R3
      ADD  A   , #40H      ;计算数据区地址
      MOV  R0  , A         ;得到数据区地址
      MOV  A   , @R0       ;得到输出端口所接原交叉点
      SETB P3.7            ;CS=1,选中MT8816
      JZ   OPEN8
      DEC  A
      SWAP A      
      ADD  A   , R3
      MOV  P1  , A         ;关闭原交叉点
      SETB P3.5
      NOP
      CLR  P3.5            ;STB下降沿锁存数据
OPEN8:MOV  A   , 35H
      JNB  Acc.7,CINTB    ;DATA=0,断开原输入点不再接通新输入点
      MOV  P1  , A        ;按接收的原数据写入8816
      SETB P3.5           ;按通新的交叉点
      ANL  A   , #70H
      CLR  P3.5           ;STB下降沿锁存数据
      SWAP A
      INC  A
CINWR:CLR  P3.7           ;CS=0
      MOV  @R0 , A        ;保存接收的输入端口数
      MOV  33H , A        ;显示输入端口
      AJMP SIOED      
CINTB:CLR  A              ;断开所有输入信号,保存00H
      SJMP CINWR
      ;***** 显示子程序 DISUB 
DISUB:MOV  DPTR, #TABEL 
      MOV  A   , 31H     
      JZ         DISD2   ;数据为0不显示
      CLR  P3.2          ;LED1位显示
      MOV  P1  , #0F9H   ;LED1显示1("1"段码=F9)
      ACALL      DS2MS
      SETB P3.2
DISD2:MOV  A   , 32H     ;LED2位显示
      MOVC A   , @A+DPTR
      MOV  P1  , A
      CLR  P3.3         
      ACALL      DS2MS
      SETB P3.3
      MOV  A   , 33H     ;LED3位显示
      MOVC A   , @A+DPTR
      MOV  P1  , A
      CLR  P3.4         
      ACALL      DS2MS
      SETB P3.4
      RET
DS2MS:MOV  R6  , #02H     ;延时1ms子程序 
DS1MS:MOV  R7  , #0F0H
LTIME:NOP
      NOP
      DJNZ R7  , LTIME
      DJNZ R6  , DS1MS
      RET
     ;**** 共阳数码管段码表 ****
TABEL:DB 0C0H,0F9H,0A4H,0B0H ;0,1,2,3
      DB 99H, 92H, 82H, 0D8H ;4,5,6,7
      DB 80H, 90H, 88H,  83H ;8,9,A,B
      DB 0C6H,0A1H,86H,  8EH ;C,D,E,F
      DB 8CH, 89H, 0C7H      ;P,H,L
      END


⌨️ 快捷键说明

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