📄 vedio-ch.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 + -