我的毕业论文就是用google翻的,理科导师根本看不懂,看得懂也不会去看的,只要关键词翻译对就可以了。
单片机的串口模式0,即移位寄存器输入/输出模式,串行数据通过RXD输出,TXD则用于输出移位时钟脉冲。这种模式有利于用最少硬件实现接口扩展。74164当扩展需要两个串行数据,一个为时钟脉冲,一个为资料..串口模式1为10位为一帧的异步串行通信方式。其帧格式为1个起始位、8个数据位和1个停止位。这种模式是没有时钟脉冲的所以你的164不会动作串行口控制寄存器SCON有四种工作模式,其中在工作模式0下,串行口是作为同步移位寄存器功能,器波特率固定为晶振频率的1/12。串口设置为工作模式0状态时,利用移位寄存器实现串口数据发送,数据发送通过写SBUF寄存器完成,写入SBUF的8位数据通过RXD逐位发送,移位脉冲则通过TTXD发送。这些工作全部由硬件自动完成,而且发送完毕后,硬件会自动将TI置位,因此,在设置好工作模式后,只需将待发送的字节写入SBUF,然后等待TI复位即可,在发送下一个字节前,TI要用软件请0.这里给你一个参考//74HC164 串行输入/并行输出器件实例//利用串口实现,串行数据由RXD端口发送给74HC164芯片,TXD则用于输出移位时钟脉冲。#include <> //包含头文件#include <> // 包含移位函数的头文件// 延时函数void delay(unsigned int x){ unsigned char i; while(x--) { for(i = 0;i < 120;i++); }}// 主函数void main(void){ unsigned char c = 0x80; SCON = 0x00; // 串口模式0,即移位寄存器输入/输出方式 TI = 1; //开启TI,串口发送中断标志置1 while(1) { c = _crol_(c,1); //移位函数 SBUF = c; //数据送串口数据缓冲器 while(TI == 0); //等待发送结束 TI = 0; //手动复位中断标志 delay(500); }}
可以用串口连接一片或多片74LS164扩展多个I/O口,从串口中输出相应的数据就可以了,不复杂,单片机书籍上有介绍的,就是用了串口扩展并口的功能,和下图的功能相同
楼主的程序没有任何错误 之所以延时了400MS 那是因为 07FH 这个数被传了两次 假如楼主想要只延时200ms 在DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH,0BFH,07FH DB 07FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH 第二行最后一个,或者第三行第一个,删除任意一个即可,程序仍可正常执行,实验便知。
320 浏览 6 回答
203 浏览 3 回答
285 浏览 5 回答
349 浏览 4 回答
263 浏览 7 回答
296 浏览 3 回答
212 浏览 6 回答
340 浏览 4 回答
106 浏览 5 回答
128 浏览 4 回答
342 浏览 5 回答
121 浏览 3 回答
208 浏览 9 回答
279 浏览 5 回答
333 浏览 5 回答
281 浏览 8 回答
98 浏览 4 回答
145 浏览 6 回答
139 浏览 2 回答
196 浏览 2 回答
180 浏览 5 回答
153 浏览 2 回答
188 浏览 4 回答
267 浏览 8 回答
167 浏览 4 回答