因为之前刚入职,对串口调试不了解,下面整理一下书上的串口程序。 移植性还比较强
使用说明:MC9S12系列的串口有两种查询方式
1》使用中断方式查询
2》在主函数中使用轮询的方式的方法进行查询
这两种方法在下面函数中都有体现,需要在用的时候注意分别提取
主要是初始化的SCI1CR2的寄存器配置和调用中断的时候,注意串口1的中断号是VectorNumber_Vsci1 21
注意串口0的中断号是VectorNumber_Vsci0 20
下面是放到主函数中采用轮询方式时调用的函数
/*************************串口轮询方式检测*********************************************************************************/
#if 0
if(SCI1SR1_RDRF)
{
JieSHOU_Ddate[i]=SCI1DRL;
i++;
if(i==12)
{
i=0;
JieSHOU_flag=1; //接收够12 个数组数据
}
}
//MFD_Printf("JieSHOU_Ddate %d!!rn",JieSHOU_Ddate[i]);
#endif
*************************************************************************************************************************************************
下面是原版函数,具体使用可根据自己需求改动!
********
/*---- include ---------------------------------------*/
#include Printf.h"
#include #include /*---- config-----------------------------------------*/ #if MFD_DBGUG const char Hex[] = "0123456789ABCDEF"; unsigned int JieSHOU_Ddate[12]; char ASCALL_TO16[4]; int i=0; char JieSHOU_flag; unsigned int JieSHOU(); /*----------------------------------------------------*/ /******************************************************* * 函数名:void USART_Init(void) * 创建:ZXL * 功能:串口初始化 * 版本:1.0.0 * 日期:2019年1月17日 *******************************************************/ void USART_Init(void) { /*********只发配置************************/ #if 0 SCI1BD = 14; //波特率115200 SCI1CR1 = 0x00; //模式配置 数据位:8 校验位:无 停止位:1 SCI1CR2 = 0x08; //发送接收配置 #endif #if 1 /*********接收中断方式*******************/ SCI1BD = 14; //波特率115200 SCI1CR1 = 0x00; //模式配置 数据位:8 校验位:无 停止位:1 SCI1CR2 = 0x2c; //发送接收配置,,接收使能、、接收器满中断使能 #endif // SCI1CR2_ILIE=1;线路空闲使能 /*********接收查询方式*******************/ #if 0 SCI1BD = 14; //波特率115200 SCI1CR1 = 0x00; //模式配置 数据位:8 校验位:无 停止位:1 SCI1CR2 = 0x0c; //发送接收配置,,接收使能、、接收器满中断使能 #endif } /******************************************************* * 函数名:void USART_SendByte(uint16_t Data) * 创建:ZXL * 功能:串口发送函数 * 版本:1.0.0 * 日期:2019年1月2日 *******************************************************/ static void USART_SendByte(uint16_t Data) { SCI1DRL = Data; while(!SCI1SR1_TC) { ; } } /******************************************************* * 函数名:void DoPrint( const char *fmt, va_list ap ) //va_list char * 创建:ZXL * 功能:执行打印函数 * 版本:1.0.0 * 日期:2019年1月2日 *******************************************************/ static void DoPrint( const char *fmt, va_list ap ) { char ch; char *ptr; int value; uint8_t fl_zero; uint32_t i, fl_len, cnt, mask = 1; while(1) { switch(ch = *fmt++) { case 0: return; case '%': if( *fmt != '%' ) { break; } else { } fmt++; default: USART_SendByte(ch); continue; } fl_zero = 0; cnt = 0; ch = *fmt++; if(ch == '0') { fl_zero = 1; ch = *fmt++; cnt = ch - '0'; ch = *fmt++; } else if( (ch >= '0') && (ch <= '9')) { cnt = ch - '0'; ch = *fmt++; } else { } fl_len = 4; switch(ch) { case 'l': case 'L': ch = *fmt++; fl_len = 4; break; case 'b': case 'B': ch = *fmt++; fl_len = 1; break; default: break; } switch(ch) { case 'd': case 'u': switch(fl_len) { case 1: if(ch == 'd') { value = (char)va_arg(ap, int); } else { value = (uint8_t)va_arg(ap, int); } break; case 4: if(ch == 'd') { value = (uint32_t)va_arg(ap, uint32_t); } else { value = (uint32_t)va_arg(ap, uint32_t); } break; default: break; } if(value < 0) { USART_SendByte('-'); value = value*(-1);
上一篇:freescale MC9S12G128 SCI,printf使用
下一篇:MC9S12G128 PLL设置
推荐阅读最新更新时间:2024-11-04 15:50
设计资源 培训 开发板 精华推荐
- GK64左移
- NCP1421LEDGEVB:高达 600mA 的 DC-DC 转换器评估板
- AND8031/D,用于 MC33363B 8W、1.8V 交流转直流单路输出电源
- TC682 反相倍压器的典型应用
- MIKROE-3448,用于 TPA3138D2 18.5 W/ch 立体声 D 类音频放大器的音频放大器 6 节拍板
- 使用 Microchip Technology 的 MIC23451-AAAYFL 的参考设计
- 易微联四路开关主控板
- LTC2945IMS-1 轨到轨双向电流和功率监视器的典型应用
- LT6656BIDC-5、5V 升压输出电流电压基准的典型应用
- 使用 Infineon Technologies AG 的 ICE2B265CKLA1 的参考设计