久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
這邊寫(xiě)程序,最后想把ICC通信接收到的打印出來(lái),但是51單片機(jī)里面不能用printf語(yǔ)句?
[打印本頁(yè)]
作者:
yxyxyxyx
時(shí)間:
2022-9-8 13:54
標(biāo)題:
這邊寫(xiě)程序,最后想把ICC通信接收到的打印出來(lái),但是51單片機(jī)里面不能用printf語(yǔ)句?
想把接收到的程序用串口打印出來(lái),咋寫(xiě)類,大佬們指點(diǎn)一下
單片機(jī)源程序如下:
****************************************************************************
* @file main.h
* @author
* @version V1.0
* @brief IIC Slave Mode Test
****************************************************************************
*#include "RX8F103.h"
#define STCON MSCON
#define SRXBUF MSRXBUF
#define STXBUF MSTXBUF
#define SSTAT0 MSSTAT0
#define SSTAT1 MSSTAT1
#define SIEN0 MSIEN0
#define SIEN1 MSIEN1
#define SSADDR MSADDR
//I2C主機(jī)多字節(jié),單字節(jié)讀寫(xiě)
//I2C Master 和 I2C Slave通信協(xié)議
/*
S + DevAdd(Read) + BayteN + Stop
S + DevAdd(Write) + BayteN + Stop
*/
//I2C從機(jī)地址 7位地址
#define I2C_SLAVE_ADD 0x50
#define BUFF_MAX 128
unsigned char xdata DataBuf[BUFF_MAX];
unsigned char DataTxIndex = 0;
unsigned char DataRxIndex = 0;
unsigned char InterruptIndex = 0;
unsigned char WrtieTxBufFlag = 0;
void EUart0_SendOneChar(char c)
{
ES0=0; //發(fā)送數(shù)據(jù)時(shí)關(guān)串口中斷
TI0=0; //清TI位
S0BUF = c; //將待發(fā)送字符放入串口數(shù)據(jù)緩沖寄存器,并開(kāi)始傳輸。
while(!TI0); //等待傳送結(jié)束。當(dāng)字符發(fā)送結(jié)束后由硬件置位請(qǐng)求中斷,
//此時(shí)while循環(huán)結(jié)束,而串口中斷處理函數(shù)需等到ES重新置1后才可能響應(yīng)。
TI0=0; //軟件清TI位,亦可在中斷處理函數(shù)中清0
ES0 = 1; //開(kāi)串口中斷
}
void EUart0_SendString(char *st)
{
while(*st)
{
EUart0_SendOneChar(*st++);
}
}
void Uart0_init(void)
{
UART0PORTEN = 1; //串口端口使能
S0CON = 0x50; //SCON: Mode 1, 8-bit UART, Enable Rcvr
S0RELH = 0x03; //S0RELH + S0RELL 構(gòu)成波特率設(shè)置S0REL[9:0]
S0RELL = 0xF7; //Baud rate = SYSCK/(16×(1024-S0REL)) SYSCK跟CLKDIV寄存器有關(guān) 波特率為115200
ES0 = 1; //允許串口中斷位
EUart0_SendString("RX8F103 UART0 Init OK!\r\n");
}
void I2c_Init(void)
{
I2CPORTEN = 1; //IIC PORT口使能
TOPCON = 0x00; //IIC Slave
SSADDR = I2C_SLAVE_ADD;//IIC 從機(jī)地址寄存器
SIEN0 = 0x01; //正常結(jié)束中斷
SIEN1 = 0x21; //使能接收區(qū)滿中斷
STCON = 0x40; //使能I2C
}
void I2c_TxBuf_Reset(void)
{
TOPCON |= 0x02;
TOPCON &= 0xFD;
I2c_Init();
}
void main(void)
{
unsigned char i;
CLKCON |= 0x1F; //默認(rèn)所有時(shí)鐘打開(kāi)
RSTPORTEN = 1; //使能復(fù)位功能
Uart0_init();
//初始化數(shù)組
for (i=0; i<BUFF_MAX; i++)
{
DataBuf[i] = 0x10+i;
}
I2c_Init();
EI2CFIFO = 1; //開(kāi)IIC FIFO 中斷
EI2CRXTX = 1; //開(kāi)IIC TXRX 中斷
EA = 1; //使能總中斷
while(1);
}
/*
GC
SUNF
SOVF
SNE
以上任意一個(gè)或多個(gè)事件發(fā)送,均為產(chǎn)生EI2CRXTX中斷
*/
void I2C_Slave_TRX_ISR(void) interrupt EI2CRXTX_VECTOR //TRX中斷
{
unsigned char ReadData;
//Transmitted Data Byte not ready
if (0x04 == (SSTAT0 & 0x04))
{
//清中斷標(biāo)志位
SSTAT0 &= 0xFB;
}
//Receive Overflow
if (0x02 == (SSTAT0 & 0x02))
{
ReadData = SRXBUF;
//清中斷標(biāo)志位
SSTAT0 &= 0xFD;
}
//Normal End
if (0x01 == (SSTAT0 & 0x01))
{
InterruptIndex = 0;
WrtieTxBufFlag = 0;
I2c_TxBuf_Reset();
//清中斷標(biāo)志位
SSTAT0 &= 0xFE;
}
}
/*
STBE
STBF
SRBE
SRBF
以上任意一個(gè)或多個(gè)事件發(fā)送,均為產(chǎn)生EI2CFIFO中斷
*/
void I2C_Slave_FIFO_ISR(void) interrupt EI2CFIFO_VECTOR //FIFO中斷
{
unsigned char ReadData;
//Transmission buffer is empty
if (0x20 == (SSTAT1 & 0x20))
{
if ((DataTxIndex < BUFF_MAX) && (1 == WrtieTxBufFlag))
{
STXBUF = DataBuf[DataTxIndex];
DataTxIndex++;
}
SSTAT1 &= 0xDF;
}
// Reception buffer is full
if (0x01 == (SSTAT1 & 0x01))
{
ReadData = SRXBUF;
if (0 == InterruptIndex)
{
//收到Sub地址
if (ReadData < BUFF_MAX)
{
DataTxIndex = ReadData;
DataRxIndex = ReadData;
WrtieTxBufFlag = 1;
}
}
else
{
WrtieTxBufFlag = 0;
if (DataRxIndex < BUFF_MAX)
{
DataBuf[DataRxIndex] = ReadData;
DataRxIndex++;
}
}
InterruptIndex++;
SSTAT1 &= 0xFE;
}
}
/*---------------------------------EUART0 ISR--------------------------------------------*/
void EUART0ISR(void) interrupt EUART0_VECTOR //using 2
{
if(S0CON & RI0) //接收中斷
{
}
RI0 = 0; //清中斷標(biāo)志位
}
復(fù)制代碼
作者:
coody_sz
時(shí)間:
2022-9-8 15:51
printf語(yǔ)句是編譯器提供的,只要你的編譯器支持,就沒(méi)有問(wèn)題,剩下的就是你程序的問(wèn)題了。
串口初始化好了,printf語(yǔ)句就可以使用。
作者:
yxyxyxyx
時(shí)間:
2022-9-8 15:59
編譯器里面不支持printf語(yǔ)句,我試了一下田間了stdio.h“文件,編譯不成功
作者:
123syf
時(shí)間:
2022-9-8 16:39
printf語(yǔ)句需要重定向否則沒(méi)法正常使用
作者:
hz_dyg
時(shí)間:
2022-9-8 21:28
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
* @brief Retargets the C library printf function to the USART.
* @param None
* @retval None
*/
#if 1
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the USART */
PortIO_SendChar((uint8_t) ch);
return ch;
}
你需要重新定向你的輸出 PortIO_SendChar((uint8_t) ch); 換成你自己的串口輸出,前提是初始化好你的串口
作者:
yzwzfyz
時(shí)間:
2022-9-9 09:25
樓主還沒(méi)有弄懂單片機(jī)是如何通訊的。補(bǔ)一下吧。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品国产乱码久久久久久影片
|
久久黄网
|
午夜精品一区二区三区在线视频
|
国产黄色大片在线观看
|
无码一区二区三区视频
|
亚洲精品久久久久久久久久久
|
亚洲视频免费一区
|
久久精品69
|
99久久中文字幕三级久久日本
|
欧美一区二区三区在线观看视频
|
动漫www.被爆羞羞av44
|
国产精品欧美精品
|
a视频在线
|
在线国产一区
|
欧美国产亚洲一区二区
|
久久99精品久久久久久
|
伊人网综合在线观看
|
国产亚洲欧美在线视频
|
欧美一区二区三区视频
|
日韩第1页
|
视频第一区
|
在线视频一区二区
|
国产午夜av片
|
成人在线免费
|
99在线免费观看视频
|
成人免费大片黄在线播放
|
四虎精品在线
|
亚洲视频在线一区
|
午夜免费视频观看
|
午夜欧美
|
www.色综合
|
国产精品7777777
|
天天操,夜夜爽
|
中文字幕亚洲无线
|
欧美激情在线精品一区二区三区
|
av网站观看
|
欧美 日韩 综合
|
成人在线观看欧美
|
91大神在线看
|
亚洲综合无码一区二区
|
一区二区免费视频
|