
1.编辑输入VHDL程序并设为当前工程文件
设:clr为系统时钟,clr为异步伍毕清零控制端,load为同步置数控制端,date为同步置数数据输入端口,count为计数器输出端口
实体名为:add4b.VHD
2.编译设计文蚂滚件并予仿真验证
VHDL程序:
LIBRARY ieee
USE ieee.std_logic_1164.all
USE ieee.std_logic_unsigned.all
ENTITY add4b IS
PORT(
date:IN STD_LOGIC_VECTOR(3 DOWNTO 0)
load:IN STD_LOGIC
clr:IN STD_LOGIC
clk:IN STD_LOGIC
count:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)
)
END ENTITY add4b
ARCHITECTURE upcount OF add4b IS
BEGIN
upcount:PROCESS(clk,clr)
BEGIN
IF clr='1' THEN count<=x"0"
ELSIF rising_edge(clk) THEN
IF load='1' THEN count<=date
ELSE count<= 闷橘余count +1
END IF
END IF
END PROCESS upcount
END upcount
3.波形仿真
注意:多数C语言编译器不支持多线程,而且ANSI C也没有线程库,因此C语言无法实现实际意义上的定时器(即包含触发机制的定时器)。
回到本问题:
1 计数器:
简单的int变量(一般为全局或相对全局)就可以实现。
2 计时器:
包含time.h,使用clock相关函数,通过运行时间差来实现计慎衫时功能。示例:
/*@*/ clock_t startstart = clock()
……
/*@*/ clock_t endend = clock()
float start2end = (float)(endend-startstart)/CLOCKS_PER_SEC
// 这里的start2end就是时间差陵滑
3 定时器
使用系统API,比如Windows下的Sleep()函数(注意,是大尺孝腊写),原型如下:
VOID Sleep(
DWORD dwMilliseconds // sleep time in milliseconds
)
1.以查询方式工作,每计满100个脉冲,则取反P1.0口线状态。
ORG 0000HMOV TMOD, #06H
MOV 伍野 TH0, #156
MOV TL0, #156
SETB TR0
LP: JNB TF0, LP
CPL P1.0
SJMP LP
END
2.以中断方式工作,每计腊橘耐满200个脉冲,则取反轮春P1.0口线状态。
ORG 0000HSJMP START
ORG 000BH
CPL P1.0
RETI
START:
MOV TMOD, #06H
MOV TH0, #56
MOV TL0, #56
SETB TR0
MOV IE, #82H
SJMP $
END
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)