打印
[活动专区]

8003硬件板+串口设置(已解决)

[复制链接]
1024|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
笨笨兔|  楼主 | 2018-9-26 18:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 笨笨兔 于 2018-9-27 15:11 编辑

本来想先调通串口再来测试ADC性能,结果第一步就卡在串口上了。
刚看到 https://bbs.21ic.com/icview-2559372-1-1.html 这个帖子也是相似问题。
(因为 P20/P11 是被仿真口占用的,所以我就想到用P15/P16来当串口(P15=Tx=推挽输出,P16=Rx=上拉输入))

遇到的问题:
1。按如下代码设置后,在P15/P16接上通电中的 USB转TTL 模块(已经设置成5V电平)时,不能下载,必须把P15/P16断开才能下载。
2。下载成功后,MCU串口无输出。

请原厂给一个可以看到串口输出的例子。

void Uart0_Init(void)
{
//OTCON  |= 0x10; //0b(1101,xxxx) ==>  P20 = Pin8=Tx、P11 = Pin18=Rx 做串口
OTCON  &= 0xC0; //++ 0b(1100,xxxx) ==> P15 = Pin2=Tx、P16 = Pin3=Rx 做串口
P1CON |= 0x20;  //++ P1.5 as Output
P1PH  |= 0x40;  //++ P1.6 as Input with Pullup

SCON   = 0X50; //设置通信方式为模式一,允许接收  
T2CON &= 0XCf; //选择T1做波特率发生器
TR1 = 0;    //用定时器1作为波特率发生器,定时器1必须停止计数
TH1 = 0x06;    //在16M时,波特率为9600;定时器初值[TH1,TL1] = Fsys/波特率
TL1 = 0x82;    //在16M时,波特率为9600
EUART = 1;     //开启Uart0中断
EA = 1;     //开启总中断
}

//主程序
void main(void)
{
Init_Port();  //初始化端口

Uart0_Init();
TI = 1;
SBUF = 'H';
...
}


相关帖子

沙发
笨笨兔|  楼主 | 2018-9-26 18:13 | 只看该作者
或者,能不能搞一个可以 ISP 的固件和 PC工具? 评估芯片以及简单的开发根本不需要仿真,直接 ISP+串口打印就可以调试了。

使用特权

评论回复
板凳
笨笨兔|  楼主 | 2018-9-27 14:21 | 只看该作者
本帖最后由 笨笨兔 于 2018-9-27 15:12 编辑

按下面这个设置,现在P15/P16可以收发了。谁能想到 Tx引脚居然要设置成 “输入+上拉”的?!


另外,P15/P16连接了串口模块后,不能下载的问题仍然存在,希望原厂解释一下。
(实际开发肯定是连接串口的多,每次下载前都要拔掉串口很麻烦)

#define FREQ        16      //unit: MHz
#define BPS         115200    //unit: bit
#define Value_TH1   (unsigned char)((FREQ * 1000000L / BPS) >> 8)
#define Value_TL1   (unsigned char)((FREQ * 1000000L / BPS))

/*****************************************************
*函数名称:void Uart0_Init2(void)
*函数功能:Uart0中断初始化
*****************************************************/
void Uart0_Init2(void)    //选择Timer1作为波特率信号发生器
{

        OTCON  &= 0xC0;         //0b(1100,xxxx) ==> P15 = Pin2=Tx、P16 = Pin3=Rx 做串口
        P1CON &= 0x9F;           //TX/RX 均设置为输入带上拉
        P1PH  |= 0x60;
        
        SCON  |= 0X50;          //设置通信方式为模式一,允许接收
        TMCON |= 0X02;          //定时器T1频率源自于fSYS  
        TMOD  |= 0X20;          //8位自动重载定时器,溢出时将TH1存放的值自动重装入TL1
        PCON  |= 0X80;          //SMOD=1 串行端口在系统时钟的1/4下运行
        TH1 = Value_TH1;
        TL1 = Value_TL1;
        TR1 = 0;                //T1停止计数
        ET1 = 0;                //关闭TIMER1中断
        EUART = 1;              //开启Uart0中断
        EA = 1;                 //打开所有的中断
}

使用特权

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

本版积分规则

12

主题

56

帖子

2

粉丝