⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysub.lst

📁 pic 控制 usb程序
💻 LST
字号:
     1: #include "f:\wangyong\GSUSB\GSUSBN3\PIC2\mysub.h"

     2: #include "math.H"

     3: 

     4: 

     5: void DoRBInit(void);

     6: void DoRCInit(void);

     7: void SendCh(INT8U ch);

     8: 

     9: 

    10: #if TXBUFFERENABLE == 1

    11: struct UARTBUFFER2{                                                     //UART0数据队列

    12:         INT8U Buffer[T_UARTLENGTH];

    13:         INT8U Counter;

    14:         INT8U In;

    15:         INT8U Out;

    16: }bank1 Tx;

    17: 

    18: bank1 INT8U TXEnable = 0;               //串口当前状态

    19: 

    20: #endif

    21: #if TXBUFFERENABLE == 1

    22: //串行中断发送程序

    23: void DoTXInit(void){

    24:         

    25:         if(Tx.Counter > 0){

    26:                 Tx.Counter -= 1;

    27:                 SBUF = Tx.Buffer[Tx.Out];

    28:                 Tx.Out += 1;

    29:                 if(Tx.Out == (T_UARTLENGTH - 1)){

    30:                         Tx.Out = 0;

    31:                 }                       

    32:         }

    33:         else{

    34:                 TXEnable = 0;

    35:                 ES = 0;         //关闭中断

    36:         }

    37: }

    38: 

    39: #endif

    40: 

    41: /****************************************************************

    42: 函数名称:UARTInit(INT16U bate)

    43: 函数功能:异步通讯接口的设置

    44: Input Vector:bate 波特率

    45: ****************************************************************/

    46: 

    47: void UARTInit(INT16U bate){

    48: 

    49:         TRISC |= 0b11000000;

    50:         TXSTA = 0b10100100;             

    51:         RCSTA = 0b10110000;

    52:         SPBRG = XTAL / bate / 16 - 1;

    53:         #if TXBUFFERENABLE == 1

    54:                 Tx.Counter = 0;

    55:                 Tx.In = 0;

    56:                 Tx.Out = 0;     

    57:         #endif

    58: }

    59: 

    60: /*******************************************************************

    61: 函数名称:SebdString

    62: 函数功能:将长整型数据转换字符串发送出去

    63: Input Vector:no(待发数据),LF

    64: *******************************************************************/

    65: void SendStr(INT32S no){

    66: 

    67:         INT8U ch[9];

    68:         INT8U ii;

    69:         

    70:         if(no >= 0)     ch[0] = '+';

    71:         else{

    72:                 no = -no;

    73:                 ch[0] = '-';

    74:         }

    75:         

    76:         for(ii = 0 ; ii < 8 ; ii++){

    77:                 ch[8 - ii] = (no % 10) + 0x30;

    78:                 no /= 10;       

    79:         }

    80:         for(ii = 0 ; ii < 9 ; ii++){

    81:                 SendCh(ch[ii]);

    82:         }

    83: }

    84: /**************************************************************************

    85: 程序名称:SendCh

    86: 程序功能:发送数据

    87: **************************************************************************/

    88: 

    89: void SendCh(INT8U ch){

    90: 

    91: #if TXBUFFERENABLE == 1

    92:         ES = 0;

    93:         if(TXEnable == 0){

    94:                 if(Tx.Counter == 0){

    95:                         TXREG = ch;             

    96:                 }

    97:                 else{

    98:                         Tx.Counter -= 1;

    99:                         TXREG = Tx.Buffer[Tx.Out];

   100:                         Tx.Out += 1;

   101: 

   102:                         if(Tx.Out == (T_UARTLENGTH - 1)){

   103:                                 Tx.Out = 0;

   104:                         }

   105: 

   106:                         Tx.Counter += 1;

   107:                         Tx.Buffer[Tx.In] = ch;

   108:                         Tx.In += 1;

   109: 

   110:                         if(Tx.In == (T_UARTLENGTH - 1)){

   111:                                 Tx.In = 0;

   112:                         }       

   113:                 }

   114:                 TXEnable = 1;

   115:                 ES = 1;

   116:         }

   117:         else{

   118:                 ES = 1;

   119:                 while(Tx.Counter >= T_UARTLENGTH);      //等待发送空            

   120:                 

   121:                 Tx.Counter += 1;

   122:                 Tx.Buffer[Tx.In] = ch;

   123:                 Tx.In += 1;

   124: 

   125:                 if(Tx.In == (T_UARTLENGTH - 1)){

   126:                         Tx.In = 0;

   127:                 }       

   128:         }       

   129: #else

   130:         TXREG = ch;

   131:         while(!TXIF)    CLRWDT();

   132:         TXIF = 0;       

   133: #endif

   134: }

   135: 

   136: //读取对应AD值的程序

   137: INT8U ReadAD(INT8U Channel){

   138: 

   139:         INT8U Vol;

   140: 

   141:         if(Channel < 6){

   142:                 Channel <<= 3;

   143:                 Vol = ADCON0 & 0b11000111;

   144:                 ADCON0 = Vol | Channel;

   145:                 

   146:                 for(Channel = 0 ; Channel < 100 ; Channel++);

   147:                 

   148:                 ADGO = 1;

   149:                 CLRWDT();

   150:                 while(ADGO);

   151:                 Channel = ADRES;                                

   152:                 return Channel; 

   153:         }

   154:         return 0;

   155: }

   156: 

   157: //细分处理

   158: INT32S WY_XFFunction(INT32S GSCounter  , INT8U VolX , INT8U VolY , INT8U VolMid)

   159: {

   160:         float Vx , Vy , Vm;

   161:         

   162:         Vx = VolX;

   163:         Vy = VolY;

   164:         Vm = VolMid;

   165: 

   166:         Vx = Vx - Vm;

   167:         Vy = Vy - Vm;

   168: 

   169:         if(Vy == 0){    

   170:                 if(Vx > 0)      Vm = 3.141592654 / 2.0;

   171:                 else            Vm = 3.141592654 / 2.0 + 3.141592654;

   172:         }

   173:         else{

   174:                 Vm = -atan(Vx / Vy);

   175:                 if(Vy > 0){                     

   176:                         Vm += 3.141592654;

   177:                 }

   178:                 else if(Vx < 0){

   179:                         Vm = 3.141592654 * 2 + Vm;

   180:                 }

   181:         }

   182: 

   183:         Vm = Vm * 31.83098861422280369261393109942;

   184: 

   185:         Vm += 50;

   186:         if(Vm >= 200) Vm -= 200;

   187: 

   188:         GSCounter *= 200;

   189: 

   190:         GSCounter += Vm;        

   191: 

   192:         return GSCounter;

   193: }

   194: 

   195: 

   196: 

   197: /*******************************************************************************

   198: 中继处理程序

   199: *******************************************************************************/

   200: void interrupt tc_int(void)

   201: {       

   202:         if(RBIF){                       //计数器溢出处理                                

   203:                 DoRBInit();

   204:         }

   205:         

   206:         if(RCIF){

   207:                 RCIF = 0;

   208:                 DoRCInit();     

   209:         }

   210:         #if TXBUFFERENABLE == 1

   211:         if(TXIF){

   212:                 TXIF = 0;

   213:                 DoTXInit();

   214:         }

   215:         #endif

   216: }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -