📄 ir.lst
字号:
C51 COMPILER V7.20 IR 10/18/2005 11:10:05 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE IR
OBJECT MODULE PLACED IN IR.OBJ
COMPILER INVOKED BY: c:\KEIL\C51\BIN\C51.exe IR.c DB OE
line level source
1 //-----------------------------------------------------------------------------
2 // 版权归新华龙电子公司所有
3 //-----------------------------------------------------------------------------
4 //
5 //文件名: IR.c
6 //
7 //编写人: LC
8 //
9 //编写时间:2005/03/10
10 //
11 //目标器件: C8051F02x
12 //
13 //编译工具: Silicon Laboratories IDE
14 //
15 //程序说明: 此程序接收红外发射过来的数据,接收解码后由CPU读取,程序运行前将S2
16 // 都拨到ON.J17短接第一和第二脚。
17
18
19 //------------------------------------------------------------------------------------
20 // 头文件包含
21 //------------------------------------------------------------------------------------
22 #include <c8051f020.h> /*SFR定义*/
23 #include <intrins.h>
24
25 //------------------------------------------------------------------------------------
26 // Global CONSTANTS
27 //------------------------------------------------------------------------------------
28 #define DataPort 0x8400 /*红外数据接收口*/
29
30 sbit BUZ = P3^5;
31 unsigned char ReadFlag; /*读红外数据标志*/
32
33
34 //------------------------------------------------------------------------------------
35 // Function PROTOTYPES
36 //------------------------------------------------------------------------------------
37 void PORT_Init (void);
38
39 /***************************************************************************************
40 函数名称: void sleep_ms(WORD count)
41 功能描述: 延时
42 输入: WORD count(所要延时的长度)
43 输出: 无
44 全局变量: 无
45 调用模块: _nop_()
46 ***************************************************************************************/
47 void sleep_ms(unsigned int count)
48 {
49 1 unsigned char ii,jj;
50 1 for(ii=0;ii<count;ii++)
51 1 {
52 2 for(jj=0;jj<250;jj++)
53 2 _nop_();
54 2 }
55 1 }
C51 COMPILER V7.20 IR 10/18/2005 11:10:05 PAGE 2
56
57
58 /***************************************************************************************
59 函数名称: void INITEXINT67(void)
60 功能描述: 初始化外部中断6
61 输入: 无
62 输出: 无
63 全局变量: EIE2
64 调用模块: 无
65 ***************************************************************************************/
66 void INITEXINT67(void)
67 {
68 1 EIE2 |= 0x10; /*允许外部中断6*/
69 1 }
70
71
72 /***************************************************************************************
73 函数名称: void INT6_ISR(void) interrupt 18
74 功能描述: 外部中断6的中断服务程序
75 输入: 无
76 输出: 无
77 全局变量: P3IF
78 ReadFlag: 读取红外数据标志
79 调用模块: 无
80 ***************************************************************************************/
81 void INT6_ISR(void) interrupt 18
82 {
83 1 P3IF &= ~0x40; /*清外部中断6标志*/
84 1 ReadFlag = 0x01; /*置允许读标志*/
85 1 }
86
87
88 //------------------------------------------------------------------------------------
89 // MAIN Routine
90 //------------------------------------------------------------------------------------
91 void main (void) {
92 1 unsigned char ReadData,IRData;
93 1 unsigned char xdata *idata Pointir;
94 1 /*无效看门狗*/
95 1 WDTCN = 0xde;
96 1 WDTCN = 0xad;
97 1 PORT_Init(); /*输入/输出口初始化*/
98 1 INITEXINT67(); /*初始化外部中断6*/
99 1 EA=1; /*开总中断*/
100 1 ReadFlag=0;
101 1 while(1){
102 2 while(ReadFlag==0x00); /*是否允许读红外数据*/
103 2 Pointir=DataPort;
104 2 ReadData=*Pointir; /*读红外数据*/
105 2 if((ReadData&0x80)==0x00) continue; /*是否接到红外数据*/
106 2 IRData = ReadData &0x0f; /*保存收到的红外数据*/
107 2 BUZ = 0; /*蜂鸣器响*/
108 2 sleep_ms(250);
109 2 BUZ = 1; /*蜂鸣器灭*/
110 2 _nop_();
111 2 do{
112 3 ReadData = *Pointir;
113 3 }while((ReadData&0x80)==0x80); /*上次红外中断是否结束*/
114 2 _nop_();
115 2 }
116 1 _nop_();
117 1 }
C51 COMPILER V7.20 IR 10/18/2005 11:10:05 PAGE 3
118
119
120 /***************************************************************************************
121 函数名称: void PORT_Init(void)
122 功能描述: 配置交叉开关和输入/输出口
123 输入: 无
124 输出: 无
125 全局变量: XBR2,P74OUT,EMI0CF,EMI0TC,P3MDOUT
126 调用模块: 无
127 ***************************************************************************************/
128 //------------------------------------------------------------------------------------
129 // PORT_Init
130 //------------------------------------------------------------------------------------
131 //
132 // Configure the Crossbar and GPIO ports
133 //
134 void PORT_Init (void)
135 {
136 1 XBR2 = 0x40; /*使能交叉开关和弱上拉*/
137 1 P74OUT |= 0x0f; /*使能P4~P7推挽输出*/
138 1 EMI0CF |= 0x2c; /*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/
139 1 EMI0TC |= 0x6c; /*地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
140 1 P3MDOUT |= 0x00; /*使能P3.5推挽输出*/
141 1 }
142
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 121 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 1
IDATA SIZE = ---- 2
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 + -