#define _TEST_C_ #include "reg52.h" #include "stdlib.h" #include "absacc.h" #include "intrins.h" #include "test.h" #include "math.h" #define uchar unsigned char #define uint unsigned int #define COM8251 XBYTE[0x8601] #define DAT8251 XBYTE[0x8600]
#define IN0 XBYTE[0x8000] /*在使用外部数据区的信息之前,必须用指令将他们移动到内部数据区中;当数据处理完之后,将结果返回到片外数据存储区*/ uchar data data_temp[6]={0x52,0x53,0x54,0x55,0x00,0x58}; uchar temp[6]={52,0x53,0x54,0x55,0x00,0x58}; uchar k; uchar data a; static uchar idata ad[16];
void initmcu(void); void wait(uchar p,q); void init8251();
void ad0816(uchar idata *x);
void Trans8251(void) interrupt 1 using 1 { TH0 = 0XFF; TL0 = 0XFF; ad0816(ad); for(a=0x5A;a>0x30;a--) { while((COM8251&0x01)==0); { DAT8251=ad[1]; } } for(k=0;k<6;k++)//注意在串口调试助手中一定要赋值,否则这里的程序将不会运行。 { while((COM8251&0x02)==0); { temp[k]=DAT8251;//串口调试助手不能写成0x54样式,否则收不到 } } } void main(void) { EA = 0; initmcu(); EA = 1; init8251(); //ad0816(ad); }
void init8251() { //wait(11,82);//8251工作速度慢,每送一个控制字,等待一会儿延时2ms COM8251 = 0x00; DAT8251 = 0x00; DAT8251 = 0x00; COM8251 = 0x40;//以上为8251复位部分 wait(11,82); COM8251 = 0x4e;//9600baud,1停止位,无校验,8位数据,X16 wait(11,82); COM8251 = 0x35; wait(11,82); }
void initmcu(void) { TMOD = 0x06; //9600波特11.0592MHz,方式2 TL0 = 0XFF; TH0 = 0XFF; IP = 0x02; ET0 = 1;TR0 = 1; }
void ad0816(uchar idata *x) { uchar i; uchar xdata *ad_adr; ad_adr=&IN0; for(i=0;i<16;i++) { *ad_adr=0; //启动转换从0通道开始 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); x=*ad_adr; ad_adr++; } }
void wait(uchar p,q) { uchar i,j; //(2*j+3)*i+4 for (i=p;i>0;i--) for (j=q;j>0;j--); } |