请大家给我写一个用单片机c语言变的程序,要求:用定时器实现灯的闪烁

请大家给我写一个用单片机c语言变的程序,要求:用定时器实现灯的闪烁,第1张

我看楼上写的程序不怎么好,而且不容易懂,不是单片机c语言吧,于是自作主张的自己又写了一个,是51单片机的,12MHz晶振。我猜你现在用的是51吧?

#include

#define

uchar

unsigned

char

sbit

Led=P1^0;

uchar

counter;

void

timer1()

interrupt

3

using

1

{

TH1=-50000/256;

TL1=-50000%256;

counter=counter+1;

}

void

main()

{

counter=0;

TMOD=0x50;

TH1=-50000/256;

TL1=-50000%256;

//定时50ms,16位定时器

EA=1;

TR1=1;

while(1)

{

if(counter==20)

{

counter=0;

Led=~Led;

//led灯闪烁

}

}

}

楼主觉得可以的话,一定要给满意噢,若有什么不满意的地方,请继续追问。对啊,中断里面的程序一定要短,中断嘛,本来就是要告诉单片机该做什么的了。

汇编中的PC指program counter(程序计数器)。

程序计数器是用于存放下一条指令所在单元的地址的地方。计算机中提供要从存储器中取出的下一个指令地址的寄存器,通常情况下,每一个指令取出后寄存器就自动增加一步。

程序计数器包含当前正在执行的指令的地址(位置)。当每个指令被获取,程序计数器的存储地址加一。在每个指令被获取之后,程序计数器指向顺序中的下一个指令。当计算机重启或复位时,程序计数器通常恢复到零。

扩展资料:

PC程序计数器的作用及特点:

1、为了保证程序(在 *** 作系统中理解为进程)能够连续地执行下去,处理器必须具有某些手段来确定下一条指令的地址。

2、当执行指令时,处理器将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。

参考资料来源:百度百科-program counter

举个简单点的例子,如下。

设计一个4bit的计数器,在记到最大值时输出一个信号

module counter_16 ( input clk, input rst_n, input cnt_in ,output reg cnt_out );

reg [3:0] cnt;

always @ (posedge clk or negedge rst_n) begin

if (~rst_n)  cnt <= 4'b0;

else if (cnt_in) cnt <= cnt +1'b1;

else cnt <= cnt;

end

always @ (posedge clk or negedge rst_n) begin

if (~rst_n) cnt_out <= 1'b0;

else if (cnt_in && cnt == 4'b1111) cnt_out <= 1'b1;

else cnt_out <= 1'b0;

end

endmodule

这实际上设计了一个16进制计数器其中的一位,你可以例化多个相同模块,将低位的cnt_out连接到高位的cnt_in,级联成一个任意位数的16进制计数器。

不是的,程序计数器(Program Counter, PC)不属于指令缓存(Instruction Cache)部分。

程序计数器是一个CPU中的寄存器,它的作用是记录当前执行到的指令的地址或位置。当CPU执行指令时,程序计数器会按照程序的逻辑顺序更新指令地址,以便后续执行下一条指令。

而指令缓存是处理器内部的一种高速缓存,主要用于存储最近使用的指令,以便尽可能快地引用和执行这些指令。指令缓存通常是每个CPU核心独立存在的,与程序计数器的作用不同,它是在执行指令时加速访问指令的存储单元,提高CPU性能的重要组成部分。

因此,程序计数器是CPU中与指令流程有关的寄存器,而指令缓存是一种用于存储指令的高速缓存。它们在CPU的不同部件中具有不同的作用和应用场景。

我看了一下你的代码,有点儿不精简,而且按单词长度计算个数的算法不怎么好。

我呢按自己的思路写了一下代码,你参考一下。

你可能输入的是一个字符串,字符串中包含了多个单词,不过没关系,scanf()函数是按空格或换行结束每个单词的输入的。所以只要一输入空格或者换行,它就会计算刚才单词的长度,并且该长度的num++;我解释一下num数组的含义:num[i]表示长度为i的单词的个数。

#include <stdioh>

#include <stringh>

int main()

{

char word[15];

int num[15]={0}, t, i;

while(scanf("%s", word)!=EOF)

{

t=strlen(word);

num[t]++;

}

for(i=1; i<=10; i++)

{

printf("长度为%d的单词有%d个\n", i, num[i]);

}

}

以上就是关于请大家给我写一个用单片机c语言变的程序,要求:用定时器实现灯的闪烁全部的内容,包括:请大家给我写一个用单片机c语言变的程序,要求:用定时器实现灯的闪烁、汇编当中的PC意思是指的啥,就是PERSON COMPUTER么、用Verilog编一个计数器的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10079091.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存