每次在我们设定定时器初值的时候都会有一些难点疑问
such as
定时器小妙招~~
#include<reg52.h>
int count=0;
main()
{
EA=1 ;
ET0=1;
TMOD=0x01;//0000 0010 定0 工作1 或者定1 工0
TR0=1;
TH0=(65536-46080)/256; //50ms
TL0=(65536-46080)%256;
while(1);
}
t0() interrupt 1
{
count++;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
if(count==20){
P1=~P1;
count=0;
}
}
在其他博主那边也会看到不一样的版本 比如
将
转变成
那么很多同学对此会感到疑惑这是从哪里的来的呢??
今天教同学一招
(下载一个定时器计算器,将上面的信息依次填入进去就可以得到相应的结果)
串口通信的小妙招
首先,观察一下代码
#include<reg52.h>
void uartinitial(); //设置串口
main()
{
uartinitial();
while(1);
}
void uartinitial()
{
SCON=0x50; //0101 0000 串口方式1,允许接收??
TMOD=0x20; //0010 0000 定时器1,工作方式2
PCON=0x00; // smod=0则波特率不加倍,=1则波特率加倍
TH1=0xFD; //波特率9600
TL1=0xFD;
EA=1; //打开接受中断
ES=1;//打开总中断
TR1=1; //打开定时器
}
void uart() interrupt 4
{
char a; //定义在芯片内部开辟空间给a
a=SBUF;//外部数据传输给SBUF暂存,再送入到芯片a
while(!RI); //也可以是(RI==0) 如果接收到了数据 RI自动置成1,程序往下清零 否则等待下次接收
RI=0;//接受清零,以便于下次继续接收
SBUF=a; //将芯片存储的数据放到SBUF暂存,在送入PC
while(!TI); //也可以是(TI==0) 如果接收到了数据 TI自动置成1,程序往下滑清零,否则等待下次发送
TI=0; //接受清零,以便于下次继续发送
}
你会感到疑惑:
这个是怎么算出来的呢??
打开
选择
波特率计算器
(将上述内容对应填写进去然后点击生成代码,即可)
这种方法是不是很方便呢~~
学到的话可以给小编点点赞哦~~~~❤