找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 743|回复: 3
打印 上一主题 下一主题
收起左侧

单片机定时器实现秒闪功能

[复制链接]
跳转到指定楼层
楼主
ID:1104285 发表于 2023-12-14 17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一次做不是很熟悉,感觉会对新手起到一点作用,请各位大佬指点一些,看着玩玩





#include "reg52.h"

sbit L1 = P0^0;
sbit L8 = P0^7;

void SelectHC573()
{
P2 = (P2 & 0x1f) | 0x80;
}

//=================================
void InitTimer0()
{
TMOD = 0x01;
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;

ET0 = 1;
EA = 1;
TR0 = 1;
}

unsigned char count = 0;
void ServiceTimer0() interrupt 1
{
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;

count++;
if(count % 10 == 0)
{
  L1 = ~L1;
}
if(count == 100)
{
  L8 = ~L8;
  count = 0;
}
}
//================================
void main()
{
SelectHC573();
InitTimer0();
while(1)
{
}
}





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2023-12-15 13:07 | 只看该作者
不断实践就是。。。。。一个建议:不要在中断内写耗时的代码。
回复

使用道具 举报

板凳
ID:208271 发表于 2023-12-15 15:06 | 只看该作者
devcang 发表于 2023-12-15 13:07
不断实践就是。。。。。一个建议:不要在中断内写耗时的代码。

”一个建议:不要在中断内写耗时的代码“,对的,会有意想不到的BUG出现
回复

使用道具 举报

地板
ID:401564 发表于 2023-12-15 23:20 | 只看该作者
对于STC单片机,可以这样写
count = (count+1) % 100;
if(count % 10 == 0)
{
  L1 = ~L1;
}
如果把100改成宏定义,方便以后更改频率
但对别品牌的单片机,不建议这样写,因为问号表达式在某些品牌单片机中,非常的耗时,高精度的定时器会出现不准的情况
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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