首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 电子制作
单片机与计算机串行通信的心得体会
来源:本站整理  作者:佚名  2010-08-29 08:01:16



    三、单片机的串行通信实验
    下面给出笔者实验时编写的单片机串行通信源程序:
    org 00h
    jmp main
    org 23h ;串行中断入口地址
    jmp com-int ;串行中断服务程序
    org 30h
    main :mov sp , # 30h ;设置堆栈
    lcall comm ;串口初始化
    jmp $ ;原地等待
    comm :mov tmod , # 20h ; T1 方式2
    mov tl1 , # 0f3h ;定时器计数初值,波特率2400
    mov th1 , # 0f3h ;定时器重装值
    setb ea ;开总中断
    setb es ;开串行中断
    mov pcon , # 00h ;波特率不倍增
    mov scon , # 50h
    ;置串口工作方式1 ,REN = 1 允许接收
    setb t r1 ;定时器
    ret ;返回
    com-int :clr es ;关串行中断
    clr ri ;清接收标志
    mov a ,sbuf ;从缓冲区取数据
    mov sbuf ,a
    jnb ti , $ ;等待发送完毕
    clr ti ;清发送标志
    setb es ;允许串行中断
    reti ;中断返回

    end

   该程序将MCU 的串口初始化为2400bps 的波特率,然后等待中断。中断服务程
序的功能是将所接收的数据发给计算机。笔者最初用C 语言编写的通信程序如下:

   # include″dos. h″
   # include″BIOS. h″
   main0
  {int i ;
  bioscom(0 ,0xa3 ,0) ;
  for (i = 0 ;i < 256 ;i + + )
  {bioscom(1 ,i ,0) ;
  printf (″%c″,i) ;
  while ( ! (bioscom(3 ,0 ,0) &0x0100) ) ;
  printf (″- %c″,bioscom(2 ,0 ,0) &0x00ff) ;
  }
  printf (″\ n″) ;
  getch0 ;
  }
  该程序无法实现与单片机的串口通信,用int86 函数直接调用14H 功能调用也不
行,所以笔者剖析了bioscom 函数的执行过程,发现了问题所在。

   笔者用右图所示的连接线将计算机的COM1和COM2连接起来,具体如左图所示,然后执行下列程序对bioscom函数的1号发送功能进行测试。

    # include″dos. h″
    # include″bios. h″
    # define COM 3
    main ()
   {outportb (0x3fc ,0) ;
    outportb (0x2fc ,0) ;
    bioscom(0 ,0xa3 ,0) ;
    bioscom(0 ,0xa3 ,1) ;
    outportb (0x2fc ,COM) ;
    printf (″%X″,bioscom(1 ,65 ,0) &0x8000) ;
    printf (″\ n″) ;
    getch () ;
    }

   
  

上一页  [1] [2] [3] [4]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:19,953.13000 毫秒