完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
//芯片的工作频率为11.0592MHz
#include #include #define BYTE unsigned char #define WORD unsigned int #define SPI_S0 0x40 //P_SW P3.0 RXD P3.1 TXD #define SPI_S1 0x80 #define SPIF 0x80 //SPSTAT.7 传输完成标志 #define WCOL 0x40 //SPSTAT.6 写冲突标志 #define SSIG 0x80 //SPCTL.7 #define SPEN 0x40 //SPCTL.6 #define DORD 0x20 //SPCTL.5 #define MASTER 0x10 //SPCTL.4 #define CPOL 0x08 //SPCTL.3 #define CPHA 0x04 //SPCTL.2 #define SPDHH 0x00 //CPU_CLK/4 #define SPDH 0x01 //CPU_CLK/16 #define SPDL 0x02 //CPU_CLK/64 #define SPDLL 0x03 //CPU_CLK/128 BYTE array[30]; //声明采样结果数组 BYTE *point_array; ***it CS0=P1^1; //SPI从机选择口, 连接到其它MCU的SS口 ***it DRDY=P1^6; void Uartinit(); //MCU 串口1初始化 void InitSPI(); //MCU SPI初始化 void SendUart(WORD array_NUM,BYTE *point_array); //MCU 串口发送数据到PC void Write_ADC(BYTE DATA); void Read_ADC(WORD array_NUM,BYTE *point_array); void delay50us(); //延时函数 50us ////////////////////////////////////// main() { delay50us(); //延时等待外围器件稳定 UartInit(); //初始化串口 InitSPI(); //初始化SPI Write_ADC(0x20); //访问时钟寄存器 Write_ADC(0x03); //2.4576M 100HZ Write_ADC(0x10); //访问设置寄存器 Write_ADC(0x40); //自校准 while(DRDY); //等待自校准完成 Write_ADC(0x38); //访问数据寄存器 point_array=array; Read_ADC(20,array); SendUart(20,array); return (0); } ///////////////////////////////////////// void Write_ADC(BYTE DATA) { CS0=0; //使能AD7705 SPDAT=DATA; //发送数据 while(!SPIF==0); //等待发送完毕 CS0=1; } void Read_ADC(WORD array_NUM,BYTE *point_array) { WORD i; for(i=0;i CS0=0; //使能AD7705 while(DRDY); // SPDAT=0X66; //移位寄存器写入8位数据 while(!(SPSTAT&SPIF)); // 等待发送完 *(point_array+i)=SPDAT; i++; SPDAT=0X66; while(!(SPSTAT&SPIF)); *(point_array+i)=SPDAT; CS0=1; //禁止AD7705器件 } } void UartInit() //9600bps@11.0592MHz { ACC = P_SW1; ACC &= ~(SPI_S0 | SPI_S1); //S1_S0=0 S1_S1=0 P_SW1 = ACC; //P3.0 RXD P3.1 TXD PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x40; //定时器1时钟为Fosc,即1T AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //清除定时器1模式位 TMOD |= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xDC; //设定定时初值 TH1 = 0xDC; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 } void delay50us() { BYTE i, j; _nop_(); i = 1; j = 134; do { while (--j); } while (--i); } //*********SPI初始化********/// void InitSPI() { ACC = P_SW1; //切换到第一组SPI ACC &= ~(SPI_S0 | SPI_S1); //SPI_S0=0 SPI_S1=0 P_SW1 = ACC; //(P1.2/SS, P1.3/MOSI, P1.4/MISO, P1.5/SCLK) SPSTAT = SPIF | WCOL; //清除SPI状态 SPCTL = SSIG | SPEN |MASTER | CPOL; //设置SPI为主模式 空闲位高 } ////////////////////////// void SendUart(WORD array_NUM,BYTE *point_array) { WORD i; for(i=0;i while (!TI); //等待上一个数据发送完成 TI = 0; //清除发送完成标志 SBUF = *(point_array+i); //触发本次的数据发送 } } |
|
相关推荐
4个回答
|
|
这是小弟用stc15和ad7705 ,弄得一段小程序 , stc自带spi 所以想用ad7705采集16位模拟信号,问题是编译时始终提示main函数”missing return value“ 找不到原因! 也没挂硬件,但是main函数 末尾加了一条 return(0); 问题就解决,为什么会这样喃?望不吝赐教,一定有小东西感谢,谢谢各位兄弟!
|
|
|
|
main加了void 解决 原来c语言主函数默认范围值是int
|
|
|
|
楼上正解。这也说明了楼主在写程序时不按规范出牌~
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
551 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
910 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
575 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
572 浏览 0 评论
1221 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11767 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 16:59 , Processed in 0.646923 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号