单片机89C52RC串口读取am2320温湿程序.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机89C52RC串口读取am2320温湿程序

//****************************************************************// // AM系列读IIC使用范例 //单片机 :AT89S52 或 STC89C52RC // 功能 :串口发送温湿度数据 波特率 9600 // 晶振 :12M (用户系统时钟如不是12M 请更改相关宏定义及注释的延时时间) // 编译环境: Keil3 // 公司 :奥松电子 //****************************************************************// #include reg52.h #include intrins.h #define USE_T2 #define FOSC #define BAUD 9600 //端口位定义,可修改 sbit SDA=P1^0; sbit SCL=P1^1; //内部数据定义 #define IIC_Add 0xB8 //器件地址 #define IIC_RX_Length 15 unsigned char IIC_TX_Buffer[]={0x03,0x00,0x04}; //读温湿度命令(无CRC校验) unsigned char IIC_RX_Buffer[IIC_RX_Length] = {0x00};//读回的温湿度 unsigned char Uart_RX_Buffer[30] = {0x00}; unsigned char *String; unsigned char WR_Flag; //字符串定义 #define S_Function Function: 03 04 #define S_Temp Temp: #define S_RH RH: #define S_CRCT CRC: True #define S_CRCF CRC: Wrong #define S_Data Data: #define S_NotS Sensor Not Connected void Ack(void); void NoAck(void); void delay10us(void) //这个延时函数 要大于5US以上 { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } void delay1ms(unsigned int t) { unsigned int i; unsigned int j; for(j=t;j0;j--) for(i=124;i0;i--); } void InitUART(void) { unsigned int iTmpBaud; unsigned long lTmpBaud; iTmpBaud = 0; //首先选定定时器2作为波特率发生器,16位定时器,自动装载 SCON = 0x50; //SM0 SM1 SM2 REN TB8 RB8 TI RI //0 1 0 1 0 0 0 0 PCON = 0x00; //PCON的地址是87H,这里SMOD =0 T2CON = 0x30; //TF2 EXF2 RCLK TCLK EXEN2 TR2 C(/T2) CP(/RL2) //0 0 1 1 0 0 0 0 T2MOD = 0x00; // / / / / / / T2OE DCEN //0 0 0 0 0 0 0 0 //fosc = 22.1184M,6T: 144,设置波特率 //(RCAP2H,RCAP2L) = 65536- fosc/(n*Baud)。n:32(12T-mode),16:(6T-mode) lTmpBaud = FOSC/BAUD; lTmpBaud /= 32; //12T-mode iTmpBaud = lTmpBaud 0xFFFF; iTmpBaud = 65536 - iTmpBaud; RCAP2H = (iTmpBaud8) 0x0FF; RCAP2L = iTmpBaud 0x0FF; RI = 0; //清除接收中断标志 REN = 1; //允许串行接收 ES = 1; //允许串行中断 TR2 = 1; //启动定时器1 EA=1;//开总中断 } //串口发送 void UARTSend(char UCHAR) { SBUF=UCHAR; while(TI==0); TI=0; } void U

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档