?? text1.lst
字號:
C51 COMPILER V7.50 TEXT1 06/19/2008 16:38:57 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1 #include <reg922.h>
2 #include <intrins.h>
3
4 #define uint unsigned int
5 #define uchar unsigned char
6 #define _Nop() _nop_()
7 #define GENERATE_STOP 0x54 /* 置位 STO, 復位 STA 、 SI */
8 #define RELEASE_BUS_ACK 0x44 /* 復位 STO,STA,SI 并置位 AA (ack) */
9 #define RELEASE_BUS_NOACK 0x40 /* 復位 STO,STA,SI 并置位 AA (noack) */
10 #define RELEASE_BUS_STA 0x64 /* 起動總線/重新起動總線, 置位 STA */
11
12 void dally_timer1(uint data ms);
13 void SendByte(uchar c);
14 bit ISendByte(uchar sla, uchar *c);
15 void GetBus();
16
17
18 /********************************************************************
19 使用定時器1延時n毫秒
20 ********************************************************************/
21 void dally_timer1(uint data ms)
22 {
23 1 uint i;
24 1 TR1=1;//啟動定時器T1
25 1 for(i=ms*25;i>0;i--)
26 1 {
27 2 while(TF1==0)
28 2 {
29 3 _Nop();
30 3 };
31 2 TF1=0;//清除T1溢出標志TF1
32 2 }
33 1 TR1=0;//關閉定時器T1
34 1 }
35
36 /*******************************************************************
37 * 申請總線
38 * 功能:進行I2C總線的初始化--包括時鐘選擇,I2C使能,發送起始信號等等。
39 * I2EN為1,設置為主機;CRSEL位為0,使用內部SCL發生器。
40 *******************************************************************/
41
42 void GetBus()
43 {
44 1 I2SCLH = 15; /* 設置SCL高電平的PCLK周期數 */
45 1 I2SCLL = 15; /* 設置SCL低電平的PCLK周期數,6MHz時為100Kbit/S */
46 1 I2CON = RELEASE_BUS_STA; /* 申請成為主機,起動總線。使用內部SCL發生器,I2EN和AA置位.*/
47 1 while( SI==0 ); /* 等待起始位的發送 */
48 1 }
49
50
51 void SendByte(uchar c)
52 {
53 1 I2DAT = c;
54 1 I2CON = RELEASE_BUS_ACK; /* 清除SI位等等 */
55 1 while( SI==0 ); /* 等待數據的發送 */
C51 COMPILER V7.50 TEXT1 06/19/2008 16:38:57 PAGE 2
56 1 }
57
58
59
60 /*******************************************************************
61 * 向無子地址器件發送字節數據函數
62 * 功能:從啟動總線到發送地址,數據,結束總線的全過程。
63 * 入口參數:sla 從器件地址
64 * c 待發送的數據
65 * 出口參數:返回1表示操作成功,否則操作有誤。
66 ********************************************************************/
67 bit ISendByte(uchar sla, uchar *c)
68 {
69 1 GetBus(); /* 啟動總線 */
70 1 SendByte(sla); /* 發送器件地址,并接收應答位 */
71 1 if( I2STAT!=0x18 ) /* 無從機應答則退出操作 */
72 1 {
73 2 I2CON = GENERATE_STOP;
74 2 return(0);
75 2 }
76 1
77 1 SendByte(*c); /* 發送數據 */
78 1 if( I2STAT!=0x28 )
79 1 {
80 2 I2CON = GENERATE_STOP;
81 2 return(0);
82 2 }
83 1 I2CON = GENERATE_STOP; /* 結束總線 */
84 1 return(1);
85 1 }
86
87
88 void main()
89 {
90 1 bit TMP;
91 1 uchar byte[4]="7";
92 1 P0M1=0x00;
93 1 P0M2=0x00;
94 1 P1M1=0x0C;//P1.2,P1.3配置為開漏,其他為雙向I/O口
95 1 P1M2=0x0C;
96 1 P3M1=0x00;
97 1 P3M2=0x00;
98 1
99 1 P0=0xff;
100 1 P1=0xff;
101 1 P3=0xff;
102 1
103 1 SP=0x7F;
104 1
105 1 TMOD=0x20;//T1工作方式2
106 1 TAMOD=0x00;
107 1 TL1=0x6C;//裝入T1初值
108 1 TH1=0x6C;
109 1
110 1 I2CON=0x44;//主發送器模式初始化
111 1 I2STAT=0;
112 1 //I2ADR=0x70;//從機地址為70h
113 1 I2SCLH=0x0E;//數據波特率為123Kbit/s
114 1 I2SCLL=0x0E;
115 1 dally_timer1(1000);
116 1 do
117 1 {
C51 COMPILER V7.50 TEXT1 06/19/2008 16:38:57 PAGE 3
118 2 TMP=ISendByte(0x70,byte);//等待發送成功
119 2 }while(!TMP);
120 1
121 1 while(1)
122 1 {
123 2
124 2 }
125 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 188 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -