#include "uart.h" /******************************************************************************* * 函 数 名 : Init_UART * 函数功能 : 初始化串口 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Init_UART() { P3M1 = 0X00; // P3M0 = 0x00; //UART_P_SW1 = 0X00; //S1_S[1:0] =>RXD=P3.0 TXD=P3.1 SCON = 0X50; //SM0=0,SM1=1 串口选择模式1 可变波特率8位数据方式 TMOD = 0X00; //定时器1为模式0(16位自动重载) AUXR = 0x40; //定时器1为1T模式 TL1 = (65536 - (FOSC/4/BAUD)); //设置波特率重装值 TH1 = (65536 - (FOSC/4/BAUD))>>8; TR1 = 1; //定时器1开始启动 ES = 1; //串口中断允许位 EA = 1; //总中断允许位 } /******************************************************************************* * 函 数 名 : UART_Send_Byte * 函数功能 : 发送一个字节的数据 * 输 入 : unsigned char dat * 输 出 : 无 *******************************************************************************/ void UART_Send_Byte(unsigned char dat) { ES=0; SBUF = dat; while(!TI); TI=0; ES=1; } /******************************************************************************* * 函 数 名 : UART_Send_String * 函数功能 : 发送字符串 * 输 入 : char *s * 输 出 : 无 *******************************************************************************/ void UART_Send_String(char *s) { while (*s){ //检测字符串结束标志 UART_Send_Byte(*s++); } } /******************************************************************************* * 函 数 名 : UART1_Routine * 函数功能 : 串口1中断 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void UART1_Routine(void) interrupt 4 { unsigned char i = 0,temp; if (RI){ RI=0; temp = SBUF; UAR[i]=temp; //接收到的数据存入数组UAR中 i++; } UART_Send_String(UAR); } uart.h代码 复制#ifndef _UART_H_ #define _UART_H_ #include <reg52.h> sfr UART_P_SW2 = 0XBA; sfr UART_P_SW1 = 0XA2; sfr AUXR = 0X8E; sfr P3M0 = 0xB2; sfr P3M1 = 0xB1; #define P3PU (*(unsigned char volatile xdata *)0xFE13) #define FOSC 11059200UL //系统时钟 #define BAUD 115200 //波特率设定115200,也可设置9600 extern char UAR[20]; //全局量 void Init_UART(); void UART_Send_Byte(unsigned char dat); void UART_Send_String(char *s); #endif 主函数代码:复制void main(void) { //Init_PWM(); Init_UART(); //UART_Send_String("Welcome to Uart"); //Set_PWM1_Value(0x100); //Start_PWM(); while(1) { UART_Send_Byte('1'); delay(50000); } }
#ifndef _UART_H_ #define _UART_H_ #include <reg52.h> sfr UART_P_SW2 = 0XBA; sfr UART_P_SW1 = 0XA2; sfr AUXR = 0X8E; sfr P3M0 = 0xB2; sfr P3M1 = 0xB1; #define P3PU (*(unsigned char volatile xdata *)0xFE13) #define FOSC 11059200UL //系统时钟 #define BAUD 115200 //波特率设定115200,也可设置9600 extern char UAR[20]; //全局量 void Init_UART(); void UART_Send_Byte(unsigned char dat); void UART_Send_String(char *s); #endif 主函数代码:复制void main(void) { //Init_PWM(); Init_UART(); //UART_Send_String("Welcome to Uart"); //Set_PWM1_Value(0x100); //Start_PWM(); while(1) { UART_Send_Byte('1'); delay(50000); } }
void main(void) { //Init_PWM(); Init_UART(); //UART_Send_String("Welcome to Uart"); //Set_PWM1_Value(0x100); //Start_PWM(); while(1) { UART_Send_Byte('1'); delay(50000); } }
收藏0 举报
xyz549040622 发表于 2020-8-28 11:00 1.16进制接收到的字符时多少 2.关掉串口中断使用发送函数试试 3.没有调试,感觉你串口中断中使用阻塞发送不 ...
资深技术 发表于 2020-8-28 20:12 这个官网有例程,我试过,肯定好用。
锡城筱凯 发表于 2020-8-29 13:39 我用的是内部晶振,看手册上说是24Mhz的,波特率计算出来应是115200的,但是电脑上用28800接收才正常,没 ...
ayb_ice 发表于 2020-8-28 08:27 示波器拿出来
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
人才类勋章
3
15
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号