C51单片机发送字符串程序怎么写

2024-11-25 23:45:27
推荐回答(3个)
回答1:

1、打开C51程序书写软件,新建工程,在弹出的对话框编辑工程名并保存到要保存的地方。

2、保存之后会弹出如下的窗口,点击Atmel的加号,选择AT89s52并确定。

3、此时就要开始建立程序了,点击如图的图标,新建程序,注意保存的时候一定要在名字后面加“.c”。

4、此时点击左边的文件夹,双击,会出现下一级的文件夹,继续双击,弹出对话框中找到刚保存的C程序。双击它或者点击对话框下面的add,关闭弹出的对话框,此时建立工程就完毕了。

5、点击窗口的Target 1左边的图标,选择如图的标签。勾选红色标注的地方(生成hex文件)。

6、 这样就进行后面的书写程序,编译吧。然后进入下一步,烧写程序,点击打开“打开程序文件”。到保存程序的地方,选中后缀为hax的文件并双击。

7、点击下载,此之前要连接单片机开发板,并且开发板电源处于关闭。

回答2:

void main(void)
{
Timer0_Init(); //定时器初始化
HC138_Init(); //HC138初始化
Uart1_Init(); //串口1初始化
while(1)
{
Uart1_Send_Data(Serial_Data); //循环发送数据
}
}
/***********************************************
函数名称:Uart1_Init
功 能:串口1初始化函数
入口参数:无
返 回 值:无
备 注:STC15F2K60S2单片机串口1
可以选择定时器1或者定时器2作为波特率发生器
************************************************/
void Uart1_Init(void)
{
SCON=0x50; //0101 0000 模式1: 1 位起始位; 8 位数据; 1 位停止位;允许接收
TMOD &=0x0f; //定时器1设定为16位重装模式
TL1 = 0xE8; //设定定时初值 波特率9600 11.0592MHz
TH1 = 0xFF; //设定定时初值
AUXR &=0xFE; //串口1选择定时器1为波特率发生器
TR1=1; //启动定时器
}
/***********************************************
*函数名称:Uart1_SendChar
*功 能:串口发送单个字符函数
*入口参数:Udat:欲发送的数据
*返 回 值:无
*备 注:无
************************************************/
void Uart1_SendChar(unsigned char Udat)
{
SBUF=Udat; //将要发送的数据放入串口数据缓冲区
while(!TI); //等待发送完成
TI=0; //清零TI发送完成标记
}
/***********************************************
函数名称:Uart1_Send_Data
功 能:串口1发送数据函数
入口参数:*Buf:指向数组的指针
返 回 值:无
备 注:无
************************************************/
void Uart1_Send_Data(unsigned char *Buf)
{
unsigned char i;
for(i=0;i<10;i++) //发送数组数据
{
Uart1_SendChar(*(Buf+i)); //发送数据
ToDisplayBuf(*(Buf+i)); //显示发送的数据
Delay_ms(1000); //延时,发送数据间隔
}
}
/***********************************************
函数名称:Timer0_Init
功 能:定时器0初始化函数
入口参数:无
返 回 值:无
备 注:无
************************************************/
void Timer0_Init(void)
{
TMOD |=0x01; //T0工作于十六位定时方式
//使用位操作,避免对其他定时器产生影响
TL0=0xcc; //定时初值2ms 11.0592MHz
TH0=0xf8;

ET0=1; //使能T0中断
EA=1; //使能总中断
TR0=1; //运行T0
}
/***********************************************
函数名称:Timer0_ISR
功 能:定时器0中断处理函数
入口参数:无
返 回 值:无
备 注:无
************************************************/

/***********************************************
函数名称:Delay_ms
功 能:STC 1T单片机1ms延时程序
入口参数:ms:延时的毫秒数
返 回 值:无
备 注:示波器实测1.035ms 外部时钟11.0592MHz
************************************************/
void Delay_ms(unsigned int ms)
{
unsigned int De_Cnt;
while( (ms--) != 0)
{
for(De_Cnt = 0; De_Cnt < 600; De_Cnt++);
}
}

C51单片机可能没有AUXR寄存器可以将其去掉
另外 函数声明记得加上

回答3:

#include //包含头文件,
#include"delay.h"
/*------------------------------------------------
函数声明
------------------------------------------------*/
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();

while (1)
{
SendStr("UART test!");
DelayMs(240);//延时循环发送
DelayMs(240);
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,
//通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}