📄 text1.lst
字号:
C51 COMPILER V7.50 TEXT1 07/09/2008 09:02:19 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
13 void dally_timer1(uint data ms);
14 void SendByte(uchar c);
15 bit ISendByte(uchar sla, uchar *c);
16 void GetBus();
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 07/09/2008 09:02:19 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 uchar i;
70 1 GetBus(); /* 启动总线 */
71 1 SendByte(sla); /* 发送器件地址,并接收应答位 */
72 1 if( I2STAT!=0x18 ) /* 无从机应答则退出操作 */
73 1 {
74 2 I2CON = GENERATE_STOP;
75 2 return(0);
76 2 }
77 1 for(i=0;i<4;i++)
78 1 {
79 2 SendByte(*c); /* 发送数据 */
80 2 if( I2STAT!=0x28 )
81 2 {
82 3 I2CON = GENERATE_STOP;
83 3 return(0);
84 3 }
85 2 c++;
86 2 }
87 1 I2CON = GENERATE_STOP; /* 结束总线 */
88 1 return(1);
89 1 }
90
91
92 void main()
93 {
94 1 bit TMP;
95 1 uchar byte[4]="9678";
96 1 P0M1=0x00;
97 1 P0M2=0x00;
98 1 P1M1=0x0C;//P1.2,P1.3配置为开漏,其他为双向I/O口
99 1 P1M2=0x0C;
100 1 P3M1=0x00;
101 1 P3M2=0x00;
102 1
103 1 P0=0xff;
104 1 P1=0xff;
105 1 P3=0xff;
106 1
107 1 SP=0x7F;
108 1
109 1 TMOD=0x20;//T1工作方式2
110 1 TAMOD=0x00;
111 1 TL1=0x6C;//装入T1初值
112 1 TH1=0x6C;
113 1
114 1 I2CON=0x44;//主发送器模式初始化
115 1 I2STAT=0;
116 1 //I2ADR=0x70;//从机地址为70h
117 1 I2SCLH=0x0E;//数据波特率为123Kbit/s
C51 COMPILER V7.50 TEXT1 07/09/2008 09:02:19 PAGE 3
118 1 I2SCLL=0x0E;
119 1 dally_timer1(1000);
120 1 while(1)
121 1 {
122 2 do
123 2 {
124 3 TMP=ISendByte(0x70,byte);//等待发送成功
125 3 }while(!TMP);
126 2 }
127 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 201 ----
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 + -