请教:
帮我看看这几个问题啊
1:
波特率发生器
是什么啊,
是不是 T0 ,T1 啊
2:
定时器预置数
这里计算出来的是 FA
是
TH1 = FA;
TL1 = FA;
还是
TH1 = 0;
TL1 = FA;
还是
TL1 = FA
TH1 = 0;
谢谢!
3:
T1 给串口做波特率
我还能用 定时器中断 1 吗?
如果不可以的话
(T0 有别的用途)
那么就需要有 3 个定时器的芯片了,是不?
T1 给串口做波特率
是用哪个寄存器来设置的
我可以用 T0 给串口做波涛率不?
那要怎么设置?
如:
void ComInStr() interrupt 4 //串行口中断
{
}
void timer0(void) interrupt 1 //定时器中断 0
{
TH0 = 0xdc; //重载计数初值 每 3ms 中断一次 (原先是 20ms)
TL0 = 0x00;
}
void timer0(void) interrupt 3 //定时器中断 1
{
}
void main()
{
Delaytimes(100,100); //延时
WDT_CONTR = 0x3c; //内部看们
EA = 0;
TMOD = 0x21; //定时器1模式1 定时器0模式1
//---------------------------处理串口中断---------------------------------------
SCON = 0x50; //串行口工作方式1, 10 位异步收发,波特率由定时器控制
PCON |= 0x00;
TL1 = 0xFA;
TH1 = 0xFA; //22.1184M晶振 波特率9600
//---------------------------处理串口中断---------------------------------------
//------------------------------处理中断喂狗------------------------------------
TH0 =0xdc; //预置计数初值,每 5 ms 中断一次 晶振 22.1184
TL0 =0x00;
//------------------------------处理中断喂狗------------------------------------
EA = 1 ; //允许中断
ES = 1 ; //允许串行中断
ET0 = 1; //T/C0 开中断(定时器0/计数器0)
ET1 = 0; //T/C0 开中断(定时器0/计数器0)
TR1=1; //启动定时器1/计数器1
TR0 = 1; //启动定时器0/计数器0
while(1)
{
;
}
}
1:
波特率发生器
是什么啊,
这个得看看串口原理了,这就是产生每一个绝断周期的时间(好像不太科学,差不多就是这个吧)
2:
定时器预置数
这里计算出来的是 FA
//如果用的定时器是自动重载的方式
那么像下面这个进行初始化,可以保持上面说的那个周期的稳定
是
TH1 = FA;
TL1 = FA;
//下面这两个是一样的
还是
TH1 = 0;
TL1 = FA;
还是
TL1 = FA
TH1 = 0;
谢谢!
//如果LZ的意思是:
TL1 = 0
TH1 = FA; 的话,除了第一个周期差一点外,也不会有啥大问题,只要不是非常急,一上来就发数据,那没办法
3:
T1 给串口做波特率
我还能用 定时器中断 1 吗?
//按理说是不可以用的,因为用了会响应波特率不准,通信误码率上升
//实在不行,如果能保证绝对的计算不会有问题,用也就那样用了。。。
如果不可以的话
(T0 有别的用途)
那么就需要有 3 个定时器的芯片了,是不?
T1 给串口做波特率
是用哪个寄存器来设置的
//默认的。。。
我可以用 T0 给串口做波涛率不?
那要怎么设置?
//这个忘了,印象有的片子可以的
lbing7
自从eeworld不能抢分以后,我就很少来eeworld了.郁闷!!
iFish
自从不能跟eeworld斑猪抢食之后,我也很少来eeworld了,我更郁闷!!!!