给OO的PDIUSBD12读ID程序提取/******************************************************************** main.c file ********************************************************************/ #include "at89x52.h" #define Fclk 22118400UL /*使用22.1184M晶体*/ #define BitRate 9600UL /*波特率定义为9600*/ #define uint8 unsigned char #define uint16 unsigned short int unsigned char Sending; /****************USB部分****************************/ #define USB_COMMAND_ADD 1 #define USB_DATA_ADD 0 #define Read_ID 0xFD //USB芯片连接引脚 #define USB_DATA P0 #define USB_A0 P3_5 #define USB_WR P3_6 #define USB_RD P3_7 #define USB_INT P3_2 /******************************************************************** 函数功能:写USB命令。 入口参数:一字节命令。 ********************************************************************/ void WriteUsbCommand(uint8 usb_command) { USB_A0=USB_COMMAND_ADD; USB_DATA=usb_command; USB_WR=0; USB_WR=1; USB_DATA=0xFF; } /******************************************************************** 函数功能:读一字节USB数据。 返 回:读回的一字节。 ********************************************************************/ uint8 ReadUsbData(void) { uint8 temp; USB_A0=USB_DATA_ADD; USB_RD=0; temp=USB_DATA; USB_RD=1; return temp; } /******************************************************************** 函数功能:读D12的ID。 返 回:D12的ID。 ********************************************************************/ uint16 ReadD12ID(void) { uint16 id; WriteUsbCommand(Read_ID); ((uint8*)&id)[1]=ReadUsbData(); ((uint8*)&id)[0]=ReadUsbData(); return id; } /*USB部分结束******************************************/
/****************************************************************** UART.C file 部分 ********************************************/ /******************************************************************** 函数功能:串口初始化。 ********************************************************************/ void InitUART(void) { EA=0; TMOD&=0x0F; TMOD|=0x20; //定时器1工作在模式2 SCON=0x50; //串口工作在模式1 TCON=0x05; TH1=256-Fclk/(BitRate*12*16); TL1=256-Fclk/(BitRate*12*16); PCON=0x80; //串口波特率加倍 ES=1; //串行中断允许 TR1=1; //启动定时器1 REN=1; //允许接收 EA=1; //允许中断 } /******************************************************************** 函数功能:串口中断处理。 ********************************************************************/ void UartISR(void) interrupt 4 { TI=0; Sending=0; //清正在发送标志 } /******************************************************************** 函数功能:往串口发送一字节数据。 入口参数:d: 要发送的字节数据。 ********************************************************************/ void UartPutChar(uint8 d) { Sending=1; SBUF=d; while(Sending); } /******************************************************************** 函数功能:发送一个字符串。 入口参数:pd:要发送的字符串指针。 ********************************************************************/ void Prints(uint8 * pd) { while((*pd)!='\0') { UartPutChar(*pd); pd++; } } code uint8 HexTable[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; /******************************************************************** 函数功能:将短整数按十六进制发送。 入口参数:待发送的整数。 ********************************************************************/ void PrintShortIntHex(uint16 x) { uint8 i; uint8 display_buffer[6]; display_buffer[0]='0'; display_buffer[1]='x'; for(i=5;i>=2;i--) { display_buffer=HexTable[(x&0xf)]; x>>=4; } Prints(display_buffer); } /****************************************************************** UART.C file END(结束) ********************************************/ /******************************************************************** 函数功能:主函数。 ********************************************************************/ void main(void) { uint16 id; InitUART(); //初始化串口 id=ReadD12ID(); PrintShortIntHex(id); while(1) { } }
|