久久久久久久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国产精品日本 | 欧美精品乱码久久久久久按摩 | 91精品中文字幕一区二区三区 | 中文字幕日韩欧美一区二区三区 | 亚洲免费一区二区 | 在线观看免费高清av | 夜久久| 国产精品99久久久久久宅男 | 日韩高清国产一区在线 | 日韩免费一区二区 | 日本一区二区三区免费观看 | 久久9999久久 | 91精品国产91久久久久久吃药 | 九九九色| 综合久久av | av免费网址| 成人在线电影网站 | 久久99精品国产自在现线小黄鸭 | 欧美亚洲日本 | 亚洲精品电影网在线观看 | 国产成人精品一区二区三区四区 | aaa大片免费观看 | 羞羞涩涩在线观看 | 久久成人人人人精品欧 | 中文二区| 无人区国产成人久久三区 | 久久久精品影院 | 亚洲二区视频 | 日韩在线综合 | 国产高清一区二区 | 国产一区二区三区在线 | 免费观看成人av | 日韩av最新网址 | 第四色狠狠 | 日韩一区二区三区在线视频 |