网上有关“单片机18b20的资料”话题很是火热,小编也是针对单片机18b20的资料寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
DS18B20一线总线数字式传感器的原理与使用
________________________________________
DS18B20、 DS1822 “一线总线”数字化温度传感器是DALLAS最新单线数字温度传感器, 同DS1820一样,DS18B20也 支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。
DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
DS18B20的内部结构
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下:
15元/只
DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。
该字节各位的意义如下:
TM R1 R0 1 1 1 1 1
低五位一直都是1 ,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)
分辨率设置表:
R1 R0 分辨率 温度最大转换时间
0 0 9位 93.75ms
0 1 10位 187.5ms
1 0 11位 375ms
1 1 12位 750ms
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
DS1820使用中注意事项
DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。
(2)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
(3)连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
(4)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。
本站实验板实验程序:
;这是关于DS18B20的读写程序,数据脚P2.2,晶振12MHZ
;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒
;可以将检测到的温度直接显示到AT89C51开发实验板的两个数码管上
;显示温度00到99度,很准确哦~~无需校正!
ORG 0000H
;单片机内存分配申明!
TEMPER_L EQU 29H;用于保存读出温度的低8位
TEMPER_H EQU 28H;用于保存读出温度的高8位
FLAG1 EQU 38H;是否检测到DS18B20标志位
a_bit equ 20h ;数码管个位数存放内存位置
b_bit equ 21h ;数码管十位数存放内存位置
MAIN:
LCALL GET_TEMPER;调用读温度子程序
;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度
;显示范围00到99度,显示精度为1度
;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位
;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度
MOV A,29H
MOV C,40H;将28H中的最低位移入C
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A
LCALL DISPLAY;调用数码管显示子程序
CPL P1.0
AJMP MAIN
; 这是DS18B20复位初始化子程序
INIT_1820:
SETB P3.5
NOP
CLR P3.5
;主机发出延时537微秒的复位低脉冲
MOV R1,#3
TSR1:MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB P3.5;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P3.5,TSR3;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4 ; 延时
TSR3:
SETB FLAG1 ; 置标志位,表示DS1820存在
CLR P1.7;检查到DS18B20就点亮P1.7LED
LJMP TSR5
TSR4:
CLR FLAG1 ; 清标志位,表示DS1820不存在
CLR P1.1;点亮P1。1脚LED表示温度传感器通信失败
LJMP TSR7
TSR5:
MOV R0,#117
TSR6:
DJNZ R0,TSR6 ; 时序要求延时一段时间
TSR7:
SETB P3.5
RET
; 读出转换后的温度值
GET_TEMPER:
SETB P3.5
LCALL INIT_1820;先复位DS18B20
JB FLAG1,TSS2
CLR P1.2
RET ; 判断DS1820是否存在?若DS18B20不存在则返回
TSS2:
CLR P1.3;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒
LCALL DISPLAY
LCALL INIT_1820;准备读温度前先复位
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200; 将读出的温度数据保存到35H/36H
CLR P1.4
RET
;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOV R2,#8;一共8位数据
CLR C
WR1:
CLR P3.5
MOV R3,#6
DJNZ R3,$
RRC A
MOV P3.5,C
MOV R3,#23
DJNZ R3,$
SETB P3.5
NOP
DJNZ R2,WR1
SETB P3.5
RET
; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:
MOV R2,#8;数据一共有8位
RE01:
CLR C
SETB P3.5
NOP
NOP
CLR P3.5
NOP
NOP
NOP
SETB P3.5
MOV R3,#9
RE10:
DJNZ R3,RE10
MOV C,P3.5
MOV R3,#23
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;显示子程序
display: mov a,29H;将29H中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div ab
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b
mov dptr,#numtab ;指定查表启始地址
mov r0,#4
dpl1: mov r1,#250 ;显示1000次
dplop: mov a,a_bit ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
mov p0,a ;送出个位的7段代码
clr p2.0 ;开个位显示
acall d1ms ;显示1ms
setb p2.0
mov a,b_bit ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
mov p0,a ;送出十位的7段代码
clr p2.1 ;开十位显示
acall d1ms ;显示1ms
setb p2.1
djnz r1,dplop ;100次没完循环
djnz r0,dpl1 ;4个100次没完循环
ret
;1MS延时(按12MHZ算)
D1MS: MOV R7,#80
DJNZ R7,$
RET
;实验板上的7段数码管0~9数字的共阴显示代码
numtab: DB 0F3H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
end
以下是第二种采集和处理程序供网友参考
;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒
;将温度数据通过串口发送出去,波特率2400
;本程序专为AT89C51实验开发板编写.适合12晶振
;本程序经过验证,可以显示温度+/-和两位整数温度和两位小数温度数据
DOT EQU 30H
ZHENGSHU EQU 31H
FLAG1 EQU 38H ;是否检测到DS18B20的标志位
;定义温度数据
DIS_1 EQU 32H ;符号
DIS_2 EQU 33H ;十位
DIS_3 EQU 34H ;个位
DIS_4 EQU 35H ;小数点后第一位
DIS_5 EQU 36H ;小数点后第二位
WDDATA BIT P2.2 ;定义DS18B20的数据脚为P2.2端口
ORG 0000H
;以下为主程序进行CPU中断方式设置
CLR EA ;关闭总中断
MOV SCON,#50H ;设置成串口1方式
MOV TMOD,#20H ;波特率发生器T1工作在模式2上
MOV TH1,#0F3H ;预置初值(按照波特率2400BPS预置初值)
MOV TL1,#0F3H ;预置初值(按照波特率2400BPS预置初值)
SETB TR1 ;启动定时器T1
;以上完成串口2400通讯初始化设置
;-------------------------
; 主程序
;-------------------------
MAIN:
LCALL INIT_1820 ;调用复位DS18B20子程序
MAIN1:
LCALL GET_TEMPER;调用读温度子程序
LCALL FORMULA ;通过公式计算,小数点后显示两位
LCALL BCD
LCALL DISPLAY ;调用串口显示子程序
LCALL DELAY500 ;延时0.5秒
LCALL DELAY500 ;延时0.5秒
LCALL DELAY500 ;延时0.5秒
AJMP MAIN1
;-------------------------
; DS18B20复位初始化程序
;-------------------------
INIT_1820:
SETB WDDATA
NOP
CLR WDDATA
;主机发出延时540微秒的复位低脉冲
MOV R0,#36
LCALL DELAY
SETB WDDATA;然后拉高数据线
NOP
NOP
MOV R0,#36
TSR2:
JNB WDDATA,TSR3;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4 ; 延时
TSR3:
SETB FLAG1 ; 置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
TSR6:
DJNZ R0,TSR6 ;复位成功!时序要求延时一段时间
TSR7:
SETB WDDATA
RET
;-------------------
; 读出转换后的温度值
;-------------------
GET_TEMPER:
SETB WDDATA ; 定时入口
LCALL INIT_1820 ;先复位DS18B20
JB FLAG1,TSS2
RET ; 判断DS1820是否存在?若DS18B20不存在则返回
TSS2:
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
MOV R0,#50 ;等待AD转换结束,12位的话750微秒.
LCALL DELAY
LCALL INIT_1820 ;准备读温度前先复位
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200; 将读出的九个字节数据保存到60H-68H
RET
;----------------------------------
;写DS18B20的子程序(有具体的时序要求)
;----------------------------------
WRITE_1820:
MOV R2,#8 ;一共8位数据
CLR C
WR1:
CLR WDDATA
MOV R3,#6
DJNZ R3,$
RRC A
MOV WDDATA,C
MOV R3,#24
DJNZ R3,$
SETB WDDATA
NOP
DJNZ R2,WR1
SETB WDDATA
RET
;--------------------------------------------------
; 读DS18B20的程序,从DS18B20中读出九个字节的数据
;--------------------------------------------------
READ_18200:
MOV R4,#9
MOV R1,#60H ; 存入60H开始的九个单元
RE00:
MOV R2,#8
RE01:
CLR C
SETB WDDATA
NOP
NOP
CLR WDDATA
NOP
NOP
NOP
SETB WDDATA
MOV R3,#09
RE10:
DJNZ R3,RE10
MOV C,WDDATA
MOV R3,#23
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
INC R1
DJNZ R4,RE00
RET
;------------------------
;温度计算子程序
;------------------------
FORMULA: ; 按公式:T实际=(T整数-0.25)+( M每度-M剩余)/ M每度
;计算出实际温度,整数部分和小数部分分别存于ZHENGSHU单元和DOT单元
;将61H中的低4位移入60H中的高4位,得到温度的整数部分,并存于ZHENGSHU单元
MOV 29H,61H
MOV A,60H
MOV C,48H
RRC A
MOV C,49H
RRC A
MOV C,4AH
RRC A
MOV C,4BH
RRC A
MOV ZHENGSHU,A
; ( M每度-M剩余)/ M每度,小数值存于A中
MOV A,67h
SUBB A,66h
MOV B,#64H
MUL AB
MOV R4,B
MOV R5,A
MOV R7,67H
LCALL DIV457
MOV A,R3
;再减去0.25,实际应用中减去25
SUBB A,#19H
MOV DOT,A ;小数部分存于DOT中
MOV A,ZHENGSHU
SUBB A,#00H ;整数部分减去来自小数部分的借位
MOV ZHENGSHU,A
MOV C,4BH
JNC ZHENG ;是否为负数
CPL A
INC A
MOV DIS_1,#2DH ; 零度以下时,第一位显示"-"号
MOV ZHENGSHU,A
ZHENG:
MOV DIS_1,#2BH ; 零度以上时,第一位显示"+"号
RET
;------------------------
;双字节除以单字节子程序
;------------------------
DIV457: CLR C
MOV A,R4
SUBB A,R7
JC DV50
SETB OV ;商溢出
RET
DV50: MOV R6,#8 ;求平均值(R4R5/R7-→R3)
DV51: MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R4,A
DV52: CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R4 ;四舍五入
ADD A,R4
JC DV53
SUBB A,R7
JC DV54
DV53: INC R3
DV54: CLR OV
RET
;---------------------
;转换成非压缩的BCD码
;---------------------
BCD: MOV A,ZHENGSHU
MOV B,#0AH
DIV AB
ORL A,#00110000B ;转换成ASCII码
MOV DIS_2,A
MOV DIS_3,B
MOV A,DIS_3
ORL A,#00110000B ;转换成ASCII码
mov DIS_3,A
MOV A,DOT
MOV B,#0AH
DIV AB
ORL A,#00110000B ;转换成ASCII码
MOV DIS_4,A
MOV DIS_5,B
MOV A,DIS_5
ORL A,#00110000B ;转换成ASCII码
mov DIS_5,A
RET
;----------------------
;串口显示数据子程序
;----------------------
DISPLAY:
CLR TI
MOV A,DIS_1
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示+/-
CLR TI
MOV A,DIS_2
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示整数第一位
CLR TI
MOV A,DIS_3
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示整数第二位
CLR TI
MOV A,#2EH
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示小数点
CLR TI
MOV A,DIS_4
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示小数第一位
CLR TI
MOV A,DIS_5
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示小数第一位
CLR TI
MOV A,#0DH;换行
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示
CLR TI
MOV A,#0AH;换行
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示
RET
;----------------------
;延时子程序
;----------------------
;为保证DS18B20的严格I/O时序,需要做较精确的延时
;在DS18B20操作中,用到的延时有15 μs,90 μs,270 μs,540 μs
;因这些延时均为15 μs的整数倍,因此可编写一个DELAY15(n)函数
DELAY: ;11.05962M晶振
LOOP: MOV R1,#06H
LOOP1: DJNZ R1,LOOP1
DJNZ R0,LOOP
RET
;500毫秒延时子程序,占用R4、R5
DELAY500:MOV R4,#248
DA222:MOV R5,#248
DJNZ R5,$
DJNZ R4,DA222
RET
END
白血病患者做骨髓移植后的治愈率有多少?
//09/10/24
//lcd1602显示时间 日期 星期 温度
//通过按键校时:K10--小时,K11--分钟,K12--秒(归零),K13-星期,BR1--年,RB2--月,RB3--日。
//芯片要求:PIC16F877A
#include<pic.h> //包含单片机内部资源预定义
__CONFIG(0x1832);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
#define i_o RB4 //定义DS1302的数据口
#define sclk RB0 //定义DS1302的时钟口
#define rst RB5 //定义DS1302的复位口
#define rs RA1 //1602
#define rw RA2
#define e RA3
# define DQ RA0 //定义18B20数据端口
unsigned char TLV=0 ; //采集到的温度高8位
unsigned char THV=0; //采集到的温度低8位
unsigned char bai;
unsigned char shi; //整数十位
unsigned char ge; //整数个位
unsigned char shifen; //十分位
float temp;
void display();
//定义读取时间和日期存放表格
char table1[7];
//定义0-9的显示代码
const char table2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char rx_data,read_data,count,sec,min,hour,day,mon,week,year,time;
//----------------------------------------------
//ds18b20部分
//------------------------------------------------
//延时函数
void delay1(unsigned int x)
{
unsigned int i;
for(i=x;i>0;i--);
}
//------------------------------------------------
//延时函数
void delay2(char x,char y)
{
char z;
do{
z=y;
do{;}while(--z);
}while(--x);
}
//其指令时间为:7+(3*(Y-1)+7)*(X-1)如果再加上函数调用的call 指令、页面设定、传递参数花掉的7 个指令。
//则是:14+(3*(Y-1)+7)*(X-1)。
//***************************************
//初始化ds18b20
void ds18b20_init()
{
char presence=1;
while(presence)
{
TRISA0=0; //主机拉至低电平
DQ=0;
delay2(2,99); //延时503us
TRISA0=1; //释放总线等电阻拉高总线,并保持15~60us
delay2(2,8); //延时70us
if(DQ==1) presence=1; //没有接收到应答信号,继续复位
else presence=0; //接收到应答信号
delay2(2,60); //延时430us
}
}
//*****************************************************
//写ds18b20
void ds18b20_write_byte(unsigned char code)
{
unsigned char i,k;
for(i=8;i>0;i--)
{
k=code&0x01;
TRISA0=0;
DQ=0; //数据线拉低产生时间片
asm("nop");
asm("nop");
if(k) DQ=1; //写1则拉高数据电平
delay1(3); //延时42us,ds18b20对数据线采样
asm("nop");
TRISA0=1; //采样结束,释放总线,拉高电平
code=code>>1;
delay1(7); //延时82us
}
}
//****************************************************
//读ds18b20
unsigned char ds18b20_read_byte()
{
unsigned char i,k;
for(i=8;i>0;i--)
{
k=k>>1;
TRISA0=0;
DQ=0; //数据线拉低再拉高产生读时间片
asm("nop");
asm("nop");
TRISA0=1;
asm("nop");
asm("nop");
if(DQ) k=k|0x80; //15us内要完成读位
delay1(6); //延时72us后释放总线
}
return (k);
}
//********************************************
//启动温度转换函数
void get_temp()
{
int i;
signed int t;
TRISA0=1;
ds18b20_init(); //复位等待从机应答
ds18b20_write_byte(0XCC); //忽略ROM匹配
ds18b20_write_byte(0X44); //发送温度转化命令
for(i=2;i>0;i--)
{
display(); //调用多次显示函数,确保温度转换完成所需要的时间
}
ds18b20_init(); //再次复位,等待从机应答
ds18b20_write_byte(0XCC); //忽略ROM匹配
ds18b20_write_byte(0XBE); //发送读温度命令
TLV=ds18b20_read_byte(); //读出温度低8
THV=ds18b20_read_byte(); //读出温度高8位
TRISA0=1; //释放总线
t=THV<<8;
t=t|TLV;
if(t<0) //负温度
{
temp=(~t+1)*0.0625*10+0.5; //负温度时,取反加1再乘以0.0625得实际温度,乘10+0.5显示小数点一位,且四舍五入
}
else
temp=t*0.0625*10+0.5; //正温度
if(t<0)
bai='-'; //负温度时百位显示负号
else
bai=(const) temp/1000+0x30; //百位
shi=((const) temp%1000)/100; //十位
ge=((const) temp%1000)%100/10; //个位
shifen=((const) temp%1000)%100%10; //十分位
NOP();
}
//---------------------------------------------
//------------DS1303部分-----------------------
//---------------------------------------------
//延时程序
void delay() //延时程序
{
int i; //定义整形变量
for(i=0x64;i--;); //延时
}
//写一个字节数据函数
void write_byte(unsigned char data)
{
int j; //设置循环变量
for(j=0;j<8;j++) //连续写8bit
{
i_o=0; //先设置数据为0
sclk=0; //时钟信号拉低
if(data&0x01) //判断待发送的数据位是0或1
{
i_o=1; //待发送数据位是1
}
data=data>>1; //待发送的数据右移1位
sclk=1; //拉高时钟信号
}
sclk=0; //写完一个字节,拉低时钟信号
}
//---------------------------------------------
//读一个字节函数
unsigned char read_byte()
{
int j; //设置循环变量
TRISB4=1; //设置数据口方向为输入
for(j=8;j--;) //连续读取8bit
{
sclk=0; //拉低时钟信号
rx_data=rx_data>>1; //接收寄存器右移1位
if(i_o==1) rx_data=rx_data|0x80;
sclk=1; //拉高时钟信号
}
TRISB4=0; //恢复数据口方向为输出
sclk=0; //拉低时钟信号
return(rx_data); //返回读取到的数据
}
//----------------------------------------------
//写DS1302
void write_ds1302(unsigned char addr,unsigned char code)
{
rst=0;
sclk=0;
rst=1;
write_byte(addr);
write_byte(code);
sclk=0;
rst=1;
}
//-------------------------------------------
//读DS1302
void read_ds1302(unsigned char addr)
{
rst=0;
sclk=0;
rst=1;
write_byte(addr);
read_data=read_byte();
//return read_data;
}
//---------------------------------------------
//读取时间函数
void get_time()
{
int i; //设置循环变量
rst=1; //使能DS1302
write_byte(0xbf); //发送多字节读取命令
for(i=0;i<7;i++) //连续读取7个字节数据
{
table1[i]=read_byte(); //调用读取1个字节数据的函数
}
rst=0; //复位DS1302
}
//DS1302初始化函数
void ds1302_init()
{
sclk=0; //拉低时钟信号
rst =0; //复位DS1302
rst=1; //使能DS1302
write_ds1302(0x8e,0); //发控制命令
rst=0; //复位
}
//---------------------------------------------
//设置时间函数
void set_time()
{
//定义待设置的时间: 秒、 分、 时、 日、月、星期、年、控制字
const char table[]={0x00,0x00,0x12,0x23,0x10,0x05,0x09,0x00};
int i; //定义循环变量
rst=1; //使能DS1302
write_byte(0xbe); //时钟多字节写命令
for(i=0;i<8;i++) //连续写8个字节数据
{
write_byte(table[i]); //调用写一个字节函数
}
rst=0; //复位
}
//-------------------------------------------
//8位二进制数转换为十进制数
void two_to_ten(unsigned char i)
{
time=(table1[i]&0x0f)+(table1[i]>>4)*0;
}
//-------------------------------------------
//十进制数转换为BCD码
void ten_to_bcd(unsigned char i)
{
time=((i/0)<<4)|(i%0);
}
//------------------------------------------
//校时程序
void change_time()
{
if(RC0==0) //改变星期---k13
{
delay();
if(RC0==0)
{
if(count==0)
{
count=1;
two_to_ten(5);
week=time;
week++;
if(week>=8)
{
week==1;
write_ds1302(0x8A,1);
}
else
write_ds1302(0x8A,week);
}
}
}
else if(RC1==0) //秒归零--k12
{
delay();
if(RC1==0)
{
if(count==0)
{
count=1;
write_ds1302(0x80,0);
}
}
}
else if(RC2==0) //改变分位--k11
{
delay();
if(RC2==0)
{
if(count==0)
{
count=1;
two_to_ten(1);//BCD码转换成十进制数
min=time;
min++;
if(min>=60)
{
min=0;
write_ds1302(0x82,min);
}
else
{
ten_to_bcd(min);//十进制数转换为BCD码存进DS1302
write_ds1302(0x82,time);
}
}
}
}
else if(RC3==0) //改变小时位--k10
{
delay();
if(RC3==0)
{
if(count==0)
{
count=1;
two_to_ten(2);//BCD码转换成十进制数
hour=time;
hour++;
if(hour>=24)
{
hour=0;
write_ds1302(0x84,hour);
}
else
{
ten_to_bcd(hour);
write_ds1302(0x84,time);
}
}
}
}
else if(RB2==0)
{
delay();
if(RB2==0)
{
if(count==0)
{
count=1;
two_to_ten(4);//BCD码转换成十进制数
mon=time;
mon++;
if(mon>=13)
{
mon=1;
write_ds1302(0x88,mon);
}
else
{
ten_to_bcd(mon);
write_ds1302(0x88,time);
}
}
}
}
else if(RB3==0)
{
delay();
if(RB3==0)
{
if(count==0)
{
count=1;
two_to_ten(3);//BCD码转换成十进制数
day=time;
day++;
if((table1[6]%4==0)&&(table1[4]==2)&&(day>=30)) //润年2月
{
day=1;
write_ds1302(0x86,day);
}
else if(((table1[6]%4)!=0)&&(table1[4]==2)&&(day>=29))//非润年的2月
{
day=1;
write_ds1302(0x86,day);
}
else if(((table1[4]==1)||(table1[4]==3)||(table1[4]==5)||(table1[4]==7)||(table1[4]==8)||(table1[4]==0x10)||(table1[4]==0x12))&&(day>=32))
{
day=1;
write_ds1302(0x86,day);
}
else if(((table1[4]==4)||(table1[4]==6)||(table1[4]==9)||(table1[4]==0x11))&&(day>=31))
{
day=1;
write_ds1302(0x86,day);
}
else
{
ten_to_bcd(day);
write_ds1302(0x86,time);
}
}
}
}
else if(RB1==0)
{
delay();
if(RB1==0)
{
if(count==0)
{
count=1;
two_to_ten(6);//BCD码转换成十进制数
year=time;
year++;
if(year>=16)
{
year=0x00;
write_ds1302(0x8c,0);
}
else
{
ten_to_bcd(year);
write_ds1302(0x8c,time);
}
}
}
}
else
count=0;
}
//****************************************
//**************lcd1602*******************
//****************************************
//延时程序
//void delay()
// {
// unsigned char i;
// for(i=100;i>0;i--);
// }
//****************************************
//LCD写一个字节数据
void write_lcd(unsigned char code)
{
PORTD=code;
rs=1;
rw=0;
e=0;
delay();
e=1;
}
//****************************************
//lcd写命令函数
void lcd_enable(unsigned char code)
{
PORTD=code;
rs=0;
rw=0;
e=0;
delay();
e=1;
}
//*****************************************
//lcd显示设置
void lcd_init()
{
lcd_enable(0x01); //清除显示
lcd_enable(0x38); //设置16X2显示,5X7点阵
lcd_enable(0x0c); //开显示,不显示光标
lcd_enable(0x06); //光标左移
}
//-------------------------------------------
//显示函数
void display()
{
// PORTD=0X80; //小时
lcd_enable(0X80);
write_lcd((table1[2]>>4)+0x30);
// PORTD=0x81;
lcd_enable(0x81);
write_lcd((table1[2]&0x0f)+0x30);
// PORTD=0X82;
lcd_enable(0X82);
write_lcd(':');
// PORTD=0X83; //分
lcd_enable(0X83);
write_lcd((table1[1]>>4)+0x30);
// PORTD=0x84;
lcd_enable(0x84);
write_lcd((table1[1]&0x0f)+0x30);
// PORTD=0X85;
lcd_enable(0X85);
write_lcd(':');
// PORTD=0X86; //秒
lcd_enable(0X86);
write_lcd((table1[0]>>4)+0x30);
// PORTD=0x87;
lcd_enable(0x87);
write_lcd((table1[0]&0x0f)+0x30);
// PORTD=0X89; //温度的百位
lcd_enable(0X89);
write_lcd(bai);
// PORTD=0X8a; //温度的十位
lcd_enable(0X8a);
write_lcd(shi+0x30);
// PORTD=0X8b; //温度的个位
lcd_enable(0X8b);
write_lcd(ge+0x30);
// PORTD=0X8c;
lcd_enable(0X8c);
write_lcd('.');
// PORTD=0X8d; //温度的十分位
lcd_enable(0X8d);
write_lcd(shifen+0x30);
// PORTD=0X8e; //显示'C'
lcd_enable(0X8e);
write_lcd('C');
//
// PORTD=0XC0; //年
lcd_enable(0XC0);
write_lcd((table1[6]>>4)+0x30);
//PORTD=0XC1;
lcd_enable(0XC1);
write_lcd((table1[6]&0x0f)+0x30);
// PORTD=0XC2;
lcd_enable(0XC2);
write_lcd('-');
// PORTD=0XC3; //月
lcd_enable(0XC3);
write_lcd((table1[4]>>4)+0x30);
// PORTD=0xC4;
lcd_enable(0xC4);
write_lcd((table1[4]&0x0f)+0x30);
// PORTD=0XC5;
lcd_enable(0XC5);
write_lcd('-');
// PORTD=0XC6; //日
lcd_enable(0XC6);
write_lcd((table1[3]>>4)+0x30);
// PORTD=0xC7;
lcd_enable(0xC7);
write_lcd((table1[3]&0x0f)+0x30);
// PORTD=0XCD; //星期
lcd_enable(0XCD);
write_lcd((table1[5]&0x0f)+0x30);
}
//--------------------------------------------
//引脚定义函数
void port_init()
{
TRISA=0x00; //设置A口全输出
TRISD=0X00; //设置D口全输出
ADCON1=0X06; //设置A口为普通I/O口
TRISB=0X0E; //
OPTION=0X00; //开启B口弱上拉
PORTA=0XFF;
PORTD=0XFF; //先熄灭所有显示
lcd_init();
TRISC=0XEF; //RC3输出,其他为输入
PORTC=0XEF;
count=0;
}
//----------------------------------------------
//主函数
void main()
{
port_init(); //调用引脚初始化函数
read_ds1302(0x81); //查看DS1302是否起振
if(read_data&0x80) //否,则初始化DS1302
{
ds1302_init(); //调用DS1302初始化函数
set_time(); //调用设置时间函数
}
while(1)
{
get_time(); //调用取时间函数
change_time();
get_temp(); //调用温度转换函数
display(); //调用显示函数
}
}
骨髓移植后的治愈率有90%以上,如果配型好的话还能提高: 移植过程中,会出现不同程度的排斥反应。因为,免疫系统对外来异物能分辨“异己”,并对它进行攻击,将它排挤出去,这各过程就称之为"排斥反应"。如供、受者是亲属关系,排斥反应会弱一些;如是非亲属关系,则反应会重一些。另一种排斥反应,是移植物抗宿主反应(简称GVHD),即供者组织中的免疫细胞对受者(宿主)的作用,宿主组织抗原对供者免疫细胞来说也是异己物质,逐渐生长起来的供者免疫细胞对受者的"攻击"越来越重,并产生"移植物抗宿主反应"。GVHD的症状包括:发热、肝炎、严重腹泻、骨髓抑制和感染,严重时可并发致死性反应。在双胞胎中GVHD发生率为1-5%,亲属中为36%,非血缘关系为50-70%。不过GVHD虽对患者有威胁,但它具有抗白血病的作用,可减少移植后白血病的复发。在治疗中可采用适当的免疫抑制措施,挽救患者的生命。
1. 如何理解骨髓与骨髓的功能............................................... TOP
>>>>血液是由血浆(血液中的液体部分)和血细胞(红细胞、粒细胞、淋巴细胞、单核细胞、血小板等)组成的红色、不透明并带粘性的液体。正常人的总血量约为体重的8%。血液在血管内流动不息,是人体内运输营养物质、携带代谢产物、调节内环境平衡及行使防御功能的条条"河流"。人们对于血液的认识是逐渐加深的。古代埃及人提倡用血液来沐浴,旨在返老还童或恢复健康。1900年红细胞ABO血型发现之前,许多人因血型不符的输血而发生严重的溶血反应,甚至死亡。1929年发明了骨髓穿刺针,从此骨髓细胞才成为血液研究的一个重要部分。
>>>>正常人体的血细胞维持数量和功能的相对恒定。这种恒定是新陈代谢的动态平衡,即衰老、死亡的细胞经常不断地被新生的细胞所取代。例如人类红细胞的平均寿命约为120天,血小板寿命约7-10天。一个正常成年人每天约有10个红细胞衰老死亡,同样也有相近数量的红细胞新生。
成年人的造血器官主要局限在骨髓、脾脏以及淋巴结中。但脾脏和全身淋巴结在出生后主要作用是促使淋巴细胞的第二次增殖,即淋巴细胞在接触抗原后繁殖的免疫反应。所以骨髓造血功能显得尤其重要。出生后,骨髓在正常情况下是唯一产生红细胞、粒细胞和血小板的场所,骨髓也产生淋巴细胞和单核细胞。
>>>>骨髓是存在于长骨(肱骨、股骨)的骨髓腔和扁平骨(如骼骨)的稀松骨质间的网眼中,是一种海绵状的组织。能产生血细胞的骨髓略呈红色,称为红骨髓。人出生时,红骨髓充满全身骨髓腔,随着年龄增大,脂肪细胞增多,相当部分红细胞骨髓逐渐被黄骨髓取代,最后几乎只有扁平骨骨髓腔有红骨髓。此种变化可能是由于成人不需要全部骨髓腔造血,部分骨髓腔造血已足够补充所需血细胞。当机体严重缺血时,部分黄骨髓可被红骨髓替代,骨髓的造血能力显著提高。
>>>>近三十年来,血细胞生成的研究发展很快,现已证明人类骨髓中存在造血功能干细胞,数量不到骨髓总细胞数的1%,它们具有高度自我更新的能力,并且能分化为各血细胞系统的祖细胞(如淋巴系干细胞、粒系干细胞),再大量分化、增殖为各种原始和成熟血细胞,最后这些成熟的血细胞通过骨髓进入血液中,发挥各自的生理作用。人体造血干细胞由于存在的部位不同,产生不同的效能。一部分存在于干细胞池,是人体造血细胞的储备库,以适应和满足各种状态下造血的需要;另一部分存在于增殖池,这些细胞不断增殖更新,以弥补因细胞衰老或丢失所致的血细胞不足,维持人体血流平衡。
>>>>骨髓的造血功能极强,骨髓最高的造血能力可达到正常造血情况的9倍,如果只保留骨髓的1/10,就能完成正常的造血功能,所以少量骨髓捐献对身体没有什么影响。人体的造血组织有很强的代偿功能,当抽取部分骨髓后,造血干细胞会很快增殖,在一、二周内完全恢复原来的水平。因此,捐献者不仅不会影响自身的造血功能,反而使自身的造血系统得到了锻炼,更具备了生命的活力。
2. 白血病与骨髓移植................................................................................ TOP
>>>>骨髓移植是指将他人的骨髓移植病人的体内,使其生长繁殖,重建免疫和造血的一种治疗方法。骨髓移植分为自体骨髓移植与异体骨髓移植,异体骨髓移植又分为血缘关系骨髓(同胞兄弟姐妹)移植与非血缘关系骨髓(志愿捐髓者)移植。自体骨髓移植易复发,在临床中较少采用。目前骨髓移植还是首选异体的骨髓进行移植。
>>>>骨髓移植是近年来治疗白血病的一项突破性进展。白血病患者,因造血组织恶变,产生异常的白细胞,抑制了正常血细胞的功能。传统的治疗方法仅用化疗来摧毁白血病细胞,大部分患者的白血病会复发。慢性粒细胞白血病患者几乎都要急变,剂量过大的化疗与放疗会使患者正常造血细胞无法恢复。骨髓移植治疗方案中患者需接受很大剂量的化疗与全身放疗,骨髓内的病变造血干细胞被摧毁,而移植的正常骨髓完全替代病人原有的有病骨髓,重建造血与免疫机能,再临床上取得了良好的效果,大大增加了白血病的治愈率。给患者带来了第二次生命。
>>>>骨髓移植已成为许多疾病的唯一治疗方法,除了可以根治白血病以外,还能治疗其它血液病如再生障碍性贫血、地中海贫血、异常骨髓细胞增生症、遗传性红细胞异常症、血浆细胞异常症等,以及淋巴系统恶性肿瘤、遗传性免疫缺陷症、重症放射病等许多不治之症。
3. 骨髓移植与造血干细胞移植........................................................................ TOP
>>>>造血干细胞移植的原理与骨髓移植完全相同,只是造血干细胞的采集方式不同。造血干细胞绝大部分存在于骨髓中,骨髓移植是需要通过骨髓穿刺从骨髓腔中抽取骨髓,然后采集造血干细胞输入患者的体内;干细胞移植则是采用促使造血干细胞从骨髓中释放到血液中,通过血细胞分离机,从外周血中采集造血细胞。施行骨髓移植术,志愿捐献者需要上局部麻醉,并在骼骨上多次钻洞抽取骨髓混合液数百毫升;干细胞移植术只需从志愿者的静脉中采血,并通过机器富集,将血液回输人体,只需50毫升的干细胞,由于进出的总量平衡,采集后供者不会产生循环系统的紊乱,对人体很安全。目前由中华(上海)骨髓库提供的捐献者的移植手术,都采用造血干细胞移植的方法,为了防止混淆,还沿用骨髓移植、骨髓捐献与骨髓库的称呼。
4. HLA配型与骨髓移植............................................................................... TOP
>>>>骨髓移植成败的关键之一是HLA(人类白细胞抗原)配型问题,如果骨髓供者与患者(受者)的HLA不同,便会发生严重的排斥反应,甚至危及患者的生命。HLA分型要比ABO血型复杂得多,每个人不是从父母分别得到一个基因,而是得到一串基因(HLA单倍型)。每人遗传到二串"冰糖葫芦","冰糖葫芦"上的"红果"(基因)以A、B、C、D、DR、DQ和DP为序。如A有28种"红果"(分别记为A1、A2、A3、A9...),B有61种(记为B5、B7、B8、B12...),DR有24种(记为DR1、DR2、DR3、DR4...)等。七彩红果共有164种编号,如不同遗传排列的红果随机组合,按理论推算,"冰糖葫芦"有5亿多种变化,能组合33亿多种HLA分型。理论推算的HLA分型数量巨大,但对一个具体的民族来说并非如此。如黄种人的某些HLA抗原,白人和黑人是没有的,白人、黑人所独有的HLA抗原,中国人也没有。同时HLA各遗传的基因,并非随机搭配,而是有一定规律。因为上述原因实际的HLA分型数量就大大减少。
>>>>HLA分型有常见、少见、罕见之分,常见的HLA分型,在300-500人就可以找到相同者,少见的HLA分型可能是万分之一的机率,而罕见的就要到几万甚至几十万的人群中寻找。不同人种的HLA分型有很大的差异,世界各国纷纷建立自己的骨髓库(骨髓捐献者HLA数据检索中心)来满足本民族患者的需要。现世界上最大的骨髓库在美国,共有志愿捐献者460万,检索成功率为80%,平均每月提供捐献的骨髓供移植的病例为108例;目前最大的华人骨髓库是台湾慈济骨髓捐献者检索中心,共有登记捐献者23万人。白人、黑人的骨髓不适合中国人,建立一个完全属于中国人的中华骨髓库,不仅可以为中国公民提供帮助,还可以为分布在世界各地的炎黄子孙服务。
5. 骨髓移植的过程.................................................................................. TOP
>>>>常规的骨髓移植前,只需HLA-A、B、DR相同即可。由于HLA-AB的多样性最明显,一般对志愿者先做HLA-AB分型,待检索后供、受者HLA-AB相配后,再对供者作HLA-DR分性检测,看是否相配。如果供、受者HLA完全相配,同时供者健康检查合格,就可以着手准备移植手术。先用化学药物和放射治疗摧毁患者身上癌细胞,这对患者的正常造血也被杀死,人体的免疫力下降,易发生感染,必须在无菌病房(层流室)中接受移植。移植方法如同输血,植入的造血干细胞在病人体繁殖,重建造血和免疫系统,病人逐渐恢复健康。骨髓移植对白血病的有效治愈率可达到75-80%。
>>>>移植过程中,会出现不同程度的排斥反应。因为,免疫系统对外来异物能分辨?quot;异己",并对它进行攻击,将它排挤出去,这各过程就称之为"排斥反应"。如供、受者是亲属关系,排斥反应会弱一些;如是非亲属关系,则反应会重一些。另一种排斥反应,是移植物抗宿主反应(简称GVHD),即供者组织中的免疫细胞对受者(宿主)的作用,宿主组织抗原对供者免疫细胞来说也是异己物质,逐渐生长起来的供者免疫细胞对受者的"攻击"越来越重,并产生"移植物抗宿主反应"。GVHD的症状包括:发热、肝炎、严重腹泻、骨髓抑制和感染,严重时可并发致死性反应。在双胞胎中GVHD发生率为1-5%,亲属中为36%,非血缘关系为50-70%。不过GVHD虽对患者有威胁,但它具有抗白血病的作用,可减少移植后白血病的复发。在治疗中可采用适当的免疫抑制措施,挽救患者的生命。
6. 捐献骨髓的条件.................................................................................. TOP
>>>>骨髓移植最理想的供者是同卵双生子,因为他们之间的遗传物质是完全相同的。他们之间的骨髓移植,效果好,排异反应少,但双胞胎毕竟少见。子女的HLA分型来自于父母,如父亲为A和B,母亲为C和D,那么子女有AC、AD、BC、BD四种分型可能,所以同胞间的HLA相配率?5%,因此患者从同胞中寻找供髓者较容易。然而家庭范围正在缩小,绝大多数的患者还是需要非血缘关系的骨髓捐献者。
>>>>适合捐献骨髓的年龄为18-45岁,健康要求如同献血,即不能因捐髓影响捐献者的健康,又不能因接受骨髓而使患者增加新的不利因素,重要的是捐献者必须无可血液传播的传染病:如乙型肝炎、丙乙型肝炎等。
一、 骨髓移植概述
骨髓移植(bone marrow transplantation ,BMT)的实质是造血干细胞移植,干细胞具有能复制并分化为造血和免疫活性细胞的能力。根据干细胞的来源不同可分为自体、同基因(syngeneic)和异基因(allogeneic)BMT。同基因骨髓移植是指同卵孪生同胞间的移植,由于供、受者在遗传学上相同,故与自体骨髓移植一样,不存在免疫不相容的问题。异基因的骨髓移植(allo-BMT)的供髓细胞在遗传上与受者细胞起源不同,与肾、肝、心等器官移植相比,allo-BMT更易发生排斥反应,而一旦供髓植活后又可发生移植物抗宿主病(GVHD),故供、受者间要进行严格的组织配型,受者在移植前必须用免疫抑制剂预处理。
二、 骨髓移植的适应症
allo-BMT可纠正受者造血系统及免疫系统不可逆的严重疾病,目前已在下列疾病中应用并取得满意效果。
1. 遗传性疾病
(1) 免疫缺陷病:严重联合免疫缺陷病(SCID)及Wiskott-Aldrich综合症X-连锁EBV淋巴增殖性疾病。
(2) 先天性贫血:重型地中海贫血、镰状细胞贫血、范科尼贫血。
(3) 代谢障碍病:粘多糖病、脂肪沉积症。
2. 重型再生障碍性贫血(SAA) 原发性或获得性,包括放射病所致骨髓衰竭。
3. 恶性血液病 急性白血病、慢性粒细胞白血病(CML)、骨髓增生异常综合症(MDS)、多发性骨髓瘤、淋巴瘤等。
三、 骨髓移植供者的选择
选择与受者组织相容性配合的供体是保证异体骨髓移植成功的重要前提。
在选择适合的供体时,首先从在兄弟姐妹中选择供髓者;如不成,则在近亲及血缘无关的自愿者中寻找供髓者。在供者选择上首先在同胞中用血清学方法做HLA检查,所得结果相差不大后再做淋巴细胞培养(MLC)来检测D位点并核实HLA配型。即使血清学或分子生物学方法所不能检出的组织相容抗原的差别往往可通过MLC测出。目前已采用分子遗传学技术直接检测HLA基因,如多聚酶链反应(PCR)技术,序列特异性寡核苷酸探针杂交(SSOPA)及限制性片断长度多态性(RFLP)技术,可作为BMT组织配型的重要补充,尤其适用于无关供者组织配型的核实。
四、骨髓移植中HLA配型的重要性及骨髓移植的过程
1.在HLA配型方面,主要进行HLA-A、HLA-B和HLA--DR三对位点的配型,只有两个个体的HLA配型完全相同才能进行造血干细胞移植,否则可能会发生两种情况,一是病人体内的免疫细胞把植入的供体细胞当作"异物"或"入侵者"进行攻击,称为"移植排斥反应",其结果是移植失败,"造血"不能在病人体内植活。另一种可能是供体的造血细胞在病人体内植活,产生大量的免疫活性细胞,这些细胞"反客为主"把病人的组织和细胞当作"异物"和"入侵者"进行攻击,最容易受攻击的组织和器官是皮肤、肝脏和肠道,发生皮疹、黄疸、转氨酶升高和腹泻不止甚至血便,称为移植物抗宿主病(GVHD),严重者可致命。
2.由于HLA-AB的多样性最明显,一般对志愿者先做HLA-AB的分型,待检索供、受者HLA-AB相配后,再对供者作HLA-DR分型检测,如果供、受者的HLA完全相配,同时供者健康检查合格,就可以着手准备移植手术。用化学药物和放射治疗摧毁患者身上的病变造血细胞后再接受移植。植入方法如同输血,植入的造血干细胞在人体繁植,重建造血和免疫系统,病人逐渐恢复健康。骨髓移植对白血病的有效治愈率可达到65-75%。
五、 国内外应用于骨髓移植的HLA配型技术
1. HLA血清学方法
这种方法出现的比较早,技术比较成熟,主要应用于HLA Ⅰ类抗原(HLA-A、HLA-B)的分型,适用于骨髓移植前大量骨髓捐献者的HLA-AB检索工作。而在HLA-DR类分型中因高质量的定型血清来源困难,存在交叉反应,对抗原特异性确定有出入,而血清学表型的判定还受分离B淋巴细胞的纯度与活力、补体质量等因素的影响,因此导致比较高的分型错误率。
2. HLA复合体微卫星分析技术
在真核细胞中,某些DNA组分在碱基成分上与主要的DNA组分明显不同,且在CsSI梯度离心时能分离为明显的区带,其中含有2~3个碱基的成为微卫星(microsatellite)。在真核细胞常染色体中,微卫星可以不同的间隔和频率重复出现,从而表现为高度多态性。在HLA基因复合体中或其临近区域,这种微卫星重复序列已绘制成图。因此,可应用序列特异性引物,通过PCR扩增,根据产物的长度确定微卫星的多态性。
微卫星分析技术能够迅速准确的识别供、受者间HLA单倍型的异同,且由于它包括HLA复合体的更宽区域,可能比HLA-Ⅰ或Ⅱ类单个座位等位基因的分析更为有效,从而为器官移植(尤其是骨髓移植)时供体的选择提供了重要的参数。
3. MHC区段配型技术
区段配型(block matching)的理论依据为:在MHC复合体长期进化的过程中,由于各MHC基因的内含子并不编码功能蛋白,其所接受的选择压力不大,故相对外显子而言较为稳定,可延续许多世代而不发生改变。研究资料已证实,在一组等位基因中,可能共享某一段内含子序列。从进化和遗传的角度看,这样的一组等位基因是由同一个祖先谱系进化而来,共同享有的内含子序列即为该谱系的特异性标记。因此,不同的MHC等位基因可据此归于不同的谱系,且不同谱系间MHC基因序列的差异明显大于同一谱系内MHC基因序列的差异。
对随机人群应用block matching进行移植配型,其目的是寻找与受者属于同一HLA谱系的供者,以避免移植后出现较强的排斥反应。该技术最大的优点并非在于单个HLA基因的相配,而是着眼于整个HLA单体型基因序列最大程度的相似,其实践应用价值已经在HLA多态性的家系调查和BMT疗效的回顾性分析中得到初步证实。
南方医院临床证明:血癌患者并非都要骨髓移植
化疗可治愈八成血癌儿
一般来说,很多人认为患了白血病就一定要进行骨髓移植。事实并非如此!记者昨天从第一军医大学南方医院儿科获悉,在众多白血病儿童中有八成并不需要移植骨髓就可以被彻底治愈。
昨天,70多名曾在该院儿科治疗的白血病康复患者回到南方医院,交流抗癌经验,其中最小的只有一岁多。看到他们天真烂漫的样子,你怎么也想象不到他们曾经身患血癌。
据南方医院血液科李春富主任介绍,近几年来儿童白血病发病率呈上升趋势,但对这种病的治疗,过去很多人认为必须进行骨髓移植;但临床实践证明,先进的化疗方案才是最有效的解决方法。“造血干细胞移植只是被欧美国家视为第二线治疗措施,仅用于极少数高危或复发的病人,而在那些国家儿童白血病治愈率达到了八成!”经过4年的观察,该院先后收治的急性淋巴细胞性白血病63例中,目前只有2例复发;急性非淋巴细胞性白血病7例,有4例无病存活。
当记者问及病人求医观念需要转变的主要原因时,李春富说:“合理的化疗在国际上已经得到了认可,它可以使治愈率大大提高,增强患者的信心;此外,治疗时间短,副作用较骨髓移植少,医疗费用低等都能减轻病人的痛苦和负担。比如化疗费用约10万,而造骨髓移植治疗费用至少20万元左右。” (记者 林靖峻 实习生 欧实刚 通讯员宁习源)
稿件来源: 羊城晚报
关于“单片机18b20的资料”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[listenwind]投稿,不代表问答号立场,如若转载,请注明出处:http://listenwind.com.cn/cshi/202501-4074.html
评论列表(4条)
我是问答号的签约作者“listenwind”!
希望本篇文章《单片机18b20的资料》能对你有所帮助!
本站[问答号]内容主要涵盖:国足,欧洲杯,世界杯,篮球,欧冠,亚冠,英超,足球,综合体育
本文概览:网上有关“单片机18b20的资料”话题很是火热,小编也是针对单片机18b20的资料寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。DS1...