📄 timer.lst
字号:
C51 COMPILER V7.06 TIMER 10/09/2006 21:51:56 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE timer.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-----------------------------------------------------------------------------
2 // Net TIMER.C
3 //
4 // This module sets up the timer and handles the timer interrupt
5 //-----------------------------------------------------------------------------
6 #include <reg51.h>
7 #include <net.h>
8 #include <timer.h>
9
10
11 extern UINT volatile event_word;
12 extern ULONG idata initial_sequence_nr;
13
14 sfr T2CON = 0xc8;
15 sbit cprl2 = T2CON^0;
16 sbit ct2 = T2CON^1;
17 sbit TR2 = T2CON^2;
18 sbit exen2 = T2CON^3;
19 sbit tclk = T2CON^4;
20 sbit rclk = T2CON^5;
21 sbit exf2 = T2CON^6;
22 sbit TF2 = T2CON^7;
23
24 sfr RCAP2H = 0xcb;
25 sfr RCAP2L = 0xca;
26 sfr TH2 = 0xcd;
27 sfr TL2 = 0xcc;
28
29 sfr CHPCON = 0xbf;
30 sfr CHPENR = 0xf6;
31 sfr SFRAL = 0xc4;
32 sfr SFRAH = 0xc5;
33 sfr SFRFD = 0xc6;
34 sfr SFRCN = 0xc7;
35
36 //--------------------------------------------------------------------------
37 // Timer 2 interrupt service routing. Intr vector location is
38 // address 0x002B. The timer generates an interrupt every 20 msec
39 // It is set to auto reload so do not need to reload it.
40 //--------------------------------------------------------------------------
41 void timer2_interrupt(void) interrupt 5
42 {
43 1 static UINT count1 = 0;
44 1 static UINT count2 = 0;
45 1
46 1 TF2 = 0; // Clear interrupt flag
47 1
48 1
49 1 // Advance the initial sequence number
50 1 initial_sequence_nr += 6250;
51 1 // Keep it some distance from rolling over
52 1 if (initial_sequence_nr & 0x10000000L) initial_sequence_nr = 1;
53 1
54 1 count1++;
55 1 // These events happens every 0.50 seconds, not simultaneously
C51 COMPILER V7.06 TIMER 10/09/2006 21:51:56 PAGE 2
56 1 if (count1 == 6) event_word |= EVENT_ARP_RETRANSMIT;
57 1
58 1 if (count1 == 12) event_word |= EVENT_TCP_INACTIVITY;
59 1
60 1 if (count1 == 25)
61 1 {
62 2 count1 = 0;
63 2 event_word |= EVENT_TCP_RETRANSMIT;
64 2 }
65 1
66 1 count2++;
67 1 if (count2 == 3001)
68 1 {
69 2 // This happens every 60.020 seconds, not simultaneous
70 2 // with above tasks
71 2 count2 = 0;
72 2 event_word |= EVENT_AGE_ARP_CACHE;
73 2 }
74 1 }
75
76
77
78
79
80 //--------------------------------------------------------------------------
81 // Setup Timer2 in mode 1 which is 16 bit auto reload
82 // Intr rate = 32 MHz /(12 * (65536 - reload value))
83 // For 20 msec reload value = 0x2FAB
84 //--------------------------------------------------------------------------
85 void init_timer2(void)
86 {
87 1 T2CON = 0x00;
88 1 RCAP2H = 0x2F; // Reload value
89 1 RCAP2L = 0xAB;
90 1 TH2 = 0x2F; // Initial load value
91 1 TL2 = 0xAB;
92 1 TR2 = 1; // Timer 2 run
93 1 }
94
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 180 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
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 + -