搜索
bottom↓
回复: 4

温度采样的实验通过了,上位采集程序我想用DELPHI写,有哪位有好一点的建议??

[复制链接]

出0入0汤圆

发表于 2005-1-18 02:39:07 | 显示全部楼层 |阅读模式
由于时间不多,好不容易写好了这部分,就是ADC(仅温度),把采到的数据通过RS232发给PC,上位采集我想用DELPHI写,我第一次写串口的程序,有没有哪位用DELPHI的可以给点好的建议?

下面给出单片机的程序,原著donkey,修改xxzhang,:)





//ICC-AVR application builder : 2005-1-7 1:32:58

// Target : M16

// Crystal: 8.0000Mhz



#include <iom16v.h>

#include <macros.h>

#include <stdio.h>

void port_init(void);

void uart0_init(void);

void adc_init(void);

void init_devices(void);

void Temperature(int tp);

void delay_1ms(void); //函数声明,本实验中会用到这两个函数  

void delay_nms(unsigned int n);  



main()

{

  short int c;

  init_devices();

  DDRA=0B11000000; //定义A口的PA6、PA7为输出口

  PORTA=0B10000000; //PA7口输出高电平,PA6口输出低电平

  delay_nms(5000); //延时5秒

  PORTA=0B01000000; //PB6口输出高电平,PB7口输出低电平

  delay_nms(5000); //延时5秒

  //uart0_init();

  PORTA=0B10000000;

  c=0xa8;

  putchar(c);

  PORTA=0B01000000; //PA6口输出高电平,PA7口输出低电平

  while(1)

  {

    //c=getchar();

    //putchar(c);

        Temperature(1);

        Temperature(2);

        delay_nms(100);

    PORTA^=0B11000000;

//    USART_Transmit(0xff);

//        delay_nms(50);

  }

}



void port_init(void)

{

PORTA = 0x00;

DDRA  = 0x00;

PORTB = 0x00;

DDRB  = 0x00;

PORTC = 0x00; //m103 output only

DDRC  = 0x00;

PORTD = 0x00;

DDRD  = 0x00;

}



//UART0 initialize

// desired baud rate: 38.4k

// char size: 8 bit

// parity: Disabled

void uart0_init(void)

{

UCSRB = 0x00; //disable while setting baud rate

UCSRA = 0x00;

UCSRC = BIT(URSEL) | 0x06;

// UBRRL = 0x33; //set baud rate lo

UBRRL = 12;

UBRRH = 0x00; //set baud rate hi

UCSRB = 0x18;

}



//ADC initialize

// Conversion time: 104uS

void adc_init(void)

{

ADCSR = 0x00; //disable adc

ADMUX = 0x20; //select adc input 0

ACSR  = 0x80;

ADCSR = 0x86;

}





//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

port_init();

uart0_init();

adc_init();



MCUCR = 0x00;

GICR  = 0x00;

TIMSK = 0x00; //timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialized

}



void Temperature(int tp)

{

  unsigned char tl, th;

  while(ADCSR&(1<<ADSC));

  if(tp==1) ADMUX=0x25;

  else ADMUX=0x24;

  ADCSR|=0x40;

  while(ADCSR&(1<<ADIF));

  tl=ADCL;

  th=ADCH;

  if(tp==1)

    {

          //puts("Tempurature1 :");

          putchar(th);

          putchar(tl);

          putchar(0xff);

        }

  else

    {

          //puts("Tempurature2 :");

          putchar(th);

          putchar(tl);

          putchar(0xff);

        };  

}



void delay_1ms(void)//1ms延时函数  

{  

  unsigned int i;  

  for (i=0;i<150;i++)  

  {  

  }   

}  

void delay_nms(unsigned int n)//延时n毫秒  

{  

  unsigned int i;  

  for (i=0;i<n;i++)//执行n次1毫秒延时  

  delay_1ms();   

}

出0入8汤圆

发表于 2005-1-18 09:44:39 | 显示全部楼层
有个提议:我有Delphi写的一个电池充电器的上位机程序代码。这个代码包括完整的协议、下位机的控制、图形坐标的描点,如果我按照现在我们这个充电器制定一个协议,你是否愿意为大家写一个这样的程序?这个代码可以参考。其实只要稍微改一下代码的协议部分就可以直接使用。在学校的时候一直使用delphi来着,参加工作后就一直用VC了,delphi都忘记光了。

出0入0汤圆

 楼主| 发表于 2005-1-18 11:12:56 | 显示全部楼层
好啊!可以试试,我也是在学校时用的Delphi,现在用的时间不多,应该没有问题,希望多交流!!

出0入0汤圆

发表于 2005-1-19 01:14:09 | 显示全部楼层
我一直想写个比较灵活的上位机数据处理程序,如果等我忙完这一段还没有现成的话,我就写一个。

出0入0汤圆

发表于 2005-1-19 23:47:51 | 显示全部楼层
delphi不懂啊

照顾一下

用vc写吧
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 20:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表