完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include"STC12C5A.h"#define u8_t int//sfr P4 = 0xe8;//STC12LE5A60S2单片机自带SPI控制器连接//***it VCC1 = P2^0;// VCC1 NO USE//***it SON = P1^6 ;// MISO//***it SIN = P1^5 ;// MOSI//***it SCKN = P1^7 ; // SCK***it CSN = P1^4 ;// 28J60 -- CS//***it RSTN = P3^5 ; //RST, no use//***it INTN = P3^3 ; // INT, no use***it key=P1^0;void init_spi(void){//SSIG = 1; //忽略SS脚//SPEN = 1; //允许SPI工作//DORD = 0; //先传高位MSB//MSTR = 1; //设置单片机为主机SPCTL = 0xD0; //SPI Control Register SSIG SPEN DORD MSTR CPOL CPHA SPR1 SPR0 0000,0100SPSTAT = 0xC0; ////IE2 |= 0x02; //允许SPI中断控制位}
void WriteByte(u8_t temp){SPDAT = temp;while(!(SPSTAT & 0x80));SPSTAT = 0xC0;} u8_t ReadByte(void){idata u8_t temp;//SPSTAT = 0xC0;SPDAT = 0x00;while(!(SPSTAT & 0x80));temp = SPDAT;SPSTAT = 0xC0;return temp;}void main(){ init_spi(); while(1) { if(key==0) WriteByte(0x01); P0=ReadByte; } } 两个单片机中只有一个按下key建的时候有反映另外一个没有反映,有反映的收到的信息的都是乱码,都是为0xff 求大神解答啊 |
|
相关推荐
9个回答
|
|
没玩过STC...
|
|
|
|
//写一字节到SD卡,模拟SPI总线方式
void SdWrite(uchar byte) { uchar i; for(i=8;i;i--) { SD_CLK=0; SD_DI=(byte&0x80); byte<<=1; SD_CLK=1; } SD_DI=1; } //=========================================================== //从SD卡读一字节,模拟SPI总线方式 uchar SdRead() { uchar byte,i; for(i=8;i;i--) { SD_CLK=0; SD_CLK=1; byte<<=1; if(SD_DO) byte|=1; } return byte; } |
|
|
|
你这个是模拟的还是用单片机内部的那个spi
|
|
|
|
嗯嗯,谢谢原子哥
|
|
|
|
你不用选主从吗
|
|
|
|
模拟的 只是两个子程序
|
|
|
|
我是在想找那个硬件的,硬件的传输速度是模拟的三倍
|
|
|
|
***it SD_CS = 1^4; // 片选择
***it SD_DI = 1^5; // 主输从入 ***it SD_DO = 1^6; // 主入从出 ***it SD_CLK = 1^7; // 时钟信号 /*spi init*/ SPDAT = 0; //数据寄存器清0 SPSTAT = 0xC0; //清SPI状态SPIF和WCOL写1清0 SPCTL = 0xDC; //1101 1100 主模式,使能,先MSB,前时钟为 //下降沿,并在下降沿驱动数据,上升沿检测数据 //clk_mcu/4 //写一字节到SD卡,模拟SPI总线方式 和硬件SPI void SdWrite(uchar byte) { // uchar i; // for(i=8;i;i--) // { // SD_CLK=0; // SD_DI=(byte&0x80); // byte<<=1; // SD_CLK=1; // } // SD_DI=1; SPDAT=byte; while((SPSTAT&0x80)==0); SPSTAT=0xC0; //SPIF写1清0 } //=========================================================== //从SD卡读一字节,模拟SPI总线方式 和硬件SPI uchar SdRead() { // uchar byte,i; // for(i=8;i;i--) // { // SD_CLK=0; // SD_CLK=1; // byte<<=1; // if(SD_DO) byte|=1; // // } SPDAT = 0xff; while((SPSTAT&0x80)==0); SPSTAT=0xC0; // SPIF写1清0 return SPDAT; } |
|
|
|
看"STC51单片机入门(C语言)",对STC的SPI通信讲解透彻,通俗易懂,超越宏晶官网手册。
|
|
|
|
只有小组成员才能发言,加入小组>>
3254 浏览 9 评论
2937 浏览 16 评论
3439 浏览 1 评论
8941 浏览 16 评论
4030 浏览 18 评论
1072浏览 3评论
556浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
550浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2285浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1843浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 08:50 , Processed in 1.506842 second(s), Total 94, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号