微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 初学单片机,定时器遇到问题,那位大神帮忙解决解决~~~

初学单片机,定时器遇到问题,那位大神帮忙解决解决~~~

时间:10-02 整理:3721RD 点击:

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uint t0;
  6. void init()
  7. {
  8.         TMOD=0x11;
  9.         TH0=(65535-50000)/256;
  10.         TL0=(65535-50000)%256;
  11.         EA=1;
  12.         EX0=1;
  13.         TR0=1;                                                                        
  14. }

  15. void main()
  16. {
  17.     P1=0x01;
  18.         t0=P1;
  19.         while(1)
  20.         {
  21.                 init();        
  22.         }
  23. }

  24. void timer0() interrupt 0
  25. {
  26.         TH0=(65535-50000)/256;
  27.         TL0=(65535-50000)%256;
  28.         t0=_cror_(t0,1);        
  29. }

复制代码


我想做一个LED流水灯  下载进去后 灯不会移位~~~请高手指点指点~~

1、一般都是用typdefine usinged int uint,那样是不合适的用法。
2、你的init()函数不应该一直放在while(1)循环当中,否则会一直给定时器赋初值,定时器永远没法溢出自然进不了中断。
3、以上是我的看法,仅供参考!

首先定时器的初始化 如定时器0 应该是TMOD=0x01;//工作方式1TH0=...;
TL0=...;
ET0=1;//用定时器0应使用“ET0”定时器T0中断允许控制位。EX0是外部中断允许控制位,靠P3^2的信号变化来进入中断程序,外部触发中断才会用到EX0
TR0=1;//启动定时器0
在main函数中,
while(1)
{
    init();// 这个while循环会一直执行init()这个函数,即使定时器工作了,也不会好好干活的
}                                                         

因为像初始化的语句,只需在最开始执行一次就可以了,你可你自己改改
关于I/O的操作
t0  = P0;//将P0口的数据赋给t0
如果想给P0口赋值,可以直接P0=t0;
LZ在改改看看

1.设置定时器0有误,EX0=1是外部中断0,应该是ET0=1; 2.定时器初始化程序应该置于while之前 3.最后要将t0的值送往P1口

你的灯怎么移动呀?你都没有给P1送值,而且初始化就开始执行一次就行了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top