?? 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 + -