单片机
返回首页

模拟串口硬件机制写的程序

2013-01-18 来源:21IC

    本程序是模拟串口硬件机制写的,使用时可设一定时中断,时间间隔为1/4波特率,每中断一次调用一次接收函数, 每中断4次调用一次发送函数,不过.对单片机来说时钟并须要快.要知道9600的波特率的每个BIT的时间间隔是104us.而单片机中断一次压栈出栈一次的时间是20us左右(标准的51核12M晶体)这样处理时间就要考虑清楚了.呵呵.以下程序是放在定时器中断程序函数内的

 
//接收部分
sbit JieShou_D=  ;//定义接收端口
uint8 DingShiJiShu,JieShou_h;//定时计数,接收缓冲器
uint16 JieShou_T;//接收临时寄存器   
bit KaiShi,JieShou_b;//开始接收标准,接收完成标志

   
 void JieShou(void)  //接收函数,每4次调用接收一位
{
  if((KaiShi==0) && (JieShou_D==0))  //串行开始位到来
      {
          DingShiJiShu=0;    //开始定时计数
          KaiShi=1;
          JieShou_T=0xffff;  //接收临时寄存器置全1
      }
  else if((KaiShi==1) && (DingShiJiShu==1))  //第2次调用,串行数据采样时间到来
      {
        JieShou_T >>= 1;
        if(JieShou_D) JieShou_T |=0x8000;
      }
  else if(JieShou_T & 0x807f ==0x803f)  //接收完成 JieShou_T=1xxx_xxxx_x011_1111
      {
        KaiShi=0;
        DingShiJiShu=0;
        JieShou_h = JieShou_T >> 7; //右移7位得到串行数据
        JieShou_b=1;
      }  

      if(KaiShi)
      {
        DingShiJiShu++;          //只在开始接收时定时计数+1
        DingShiJiShu &=0x03;    //每4次调用接收一位
      }
}

   
//发送部分
sbit FaSong_D=  ;//定义发送端口
uint16 FaSong_h;  //发送缓冲区
bit FaSong_b;    //发送完成标志

    void KaiShiFaSong(uint8 fs) //设置发送数据,开始发送
{
  FaSong_h = fs;   
  FaSong_h <<= 1;
  FaSong_h |= 0x0200;  //FaSong_h=0000_001x_xxxx_xxx_0
  FaSong_b=0;  //发送标志=0 表示正在发送中
}

    void FaSong(void) //发送函数,每调用一次发一位
{
  if(FaSong_h)  //发送未完成
  {
      if(FaSong_h & 0x0001)
              FaSong_D=1;
      else  FaSong_D=0;

          FaSong_h >>= 1;
    }
  else
    FaSong_b =1;  //发送完成标志=1 表示发送完成
}

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 永不缺相启动运行的电动机控制电路

  • CCFL的工作原理及电子驱动电路解析

  • MT3608构成3.7V转12V的升压电路图

  • 运算放大器IC741的基本工作原理及在电路中的实现方式

  • 基于M66T旋律发​​生器的电路图解析

  • 基于TDA1554的立体声放大器电路

    相关电子头条文章