STC 12C5204AD 数据采集,串口发送;接受数据,显示至屏幕上 单片机STC12C5A60S2的串口2发送的数据怎么在串口助...

www.zhiqu.org     时间: 2024-06-15
* ------------------------- 宏晶科技 04/15/2009 -------------------- */
/* --------------------Mobile:0755-82948412,13922805190---------------- */

// 本程序演示 STC12C5AxxAD 系列 MCU 的 A/D 转换功能。时钟 18.432MHz
// 转换结果以 16 进制形式输出到串行口,可以用串行口调试程序观察输出结果。
//---------------------------------------------------------------------
//#include <REG52.H>
#include <intrins.H>
#include "NEW_8051.H"
//---------------------------------------------------------------------
typedef unsigned char uchar;
typedef unsigned int uint;
//---------------------------------------------------------------------
//以下选择 ADC 转换速率,只能选择其中一种
// SPEED1 SPEED0 A/D转换所需时间
#define AD_SPEED 0x60 // 0110,0000 1 1 70 个时钟周期转换一次,
// CPU工作频率21MHz时 A/D转换速度约 300KHz
//#define AD_SPEED 0x40 //0100,0000 1 0 140 个时钟周期转换一次
//#define AD_SPEED 0x20 //0010,0000 0 1 280 个时钟周期转换一次
//#define AD_SPEED 0x00 //0000,0000 0 0 420 个时钟周期转换一次
//---------------------------------------------------------------------
void initiate_RS232 (void); //串口初始化
void Send_Byte(uchar one_byte); //发送一个字节
uchar get_AD_result(uchar channel);
void delay(uchar delay_time); //延时函数
//---------------------------------------------------------------------
void main()
{
uint ADC_result;

initiate_RS232(); //波特率 = 115200
P1ASF = 0x02; //0000,0010, 将 P1.1 置成模拟口

//ADRJ = AUXR1^2:
// 0: 10 位A/D 转换结果的高8 位放在ADC_RES 寄存器, 低2 位放在ADC_RESL 寄存器
// 1: 10 位A/D 转换结果的最高2 位放在ADC_RES 寄存器的低2 位, 低8 位放在ADC_RESL 寄存器
AUXR1 &= ~0x04; //0000,0100, 令 ADRJ=0
// AUXR1 |= 0x04; //0000,0100, 令 ADRJ=1

ADC_CONTR |= 0x80; //1000,0000 打开 A/D 转换电源
while(1)
{
ADC_result = get_AD_result(1);//P1.1 为 A/D 当前通道, 测量并发送结果
Send_Byte(0xAA); //为便于观察, 发送 2 个 0xAA
Send_Byte(0xAA);
Send_Byte(ADC_result);
delay(0x1);
}
}
//---------------------------------------------------------------------
void delay(uchar delay_time) // 延时函数
{
uint n;
while(delay_time--)
{
n = 6000;
while(--n);
}
}
//---------------------------------------------------------------------
#define Fosc 18432000
#define BAUD 115200 //波特率
#define RELOAD_115200 (256 - (Fosc/16*10/BAUD+5)/10 ) //1T模式, 波特率加倍
#define BRTx12_enable() AUXR |= 0x04 //BRT 独立波特率发生器的溢出率快 12 倍
#define BRT_start() AUXR |= 0x10 //启动独立波特率发生器 BRT 计数。

void initiate_RS232 (void) //串口初始化
{
ES = 0; //禁止串口中断
SCON = 0x50; //可变波特率. 8位无奇偶校验

AUXR |= 0x01; //使用独立波特率发生器
PCON |= 0x80; //波特率加倍
BRTx12_enable(); //BRT 独立波特率发生器的溢出率快 12 倍
BRT = RELOAD_115200; //设置独立波特率发生器 BRT 的自动重装数
BRT_start(); //启动独立波特率发生器 BRT 计数。

ES = 1;
}
//---------------------------------------------------------------------
void Send_Byte(uchar one_byte) //发送一个字节
{
TI = 0; //清零串口发送中断标志
SBUF = one_byte;
while (TI == 0);
TI = 0; //清零串口发送中断标志
}
//---------------------------------------------------------------------
uchar get_AD_result(uchar channel)
{
uchar AD_finished=0; //存储 A/D 转换标志

ADC_RES = 0;
ADC_RESL = 0;

channel &= 0x07; //0000,0111 清0高5位
ADC_CONTR = AD_SPEED;
_nop_();
ADC_CONTR |= channel; //选择 A/D 当前通道
_nop_();
ADC_CONTR |= 0x80; //启动 A/D 电源
delay(1); //使输入电压达到稳定
ADC_CONTR |= 0x08; //0000,1000 令 ADCS = 1, 启动A/D转换,
AD_finished = 0;
while (AD_finished ==0 ) //等待A/D转换结束
{
AD_finished = (ADC_CONTR & 0x10); //0001,0000 测试A/D转换结束否
}
ADC_CONTR &= 0xE7; //1111,0111 清 ADC_FLAG 位, 关闭A/D转换,

return (ADC_RES); //返回 A/D 高 8 位转换结果
}

就是点阵显示被,用片内AD采集在用串口发送出去,就OK了

STC12C5204AD单片机的串口通讯范例程序怎么运行不正常啊~

下载程序时将硬件调试里面的选用内部IRC时钟前面的对号去掉单片机就使用外部时钟了。

更换一个串口助手测试看看,排除串口软件的问题,测试是否是usb转串口驱动或者串口线的问题。
常备几个串口助手,格西烽火、SSCOM、串口调试助手等都比较稳定。




#国面奖# 模拟量经5vad转换后连接3.3v单片机,中间需要加东西吗 -
(13016479031): 5vad转换后是串行输出数据吗?还是并行输出数据的?单片机怎么去读取结果.5V的AD转换器,是不能直接与3.3v单片机相连的,需要电平转换,所以,要看A/D转换器与单片机的连接线是多少,如果是串行读取数据还好办,最多也就是3条线,进行电平转换还不算麻烦.不过,你可以查一下3.3v单片机的引脚允许加的信号电压是多少,如果可以加到5V信号,就可以直接相连了,否则就要用电平转换电路了.

#国面奖# 两块单片机进行无线通信,无线模块如何选择? -
(13016479031): 一个发送,一个接收.关于315M无线模块,一般是一个串行的DATA口,超再生接收模块也是这样一个DATA数据口,不过两者对通信数据(理解为通信波形)不是一致的,像直接使用串行口的话很难或者说基本不可能做到,数据的一致.也就...

#国面奖# 如何用串口调试助手测试STM32的ADC接口 -
(13016479031): 设定ADC采样周期,然后将采集后的数据用串口发送出来.懂事电子设计 Vgz

#国面奖# 关于如何利用AD采集到的数据实时的SCI发送到超级终端 -
(13016479031): DSP 传输到 PC,需要用到 USB转UART 转换器,推荐 PL2303,一款国产的转换器.将 DSP 的 AD信号 SDA 接 PL2303 的 接收端 RX.DSP的 时钟线 SDL 的时钟 必须要和 PL2303 的 波特率一致,否则 虽然 正弦波的波形 没有什么不同,但是时间上会有 降采样 发生.因此波特率要一致.

#国面奖# 谁能帮我解释一下这个单片机程序!急要!!!谢谢!!! -
(13016479031): ;这个程序涉及到串口通信过程:应该是从外部采集信息,再由单片机经串口发送至 ;显示电路显示吧.由于看不到你的仿真电路图,故不能清楚知道单片机接的外围电 ;路,所以只能帮你单单地解释下程序了,不过相信该说的都说得很清楚...

#国面奖# 请问如何把单片机采集到的温度数据通过串口传到电脑的串口助手里显示呢?急需程序....万分感谢!!! -
(13016479031): 1、制作一条RS232串口线,连接单片机和串口,,单片机如果采到温度数据,,,直接发送即可.2、如果不行,单片机可以外接RS485,也可以.

#国面奖# 如何从单片机的一个引脚接收串行数据计划用单片机接收传感器采集的数
(13016479031): ds18b20的传感器就是一线的,这个协议其实可以自己弄,如果两个设备都是你来写程序,之间的协议都可以由你确定.至于你让别人用c语言说明,估计没有人有时间跟你说明的.^_^ ,将嵌入式进行到底.

#国面奖# 关于单片机串口发送和接收问题:连续发送过来的数据如何接收? -
(13016479031): 不会的了 设备与设备之间要有一定的通信协议才能有良好的通信过程 比较明显的就是要配置一样的波特率 如用9600的波特率 那代表1S发送9600位也就是...

#国面奖# 你好,我现在在做一个放电的电路,我想利用单片机把放电曲线显示在电脑上,该怎么做啊? -
(13016479031): 利用AD采集其电压,精度要求不高的话可以用高精度电阻换算成电流,通过串口发送给电脑上的上位机,数据处理成曲线

#国面奖# 单片机按顺序用串口接收4个变量.,想分别得到这四个变量.并利用他们. -
(13016479031): 定义一个全局数组a[4],用于存放接收来的4个数据,然后用下面的串口接收中断将收到的数据存入数组.void UART_ISR(void) interrupt 4 { unsigned char temp,i; if(RI) { RI=0; temp=SBUF; a[k]=temp; k++; if(k==4)k=0; } }