久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機IO口模擬rs232串口通訊C51程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2013年06月02日   【字體:

此程序已經應用在本人的一個項目中非常穩定,編寫過程中參考了51hei網站里面的 http://www.zg4o1577.cn/mcu/1541.html  這篇文章.部分子程序節選于此.
#include "reg52.h"
#include "intrins.h" 
#include "math.h"    
#include "stdio.h"
sbit BT_SND =P1^5;
sbit BT_REC =P1^6;
sbit LED =P1^7;
bit  LED_flage=1;
//單片機IO 口模擬232串口通訊程序
//使用兩種方式的C程序 占用定時器0
#define MODE_QUICK
#define F_TM F0
#define TIMER0_ENABLE  TL0=TH0; TR0=1;
#define TIMER0_DISABLE TR0=0;
sbit ACC0=   ACC^0;
sbit ACC1=   ACC^1;
sbit ACC2=   ACC^2;
sbit ACC3=   ACC^3;
sbit ACC4=   ACC^4;
sbit ACC5=   ACC^5;
sbit ACC6=   ACC^6;
sbit ACC7=   ACC^7;

void IntTimer0() interrupt 1
{
  F_TM=1;
}
//發送一個字符
void PSendChar(unsigned char inch)
{
 #ifdef MODE_QUICK
    ACC=inch;
    F_TM=0;
    BT_SND=0; //start bit
    TIMER0_ENABLE; //啟動
    while(!F_TM);
    BT_SND=ACC0; //先送出低位
    F_TM=0;
    while(!F_TM);
    BT_SND=ACC1;
    F_TM=0;
    while(!F_TM);
    BT_SND=ACC2;
    F_TM=0;
    while(!F_TM);
    BT_SND=ACC3;
    F_TM=0;
    while(!F_TM);
    BT_SND=ACC4;
    F_TM=0;
    while(!F_TM);
    BT_SND=ACC5;
    F_TM=0;
    while(!F_TM);
    BT_SND=ACC6;
    F_TM=0;
    while(!F_TM);
    BT_SND=ACC7;
    F_TM=0;
    while(!F_TM);
    BT_SND=1;
    F_TM=0;
    while(!F_TM);
    TIMER0_DISABLE; //停止timer
    #else
    unsigned char ii;
     ii=0;
     F_TM=0;
     BT_SND=0; //start bit
     TIMER0_ENABLE; //啟動
     while(!F_TM);
     while(ii<8)
 {
   if(inch&1)
  {
   BT_SND=1;
  }
  else
  {
   BT_SND=0;
  }
   F_TM=0;
 while(!F_TM);
   ii++;
  inch>>=1;
    }
  BT_SND=1;
  F_TM=0;
  while(!F_TM);
    #endif
    TIMER0_DISABLE; //停止timer
 }
//接收一個字符
unsigned char PGetChar()
{
 #ifdef MODE_QUICK
 TIMER0_ENABLE;
 F_TM=0;
 while(!F_TM); //等過起始位
 ACC0=BT_REC;
 TL0=TH0;
 F_TM=0;
 while(!F_TM);
 ACC1=BT_REC;
 F_TM=0;
 while(!F_TM);
 ACC2=BT_REC;
 F_TM=0;
 while(!F_TM);
 ACC3=BT_REC;
 F_TM=0;
 while(!F_TM);
 ACC4=BT_REC;
 F_TM=0;
 while(!F_TM);
 ACC5=BT_REC; 
 F_TM=0;
 while(!F_TM);
 ACC6=BT_REC; 
 F_TM=0;
 while(!F_TM);
 ACC7=BT_REC;
 F_TM=0;
 while(!F_TM)
    {
  if(BT_REC)
  {
    break;
  }
    }
 TIMER0_DISABLE; //停止timer
 return ACC;
 #else
 unsigned char rch,ii;
 TIMER0_ENABLE;
 F_TM=0;
 ii=0;
 rch=0;
 while(!F_TM); //等過起始位
 while(ii<8)
    {
     rch>>=1;
  if(BT_REC)
  {
  rch|=0x80;
  }     
  ii++;
  F_TM=0;
  while(!F_TM); 
    }
 F_TM=0;
  while(!F_TM)
    {
  if(BT_REC)
  {
     break;
  }
    }
 TIMER0_DISABLE; //停止timer
 return rch;
 #endif
}
//檢查是不是有起始位
bit StartBitOn()
{
  return (BT_REC==0);
}
//定時器1初始化
void Time1_Init(void)
{
   TMOD=0x22; //定時器1為工作模式2(8位自動重裝),0為模式2(8位自動重裝)
   PCON=00;
   TR0=0; //在發送或接收才開始使用
   TF0=0;
   TH0=(256-96); //9600bps 就是 1000000/9600=104.167微秒 執行的timer//104.167*11.0592/12= 96
   TL0=TH0;
   ET0=1;
   EA=1;
}
//發送字符串
void Send_Char(char *byte)
{
   int i=0;
   for(i=0;*(byte+i)!='\0';i++)
   {
      PSendChar(*(byte+i));
   }
}
//void delay(int x)
//{
// int a,b;
// for(a=x;a>0;a--)
//  for(b=10;b>0;b--);
//}
//void main()
//{
//   unsigned char gch;
//   Time1_Init();
//   LED=0;
//  // Send_Char("S00.0C00.0%E00.0C00.0%L00000lx");
//   while(1)
//  {  
//     
//   PSendChar('1');
//   delay(1000);
////      if(StartBitOn())
////   {
////     gch=PGetChar();
////     if(gch=='1')
////  {
////    LED=LED_flage; 
////    delay(1000);
////    LED_flage=~LED_flage;
////  }
////  
////   } 
//   
//  }   
//
//} 

 

關閉窗口

相關文章

主站蜘蛛池模板: 免费视频成人国产精品网站 | 国产精品久久久久久久久久久免费看 | 欧美黄色一区 | 嫩草黄色影院 | 色综合久久久 | 亚洲欧美日韩精品久久亚洲区 | 九九综合 | 国产999精品久久久影片官网 | 777zyz色资源站在线观看 | 亚洲国产精品一区二区久久 | 久草视 | 国产精品久久片 | 日韩在线中文 | 婷婷丁香在线视频 | a级免费黄色片 | 在线免费av电影 | 亚洲成人av | 精品视频在线免费观看 | 国产视频精品在线观看 | 亚洲成人三区 | 久久www免费人成看片高清 | 久热国产在线 | caoporn国产精品免费公开 | 久色| 久久国产精品无码网站 | 精品福利一区二区三区 | 成人性视频在线播放 | 免费看91| 国产精品成人在线播放 | 伊人网99| 国产一区日韩在线 | 黄色网址在线免费播放 | 日本一区二区三区在线观看 | 日韩国产免费 | 青青久草 | 中国美女av | 久久久女女女女999久久 | 免费观看黄 | 国产福利在线视频 | 欧美日韩在线免费 | 国内精品久久久久久 |