在学单片机,我想知道p0-p3 cpu是怎么控制它每个端口是干嘛用的,比如 p0数据地址分时复用

在学单片机,我想知道p0-p3 cpu是怎么控制它每个端口是干嘛用的,比如 p0数据地址分时复用,p1普通的i/o口,p2地址高八位地址,
p3第二功能!这些是怎么控制的?我怎么控制 其中一个端口是输入还是输出,是作为i/o,还是作为第二功能? 求大师指点!

第1个回答  推荐于2016-03-10
p0-p3 是双向输入输出口
输出时 用 MOV A,#direct
MOV P1,A
P1口的管脚)即输出数据
输入时先向端口写入1 然后执行
MOV A,P1 即读入了P1 口状态
或JB P1.0 即或获取单个引脚状态
P3口第二功能,只要开启,它就会生效
如外部中断引脚,只要你开总中断和外部中断,当在此管脚上出现低电平或脉冲下降沿,它应会引起CPU中断
还有脉冲计数功能,只要你设定为外部计数状态,并且启动计数器,外部出现脉冲变化即可引起计数器递增
至于 p0数据地址分时复用是执行了写外部存储器指令后 MOVX @DPTR,A 时在P0口上自动产生的 同时配合ALE信号和锁存器等硬件电路完成的追问

关键是p3的第二功能怎么开启

追答

不用专门开启,例如串口发送,你只要设置好串口工作状态(包括定时器,因定时器1为波特率发生器)然后启动定时器并执行 SBUF=a1;即可发送数据(汇编语言为MOV SBUF,A)
TMOD=0x21;//设置定时器1为工作方式2
SCON = 0x50; // 设定串行口工作方式
PCON &= 0xef; // 波特率不倍增
IE = 0x0; // 禁止任何中断
TH1=0xfd;
TL1=0xfd;//16MHz时波特率9600

追问

还有个问题,p1读数据前先将端口锁存器置1, 这个在具体编程的时候,需要人工操作吗?

追答

然后启动定时器(TR1=1)并执行 SBUF=a1 A的数据将以串行的形式出现在P3.1/TXD引脚上(当然此时你不能外接电路强行将其置0或置1)
p1读数据前先将端口锁存器置1, 这个在具体编程的时候,是需要人工操作的
但由于上电时端口即黙认为输入,所以如果你先前没有对其作输出0操作,也可省去这一步

追问

谢谢你

本回答被提问者采纳
相似回答