?? ir.lst
字號:
C51 COMPILER V7.05 IR 02/16/2006 21:27:56 PAGE 1
C51 COMPILER V7.05, COMPILATION OF MODULE IR
OBJECT MODULE PLACED IN IR.OBJ
COMPILER INVOKED BY: C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe IR.C DB OE
stmt level source
1 //參考程序B: C程序 //IR.C
2 //程序說明:此程序接收紅外發(fā)射過來的數(shù)據(jù)解碼后由CPU讀取并顯示在LED數(shù)碼管上.
3 #include <c8051f020.h> /*SFR定義*/
4 #include <intrins.h>
5 #define PORTA 0x8000 /*8255的A口*/
6 #define PORTB 0x8001 /*8255的B口*/
7 #define PORTC 0x8002 /*8255的C口*/
8 #define PORTCON 0x8003 /*8255的控制口*/
9 #define DataPort 0x8400 /*紅外數(shù)據(jù)接收口*/
10 void PORT_Init (void); //端口初始化
11 void displayled(void) ;//顯示1位數(shù)據(jù)
12 sbit BUZ = P3^5;
13 unsigned char ReadFlag; /*讀紅外數(shù)據(jù)標志*/
14 unsigned char ReadData,IRData;
15 unsigned char WE[6]={1,2,4,8,0x10,0x20}; //位選
16 void sleep_ms(unsigned int count)//延時
17 {
18 1 unsigned char ii,jj;
19 1 for(ii=0;ii<count;ii++)
20 1 {
21 2 for(jj=0;jj<250;jj++)
22 2 _nop_();
23 2 }
24 1 }
25 void INITEXINT67(void)
26 {
27 1 EIE2 |= 0x10; /*允許外部中斷6*/
28 1 }
29 void INT6_ISR(void) interrupt 18
30 {
31 1 P3IF &= ~0x40; /*清外部中斷6標志*/
32 1 ReadFlag = 0x01; /*置允許讀標志*/
33 1 }
34 void main (void) {
35 1 unsigned char xdata *idata Pointir;
36 1 WDTCN = 0xde; /*無效看門狗*/
37 1 WDTCN = 0xad;
38 1 PORT_Init(); /*輸入/輸出口初始化*/
39 1 INITEXINT67(); /*初始化外部中斷6*/
40 1 EA=1; /*開總中斷*/
41 1 ReadFlag=0;
42 1 while(1){
43 2 while(ReadFlag==0x00); /*是否允許讀紅外數(shù)據(jù)*/
44 2 Pointir=DataPort;
45 2 ReadData=*Pointir; /*讀紅外數(shù)據(jù)*/
46 2 if((ReadData&0x80)==0x00) continue; /*是否接到紅外數(shù)據(jù)*/
47 2 IRData = (~ReadData )&0x0f; /*保存收到的紅外數(shù)據(jù)*/
48 2 BUZ = 0; /*蜂鳴器響*/
49 2 sleep_ms(250);
50 2 BUZ = 1; /*蜂鳴器滅*/
51 2 displayled() ;//顯示1位數(shù)據(jù)
52 2 do{
53 3 ReadData = *Pointir;
54 3 }while((ReadData&0x80)==0x80); /*上次紅外中斷是否結(jié)束*/
55 2 _nop_();
C51 COMPILER V7.05 IR 02/16/2006 21:27:56 PAGE 2
56 2 }
57 1 _nop_();
58 1 }
59 void PORT_Init (void)
60 {
61 1 EMI0CF |= 0x2c; /*EMIF工作在地址/數(shù)據(jù)復(fù)用方式,只用外部存儲器,ALE高*/
62 1 /*低脈寬占1個SYSCLK周期*/
63 1 EMI0TC |= 0x6d; /*地址建立/保持時間占1個SYSCLK周期,/WR和/RD占12個SYSCLK周期*/
64 1 P74OUT=0x3f; /*P7為漏極開路,P4,P5,P6為推拉方式*/
65 1 }
66 void displayled(void)
67 {unsigned int i;
68 1 unsigned char k;
69 1 char j;
70 1 unsigned char xdata * Pointm;
71 1 unsigned char code F7SEG[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
72 1 0x39,0x5e,0x79,0x71};
73 1 Pointm=PORTCON;
74 1 *Pointm=0x80; //8255初始化,設(shè)定B口輸出,C口輸出,A口不用
75 1 while(1) //循環(huán)顯示
76 1 {
77 2 k=F7SEG[IRData]; // 查表,得到字形碼數(shù)值存放在變量K中
78 2 Pointm=PORTB; // B口存放字位碼
79 2 *Pointm=0x01; //從左邊第一位數(shù)碼管開始顯示數(shù)字
80 2 Pointm=PORTC; //C口存放字形碼
81 2 *Pointm=k; //顯示K中存放的字形碼
82 2 }
83 1 }
*** WARNING C280 IN LINE 67 OF IR.C: 'i': unreferenced local variable
*** WARNING C280 IN LINE 69 OF IR.C: 'j': unreferenced local variable
84
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 150 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 3
IDATA SIZE = ---- 2
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -