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