打印

TX与RX结合问题

[复制链接]
1821|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
107221829|  楼主 | 2012-12-6 14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST, TE, se, RS, start
这是我自己写的RS232+ G-传感器程式
请问一下TX部分传输没问题
但RX部分该怎么接收TX资料进而转换成PWM
并控制PWM的大小
我是用29466这块IC
麻烦帮我解答一下谢谢

-----TX部分----
//
// Custom.c
//
//   Custom functions for insertion into PSoC Express projects, including fixed functions
//
#include <m8c.h>
#include "PSoCAPI.h"
#include "custom.h"

#define START        0xa5
#define X                0x41
#define Y                0x52
#define STOP        0x5a
const BYTE data[] ={ START, X, Y, STOP};
extern SYSTEM_VARS_STRUC SystemVars;
void delay(unsigned int x);
BOOL fWaitToTx(void);
BYTE A;
BYTE B;
//
//  CustomInit() is run after driver and channel instantiation functions, but before the main loop
//
void CustomInit( void )
{
}

//
// CustomPostInputUpdate() is run after input drivers have updated SystemVars, but before transfer
//   functions are evaluated.
//
void CustomPostInputUpdate( void )
{
}

//
// CustomPreOutputUpdate() is run after transfer functions have been evaluated, but before the output
//   driver are updated with values from SystemVars.
//
void CustomPreOutputUpdate( void )
{
        unsigned char i;
        Counter8_Start();
        TX8_Start(0);
        M8C_EnableGInt;
        A = PRT1DR;
        B = PRT1DR;
        //START
        TX8_SendData(START);
        if (fWaitToTx());
        //X
        if (SystemVars.ReadWriteVars.pse_XAxis < 0)
        A = (-SystemVars.ReadWriteVars.pse_XAxis >> 3) | 0x80;
    else
        A = (SystemVars.ReadWriteVars.pse_XAxis >> 3) & 0x7f;
        TX8_SendData(A);
        if (fWaitToTx());
        delay(100);
        //Y
        if (SystemVars.ReadWriteVars.pse_YAxis < 0)
        B = (-SystemVars.ReadWriteVars.pse_YAxis >> 3) | 0x80;
    else
        B = (SystemVars.ReadWriteVars.pse_YAxis >> 3) & 0x7f;
        TX8_SendData(B);
        if (fWaitToTx());
        //STOP
        TX8_SendData(STOP);
        if (fWaitToTx());
       
        delay(1000);
       
}
BOOL fWaitToTx(void)
{
    BYTE bTxStatus;
        while ( !(bTxStatus = TX8_bReadTxStatus() & TX8_TX_COMPLETE));
        return (TRUE);  
}

void delay(unsigned int x)
{
    unsigned i;
        for(i = 0; i < x; i++);
}
----RX部分----
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#include "RX8.h"

#define        START        0xa5
#define        X        0x41
#define Y        0x52
#define        STOP        0x5a
#define RX_OK        0x01
const BYTE data[] ={ START, X, Y, STOP};  
BOOL fWaitToRx(void);
BYTE bRxData;
void delay(unsigned int x);
int j=0;
void main(void)
{
    unsigned char i;
        //--------RS232_RX---------  
        Counter8_Start();
        RX8_DisableInt();
        RX8_Start(0);
        M8C_EnableGInt;
        //--------PWM---------
        DigBuf1_DisableInt();
        DigBuf2_DisableInt();
            PWM8_WritePeriod(120);
        PWM8_DisableInt();
        PWM8_Start();
        DigBuf3_DisableInt();
        DigBuf4_DisableInt();
            PWM81_WritePeriod(120);
        PWM81_DisableInt();
        PWM81_Start();
       
        while (1)
        {
          if (fWaitToRx())
          {
           if(bRxData)
           {
             if (j == 0)
                {
                    DigBuf1_Start();
                        DigBuf2_Stop();
                        DigBuf4_Start();
                        DigBuf3_Stop();
                       
                for (i = 7; i <= 120; i++)
                {
                        PWM8_WritePulseWidth(i);
                                PWM81_WritePulseWidth(i);
                        delay(2500);
                }
                        for (i = 120; i >= 7; i--)
                {
                        PWM8_WritePulseWidth(i);
                                PWM81_WritePulseWidth(i);
                        delay(2500);
                }
                       
                }
                else
                {
                    DigBuf1_Stop();
                        DigBuf2_Start();
                        DigBuf4_Stop();
                        DigBuf3_Start();
                for (i = 7; i <= 120; i++)
                {
                        PWM8_WritePulseWidth(i);
                                PWM81_WritePulseWidth(i);
                        delay(2500);
                }
                        for (i = 120; i >= 7; i--)
                {
                        PWM8_WritePulseWidth(i);
                                PWM81_WritePulseWidth(i);
                        delay(2500);
                }
                }
                j = 1 - j;
           }       
          }
         
        }
}

BOOL fWaitToRx(void)
{
    BYTE bRxStatus;
    while ( !(bRxStatus = RX8_bReadRxStatus() & RX8_RX_COMPLETE));
        if ((bRxStatus & RX8_RX_NO_ERROR) == 0)
        {
            bRxData = RX8_bReadRxData();
                return (TRUE);
        }
        else
        {
            bRxData = bRxStatus;
                return (FALSE);
        }       
}

void delay(unsigned int x)
{
   unsigned i;
   for(i = 0; i < x; i++);
}
沙发
Go_PSoC| | 2012-12-28 10:49 | 只看该作者

楼主问题解决了吗?或者可以到官网建一个case,关于建case,可以看看这个帖子

Cypress技术支持的新途径
https://bbs.21ic.com/forum.php?mo ... &fromuid=595718

使用特权

评论回复
板凳
Go_PSoC| | 2012-12-28 10:49 | 只看该作者
可以写中文

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝