2020-01-23 14:38发布
techbaby 发表于 2014-5-27 22:14 以前项目中使用的代码,MCU貌似是C8051F520A
techbaby 发表于 2012-6-19 11:52 要学会查找keil帮助文件!
最多设置5个标签!
你将putchar()函数的实现包含在自己的源程序中,这样编译器会优先使用你改写的putchar()函数,而不会去使用其他地方的putchar()函数。
XON、XOFF是流控制字符,你可以查一下ASCII码表,其实这两个宏定义的值就是退格和回车,只是接收到这两个字符做一下特殊处理而已
以前项目中使用的代码,MCU貌似是C8051F520A
- /*
- ***************************************************************************************************
- *
- * 上海有限公司
- * 研 发 部
- * Shanghai Co.,Ltd
- * All Rights Reserved
- *
- *------------------------------------------------文件信息------------------------------------------
- * 文 件 名: uart0.c
- * 版 本: v0.0
- * 日 期: 2012.06.06
- * 作 者:
- * 描 述: uart0串口通信
- ***************************************************************************************************
- */
- /*
- ***************************************************************************************************
- * include files
- ***************************************************************************************************
- */
- // #pragma src
- #include "cpu.h"
- #include "uart0.h"
- #include "flash.h"
- #include "adc0.h"
- /*
- ***************************************************************************************************
- * predefinition
- ***************************************************************************************************
- */
- /*
- ***************************************************************************************************
- * constants ¯os & variables
- ***************************************************************************************************
- */
- #define BAUDRATE (9600) // Baud rate of UART in bps
- FRAME frame;
- //-----------------------------------------------------------------------------
- // UART0_Init
- //-----------------------------------------------------------------------------
- //
- // Return Value : None
- // Parameters : None
- //
- // Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
- //-----------------------------------------------------------------------------
- static void _UART0_Init (void)
- {
- SCON0 = 0x10; // SCON0: 8-bit variable bit rate
- // level of STOP bit is ignored
- // RX enabled
- // ninth bits are zeros
- // clear RI0 and TI0 bits
- #if (SYSCLK/BAUDRATE/2/256 < 1)
- TH1 = -(SYSCLK/BAUDRATE/2);
- CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
- CKCON |= 0x08;
- #elif (SYSCLK/BAUDRATE/2/256 < 4)
- TH1 = -(SYSCLK/BAUDRATE/2/4);
- CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
- CKCON |= 0x01;
- #elif (SYSCLK/BAUDRATE/2/256 < 12)
- TH1 = -(SYSCLK/BAUDRATE/2/12);
- CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
- #else
- TH1 = -(SYSCLK/BAUDRATE/2/48);
- CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
- CKCON |= 0x02;
- #endif
- TL1 = TH1; // Init Timer1
- TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
- TMOD |= 0x20;
- TR1 = 1; // START Timer1
- TI0 = 1; // Indicate TX0 ready
- ET1 = 1; // Timer1 interrupt enabled
-
- // ES0 = 1; // Enable UART0 interrupt
- }
- /*
- ***************************************************************************************************
- * 函数名称: uart0_init()
- * 输 入:
- * 输 出:
- * 作 者:
- * 日 期: 2012.06.15
- * 功能描述: uart0 init
- ***************************************************************************************************
- */
- void uart0_init(void)
- {
- _UART0_Init();
- frame.flag = FALSE;
- }
- /*
- * putchar (basic version): expands '
' into CR LF
- */
- char putchar (char c)
- {
- if (c == '
')
- {
- while (!TI0);
- TI0 = 0;
- SBUF0 = 0x0d; /* output CR */
- }
- while (!TI0);
- TI0 = 0;
- return (SBUF0 = c);
- }
- /*
- ***************************************************************************************************
- * 函数名称: uart0_init()
- * 输 入:
- * 输 出:
- * 作 者:
- * 日 期: 2012.06.15
- * 功能描述: uart0 init
- ***************************************************************************************************
- */
- void frame_scan(void)
- {
- if (frame.flag == TRUE)
- {
- if ((FRAME_START == frame.buf[0]) /* 帧开始 */
- && (FRAME_STOP == frame.buf[3])) /* 帧结束 */
- {
- if (FRAME_TYPE_V == frame.buf[1]) /* 帧类型:电压V */
- {
- if (FRAME_TYPE_INC == frame.buf[2]) /* 修改类型:增加 */
- {
- flash_change(TYPE_VOLTAGE, flash_voltage_value + ADC_VOLTAGE_MAX/2500);
- printf("SV+P
");
- }
- else if (FRAME_TYPE_DEC == frame.buf[2]) /* 修改类型:减少 */
- {
- flash_change(TYPE_VOLTAGE, flash_voltage_value - ADC_VOLTAGE_MAX/2500);
- printf("SV-P
");
- }
- }
- else if (FRAME_TYPE_I == frame.buf[1]) /* 帧类型:电流I */
- {
- if (FRAME_TYPE_INC == frame.buf[2]) /* 修改类型:增加 */
- {
- flash_change(TYPE_CURRENT, flash_current_value + 2);
- printf("SI+P
");
- }
- else if (FRAME_TYPE_DEC == frame.buf[2]) /* 修改类型:减少 */
- {
- flash_change(TYPE_CURRENT, flash_current_value - 2);
- printf("SI-P
");
- }
- }
- }
-
- frame.flag = FALSE;
- }
- }
- /*
- ***************************************************************************************************
- * 函数名称: uart0_init()
- * 输 入:
- * 输 出:
- * 作 者:
- * 日 期: 2012.06.15
- * 功能描述: uart0 init
- ***************************************************************************************************
- */
- // static void uart0_isr(void) interrupt INTERRUPT_UART0
- // {
- // static bool flag = FALSE;
- // static int8u cnt;
- // if (RI0)
- // {
- // if (frame.flag == FALSE)
- // {
- // if (flag == TRUE)
- // {
- // frame.buf[cnt++] = SBUF0;
- // if (cnt > FRAME_BUF_MAX - 1)
- // {
- // cnt = 0;
- // frame.flag = TRUE;
- // flag = FALSE;
- // }
- // }
- // else
- // {
- // frame.buf[0] = SBUF0;
- //
- // if (FRAME_START == frame.buf[0])
- // {
- // cnt = 1;
- // flag = TRUE;
- // }
- // }
- // }
- // }
- //
- // RI0 = 0;
- // TI0 = 0;
- // }
复制代码近楼主的意思
这段程序中的Putchar();用的应该是keil目录下的库函数,这样printf就直接用程序中的putchar();了
流控制是通信协议,协调速率匹配问题。。。。。。这些东西属于计算机的知识吧,不容易真正理解
学习了。
一周热门 更多>