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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6001|回復: 3
打印 上一主題 下一主題
收起左側

[求助]求教51單片機問題,高人指點!

[復制鏈接]
跳轉到指定樓層
樓主
ID:17874 發表于 2009-10-7 01:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 電路的設想很簡單,就是用51控制ADC0809采集數據,再將數據通過串口傳到電腦里。

附件是設計的電路圖,從網上載的,沒有串口那一塊電路(因為串口那一路比較簡單):



然后是根據電路圖寫的程序:
#include"regx52.h"
 
#define uchar unsigned char

sbit ST=P1^1;
sbit EOC=P1^0;
sbit OE=P1^2;
sbit CLK=P1^3;
sbit ADDCS=P1^4;
 
uchar AD_DATA/*,CHECKSEND,CHECKBACK*/;                  //保存IN0和IN1經AD轉換后的數據
//uchar sendflag;                 //發送許可

xdata uchar sendstr;
 
/**********延時函數************/
void delay(uchar i)
{
 uchar j;
 while(i--)
 {
  for(j=125;j>0;j--)
  ;
 }
}
 
/*********系統初始化***********/
                       
void init()
{
  EA=1;                     //開總中斷
 
  TMOD=0x22;                //設定T0、T1定時器工作方式    
 
  TH0=0xff;                 //利用T0中斷產生CLK信號
  TL0=0xff;
  TR0=1;  
  ET0=1;                    //開啟T0中斷
 
  ST=0;
  OE=0;
 
  TH1=0xfa;                    //利用T1產生串口中斷  
  TL1=0xfa;
  TR1=1;                    
  ET1=1;                    //開啟T1中斷

  SCON=0x50;                //串行口工作在方式1
  PCON=0x40;                //bps增倍

  ES=0;                     //禁止串行中斷
  TI=0;                        //串行中斷發送禁用
  RI=0;                     //串行中斷接收禁用
//  sendflag=1;                //初始允許發送
}

/*****************通信函數************/
void send(uchar databuff)
{
  ES=1;  
  SBUF=databuff;            //發送數據
  while(!TI)
   ;                        //等待發送結束
  TI=0;
  ES=0;
}

/*void recieve(void)
{
  ES=1;
  CHECKBACK=SBUF;
  while(!RI)
   ;
  RI=0;
  ES=0;
} */

/***********AD轉換函數**********/
void AD()
{
 ST=0;
 ADDCS=0;                  //選擇通道IN0
 delay(5);
 ST=1;                    //啟動AD轉換
 delay(5);
 ST=0;
 while(EOC==0)
   ;
 OE=1;
 AD_DATA=P2;
 OE=0;
}

/***********T0、T1中斷服務程序************/
void timer0(void) interrupt 1
{
  CLK=~CLK;
  AD();
}

void timer1(void) interrupt 2
{
//  recieve();
//  if(CHECKBACK^CHECKSEND==0)
//  {
//   sendflag=1;
//  }
    sendstr=AD_DATA;
    send(sendstr);                                                                                                                           
}


/*****************主函數**************/

void main()
{
 init();
 while(1)
 {
//   AD();
//   sendstr=AD_DATA;
//   if(sendflag){
//    sendflag=0;
//   send(sendstr);
//   }
/*   else
   {
    sendflag=0;
    send(CHECKSEND);
   }     */
 }
}
================================================
問題在于,上電后,ADC0809壓根不工作,所以c51傳給串口的都是一堆亂碼

不知道是什么原因,有人說是因為多出來的串口通信改變了單片機某些端口的電平,但是還是一直很疑惑,不知道該怎么改電路...

請各位高人指點!

謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:18221 發表于 2009-10-18 16:11 | 只看該作者

幫你頂一下

 

 

回復

使用道具 舉報

板凳
ID:18297 發表于 2009-10-20 11:04 | 只看該作者
建議先仿真再搭電路
回復

使用道具 舉報

地板
ID:18411 發表于 2009-10-23 09:49 | 只看該作者
你采用的操作方式是靜態方式,很麻煩,還要注意時序的問題,而且速度慢,建議采用總線方式,就是獻給AD芯片用XBYTE[]定義一個地址XBYTE[。。。] = 。。。啟動轉換,書上這種例子很多的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91社区视频| 国产精品欧美一区二区三区不卡 | 国产精品美女久久久久久不卡 | 欧美日韩在线视频一区二区 | 国产视频二区 | 色在线看| 91pao对白在线播放 | 亚洲一区中文 | 亚洲成人精品 | 亚洲欧美aⅴ | 欧美jizzhd精品欧美巨大免费 | 黄色在线| 亚洲一区欧美一区 | 欧美精品一区二区在线观看 | 国产精品99久久久久久久久 | 91亚洲精品国偷拍自产在线观看 | 国产在线拍偷自揄拍视频 | 免费在线观看成年人视频 | 一区二区小视频 | 欧美精品一区二区免费 | 亚洲一区二区av | 99视频网| 国产欧美日韩一区二区三区 | 欧美中文| 国产精品永久久久久 | 中文字幕一区二区三区在线视频 | 黄色毛片免费看 | 久久综合一区二区 | 欧美日韩亚 | 国产黄色一级电影 | 美日韩精品 | 国产91精品久久久久久久网曝门 | 日韩精品二区 | 中文字幕人成人 | 一片毛片 | 国产一区二区自拍 | 国产精品不卡 | h视频在线看 | 91欧美激情一区二区三区成人 | 天天草av| 91精品国产日韩91久久久久久 |