duedue 发表于 2014-10-24 08:26:09

求教使用UART 模式0来作SPI驱动74164获595做IO扩展

单片机没有多余的IO口,也没有SPI,只留一个UART

网上有人说可以用模式0来代替SPI,看手册“模式0:串行数据通过RxD进出,TxD输出移位时钟。每次发送和接收8位,波特率固定为CPU 1/16”

但没有任何例子来说明怎么使用...

duedue 发表于 2014-10-24 19:14:12

求解??????

lxa0 发表于 2014-10-24 22:37:59

我试过
串口好像不行
最后用单片机模拟SPI解决的

yklstudent 发表于 2014-10-25 07:18:52

发估计没问题,收就难说了

takashiki 发表于 2014-10-25 07:35:26

收发都没有问题,但是要注意时序。51的同步USART不完全支持SPI的所有模式的

duedue 发表于 2014-10-25 07:58:47

yklstudent 发表于 2014-10-25 07:18
发估计没问题,收就难说了

你好我只需要发谢谢

duedue 发表于 2014-10-25 07:59:28

takashiki 发表于 2014-10-25 07:35
收发都没有问题,但是要注意时序。51的同步USART不完全支持SPI的所有模式的

请问不支持什么模式?怎么处理只发的情况?有代码可以参考么??

非常感谢

takashiki 发表于 2014-10-25 08:23:41

duedue 发表于 2014-10-25 07:59
请问不支持什么模式?怎么处理只发的情况?有代码可以参考么??

非常感谢 ...

你可以对照时序图看。51的只支持LSB、时钟相位为高,时钟极性好像没什么要求。如果需要MSB就直接软件查表处理成LSB的,时钟极性为低(这个还真少见)就外加反相器。
代码参考:
人品不怎么样的老妖的PDF里面其实都有,他的东西大而全,包括电路图、程序、广告……

takashiki 发表于 2014-10-25 08:25:55

贴完了才发现,那是输入的,下面是输出的:START: MOV R7,#02H ;设置要发送的字节个数
MOV R0,#30H ;设置地址指针
MOV SCON,#00H ;设置串行口方式 0
SEND: MOV A,@R0
MOV SBUF,A ;启动串行口发送过程
WAIT: JNB TI,WAIT ;一帧数据未发送完,循环等待
CLR TI
INC R0 ;取下一个数
DJNZ R7,SEND
RET
老妖的例程是汇编的,你自己改成C的吧,反正就这么个意思。

duedue 发表于 2014-10-26 20:30:33

takashiki 发表于 2014-10-25 08:25
贴完了才发现,那是输入的,下面是输出的:
老妖的例程是汇编的,你自己改成C的吧,反正就这么个意思。 ...

非常非常感谢

学习了!
页: [1]
查看完整版本: 求教使用UART 模式0来作SPI驱动74164获595做IO扩展