FIFO是什么? FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WWW_P※LCJS_COM-PLC-)技.术_网
FIFO的软件机制实现,根据RAM的容量大小及FIFO所需的空间,在RAM中开设一片缓冲空间. 设定一个FI地址指针,和一个FO的地址指针,再设定一个数据量的计数存储器.如果需要FI时,只需要将数据存入设定的地址单元,然后将计数存储器和FI地址指针加1即可.当需要FO时,只要检测到计数存储器的内容不为0,说明缓冲器内有数据需要送出.则将缓冲器的内容取出,再将FO的地址指针加一,并将计数寄存器的内容减一即可.WWW_PLC※JS_COM-PmLC-技.术_网
WWW_PLCJS_COM-PLC-技.术_网
FIFO有什么作用呢, 利用FIFO有时可以实现快速处理.提高控制的速度.比如,我们SPI,IIC或者UART将采集的一组数据送出去,但是这些数据传送都是需要一定时间的,有时为了不耽误数据采集的时间,就可以采集的数据直接先连续的存放在缓冲区内.数据的发送交给另外一个任务去处理.这样就不会耽误数据采集任务的时间来等待每个字节的发送完毕了.WWW_P※LCJS_COM-PLC-)技.术_网
WWW_PL※CJS_COM-PLC-技.术_网
下面以FPPA的软件实现来进一步形象说明.该FIFO缓冲器设定在20~2F单元内.WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
定义一些控制变量:WWW_PLCJS@_COM%-PLC-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
int temp100 ;FI时用的临时变量,同任务中其他地方也可用WW.W_PLC※JS_C,OM-PL,C-技.术_网
word fiindex ;便于访问的指针变量,同任务中其他地方也可用P.L.C.技.术.网——可编程控制器技术门户
word foindex ;便于访问的指针变量,同任务中其他地方也可用WWW_PLCJS@_COM%-PLC-技.术_网
int temp200 ;FO输出数据存放单元WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
int fifo_counter ;数据个数计数单元WWW.PLCJS.COM——可编程控制器技术门户
int fi_pointer ;FI指针控制W1WW_P4LCJS_COM-PLC-技.术_网
int fo_pointer ;FO指针控制——可——编——程——控-制-器-技——术——门——户
WWcW_PLCJS_COM-PLC-技.术_网
-----------------------------------------------------WWW.PLCJS.COM——可编程控制器技术门户
WW.W_PLC※JS_C,OM-PL,C-技.术_网
FIFO使用之前也需要初始化的:WWW_PLCJS_COM-PLC-技.术_网
WWW_PLCJS@_COM%-PLC-技.术_网
;---------------fifo initial sub program----------------------W1WW_P4LCJS_COM-PLC-技.术_网
;Name :fifo_initialWWW_PL※CJS_COM-PLC-技.术_网
;Input :voidWWW_PLCJS_COM-PLC-技.术_网
;Output :voidWWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
;temp REG :voidplcjs.技.术_网
;Function : WWW_PLCJS@_COM%-PLC-技.术_网
;Argument : P.L.C.技.术.网——可编程控制器技术门户
;------------------------------------------------------------- plcjs.技.术_网
fifo_initial:P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
mov a, FIFO_START_RAM_ADDRWW.W_PLCJS_COM-PLC-技.术_网
mov fi_pointer, aWWW_PLC※JS_COM-PmLC-技.术_网
mov fo_pointer, aWWW_P※LCJS_COM-PLC-)技.术_网
clear fifo_counterP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
clear hb@fiindexP_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
clear hb@foindexWW.W_PLCJS_COM-PLC-技.术_网
retWWcW_PLCJS_COM-PLC-技.术_网
WWW_PLC※JS_COM-PmLC-技.术_网
-------------------------------------------------WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW.PLCJS.COM——可编程控制器技术门户
FI子程序:WWW_PLCJS@_COM%-PLC-技.术_网
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
;---------------fi operation sub program----------------------WW.W_PLC※JS_C,OM-PL,C-技.术_网
;Name :fi_dataWWW.PLCJS.COM——可编程控制器技术门户
;Input :aP.L.C.技.术.网——可编程控制器技术门户
;Output :voidWWW_P※LCJS_COM-PLC-)技.术_网
;temp REG :temp100WWW_P※LCJS_CO※M-PLC-技-.术_网
;Function :fi operation WWW_P※LCJS_CO※M-PLC-技-.术_网
;Argument :temp100 save a temp, WWW_PLCJS_COM-PLC-技.术_网
;------------------------------------------------------------- WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
fi_data:WWW_PLCJS@_COM%-PLC-技.术_网
mov temp100, aWWcW_PLCJS_COM-PLC-技.术_网
mov a, fi_pointerWWW_PLCJS@_COM%-PLC-技.术_网
mov lb@fiindex, a——可——编——程——控-制-器-技——术——门——户
mov a, temp100WWW_PL※CJS_COM-PLC-技.术_网
idxm fiindex, aWWW_PL※CJS_COM-PLC-技.术_网
inc fifo_counterWWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
inc fi_pointerWWW_PLCJS_COM-PLC-技.术_网
mov a, 0x2fWWW_P※LCJS_CO※M-PLC-技-.术_网
and fi_pointer, aWWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
ret——可——编——程——控-制-器-技——术——门——户
WWcW_PLCJS_COM-PLC-技.术_网
;------------------------------------------WW.W_PLC※JS_C,OM-PL,C-技.术_网
P.L.C.技.术.网——可编程控制器技术门户
FO子程序:WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
;---------------fo operation sub program----------------------plcjs.技.术_网