完善代码#include <reg52.h> #include "uart.h" #include <stdlib.h> sbit AD0808_CS = P3^0; //?????? sbit AD0808_CLK = P3^1; //?????? sbit AD0808_DI = P3^2; //???????? sbit AD0808_DO = P3^3; //???????? void AD0808_Convert(unsigned int *data) { unsigned char i; unsigned int result = 0; AD0808_CS = 0; //??AD0808 AD0808_CLK = 0; //?????? AD0808_DI = 1; //???????? for(i = 0; i < 8; i++) //?AD0808???????? { AD0808_CLK = 1; AD0808_CLK = 0; } for(i = 0; i < 12; i++) //?????????? { AD0808_CLK = 1; result = (result << 1) | AD0808_DO; AD0808_CLK = 0; } AD0808_CS = 1; //??AD0808 *data = result; } void delay_ms(int xms) { unsigned char i; for( ; xms > 0; xms--) for(i = 110; i > 0; i--); } float Data[1] = {0}; void main() { unsigned char i = 0; uart_init(); while(1) { if(Rec_flag) //??????? { delay_ms(1); unsigned int result = 0; AD0808_Convert(&result); //??AD0808???? Data[0] = (float)result * 5.0 / 4096.0; //???????????,???????5V i++; SendData(); Rec_flag = 0; } } }
时间: 2023-06-29 18:17:05 浏览: 127
uart.rar_LM3S UART_LM3S uart.h_cortex uart_lm3s
这段代码还是缺少一些定义和实现,我帮你补充一下:
```
void uart_init(void) //串口初始化
{
TMOD = 0x20; //定时器1模式2(8位自动重装载)
TH1 = 0xfd; //波特率9600
TL1 = TH1;
TR1 = 1; //启动定时器1
SM0 = 0; //串口工作方式
SM1 = 1;
REN = 1; //串口接收使能
EA = 1; //总中断使能
ES = 1; //串口中断使能
}
void SendData() //发送数据
{
unsigned char i;
for(i=0;i<1;i++)
{
SBUF = Data[i]; //通过串口发送数据
while(TI==0);
TI=0;
}
}
```
这段代码中,uart_init函数用于初始化串口,包括设置定时器1的工作模式和波特率等。SendData函数用于将Data数组中的数据通过串口发送出去。需要注意的是,由于发送的是浮点数,所以需要一次发送一个字节,否则会出现数据不正确的情况。
还有一些宏定义也是缺少的,你需要自己根据需要进行定义。例如:
```
#define Rec_flag P3_2
```
这个宏定义是用来表示接收标志位的引脚,你需要根据实际情况进行定义。
阅读全文