找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3172|回复: 15
收起左侧

程序是什么意思,看不太懂,求大神解答。。

[复制链接]
ID:149944 发表于 2016-11-24 15:20 | 显示全部楼层 |阅读模式
/*-----------------------------------------------
  名称:定时器0
  编写:shifang
  日期:2009.5
  修改:无
  内容:通过定时产生不同频率方波
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
//TH0=0x00;              //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
//TL0=0x00;
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开
}
/*------------------------------------------------
                    主程序
------------------------------------------------*/
main()
{
Init_Timer0();
while(1);
}

/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1 using 1
{
static unsigned char i;
//重新赋值 12M晶振计算,指令周期1uS,500x2=1mS方波
TH0=(65536-500)/256;                  
TL0=(65536-500)*256;        


i++;
P1=i; //P1口8路输出不同频率,相当于一个分频器,高频用示波
       //器测量,低频可以直接用led观测
       //P1.0输出1ms方波,P1.1输出2ms,p1.2输出4ms,以此类推

}

最后一段,中断里面:
i++;
P1=i; //P1口8路输出不同频率,相当于一个分频器,高频用示波
       //器测量,低频可以直接用led观测
       //P1.0输出1ms方波,P1.1输出2ms,p1.2输出4ms,以此类推

是什么意思,看不太懂,求大神解答。。

回复

使用道具 举报

ID:149944 发表于 2016-11-24 15:21 | 显示全部楼层
help,help
回复

使用道具 举报

ID:138155 发表于 2016-11-24 22:00 | 显示全部楼层
这部分程序只是说定时器及中断的用法 看不出什么程序执行什么功能
回复

使用道具 举报

ID:149853 发表于 2016-11-24 22:32 | 显示全部楼层
你这个程序应该是错的,实现不了要实现的功能,不过如果把i的定义放在全局里面,就可以了。其实就是这个意思。每到一个中断, i++;并且把i的值赋值到P1口,你把i写成16进制的。现在我们来模拟下程序的运行。
第一个中断到了,i变成了1,0x01赋值到p0,此时p1^1就输出高电平。
第二个中断到了,i 变成了2。0x02就是00000010,P1^1变成低电平,P1^2变成高电平。
我们就分析下这两个中断,p1^1每隔一个中断,电平就 取反,中断时间是1ms,这不就是输出1ms的方波吗?
这样你再看下p1^2 输出的是什么,然后类推下去。

但是我说 这程序是错的,因为 i 的定义是在中断程序里面的,这样每次中断程序执行完,这个变量是要释放的,所以  i  的值无法累加。
但是只要把 i 的定义放到全局中就好了

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:149944 发表于 2016-11-25 08:59 | 显示全部楼层
咆哮的阿杰 发表于 2016-11-24 22:32
你这个程序应该是错的,实现不了要实现的功能,不过如果把i的定义放在全局里面,就可以了。其实就是这个意 ...

i放在中断里面,我用keil模拟观察P1.0到P1.7的输出波形,貌似没啥问题。

不过太感谢了,我终于知道是什么意思啦,你的解释太棒了。thank you
回复

使用道具 举报

ID:111634 发表于 2016-11-25 09:14 | 显示全部楼层
建议你从基础学起,否则事倍功半。
回复

使用道具 举报

ID:150082 发表于 2016-11-25 10:59 | 显示全部楼层
程序有点问题吧,朋友,定时器及中断的用法 看不出什么程序执行什么功能
回复

使用道具 举报

ID:149944 发表于 2016-11-25 14:40 | 显示全部楼层
uestchina 发表于 2016-11-25 09:44
TL0=(65536-500)*256;        这句也是错的,改为TL0=(65536-500)%256;

是的,这句是错的,不知道是不是粘贴的时候出现的
不过,谢谢哈,你看的好细心
回复

使用道具 举报

ID:149944 发表于 2016-11-25 14:42 | 显示全部楼层
VxpV 发表于 2016-11-25 10:59
程序有点问题吧,朋友,定时器及中断的用法 看不出什么程序执行什么功能

就是用示波器观察P1口个引脚的频率,我在做一些小练习
回复

使用道具 举报

ID:149944 发表于 2016-11-25 14:43 | 显示全部楼层
uestchina 发表于 2016-11-25 09:44
TL0=(65536-500)*256;        这句也是错的,改为TL0=(65536-500)%256;

是的,可能是粘贴是出现的,谢谢哈,看的好细心
回复

使用道具 举报

ID:149944 发表于 2016-11-25 14:44 | 显示全部楼层
zl2168 发表于 2016-11-25 09:14
建议你从基础学起,否则事倍功半。

嗯嗯,好的,我就是在练习一些小程序
回复

使用道具 举报

ID:150134 发表于 2016-11-25 14:47 | 显示全部楼层
我用keil模拟观察P1.0到P1.7的输出波形,貌似没啥问题。
回复

使用道具 举报

ID:74868 发表于 2016-11-26 16:07 | 显示全部楼层
i数值的增加,P1=i;p1的变化反映其位的变化,相应的位P1.0、P1.1、P1.2相应变化
回复

使用道具 举报

ID:150619 发表于 2016-11-27 20:55 | 显示全部楼层
建议你从基础学起,否则事倍功半。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表