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