日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 本程序是模擬串口硬件機(jī)制寫(xiě)的,使用時(shí)可設(shè)一定時(shí)中斷,時(shí)間間隔為1/4波特率,每中斷一次調(diào)用一次接收函數(shù), 每中斷4次調(diào)用一次發(fā)送函數(shù),不過(guò).對(duì)單片機(jī)來(lái)說(shuō)時(shí)鐘并須要快.要知道9600的波特率的每個(gè)BIT的時(shí)間間隔是10

本程序是模擬串口硬件機(jī)制寫(xiě)的,使用時(shí)可設(shè)一定時(shí)中斷,時(shí)間間隔為1/4波特率,每中斷一次調(diào)用一次接收函數(shù), 每中斷4次調(diào)用一次發(fā)送函數(shù),不過(guò).對(duì)單片機(jī)來(lái)說(shuō)時(shí)鐘并須要快.要知道9600的波特率的每個(gè)BIT的時(shí)間間隔是104us.而單片機(jī)中斷一次壓棧出棧一次的時(shí)間是20us左右(標(biāo)準(zhǔn)的51核12M晶體)這樣處理時(shí)間就要考慮清楚了.呵呵.以下程序是放在定時(shí)器中斷程序函數(shù)內(nèi)的

//接收部分
sbit JieShou_D=   ;//定義接收端口
uint8 DingShiJiShu,JieShou_h;//定時(shí)計(jì)數(shù),接收緩沖器
uint16 JieShou_T;//接收臨時(shí)寄存器   
bit KaiShi,JieShou_b;//開(kāi)始接收標(biāo)準(zhǔn),接收完成標(biāo)志

 


void JieShou(void)  //接收函數(shù),每4次調(diào)用接收一位
{
   if((KaiShi==0) && (JieShou_D==0))  //串行開(kāi)始位到來(lái)
      {
          DingShiJiShu=0;     //開(kāi)始定時(shí)計(jì)數(shù)
          KaiShi=1;
          JieShou_T=0xffff;   //接收臨時(shí)寄存器置全1
      }
   else if((KaiShi==1) && (DingShiJiShu==1))  //第2次調(diào)用,串行數(shù)據(jù)采樣時(shí)間到來(lái)
      {
         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位得到串行數(shù)據(jù)
         JieShou_b=1;
      }   

   if(KaiShi)
      {
         DingShiJiShu++;          //只在開(kāi)始接收時(shí)定時(shí)計(jì)數(shù)+1
         DingShiJiShu &=0x03;     //每4次調(diào)用接收一位
      }
}


//發(fā)送部分
sbit FaSong_D=   ;//定義發(fā)送端口
uint16 FaSong_h;   //發(fā)送緩沖區(qū)
bit FaSong_b;    //發(fā)送完成標(biāo)志

void KaiShiFaSong(uint8 fs) //設(shè)置發(fā)送數(shù)據(jù),開(kāi)始發(fā)送
{
   FaSong_h = fs;    
   FaSong_h <<= 1;
   FaSong_h |= 0x0200;  //FaSong_h=0000_001x_xxxx_xxx_0
   FaSong_b=0;  //發(fā)送標(biāo)志=0 表示正在發(fā)送中
}

void FaSong(void) //發(fā)送函數(shù),每調(diào)用一次發(fā)一位
{
  if(FaSong_h)  //發(fā)送未完成
   {
       if(FaSong_h & 0x0001)
              FaSong_D=1;
       else   FaSong_D=0;

       FaSong_h >>= 1;
    }
   else
     FaSong_b =1;  //發(fā)送完成標(biāo)志=1 表示發(fā)送完成
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉