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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

參考程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:814176 發表于 2023-8-26 21:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/********************************************************************************************************
*文件名:     TM7707_OneChannel
*單片機型號: STC12C5608AD
*開發環境:   Keil uVision4
*晶震頻率:   單片機11.0592MHZ、TM7707外部晶振2.4576MHZ
*TM7707基準: 2.5V
*功能說明:   1.此驅動程序只采集通道1或者通道2的AD值,單(雙)極性、1倍增益、10HZ、在單極性時AIN1-和AIN2-均接GND
               2.從TM7707讀取采集到的24bit AD數據后用串口(STC-ISP串口調試助手)在電腦上顯示6個16進制數
*修改記錄:   1.修改為先寫通道再判斷DRDY拉低
*******************************************************************************************************/

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit SCLK_TM7707=P2^1; //定義SCLK時鐘信號端口
sbit DIN_TM7707=P2^0;  //定義DIN數據輸入端口
sbit DOUT_TM7707=P1^7; //定義DOUT數據輸出端口
sbit DRDY_TM7707=P1^6; //定義DRDY可讀AD端口
sbit CS_TM7707=P1^5;   //定義片選端口或從硬件上將片選端口直接接到GND后無需控制


void delay_us()                 //短延時函數,晶振11.0592MHZ,延時約1us
{
  ; ; ;
}

void delay_nms(uchar n)                  //延時約nms
{
  uchar i;
  while(n--)
    for(i=0;i<125;i++);
}

void Write_byte_TM7707(uchar dat1)   //將數據dat1寫入TM7707
{
uchar i;
CS_TM7707=0;
SCLK_TM7707=1;
for(i=0;i<8;i++)
{
   SCLK_TM7707=0;
   delay_us();
   if(dat1&0x80) DIN_TM7707=1;         //先寫高位
     else        DIN_TM7707=0;
   delay_us();
   SCLK_TM7707=1;
   delay_us();
   dat1<<=1;
}
  SCLK_TM7707=1;
  DIN_TM7707=1;
  CS_TM7707=1;
}

unsigned char Read_byte_TM7707( )           //從TM7707寄存器讀數據
{
uchar i,dat2=0;
CS_TM7707=0;
SCLK_TM7707=1;
for(i=0;i<8;i++)
{
SCLK_TM7707=0;
delay_us();
dat2=(dat2<<1)|DOUT_TM7707;        // 高位先讀
delay_us();
SCLK_TM7707=1;
delay_us();
}
SCLK_TM7707=1;
CS_TM7707=1;
return dat2;
}

/*********************************************************************************************
函數名:UART串口初始化函數
調  用:UART_init();
參  數:無
返回值:無
結  果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(占用)
備  注:振蕩晶體為11.0592MHz,PC串口端設置 [ 9600,8,無,1,無 ]
/**********************************************************************************************/
void UART_init(void)         //串口初始化
{
SCON=0x50;//SCON:串口工作方式1 8-bit UART為0 1,SM2=0,允許串行接收控制位REN=1,TB8=0,RB8=0,TI=0,RI=0;
TMOD=0x20;//SMOD:定時器1,GATE=0,作定時器C/T=0,方式2 8位自動重裝載定時器則M1 M0=1 0,定時器0中GATE C/T M1 M0均置0。
PCON=0x80;//設置SMOD=1,串行工作的波特率加倍
TH1=0xfa; //Baud rate:9600Hz
TL1=0xfa;

EA=1;//開啟總中斷
ES=1;//開串口中斷
TR1=1;//啟動定時器1運行
}


/*********************************************************************************************
函數名:UART串口發送函數
調  用:UART_T (?);
參  數:需要UART串口發送的數據(8位/1字節)
返回值:無
結  果:將參數中的數據發送給UART串口,確認發送完成后退出
備  注:
/**********************************************************************************************/
void UART_T(unsigned char UART_data)        //定義串口發送數據變量
{
  SBUF=UART_data;  //將接收的數據發送回去
  while(!TI);           //檢查發送中斷標志位
  TI=0;                           //令發送中斷標志位為0(軟件置零)
}

/*********************************************************************************************
函數名:TM7707初始化
調  用:無
參  數:無
返回值:無
結  果:無
備  注:無
/**********************************************************************************************/
void TM7707_init()
{
uchar i;
DRDY_TM7707=1;
DOUT_TM7707=1;
DIN_TM7707=1;
SCLK_TM7707=1;

for(i=0;i<40;i++)         //將DIN_TM7707置高40個時鐘周期使之穩定
{
   SCLK_TM7707=0;
   delay_us();
   SCLK_TM7707=1;
   delay_us();
}
  delay_us();
  delay_us();
  delay_us();
}

void main()
{
  uchar temp1,temp2,temp3;
  UART_init();
  TM7707_init();
  delay_nms(50);


  /*以下為增益在1~4倍下設置的更新速率*/
/* //5HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器
  Write_byte_TM7707(0x0f);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0x00); */       

  //10HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器;DRDY=0,設置寄存器RS2 RS1 RS0=0 1 0,下一步寫R/W=0,STBY=0,通道1時CH1 CH0=0 0;
  Write_byte_TM7707(0x07);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0x80);         

  /*//20HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器
  Write_byte_TM7707(0x03);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0xc0);       

  //30HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器
  Write_byte_TM7707(0x02);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0x80);

  //50HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器
  Write_byte_TM7707(0x01);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0x80);       

  //60HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器
  Write_byte_TM7707(0x01);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0x40);

  //100HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器
  Write_byte_TM7707(0x00);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0xc0);          

  //250HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器                  
  Write_byte_TM7707(0x00);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0x4c);       

  //500HZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器
  Write_byte_TM7707(0x00);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0x26);

  //1KHZ
  Write_byte_TM7707(0x20);   //寫通訊寄存器的下一步寫濾波器高寄存器
  Write_byte_TM7707(0x00);
  Write_byte_TM7707(0x50);         //寫通訊寄存器的下一步寫濾波器低寄存器
  Write_byte_TM7707(0x13);*/         


  Write_byte_TM7707(0x10);          //通道1(0 0 0 1 0 0 0 0),寫通訊器的下一步寫設置寄存器;DRDY=0,設置寄存器RS2 RS1 RS0=0 0 1,下一步寫R/W=0,STBY=0,通道1時CH1 CH0=0 0;
  //Write_byte_TM7707(0x11);  //通道2(0 0 0 1 0 0 0 1),寫通訊器的下一步寫設置寄存器;DRDY=0,設置寄存器RS2 RS1 RS0=0 0 1,下一步寫R/W=0,STBY=0,通道2時CH1 CH0=0 1;

  Write_byte_TM7707(0x44);  //寫設置寄存器(0 1 0 0 0 1 0 0),自校準模式0 1,1倍增益0 0 0,單極性設置B/U=1,緩沖器短路Buf=0,FSYNC=0;
// Write_byte_TM7707(0x40);    //寫設置寄存器(0 1 0 0 0 0 0 0),自校準模式0 1,1倍增益0 0 0,雙極性設置B/U=0,緩沖器短路Buf=0,FSYNC=0; */


while(1)
{

   Write_byte_TM7707(0x38);  //讀通道1
  //Write_byte_TM7707(0x39);  //讀通道2
  while(DRDY_TM7707==1);  //等待DRDY為低電平,表示可以從數據寄存器獲取數據
  delay_nms(1);

  temp1=Read_byte_TM7707();                //讀高8位
  temp2=Read_byte_TM7707();                //讀中間8位
  temp3=Read_byte_TM7707();          //讀低8位


  if(temp1/16>9)                                   //轉化為十六進制讀數
     UART_T(temp1/16+55);
  else
         UART_T(temp1/16+48);

  if(temp1%16>9)
         UART_T(temp1%16+55);
  else
         UART_T(temp1%16+48);


  if(temp2/16>9)                                   //轉化為十六進制讀數
     UART_T(temp2/16+55);
  else
         UART_T(temp2/16+48);

  if(temp2%16>9)
         UART_T(temp2%16+55);
  else
         UART_T(temp2%16+48);

  if(temp3/16>9)                                   //轉化為十六進制讀數
     UART_T(temp3/16+55);
  else
         UART_T(temp3/16+48);

  if(temp3%16>9)
         UART_T(temp3%16+55);
  else
         UART_T(temp3%16+48);


        UART_T(' ');  //空格
        UART_T(' ');
}
}

void UartIrqProc(void) interrupt 4          //使能串口中斷后需有中斷處理函數
{

}

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久 | 亚洲精品免费观看 | 久久国产欧美日韩精品 | 欧美1区| 人人人干 | 免费一区 | 欧美午夜影院 | 一区二区三区中文字幕 | v片网站 | 毛片免费在线观看 | 神马九九| 成人午夜| 国产精品亚洲第一 | 亚洲图片视频一区 | 亚洲美女网站 | 日韩一级免费 | 四虎国产 | 东京久久| 黄色成人免费看 | 亚洲成人免费电影 | av一区在线观看 | 一区二区三区久久久 | 一区二区三区四区在线视频 | 超碰在线人 | 久草中文在线 | 亚洲精品国产电影 | 一级黄色生活视频 | 国产网站在线播放 | 久久综合久久久 | 日韩欧美综合在线视频 | 国产日韩欧美二区 | 国产激情视频网 | 久久久久久99 | 最新超碰 | 嫩呦国产一区二区三区av | 国产区在线视频 | 五月精品视频 | 夫妻午夜影院 | 综合色影院 | 久久久免费在线观看 | 国产精品美女www爽爽爽视频 |