打印
[技术问答]

N79E814A在使用printf函数时无**确打印变量值

[复制链接]
1657|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
miaomiaode|  楼主 | 2016-3-5 23:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在主函数中定义一个变量或是其他函数中定义的变量,在调试时查看变量的值,从而确定程序是否正常运行。
但是在使用N79E814A单片机时,使用printf函数打印字符串可以,但是打印对应的变量值不正确。
例如:printf("\n x is %d",x);这样使用打印出的数值完全不是对应的数值。
有谁碰到过,有大神吗???求解释啊!!!以前使用51单片机都是这么调试的啊
沙发
miaomiaode|  楼主 | 2016-3-6 14:14 | 只看该作者
#define Uart_Port_Sel   0x00

#include <stdio.h>
#include "N79E81x.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "Version.h"

UINT8 u8Uart_Data;
UINT8 x=0;
extern UINT8 y;
UINT8 z=1;
//-----------------------------------------------------------------------------------------------------------
void main (void)
{
    AUXR1 |= Uart_Port_Sel;             // Select P10/P11 as UART pin(default)
    InitialUART0_Timer1(9600);          // 9600 Baud Rate @ 11.0592MHz
    Show_Version_Number_To_PC();
    printf ("\n*===================================================================");
    printf ("\n*  Name: N79E84x Series UART Sample Code.");
    printf ("\n*===================================================================");
    printf ("\n UART receive a byte and transmit the same byte to PC.\n");
//        printf ("\n FOSC_110592=%f\n",FOSC_110592);
        printf ("\n x=%d\n",x);
        printf ("\n y=%d\n",y);
        printf ("\n z=%d\n",z);
//        printf ("\n FOSC_221184=%f\n",FOSC_221184);
    ES = 1;                             // Enable serial interrupt
    EA = 1;                             // Enable global interrupt

    while(1);                           // Endless
}
//-----------------------------------------------------------------------------------------------------------
void UART_ISR(void) interrupt 4
{
    if (RI == 1)
    {                                   // If reception occur
        RI = 1;                         // Clear reception flag for next reception
        u8Uart_Data = SBUF;             // Read receive data
        SBUF = u8Uart_Data;             // Send back same data on UART
    }
    else TI = 0;                        // If emission occur
                                        // Clear emission flag for next emission
}



打印的结果却是
====================================================================
*  Copyright(c) 2014 Nuvoton Technology Corp. All rights reserved.  
*  Sample Name     : Nuvoton N79E81x Series Sample Code.            
*  Contact E-Mail: MicroC-8bit@nuvoton.com                          
*  Sample Version  :  1. 0. 2
*  Finished Date : 2014. 1.23
====================================================================
*===================================================================
*  Name: N79E84x Series UART Sample Code.
*===================================================================
UART receive a byte and transmit the same byte to PC.

x=222

y=478

z=478
这样岂不是就没法做大打印调试了,痛苦啊!!!

使用特权

评论回复
板凳
奥德赛| | 2016-3-7 17:13 | 只看该作者
你的printf是和哪个串口对应的呢,波特率对了吗

使用特权

评论回复
地板
miaomiaode|  楼主 | 2016-3-18 09:08 | 只看该作者
奥德赛 发表于 2016-3-7 17:13
你的printf是和哪个串口对应的呢,波特率对了吗

字符串是对的,目前只能自己写函数,还要+48,输出才能是正确的数字

使用特权

评论回复
5
xinba0625| | 2016-3-21 11:03 | 只看该作者
看看波特率

使用特权

评论回复
6
a_ziliu| | 2016-3-22 14:51 | 只看该作者
不要使用printf,直接用send_char去丟。

使用特权

评论回复
7
zhuomuniao110| | 2016-3-22 18:39 | 只看该作者
void UART_ISR(void) interrupt 4
{
    if (RI == 1)
    {                                   // If reception occur
        RI = 1;                         // Clear reception flag for next reception
        u8Uart_Data = SBUF;             // Read receive data
        SBUF = u8Uart_Data;             // Send back same data on UART
    }
    else TI = 0;                        // If emission occur
                                        // Clear emission flag for next emission
}

弱弱的问一下,这些入口的中断是如何实现的。

使用特权

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

本版积分规则

4

主题

42

帖子

0

粉丝