標(biāo)題:
單片機(jī)串口通訊 uint 和uchar為啥不一樣
[打印本頁]
作者:
micrer001
時間:
2017-7-10 16:22
標(biāo)題:
單片機(jī)串口通訊 uint 和uchar為啥不一樣
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit fmq=P2^3;
sbit led=P1^0;
uint b,a,flag;
//uint code table[]={1000,100,20,10,5,3,1};
//void fk();
void inint();
void main()
{
inint();
while(1)
{
// fk();
if(a==0x30)
{
if(b==1000)
{
b=0;
fmq=~fmq;
led=~led;
}
}
if(a==0x31)
{
if(b==100)
{
b=0;
fmq=~fmq;
led=~led;
}
}
if(a==0x32)
{
if(b==20)
{
b=0;
fmq=~fmq;
led=~led;
}
}
if(a==0x33)
{
if(b==10)
{
b=0;
fmq=~fmq;
led=~led;
}
}
if(a==0x34)
{
if(b==5)
{
b=0;
fmq=~fmq;
led=~led;
}
}
if(a==0x35)
{
if(b==3)
{
b=0;
fmq=~fmq;
led=~led;
}
}
if(a==0x36)
{
if(b==1)
{
b=0;
fmq=~fmq;
led=~led;
}
}
if(a==0x37)
{
b=0;
fmq=1;
led=1;
}
}
}
void inint()
{
TMOD=0X21;
TH0=(65535-461)/256;
TL0=(65535-461)%256;
ET0=1;
TR0=1;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
REN=1;
SM0=0;
SM1=1;
ES=1;
}
void ckzd() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
void timer0() interrupt 1
{
TH0=(65536-461)/256;
TL0=(65536-461)%256;
b++;
}
/*void fk()
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
} */
//這個程序為啥延時的厲害發(fā)送數(shù)據(jù)后老半天才反應(yīng),把全局變量 uint b,a,flag; 變成uchar b,a,flag就正常,想不通為啥
作者:
filink
時間:
2017-7-10 18:01
我也在學(xué)習(xí)這些東西
作者:
wulin
時間:
2017-7-10 21:43
SBUF是8位寄存器,每次只能發(fā)送/接收8位數(shù)據(jù),16位、32位數(shù)據(jù)需要先分解發(fā)送,收到再合并。
作者:
hzsjn
時間:
2017-7-11 10:23
應(yīng)該
uint b,b_count;
uchar a,flag;
中斷中:
void timer0() interrupt 1
{
TH0=(65536-461)/256;
TL0=(65536-461)%256;
if(b<b_count){ b++; }
else{ b=0; fmq=~fmq; led=~led;}
}
初始化:
unsigned int tab[]={1000,100,50};
b_count=1000;
主程序:
b_count=tab[a-0x31];
作者:
hzsjn
時間:
2017-7-11 10:25
當(dāng)b為uint時,最大循環(huán)到65535,反應(yīng)當(dāng)然慢了,原因就是b沒有及時歸零。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1