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

📄 irdacom.asm

📁 用C51制作的红外通讯装置
💻 ASM
字号:
; **************************************************************
;   IrDA Data Communication Test Procedure
; **************************************************************

; PCON       EQU          87H
; 定义端口
DOUT       BIT          P1.0   ; 数据输出
DIN        BIT          P1.1   ; 数据输入
SCLK       BIT          P1.2   ; 串行时钟
CS         BIT          P1.3   ; 片选信号-低电平有效
IRQ        BIT          P3.2   ; 红外通信中断信号,在程序中轮询
; RAM地址分配
TX1        EQU          10H    ; 发送寄存器 
TX2        EQU          11H    ; 发送寄存器 
RX1        EQU          12H    ; 接收寄存器 
RX2        EQU          13H    ; 接收寄存器 
; **************************************************************
ORG        00H
BEGIN:
	MOV       SP,        #70H   ; 堆栈初始化
        CLR       SCLK               ; 清空时钟线信号
; 初始化89C52的串口: 红外方式工作在9600波特率
        MOV       TMOD,      #20H   ; T1的波特率
        MOV       TH1,       #253   ; 重装数值
        MOV       SCON,      #50H
        MOV       PCON,      #80H   ; 波特率加倍
        MOV       TCON,      #40H   ; 计数器开始工作
; 初始化MAX3100串口--红外方式工作在9600波特率
        MOV       TX1,       #0E4H
        MOV       TX2,       #0CAH  ; 9600波特率,两个停止位
        CALL      UTLK              ; 串口写

; ************************* 主程序循环 ***************************
LOOP: 
JNB        IRQ,      URCV      ; 判断有数据
NRECV:
JBC        RI,       RCV51
        JMP        LOOP
; 从MAX3100接收,从8951发送    
URCV:
MOV        TX1,     #0         ; 读数据
MOV        TX2,     #0         
CALL       UTLK                ; 将数据发送到RX
MOV        A,      RX2         ; 将数据送入累加器
MOV        SBUF,   A           ; 发送RS-232信号
JMP        LOOP
; 从MAX3100发送,从8951接收
RCV51:
        MOV        A,       SBUF       ; 从8951获得数据
        MOV        TX1,     #80H
        MOV        TX2,     A          ; 准备红外数据
  CALL         UTLK                    ; 从红外端口发送数据
  JMP          LOOP

; **************************************************************
; 子程序
; 完成16位数据的收发    
; 从TX1、TX2发送16位比特;从RX1、RX2接收16位比特  
UTLK:
CLR          CS                    ; 片选工作
MOV          A,         TX1
CALL         BYT8                  ; 发送
MOV          RX1,        A         ; 从RX1获得数据
MOV          A,         TX2        ; 获得高位字节
CALL         BYT8                  ; 发送
MOV          RX2,       A          ; 从RX2获得数据        
SETB         CS                    ; 关闭片选
      RET

; **************************************************************
; 字节的移位
BYT8:
MOV          R4,         #8        ; 8位数据
SETB         DIN
B8LP:
RLC          A                     ; 载入高位字节
MOV          DOUT,       C         ; 输出
SETB         SCLK                  ; 时钟高电平
MOV          C,          DIN       ; 获得数据
CLR          SCLK                  ; 时钟低电平
MOV          ACC.0,      C         ; 向ACC中放入第一个bit
DJNZ	     R4,	 B8LP      ; 循环8bit
RET
; 代码结束
END

⌨️ 快捷键说明

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