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

📄 89c51communication.txt

📁 实现两片基于89c51的功能块之间的通信
💻 TXT
📖 第 1 页 / 共 3 页
字号:
           acall rom_disp
           acall long
           acall rec_pc
           clr 20h.2

           ajmp main

shanzhuan:jnb 20h.4,sz_next1;是删除键
          lcall del
          clr 20h.4
          ajmp main

sz_next1:jnb 20h.7,sz_next2;是发送键
         jnb f0,sed
         lcall send
         clr 20h.7
         acall clear_screen
         acall quweishuru
         acall rom_disp
         acall long
         acall del
         ajmp main
sed:acall rdy_try_link
     acall rom_disp
     acall long
     acall anjiantishi
     acall rom_disp
     acall long
     clr 20h.7
     ajmp main
sz_next2:jnb 20h.6,f_main;是连接键
         lcall link
         clr 20h.6
         ajmp main

f_main:acall  zhuanhuan
       acall wb_disp;显示汉字
       ajmp main
;******************************
;******************************
;*****************************
;********键扫描***********

;***********************


KEY:MOV P2,#0FH
    MOV A,P2
    ANL A,#0FH
    CJNE A,#0FH,next
;-------------------------------
;yan shi hou zai pan duan
NEXT:ACALL D20MS
     MOV P2,#0FH
     MOV A,P2
     ANL A,#0FH
     CJNE A,#0FH,KEY_adjust
     ajmp key
;-------------------------------
KEY_ADJUST:MOV P2,#01111111b
       JNB P2.3,KEY1;等于1  ,不是1键
       JNB P2.2,KEY2
       JNB P2.1,KEY3
       JNB P2.0,KEY4
       MOV P2,#10111111b
       JNB P2.3,KEY5
       JNB P2.2,KEY6
       JNB P2.1,KEY7
       JNB P2.0,KEY8
       MOV P2,#11011111b
       JNB P2.3,Key9
       JNB P2.2,Key0
       JNB P2.1,Key_de
       jnb p2.0,key_lin
       MOV P2,#11101111b
       JNB P2.3,Key_sen

       jnb  p2.0,ky_pc
       AJMP KEY
;-------------------------------

;--------------------------------------------
KEY1:acall key_shifang
     MOV NUM_SBUF,#30H
     mov qw_num ,#00h
     AJMP qw_adjust
 KEY2:acall key_shifang
     MOV NUM_SBUF,#31H
    mov  qw_num,#01h
     AJMP qw_adjust
KEY3:acall key_shifang
      MOV NUM_SBUF,#32H
     mov qw_num,#02h
     AJMP qw_adjust
KEY4:acall key_shifang
     MOV NUM_SBUF,#33H
     mov qw_num,#03h
     AJMP qw_adjust
KEY5:acall key_shifang
     MOV NUM_SBUF,#34H
     mov qw_num,#04h
     AJMP qw_adjust
KEY6:acall key_shifang
     MOV NUM_SBUF,#35H
       mov qw_num,#05h
     AJMP qw_adjust
KEY7: acall key_shifang
    MOV NUM_SBUF,#36H
     mov qw_num,#06h
     AJMP qw_adjust
KEY8:acall key_shifang
     MOV NUM_SBUF,#37H
     mov qw_num,#07h
     AJMP qw_adjust
KEY9:acall key_shifang
     MOV NUM_SBUF,#38H
     mov qw_num,#08h
     AJMP qw_adjust;区位码数判断
KEY0:acall key_shifang
     MOV NUM_SBUF,#39H
     mov qw_num,#09h
     ajmp qw_adjust
key_de:ajmp key_del
key_lin:ajmp key_link
key_sen:ajmp key_send
ky_pc:ajmp key_pc
;***********************************
qw_adjust: inc qw_counter
      mov a,qw_counter
     cjne a,#01h,next00
      mov qm_1,qw_num
      acall qw_disp
      ajmp key
next00:mov a,qw_counter
       cjne a,#02h,next10
        mov qm_2,qw_num
        lcall qw_disp
        ajmp key
next10: mov a,qw_counter
        cjne a,#03h,next20
         mov wm_1,qw_num
         lcall qw_disp
         ajmp key
next20: mov a,qw_counter
        cjne a,#04h,next30
        mov  qw_counter,#0h
         inc han_counter
         mov wm_2,qw_num
         lcall qw_disp
         ajmp key_ret
next30:ajmp key_ret
;**************************************
key_del: setb 20h.4
         acall key_shifang
         ajmp key_ret

key_link:setb f0
         setb 20h.6
         ;acall rdy_link_tishi
         acall key_shifang
         ajmp key_ret
key_send:
         setb 20h.7
         acall key_shifang
         ajmp key_ret
key_ret:ret
;*************连接**********************
link:acall link_success
     acall fasongqiandao
     acall link1
     acall jieshouqiandao
     clr tr0
     MOV TL0,#0H
     MOV TH0,#0H;定时为0.6s
     jnb f1,KKK
     acall rom_disp
     acall long
     acall chongxinglink_disp
     acall rom_disp
     clr f1
     RET
KKK:acall rom_disp
       ret
;**********************
link1:mov sbuf,#50h
wt3:jnb ti,wt3
    clr ti
    ret
;***********************
link_success:MOV FIRST_ADD,#00H ;设定字符/汉字显示起始位置为第一个显示单元
        MOV FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
        MOV DPTR, #link_success_disp;需要显示汉字机内码数据表
        MOV word_WID,#04H		;每行显示汉字个数
        MOV word_LIN,#01H		;显示行数
	    MOV START_ADD,#00H
        RET
rdy_try_link:MOV FIRST_ADD,#00H ;设定字符/汉字显示起始位置为第一个显示单元
        MOV FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
        MOV DPTR, #try_link		;需要显示汉字机内码数据表
        MOV word_WID,#04H		;每行显示汉字个数
        MOV word_LIN,#01H		;显示行数
	    MOV START_ADD,#00H
        RET
 rdy_start_disp:MOV FIRST_ADD,#00H ;设定字符/汉字显示起始位置为第一个显示单元
        MOV FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
        MOV DPTR, #start_disp		;需要显示汉字机内码数据表
        MOV word_WID,#04H		;每行显示汉字个数
        MOV word_LIN,#01H		;显示行数
	    MOV START_ADD,#00H
        RET
 anjiantishi:MOV FIRST_ADD,#00H  ;设定字符/汉字显示起始位置为第一个显示单元
        MOV FIRST_LIN,#01H		;设定字符/汉字显示起始位置为第一行
        MOV DPTR, #anjiantishi_disp;需要显示汉字机内码数据表
        MOV word_WID,#04H		;每行显示汉字个数
        MOV word_LIN,#01H		;显示行数
	    MOV START_ADD,#00H
        RET
;**************************************
;**************************************
;**********转换************************

zhuanhuan :mov a,qm_1
mov b,#10d ;vx10
mul ab
MOV B,qm_2
add a,B
mov b,#16d ;chu 16
DIV ab
swap a
orl a,b
ADD A,#20H
ADD A,#80H
mov jnm1_sbuf,a
mov a,wm_1
mov b,#10d ;vx10
mul ab
MOV B,wm_2
add a,B
mov b,#16d ;chu 16
DIV ab
swap a
orl a,b
ADD A,#20H
ADD A,#80H
;***********
mov jnm2_sbuf,a


mov @r1,jnm1_sbuf
inc r1
mov @r1,jnm2_sbuf
inc r1

mov a,counter
add a,#02h
mov counter,a
zhuanhuan_ret:ret
;**************************



;***********显示-RAM*********************
wb_disp:mov a,han_counter
     cjne a,#01h,next2_wb
     mov a,#90h
     lcall input
loop3:				;因为要连续输入机内码高位(区码)、低位(位码)
    MOV A,jnm1_sbuf	;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书
    LCALL DISPL			;DATA	INPUT
    MOV A,jnm2_sbuf
    LCALL DISPL			;DATA	INPUT
    LCALL DELAY01
    ajmp disp_ret

next2_wb:mov a,han_counter
         cjne a,#02h,next3_wb
         mov a,#91h
         lcall input
         ajmp loop3
next3_wb:mov a,han_counter
         cjne a,#03h,next4_wb
         mov a,#92h
         lcall input
         ajmp loop3
next4_wb:mov a,han_counter
         cjne a,#04h,next5_wb
         mov a,#93h
         lcall input
         ajmp loop3
next5_wb:mov a,han_counter
     cjne a,#05h,next6_wb
    mov a,#88h
    lcall input
    AJMP LOOP3
next6_wb:mov a,han_counter
         cjne a ,#06h,next7_wb
         mov a,#89h
         lcall input
         ajmp loop3
next7_wb:mov a,han_counter
        cjne a,#07h,next8_wb
        mov a,#8ah
         lcall input
         ajmp loop3
next8_wb:mov a,han_counter
        cjne a,#08h,next9_wb
        mov a,#8bh
         lcall input
         ajmp loop3
next9_wb:mov a,han_counter
         cjne a,#09h,next10_wb
         MOV A,#98H
         LCALL INPUT

next10_wb:mov a,han_counter
        cjne a,#0Ah,next11_wb
        mov a,#99h
         lcall input
         ajmp loop3
next11_wb:mov a,han_counter
cjne a,#0Bh,next12_wb
mov a,#9ah
         lcall input
         ajmp loop3
next12_wb:mov a,han_counter
cjne a,#0Ch,next13_wb
mov a,#9bh
         lcall input
         ajmp loop3
next13_wb:ret
disp_ret:ret


qw_disp:

        mov a,#80h
        lcall input
        mov a,num_sbuf
        lcall displ
        lcall delay01
        ret
DISPL:  LCALL	CHK_BUSY			;P3--CONTRAL	I/O
        NOP				;P3=11111001B   RS=1	WRITE DATA
        SETB	RS
        CLR	RW
        SETB E				;E=E(I/O)
        MOV  P1, A			;P1=DATA(I/O)
        LCALL  DELAY01
        NOP
        CLR E
        NOP
        MOV     P1,#0FFH
        RET
DELAY01: MOV  R6, #6
D5:     MOV  R7, #08h
D6:     DJNZ R7, D6
        DJNZ R6, D5
        RET
  CHK_BUSY:    CLR     RS	;读忙状态子程序
        SETB    RW
        SETB    E
HEHE1:  JB      P1.7,HEHE1
        CLR     E
        RET
D20MS:mov r7,#14h
loop1:mov r6,#0ffh
loop2:nop
  nop
  djnz r6,loop2
  djnz r7,loop1
  ret
KEY_shifang:mov P2,#0FH
            MOV A,P2
            ANL A,#0FH
            CJNE A,#0FH,KEY_shifang
            ret
INPUT:  LCALL	CHK_BUSY		;以确保上一指令/数据模块已经接收处理完
					;P3--CONTRAL	I/O
        NOP				;P3=11111000B	RS=0	WRITE	INSTRUTION
        CLR 	RS
        CLR	RW
        SETB E				;E=E(I/O)
        MOV P1, A			;P1=DATA(I/O)
        LCALL  DELAY01
        NOP
        CLR E
        NOP
        MOV     P1,#0FFH
        RET
del:lcall clear_screen
    mov qw_counter,#0h
    mov han_counter,#0h
    clr f0
    mov 20h,#0h
    mov counter,#0h
    mov r1,#hanzi_sbuf
del_ret:ret

RoM_DISP1:setb	RESET
	setb	PSB
	CLR	RW
ROM_QIU1:	LCALL INITIL	;调用系统初始化程序
        MOV A, #0CH		;开显示,关游标
        LCALL INPUT
        LCALL DELAY01
  	    MOV A, #01H			;DDRAM清零,DDRAM地址计数器到00H
        LCALL INPUT
        LCALL DELAY01
;-------------------------
ROM_DISP:
	MOV R1,WORD_WID
ROM_NWORD10:	LCALL	DEADD	;调用调整地址单元子程序
	MOV A, START_ADD			;设定DDRAM地址,显示位置地址
    LCALL INPUT
ROM_NWORD11:CLR A 		   ;因为要连续输入机内码高位(区码)、低位(位码)
    MOVC A,@A+DPTR			;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书

        LCALL DISPL
       	CLR A		;DATA	INPUT
        INC DPTR
        movC A,@A+DPTR
        lcall displ
        LCALL DELAY01
        INC DPTR
        DJNZ	R1,ROM_NWORD11
        MOV	R1,WORD_WID		;调整显示长度
        INC	FIRST_LIN		;跳到下一行
        DJNZ	WORD_LIN,ROM_NWORD10

        ret
DELAY:  MOV  R5,#03H
C0:	MOV  R6, #0FFH
C1:     MOV  R7, #0FFH
C2:     DJNZ R7, C2

⌨️ 快捷键说明

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