www.pudn.com > BC7281A查询方式代码.rar > LED.ASM


BIT_COUNT   DATA 07FH 
TIMER       DATA 07EH 
TIMER1      DATA 07DH 
TEMP        DATA 07CH 
DATA_IN     DATA 021H 
DATA_OUT    DATA 020H 
 
 
CLK         BIT  P3.5 
DAT         BIT  P3.4 
KEY         BIT  P3.3 
 
 
ORG   000H 
JMP   START 
 
 
ORG   100H 
START:   MOV SP,#2FH             ;设置堆栈 
         MOV TIMER,#50H 
DELAY:   MOV TIMER1,#0FFH         ;延时已确保7281完成复位 
DELAY1:  DJNZ TIMER1,DELAY1 
         DJNZ TIMER,DELAY 
 
         MOV DATA_OUT,#12H 
         CALL SEND               ;8271初始化 
         MOV DATA_OUT,#80H 
         CALL SEND               ;设置为164模式,不反相 
 
MAIN:    JB KEY,MAIN             ;等待按键 
         MOV DATA_OUT,#93H       ;读键值 
         CALL SEND 
         CALL RECEIVE            ;读出数据 
         MOV DATA_OUT,#15H       ;HEX译码指令 
         CALL SEND 
         MOV TEMP, DATA_IN 
         ANL TEMP,#0F0H          ;键值高4位在第一位显示 
         MOV A,TEMP 
         SWAP A 
         ORL A,#10H 
         MOV DATA_OUT,A 
         CALL SEND 
         MOV DATA_OUT,#15H       ;HEX译码指令 
         CALL SEND 
         MOV A,DATA_IN 
         ANL A,#0FH              ;取键值低4位 
         MOV DATA_OUT,A          ;在0位显示 
         CALL SEND 
         JMP MAIN 
 
 
SEND:    CLR  CLK 
         SETB CLK 
WAIT1:   JB DAT,SEND 
         CLR  CLK 
         SETB CLK 
WAIT2:   JNB DAT,WAIT2 
         MOV BIT_COUNT,#08H 
SENDLOOP:MOV C,DATA_OUT.7 
         MOV DAT,C 
         CLR  CLK 
         SETB CLK 
         MOV A,DATA_OUT 
         RL A 
         MOV DATA_OUT,A 
         NOP 
         NOP 
         NOP 
         DJNZ BIT_COUNT,SENDLOOP 
         SETB DAT 
         NOP 
         NOP 
         NOP 
         NOP 
      RET 
 
RECEIVE: CLR  CLK 
         SETB CLK 
WAIT3:   JB DAT,WAIT3 
         CLR  CLK 
         SETB CLK 
         MOV BIT_COUNT,#08H 
REC_LOOP:NOP 
         NOP 
         NOP 
         NOP 
         NOP 
         NOP 
         NOP 
         NOP 
         NOP 
         MOV A,DATA_IN 
         MOV C,DAT 
         RLC A 
         MOV DATA_IN,A 
         CLR  CLK 
         SETB CLK 
         DJNZ BIT_COUNT,REC_LOOP 
         NOP 
         NOP 
         NOP 
         NOP 
      RET 
END