The Intel 82C54 is a high-performance, CHMOS version of the industry standard 8254 counter/timer. It provides three independent 16-bit counters. All operating modes are software programmable. The 82C54 is pin compatible with the HMOS 8254, and is a superset of the 8253. Six programmable modes allow the 82C54 to be used as an event counter, elapsed time indicator, programmable one-shot, and in many other applications.
In the PC's architecture the 8254 is located at hardware I/O address 40H through 43H. The following C/Assembler code reads the 16 bit count maintained by channel 0 of the PC's 8254. Each count represent a time interval of 0.41905 uSec.
unsigned int read_8254_count (void) { asm { pushf // save current inetrrupt status cli // no ints while we read the 8254 mov al,0 // command to latch counter for counter 0 out 0x43,al // tell the 8254 to latch the count db 0x24, 0xf0 // jmp $+2, this slow I/O on fast processors in al,0x40 // read LSB of 8254's count mov ah,al // temp save db 0x24, 0xf0 // jmp $+2 in al,0x40 // read MSB of count xchg al,ah // get right order of MSB/LSB popf // return saved interrupt status } return _AX; }