?? 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 + -