📄 interru.lst
字号:
C51 COMPILER V7.50 INTERRU 12/03/2005 12:09:17 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE INTERRU
OBJECT MODULE PLACED IN INTERRU.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE INTERRU.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <head.h> // SFR declarations
2 /*
3 void Timer2_ISR (void) interrupt 5
4 {
5 TF2 = 0;
6 }
7 */
8 void SMBUS_ISR (void) interrupt 7
9 {
10 1 switch (SMB0STA) // Status code for the SMBus
11 1 {
12 2 // 起始条件已发出,典型操作:
13 2 // 将从地址+R/W装入到SMB0DAT,STA=0
14 2 case SMB_START://0x08
15 2 if(StartReadflag)
16 2 {
17 3 SMB0DAT = 0xa3; // read
18 3 }
19 2 else SMB0DAT = 0xa2; // write
20 2 STA = 0; // Manually clear STA bit
21 2 SI = 0; // Clear interrupt flag
22 2 break;
23 2 // 重复起始条件已发出,典型操作:
24 2 // 将从地址+R/W装入到SMB0DAT,STA=0
25 2 case SMB_RP_START://0x10
26 2 if(StartReadflag)
27 2 { SMB0DAT = 0xa3; }
28 2 else SMB0DAT = 0xa2; // write
29 2 STA = 0; // Manually clear START bit.
30 2 SI = 0;
31 2 break;
32 2 // 从地址+W 已发出,收到ACK,典型操作:
33 2 // 将要发送的数据装入SMB0DAT
34 2 case SMB_MTADDACK://0x18
35 2 if(RWflag == I2CREAD)
36 2 { SMB0DAT = 0x00; } // 从地址0x00开始读
37 2 if(RWflag == I2CWRITE)
38 2 { PcfPoint =0;SMB0DAT = 0x00;}// 从地址0x00开始写
39 2 SI = 0; // Clear interrupt flag
40 2 break;
41 2 // 从地址+W 已发出,收到NACK,典型操作:
42 2 // 确认查询重试,置位STO+STA
43 2 case SMB_MTADDNACK://0x20
44 2 STO = 1;
45 2 // delay(2000);
46 2 STA = 1;
47 2 SI = 0; // Clear interrupt flag
48 2 break;
49 2 // 数据字节已发出,收到ACK,典型操作:将下一字节装入到
50 2 // SMB0DAT,或置位STO,或置位STA,以发送重复起始条件
51 2 case SMB_MTDBACK://0x28
52 2 if(RWflag == I2CREAD)
53 2 {
54 3 STO = 1;
55 3 delay(100);
C51 COMPILER V7.50 INTERRU 12/03/2005 12:09:17 PAGE 2
56 3 STA = 1;
57 3 PcfPoint = 0;
58 3 StartReadflag = 1;
59 3 }
60 2 else if(PcfPoint == 0x10)
61 2 {
62 3 RWflag = I2CREAD; // read
63 3 STO = 1;
64 3 delay(100);
65 3 STA = 1;
66 3 PcfPoint = 0;
67 3 }
68 2 else
69 2 {
70 3 SMB0DAT = Pcf8563.Time[PcfPoint++];
71 3 }
72 2 SI = 0;
73 2 break;
74 2 // 数据字节已发出,收到NACK,典型操作:重试传输或置位STO
75 2 case SMB_MTDBNACK://0x30
76 2 STO = 1;
77 2 delay(100);
78 2 STA = 1;
79 2 SI = 0; // Clear interrupt flag
80 2 break;
81 2 // 竞争失败,典型操作:保存当前数据
82 2 case SMB_MTARBLOST://0x38
83 2 SI = 0; // Clear interrupt flag
84 2 break;
85 2 // 从地址+R已发出,收到ACK,典型操作:如果只接收一个字节,
86 2 // 清AA位(收到字节后发送NACK),等待接收数据
87 2 case SMB_MRADDACK://0x40
88 2 PcfPoint = 0x00; // NACK sent during acknowledge cycle.
89 2 SI = 0;
90 2 break;
91 2 // 从地址+R已发出,收到NACK,典型操作:确认查询重试,
92 2 // 置位STO+STA
93 2 case SMB_MRADDNACK://0x48
94 2 STO = 1;
95 2 // delay(2000);
96 2 STA = 1;
97 2 SI = 0;
98 2 break;
99 2 // 数据字节已收到,ACK已发出,典型操作:读SMB0DAT,
100 2 // 等待下一字节,若下一字节是最后字节,清楚AA
101 2 case SMB_MRDBACK://0x50
102 2 Pcf8563.Time[PcfPoint++] = SMB0DAT;
103 2 if(PcfPoint == 0x0f)
104 2 { AA = 0;PcfPoint = 0;StartReadflag = 0;}
105 2 SI = 0;
106 2 break;
107 2 // 数据字节已收到,NACK已发出,典型操作:置位STO
108 2 case SMB_MRDBNACK://0x58
109 2 STO = 1;
110 2 Pcf8563.Time[0x0f] = SMB0DAT;
111 2 Readoverflag = 1; // 已经读完
112 2 AA = 1; // Set AA for next transfer
113 2 SI = 0;
114 2 break;
115 2 default:
116 2 SI = 0;
117 2 break;
C51 COMPILER V7.50 INTERRU 12/03/2005 12:09:17 PAGE 3
118 2 }
119 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 294 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -