严荣国,张永乾,钟凤琦,刘宜汐,吴伟峰,王新宇
(上海理工大学医疗器械与食品学院,上海 200093)
流式细胞术(flow cytometer,FCM)是《医用检验仪器》课程中的一项重要技术,它以流动中的细胞或颗粒为测量对象,能够在短时间内提供具有统计意义的大量单细胞、颗粒或集聚体的测量数据[1-5]。现代流式细胞术综合了流体力学、激光、电子物理、光电测量、计算机、荧光化学及单克隆抗体等技术,是多学科多领域技术进步的结晶,在医学检验领域广泛应用[6-9]。
微机原理主要以8086CPU为对象,详细介绍了8086内部结构、寻址方式、指令系统和汇编语言的程序设计,同时介绍了几种典型的可编程接口芯片,包括可编程并行接口芯片8255A、可编程计数器/定时器8253/8254、可编程中断控制器芯片8259、可编程的通用同步/异步接收发送器8251A,以及数模转换芯片DAC0832、ADC0809等[10-11]。
Proteus软件是英国Lab Center Electronics公司开发的电路设计与分析、电路实物仿真以及印制电路板设计软件,它可以仿真、分析各种模拟电路、集成电路和单片机及外围器件[12-18]。其处理器模型支持8051系列、PIC、AVR、8086和MSP430等。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器[19-22]。
本研究以Proteus8.4版本为平台,联合运用多个芯片,包括8086、AT89C51、8255A、8253A、8259、8251A、DAC0832,实现对血细胞计数原理进行模拟和仿真[23-24]。8086程序用Proteus自带的汇编编译器编写,AT89C51的程序用Keil软件编写。本研究综合练习了定时、中断、串行通信、数模转换、LCD液晶显示、多处理器协同工作等技术。
流式细胞仪的工作原理见图1。将待测细胞染色后制成单细胞悬液,然后用一定压力将该单细胞悬液压入流动室,由磷酸缓冲液制成的鞘液在高压下从鞘液管喷出,鞘液包裹着单细胞悬液作高速流动,组成一个圆形的流束,待测细胞在鞘液的包裹下依次、单个通过激光照射的检测区域,产生前向散射光(forward scatter,FSC)、侧向散射光(sidescatter,SSC)和荧光(fluorescent light,FL)。其中,前向散射光被光电二极管接收,反应细胞体积的大小和数量信息。经光电转换之后,不同体积的细胞所产生的脉冲宽度不同,脉冲宽度和细胞体积大小成正比[25-27]。
图1 流式细胞仪工作原理
整个系统包括三大模块:脉冲发生器(模拟发生各种大小血细胞)、8086CPU脉冲识别模块和AT89C51显示模块,见图2。
图2 仿真系统设计框架
整个系统的工作流程为脉冲发生器产生各种宽度不同的脉冲,脉冲的宽度与细胞直径大小成比例,即血小板(PLT)所对应的脉冲最窄,红细胞(RBC)其次,白细胞(WBC)所对应的脉冲最宽;8086CPU识别脉冲类型并通过串行通信发送相应的信息给AT89C51,AT89C51根据收到的信息点亮点对应的LED指示灯,并累加对应的细胞个数,将细胞计数值和计算得到的细胞直径实时显示在LCD2004液晶上。
血细胞模拟脉冲发生器(见图3),采用一片AT89C51控制DAC0832以产生宽度不同的脉冲信号,分别代表血小板、红细胞和白细胞。
图3 脉冲发生器
AT89C51的P1端口数字信号,通过DAC0832转换为脉冲形式的低电平和高电平,通过软件编程延时使高电平持续时间不同,来实现脉冲宽度的不同。DAC0832是一个8位D/A转换器,有三种工作方式,图3中为直通方式,数据一旦到数据端口就直接开始转换,通过内部梯形电阻网络输出一组差动电流IOUT1和IOUT2(即图3中U9 DAC0832的第11和12号引脚)。通常需要外接一个I/V转换电路,将输出电流转换成电压,转换后的电压是一个负电压,再接一个电压比较器,即可将负电压转换成正电压。
8086CPU脉冲识别模块见图4,包括8086、8255A、8253A、8259、8251A、以及地址锁存器74LS373、地址译码器74LS138和虚拟端口COM2。8253A和8259配合定时产生中断,8086响应中断去读取8255A PC0引脚,即对脉冲发生器产生的脉冲进行采集和识别,当识别到一个完整的脉冲信号后,将识别的结果通过8251A发送给AT89C51。
图4 8086CPU脉冲识别电路原理图
地址锁存器74LS373与8086的地址锁存信号ALE配合,实现地址信息和数据信息的分时复用。8255A、8253A、8259、8251A的数据端口接8086数据总线的低八位,所以,通过74LS138译码产生的每块芯片的每个端口地址需确保是偶地址,才能保证8086和其他接口芯片的正常数据传输。
8086向AT89C51传送信息时,需要每次读取8251A的状态字,查询发送器是否准备好,若准备好,则将需要发送的数据送入发送数据缓冲器,否则循环读取状态等待。血小板脉冲发送01H,红细胞脉冲发送02H,白细胞脉冲发送03H。
AT89C51显示模块见图5,包括AT89C51、虚拟端口COM1、三个LED和LCD2004液晶。AT89C51本身集成了串口通信模块,无需外接串口通信接口芯片。LED显示识别的细胞类型、LCD2004液晶显示三种血细胞的计数值、总和以及细胞直径大小。
图5 AT89C51显示模块
AT89C51的TXD和RXD引脚和虚拟端口COM1的TXD和RXD进行对接。
AT89C51串口波特率的设定跟定时器的计数初值有关,计算公式为:
fosc是晶振频率,X是定时器的初值。如果设置了PCON寄存器中的SMOD位为1时,就可以把波特率提升2倍。设置SMOD=0,即波特率不翻倍,若要得到波特率等于9 600 bps,一般取fosc=11.0592 MHz,这样就可以得到整数定时器的计数值0xFD。
AT89C51初始化程序如下:
SCON=0x50; //设置为工作方式为方式一,10位UART,可变波特率
TMOD=0x20; //设置定时器1工作方式为方式二
PCON=0x00; //设置波特率不翻倍
TH1=0xFD; //设置波特率为9 600 bps
TL1=0xFD;
TR1=1; //启动定时器1
AT89C51每次收到数据时RI(接收中断标志位)被硬件置1,需要用软件复位。接收到的数据存放在SBUF寄存器中,当SBUF=01H时P0口输出01H,血小板个数加1;当SBUF=02H时P0口输出02H,红细胞个数加1;当SBUF=03H时P0口输出04H,白细胞个数加1。
LCD2004液晶与常见的LCD1602液晶操作方式和指令完全相同,只是比LCD1602液晶多两行显示。LCD2004液晶每行首地址分别为00H、40H、14H、54H,此外需要在此基础上加80H,才能得到正确的地址。
图6为血细胞计数的模拟输出。
图6 血细胞计数的模拟输出
LCD2004液晶四行分别显示血小板个数和直径、红细胞个数和直径、白细胞个数和直径(单位:μm)及血细胞总数。三个LED D1、D2、D3代表血小板、红细胞和白细胞,当8086识别到一个模拟脉冲,对应的LED灯闪烁一次。
本研究整合了微机原理和流式细胞术相关知识,设计了基于Proteus的血细胞计数电路原理图,设计方案还可以进一步优化,但已实现了微机原理中涉及的多个接口芯片的综合运用。在设计过程中通过不断解决问题,可以掌握很多细节处理的技巧,强化对课程知识点的理解和汇编语言编程能力。本研究可提高学生运用微机原理知识解决实际问题的能力,并加深对流式细胞计数原理的理解。