|
我感觉程序中读写硬件没问题,但为什么却写失败?,大家帮我分析一下
[复制链接]
- MessageBox(_T("111111111111111"),NULL,MB_OK);
- /******************************************/
- *ptPA[0]=0x00[color=#FF0000];//写数据成功[/color]
- RunOrStopFlag=1;
- int pb1,pb4,pb5;
-
- pb1=((*ptPB[0])&0x0FF[color=#FF0000]);//读数据成功[/color]
- delay(DELAY_TIME);
- if(pb1==0x80||pb1==0x0)
- {
- JXDlg jxdlg;
- while(1)
- {
-
- if(jxdlg.DoModal()==IDOK)
- {
- SetTimer(1,m_iCycleTime*1000,NULL);
- m_bRunFlag=TRUE;
- break;
- }
- Sleep(6000);
-
- }
- }
- else
- {
- MessageBox(_T("22222222"),NULL,MB_OK);
-
- while(1)//循环1
- {
-
- pb1=((*ptPB[0])&0x0FF)&0x07;// X000 &0111= 0000[color=#FF0000]读出数据成功[/color]
- delay(DELAY_TIME);
- pa1=pa1|0x1;
- if(pb1==0)//开关1 2 3按下;A灯亮
- {
- JWdlg jwdlg;
-
- // delay(1000*1000);
-
- *ptPA[0]=pa1;//[color=#FF0000]这里写偶尔成功,偶尔失败,不知道为什么[/color]
- delay(1000*1000);
- if(jwdlg.DoModal()==IDOK)
- {
-
- break;
- }
-
- }
- }
-
-
-
- while(1)//循环2
- {
- pb4=((*ptPB[0])&0x0FF)&0x08;//[color=#FF0000]开关4按下;BCD三灯亮,读数据成功[/color]
- delay(DELAY_TIME);
- pa1=15;
- if(pb4==0)
- {
-
- *ptPA[0]=pa1;//[color=#FF0000]写失败,我感觉程序与上面一段中的写是一样的,但为什么失败[/color]
- delay(1000*1000);
-
- MessageBox(_T("3333333333"),NULL,MB_OK);
-
- break;
- }
- }
- while(1)//循环3
- {
-
- pb5=((*ptPB[0])&0x0FF)&0x70; //读数据也成功
- delay(DELAY_TIME);
-
- if(pb5==0)//开关5 6 7按下,BCD三灯灭,可以开始采集数据
- {
- pa1=pa1|0x01;
- *ptPA[0]=pa1;//写数据也失败;
- delay(1000*1000);
- MessageBox(_T("444444444"),NULL,MB_OK);
-
- break;
- }
-
- }
- JXDlg jxdlg;
- while(1)//循环4
- {
-
- if(jxdlg.DoModal()==IDOK)
- {
- SetTimer(1,m_iCycleTime*1000,NULL);
- m_bRunFlag=TRUE;
-
- break;
- }
-
- Sleep(6000);
-
- }
- }
-
复制代码
程序段如上,其中ptPA[0],ptPB[0],ptPC[0]为一片8255的三个端口,规定A写B、C读即控制字写入0x8B。
我的问题是读B、C口没问题,写A口是就出现了一会儿对,一会儿不对,且写A口的程序段放到不同的位置也是有时可读,有时不可读:
放在while循环中出现的情况:如前面,循环1中有时写正确,有时写失败,循环2、3、4就失败(循环1、2、3、4如程序标示)
放在while循环前面读写正确。
并且读写程序都是我以前的一个测试程序中用到的,也就是说读写代码段没有问题。
pa1=pa1|0x01;
*ptPA[0]=pa1;//这几句是我在原来的测试程序中用过的,是没有任何问题的。
delay(1000*1000);
麻烦达人们帮我分析一下,我找了好久没找到原因。
|
|