便宜環境IAR for 51,單片機 TI CC2530,傳感器CC2530!!!
0.png (47.05 KB, 下載次數: 160)
下載附件
2017-6-25 16:30 上傳
單片機源程序如下:
- #include <ioCC2530.h>
- #include <stdio.h>
- #include "hal_mcu.h"
- #define uint16 unsigned int
- #define uint8 unsigned char
- #define STATUS_REG_W 0x06
- #define STATUS_REG_R 0x07
- #define MEASURE_TEMP 0x03
- #define MEASURE_HUMI 0x05
- #define RESET 0x1E
- #define noACK 0
- #define ACK 1
- #define SHT10_SCL_PIN P1_7 //SHT10時鐘
- #define SHT10_SDA_PIN P1_6 //SHT10數據線
- #define SHT10_DATA_R() P1DIR &= 0x7F
- #define SHT10_DAT_W() P1DIR |= 0x80
- #define SHT10_SCL_HIGH() (SHT10_SCL_PIN = 1)
- #define SHT10_SCL_LOW() (SHT10_SCL_PIN = 0)
- #define SHT10_SDA_HIGH() (SHT10_SDA_PIN = 1)
- #define SHT10_SDA_LOW() (SHT10_SDA_PIN = 0)
- unsigned char d1,d2,d3;
- /**************************************************************************************************
- * 函數名稱:initIO
- *
- * 功能描述:SHT10串行通信IO初始化
- *
- * 參 數:無
- *
- * 返 回 值:無
- **************************************************************************************************/
- void initIO(void)
- {
- P1DIR|= 0xc0;
- P1INP &= 0xbf;
- SHT10_SDA_HIGH();
- SHT10_SCL_LOW();
- }
- /**************************************************************************************************
- * 函數名稱:s_write_byte_to_sht10
- *
- * 功能描述:向SHT10寫一個字節
- *
- * 參 數:value -- 需寫入的字節值
- *
- * 返 回 值:error -- 操作是否成功
- **************************************************************************************************/
- char write_byte_to_sht10(unsigned char value)
- {
- uint8 i;
- uint8 error=1;
-
- SHT10_DAT_W();
- for (i=0x80;i>0;i/=2) //將一個字節的8位逐一輸出
- {
- if (i & value)
- {
- SHT10_SDA_HIGH();
- }
- else
- {
- SHT10_SDA_LOW();
- }
- SHT10_SCL_HIGH();
- halMcuWaitUs(5);
- SHT10_SCL_LOW();
- halMcuWaitUs(1);
- }
- SHT10_SDA_HIGH();
- SHT10_DATA_R();
- SHT10_SCL_HIGH();
- halMcuWaitUs(1);
- error = SHT10_SDA_PIN;
- halMcuWaitUs(3);
- SHT10_DAT_W();
- SHT10_SDA_HIGH();
- SHT10_SCL_LOW();
-
- return error;
- }
- /**************************************************************************************************
- * 函數名稱:s_receive_byte_from_sht10
- *
- * 功能描述:從SHT10讀取一個字節
- *
- * 參 數:ack -- 讀取數據后,向SHT10發送ACK
- *
- * 返 回 值:val -- 讀取的字節值
- **************************************************************************************************/
- char receive_byte_from_sht10(unsigned char ack)
- {
- uint8 i;
- uint8 val = 0;
- SHT10_DAT_W();
- SHT10_SDA_PIN= 1;
- SHT10_DATA_R();
-
- for (i=0x80;i>0;i/=2)
- {
- SHT10_SCL_HIGH();
- if (SHT10_SDA_PIN)
- val = (val | i);
- else
- val = (val | 0x00);
- SHT10_SCL_LOW();
- halMcuWaitUs(5);
- }
- SHT10_DAT_W();
- SHT10_SDA_PIN = !ack;
- SHT10_SCL_HIGH();
- halMcuWaitUs(5);
- SHT10_SCL_LOW();
- SHT10_SDA_HIGH();
-
- return val; //返回讀取的值
- }
- /**************************************************************************************************
- * 函數名稱:transstart
- *
- * 功能描述:啟動SHT10,開始與SHT10通信
- *
- * 參 數:無
- *
- * 返 回 值:無
- **************************************************************************************************/
- void transstart(void)
- {
- SHT10_DAT_W();
- SHT10_SDA_HIGH();
- SHT10_SCL_LOW();
- halMcuWaitUs(1);;
- SHT10_SCL_HIGH();
- halMcuWaitUs(2);
- SHT10_SDA_LOW();
- halMcuWaitUs(2);
- SHT10_SCL_LOW();
- halMcuWaitUs(5);
- SHT10_SCL_HIGH();
- halMcuWaitUs(2);
- SHT10_SDA_HIGH();
- halMcuWaitUs(2);
- SHT10_SCL_LOW();
- halMcuWaitUs(2);
- }
- /**************************************************************************************************
- * 函數名稱:s_connectionreset
- *
- * 功能描述:與SHT10通信復位
- *
- * 參 數:無
- *
- * 返 回 值:無
- **************************************************************************************************/
- void connectionreset(void)
- {
- SHT10_DAT_W();
- unsigned char i;
- SHT10_SDA_HIGH();
- SHT10_SCL_LOW();
- for(i=0;i<9;i++)
- {
- SHT10_SCL_HIGH();
- halMcuWaitUs(2);
- SHT10_SCL_LOW();
- halMcuWaitUs(2);
- }
- transstart();
- }
- /**************************************************************************************************
- * 函數名稱:measure
- *
- * 功能描述:發送命令、讀取SHT10溫度或濕度數據
- *
- * 參 數:*p_checksum -- 校驗和
- * mode -- 讀取數據類型(3為溫度,5為濕度)
- *
- * 返 回 值:er -- 操作結果
- **************************************************************************************************/
- char measure( unsigned char *p_checksum, unsigned char mode)
- {
- unsigned er=0;
- unsigned int i,j;
- transstart();
- switch(mode)
- {
- case 3 :er+=write_byte_to_sht10(MEASURE_TEMP);break;
- case 5 :er+=write_byte_to_sht10(MEASURE_HUMI);break;
- default :break;
- }
- SHT10_DATA_R();
- for(i=0;i<65535;i++)
- {
- for(j=0;j<65535;j++)
- {
- if(SHT10_SDA_PIN == 0)
- {
- break;
- }
- }
- if(SHT10_SDA_PIN == 0)
- {
- break;
- }
- }
-
- if(SHT10_SDA_PIN)
- {
- er += 1;
- }
- d1 = receive_byte_from_sht10(ACK);
- d2 = receive_byte_from_sht10(ACK);
- d3 = receive_byte_from_sht10(noACK);
- return er;
- }
- /**************************************************************************************************
- * 函數名稱:tempera_humi_read
- *
- * 功能描述:調用相應函數,讀取溫度和濕度數據并校驗和計算
- *
- * 參 數:*t -- 溫度值
- * *h -- 濕度值
- *
- * 返 回 值:無
- **************************************************************************************************/
- void tempera_humi_read(float *t,float *h )
- {
- unsigned char error,checksum;
- float humi,temp;
- initIO();
-
- connectionreset(); //啟動傳輸
- error = 0;
- error += measure(&checksum,MEASURE_HUMI); //讀取濕度數據并校驗
- humi = d1*256+d2;
-
- error += measure(&checksum,MEASURE_TEMP); //讀取溫度數據并校驗
- temp = d1*256+d2;
- if(error != 0)
- {
- connectionreset(); //讀取失敗,通信復位
- }
- else //讀取成功,計算數據
- {
- temp = temp*0.01 - 39.6 ;
- humi = (temp - 25) * (0.01 + 0.00008 * humi)
- -0.0000028 * humi * humi + 0.0405 * humi-4;
- if(humi>100)
- {
- humi = 100;
- }
- if(humi<0.1)
- {
- humi = 0.1;
- }
- }
-
- *t=temp;
-
- *h=humi*10;
-
- }
- /****************************************************************
- 串口初始化函數
- ****************************************************************/
- void initUARTSEND(void)
- {
- CLKCONCMD &= ~0x40; //設置系統時鐘源為32MHZ晶振
- while(CLKCONSTA & 0x40); //等待晶振穩定
- CLKCONCMD &= ~0x47; //設置系統主時鐘頻率為32MHZ
-
-
- PERCFG = 0x00; //位置1 P0口
- P0SEL = 0x3c; //P0_2,P0_3,P0_4,P0_5用作串口
- P2DIR &= ~0XC0; //P0優先作為UART0
- U0CSR |= 0x80; //UART方式
- U0GCR |= 9;
- U0BAUD |= 59; //波特率設為19200
- UTX0IF = 0; //UART0 TX中斷標志初始置位0
- }
- /****************************************************************
- 串口發送字符串函數
- ****************************************************************/
- void UartTX_Send_String(char *Data,int len)
- {
- int j;
- for(j=0;j<len;j++)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
SHT10溫濕度傳感器程序調試.rar
(557.71 KB, 下載次數: 98)
2017-6-25 09:13 上傳
點擊文件名下載附件
基于CC2530的SHT10傳感器調試(編譯環境IAR for 51) 下載積分: 黑幣 -5
|