这是我自己写的一个程序,把采集的数据存在外扩的SRAM里,然后再一起发送出去。
#include<reg51.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uint i =0;
uint j =0;
uint k =0;
sbit EADC = IE^5;
uchar xdata sram8k[8000];
/*Declare SFR associated with the ADC */
sfr AUXR = 0x8E;
sfr BUS_SPEED = 0xA1;
sfr ADC_CONTR = 0xBC; //ADC control register
sfr ADC_RES = 0xBD; //ADC hight 8-bit result register
sfr ADC_RESL = 0xBE;
sfr P1ASF = 0x9D; //P1 secondary function control register
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80 //ADC power control bit
#define ADC_FLAG 0x10 //ADC complete flag
#define ADC_START 0x08 //ADC start control bit
#define ADC_SPEEDLL 0x00 //540 clocks
#define ADC_SPEEDL 0x20 //360 clocks
#define ADC_SPEEDH 0x40 //180 clocks
#define ADC_SPEEDHH 0x60 //90 clocks
void delay (void)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/*-------唤醒及通讯部分-------*/
void serial_initial (void)
{
WAKE_CLK0=0x40; //允许RXD下降沿唤醒
SCON=0x40;
//串口模式1,禁止接收数据
TMOD = 0x20; //设置定时器1为8位自动重装计数器
TH1 = 0xfd;
//波特率9600
TL1 = 0xfd;
TR1 = 1; //开定时器1
ES=1;
}
void Uart_SendData(uchar dat)
{
SBUF=dat;
while(TI==0){}; //等待发送
TI=0; //清发送标志位
}
/*-------AD采集部分-------*/
void adc_initial (void)
{
AUXR=0x02; //访问外部扩展ram
AUXR1=0x04; //10位A/D转换结果的高2位放在ADC_RES寄存器,低8位放在ADC_RESL寄存器
BUS_SPEED=0x23;
P1ASF=0x01;
//P1.0作为AD使用
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
delay();
EADC=1;
//开ADC中断
EA=1;
//开总中断
}
void get_ADC_result( )
{
if(i==39990)
{
P1ASF=0x02;
//P1.1作为AD通道
ADC_CONTR|=0x01; //切换到通道1,采集压力数据
delay();
}
ADC_CONTR|=ADC_START;
//启动ADC
delay();
}
void ADC_isr (void) interrupt 5
{
sram8k[j]=(ADC_RES&0x03);
j++;
sram8k[j]=ADC_RESL;
j++;
ADC_CONTR&=!ADC_FLAG;
}
/*-------主函数-------*/
void main(void)
{
while(1)
{
serial_initial();
adc_initial();
for(i=0;i<=39990;i++)
{
if(i%10==0)
//采样频率调配至2KHz
{
get_ADC_result();
}
}
for(k=0;k<8000;k++)
{
Uart_SendData(sram8k[k]);
}
}
}
我设置ADRJ=1,那么10位A/D转换结果的高2位存放在ADC_RES的低2位中,低8位存放在ADC_RESL中,发送出去的数据应该是这样的格式:0X XX 0X XX 。现在的问题是(1)每两个数据都是一样的(比如前四个数据是81 81 53 53);(2)sram8k[j]=(ADC_RES&0x03)这条指令似乎没有被执行 |