📄 bulkout.c
字号:
// bulkout.C 7-25-00 LTH
// A Simple bulk OUT transfer. Display bytes received over EP2OUT in 7-seg readout
xdata char OUT2BUF[64] _at_ 0x7DC0; // 64-byte buffer for EP2-OUT data
xdata char OUT2BC _at_ 0x7FC9; // EP2OUT Byte Count Register
xdata char OUT2CS _at_ 0x7FC8; // EP2OUT Control/Status register
xdata char I2CS _at_ 0x7FA5; // I2C port Control/Status
xdata char I2DAT _at_ 0x7fA6; // I2C data
#define bBSY 0x02 // OUT2CS.1 is busy bit
#define bSTOPBIT 0x40 // I2CS.6 is i2c STOP bit
#define DISPLAYTIME 200 // approx. milliseconds
char count,j; // number of digits sent over EP2OUT
char xdata Digit[ ]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void display_hex (char val); // display 'val' as hex in 7-seg readout
void delay (int time);
void display_hex (char val) // display one hex digit (over i2c bus)
{
while (I2CS & bSTOPBIT); // wait for STOP bit LOW--last operation complete
I2CS = 0x80; // set the START bit
I2DAT = 0x42; // IO expander address=42, LSB=0 for write
while ((I2CS&0x01)!=0x01); // wait for DONE=1 (i2c transmit complete)
I2DAT = val; // send the data byte
while ((I2CS&0x01)!=0x01); // wait for DONE=1
I2CS = 0x40; // set the STOP bit
}
int i,k;
void delay (int time)
{
for (k=0; k<time; k++) // kill some milliseconds
for (i=0; i<400; i++);
}
main()
{
while (1) // forever
{
while (OUT2CS & bBSY); // loop while EP2OUT busy bit is HI
count = OUT2BC; // how many bytes were sent over EP2OUT?
for(j=0; j<count; j++)
{
display_hex(Digit[OUT2BUF[j]]); // look up segments
delay(DISPLAYTIME); // delay so we can see it
display_hex(0xFF); // blank display (active-low segments; 1=off)
delay(DISPLAYTIME);
}
OUT2BC = 0; // arm the next OUT2 transfer (BC=x)
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -