打印

C8051F120单片机P4/P5/P6/P7的端口设置及使用问题

[复制链接]
5137|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
janjo|  楼主 | 2012-12-21 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用C8051F120编写了一个应用CC1101射频模块的点对点通信的程序,之前买了个最小模块,用的p3口,收发没问题(波特率57600、一个数据包15字节)。自己画的板子,懵懂无知用了p5-p6端口,在原来的程序基础上,改了端口设置后,现在发的程序没问题。但是收的程序却只能正确接收第一个数据包,然后就停住了,调了两天也不知道问题出在哪里。用买的最小模块换到p4-p7任何端口调都存在这个问题,而用p0-p3相应改了端口设置后却都能通。求各位解救~
一开始用的p3端口和UART0:
sbit         GDO0        = P3^7;
sbit         GDO2        = P3^3;
sbit        MISO        = P3^2;
sbit        MOSI        = P3^0;                                  
sbit        SCK                = P3^1;                                  
sbit        CSN                = P3^6;                                  
sbit         LED                = P3^4;       

SFRPAGE = CONFIG_PAGE;                        // SFRPAGE选择CONFIG_PAGE页       
P3MDOUT = 0x53;                       
XBR0 = 0x04;                                        // UART0 Enable
XBR2 = 0x40;                                        // 全局弱上拉、使能交叉开关
后来改用p5、p6口:
sbit    GDO0 = P6^4;                //修改!!
sbit         GDO2        = P6^3;
sbit        MISO        = P5^4;
sbit        MOSI        = P5^3;
sbit        SCK        = P6^2;
sbit        CSN        = P5^5;
sbit         LED        = P3^4;
sbit         LED1        = P3^5;       

SFRPAGE = CONFIG_PAGE;                        // SFRPAGE选择CONFIG_PAGE页       
P3MDOUT = 0x30;       
P5MDOUT = 0x28;
P6MDOUT = 0x04;
XBR0 = 0x04;                                        // UART0 Enable
XBR2 = 0x40;                                        // 全局弱上拉、交叉开关使能                  
我觉得是端口设置的问题,所以把我的端口设置部分的代码也粘上来了,求各位指教,谢谢了!

相关帖子

沙发
NE5532| | 2012-12-21 22:07 | 只看该作者
你的单片机是不是直接跟1101接口的?我记得这个芯片好像带缓冲,是直接通过SPI读的么?有没有用中断?怎么设置的?中断标志清了么?

使用特权

评论回复
板凳
janjo|  楼主 | 2012-12-21 23:03 | 只看该作者
NE5532 发表于 2012-12-21 22:07
你的单片机是不是直接跟1101接口的?我记得这个芯片好像带缓冲,是直接通过SPI读的么?有没有用中断?怎么 ...

都是用的普通IO口模拟的SPI口,直接通过模拟的SPI把数据读到单片机BUF里,然后在通过中断由串口发送出去。仅在串口从BUF读数据发送的时候用到了中断。
void UART0_Interrupt (void) interrupt 4
{
        SFRPAGE = UART0_PAGE;
               
        if (RI0)
           {
              RI0 = 0;                       
                  KEY0=SBUF0;
            }         
}  

使用特权

评论回复
地板
NE5532| | 2012-12-22 08:35 | 只看该作者
那有么有看过,第二个包来的时候,中断发生了没有?

使用特权

评论回复
5
janjo|  楼主 | 2012-12-22 12:09 | 只看该作者
NE5532 发表于 2012-12-22 08:35
那有么有看过,第二个包来的时候,中断发生了没有?

我在由P3端口改用P5口时只改了一个口(MISO由P3.2改为P5.4)时,可以接5个数据包,然后就停下了,所以才有一开始端口配置问题的推断。

使用特权

评论回复
6
NE5532| | 2012-12-22 12:18 | 只看该作者
janjo 发表于 2012-12-22 12:09
我在由P3端口改用P5口时只改了一个口(MISO由P3.2改为P5.4)时,可以接5个数据包,然后就停下了,所以才 ...

推断是可以的,但是要有证据支撑,请看《程序调试黑宝书》内秘籍介绍。

使用特权

评论回复
7
janjo|  楼主 | 2012-12-27 09:59 | 只看该作者
问题昨天搞定了,不是端口配置的问题,而是由于4-7口寄存器位于SFR页F,程序中没有对此进行考虑,所以出现了上述问题。只要在每个函数需要修改SFRPAGE之前先定义一个变量,把当前SFRPAGE的值存起来,函数退出的时候再恢复即可。(0-3口之所以不存在这个问题是因为其端口寄存器所有页都可以访问)

使用特权

评论回复
8
拖拉机的音响| | 2014-11-26 11:28 | 只看该作者
janjo 发表于 2012-12-27 09:59
问题昨天搞定了,不是端口配置的问题,而是由于4-7口寄存器位于SFR页F,程序中没有对此进行考虑,所以出现 ...

我也遇到了同样的问题,可是官方例程上写的寄存器页都在CONFIG_PAGE呀,需要怎么设置呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

14

帖子

1

粉丝