他妈的!这是咋回事,PIC单片机搞死我啦!关于端口的问题!

2020-02-09 09:35发布

大家好, 以下是我的一个小测试程序,我在程序中先写了数据,然后再把数据读出来利用uart串口发送到串口调试器中,但是我发现写的数据与读到的数据不一样,请大家指点一下。
#include <pic.h>
#define uint unsigned int
#define uchar unsigned char
void  uart_send(uchar n)//串口发送数据函数
{
TXIF=0;
      TXREG=n; /*发出一个字符*/
    while(TRMT==0); /*等待写入完成*/
}
void uart_init(void)//串口初始化
{
  TRISC6=0;                 //设置PC6方向为输出
  TRISC7=1;
  SPBRG=0X26;                  //设置波特率为19200BPS,12M
  TXSTA=0X24;                 //使能串口发送,选择高速波特率
  RCSTA=0X90;                 //使能串口工作,连续接收
}
void main(void)
{
uart_init();//串口初始化
TRISE=0x00;//E端口设为输出
PORTE=0XFF;//E端口设为高电平
while(1)
{
RE0=1;//1
RE1=0;//0
RE2=1;//1

TRISE=0XFF;////E端口设为输入

uart_send(0xaa);//发送0xaa
uart_send(RE0);//发送RE0的数据
uart_send(RE1);//发送RE1的数据
uart_send(RE2);//发送RE2的数据
uart_send(0x55);//发送0xaa

while(1);

}
}


以下是在串口中看到的数据:

(原文件名:未命名.JPG)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
zqy517
1楼-- · 2020-02-09 17:58
lz,你用的是具体型号的PIC呢?想从PORTE输入的值是数字信号的话,记得ANSELE=0X00;
zqy517
2楼-- · 2020-02-09 18:14
认真看下端口的说明:读PORTE 寄存器(寄存器6-15)将读出相应引脚的状态,而对其进行写操作则是将数据写入端口锁存器。所有写操作都是读- 修改- 写操作。因此,对端口的写操作意味着总是先读端口引脚电平状态,然后修改这个值,最后再写入该端口的数据锁存器。
ITOP
3楼-- · 2020-02-09 18:25
传的应该是引脚电平状态!
benladn911
4楼-- · 2020-02-10 00:11
蛋定。楼主。
心平气和才能解决这种问题。
guowei681
5楼-- · 2020-02-10 04:49
 精彩回答 2  元偷偷看……
pwcpp
6楼-- · 2020-02-10 05:05
如果是16Fxx的,TXIF是不能用软件清零的,而是硬件自动置1以表示可以发送数据了,我觉得应该改成

void  uart_send(uchar n)//串口发送数据函数
{
//TXIF=0;
while(1)
{
if(TXIF==1) break;
}
      TXREG=n; /*发出一个字符*/
//    while(TRMT==0); /*等待写入完成*/
}  

详见pic数据手册。


另外,UART的初始化中TRISC的6和7我都设为1,以断开RC模块和USART Tx/Rx引脚的联系

一周热门 更多>