串口小小软件

       

        昨天的下午时,主管叫我做个串口小软件,我都知这份工要做有关串口的相关东西,不过我一点都不会,没接触过,,但是昨天的时候见个售后技术的同事用VB+MSComm控件来做类似的程序,简单的要命,我就挺有信心的(不过我不能用组件,因为它要安装才能用,有缺陷)。这软件用来定时发送命令,同埋点击特定按钮发送特定代码的。当主管问我几时做完时,我就话明天中午吃饭前,点知答完过后,我就怀疑自己啦,没接触过的东西行不行啊..

       好彩之前做的智能数字会议系统(没做完的,做左小小,一直不停的模仿其它智能数字会议系统来做,老板叫我甘做的)用得上,好似D数据库操作,同埋D逻辑能用得上(代码还是写好一点,这样才能通用),GOOD啊...不过还是改好多,加左500几行代码先做完,昨晚做到12点先睡,早上又一直做先完成。

      在做的过程中,遇到几个问题:

      (1)COM SetCommState设置参数时,老是在StopBits停止位设置出错。后来才知道"5位数据位与2位停止位的组合6,7,8位数据位与1.5位停止位的组合都是错误的,而且

StopBits 0代表1 stop bit. 1代表1.5 stop bit. 2代表2stop bit",我之前老是以为设1就代表1 stop bit,汗....      (2)我软件使用的是Unicode 字符集,谁叫网上说使用 Unicode 字符范围比较广,就一直用这字符集。到发送数据时就出错啦,那工控机矩阵(不知道是不是这样说),不能响应.后来把Unicode 字符转换成多字节就可以啦.-_-,做开机启动时也遇到这样问题.          现在总算做完啦,不过这串口可不是这么简单,就像SOCKET(看过精通Windows Sockets网络开发:基于Visual C++实现就知道自己有多肤浅)一样,用组件很容易一些简单功能,但要做好可不简单,还有很长的路。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
串口通信程序,附带详细说明! //程序功能:接收串口发过来的字符,当字符分别为12345的时候分别返回OKMCU字母,当为其他字符的时候,把接收内容返回。 #include #include //内部包含延时函数 _nop_(); typedef unsigned char u8; typedef unsigned int u16; sbit SER_595 =P1^0; //串行数据输入 sbit SCK_595 =P1^1; //移位时钟脉冲 sbit RCK_595 =P1^2; //输出锁存器控制脉冲 u8 i,j,k; u8 code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; u8 temp,buf; //u8 disbuf[2]={0x00,0x00}; void sdelay(u8 n) //延时程序 { u8 i; for(i=n;i>0;i--); } /******************************************************* * * * 驱动函数 595 * * * *******************************************************/ void smg595(u8 byte) { u8 num,c; num=byte; for(c=0;c<8;c++) { SCK_595=0; num=num<<1; SER_595=CY; SCK_595=1; } for(c=0;c<8;c++) { SCK_595=0; SER_595=0; SCK_595=1; } RCK_595=0; RCK_595=1; } void dis8(u8 r,u8 c) //数码管显示程序(第c个数码管显示r) { smg595(~(1<<c)); //数码管位信号输出 P0=table[r]; //数码管段信号输出 sdelay(10); P0=0; } /********************************************************* 发送数据函数 *********************************************************/ void senddata(u8 dat) { SBUF =dat; while(!TI); TI = 0; } /********************************************************* 串行中断服务函数 *********************************************************/ void serial() interrupt 4 { RI = 0; //清除串行接受标志位 ES = 0; //关闭串行中断 buf = SBUF; //从串口缓冲区取得数据 switch(buf) { case 0x31: senddata('O');break; //接受到1,发送字符'O'给计算机 case 0x32: senddata('K');break; //接受到2,发送字符'K'给计算机 case 0x33: senddata('M');break; //接受到3,发送字符'M'给计算机 case 0x34: senddata('C');break; //接受到4,发送字符'C'给计算机 case 0x35: senddata('U');break; //接受到5,发送字符'U'给计算机 default: s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶恭介叶恭介

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值