Comunicación de microordenador de un solo chip-equipo dual

** Función de realización: ** Ambas máquinas pueden controlar el módulo de potenciómetro de la otra para encender y apagar (la microcomputadora de un solo chip es una microcomputadora de un solo chip Puzhong Technology 89C51)
** Conexión: ** P3 1 se conecta a P3 0, P3 0 se conecta a P3 1;
principio experimental:
1. Diagrama esquemático del circuito de conversión de analógico a digital AD:

2. Los principales indicadores técnicos del convertidor analógico-digital
AD : ①Resolución La resolución de
ADC se refiere a la cantidad de cambio en el voltaje analógico de entrada requerido para hacer que la salida digital cambie a digital adyacente. Representación de dígitos binarios de uso común. Por ejemplo, la resolución de un ADC de 12 bits es de 12 bits, o la resolución es 1 / (2 ^ 12) de la escala completa.
②El error de cuantificación
ADC convierte la cantidad analógica en una cantidad digital y aproxima la cantidad analógica con la cantidad digital Este proceso se llama cuantificación. El error de cuantificación es el error causado por la cuantificación de la cantidad analógica por el número finito de ADC.
③Error de
compensación El error de compensación se refiere al valor en el que la señal de salida no es cero cuando la señal de entrada es cero, por lo que a veces se denomina error de cero. Suponiendo que el ADC no tiene un error no lineal, la conexión entre los puntos medios de los pasos de la curva característica de conversión debe ser una línea recta, y el valor de voltaje de entrada correspondiente a la intersección de esta línea recta y el eje horizontal es el error de compensación.

④Error de escala
completa El error de escala completa también se denomina error de ganancia. El error de escala completa del ADC se refiere a la diferencia entre el voltaje de entrada real y el voltaje de entrada ideal correspondiente al código de salida de escala completa.
⑤ Linealidad La
linealidad a veces se denomina no linealidad, que se refiere a la desviación máxima entre las características de conversión reales del convertidor y la línea recta ideal.
⑥ Precisión absoluta
En un convertidor, el valor máximo de la diferencia entre la entrada analógica real y la entrada analógica teórica correspondiente a cualquier número se denomina precisión absoluta. Para ADC, se puede medir en el punto medio de cada paso, que incluye todos los errores.
⑦Tasa de
conversión La tasa de conversión de ADC es la velocidad a la que los datos se pueden convertir repetidamente, es decir, el número de conversiones por segundo. El tiempo necesario para completar una conversión A / D (incluido el tiempo de estabilización) es el inverso de la tasa de conversión.
3. Descripción de la palabra de control:

Es decir, en este experimento, quiero detectar la señal analógica del potenciómetro de conversión y el valor del registro de comando de la palabra de control es 0X94.
4. Diagrama de tiempo:

Como se puede ver en el diagrama de tiempos, primero debemos escribir y luego leer. Antes de escribir, debemos bajar la señal del reloj y leer los datos de 12 bits;
código de lenguaje C:

①shuangji.c
#include "reg52.h"			 
#include"XPT2046.h"	

#define uchar unsigned char
#define uint unsigned int

sbit LSA=P2^2;//数码管使能
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit K3=P3^2; //独立按键
sbit K4=P3^3;
uchar flag;   //存储接受的指令

uchar disp[4];
uchar code smgduan[10]={
    
    0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示

void delay(uint i)
{
    
    
	while(i--);	
}

void datapros()
{
    
    
	uint temp;
	static uchar i;
	if(i==50)
	{
    
    
		i=0;
		temp = Read_AD_Data(0x94);		//   AIN0 电位器
	}
	i++;
	disp[0]=smgduan[temp/1000];//千位
	disp[1]=smgduan[temp%1000/100];//百位
	disp[2]=smgduan[temp%1000%100/10];//个位
	disp[3]=smgduan[temp%1000%100%10];		
}

void DigDisplay()
{
    
    
	uchar i;
	for(i=0;i<4;i++)
	{
    
    
		switch(i)	 //位选,选择点亮的数码管,
		{
    
    
			case(0):
				LSA=1;LSB=1;LSC=1; break;//显示第0位
			case(1):
				LSA=0;LSB=1;LSC=1; break;//显示第1位
			case(2):
				LSA=1;LSB=0;LSC=1; break;//显示第2位
			case(3):
				LSA=0;LSB=0;LSC=1; break;//显示第3位	
		}
		P0=disp[i];//发送数据
		delay(100); //间隔一段时间扫描	
		P0=0x00;//消隐
	}		
}

void UART_INIT(){
    
    
	SCON=0x50;//设定串口工作方式0101 0000
	PCON=0x00;//设置了SMOD,波特率不翻倍
	TMOD=0x20;//设置定时器1方式二
	EA=1;//开中断
	ES=1;//允许串口1发起中断
	TL1=0xfd;//波特率9600
	TH1=0xfd;
	TR1=1;//定时器1开始计时
}	

void main(){
    
    	
	UART_INIT();

	while(1){
    
    
		uchar i;
		if(K3==0){
    
    
			SBUF=0x00;    //发送0x00给单片机2
		}else if(K4==0){
    
    
			SBUF=0x01;    //发送0x01给单片机2
		}
		switch(flag)     //接收到0x00开启电位器,0x01关闭电位器
		{
    
    
			case(0x00):     //开启电位器
				datapros();
				DigDisplay();
				break;
			case(0x01):     //关闭电位器
				for(i=0;i<4;i++)
				{
    
    
					disp[i]=0;
				}
				break;
		}
	}		
}

//串口中断
void Interrupt_Receive() interrupt 4
{
    
      
	if(TI==1) TI=0;
	if(RI==1)
    {
    
    
        RI=0;
        flag=SBUF;
     }
}      
     
②XPT2046.c
#include"XPT2046.h"

void SPI_Write(uchar dat)   //写数据
{
    
    
	uchar i;
	CLK = 0;
	for(i=0; i<8; i++)      //先写高位,再写低位
	{
    
    
		DIN = dat >> 7;  	//放置最高位
		dat <<= 1;          //左移一位,从最高位放起
		CLK = 0;			//上升沿放置数据

		CLK = 1;

	}
}

uint SPI_Read(void)         //读数据
{
    
    
	uint i, dat=0;
	CLK = 0;
	for(i=0; i<12; i++)		//接收12位数据
	{
    
    
		dat <<= 1;          //读取最高位

		CLK = 1;
		CLK = 0;

		dat |= DOUT;        //DOUT数据输出管脚

	}
	return dat;	
}

uint Read_AD_Data(uchar cmd)
{
    
    
	uchar i;
	uint AD_Value;
	CLK = 0;             //拉低时钟信号再开始写入
	CS  = 0;             //拉低片选信号
	SPI_Write(cmd);      //写一个字节
	for(i=6; i>0; i--);   //延时一个时钟周期,等待转换结果
	CLK = 1;	         //发送一个时钟周期,清除BUSY
	_nop_();
	_nop_();
	CLK = 0;
	_nop_();
	_nop_();
	AD_Value=SPI_Read(); //返回的是12位的数据,想要显示电压还需要进行处理
	CS = 1;              //拉高片选信号,停止传输数据
	return AD_Value;	
}

Diagrama de flujo:

①Función principal:
Inserte la descripción de la imagen aquí
②Función de retardo:
Inserte la descripción de la imagen aquí

③Función de conversión de recepción de datos (datapros):
Inserte la descripción de la imagen aquí

④Función de visualización de tubo digital:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_46837674/article/details/113029607
Recomendado
Clasificación