利用定时/计数器T1产生定时时钟,
由P1口控制8个发光二极管,
使8个指示灯依次一个一个闪动,
闪动频率为10次/秒(8个灯依次亮一遍为一个周期),循环。
设晶振频率为12MHz。
*/
/*********************************************************/
#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit P1_0=P1^0;
uchar tt,a;
void main() //主函数
{
TMOD=0x01;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
a=0xfe;
while(1);//等待中断产生
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tt++;
if(tt==2)
{
tt=0;
P1=a;
a=_crol_(a,1);
}
}
这是郭天祥十天学单片机第3讲的课后练习的第2题有2个不懂的地方.
1.从题的要求上看是(8个灯依次亮一遍为一个周期闪动频率为10次/秒)我理解是8个灯依次亮一遍为一个周期j 0.1s,第一个灯亮灭就应该是0.1/8等于12.5ms.但从程序上看我理解是第一个灯亮灭就应该是0.1s这就与题的要求不对?
2.if语句的用法不懂tt==2时下面语句
tt=0;
P1=a;
a=_crol_(a,1);
执行一次后就等待下个中断使tt==2后再次执行吗?
菜鸟请大家帮忙解答下谢谢! |