写这篇博客,首要反省一下自己,由于曾经串口的程序,也和步进电机相同,时灵时不灵,我现在总算知道这是为什么了,由于51上有三个串口,一个公口,一个母口,一个usb转串口,这样的话,串口有3个了,我手头上有usb转串口线,也便是平常用来下程序的那根线,还有一个母口的线,今日我很纠结这两个的驱动,由于今日用usb转串口线,能够完成单片机和电脑的通讯,可是用母口线,奇怪的是他并没有幻想中的那种作用,更奇葩的是单片机下电它还能接纳到数据
尼玛了这么久,仍是看一下今日的程序,这个程序很简单,也便是上一次多次不爽的程序,这儿晒出来,还有串口小帮手的截图也发出来,供今后学习之用
/*———————————————–
称号:串口通讯
内容:连接好串口或许usb转串口至电脑,下载该程序,翻开电源
翻开串口调试程序,将波特率设置为9600,无奇偶校验
晶振11.0592MHz,发送和接纳运用的格局相同,如都运用
字符型格局,按复位重启程序,能够看到接纳到 UART test
然后在发送区发送恣意信息,接纳区回来相同信息,标明串口收发无误
————————————————*/
#include //包括头文件,一般状况不需要改动,头文件包括特别功用寄存器的界说
/*————————————————
函数声明
————————————————*/
void SendStr(unsigned char *s);
/*————————————————
串口初始化
————————————————*/
void InitUART (void)
{
SCON = 0x50; // SCON: 形式 1, 8-bit UART, 使能接纳
TMOD |= 0x20; // TMOD: TImer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: TImer 1 翻开
EA = 1; //翻开总中止
// ES = 1; //翻开串口中止
}
/*————————————————
主函数
————————————————*/
void main (void)
{
InitUART();
SendStr(“UART test,技术论坛:www.doflye.net 请在发送区输入恣意信息”);
ES = 1; //翻开串口中止
while (1)
{
}
}
/*————————————————
发送一个字节
————————————————*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*————————————————
发送一个字符串
————————————————*/
void SendStr(unsigned char *s)
{
while(*s!=‘\0’)// \0 表明字符串完毕标志,经过检测是否字符串结尾
{
SendByte(*s);
s++;
}
}
/*————————————————
串口中止程序
————————————————*/
void UART_SER (void) interrupt 4 //串行中止服务程序
{
unsigned char Temp; //界说暂时变量
if(RI) //判别是接纳中止发生
{
RI=0; //标志位清零
Temp=SBUF; //读入缓冲区的值
P1=Temp; //把值输出到P1口,用于调查
SBUF=Temp; //把接纳到的值再发回电脑端
}
if(TI) //如果是发送标志位,清零
TI=0;
}