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

📄 2051.asm

📁 此程序上利用2051单片机产生逻辑信号
💻 ASM
字号:
;---------------------------
;接口宏定义
;---------------------------
CS BIT P3.5
CLK BIT P3.4
DIO BIT P3.3
KEY BIT P3.2
;---------------------------
;7289指令宏定义
;---------------------------
INS_RESET DATA 10100100B;复位清除指令
INS_TEST  DATA 10111111B;测试指令
INS_RLC   DATA 10100001B;左移指令
INS_RRC   DATA 10100000B;右移指令
INS_CLC   DATA 10100011B;循环左移指令
INS_CRC   DATA 10100010B;循环右移指令
INS_FLASH DATA 10001000B  ; d8 d7 d6 d5 d4 d3 d2 d1 ;闪烁控制
INS_HIDE  DATA 10011000B  ; d8 d7 d6 d5 d4 d3 d2 d1 : 消隐控制
INS_RDKEY DATA 00010101B ; d8 d7 d6 d5 d4 d3 d2 d1 : 读键盘数据指令

;10000a2 a1a0---DP X X X d 3 d2 d1 d0 下载数据且按方式0 译码
;11001a2 a1a0---DP X X X d 3 d2 d1 d0 下载数据且按方式1 译码
;11001a2 a1a0---DP A B C D E F G     下载数据但不译码

STRD DATA 20H
ENDD DATA 28H
PPTD DATA 30H
XCOM DATA 38H
BIT_CNT DATA 50H
DELAY1 DATA 51H
DECIMAL DATA 52H
DELAY DATA 53H
DISPLAY DATA 54H
REC_BUF DATA 55H
SEND_BUF DATA 56H
KEYDATA DATA 57H

ORG 0000H
SJMP MAIN
ORG 0003H
LJMP INTE0
;/////////////////////////////////////
;输入的数放在30H-37H;拷贝到20H-27H,转换到28H-2FH
;20H-27H中的数被破坏
;///////////////////////////////////
ORG 0030H
MAIN:
     CALL KEYSDISP
     MOV R5,#09H;////////////////键盘存数控制位
     MOV SP,#40H
     CLR P3.7
     SETB IT0
     SETB EX0
     SETB EA
     MOV 20H,#10100000B
     MOV 21H,#01010000B
     MOV 22H,#00101000B
     MOV 23H,#00010100B
     MOV 24H,#00001010B
     MOV 25H,#00000101B
     MOV 26H,#10000010B
     MOV 27H,#01000001B
     ACALL CHANGE

;////////////////////////////
;信号输出循环
;一个循环周期=5+2+1+2+1+2+1+2+2*DELAY=10000=US=10MS
;2*DELAY=10000-16=9984US
;DELAY=4992US
;////////////////////////////
 CR0:MOV R0,#28H       ;1
     SJMP CR2          ;2
 CR1:NOP               ;1
     NOP               ;1
     NOP               ;1
     NOP               ;1
     NOP               ;1
 CR2:MOV P1,@R0        ;2
     SETB P3.7         ;1
     ACALL YTIME       ;2
     CLR P3.7          ;1
     ACALL YTIME       ;2
     INC R0            ;1
     CJNE R0,#30H,CR1  ;2
     SJMP CR0          ;2

;////////////////////////////////////
;把20H-27H中的数转置90度后放入28H-2FH中
;////////////////////////////////////
CHANGE:
     MOV R0,#28H
 LO1:MOV R1,#20H
 LO2:PUSH A
     MOV A,@R1
     RRC A
     MOV @R1,A
     POP A
     RRC A
     INC R1
     CJNE R1,#28H,LO2
     MOV @R0,A
     INC R0
     CJNE R0,#30H,LO1
     RET
;////////////////////////////////////
;延时4992us
;(1+2*R7+2)*R6+1+2=4992
;R7=#0F7H=247
;R6=0AH=10
;(1+2*R7+2)*R6=4970
;NOP=19
;////////////////////////////////////
YTIME:
     MOV R6,#0AH   ;1
 DE0:MOV R7,#0F7H  ;1
     DJNZ R7,$     ;2
     DJNZ R6,DE0   ;2
     MOV R6,#09H   ;1
     DJNZ R6,$     ;2*9=18
     RET           ;2
;////////////////////////////////////
INTE0:
     CALL  GETKEY ;接收按键程序

⌨️ 快捷键说明

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