📄 dp_51pro_irda.lst
字号:
C51 COMPILER V7.07 DP_51PRO_IRDA 03/04/2004 17:31:22 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE DP_51PRO_IRDA
OBJECT MODULE PLACED IN DP_51PRO_IRDA.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE DP_51PRO_IRDA.C BROWSE DEBUG OBJECTEXTEND CODE
stmt level source
1 /***************************************************************
2 * 文件名:DP_51PRO_IRDA.C
3 * 功能:DP_51PRO实验仪红外收发实验。使用串口发送数据经调制后从红外管输出,
4 * 并通过红外接收模块把接收到的数据返回串口接收端,通过判断接收到的数
5 * 据来控制LED灯点亮。
6 ***************************************************************/
7 #include <Reg52.H>
8
9 #define uint8 unsigned char
10 #define uint16 unsigned int
11
12 sbit LED_CON = P1^0; // 定义LED控制口
13
14 /***************************************************************
15 * 名称:UART_SendByte()
16 * 功能:向串口发送一字节数据。
17 * 入口参数:dat 要发送的数据
18 * 出口参数:无
19 ***************************************************************/
20 void UART_SendByte(uint8 dat)
21 { SBUF = dat; // 发送数据
22 1 while(0==TI); // 等待发送完毕
23 1 TI = 0; // 清零TI标志
24 1 }
25
26
27 /***************************************************************
28 * 名称:UART_RcvByte()
29 * 功能:接收一字节串口数据。
30 * 入口参数:dat 接收变量的地址指针
31 * 出口参数:返回0表示没有数据,返回1表示接收到数据
32 ***************************************************************/
33 uint8 UART_RcvByte(uint8 *dat)
34 { if(0==RI) return(0); // 若没有接收到数据则返回0
35 1
36 1 *dat = SBUF; // 取得接收的数据
37 1 RI = 0; // 清除RI标志
38 1 return(1);
39 1 }
40
41
42 /***************************************************************
43 * 名称:UART_Init()
44 * 功能:串口初始化。模式为1位起始位,8位数据位,1位停止位,波特率为9600。
45 * 入口参数:无
46 * 出口参数:无
47 * 说明:晶振为11.0592MHz,使用T1作为波特率发生器。
48 ***************************************************************/
49 void UART_Init(void)
50 { SCON = 0x50;
51 1 TMOD = 0x20;
52 1 TH1 = 0xFa;
53 1 TR1 = 1;
54 1 }
55
C51 COMPILER V7.07 DP_51PRO_IRDA 03/04/2004 17:31:22 PAGE 2
56
57 /***************************************************************
58 * 名称:main()
59 * 功能:主函数,初始化串口后不断的发送及接收数据,若接收到所发送的数据则
60 * 点亮LED。
61 ***************************************************************/
62 int main(void)
63 { uint8 i;
64 1 uint16 j;
65 1 uint8 rcv_dat;
66 1 uint8 count;
67 1
68 1 UART_Init();
69 1 while(1)
70 1 { count = 0; // 计数变量清零
71 2 for(i=0; i<50; i++) // 发送及接收50个数据
72 2 { UART_SendByte(0x5A);
73 3 if( UART_RcvByte(&rcv_dat)!=0 )
74 3 { if(0x5A==rcv_dat) count++; // 若接收的数据为0x5A,则计数变量加1
75 4 }
76 3 }
77 2 if(count>30) LED_CON = 0; // 若接收到0x5A的个数大于40个时,点亮LED
78 2 else LED_CON = 1; // 否则熄灭LED
79 2
80 2 for(j=0; j<500; j++);
81 2 }
82 1
83 1 return(0);
84 1 }
C51 COMPILER V7.07 DP_51PRO_IRDA 03/04/2004 17:31:22 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _UART_SendByte (BEGIN)
; SOURCE LINE # 20
;---- Variable 'dat' assigned to Register 'R7' ----
; SOURCE LINE # 21
0000 8F99 MOV SBUF,R7
0002 ?C0001:
; SOURCE LINE # 22
0002 3099FD JNB TI,?C0001
0005 ?C0002:
; SOURCE LINE # 23
0005 C299 CLR TI
; SOURCE LINE # 24
0007 22 RET
; FUNCTION _UART_SendByte (END)
; FUNCTION _UART_RcvByte (BEGIN)
; SOURCE LINE # 33
;---- Variable 'dat' assigned to Register 'R1/R2/R3' ----
; SOURCE LINE # 34
0000 209803 JB RI,?C0004
0003 7F00 MOV R7,#00H
0005 22 RET
0006 ?C0004:
; SOURCE LINE # 36
0006 E599 MOV A,SBUF
0008 120000 E LCALL ?C?CSTPTR
; SOURCE LINE # 37
000B C298 CLR RI
; SOURCE LINE # 38
000D 7F01 MOV R7,#01H
; SOURCE LINE # 39
000F ?C0005:
000F 22 RET
; FUNCTION _UART_RcvByte (END)
; FUNCTION UART_Init (BEGIN)
; SOURCE LINE # 49
; SOURCE LINE # 50
0000 759850 MOV SCON,#050H
; SOURCE LINE # 51
0003 758920 MOV TMOD,#020H
; SOURCE LINE # 52
0006 758DFA MOV TH1,#0FAH
; SOURCE LINE # 53
0009 D28E SETB TR1
; SOURCE LINE # 54
000B 22 RET
; FUNCTION UART_Init (END)
; FUNCTION main (BEGIN)
; SOURCE LINE # 62
;---- Variable 'j' assigned to Register 'R4/R5' ----
; SOURCE LINE # 63
; SOURCE LINE # 68
0000 120000 R LCALL UART_Init
0003 ?C0007:
; SOURCE LINE # 69
; SOURCE LINE # 70
0003 E4 CLR A
C51 COMPILER V7.07 DP_51PRO_IRDA 03/04/2004 17:31:22 PAGE 4
0004 F500 R MOV count,A
; SOURCE LINE # 71
;---- Variable 'i' assigned to Register 'R6' ----
0006 FE MOV R6,A
0007 ?C0009:
; SOURCE LINE # 72
0007 7F5A MOV R7,#05AH
0009 120000 R LCALL _UART_SendByte
; SOURCE LINE # 73
000C 7B00 MOV R3,#00H
000E 7A00 R MOV R2,#HIGH rcv_dat
0010 7900 R MOV R1,#LOW rcv_dat
0012 120000 R LCALL _UART_RcvByte
0015 EF MOV A,R7
0016 6007 JZ ?C0011
; SOURCE LINE # 74
0018 E500 R MOV A,rcv_dat
001A B45A02 CJNE A,#05AH,?C0011
001D 0500 R INC count
; SOURCE LINE # 75
; SOURCE LINE # 76
001F ?C0011:
001F 0E INC R6
0020 BE32E4 CJNE R6,#032H,?C0009
0023 ?C0010:
; SOURCE LINE # 77
0023 E500 R MOV A,count
0025 D3 SETB C
0026 941E SUBB A,#01EH
0028 4004 JC ?C0014
002A C290 CLR LED_CON
002C 8002 SJMP ?C0015
002E ?C0014:
; SOURCE LINE # 78
002E D290 SETB LED_CON
0030 ?C0015:
; SOURCE LINE # 80
0030 E4 CLR A
0031 FC MOV R4,A
0032 FD MOV R5,A
0033 ?C0016:
0033 C3 CLR C
0034 ED MOV A,R5
0035 94F4 SUBB A,#0F4H
0037 EC MOV A,R4
0038 9401 SUBB A,#01H
003A 50C7 JNC ?C0007
003C 0D INC R5
003D BD0001 CJNE R5,#00H,?C0020
0040 0C INC R4
0041 ?C0020:
0041 80F0 SJMP ?C0016
; FUNCTION main (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 103 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
C51 COMPILER V7.07 DP_51PRO_IRDA 03/04/2004 17:31:22 PAGE 5
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -