📄 irdacom.lst
字号:
A51 MACRO ASSEMBLER IRDACOM 01/17/2005 16:33:28 PAGE 1
MACRO ASSEMBLER A51 V7.02a
OBJECT MODULE PLACED IN IrDACom.OBJ
ASSEMBLER INVOKED BY: D:\Keil\C51\BIN\A51.EXE IrDACom.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ; **************************************************************
2 ; IrDA Data Communication Test Procedure
3 ; **************************************************************
4 ; PCON EQU 87H
5 ; 定义端口
0090 6 DOUT BIT P1.0 ; 数据输出
0091 7 DIN BIT P1.1 ; 数据输入
0092 8 SCLK BIT P1.2 ; 串行时钟
0093 9 CS BIT P1.3 ; 片选信号-低电平有效
00B2 10 IRQ BIT P3.2 ; 红外通信中断信号,在程序中轮询
11 ; RAM地址分配
0010 12 TX1 EQU 10H ; 发送寄存器
0011 13 TX2 EQU 11H ; 发送寄存器
0012 14 RX1 EQU 12H ; 接收寄存器
0013 15 RX2 EQU 13H ; 接收寄存器
16 ; **************************************************************
0000 17 ORG 00H
0000 18 BEGIN:
0000 758170 19 MOV SP, #70H ; 堆栈初始化
0003 C292 20 CLR SCLK ; 清空时钟线信号
21 ; 初始化89C52的串口: 红外方式工作在9600波特率
0005 758920 22 MOV TMOD, #20H ; T1的波特率
0008 758DFD 23 MOV TH1, #253 ; 重装数值
000B 759850 24 MOV SCON, #50H
000E 758780 25 MOV PCON, #80H ; 波特率加倍
0011 758840 26 MOV TCON, #40H ; 计数器开始工作
27 ; 初始化MAX3100串口--红外方式工作在9600波特率
0014 7510E4 28 MOV TX1, #0E4H
0017 7511CA 29 MOV TX2, #0CAH ; 9600波特率,两个停止位
001A 113D 30 CALL UTLK ; 串口写
31
32 ; ************************* 主程序循环 ***************************
001C 33 LOOP:
001C 30B205 34 JNB IRQ, URCV ; 判断有数据
001F 35 NRECV:
001F 109810 36 JBC RI, RCV51
0022 80F8 37 JMP LOOP
38 ; 从MAX3100接收,从8951发送
0024 39 URCV:
0024 751000 40 MOV TX1, #0 ; 读数据
0027 751100 41 MOV TX2, #0
002A 113D 42 CALL UTLK ; 将数据发送到RX
002C E513 43 MOV A, RX2 ; 将数据送入累加器
002E F599 44 MOV SBUF, A ; 发送RS-232信号
0030 80EA 45 JMP LOOP
46 ; 从MAX3100发送,从8951接收
0032 47 RCV51:
0032 E599 48 MOV A, SBUF ; 从8951获得数据
0034 751080 49 MOV TX1, #80H
0037 F511 50 MOV TX2, A ; 准备红外数据
0039 113D 51 CALL UTLK ; 从红外端口发送数据
003B 80DF 52 JMP LOOP
53
54 ; **************************************************************
55 ; 子程序
56 ; 完成16位数据的收发
57 ; 从TX1、TX2发送16位比特;从RX1、RX2接收16位比特
003D 58 UTLK:
A51 MACRO ASSEMBLER IRDACOM 01/17/2005 16:33:28 PAGE 2
003D C293 59 CLR CS ; 片选工作
003F E510 60 MOV A, TX1
0041 114E 61 CALL BYT8 ; 发送
0043 F512 62 MOV RX1, A ; 从RX1获得数据
0045 E511 63 MOV A, TX2 ; 获得高位字节
0047 114E 64 CALL BYT8 ; 发送
0049 F513 65 MOV RX2, A ; 从RX2获得数据
004B D293 66 SETB CS ; 关闭片选
004D 22 67 RET
68
69 ; **************************************************************
70 ; 字节的移位
004E 71 BYT8:
004E 7C08 72 MOV R4, #8 ; 8位数据
0050 D291 73 SETB DIN
0052 74 B8LP:
0052 33 75 RLC A ; 载入高位字节
0053 9290 76 MOV DOUT, C ; 输出
0055 D292 77 SETB SCLK ; 时钟高电平
0057 A291 78 MOV C, DIN ; 获得数据
0059 C292 79 CLR SCLK ; 时钟低电平
005B 92E0 80 MOV ACC.0, C ; 向ACC中放入第一个bit
005D DCF3 81 DJNZ R4, B8LP ; 循环8bit
005F 22 82 RET
83 ; 代码结束
84 END
A51 MACRO ASSEMBLER IRDACOM 01/17/2005 16:33:28 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
B8LP . . . . . . . C ADDR 0052H A
BEGIN. . . . . . . C ADDR 0000H A
BYT8 . . . . . . . C ADDR 004EH A
CS . . . . . . . . B ADDR 0090H.3 A
DIN. . . . . . . . B ADDR 0090H.1 A
DOUT . . . . . . . B ADDR 0090H.0 A
IRQ. . . . . . . . B ADDR 00B0H.2 A
LOOP . . . . . . . C ADDR 001CH A
NRECV. . . . . . . C ADDR 001FH A
P1 . . . . . . . . D ADDR 0090H A
P3 . . . . . . . . D ADDR 00B0H A
PCON . . . . . . . D ADDR 0087H A
RCV51. . . . . . . C ADDR 0032H A
RI . . . . . . . . B ADDR 0098H.0 A
RX1. . . . . . . . N NUMB 0012H A
RX2. . . . . . . . N NUMB 0013H A
SBUF . . . . . . . D ADDR 0099H A
SCLK . . . . . . . B ADDR 0090H.2 A
SCON . . . . . . . D ADDR 0098H A
SP . . . . . . . . D ADDR 0081H A
TCON . . . . . . . D ADDR 0088H A
TH1. . . . . . . . D ADDR 008DH A
TMOD . . . . . . . D ADDR 0089H A
TX1. . . . . . . . N NUMB 0010H A
TX2. . . . . . . . N NUMB 0011H A
URCV . . . . . . . C ADDR 0024H A
UTLK . . . . . . . C ADDR 003DH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -