欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    dos下串口通信编程.doc

    • 资源ID:70344049       资源大小:60KB        全文页数:5页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    dos下串口通信编程.doc

    中断向量表INT (Hex) IRQ Common Uses08 0 System Timer09 1 Keyboard0A 2 Redirected0B 3 Serial Comms. COM2/COM40C 4 Serial Comms. COM1/COM3 0D 5Reserved/Sound Card 0E 6 Floppy Disk Controller 0F7 Parallel Comms. 70 8 Real Time Clock71 9 Reserved72 10 Reserved73 11 Reserved74 12 PS/2 Mouse75 13Maths Co-Processor76 14 Hard Disk Drive77 15 Reserved 通过编写COM对应的中断服务程序,我们也可以操作串口,涉及到的相关函数有:(1)设置中断向量表/*dos.h*/void _Cdecl setvect (int interruptno, void interrupt (*isr) ();例如,COM3对应的中断号是4,那么对应中断向量表中的地址是0x0C,设置0x0C对应中断程序的函数为:setvect(0x0C, PORT1INT);其中的中断服务程序PORT1INT为:void interrupt PORT1INT()int c;doc = inportb(PORT1 + 5);if (c &1)bufferbufferin = inportb(PORT1);bufferin+;if (bufferin = 1024)bufferin = 0;while (c &1);outportb(0x20, 0x20);上述中断服务程序检查是否有字符可接收,其后将其通过inportb(PORT1)语句将其从UART中读出并放入输入buffer。持续的检查UART,以便能在一次中断里读取所有可获得的数据。最后的"outportb(0x20,0x20);"语句告诉可编程中断控制器(Programmable Interrupt Controller,PIC)中断已经完成。(2)读取中断向量表/*dos.h*/void interrupt (* _Cdecl getvect(int interruptno) ();例如:oldport1isr = getvect(INTVECT); 其中的oldport1isr定义为:void interrupt (*oldport1isr)();我们融合setvect()函数、中断服务程序和getvect()函数,给出一个由Craig Peacock编写的完备例程:/* Name : Sample Comm's Program - 1024 Byte Buffer - buff1024.c */* Written By : Craig Peacock <cpeacock.au> */#include <dos.h>#include <stdio.h>#include <conio.h>#define PORT1 0x3F8 /* Port Address Goes Here */#define INTVECT 0x0C /* Com Port's IRQ here (Must also change PIC setting) */* Defines Serial Ports Base Address */* COM1 0x3F8 */* COM2 0x2F8 */* COM3 0x3E8 */* COM4 0x2E8 */int bufferin = 0;int bufferout = 0;char ch;char buffer1025;void interrupt(*oldport1isr)();void interrupt PORT1INT() /* Interrupt Service Routine (ISR) for PORT1 */int c;doc = inportb(PORT1 + 5);if (c &1)bufferbufferin = inportb(PORT1);bufferin+;if (bufferin = 1024)bufferin = 0;while (c &1);outportb(0x20, 0x20);void main(void)int c;outportb(PORT1 + 1, 0); /* Turn off interrupts - Port1 */oldport1isr = getvect(INTVECT); /* Save old Interrupt Vector of laterrecovery */setvect(INTVECT, PORT1INT); /* Set Interrupt Vector Entry */* COM1 - 0x0C */* COM2 - 0x0B */* COM3 - 0x0C */* COM4 - 0x0B */* PORT 1 - Communication Settings */outportb(PORT1 + 3, 0x80); /* SET DLAB ON */outportb(PORT1 + 0, 0x0C); /* Set Baud rate - Divisor Latch Low Byte */* Default 0x03 = 38,400 BPS */* 0x01 = 115,200 BPS */* 0x02 = 57,600 BPS */* 0x06 = 19,200 BPS */* 0x0C = 9,600 BPS */* 0x18 = 4,800 BPS */* 0x30 = 2,400 BPS */outportb(PORT1 + 1, 0x00); /* Set Baud rate - Divisor Latch High Byte */outportb(PORT1 + 3, 0x03); /* 8 Bits, No Parity, 1 Stop Bit */outportb(PORT1 + 2, 0xC7); /* FIFO Control Register */outportb(PORT1 + 4, 0x0B); /* Turn on DTR, RTS, and OUT2 */outportb(0x21, (inportb(0x21) &0xEF); /* Set Programmable Interrupt Controller */* COM1 (IRQ4) - 0xEF */* COM2 (IRQ3) - 0xF7 */* COM3 (IRQ4) - 0xEF */* COM4 (IRQ3) - 0xF7 */outportb(PORT1 + 1, 0x01); /* Interrupt when data received */printf("nSample Comm's Program. Press ESC to quit n");doif (bufferin != bufferout)ch = bufferbufferout;bufferout+;if (bufferout = 1024)bufferout = 0;printf("%c", ch);if (kbhit()c = getch();outportb(PORT1, c);while (c != 27);outportb(PORT1 + 1, 0);/* Turn off interrupts - Port1 */outportb(0x21, (inportb(0x21) | 0x10); /* MASK IRQ using PIC */* COM1 (IRQ4) - 0x10 */* COM2 (IRQ3) - 0x08 */* COM3 (IRQ4) - 0x10 */* COM4 (IRQ3) - 0x08 */setvect(INTVECT, oldport1isr); /* Restore old interrupt vector */2007-1-11 20:43:00 回复:dos下的串口编程(硬件中断方式) 今题网友40245(游客)发表评论于2009-8-18 18:54:00你这个程序我在windows的命令行能收发数据,可到了纯dos为什么收发不了?

    注意事项

    本文(dos下串口通信编程.doc)为本站会员(asd****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开