pic-usb.rar

  • 86hupeng
    了解作者
  • Visual C++
    开发工具
  • 10KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 16
    下载次数
  • 2009-01-04 14:49
    上传日期
pic 控制 usb程序,程序是别人的。 看不懂
pic-usb.rar
  • H
  • MYSUB.sdb
    9.1KB
  • MYSUB.lst
    7.4KB
  • MYSUB.obj
    17KB
  • MYSUB.C
    3.7KB
  • MYSUB.dep
    121B
  • www.pudn.com.txt
    218B
内容介绍
#include "f:\wangyong\GSUSB\GSUSBN3\PIC2\mysub.h" #include "math.H" void DoRBInit(void); void DoRCInit(void); void SendCh(INT8U ch); #if TXBUFFERENABLE == 1 struct UARTBUFFER2{ //UART0数据队列 INT8U Buffer[T_UARTLENGTH]; INT8U Counter; INT8U In; INT8U Out; }bank1 Tx; bank1 INT8U TXEnable = 0; //串口当前状态 #endif #if TXBUFFERENABLE == 1 //串行中断发送程序 void DoTXInit(void){ if(Tx.Counter > 0){ Tx.Counter -= 1; SBUF = Tx.Buffer[Tx.Out]; Tx.Out += 1; if(Tx.Out == (T_UARTLENGTH - 1)){ Tx.Out = 0; } } else{ TXEnable = 0; ES = 0; //关闭中断 } } #endif /**************************************************************** 函数名称:UARTInit(INT16U bate) 函数功能:异步通讯接口的设置 Input Vector:bate 波特率 ****************************************************************/ void UARTInit(INT16U bate){ TRISC |= 0b11000000; TXSTA = 0b10100100; RCSTA = 0b10110000; SPBRG = XTAL / bate / 16 - 1; #if TXBUFFERENABLE == 1 Tx.Counter = 0; Tx.In = 0; Tx.Out = 0; #endif } /******************************************************************* 函数名称:SebdString 函数功能:将长整型数据转换字符串发送出去 Input Vector:no(待发数据),LF *******************************************************************/ void SendStr(INT32S no){ INT8U ch[9]; INT8U ii; if(no >= 0) ch[0] = '+'; else{ no = -no; ch[0] = '-'; } for(ii = 0 ; ii < 8 ; ii++){ ch[8 - ii] = (no % 10) + 0x30; no /= 10; } for(ii = 0 ; ii < 9 ; ii++){ SendCh(ch[ii]); } } /************************************************************************** 程序名称:SendCh 程序功能:发送数据 **************************************************************************/ void SendCh(INT8U ch){ #if TXBUFFERENABLE == 1 ES = 0; if(TXEnable == 0){ if(Tx.Counter == 0){ TXREG = ch; } else{ Tx.Counter -= 1; TXREG = Tx.Buffer[Tx.Out]; Tx.Out += 1; if(Tx.Out == (T_UARTLENGTH - 1)){ Tx.Out = 0; } Tx.Counter += 1; Tx.Buffer[Tx.In] = ch; Tx.In += 1; if(Tx.In == (T_UARTLENGTH - 1)){ Tx.In = 0; } } TXEnable = 1; ES = 1; } else{ ES = 1; while(Tx.Counter >= T_UARTLENGTH); //等待发送空 Tx.Counter += 1; Tx.Buffer[Tx.In] = ch; Tx.In += 1; if(Tx.In == (T_UARTLENGTH - 1)){ Tx.In = 0; } } #else TXREG = ch; while(!TXIF) CLRWDT(); TXIF = 0; #endif } //读取对应AD值的程序 INT8U ReadAD(INT8U Channel){ INT8U Vol; if(Channel < 6){ Channel <<= 3; Vol = ADCON0 & 0b11000111; ADCON0 = Vol | Channel; for(Channel = 0 ; Channel < 100 ; Channel++); ADGO = 1; CLRWDT(); while(ADGO); Channel = ADRES; return Channel; } return 0; } //细分处理 INT32S WY_XFFunction(INT32S GSCounter , INT8U VolX , INT8U VolY , INT8U VolMid) { float Vx , Vy , Vm; Vx = VolX; Vy = VolY; Vm = VolMid; Vx = Vx - Vm; Vy = Vy - Vm; if(Vy == 0){ if(Vx > 0) Vm = 3.141592654 / 2.0; else Vm = 3.141592654 / 2.0 + 3.141592654; } else{ Vm = -atan(Vx / Vy); if(Vy > 0){ Vm += 3.141592654; } else if(Vx < 0){ Vm = 3.141592654 * 2 + Vm; } } Vm = Vm * 31.83098861422280369261393109942; Vm += 50; if(Vm >= 200) Vm -= 200; GSCounter *= 200; GSCounter += Vm; return GSCounter; } /******************************************************************************* 中继处理程序 *******************************************************************************/ void interrupt tc_int(void) { if(RBIF){ //计数器溢出处理 DoRBInit(); } if(RCIF){ RCIF = 0; DoRCInit(); } #if TXBUFFERENABLE == 1 if(TXIF){ TXIF = 0; DoTXInit(); } #endif }
评论
    相关推荐