zusen

    1. 应该加开一个考电子工程师的板面 3/5653 为我们提建议&公告 2008-01-22
      靠电子工程师的话都需要找些什么东西呀?
    2. 有什么更好的改进思路呢?? 模拟灵活是一个特点,但也有很大的弊端,就是比硬件串口占用CPU更多的资源
    3. 当主机要向从机发送命令时,先CLR  REN,屏闭掉主机的接收功能(屏闭冲突),当发送完命令后,SETB  REN,OPEN 接收功能,等待接收从机.
    4. 如图 模拟串口作为从机 RXD 和 TXD 为51单片机的收和发,作为主机 模拟串口平时等待接收,当收到主机的命令(特定的协议,后面祥细说明),再作相应的操作(比如转换为发送,向主机发送数据) 当主机要向从机发送命令时,先CLR  REN,屏闭掉主机的接收功能(屏闭冲突),当发送完命令后,SETB  REN,OPEN 接收功能,等待接收从机或其他设备的串口数据 模拟串口接收到命令后,先解译命令(协议),判断是命令还是普通数据 如果是命令,再按照命令作特定的操作,比如 向主机发送数据,那么这时,模拟串口转换为发送(这时要延时一小段时间,待主机OPEN接收状态),再向主机返馈数据。 关于协议,如果产品支持级联控制,那么协议是少不了的,说说协议吧 协议可以用国际商业常用的,比如 TCP/IP 、IIS,等等 但自己也可以开发一个小型、适合自身产品的简单协议 比如: AB 20 ID 18 02 XX XX BA 说明一下吧 第一个字节: AB 是协议开始字节,作为开始标记 第二个字节: 20 命令一,告诉从机要操作那个功能模块 第三个字节: ID 设备ID或设备设置通道,就是从机的身份证,只有ID和自己的ID相同,才会根据命令操作,否则掉弃 第四个字节:18 命令二,功能模块要操作的功能,比如,这个18 代表 要控制外设的开关,如果是 20 ,就是向串口返馈数据 第五个字节: 02 数据长度,表示后面跟着有多少个 数据 第六第七字节: XX XX 数据,根据数据作操作,比如结合 第四个字节 18,数据是  01 01 的话,那么 就是 第一通道 开(第一个01 表示第一通道 ,第二个01 表示状态 为开 00表示为关)。 第八字节:BA 校验和、结速字节,如果是BA 那么不去检验校验和,只是标示命令结速,其如是其他,那么这个字节作为校验,前面所有 字节相加 ,然后保留前8位,再加上 这个 校验字节,如果是 FF ,那么就是说,这命令接收到是正确的,如果不是FF,就是说明 这命发送途中可能受到干扰,这时 可向主机后馈一个 数据接收错误的信息,让主机重发。 OK,协议的实现大体就是这样 有空再来说说 如何在程序中去实现这种协议 好久没打过这么多字了,现在用笔都不会写了,所以里面有很多错别字,呵呵,请见谅,希望对初学者有所启发吧,呵呵
    5. 个人觉得是 电源问题
    6. 关于函数、入口参数名称等等的作一个规范 其实这方面也满大工作量的
    7. 我就是这个意思
    8. 这个平台构思其实不错,打破MCU的编程模式 用鼠标代替了不少的操作,和大体的软件设计方向一至,更加人性化,易于操作
    9. 裸奔和os其实没啥可争的 7/7335 单片机 2007-12-18
      那位被拍得满头烂额 的仁兄,应该想表达的是 在一个MCU能支持OS 和 裸奔的情况下,用OS比裸奔好吧~~~~
    10. 以前做学习红外线码也是用捕捉的功能,但你的MCU 定时器/计数器 要支持,呵呵
    11. 我的51唤醒不了? 13/10769 51单片机 2007-12-12
      更准确地说 是从 0000H 开始吧
    12. 用软件来处理确实有点烦 很早以前,在数字功放里用过,在程序里修修补补的,最终还是实现了单步、快速的正返转检测,方法有点另类。
    13. 拍砖来了 多点应用  EQU  定义常量,多点用data定义变量 这样,当你编程时,要改变某些参数,就不用一个一个去改了
    14. 请问怎么来判断串口在发送数据 4/13513 单片机 2007-09-20
      打开串口中断 然后在中断里 置一个IO口控制LED 试试,看看没有没进入串口中断 一般向串口发数据时,先判别串口是否忙
    15. connect( key1, SIGNAL( clicked() ), this, SLOT( key1_com() ) );     connect( key2, SIGNAL( clicked() ), this, SLOT( key2_com() ) );     connect( Slider1 , SIGNAL( sliderMoved(int) ), this, SLOT( key1_value(int) ) );     connect( Slider1 , SIGNAL( valueChanged(int) ), this, SLOT( key1_released(int) ) ); } //====================================================== void cato::key1_com() {     //int fd ,i;     unsigned char  buff[9] = {0xca,0x20,0xfe,0x2b,0x03,0x01,0x00,0x01,0xac};     //    fd = 3;     if( zu > 0 )     {         zu=zu-1;         Slider1->setValue(zu);     }     write( adc, &buff[0],9 ); } //====================================================== void cato::key2_com() {     //int fd ,i;     unsigned char  buff[9] = {0xca,0x20,0xfe,0x2b,0x03,0x01,0x01,0x01,0xac};     //      fd = 3;     if( zu < 64 )     {         zu=zu+1;         Slider1->setValue(zu);     }     write( adc, &buff[0],9 ); } //====================================================== void cato::key3_com() {    ; } //====================================================== void cato::key4_com() {    ; } //====================================================== void cato::key5_com() {    ; } //====================================================== void cato::key6_com() {    ; } //====================================================== void cato::key7_com() {    ; } //====================================================== void cato::key8_com() {    ; } //===================================================== void cato::key1_value(int i) {     //int fd ,i;     unsigned char  buff[8] = {0xca,0x20,0xfe,0x21,0x02,0x01,0x00,0xac};                                                                                     //      fd = 3;     zu = i;     i = 64 - i;     buff[6] = i;     write( adc, &buff[0],8 ); } //===================================================== void cato::key1_released(int i) {     //int fd ,i;     unsigned char  buff[8] = {0xca,0x20,0xfe,0x21,0x02,0x01,0x00,0xac};     //      fd = 3;     zu = i;     buff[6] = 64-i;     write( adc, &buff[0],8 ); } //====================================================== int cato::open_port( int fd, int comport) { //    char *dev[] = {"/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2"};     long vdisable ;     if( comport == 1 )     {         fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);         if( -1 == fd )         {             perror( "Can't open serial port");             return (-1);         }     }     else if( comport == 2 )     {         fd = open( "/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY);         if( -1 == fd )         {             perror( "Can't open serial port");             return (-1);         }     }     else if( comport == 3 )     {         fd = open( "/dev/ttyS2", O_RDWR | O_NOCTTY | O_NDELAY);         if( -1 == fd )         {             perror( "Can't open serial port");             return (-1);         }     }     /************************************************************************/     if( fcntl( fd, F_SETFL, 0 ) < 0)         printf( "fcntl failed!\n" );     else         printf( "fontl=%d\n", fcntl( fd, F_SETFL, 0));     /***********************************************************************/     if( isatty( STDIN_FILENO ) == 0)         printf( "standard input is not aterminal device\n");     else         printf( "isatty success!\n");     printf( "fd-open = %d\n", fd);        return fd; } /********************************************************************************** * *******************************************************************************/ int cato::set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop) {     struct termios newtio, oldtio;     if( tcgetattr(fd, &oldtio) != 0 )     {         perror("setupSerial 1");         return -1;     }     bzero( &newtio, sizeof(newtio) );     newtio.c_cflag |= CLOCAL | CREAD;     newtio.c_cflag &= ~CSIZE;     switch( nBits )     {         case 7:             newtio.c_cflag |= CS7;             break;         case 8:             newtio.c_cflag |= CS8;             break;     }     switch( nEvent )     {         case 'O':             newtio.c_cflag |= PARENB;             newtio.c_cflag |= PARODD;             newtio.c_cflag |= (INPCK | ISTRIP);             break;         case 'E':             newtio.c_cflag |= (INPCK | ISTRIP);             newtio.c_cflag |= PARENB;             newtio.c_cflag &= ~PARODD;             break;         case 'N':             newtio.c_cflag &= ~PARENB;             break;     }     /**************************************/     switch( nSpeed )     {         case 2400:             cfsetispeed( &newtio, B2400);             cfsetospeed( &newtio, B2400);             break;         case 4800:             cfsetispeed( &newtio, B4800);             cfsetospeed( &newtio, B4800);             break;         case 9600:             cfsetispeed( &newtio, B9600);             cfsetospeed( &newtio, B9600);             break;         case 115200:             cfsetispeed( &newtio, B115200);             cfsetospeed( &newtio, B115200);             break;         case 460800:             cfsetispeed( &newtio, B460800);             cfsetospeed( &newtio, B460800);             break;         default:             cfsetispeed( &newtio, B9600);             cfsetospeed( &newtio, B9600);             break;              }     if( nStop == 1)         newtio.c_cflag &= ~CSTOPB;     else if( nStop == 2 )         newtio.c_cflag |= CSTOPB;     newtio.c_cc[ VTIME ] = 0;     newtio.c_cc[ VMIN ] = 0;     tcflush( fd, TCIFLUSH );     if((tcsetattr(fd, TCSANOW, &newtio)) != 0)     {         perror("com set error");         return -1;     }     printf("set done!\n");     return 0; } int cato::init_com(void) {         int fd, i;         if( ( fd = cato::open_port( fd, 2)) < 0 )                                                                                          {                                                                                                  perror( "open_port error");                                                                                                  return 0 ;                                                                                          }                                                                                          if( ( i = cato::set_opt( fd, 9600, 8, 'N', 1 ) ) < 0 )                                                                                          {                                                                                                  perror( "set_opt error");                                                                                                  return 0 ;                                                                                          }                                                                                          printf( "fd = %d\n", fd );         return fd;      } /**************************************************************************************/ //====================================================== /*   *  Destroys the object and frees any allocated resources */ cato::~cato() {     // no need to delete child widgets, Qt does it all for us }
    16. /**************************************************************************** ** Form interface generated from reading ui file 'cato.ui' ** ** Created: Mon Jun 4 09:37:06 2007 **      by:  The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef CATO_H #define CATO_H #include <qvariant.h> #include <qwidget.h> class QVBoxLayout; class QHBoxLayout; class QGridLayout; class QPushButton; class QSlider; class cato : public QWidget {     Q_OBJECT public:     cato( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );     int open_port( int fd, int comport);     int set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop);     int init_com(void);     ~cato();     QSlider* Slider1;     QSlider* Slider2;     QSlider* Slider3;     QPushButton* key1;     QPushButton* key2;     QPushButton* key3;     QPushButton* key4;     QPushButton* key5;     QPushButton* key6;     QPushButton* key7;     QPushButton* key8; public slots:     void key1_com();     void key2_com();     void key3_com();     void key4_com();     void key5_com();     void key6_com();     void key7_com();     void key8_com();     void key1_value(int i);     void key1_released(int i); }; #endif // CATO_H

最近访客

< 1/1 >

统计信息

已有69人来访过

  • 芯积分:--
  • 好友:--
  • 主题:2
  • 回复:16

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言