» 您尚未 [登录 - 注册] ┆ 帮助 ┆ Archiver ┆ ┆ 
--> 标题: 新人求教
您是本帖第1835个阅读者。
性别:男<br>状态:离线<br>积时:4 天 22 小时 43 分 58 秒
comfily


小学生

头衔:未定义
等级:小学生
帖数:1
金钱:8
S币:0
收藏 举报 1F 资料 | 留言 | 编辑 | 引用 | 评帖 | 主页
新人求教

看书实践 写个小程序 总也搞不定


想法是用中断实现led闪烁


用中断产生50ms 想亮多久就是多少个50ms 灭也一样 但我的程序没延时 高人 前辈 老大们 能给指点一下为什么吗 程序如下


#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

#define M1 45872

sbit led01=P3^4;

uchar num;  //声明变量num

void T01();  //声明函数 T01 (T01是一个动作 我想让led点亮T01秒)

void delay6(); //声明函数 delay6 (delay是灭的时间 想实led灭6秒)

void init()  //初始化 抄书的 我理解其意思是定义计时器工作模式 给计中断定义时间和开总中断 开定时器等


 TMOD=0x01;

 TH0=(65536-M1)/256;  //TH0=0x4B/75

 TL0=(65536-M1)%256;  //TL0=0xFD/253 (65536-M1)Mod256

 EA=1;

 ET0=1;

 TR0=1;

void main()


 init();  //调用初始化函数

 while(1)    //循环下面的两个函数

 {

  T01();  //执行T01函数

  delay6(); //执行delay6函数

 }

void T01()   //T01点亮1秒函数主体


 led01=0;  //进入函数后 先打开led01

 num++;   //计时器累加 仿真到这里时 TH0=0x4C TL0=0x03

 if(num==12)  //如果加到12 说明0.6秒时间到 仿真时每次执行到这里直接就跳过去了 没有累加

 {

  num=0;  //计数器清零

  led01=1; //led关闭

 }

void delay6()  //延时6秒的函数体


 led01=1;

 num++;   //累加 每次也是到这里就跳过去了 我老觉得是中断的数据没传过来

 if(num==120) //如果加到120个 说明6秒时间到

 {

  num=0;   //清零 这段是想让mcu等在那6秒 就是让led灭6秒

 }

void T0_time() interrupt 1


 TH0=(65536-M1)/256;  //书上说为了保证每次都是50ms 所以要重装初值

 TL0=(65536-M1)%256;  //我觉得我写的这个根本就没执行到这里

 num++;







----签名档 --------------------------------------------------------
眼镜蛇论坛欢迎您!

Posted:2013-06-09 11:17:15
 每页10条,共1页,合计1条记录
9  1  :
转到  


Powered By:Discuz! 6.0 Processed in:0.109375s,13 queries.
眼镜蛇论坛|单片机论坛| 技术支持:【QQ】1522066584

免 责 声 明 本站提供网上自由讨论使用,所有个人言论并不代表本站立场,与本站立场无关,本站不会对其內容负上任何责任。
假若內容有涉及侵权,请立即联络我们。我们将立刻从网站上刪除,并向所有持版权者致最深的歉意。