高级会员
- 积分
- 743
- 威望
- 373
- 贡献
- 182
- 兑换币
- 220
- 注册时间
- 2012-10-16
- 在线时间
- 94 小时
- 毕业学校
- 安徽理工大学
|
改写部分为for循环部分,见程序最后
byte ADV[128]={0,0}; //声明数组,用于存放采集的线性数值
#define TSL_SI PORTA_PA0 //定义线性传感器的端口 SI
#define TSL_CLK PORTA_PA1 //定义线性传感器的端口 CLK
#define BUSCLOCK24M //根据单片机的总线频率选择相应的宏定义
//短暂的延时
void Dly_us(byte us);
//较长延时
void Dly_ms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<2000;jj++); //busclk:32MHz--1ms
//for(jj=0;jj<5340;jj++); //busclk:64MHz--1ms
}
void SetBusCLK_24M(void)
{
MMCCTL1=0X00;
PKGCR =0X06;
DIRECT =0x00;
IVBR =0xFF;
ECLKCTL=0xC0;
CPMUPROT =0x26; //停止保护时钟配置寄存器
CPMUCLKS_PSTP=0; //
CPMUCLKS_PLLSEL=1; //应用PLL
//CPMUSYNR =nM-1; //设置分频因子
CPMUSYNR =0x40|23; //设置分频因子
CPMUREFDIV =0x80|0x00; //pllclock=2*(1+SYNR)= MHz;
CPMUPOSTDIV=0x00; // Set the post divider register
CPMUPOSTDIV=0x00; // Set the post divider register
CPMUPLL =0x10; // Set the PLL frequency modulation
while(CPMUFLG_LOCK == 0); /* Wait until the PLL is within the desired tolerance of the target frequency */
CPMUPROT=0x00; /* Enable protection of clock configuration registers */
}
//-----------------------------------------------------
void AD_Init(void)
{
ATDCTL1=0x00; //7:1-外部触发,65:00-8位精度,4:放电,3210:ch
ATDCTL2=0x40; //禁止外部触发, 中断禁止
ATDCTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转
ATDCTL4=0x01; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
ATDCTL5=0x38; //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样
ATDDIEN=0x00; //禁止数字输入
}
void RD_TSL1(void)
{
byte i=0,tslp=0;
TSL_CLK=1;//起始电平高
TSL_SI=0; //起始电平低
Dly_us(1); //合理的延时
TSL_CLK=0; //上升沿
Dly_us(1); //合理延时
TSL_SI=1;//下降沿
Dly_us(1); //合理延时
TSL_CLK=1;//上升沿
Dly_us(1); //合理延时
TSL_SI=0; //下降沿
Dly_us(1); //合理延时
for(i=0;i<128;i++)
{
TSL_CLK=0;//下降沿
Dly_us(3); //合理延时
while(!ATDSTAT0_SCF);//等待转换结束
ADV[tslp]=ATDDR0L; //AD采集
++tslp;
TSL_CLK=1;//上升沿
Dly_us(3); //合理延时
}
Dly_us(20);
}
void RD_TSL0(void)
{
byte i=0;
TSL_CLK=1;//起始电平高
TSL_SI=0; //起始电平低
Dly_us(1); //合理的延时
TSL_CLK=0; //上升沿
Dly_us(1); //合理延时
TSL_SI=1;//下降沿
Dly_us(1); //合理延时
TSL_CLK=1;//上升沿
Dly_us(1); //合理延时
TSL_SI=0; //下降沿
Dly_us(1); //合理延时
for(i=0;i<128;i++)
{
TSL_CLK=0;//下降沿
Dly_us(3); //合理延时
TSL_CLK=1;//上升沿
Dly_us(3); //合理延时
}
Dly_us(10);
}
void SendHex(unsigned char hex) {
unsigned char temp;
temp = hex >>4;
if(temp < 10) {
SCI_Write(temp + '0');
} else {
SCI_Write(temp - 10 + 'A');
}
temp = hex & 0x0F;
if(temp < 10) {
SCI_Write(temp + '0');
} else {
SCI_Write(temp - 10 + 'A');
}
}
void SendImageData(unsigned char *ImageData) {
unsigned char i;
/* Send Data */
SCI_Write('*');
SCI_Write('L');
SCI_Write('D');
SendHex(0);
SendHex(0);
SendHex(0);
SendHex(0);
for(i=0; i<128; i++) {
SendHex(*ImageData++);
}
SCI_Write(0);
SCI_Write('#');
}
void main(void)
{
/* put your own code here */
SetBusCLK_24M(); //总线初始化
DisableInterrupts;//关闭中断
//DDRA = 0xff; //IO口初始化
//PORTA= 0x00; //IO口初始化
DDRA = 0xff; //IO口初始化
PORTA= 0x01; //IO口初始化
SCI_Init(); //串口初始化 9600,8,n,1
AD_Init(); //AD初始化
for(;;) for(;;)
{ {
RD_TSL0(); RD_TSL0();
Dly_ms(10); Dly_ms(10);
//SendImageData(ADV); 改写为 SendImageData(ADV);
RD_TSL1(); RD_TSL1();
SendImageData(ADV); 改写为 //SendImageData(ADV);
} }
/* please make sure that you never leave this function */
}
void Dly_us(byte us)
{
byte ii;
for(ii=0;ii<us;ii++)
{
#ifdef BUSCLOCK24M
_asm(nop);_asm(nop);_asm(nop);_asm(nop);
_asm(nop);_asm(nop);_asm(nop);_asm(nop);
_asm(nop);_asm(nop);_asm(nop);_asm(nop);
_asm(nop);_asm(nop);_asm(nop);_asm(nop);
_asm(nop);_asm(nop);_asm(nop);_asm(nop);
_asm(nop);_asm(nop);_asm(nop);_asm(nop);
#endif
}
}
|
|