历史上的今天
今天是:2025年08月13日(星期三)
2019年08月13日 | 壹拾贰:单片机与芯片164的通信
2019-08-13 来源:eefocus
本篇之后都是提高篇
1)只为学习,不讨论现实意义
2)与实物电路会有差距(以实物为准)
3)讲解范围:串行通信、数码管、1602、12864、点阵、直流电机、AD、DA等基础电路。
高级内容暂不讲(USB、CAN、DMA、Wifi、网络、真彩大液晶、触摸屏、GPS、GPRS、Zigbee、NandFlash、Camera等等)(ARM11上讨论这些)
#基础知识
通信分为两种:并行通信和串行通信。
并行通信是将要所传送的数据的各位同时发送或接受,在该通信中,使用几条数据线,将数据分段同时进行传输,传输速度快,信息率高。
串行通信时使用很少的数据线,将要传送数据各个位按顺序一位一位地发送或接收,每一位都需要固定的时间长度,在串行通信中仅少量的传输线即可。
并行口

串行口

1)串行通信的几种制式
单工

半双工

全双工

2)串行通信标准
常见的串行通信标准
| UART | TXD、RXD、GND (三线) | TXD:发送端 RXD:接收端 | 异步 | 全双工 |
| 1-Wire | DQ (一线) | DQ:发送/接收端 | 异步 | 半双工 |
| SPI | SCK、MISO、MOSI (三线) | SCK:同步时钟 MISO:主机输入,从机输出 MIOSI:主机输出,从机输入 | 同步 | 全双工 |
| I2C | SCL、SDA (二线) | SCL:同步时钟 SDA:数据输入/输出端 | 同步 | 半双工 |
#实验
1)了解164芯片引脚
A、B:串行数据输入端。
Clock:时钟输入端。
Clear:清零端。当次引脚为低电平时,并行输出引脚将全部为低电平。
QAQH:数据输出引脚。这八个引脚为bit0bit8,8位数据输出引脚。
2)通信过程
74HC164真值表

******************************************************************/
* 【课程13】 ****单片机与164的通信***********
* 【说 明】 ****74HC164串行单工通信
* 【描 述】 ****用IO口模拟时序,实现单片机与164的通信
******************************************************************/
#include //---------常用的两个宏定义-------------- #define uint8 unsigned char #define uint16 unsigned int sbit Data=P0^0; // 定义P0.0为数据输入端口 sbit Clr=P0^2; // 定义P0.2为清零端口 sbit Clk=P0^1; // 定义P0.1为时钟端口 //------------函数的声明----------------- void DelayMS(uint16 dly); void Data_Send(uint8 num); /********************************************** 函数名:main() 主函数 **********************************************/ void main() { while(1) { //显示数字1 Data_Send(0x00); //发送数据0x9f进行显示 DelayMS(100); //适当延长,延时过短二极管会出现闪烁现象 while(1) ; } } /******************************************************** ** 名称 :void DelayMS(uint16 dly) ** 功能 :毫秒级延时(24M的晶振) ** 入口参数 :dly 用户的延时参数 ** 出口参数 :无 *********************************************************/ void DelayMS(uint16 dly) { uint16 x,y; for(x=dly;x>0;x--) for(y=10;y>0;y--); } /******************************************* 名称:Data_Send() 功能:用164实现数字显示 入口参数:uchar num 为要传送的数据变量 出口参数:无 *******************************************/ void Data_Send(uint8 num) { uint8 i; Clr=1; for(i=0;i<8;i++) { Clk=0; if((num&0x01)!=0) Data = 1; else Data = 0; // Data=num&0x01; //先传送要发送数据的最低位 num=num>>1; //右移1位,再传数据的高位 DelayMS(5); Clk=1; DelayMS(5); } }
上一篇:壹拾壹:音乐实验
下一篇:壹拾叁:数码管的显示
史海拾趣
|
请教: 是这样的,直接电机的一条线接 VCC (通过改变电流的大小能改变输出力的大小) 假设电机接在 20V 的电压上 现在用 PWM 来改变电流 PWM 由单片机产生 问题1: 我要怎么接线 才能使通过单片机控制电流大小? 2: PWM 到底是控制电流大 ...… 查看全部问答> |
|
公司交给我让我先了解下pos机,但是我对Pos机一点不了解,公司做的pos机是和银行没有关系的。就是给本公司的会员使用 想问下大虾: 1:Pos机的相关硬件有什么设备 2:用什么语言开发,能运行到什么系统,是否认能兼容 3:软硬件两者怎么相互嵌 ...… 查看全部问答> |
|
SD WiFi 插拔之后工作不正常(Wince 5.0) Urgent SD WiFi在首次插入后均可以与指定AP(Access Point)成功连接,后经过一次拔插后,就无法工作了,只有重新系统才可以。经Trace log可知,无法得到BSSI List,其列表为空,由此可知,WiFi Adapter处于异常状态,至今没有找到具体原因,曾试过NdisReset ...… 查看全部问答> |
|
STM32 ,用固件库写一个流水灯的程序需要哪些库?我知道肯定要用GPIO,RCC要用到USART,NVIC吗?为什么啊? 初学者求助… 查看全部问答> |
|
***************************************************************************************************/ #include \"io430.h\" #include //引用本征函数需包含本头文件 #include \"nbc430.h\" #define uchar unsigned ...… 查看全部问答> |
|
我是今年6月毕业的本科生 在上海读的书,在上海工作直到9月末,现在想回到厦门工作 今天有家公司发给了我offer(厦门大洋通信),职位是嵌入式软件工程师助理 请了解这家公司的前辈们介绍下此公司各方面的情况 还有想了解下厦门市的工资水平, ...… 查看全部问答> |




