求教一个很白的问题我想问下单片机的初始化是由什么决定的端口和程序的初始化?可以的话介绍相关方面的书谢
求教一个很白的问题
我想问下单片机的初始化是由什么决定的端口和程序的初始化?可以的话介绍相关方面的书谢谢了啊
[解决办法]
SCON=0x50;
TMOD=0x21;
TH1=0xfd;
TR1=1;
这几句是初始化定时器的
修改对应寄存器的值就行,楼主看看单片机书里计时器部分的寄存器说明
初始化要看你用单片机的什么资源,用什么资源就初始化什么资源的寄存器
后面几句是前面定义的变量吧??
[解决办法]
这是关于串口通信的初始化。主要是设置定时器及串口控制寄存器的。还有开中断的中断寄存器。你看一下这方面的资料就清楚。所谓的初始化就是把所要使用功能的寄存器相应参数设置成你所希望的状态,呵呵,解释的不是十分贴切,这是我的理解。
[解决办法]楼主请仔细说下你的问题吧,否则别人没办法回答
一,SCON=0x50;
二,TMOD=0x21;
三,TH1=0xfd;
四,TR1=1;
五,ES=1;
六,EA=1;
七,TI=1;
一,SCON=0x50;
0x50=01010000
SCON是8位的串口控制寄存器,查书8位分别是
SM0,SM1,SM2,REN,TB8,RB8,TI,RI
那么对应关系是
SM0=0,SM1=1,SM2=0,REN=1,TB8=0,RB8=0,TI=0,RI=0
再查资料
SM0 SM1 = 01 则串口工作在10位异步收发,串口的波特率是由定时器1决定,你就理解成串口工作在8位数据通信就可以了
REN=1 串口只允许接收。
其他都是0,可以不用考虑。
所以SCON=0x50;综合起来就是,串口工作在8位数据通信,并且允许串口接收。
而且串口的波特率是由定时器1决定的。
二,TMOD=0x21;
0x21=00100001
TMOD是8位的定时器方式寄存器,查书8位分别是
GATE1,C/T1,M1_1,M0_1,
[解决办法] GATE0,C/T0,M1_0,M0_0.
注意上述写的每一位的名字和书上不太一样,是为了楼主区分
最后是1的,表示的是定时器1的位,操作这GATE1,C/T1,M1_1,M0_14个位就是对
定时器1操作,
最后是0的,表示的是定时器0的位,操作GATE0,C/T0,M1_0,M0_0这4个位就是对
定时器0操作,
对应关系是
GATE1=0,C/T1=0,M1_1=1,M0_1=0
上边说的是定时器1工作在方式2
GATE0=0,C/T0=0,M1_0=0,M0_0=1
上边说的是定时器0工作在方式1,实际上这里的赋值没有用的,因为后边没有启动定时器0。
请一定查书或资料才能得到上边的结论。
三,TH1=0xfd;
根据我个人的计算,您的晶振应该是11.0592M的,波特率是9600。
TH1=0xfd 实际就是计算你的串口工作波特率。这个和你晶振频率有关系。
计算公式到书上找。
四,TR1=1;
TR1=1;//定时器1启动.该位在TCON寄存器中
五,ES=1;//开串口中断,或理解为串口允许产生中断,该位在IE寄存器中
六,EA=1;//开所有中断。这个类似一个总开关,该位在IE寄存器中
七,TI=1;//该位在SCON寄存器中。
这个操作时没有用的,因为当你的串口工作模式设定了以后,则这一位是由硬件置位的。
但是这个操作会导致进入你的串口中断程序。如果不清除还会进入串口中断
如果你的发送准备用中断来实现是可以的。
建议不使用这句话。
建议楼主,边看资料边做程序。