?? 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 // 起始條件已發(fā)出,典型操作:
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 // 重復(fù)起始條件已發(fā)出,典型操作:
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 已發(fā)出,收到ACK,典型操作:
33 2 // 將要發(fā)送的數(shù)據(jù)裝入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 已發(fā)出,收到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 // 數(shù)據(jù)字節(jié)已發(fā)出,收到ACK,典型操作:將下一字節(jié)裝入到
50 2 // SMB0DAT,或置位STO,或置位STA,以發(fā)送重復(fù)起始條件
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 // 數(shù)據(jù)字節(jié)已發(fā)出,收到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 // 競爭失敗,典型操作:保存當(dāng)前數(shù)據(jù)
82 2 case SMB_MTARBLOST://0x38
83 2 SI = 0; // Clear interrupt flag
84 2 break;
85 2 // 從地址+R已發(fā)出,收到ACK,典型操作:如果只接收一個字節(jié),
86 2 // 清AA位(收到字節(jié)后發(fā)送NACK),等待接收數(shù)據(jù)
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已發(fā)出,收到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 // 數(shù)據(jù)字節(jié)已收到,ACK已發(fā)出,典型操作:讀SMB0DAT,
100 2 // 等待下一字節(jié),若下一字節(jié)是最后字節(jié),清楚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 // 數(shù)據(jù)字節(jié)已收到,NACK已發(fā)出,典型操作:置位STO
108 2 case SMB_MRDBNACK://0x58
109 2 STO = 1;
110 2 Pcf8563.Time[0x0f] = SMB0DAT;
111 2 Readoverflag = 1; // 已經(jīng)讀完
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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -