编码器计数卡的VC编程 点击:844 | 回复:5



qingbei

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 13回
  • 年度积分:0
  • 历史总积分:43
  • 注册:2005年4月28日
发表于:2005-05-02 15:27:00
楼主
编码器计数卡型号是PCI-8133,用VC对其进行操作,板子自己带了一些函数,其中一个是设置产生中断的周期,也就每隔多长时间产生一个中断,但是该用什么函数来处理这个中断信息呢? 谢谢!



qingbei

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 13回
  • 年度积分:0
  • 历史总积分:43
  • 注册:2005年4月28日
发表于:2005-05-02 18:37:00
1楼
这个是源程序,但是编译通不过,错误信息是: error C2146 missing ';' before identifier '_beginthread' #include"windows.h" #include<stdio.h> #include<process.h> #include"8133.h" //#include"stdlib.h" //#include"conio.h" //#include"stddef.h" #define CNO 0 long Position=0; U16 pls_N=0,pls_NM1=0; int dPLS; HANDLE hEventarray[2]; U16 Status,IndexData; U16 card_no=0,bn; HANDLE hEvent[2],hThread1; U16 event_count=0; U16 new_value, old_value=65536; void ProcessInterrupt(void *ss) { U16 mode; do{ WaitForSingleObject(hEvent[0],20/*INFINITE*/); W_8133_Read_Cnt(CNO,1,&pls_N);//读计数器的内容 dPLS=(int)pls_N-(int)pls_NM1;//求增量 Position+=dPLS;//增量累计之后就是位置数据 pls_NM1=pls_N; ResetEvent(hEventarray[1]); }while(1); _endthread(); } void main() { W_8133_Initial(CNO);//初始化计数器 W_8133_Software_Reset(CNO);//重置计数器 Sleep(1); W_8133_ModeSelect(CNO,0x42);//set control mode for index mode, CNT1 at CW/CCW mdoe; W_8133_Set_Int0Perd(CNO,0x07d0);//set Period of INT0 is 200us W_8133_CLR_IRQ0(CNO); W_8133_CLR_IRQ1(CNO); W_8133_INT_Enable(CNO,hEventarray); W_8133_Set_INT_Control(CNO,1,1)////**************??????? _beginthread(ProcessInterrupt,0,(void *)(ss++));////***************??????? //printf("The postion is %d",Position); }

刘岩利

  • [版主]
  • 精华:2帖
  • 求助:0帖
  • 帖子:16帖 | 8239回
  • 年度积分:397
  • 历史总积分:28760
  • 注册:2005年3月09日
发表于:2005-05-02 20:44:00
2楼
这个问题,与运动控制完全无关,完全是VC编程的问题。在这里问,不是一个很合适的地方,

mountain

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 40回
  • 年度积分:0
  • 历史总积分:102
  • 注册:2003年8月25日
发表于:2005-05-08 09:36:00
3楼
板子本身应该有专门的函数来设置回调或中断服务程序的,然后在回调或中断服务程序里面处理

zengwj

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2005年5月08日
发表于:2005-05-08 10:10:00
4楼
这么简单的问题 ,前面漏了“;” 应该在W_8133_Set_INT_Control(CNO,1,1) 改为  W_8133_Set_INT_Control(CNO,1,1); 就行了

qingbei

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 13回
  • 年度积分:0
  • 历史总积分:43
  • 注册:2005年4月28日
发表于:2005-05-11 09:23:00
5楼
谢谢大家的回答!

热门招聘
相关主题

官方公众号

智造工程师