编程c语言中串行通信帧头语句,C语言在测量和控制中的应用资源第6章-计算机串行通信...

《C语言在测量和控制中的应用资源第6章-计算机串行通信》由会员分享,可在线阅读,更多相关《C语言在测量和控制中的应用资源第6章-计算机串行通信(35页珍藏版)》请在装配图网上搜索。

1、第6章 计算机串行通信,哈尔滨工业大学航天学院,C语言在测量与控制中的应用系列课件,6.1 概述,并行通讯: 数据各位同时发送, 数据线条数多,距离近,串行通讯: 数据各位依次发送, 数据线条数少,距离远。,D0 D1 D2 D3 D4 D5 D6 D7,D0 D1 D2 D3 D4 D5 D6 D7,1 1 0 0 1 0 0 1,发送,接收,1 0 0 1 0 0 1 1,同步与异步,同步通讯:收发双方必须建立准确的定时信号,每个字符不加任何附加位连续发送。 优点:传输效率高 缺点:实现复杂。,异步通讯:发送一组数据称为一帧,包括 1位起始位,58位数据位,12位校验位,12位终止位。帧与。

2、帧之间的间隔长度可以不确定。 优点:收发双方不需要严格同步,每一帧发送时都要重新启动,定时的误差不会积累。 缺点:每一帧都要有起始、终止、校验信号,传输效率低。,单工与双工,单工:一方只能发送,另一方只能接收。 双工:双方都可以发送和接收。 半双工:某一时刻,只能一方发送另一方接收。 全双工:双方都能同时发送和接收。,硬件握手和软件握手(联络) 硬件握手:利用专用联络线电平的高低,通知对方是否准备好。 软件握手:用软件发出规定的联络信号。,6.3 Intel8250可编程异步串行接口芯片,接收移位寄存器,接收数据寄存器,波特率时钟发生器,波特率因子MSB 波特率因子LSB,发送保持寄存器,发送。

3、移位寄存器,线路状态寄存器 线路控制寄存器,中断允许寄存器 中断标识寄存器,中断控制逻 辑,MODEM控制寄存器 MODEM状态寄存器,MODEM控制逻辑,数据I/O缓冲器,内部总线,SIN,SOUT,D7D0,COM1与COM2的I/O端口地址,线路控制寄存器(8位),D7=0:正常值;D7= 1:寻址波特率因子寄存器,D6=0:正常值;D6 =1:设置间断,表明发送终止,D5D4D3 0 0 0无校验位 0 0 1奇校验 0 1 1偶校验 1 0 1恒1 1 1 1 恒0,D2=0:1位停止位 D2=1:2位停止位,D1D0 0 0字符长度为5位 0 1字符长度为6位 1 0字符长度为7位。

4、 1 1字符长度为8位,发送保持寄存器(只写),写入要发送的字符(8位)。,发送移位寄存器 将并行数据变成串行数据送出。,接收移位寄存器 将收到的串行数据变成并行数据。,接收数据寄存器(只读) 存放接收的字符,可供CPU读。,波特率因子寄存器,波特率(每秒传送位数) =1.8432MHz(波特率因子*16),波特率MSBLSB 11004H17H 15003H00H 30001H80H 60000HC0H 120000H60H 180000H40H 240000H30H 360000H20H 480000H18H 720000H10H 960000H0CH,中断允许寄存器(只写),中断标识寄存。

5、器(只读) 中断发生时指示产生中断的中断源,线路状态寄存器(读/写),D0:接收数据就绪。 D1:超越错。 D2:奇偶校验错。 D3:帧格式错。 D4:间断错。 D5:发送保持寄存器空。 D6:发送移位寄存器空。 D7:恒为0。,接收数据寄存器收到了一个完整的字符, CPU可以读这个数据。,可以接收下一个要发送的字符,CPU可以写数据。,6.4 Turbo C的串口通信函数,int bioscom(int cmd ,char byte , int port );,cmd= 0:设置通讯参数 byte 的值 1:把字符按字节送到通讯线上 2:从通讯线上接收一个字符 3:返回通讯端口的状态,por。

6、t = 0 : COM1; port= 1 : COM2,byte值,cmd=1 , byte= 欲发送的字节 cmd=2,3 , byte=0 cmd=0 ,byte=初始化命令字 D7 D6 D5 D4 D3 D2 D1 D0,byte值是下列各位的组合,0 x027个数据位 0 x038个数据位,0 x00 110波特率 0 x20 150波特率 0 x40 300波特率 0 x60 600波特率 0 x801200波特率 0 xa02400波特率 0 xc04800波特率 0 xe09600波特率,0 x001个停止位 0 x042个停止位,0 x00无校验 0 x08奇校验 0 x1。

7、8偶校验,若要求:8位数据位,1个停止位,奇校验,9600波特。 byte=0 x03|0 x00|0 x08|0 xe0 D7 D6 D5 D4 D3 D2 D1 D0,返回值,对于所有cmd值,返回值是16位的整数,高8位D15D8是状态位,低8位取决于cmd 值。,D15超时 D14发送移位寄存器空 D13发送保持寄存器空 D12间断错 D11帧格式错 D10奇偶校验错 D9超越错 D8接收数据就绪,当cmd=2,即接收字符,若无错误,返回值的低8位是输入字节。,PC机的串口,串口的引脚,串口线的一种典型连接方式,6.5 近距离无联络线简单三线通信,两台PC机三线通讯:将键盘输入字符发送。

8、到对方CRT上,三线聊天。,S1.C,#include #include main() int i; bioscom(0,0 x83,0); do i=inportb(0X3fd); if(i ,初始化串口1 1200波特,无校验,1位停止位,8个数据位,读线路状态寄存器, 判断是否有错,判断接收数据是否就绪,读接收数据寄存器,显示字符。,判断发送保持寄存器是否空,如果有键按下, 写发送保持寄存器输出字符。,kbhit()函数,int kbhit(void); kbhit() 函数检查当前按键是否有效,任何有效健码可用getch()或getche()读取。若按健有效,kbhit()返回一个非0。

9、整型值,否则返回0。 由头文件conio.h说明。,6.6 串口硬件中断方式通信,哈尔滨工业大学航天学院,C语言在测量与控制中的应用系列课件,PC机的串行接口,串口可以用硬件中断方式工作 串口1(COM1)中断申请线接主8259A的IR4, 中断类型号 0 x0c。 串口2(COM2)中断申请线接主8259A的IR3, 中断类型号 0 x0b。,8250内部的4级中断,异步串行接口芯片8250的内部有4级中断:3级0级,3级:接收出错中断。 2级:接收缓冲器满中断。 1级:发送保持器空中断。 0级:MODEME输入状态改变中断。,在芯片内部,中断的级别从3级到0级依次递降。,中断标识寄存器IE。

10、R,可指出有无待处理的中断发生,若有可指出是哪个中断,未决中断指示 0:无,1:有,3:接收错 1 1 2:接收缓冲器满 1 0 1:发送保持器空 0 1 0:MODEM状态变化 0 0,中断允许寄存器IIR,可以屏蔽8250内部的4种中断,0级 3级 1级 2级,相应位=1:允许中断 相应位=0:屏蔽中断,8250结构,中断信号输出控制,MODEM控制寄存器的D3和D2位控制用户通过编程来定义 的两个管脚 OUT2 和 OUT1。在PC系列微机中,OUT1没有使用,OUT2用来作为8250的中断请求信号INTRPT的输出控制。 MODEM控制寄存器的D3位控制硬件中断信号能否送到计算机总线。。

11、只有D3=1, 硬件中断信号才能通过计算机总线送到中断控制器主8259A的中断申请线IR4和IR3上。所以,如果采用中断方式进行通信时,必须将MODEM控制寄存器的D3位置1,而查询方式时则清0。,MODEM控制寄存器,数据终端准备好,请求发送,环路检测,中断请求输出控制,中断方式高速串口三线通讯,用中断的方式接收数据,只给出: 初始化函数 数据发送子程序 接收数据的中断服务子程序,初始化函数,void initiate_COM1(void) disable( ); setvect(0 x0c , receive_COM1); outportb(0 x3fb , 0 x80); outport。

12、b(0 x3f8 , 0 x01); outportb(0 x3f9 , 0 x00); outportb(0 x3fb , 0 x03); outportb(0 x3f9 , 0 x01); outportb(0 x3fc , inportb(0 x3fc)|0 x08); outportb(0 x21, inportb(0 x21) ,设串口1中断向量,置DLAB=1,寻址波特率因子寄存器,写波特率因子寄存器LSB的值为1,写波特率因子寄存器MSB的值为0,无校验,1位停止位,8位数据位,允许接收缓冲器满中断,禁止其它中断,置中断申请输出有效,8259A允许串口1中断,数据发送子程序,vo。

13、id send_COM1(unsigned char data) while(! inportb(0 x3fd) ,查询发送保持寄存器是否空,将数据写入发送保持寄存器,0 0 1 0 0 0 0 0,线路状态寄存器D5位为1,表示发送保持寄存器空,可以写入下一个要发送的字符。,中断方式数据接收子程序,void interrupt receive_COM1(void) receive_buffer i+ +=inportb(0 x3f8); if(i=MAX) i=0; outportb(0 x20,0 x20); ,读数据放入环形缓冲区,判断环形缓冲区是否已满,若满则从头再来,receive_buffer 为环形缓冲器数组,定义为全局变量,思考题,1.若使用串口2通讯,1200波特,偶校验,7位数据位,1位停止位。试分别用bioscom()函数和直接对8250寄存器编程的方法初始化程序。 2.解释下面语句的意义: bioscom(0,0 x82,1);,COM1与COM2的I/O端口地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值