音频视频切换器相关讨论。
我现在想做一个视频音频切换的小东西。
计划是用at89c51,通过i2c来控制TEA6420(audio)和TEA6415C(video).
我的目的是:把一根信号线在不同的时间让不同的电视使用。信号线包括二根音频线,一根视频线。我所用的线路很简单。大家可以,一看就明白那些电路。
我的输入选择20口,六个输出13-18
单片机程序:
VSCL BIT P2^6
VSDA BIT P2^7
SLA EQU 50H
NUMBYT EQU 51H
MTD EQU 52H
MRD EQU 52H
SLAW EQU 06H
ORG 00H
LJMP MAIN
ORG 23H
LJMP KSCAN
ORG 30H
MAIN:
MOV A,#0FFH
MOV P2,A
CLR P2^0
CLR EA
MOV R1,#MTD;这里想让他们六个同时用一个信号
MOV @R1,06H
INC R1
MOV @R1,0EH
INC R1
MOV @R1,16H
INC R1
MOV @R1,1EH
INC R1
MOV @R1,26H
INC R1
MOV @R1,2EH
MOV NUMBYT,#6
MOV SLA,#SLAW
LCALL WRNBYT
SETB EA
KSCAN:
MOV A,#0FFH;键盘扫描程序
MOV P1,A
MOV A,P1
JZ KSCAN
CALL T12MS
MOV A,P1
JZ KSCAN
CALL T12MS
JNB ACC.0,AAAA
JNB ACC.1,BBBB
JNB ACC.2,CCCC
JNB ACC.3,DDDD
JNB ACC.4,ERROR
JNB ACC.5,ERROR
JNB ACC.6,ERROR
JNB ACC.7,ERROR
JMP KSCAN
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AAAA:
MOV A,0FFH;点亮指示灯
MOV P2,A
CLR P2^0
;*******************
CLR EA;将20口和18口通
MOV R1,#MTD
MOV @R1,06H
MOV NUMBYT,#1
MOV SLA,#SLAW
LCALL WRNBYT
SETB EA
JMP KSCAN
;----------------------------
BBBB:
MOV A,0FFH
MOV P2,A
CLR P2^1
;*******************
CLR EA
MOV R1,#MTD
MOV @R1,0EH
MOV NUMBYT,#1
MOV SLA,#SLAW
LCALL WRNBYT
SETB EA
JMP KSCAN
;----------------------------
CCCC:
MOV A,0FFH
MOV P2,A
CLR P2^2
;*******************
CLR EA
MOV R1,#MTD
MOV @R1,16H
MOV NUMBYT,#1
MOV SLA,#SLAW
LCALL WRNBYT
SETB EA
JMP KSCAN
;----------------------------
DDDD:
MOV A,0FFH
MOV P2,A
CLR P2^3
;*******************
CLR EA
MOV R1,#MTD
MOV @R1,1EH
MOV NUMBYT,#1
MOV SLA,#SLAW
LCALL WRNBYT
SETB EA
JMP KSCAN
;----------------------------
ERROR:
JMP KSCAN
T12MS:
MOV R7,#18H
D1: MOV R6,#0FFH
D2: DJNZ R6,D2
DJNZ R7,D1
RET
;NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
;Virtual I2C bus program
STA: SETB VSDA;启动I2C总线
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSDA
NOP
NOP
NOP
NOP
CLR VSCL
RET
;*********************************************************************************
STOP:
CLR VSDA ;停止I2C总线数据传送
SETB VSCL
NOP
NOP
NOP
NOP
SETB VSDA
NOP
NOP
NOP
NOP
CLR VSDA
CLR VSCL
RET
MACK:
CLR VSDA ;发送应答位
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
SETB VSDA
RET
MNACK:
SETB VSDA ;发送非应答位
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
CLR VSDA
RET
CACK: SETB VSDA ;应答位检查
SETB VSCL
CLR F0
MOV C,VSDA
JNC CEND
SETB F0
CEND: CLR VSCL
RET
WRBYT: MOV R0,#08H ;向VSDA线上发送1个数据字节
WLP: RLC A
JC WR1
AJMP WR0
WLP1: DJNZ R0,WLP
RET
WR1: SETB VSDA
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
CLR VSDA
AJMP WLP1
WR0: CLR VSDA
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
AJMP WLP1
RDBYT: MOV R0,#08H ;从VSDA线上读取1个数据字节
RLP: SETB VSDA
SETB VSCL
MOV C,VSDA
MOV A,R2
RLC A
MOV R2,A
CLR VSCL
DJNZ R0,RLP
RET
WRNBYT: MOV R3,NUMBYT ;虚拟I2C总线发送N个字节数据
LCALL STA
MOV A,SLA
LCALL WRBYT
LCALL CACK
JB F0,WRNBYT
MOV R1,#MTD
WRDA: MOV A,@R1
LCALL WRBYT
LCALL CACK
JB F0,WRNBYT
INC R1
DJNZ R3,WRDA
LCALL STOP
RET
RDNBYT: MOV R3, NUMBYT ;模拟I2C总线接收n个 ;字节数据
LCALL STA
MOV A,SLA
LCALL WRBYT
LCALL CACK
JB F0,RDNBYT
RDN: MOV R1,#MRD
RDN1: LCALL RDBYT
MOV @R1,A
DJNZ R3,ACK
LCALL MNACK
LCALL STOP
RET
ACK: LCALL MACK
INC R1
SJMP RDN1
END
我有点问题是,我控制的时候,六个信号输出全部都有信号,但是变的黑乎乎的,好像程序没有用,信号都干扰过去了。
我的信号是卫星数字信号。大概3000MHZ,不知道有没有人感兴趣一起做做看。
听说用MAX459也可以,不知道行吗?有一个MAX4137好像也不错。
搞的现在很矛盾。
希望高手能指点一二:top00072@chinaren.com
发表时间:2004年12月10日11:06:17