
我看楼上写的程序不怎么好,而且不容易懂,不是单片机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编一个计数器的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)