📄 viic_c51.lst
字号:
C51 COMPILER V7.07 VIIC_C51 03/23/2004 10:07:20 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE VIIC_C51
OBJECT MODULE PLACED IN Viic_c51.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Viic_c51.c BROWSE INTVECTOR(0X8000) DEBUG OBJECTEXTEND CODE LISTINCLUDE SYM
-BOLS
stmt level source
1 /********************************************************************
2 VIIC_C51.C
3 此程序是I2C操作平台(主方式的软件平台)的底层的C子程序,如发送数据
4 及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,它很方便的
5 与用户程序连接并扩展.....
6
7 注意:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作
8 一定的修改....(本例是1us机器周期,即晶振频率要小于12MHZ)
9
10 ********************************************************************/
11
12
13
14 #include <reg52.h> /*头文件的包含*/
1 =1 /*--------------------------------------------------------------------------
2 =1 REG52.H
3 =1
4 =1 Header file for generic 80C52 and 80C32 microcontroller.
5 =1 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
6 =1 All rights reserved.
7 =1 --------------------------------------------------------------------------*/
8 =1
9 =1 #ifndef __REG52_H__
10 =1 #define __REG52_H__
11 =1
12 =1 /* BYTE Registers */
13 =1 sfr P0 = 0x80;
14 =1 sfr P1 = 0x90;
15 =1 sfr P2 = 0xA0;
16 =1 sfr P3 = 0xB0;
17 =1 sfr PSW = 0xD0;
18 =1 sfr ACC = 0xE0;
19 =1 sfr B = 0xF0;
20 =1 sfr SP = 0x81;
21 =1 sfr DPL = 0x82;
22 =1 sfr DPH = 0x83;
23 =1 sfr PCON = 0x87;
24 =1 sfr TCON = 0x88;
25 =1 sfr TMOD = 0x89;
26 =1 sfr TL0 = 0x8A;
27 =1 sfr TL1 = 0x8B;
28 =1 sfr TH0 = 0x8C;
29 =1 sfr TH1 = 0x8D;
30 =1 sfr IE = 0xA8;
31 =1 sfr IP = 0xB8;
32 =1 sfr SCON = 0x98;
33 =1 sfr SBUF = 0x99;
34 =1
35 =1 /* 8052 Extensions */
36 =1 sfr T2CON = 0xC8;
37 =1 sfr RCAP2L = 0xCA;
38 =1 sfr RCAP2H = 0xCB;
39 =1 sfr TL2 = 0xCC;
40 =1 sfr TH2 = 0xCD;
C51 COMPILER V7.07 VIIC_C51 03/23/2004 10:07:20 PAGE 2
41 =1
42 =1
43 =1 /* BIT Registers */
44 =1 /* PSW */
45 =1 sbit CY = PSW^7;
46 =1 sbit AC = PSW^6;
47 =1 sbit F0 = PSW^5;
48 =1 sbit RS1 = PSW^4;
49 =1 sbit RS0 = PSW^3;
50 =1 sbit OV = PSW^2;
51 =1 sbit P = PSW^0; //8052 only
52 =1
53 =1 /* TCON */
54 =1 sbit TF1 = TCON^7;
55 =1 sbit TR1 = TCON^6;
56 =1 sbit TF0 = TCON^5;
57 =1 sbit TR0 = TCON^4;
58 =1 sbit IE1 = TCON^3;
59 =1 sbit IT1 = TCON^2;
60 =1 sbit IE0 = TCON^1;
61 =1 sbit IT0 = TCON^0;
62 =1
63 =1 /* IE */
64 =1 sbit EA = IE^7;
65 =1 sbit ET2 = IE^5; //8052 only
66 =1 sbit ES = IE^4;
67 =1 sbit ET1 = IE^3;
68 =1 sbit EX1 = IE^2;
69 =1 sbit ET0 = IE^1;
70 =1 sbit EX0 = IE^0;
71 =1
72 =1 /* IP */
73 =1 sbit PT2 = IP^5;
74 =1 sbit PS = IP^4;
75 =1 sbit PT1 = IP^3;
76 =1 sbit PX1 = IP^2;
77 =1 sbit PT0 = IP^1;
78 =1 sbit PX0 = IP^0;
79 =1
80 =1 /* P3 */
81 =1 sbit RD = P3^7;
82 =1 sbit WR = P3^6;
83 =1 sbit T1 = P3^5;
84 =1 sbit T0 = P3^4;
85 =1 sbit INT1 = P3^3;
86 =1 sbit INT0 = P3^2;
87 =1 sbit TXD = P3^1;
88 =1 sbit RXD = P3^0;
89 =1
90 =1 /* SCON */
91 =1 sbit SM0 = SCON^7;
92 =1 sbit SM1 = SCON^6;
93 =1 sbit SM2 = SCON^5;
94 =1 sbit REN = SCON^4;
95 =1 sbit TB8 = SCON^3;
96 =1 sbit RB8 = SCON^2;
97 =1 sbit TI = SCON^1;
98 =1 sbit RI = SCON^0;
99 =1
100 =1 /* P1 */
101 =1 sbit T2EX = P1^1; // 8052 only
102 =1 sbit T2 = P1^0; // 8052 only
C51 COMPILER V7.07 VIIC_C51 03/23/2004 10:07:20 PAGE 3
103 =1
104 =1 /* T2CON */
105 =1 sbit TF2 = T2CON^7;
106 =1 sbit EXF2 = T2CON^6;
107 =1 sbit RCLK = T2CON^5;
108 =1 sbit TCLK = T2CON^4;
109 =1 sbit EXEN2 = T2CON^3;
110 =1 sbit TR2 = T2CON^2;
111 =1 sbit C_T2 = T2CON^1;
112 =1 sbit CP_RL2 = T2CON^0;
113 =1
114 =1 #endif
15 #include <intrins.h>
1 =1 /*--------------------------------------------------------------------------
2 =1 INTRINS.H
3 =1
4 =1 Intrinsic functions for C51.
5 =1 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
6 =1 All rights reserved.
7 =1 --------------------------------------------------------------------------*/
8 =1
9 =1 #ifndef __INTRINS_H__
10 =1 #define __INTRINS_H__
11 =1
12 =1 extern void _nop_ (void);
13 =1 extern bit _testbit_ (bit);
14 =1 extern unsigned char _cror_ (unsigned char, unsigned char);
15 =1 extern unsigned int _iror_ (unsigned int, unsigned char);
16 =1 extern unsigned long _lror_ (unsigned long, unsigned char);
17 =1 extern unsigned char _crol_ (unsigned char, unsigned char);
18 =1 extern unsigned int _irol_ (unsigned int, unsigned char);
19 =1 extern unsigned long _lrol_ (unsigned long, unsigned char);
20 =1 extern unsigned char _chkfloat_(float);
21 =1
22 =1 #endif
23 =1
16
17 #define uchar unsigned char /*宏定义*/
18 #define uint unsigned int
19
20 #define _Nop() _nop_() /*定义空指令*/
21
22 /* 常,变量定义区 */
23
24 /*端口位定义*/
25 sbit SDA=P1^7; /*模拟I2C数据传送位*/
26 sbit SCL=P1^6; /*模拟I2C时钟控制位*/
27
28 /*状态标志*/
29 bit ack; /*应答标志位*/
30
31
32
33
34
35
36 /*******************************************************************
37 起动总线函数
38 函数原型: void Start_I2c();
39 功能: 启动I2C总线,即发送I2C起始条件.
40
41 ********************************************************************/
C51 COMPILER V7.07 VIIC_C51 03/23/2004 10:07:20 PAGE 4
42 void Start_I2c()
43 {
44 1 SDA=1; /*发送起始条件的数据信号*/
45 1 _Nop();
46 1 SCL=1;
47 1 _Nop(); /*起始条件建立时间大于4.7us,延时*/
48 1 _Nop();
49 1 _Nop();
50 1 _Nop();
51 1 _Nop();
52 1 SDA=0; /*发送起始信号*/
53 1 _Nop(); /* 起始条件锁定时间大于4μs*/
54 1 _Nop();
55 1 _Nop();
56 1 _Nop();
57 1 _Nop();
58 1 SCL=0; /*钳住I2C总线,准备发送或接收数据 */
59 1 _Nop();
60 1 _Nop();
61 1 }
62
63
64
65
66 /*******************************************************************
67 结束总线函数
68 函数原型: void Stop_I2c();
69 功能: 结束I2C总线,即发送I2C结束条件.
70
71 ********************************************************************/
72 void Stop_I2c()
73 {
74 1 SDA=0; /*发送结束条件的数据信号*/
75 1 _Nop(); /*发送结束条件的时钟信号*/
76 1 SCL=1; /*结束条件建立时间大于4μs*/
77 1 _Nop();
78 1 _Nop();
79 1 _Nop();
80 1 _Nop();
81 1 _Nop();
82 1 SDA=1; /*发送I2C总线结束信号*/
83 1 _Nop();
84 1 _Nop();
85 1 _Nop();
86 1 _Nop();
87 1 }
88
89
90
91
92 /*******************************************************************
93 字节数据传送函数
94 函数原型: void SendByte(uchar c);
95 功能: 将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
96 此状态位进行操作.(不应答或非应答都使ack=0 假)
97 发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
98 ********************************************************************/
99 void SendByte(uchar c)
100 {
101 1 uchar BitCnt;
102 1
103 1 for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
C51 COMPILER V7.07 VIIC_C51 03/23/2004 10:07:20 PAGE 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -