菜鸟刚学单片机,看别人的代码看不明白,请高手讲解一下。

rainword   2008-1-16 14:44 楼主
是51单片机的C语言的代码。
有几处菜鸟都不明白是啥意思,就标上了//这里是啥意思呢??请高手帮我写一下注释,呵呵,谢谢了。
#include
#include

unsigned char data dis_digit;
unsigned char data dis_buf[8];
unsigned char data dis_index;

void main()
{
        P0 = 0xff;
        P2 = 0xff;
        TMOD = 0x50;//这里是啥意思呢??
        TH0 = 0x50;//这里是啥意思呢??
        TL0 = 0xf0;//这里是啥意思呢??
        IE = 0x82;//这里是啥意思呢??

        dis_buf[0] = 0xf9;
        dis_buf[1] = 0x80;
        dis_buf[2] = 0xf8;
        dis_buf[3] = 0x82;
        dis_buf[4] = 0x92;
        dis_buf[5] = 0x99;
        dis_buf[6] = 0xb0;
        dis_buf[7] = 0xa4;
       
        dis_digit = 0xfe;
        dis_index = 0;
       
        TR0 = 1;
        while(1);

}

void timer0() interrupt 1
// 定时器0中断服务程序, 用于数码管的动态扫描
// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,
//                                选通P2.0口数码管
// dis_buf   --- 显于缓冲区基地址       
{
        TH0 = 0xf0;//这里是啥意思呢??
        TL0 = 0xf0;//这里是啥意思呢??
        P2 = 0xff       
        P0 = dis_buf[dis_index];                       
        P2 = dis_digit;                                               
        dis_digit = _cror_(dis_digit,1);        // 位选通值左移, 下次中断时选通下一位数码管
        dis_index++;                                                //
                                       
        dis_index &= 0x07;                        // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描
}

回复评论 (20)

上面是对定时器的操作 ,TMOD   =   0x50;//这里是啥意思呢??
TH0   =   0x50;//这里是啥意思呢??
TL0   =   0xf0;//这里是啥意思呢??
分别是模式,和定时器初值的高位、低位,IE是使能中断,这个在任何单片机的书上都能看到,建议先看书。
点赞  2008-1-16 15:05
TH0   =   0xf0;//这里是啥意思呢??
TL0   =   0xf0;//这里是啥意思呢??
表面上:他们是制定时期的初值

语义上:它重装定时器的值
点赞  2008-1-16 15:28
呵呵,兄弟还是多看看书吧

点赞  2008-1-16 17:15
sfr TMOD = 0x89;
/*
TMOD寄存器
+----+---+---+---+----+---+---+---+
| 7  | 6 | 5 | 4 | 3  | 2 | 1 | 0 |
+----+---+---+---+----+---+---+---+
|GATE|C/T|M1 |M0 |GATE|C/T|M1 |M0 |
+----+---+---+---+----+---+---+---+
|<---计时器1---->|<---计时器0---->|
GATE:Timer0或Timer1必须在INT0或INT1高电平才初始化
C/T:1表示外部引脚T0或T1输入的脉冲计数
+----+----+----------+-------------------------------------+
| M1 | M0 | 工作模式 |              说明                   |
+----+----+----------+-------------------------------------+
| 0  | 0  |     0    | 13位计时/计数器                           |
+----+----+----------+-------------------------------------+
| 0  | 1  |     1    | 16位计时/计数器                           |
+----+----+----------+-------------------------------------+
| 1  | 0  |     2    | 8位计时/计数器,可自动重新载入计数值|
+----+----+----------+-------------------------------------+
| 1  | 1  |     3    | 两组独立8位计时器                   |
+----+----+----------+-------------------------------------+
工作模式0:使用THx的8位和TLx的低5位。可从0数到8191,之后益出产生中断自动清0。
工作模式1:可从0数到65535,之后益出产生中断自动清0。
工作模式2:只使用TLx可从0数到255,之后益出产生中断,同时自动载入TLx。

sfr IE   = 0xA8;
/*
中断寄存器 IE
+---+---+---+---+---+---+---+---+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+---+---+---+---+---+---+---+---+
|EA | - |ET2|ES |ET1|EX1|ET0|EX0|
+---+---+---+---+---+---+---+---+
EA:整体中断使能
ET2:Timer2中断使能//只有52系列才有
ES:Uart中断使能
ET1:Timer1中断使能
EX1:INT1中断使能
ET0:Timer0中断使能
EX0:INT0中断使能
*/
点赞  2008-1-16 19:01
多看点书,都是基本概念
点赞  2008-1-17 09:19
UP
点赞  2008-1-17 09:37
看单片机原理
点赞  2008-1-17 16:08
找本单片机的书看看。大概看一遍,然后用到哪块,具体去查那一块的原理和应用例子。没有给我发个邮件,我发个电子版给你
点赞  2008-1-18 14:05
看看定时器部分吧!
对于每个寄存器的每个位都有详细介绍
点赞  2008-1-18 15:26
51的基本知识并不复杂,把《中断》、《定时器/计数器》、《串口》和《并口》四大块稍微整理一下做个笔记,就什么都明白了。
点赞  2008-1-19 23:10
有空灌水没空看书咯!
点赞  2008-3-24 10:57
4楼说的不错,楼主应该在问之前在书上翻翻。
点赞  2008-3-24 13:51
兄弟看看单片机的datasheet吧
_-!!
点赞  2008-3-24 16:00
可以找个单片机的书看看,比较基础的东西
点赞  2008-3-28 10:41
TMOD = 0x50;//这里是啥意思呢??
TH0 = 0x50;//这里是啥意思呢??
TL0 = 0xf0;//这里是啥意思呢??
IE = 0x82;//这里是啥意思呢??
这是都是寄存器赋值,在头文件里应该能看到他们的初始化地址,跟硬件有关.
点赞  2008-3-28 11:28
TMOD = 0x50;//这里是啥意思呢??
0101 0000
第一个1是C/T(counter ,timer)选项: 表示这里作为计数器用 如果等于0则是做定时器用
第二个1和前面紧挨的那个0合用,01表示工作在模式1下,即为16位计数


TH0 = 0x50;//这里是啥意思呢??
TL0 = 0xf0;//这里是啥意思呢??

TH0,TL0这里是给定时器(这里作计数)重装初值,具体有公式可以计算出计数的最大值

IE = 0x82;//这里是啥意思呢??
1000 0010
这里是中断允许控制,
第一个1表示允许中断(相当于几个不同终端的总开关,后面是控制各个不同中断的小开关)
第二个1表示允许定时器0中断,即,前面的定时器计数到最大值要重装的时候产生一个中断
点赞  2008-3-28 12:10
单片机里面那些参数和控制实在太多了,所以你用到哪里,就要亲自动手查一查,看看相关说明就知道了。旁边放本书,或者电子资料,随时查找。
点赞  2008-3-28 12:11
这一版块,太没人气了,是不是大家都成大侠了

如果成大侠了,也常回家看看嘛,家里太冷清了

据说努力顶帖也是一种美德,但我只想大家常回家看看

毕竟每天都有新手需要帮忙,而我能帮的只能是把帖子顶起来
点赞  2008-4-4 01:04
不知,帮顶
点赞  2008-4-30 12:34
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复