十六制计数器和流水灯

51做 十六制计数器和流水灯

小记

本文重点在使用了 51单片机的计时中断,和在proteus中仿真要注意的代码。

参考:定时器使用demoproteus仿真

十六进制计数器

题目要求:用P0.0- P0.03设计一个在0-15之间自动计数的十六进制计数器,每个数值保持0.2s。

代码

#include<reg52.h>
void Timer0Init(void)		//20微秒@12.000MHz
{
	TMOD = 0x02;		//设置定时器模式
  TL0 = 0x10;		//设置定时初值
	TH0 = 0x10;		//设置定时重载值

	EA=1;			//开总中断
	ET0=1;			//开定时器中断
	TR0=1;			//启动定时器0
    
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
}

int num=0;
int cnt=0;
void T0_time() interrupt 1
{
  ++num;
	if(num==10000) 
	{
		num=0;
		cnt=(cnt+1)%16;
		P0=cnt;
	}
}

void main()
{
	Timer0Init();
	while(1);
}

电路图

mark

代码解释

setp1: 定时部分代码可以使用 stc-isp生成,但是还要再修改

mark

step2:

.但是AUXR是一个扩展的寄存器,是51的增强型才有,而proteus中没有,故要删除这行。

step3: 添加中断

mark

(from 手册里的8位自动重装)

知道要打开 中断1,添加

EA=1;			//开总中断
ET0=1;			//开定时器中断

step4:计算 0.2s由 几个 20 μ s 20\mu s 20μs 组成

用8位自动重载生成10微秒中断。
1 μ s = 1 0 − 6 s 1 m s = 1 0 − 3 s 因 此 0.2 s = 200 m s = 2 ∗ 1 0 5 μ s = 1 0 4 ∗ 20 μ s 1\mu s=10^{-6}s\\ 1 ms =10^{-3}s\\ 因此 0.2s=200ms=2*10^5\mu s=10^4*20\mu s 1μs=106s1ms=103s0.2s=200ms=2105μs=10420μs

流水灯

代码

#include<reg52.h>

void delay(int a)
{
	a=a*10;
	while(a--);
}


void main()
{
	int cnt=0;
	int arr[]={1,2,4,8,16,32,64,128};
while(1)
{
		P0=arr[cnt];
		cnt=(cnt+1)%8;
		
		delay(1000);
}

}

easy,不解释

在上面的基础上再添加了一排灯,总图为

mark

杂(可以不看)

stc89c51和AT89C51区别?

它们两统称为51单片机

为什么课本学的是15单片机,而使用的是51单片机。、

单片机手册可以区stc官网找

参考博客:传送门1-讲到外接存储器部分

老师使用面包板对 15单片机的4个模式进行测试,

在不同的解法和输出下,观察led灯的亮暗知道不同模式的电流大小。

STC15F2K60S2单片机的所有I/O口均有4种工作模式::准双向口(传统8051单片机I/O模式)、推挽输出、仅为输入(高阻状态)与开漏模式

但是proteus不支持15单片机的仿真,而 51单片机是远古单片机,只有准双向口这种输出模式(就是普通的开漏输出加上拉)故而不能在proteus上测试这4种模式的效果。

小。

STC15F2K60S2单片机的所有I/O口均有4种工作模式::准双向口(传统8051单片机I/O模式)、推挽输出、仅为输入(高阻状态)与开漏模式

但是proteus不支持15单片机的仿真,而 51单片机是远古单片机,只有准双向口这种输出模式(就是普通的开漏输出加上拉)故而不能在proteus上测试这4种模式的效果。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是Mally呀!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值