上面有很多中断和定时器的东西,可参考有关书籍,没多复杂。IE=0X40就相当于是IE=0X00,01000000,00000000,其中有1的那一位不起作用。它是IE中断寄存器。
10ms是波特率相关,硬件决定的,初期可以查表确定装载的数值。
前一部分程序是延时的,猜测后一部分是4*4键盘的吧。具体可以HI我。
……无敌型的……C语言你懂……汇编不行?
至少偶木有发现汇编代码……几乎全是C语言的。所以你不需要注释……
饿。。。
你问的都是C里面的 预处理指令。具体的你自己去查一下,
1. #define 宏名 宏定义字符串
2. # ifdef 标识符
10ms这种是和硬件有关的,这里就是你单片机的timer.
具体的你自己查下么。。
FOSC估计是晶振频率。
原理就是设置后会一直累加,当溢出(2^16=65536)时,触发ET2。
但是IE=0x40时ET2中断才能被接受。
硬件参考Table 5里面有IE的值的含义,太长,不在描述。
如果主频是24MHz
10ms就是24MHz*0.01s=0.24M
如果主频是18.432MHz
10ms就是18.432MHz*0.01s=0.18432M
#define TIMER2H 0xB1 //10ms
#define TIMER2L 0xE0
TIMER2=0xB1E0 = 45536
每次计数时间=(2^16-45536)*12=0.24M
硬件参考的2-89页有详细的描述和计算方法。
你直接去看AT89S51的参考手册好了。
编程参考:
http://www.atmel.com/dyn/resources/prod_documents/doc0509.pdf
硬件参考:
http://www.atmel.com/dyn/resources/prod_documents/doc4316.pdf
这个一定要给分!帮你把公式算出来了!