作者Magicx (菊花普洱茶)
看板Electronics
标题Re: [问题] 8051之C语言问题
时间Sun Feb 4 23:09:13 2007
※ 引述《CuckooBoy (阿书)》之铭言:
: SORRY!我研究了一个下午...还是有以下一些问题想请教各位大大..
嗯..不知道原PO您自修参考的的资料是哪些...
如果可以的话小弟建议您还是买本KEIL C实务教学的书看看
因为您可能少了一些微处理机或计组计结的底子..
所以这样乱摸下去也很辛苦...或是修一下相关的课程吧^^
: 我只是想用timer0作 0~10记时
: 1. 下面程式是否已经是使用Timer0必须输入的指令?有少吗?
: 因为我看一些的资料,还有写到函式void timer1_ISR (void) interrupt 3
这是中断函式...向量3我记得好像是TIMER1?
: 但是,我测试结果,只要给TMOD跟TR0,Timer0就会跑啦?
TIMER的使用是8051本身硬体的计数暂存器...TR0给下去固然会跑
可是你下面是操作在模式1不是AUTO-RELOAD...所以当16-BIT的TH_TL溢位了
你什麽事也没做也是白搭...
: 2. TL0为什麽都是+2在计数? 当TL0=0xFF时,TH0才+1呢? 两者的用途?
当您操作在16-BIT时...他的关系是{TH0_TL0}并在一起的16-BIT暂存器
如果是在模式2"AUTO-RELOAD"时当TL0溢位时会自动将TH0的值 RELOAD给TL0
(很久没碰了..有点忘记..也可能是2个脚色互换..总之是一个做计数..
一但溢位则从另一个读值进来继续计数...PS. 8051的TIMER为向上计数)
: 3. 我要取计数的结果,是要用哪个变数呢?TH0吗?
: (假如不影响计时下,计时到10,x要为1,那我是写 if (TH0 = 0xFF){ x=1}吗?)
因为您只要计数10..所以模式1的16-BIT_可说是大才小用...
建议您使用模式2.将计数的那个(假设是TL0)一开始设为256-10=246..TH0亦是
之後再写个中断函式...向量为2..里面是你每计数到10要做的事就可以了
: 4. 假如我要记时到10,所以TL0=0xF6,TH0=FF,但我看到他第六次就TF0=1溢位勒?
: (65536-10)/32 取商跟余数的16进位
: 溢位後,记时器不是应该又回到TL0=0xF6,TH0=FF开始计时吗?好像不没有耶!!!
一样...模式1硬体是不会自动RELOAD..必须您用软体做
: #include <reg52.h>
: #include <stdio.h>
: void main (void)
: {
: TMOD = 0x01;
: TR0 = 1;
: while (1);
: }
手边没有书...一切凭印象...除了一些小细节..大部分的问题应该都有解决到
有时间的话.我再找找之前写的小范例给您看看..
有错还请指教^^
----------------------------------------
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.175.197.87