标题:
单片机串口通讯 uint 和uchar为啥不一样
[打印本页]
作者:
micrer001
时间:
2017-7-10 16:22
标题:
单片机串口通讯 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;
}
} */
//这个程序为啥延时的厉害发送数据后老半天才反应,把全局变量 uint b,a,flag; 变成uchar b,a,flag就正常,想不通为啥
作者:
filink
时间:
2017-7-10 18:01
我也在学习这些东西
作者:
wulin
时间:
2017-7-10 21:43
SBUF是8位寄存器,每次只能发送/接收8位数据,16位、32位数据需要先分解发送,收到再合并。
作者:
hzsjn
时间:
2017-7-11 10:23
应该
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
当b为uint时,最大循环到65535,反应当然慢了,原因就是b没有及时归零。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1