📄 twi.lst
字号:
C51 COMPILER V7.10 TWI 06/01/2004 14:42:31 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE TWI
OBJECT MODULE PLACED IN twi.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE twi.c BROWSE DEBUG OBJECTEXTEND TABS(3)
line level source
1 /**
2 * @file $RCSfile: TWI.c,v $
3 *
4 * Copyright (c) 2004 Atmel.
5 *
6 * Please read file license.txt for copyright notice.
7 *
8 * @brief This file is an example to use TWI.
9 *
10 * This file can be parsed by Doxygen for automatic documentation
11 * generation.
12 * Put here the functional description of this file within the software
13 * architecture of your program.
14 *
15 * @version $Revision: 1.0 $ $Name: $
16 */
17
18 /* @section I N C L U D E S */
19 #include "reg_C51.h"
20 char TWI_data;
21 char rw=0; /* 0=write, 1=read */
22 char slave_adr;
23 bit b_TWI_busy=0;
24
25 /**
26 * FUNCTION_PURPOSE:this function setup TWI in master mode and sends data to slave.
27 * FUNCTION_INPUTS:void
28 * FUNCTION_OUTPUTS:void
29 */
30 void main(void)
31 {
32 1
33 1 SSCON |= 0x40; /* enable TWI */
34 1 EA=1; /* interrupt enable */
35 1 IEN1 |=0x02; /* enable TWI interrupt */
36 1
37 1 while(1) /* end less */
38 1 {
39 2 if(!b_TWI_busy && ((SSCON&0x10)!=0x10)) /* if the TWI is free */
40 2 {
41 3 b_TWI_busy=1; /* flag busy =1 */
42 3 TWI_data=0x55; /* data example to send */
43 3 slave_adr=0x01; /* slave adresse example */
44 3 rw=0; /* 0=write */
45 3 SSDAT = 0x00; /* clear buffer before sending data */
46 3 SSCON |= 0x20; /* TWI start sending */
47 3 }
48 2
49 2 TWI_data++;
50 2 }
51 1 }
52
53
54 /**
55 * FUNCTION_PURPOSE:TWI interrupt, task witch process the different status of TWI
C51 COMPILER V7.10 TWI 06/01/2004 14:42:31 PAGE 2
56 * FUNCTION_INPUTS:void
57 * FUNCTION_OUTPUTS:void
58 */
59 void it_TWI(void) interrupt 8 using 1
60 {
61 1 switch(SSCS) /* TWI status tasking */
62 1 {
63 2 case(0x00): /* A start condition has been sent */
64 2 { /* SLR+R/W are transmitted, ACK bit received */
65 3 b_TWI_busy=0; /* TWI is free */
66 3 break;
67 3 }
68 2 case(0x08): /* A start condition has been sent */
69 2 { /* SLR+R/W are transmitted, ACK bit received */
70 3 SSCON &= ~0x20; /* clear start condition */
71 3 SSDAT = (slave_adr<<1)|rw; /* send slave adress and read/write bit */
72 3 SSCON |= 0x04; /* set AA */
73 3 break;
74 3 }
75 2
76 2 case(0x10): /* A repeated start condition has been sent */
77 2 { /* SLR+R/W are transmitted, ACK bit received */
78 3 SSCON &= ~0x20; /* clear start condition */
79 3 SSDAT = (slave_adr<<1)|rw; /* send slave adress and read/write bit */
80 3 SSCON |= 0x04; /* set AA */
81 3 break;
82 3 }
83 2
84 2 case(0x18): /* SLR+W was transmitted, ACK bit received */
85 2 {
86 3
87 3 SSDAT = TWI_data; /* Transmit data byte, ACK bit received */
88 3 SSCON |= 0x04; /* set AA */
89 3 break;
90 3 }
91 2
92 2 case(0x20): /* SLR+W was transmitted, NOT ACK bit received */
93 2 {
94 3 SSCON |= 0x10; /* Transmit STOP */
95 3 b_TWI_busy=0; /* TWI is free */
96 3 break;
97 3 }
98 2
99 2 case(0x28): /* DATA was transmitted, ACK bit received */
100 2 {
101 3 SSCON |= 0x10; /* send STOP */
102 3 b_TWI_busy=0; /* TWI is free */
103 3 break;
104 3 }
105 2
106 2 case(0x30): /* DATA was transmitted, NOT ACK bit received */
107 2 {
108 3 SSCON |= 0x10; /* Transmit STOP */
109 3 b_TWI_busy=0; /* TWI is free */
110 3 break;
111 3 }
112 2
113 2 case(0x38): /* Arbitration lost in SLA+W or DATA. */
114 2 {
115 3 SSCON |= 0x10; /* Transmit STOP */
116 3 b_TWI_busy=0; /* TWI is free */
117 3 break;
C51 COMPILER V7.10 TWI 06/01/2004 14:42:31 PAGE 3
118 3 }
119 2 }
120 1 SSCON &= ~0x08; /* clear flag */
121 1 }
122
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 118 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
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 + -