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