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

📄 at89c51与p89c52点对点通讯接收.asm

📁 AT89C51与P89C52点对点单片机之间通信的发送和解手程序
💻 ASM
字号:
/**************************************
*接收机采用P89C52X2BN芯片
*先发送请求信号,然后接收,接收后,送与
*显示程序,然后再发送请求信号。后经过与
*电脑的串口调试窗调试通信,验证程序正确
**************************************/
       CS   EQU   P1.0   /**/
       SID  EQU   P1.1
       SCLK EQU   P1.2
       PSB  EQU   P1.3
       REST EQU   P1.4
       HAN  BIT   30H    /*上下行识别*/
       ORG 0000H
       LJMP MAIN 
       ORG 0023H         /*串行口中断矢量地址*/
       LJMP SERVE2
       ORG 0100H
MAIN:  MOV SP,#60H
       MOV TMOD,#20H     /*定时器T1工作于方式2*/
       MOV TH1,#0FDH     /*波特率为9.6K*/
       MOV TL1,#0FDH     
       SETB TR1
       SETB EA           /*CPU中断允许位*/
       SETB ES           /*串行口中断允许位*/
       CLR  HAN          /*0为上行显示*/
       MOV PCON,#00H     /*串行通信波特率系数控制*/
       MOV SCON,#50H     /*串口状态控制寄存器*/     
       LCALL KAIPIN      /*调用开屏,串口显示参考其他*/
       MOV  R1,#10H      /*第一行显示16个*/
       MOV  R2,#10H      /*第二行显示16个*/
XUN:   MOV  A,#00H       /*发送请求信号00H*/
       MOV  SBUF,A        
WAIT:  JBC TI,XUN1       /*请求信号发送完没有*/
       AJMP WAIT
XUN1:  SJMP $   
SERVE2:JBC RI,LOOP       /*接收到没有,接收到跳"LOOP"*/
       SJMP ENDT
LOOP:  MOV A,SBUF        /*取SBUF的内容*/
       ACALL WRITESHU    /*调用显示*/
       LCALL DELAY       /*调用延时*/
       MOV A,#00H        /*发送请求信号*/
       MOV SBUF,A        
       AJMP HUAN         /*判断换行信号*/
DDD:   AJMP WAIT         /*返回等待中断*/  
ENDT:  RETI              /**/
/************************汇编换行程序段*/

HUAN: JNB HAN,HUAN1   /*判断第一行*/
      JB  HAN,HUAN3   /*判断第二行*/
HUAN1:DEC R1          /*一行为16个*/
      MOV A,#00H      /**/
      CLR C           /**/
      SUBB A,R1       /*显示的一行满了没有*/
      JNC  HUAN2      /*满了,调换行*/  
      AJMP ENDT       /*没满,返回*/
HUAN2:MOV  A,#90H     /*写入第二行首地址*/
      MOV  R1,#10H    /*再度充填一行*/
      LCALL WRITEZHI  /*换行*/
      SETB HAN        /*置位换行,进行下一行*/
      AJMP ENDT       /*返回*/
/****************************************/

/***********************/
HUAN3:DEC R2      
      MOV A,#00H    
      CLR C       
      SUBB A,R2 
      JNC  HUAN4
      AJMP ENDT
HUAN4:MOV  A,#80H
      MOV  R2,#10H
      LCALL WRITEZHI
      CLR  HAN
      AJMP ENDT
/***************************************/    
/****************************************/
KAIPIN:
       CLR   REST
       SETB  REST
       CLR   PSB
       MOV   A,#30H          ;功能设置
       ACALL WRITEZHI
       MOV   A,#30H          ;功能设置
       ACALL WRITEZHI
       MOV   A,#0FH          ;开光标
       ACALL WRITEZHI
       MOV   A,#01H          ;清屏        
       ACALL WRITEZHI
       MOV   A,#06H          ;移动
       ACALL WRITEZHI
       MOV   A,#80H
       ACALL WRITEZHI
;**********************************
;写指令子程序
;********************************** 
WRITEZHI:                  ;写指令
      PUSH  ACC
      PUSH  DPH
      PUSH  DPL
      SETB  CS
      SETB  SID
      CLR   SCLK

      SETB  SCLK           ;1
      CLR   SCLK
      SETB  SCLK           ;2
      CLR   SCLK
      SETB  SCLK           ;3
      CLR   SCLK
      SETB  SCLK           ;4
      CLR   SCLK
      SETB  SCLK           ;5
      CLR   SCLK
      CLR   SID            ;RW=0
      SETB  SCLK           
      CLR   SCLK           ;1

      CLR   SID            ;RS=0
      SETB  SCLK           
      CLR   SCLK           ;1
      CLR   SID            ;SID=0
      SETB  SCLK           
      CLR   SCLK           ;1

      ACALL ZUOYI         ;SID=A.7
      ACALL ZUOYI         ;SID=A.6
      ACALL ZUOYI         ;SID=A.5
      ACALL ZUOYI         ;SID=A.4
      
      CLR   SID            ;1
      SETB  SCLK           
      CLR   SCLK
      SETB  SCLK           ;2
      CLR   SCLK 
      SETB  SCLK           ;3
      CLR   SCLK 
      SETB  SCLK           ;4
      CLR   SCLK

      ACALL ZUOYI
      ACALL ZUOYI
      ACALL ZUOYI
      ACALL ZUOYI
      
      CLR   SID
      CLR   SCLK
      SETB  SCLK           ;1
      CLR   SCLK 
      SETB  SCLK           ;2
      CLR   SCLK 
      SETB  SCLK           ;3
      CLR   SCLK
      SETB  SCLK           ;4

      CLR   CS
      CALL  DLY8
      POP   DPL
      POP   DPH
      POP   ACC
      RET

;**********************************
;写数据子程序
;**********************************     
WRITESHU:                  ;写数据
      PUSH  ACC
      PUSH  DPH
      PUSH  DPL

      SETB  CS
      SETB  SID            ;CID=1

      CLR   SCLK  
      SETB  SCLK           ;1
      CLR   SCLK
      SETB  SCLK           ;2
      CLR   SCLK
      SETB  SCLK           ;3
      CLR   SCLK
      SETB  SCLK           ;4
      CLR   SCLK
      SETB  SCLK           ;5
      CLR   SCLK

      CLR   SID            ;SID=0
      SETB  SCLK           ;
      CLR   SCLK
    
      SETB  SID            ;SID=1
      SETB  SCLK           ;
      CLR   SCLK

      CLR   SID            ;SID=0
      SETB  SCLK
      CLR   SCLK

      ACALL ZUOYI
      ACALL ZUOYI
      ACALL ZUOYI
      ACALL ZUOYI
      
      CLR   SID            ;SID=0
      SETB  SCLK           ;1
      CLR   SCLK
      SETB  SCLK           ;2
      CLR   SCLK 
      SETB  SCLK           ;3
      CLR   SCLK 
      SETB  SCLK           ;4
      CLR   SCLK

      ACALL ZUOYI
      ACALL ZUOYI
      ACALL ZUOYI
      ACALL ZUOYI

      CLR   SID
      SETB  SCLK           ;1
      CLR   SCLK
      SETB  SCLK           ;2
      CLR   SCLK 
      SETB  SCLK           ;3
      CLR   SCLK 
      SETB  SCLK           ;4
      CLR   SCLK
      CLR   CS
      CALL  DLY8
      POP   DPL
      POP   DPH
      POP   ACC
      RET
DLY8:
      MOV   R7,#10H
DEL:  MOV   R6,#10H
DEL1: DJNZ  R6,DEL1
      DJNZ  R7,DEL
      RET
ZUOYI:
      RLC   A
      MOV   SID,C
      SETB  SCLK
      CLR   SCLK
      RET
DELAY:MOV 70H,#64H
LOOP2:MOV 71H,#64H
LOOP3:MOV 72H,#15H
LOOP4:DJNZ 72H,LOOP4
      DJNZ 71H,LOOP3
      NOP
      NOP
      NOP
      NOP
      DJNZ 70H,LOOP2
      RET
  
END     
                                   
 
                

⌨️ 快捷键说明

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