ad.c

来自「单片机控制ADC0832实现电压的数字显示」· C语言 代码 · 共 82 行

C
82
字号
#include<reg51.h>

#define uchar unsigned char 
#define _rrca_()          CY   = ACC & 0x01           //产生RRC A指令
#define _rlca_()          CY   = ACC & 0x80           //产生RLC A指令
sbit bADcs=P1^4;
sbit bADcl=P1^5;
sbit bADda=P1^6;
sbit flag=P1^7;
/*bit choose=0;*/
unsigned char data1;
unsigned char count;
unsigned char cycle;

void initcom()
{
	SCON = 0x50 ;
	TMOD |= 0x20 ; 
	PCON |= 0x80 ;
	TH1 = 0xF3;
    TL1=0xF3; 
	IE |= 0x90 ; //4800
	TR1 = 1 ; 
} 

void ad()
{
	 flag=1;	
	 count = 0;
	 bADcs = 0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.
	 bADcl = 0;
	 bADda = 1;//在第1 个时钟脉冲的下沉之前DI端必须是高电平.
	 bADcl = 1; 
	 bADcl = 0;//pulse 1 down
	// bADda = 1;
	
	 bADcl = 1; bADcl = 0;//pulse 2 down
	 /*if(choose == 0)*/
		 bADda = 0;
	 /*else
		 bADda = 1; */	 
	 bADcl = 1; bADcl = 0;//pulse 3 down
	
	 for(cycle = 8; cycle > 0; cycle-- )
		 {
		 bADda = 1;
			 bADcl = 1; bADcl = 0;//pulse 
		 CY = bADda;
		 _rlca_();	//RRC A
		 }
	 data1= ACC;
	 for(cycle = 8; cycle > 0; cycle-- )
		 {
		 bADda = 1;
		 bADcl = 1; bADcl = 0;//pulse 
		 CY = bADda;
		 _rrca_();	//RLC A
			 }
	 if( ACC == data1 )
		 {
	
		 flag= 0;
		  }
	 bADcs = 1;//当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束

}
void send()
{
 SBUF=data1;
 while(!TI);
 TI=0;
}
main()
{ 
 initcom();
 while(1){
 	ad();
	send();
 	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?