C# SerialPort类中SerialPinChange和PinChange的使用方法

C# SerialPort类中SerialPinChange和PinChange的使用方法,第1张

RS232串行通信接口硬件上有三个信号输入引脚:

CTS:这个信号源自对方(通常是DSE类型的设备,如调制解调器),告诉你DSE已经同意你发送数据

DSR:这个信号源自对方(通常是DSE类型的设备,如调制解调器),告诉你DSE已经准备就绪,可以工作了

CD:这个信号源自对方(通常是DSE类型的设备,如调制解调器),告诉你DSE已经侦测到载波(也就是数据调制波)

在net中,要读取这三个信号的状态,有两种方法:

(1)直接读取,代码如下

//读取CTS

bool blnCTS = serialPort1CtsHolding;

//读取DSR

bool blnDSR = serialPort1DsrHolding;

//读取CD

bool blnCD = serialPort1CDHolding;

(2)在串口事件PinChanged处理程序中读取

private void serialPort1_PinChanged(object sender, SystemIOPortsSerialPinChangedEventArgs e)

{

    // 如果上面说的三个输入信号中,任意一个输入发生变化

    // 都会引发PinChanged事件。因此,需要判断究竟是哪个

    // 引脚信号变化引发此事件

    bool b;

    switch (eEventType)

    {

        case SystemIOPortsSerialPinChangeCDChanged:

                    b = serialPort1CDHolding;

                    break;

        case SystemIOPortsSerialPinChangeCtsChanged:

                    b = serialPort1CtsHolding;

                    break;

        case SystemIOPortsSerialPinChangeDsrChanged:

                    b = serialPort1DsrHolding;

                    break;

        default:

                    break;

    }

}

函数_write_com和_delay_ms在中断和主程序中都有调用,会导致混合调用。

英文写的很明白了,会上网就不会查英文单词吗还是不知道什么是混合调用。

比如你主程序调用_delay_ms做100ms延时,正在做循环延时,结果一个中断进来,中断处理程序也调用了_delay_ms,结果就是_delay_ms原有的数据冲掉,从头再来,这次执行是对的。等中断处理完,再执行走到一半的_delay_ms程序,因为数据被冲掉了,天知道是什么结果。

用的是PIC的C语言吧?不好好看书,PIC的C语言最不灵光的(之一)就是程序的混合调用。资源不够啊!

其它单片机看编译器,有的也会报错,有的会很聪明(比如KEIL)的知道要保护原始数据,在中断里帮你保护了。

1、检查串口是否正确,比如COM1,COM2,COM3等;

2、检查波特率是否正确,比如9600,115200等;

3、检查数据位、停止位、校验位是否正确,比如8位数据位、1位停止位、无校验位等;

4、检查串口线是否接好;

5、检查串口是否被其他程序占用,可以使用串口调试助手查看;

6、检查串口驱动是否安装正确,可以在设备管理器中查看;

7、检查程序代码是否正确,可以使用串口调试助手查看。

试试下列程序,这时用中断发送的。

#include<reg51h>

#define uchar unsigned char

uchar txt[] = "hello";

uchar i = 0;

void main(void)

{

PCON = 0X00;

SCON = 0X50;

TMOD = 0X20;

TH1 = 0XFD;

TL1 = 0XFD;

TR1 = 1;

EA = 1;

ES = 1;

TI = 1;

while(1) {

if(i == 6) {

i = 0;

TI = 1;

}

}

}

void uart() interrupt 4

{

if(RI == 1) RI = 0;

if(TI == 1) {SBUF = txt[i++]; TI = 0;}

}

本程序,可以用串口助手接收。收到的是:hellohellohellohellohello

try

{

//出现错误的代码段

}

catch(Exception e)

{

eMessage就是错误的描述

}

恢复通信方法可以加个定时器定时检查IsOpen状态

以上就是关于C# SerialPort类中SerialPinChange和PinChange的使用方法全部的内容,包括:C# SerialPort类中SerialPinChange和PinChange的使用方法、PIC单片机与PC机的串口通信程序出现下面的错误,这是什么错误啊错误原因可能是什么请单片机高手指点、vb.net串口类程序,串口打不开等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9805414.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存