×
单片机 > 单片机程序设计 > 详情

壹拾贰:单片机与芯片164的通信

发布时间:2020-06-06 发布时间:
|

本篇之后都是提高篇
1)只为学习,不讨论现实意义
2)与实物电路会有差距(以实物为准)
3)讲解范围:串行通信、数码管、1602、12864、点阵、直流电机、AD、DA等基础电路。
高级内容暂不讲(USB、CAN、DMA、Wifi、网络、真彩大液晶、触摸屏、GPS、GPRS、Zigbee、NandFlash、Camera等等)(ARM11上讨论这些)

#基础知识
通信分为两种:并行通信和串行通信。
并行通信是将要所传送的数据的各位同时发送或接受,在该通信中,使用几条数据线,将数据分段同时进行传输,传输速度快,信息率高。
串行通信时使用很少的数据线,将要传送数据各个位按顺序一位一位地发送或接收,每一位都需要固定的时间长度,在串行通信中仅少量的传输线即可。

并行口

串行口

1)串行通信的几种制式

单工

半双工

全双工

2)串行通信标准

常见的串行通信标准

串行通信标准
引脚
引脚说明
通信方式
通信制失
UARTTXD、RXD、GND
(三线)
TXD:发送端
RXD:接收端
异步全双工
1-WireDQ
(一线)
DQ:发送/接收端异步半双工
SPISCK、MISO、MOSI
(三线)
SCK:同步时钟
MISO:主机输入,从机输出
MIOSI:主机输出,从机输入
同步全双工
I2CSCL、SDA
(二线)
SCL:同步时钟
SDA:数据输入/输出端
同步半双工

#实验

1)了解164芯片引脚

A、B:串行数据输入端。
Clock:时钟输入端。
Clear:清零端。当次引脚为低电平时,并行输出引脚将全部为低电平。
QAQH:数据输出引脚。这八个引脚为bit0bit8,8位数据输出引脚。

2)通信过程
74HC164真值表

单工
半双工
Clear
Clock
A和B
QA QB … QH
L
X
X
L L … L
H
L
X

H
H
QH=QG… QB=QA、QA=H
H
L
QH=QG… QB=QA、QA=L

******************************************************************/

*   【课程13】 ****单片机与164的通信***********

*   【说  明】 ****74HC164串行单工通信

*   【描  述】 ****用IO口模拟时序,实现单片机与164的通信

******************************************************************/

#include //  对51特殊功能寄存器进行定义


//---------常用的两个宏定义-------------- 

#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);

}

}





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法