完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
单片机把下面这个AD程序烧进去后和串口助手通讯后。串口调试助手接到相同重复的数据,求问怎么之接受到一个后停止接受那。。串口用RS232USB转串口实现笔记本与单片机的连接。
新人没有财富值,求好心的大神帮帮忙。 /* * AD test * * 晶振:11.0592M */ #include #include #define nops(); do{_nop_();_nop_();_nop_();_nop_();_nop_();} while(0) //定义空指令 #define PCF8591 0x90 //PCF8591 地址 ***it ADDA_SCL = P3^7; //I2C 时钟 ***it ADDA_SDA = P3^6; //I2C 数据 bit ack; /*应答标志位*/ /** * 发送I2C起始条件 */ void Start_I2c() { ADDA_SDA=1; nops(); ADDA_SCL=1; nops(); ADDA_SDA=0; nops(); ADDA_SCL=0; nops(); } /** * 发送I2C结束条件. */ void Stop_I2c() { ADDA_SCL=0; nops(); ADDA_SDA=0; nops(); ADDA_SCL=1; nops(); ADDA_SDA=1; nops(); } /** * I2C数据发送函数 */ void SendByte(unsigned char c) { unsigned char i; for (i=0; i<8; i++) { if ((c< ADDA_SDA=1; else ADDA_SDA=0; nops(); ADDA_SCL=1; nops(); ADDA_SCL=0; } ADDA_SDA=1; nops(); ADDA_SCL=1; nops(); if (ADDA_SDA==1) ack=0; else ack=1; /*判断是否接收到应答信号*/ ADDA_SCL=0; } /** * I2C数据接收函数 **/ unsigned char RcvByte(void) { unsigned char retc=0, i; for (i=0; i<8; i++) { ADDA_SCL=0; nops(); ADDA_SCL=1; nops(); retc <<= 1; if (ADDA_SDA==1) retc = retc + 1; } ADDA_SCL=0; nops(); return(retc); } /** * 握手函数 * a为1时发送应答信号ACK,a为0时不发送ACK */ void Ack_I2c(bit a) { if(a==0) ADDA_SDA=0; else ADDA_SDA=1; nops(); ADDA_SCL=1; nops(); ADDA_SCL=0; nops(); } /** * ADC发送字节(命令)数据函数 * * sla--I2C从机地址 * c--控制字节或数据 */ bit ADC_Sendbyte(unsigned char sla,unsigned char c) { Start_I2c(); //启动总线 SendByte(sla); //发送器件地址 if (ack==0) return(0); SendByte(c); //发送数据 if (ack==0) return(0); Stop_I2c(); //结束总线 return(1); } /** * ADC读字节数据函数 */ unsigned char ADC_Recbyte(unsigned char sla) { unsigned char c; Start_I2c(); //启动总线 SendByte(sla+1); //发送器件地址 if(ack==0) return(0); c = RcvByte(); //读取数据0 Ack_I2c(1); //发送非就答位 Stop_I2c(); //结束总线 return(c); } /** * UART初始化 * 波特率:9600 */ void uart_init(void) { unsigned char u; ET1=0; TMOD = 0x21; // 定时器1工作在方式2(自动重装) SCON = 0x50; // 10位uart,允许串行接受 TH1 = 0xFD; TL1 = 0xFD; u = SBUF; TR1 = 1; } /** * UART 发送一字节 */ void UART_Send_Byte(unsigned char dat) { SBUF = dat; while (ti == 0); TI = 0; } main(void) { char ans; uart_init(); ADC_Sendbyte(PCF8591,0x40); ans = ADC_Recbyte(PCF8591); //ADC0 模数转换通道0 UART_Send_Byte(ans); } |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
787 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1476 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1216 浏览 0 评论
900 浏览 0 评论
963 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11868 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 14:16 , Processed in 0.370401 second(s), Total 39, Slave 31 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号