#include <reg51.h> void main() //主函数 { unsigned char send='A'; TMOD=0x20; //定时器1工作于方式2 TL1=0xf4; //波特率为2400b/s TH1=0xf4; TR1=1; SCON=0x40; //定义串行口工作于方式1 SBUF=send; // 发送1个数据 while(TI==0); // 查询等待发送是否完成 TI=0; // 发送完成,TI由软件清0 while(1); }将此程序改写为发送8位数字的c语言程序
时间: 2024-03-29 13:42:05 浏览: 42
#include <reg51.h>
void main() //主函数
{
unsigned char send = 123; //要发送的8位数字,这里以123为例
TMOD = 0x20; //定时器1工作于方式2
TL1 = 0xf4; //波特率为2400b/s
TH1 = 0xf4;
TR1 = 1;
SCON = 0x40; //定义串行口工作于方式1
SBUF = send; //发送数据
while(TI == 0); //查询等待发送是否完成
TI = 0; //发送完成,TI由软件清0
while(1);
}
相关问题
#include <reg52.h> typedef unsigned char u8; typedef unsigned int u16; void UART_int() { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //设置定时器模式 TMOD |= 0x20; //设置定时器模式 TL1 = 0xF9; //设置定时初始值 TH1 = 0xF9; //设置定时重载值 ET1 = 0; //禁止定时器中断 TR1 = 1; //定时器1开始计时 EA=1; ES=1; } void UART_sendbyte (u8 byte) { SBUF=byte; while(TI==0); TI=0; } void UART_routine () interrupt 4 { if (RI==1) { P2=SBUF; UART_sendbyte(SBUF);RI==0; } } #include <reg52.h> #include "uart.h" typedef unsigned char u8; typedef unsigned int u16; #define LED P2 void delay_10us (u16 count) { while(count--); } u8 SEC=0; void main() { UART_int(); while(1) { } }
这段代码是一个简单的51单片机串口中断程序,实现了串口的数据发送和接收功能。
首先,在UART_int()函数中进行了串口的初始化配置,包括使能波特率倍速位,设置数据位数和可变波特率等。同时,设置了定时器1的相关参数,用于生成波特率时钟。最后,使能了全局中断和串口中断。
在UART_sendbyte()函数中,将要发送的数据写入SBUF寄存器,并通过循环等待TI标志位置为1,表明数据发送完成。然后将TI标志位清零,准备下一次发送。
在UART_routine()函数中,判断RI标志位是否为1,表示有数据接收。如果有数据接收,则将接收到的数据写入P2口,并通过调用UART_sendbyte()函数将接收到的数据再发送出去。最后,将RI标志位清零。
在主函数main()中,调用UART_int()函数进行串口的初始化配置。然后进入一个无限循环,可以在循环中添加其他代码进行其他功能的实现。
以上是这段代码的大致逻辑,具体的功能实现和其他相关代码可以根据需求进行添加和修改。
main.c文件为 #include <reg52.h> #include "uart.h" #include "delay_10us.h" typedef unsigned char u8; typedef unsigned int u16; u8 SEC=0; void main() { UART_int(); while (1) { UART_sendbyte(SEC) delay_10us(50000); delay_10us(50000); SEC++; } } uart.c文件为 #include <reg52.h> typedef unsigned char u8; typedef unsigned int u16; void UART_int() { PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //设置定时器模式 TMOD |= 0x20; //设置定时器模式 TL1 = 0xF3; //设置定时初始值 TH1 = 0xF3; //设置定时重载值 ET1 = 0; //禁止定时器中断 TR1 = 1; //定时器1开始计时 EA=1; ES=1; } void UART_sendbyte (u8 byte) { SBUF=byte; while(TI==0); TI=0; } void UART_routine () interrupt 4 { if (RI==1) { P2=~SBUF; UART_sendbyte(SBUF); RI=0; } } delay_10us.c文件如下 void delay_10us (unsigned int count) { while(count--); }
根据你提供的代码,有以下几个问题需要解决:
1. main.c文件中,在UART_sendbyte函数的调用语句末尾缺少分号。需要在UART_sendbyte(SEC)后面添加分号,即改为UART_sendbyte(SEC);
2. uart.c文件中,在UART_routine函数中,P2=~SBUF;的作用是将SBUF取反后赋值给P2,可能不是你想要的逻辑。如果想将SBUF的值输出到P2口,可以直接将P2=SBUF;。
3. delay_10us.c文件中,delay_10us函数的实现为空函数体,没有实际的延迟操作。你需要根据具体需求,添加延迟操作的代码。
请根据上述建议进行相应的修改,以解决代码中的问题。如果还有其他问题,请提供更多细节信息,以便更好地帮助你。
阅读全文