打印
[51单片机]

菜鸟请教大家一个C51程序

[复制链接]
735|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
YYFSYYY|  楼主 | 2015-7-17 12:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用定时/计数器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后再次执行吗?
菜鸟请大家帮忙解答下谢谢!

相关帖子

沙发
diweo| | 2015-7-17 14:33 | 只看该作者
1,程序是对的,应该是每个灯都0.1亮灭。只不过是从第一个灯的亮灭到最后一个灯的亮灭的切换要在1秒内完成。
2,当然是每次中断都会执行if(tt==2),只不过这个条件不一定成立,所以大括号里面的东西不是每次中断都执行的。确切的说,是一次隔一次的执行。

使用特权

评论回复
板凳
YYFSYYY|  楼主 | 2015-7-17 16:59 | 只看该作者
本帖最后由 YYFSYYY 于 2015-7-17 21:30 编辑

程序是对的,但总觉的题目写的有问题如果没有括号里的"8个灯依次亮一遍为一个周期"这句话就好理解了.还有第三题的题目也觉的有问题
"同时用两个定时器控制蜂鸣器发声,定时器0控制频率,定时器1控制同个频率持续的时间,间隔300ms依次输出1,10,50,100,200,400,800,...1k(hz)的方波".
频率1hz周期应该是1秒对吧那如何在间隔为300ms秒输出频率1hz方波了?如果将300ms改为大于1秒就没问题了.非常感谢diweo学长的回复:handshake

使用特权

评论回复
地板
ayb_ice| | 2015-7-17 17:11 | 只看该作者
每次中断50MS,两次中断(100MS)控制一次,

就是这样的

等于2时执行后又清零了,重新计时

使用特权

评论回复
5
diweo| | 2015-7-18 10:11 | 只看该作者
1,关于LED闪动,题目那样描述,我觉得不存在理解上的问题。
2,那个1Hz,是有点不够严谨。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

粉丝