Function Description :SyncMos SM39R08A5 printf out to UART
SyncMos OB39R08A5 printf out to UART
#step1.#include "stdio.h" // for printf
init_UART0(); //Initial uart
TI=1; //#step2.void UART0_ISR() do not clear TI,
#step3.uint8_t i8Cnt;
unsigned int i16Cnt;
putchar(0x20);
printf("bd=%bd \r\n", i8Cnt); //%bd for 8 bits variable
printf(" d=%d \r\n", i16Cnt); //%d for 16 bits varialeprintf(" %x",i16Cnt);
//===============================================================
below is sample code:
//===============================================================#include "SM39R16A3.h"
#include "UART0.h"
#include "stdio.h" // for printf
#define d_S0RELL 0xFA
bit bU0TX = 0;
void init_UART0(void)
{
S0RELH = d_S0RELH;
S0RELL = d_S0RELL;
AUX |= 0x80; // BRS = 1
PCON |= 0x80; // SMOD =1
IEN0 |= 0x90; // EA=1, ES0=1, interrupt enable
// S0CON = 0x50; // mode 1, SM20=0, Revice enable
S0CON = 0x40; // mode 1, SM20=0, Revice disable
TI=1; //linjj++ for printf
}
void UART0_ISR(void) interrupt d_UART0_Vector
{
unsigned char RXBUF0;
if(RI) // INT_RX
{
RI = 0; // RI clear
RXBUF0 = S0BUF; // Read BUF, user code...
}
else // INT_TX
{
bU0TX =0;
//linjj++ for printf, do not clear TI, TI =0; // TI clear
}
}
void UART0_TX(unsigned char n_temp0)
{
bU0TX = 1;
S0BUF = n_temp0;
while(bU0TX)
{
;
}
}
//=========================================================================
{
uint8_t i8Cnt;
unsigned int i16Cnt;
unsigned long i32Cnt;
init_UART0();
i8Cnt = 0;
putchar(0x20);
putchar(0x31);
// putchar('q');
// printf("Aa ");
// printf("Bb ");
printf("Cc\r\n");
printf("ver.01 SM39R08A5, printf out to UART0_TX ,baud rate:115200bps \r\n");
for (i8Cnt=1; i8Cnt<10; i8Cnt++)
printf("bd=%bd \r\n", i8Cnt); //%bd for 8 bits variable
for (i16Cnt=1; i16Cnt<10; i16Cnt++)
printf(" d=%d \r\n", i16Cnt); //%d for 16 bits variale
printf("\r\n");
for (i16Cnt=0xff01; i16Cnt<0xff08; i16Cnt++)
printf(" %x",i16Cnt);
printf("\r\n");
for (i32Cnt=0x2ff11; i32Cnt<0x2ff18; i32Cnt++)
printf(" %x",(unsigned int)(i32Cnt));//printf do not support 32bit variable
while(1);
}
**printf DO support 32bit variable**
回覆刪除printf(" %x",(unsigned int)(i32Cnt));//printf do not support 32bit variable
將此行換成以下便可正確輸出" 2ff11 2ff12 2ff13 2ff14 2ff15 2ff16 2ff17":
printf(" %lx",i32Cnt);