作者cwl751005 (bb)
看板ASM
标题Re: [问题] PC 收 51 传的0~255,有时会收到奇怪数字
时间Mon Jan 14 11:35:08 2013
改成这样看会不会好点= =
#include "AT89X51.h"
/*
P2 读取ADC
P1,3,0 预留输出控制
*/
unsigned char ucADC0804,QUERY,swap;
char code HEX[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39
,0x41,0x42,0x43,0x44,0x45,0x46};
main()
{
IE=0x90; /* (中断Enable)EA=1,(串列中断)ES=1*/
P2=0xFF; /* P2为读取Port */
SCON=0x70; /*Serial Port mode1*/
TMOD=0x20; /*Timer mode1(Auto Load)*/
TH1=0xFD; /*
[email protected]*/
TR1=1; /*Timer1 启动!*/
QUERY=0;
while(1)
{
ucADC0804=P2;
if(QUERY=='Q')
{
: swap=(ucADC0804>>4);//&0x0F; //取高4bit
: SBUF=HEX[swap]; //发射高4bit之ASCII
: while(!TI); //等待发射完毕
: TI=0; //这个如果没加,几乎都送0出去
: swap=ucADC0804&0x0F; //取低4bit
: SBUF=HEX[swap]; //发射低4bit之ASCII
: while(!TI);
: TI=0; //清除发射中断旗标
QUERY=0;
}
}
}
void serial_INT(void) interrupt 4
{
if(RI)
{
QUERY=SBUF;
RI=0; //清除发射中断旗标
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.141.154
1F:推 deo2000:好,我试看看先存下SBUF且在main中计算的方式 01/14 12:44
2F:→ deo2000:你可以不用这麽费力地帮我打code啦~ 01/14 12:45
3F:推 deo2000:这个做法收到空字串机率有稍微低不明显,但是但是收到 01/14 13:22
4F:→ deo2000:收到"DEDD""F4F5"等多传一次的字串机率高很多 01/14 13:23
5F:→ deo2000:收到空字串机会会集中在波形相对极值处! 似乎在透露甚麽? 01/14 13:24
7F:→ cwl751005:在进入判断QUERY=='Q'函数後先关闭中断看看,传完再开 01/14 14:21
8F:→ cwl751005:其实也没费力,只是把你的CODE做剪贴:-P 01/14 14:23
9F:→ cwl751005:或是发送间隔先调大一点,没问题再慢慢改 01/14 14:44