?? xdxhfsq.asm
字號:
;===============================;
;硬件資源分配 ;
;===============================;
;某型號型心電信號發生器硬件和軟件說明
;硬件部分資源如下:
;AT89C51--24MHz單片機,但可降低速度用于12MHz情況
;12MHz晶體
;不允許用外部程序存儲器(EA=1)
;P0.0~P0.7對應地址數據復用線,當訪問外部端口或讀取ROM芯片中的各種心電波形數據時,分別傳送低8位地址或數據。
;P1.0~P1.7是鍵盤接口,外部還有10K上拉電阻,若按鍵不按,輸入高電平,按鍵按下,輸入接地,相當于輸入低電平,其中個輸入對于功能鍵為:
;P1.0對應“MENU”鍵
;P1.1對應“GAIN”鍵
;P1.2對應“∩”鍵
;P1.3對應“TYPE”鍵
;P1.4對應“↓”鍵
;P1.5對應“NOIS”鍵
;P1.6對應“↑”鍵
;P1.7對應“A”鍵
;P2.6~P2.7對應A14~A15地址線,由74HC139譯碼:
; 對應于0000H~3FFFH,均有A15~A14=00B,Y0有效,無具體用;
; 對應于4000H~7FFFH,均有A15~A14=01B,Y1有效,用于讀波形數據,即芯片27C1001片選,其中A13~A0直接連27C1001芯片的地址A13~A0,A16~A14由頁鎖存器74HC273提供;
; 對應于8000H~BFFFH,均有A15~A14=10B,Y2有效,用于鎖存EPROM芯片27C1001頁地址,即74HC273片選,寫的數據位于D2~D0中,鎖存后送27C1001的快地址A16~A14;
; 對應于C000H~FFFFH,均有A15~A14=11B,Y3有效,子譯碼Y0有效,用于讀寫操作均是對液晶顯示模塊操作,其端口常用奇端口C001H,偶端口C000H;
;P2.0~P2.5對應A8~A13地址線,
;P3.0、P3.1沒有用到。
;P3.2~P3.5用于與D/A轉換器接口。其中:P3.2連LOD;P3.3連CLK;P3.4連DAT;P3.5連LDA。
;保留RD和WR功能
;===============================;
;存儲資源分配:變量及標志定義 ;
;===============================;
;00H ;0區R0 ;通用
;01H ;0區R1 ;通用
;02H ;0區R2 ;通用
;03H ;0區R3 ;通用
;04H ;0區R4 ;通用
;05H ;0區R5 ;通用
;06H ;0區R6 ;通用
;07H ;0區R7 ;通用
;------------------------------------
;中斷中鍵掃描及主程序中鍵處理(參數設置)模塊專用區
;08H ;1區R0 ;通用
;09H ;1區R1 ;波形類型碼寄存器,如7是正常心電80BPM
;0AH ;1區R2 ;增益碼寄存器,初始化時送09H,表示增益是X1.0
;0BH ;1區R3 ;定標信號或正弦信號作用通道碼寄存器,初始化是0
;0CH ;1區R4 ;主菜單光標位置碼寄存器,0是ECG,1是ARRHY,2是WAVE
;0DH ;1區R5 ;鍵處理的20mS防抖定時計數器(4*5mS/24*0.833mS)
;0EH ;1區R6 ;通用
;0FH ;1區R7 ;通用
;------------------------------------
;閃爍顯示處理模塊專用區
;10H ;2區R0 ;通用
;11H ;2區R1 ;心臟字符閃爍顯示周期計時器,該計時器乘以10mS作為周期,初始化是30
;12H ;2區R2 ;類型字符串或增益倍率字符串閃爍顯示周期計時器,該計時器乘以10mS作為周期,初始化沒見,例如0.4S顯示,0.4S不顯示
;13H ;2區R3 ;通用
;14H ;2區R4 ;通用
;15H ;2區R5 ;通用
;16H ;2區R6 ;通用
;17H ;2區R7 ;通用
;------------------------------------
;定時器中斷服務程序中的L0449子程序專用區
;18H ;3區R0 ;通用
;19H ;3區R1 ;通用
;1AH ;3區R2 ;把各個通道進行一次D/A轉換的循環次數計數器,定時器中斷服務程序中的L0449子程序專用
;1BH ;3區R3 ;D/A輸出時存D/A通道,定時器中斷服務程序中的L0449子程序專用
;1CH ;3區R4 ;D/A輸出時存D/A數據,定時器中斷服務程序中的L0449子程序專用
;1DH ;3區R5 ;通用
;1EH ;3區R6 ;通用
;1FH ;3區R7 ;通用
;20H ;標志寄存器
;00HBIT EQU 20H.0 防抖處理標志,=0,根本沒按過鍵;=1按過鍵,等待防抖動處理
;01HBIT EQU 20H.1 鍵值有效標志,=0,5AH中的值無效;=1,5AH中的值是鍵值
;02HBIT EQU 20H.2 =1是TYPE波形類型選擇狀態,=0非TYPE波形類型選擇狀態
;03HBIT EQU 20H.3 =1是GAIN設置狀態,=0非GAIN設置狀態
;04HBIT EQU 20H.4 =1是因波形類型修改后要處理的內容;=0無因波形類型修改后要處理的內容
;05HBIT EQU 20H.5 =1是啟用NOIS功能,=0關閉NOIS功能
;06HBIT EQU 20H.6 =1是啟用標記信號處理;=0關閉標記信號處理
;07HBIT EQU 20H.7 =1是標記作用時間到標志置1,準備關閉標記信號;=0時間未到或未啟用標記
;21H ;
;08HBIT EQU 21H.0 在09H=1的前提下:=1是正常心電ECG;=0非正常心電ARRHY
;09HBIT EQU 21H.1 存在ECG類或絕大多數ARRHY波形輸出,具體哪類有08H決定
;0AHBIT EQU 21H.2 =1是50Hz正弦輸出波D/A輸出標志(刷新率1200SPS,24點/周),級別低于12HBIT
; =0且12HBIT=0時是正常D/A輸出,刷新率200SPS,級別最低
;0BHBIT EQU 21H.3 未定義
;0CHBIT EQU 21H.4 =1,存在非定標信號輸出,信號大類由09H、08H來決定
;0DHBIT EQU 21H.5 未定義
;0EHBIT EQU 21H.6 =1脈沖定標波形輸出有效標志;=0脈沖定標波形輸出無效標志
;0FHBIT EQU 21H.7 =1不存在的波形輸出
;22H ;
;10HBIT EQU 22H.0 =1是定標信號作用電極更換后置1,=0未更換
;11HBIT EQU 22H.1 未定義
;12HBIT EQU 22H.2 =1是其他波形向50Hz正弦輸出的過渡期,刷新率200SPS,級別最高
;13HBIT EQU 22H.3 =1是主菜單狀態;=0非主菜單
;14HBIT EQU 22H.4 正常心電時14H置1,ARRHY時置為0,WAVE狀態,14H清0
;15HBIT EQU 22H.5 正常心電時15H置1,ARRHY時置為1,WAVE狀態,15H清0
;16HBIT EQU 22H.6 未定義
;17HBIT EQU 22H.7 未定義
;23H ;未定義
;24H ;未定義
;25H ;未定義
;26H ;未定義
;27H ;當前定標信號或正弦信號作用通道,初始化時是0
;28H ;標記波形參數1a,初始化時從表08E8H中調入參數80H
;29H ;標記波形參數1b,初始化時從表08E8H中調入參數8DH
;2AH ;標記波形參數2a,初始化時從表08E8H中調入參數80H
;2BH ;標記波形參數2b,初始化時從表08E8H中調入參數21H
;2CH ;原始波形類型寄存器,如07H表示正常心電80BPM
;2DH ;定時器T0中斷次數軟件計數器
;2EH ;一個大類波形中波形類型下限(波形類型選擇時用)
;2FH ;一個大類波形中波形類型上限(波形類型選擇時用)
;30H ;顯示緩沖區上行首字符
;31H ;顯示緩沖區上行二字符
;32H ;顯示緩沖區上行三字符
;33H ;顯示緩沖區上行四字符
;34H ;顯示緩沖區上行五字符
;35H ;顯示緩沖區上行六字符
;36H ;顯示緩沖區上行七字符
;37H ;顯示緩沖區上行八字符
;38H ;顯示緩沖區上行九字符
;39H ;顯示緩沖區上行十字符
;3AH ;顯示緩沖區上行十一字符
;3BH ;顯示緩沖區上行十二字符
;3CH ;顯示緩沖區上行十三字符
;3DH ;顯示緩沖區上行十四字符
;3EH ;顯示緩沖區上行十五字符
;3FH ;顯示緩沖區上行末字符
;40H ;顯示緩沖區下行首字符
;41H ;顯示緩沖區下行二字符
;42H ;顯示緩沖區下行三字符
;43H ;顯示緩沖區下行四字符
;44H ;顯示緩沖區下行五字符
;45H ;顯示緩沖區下行六字符
;46H ;顯示緩沖區下行七字符
;47H ;顯示緩沖區下行八字符
;48H ;顯示緩沖區下行九字符
;49H ;顯示緩沖區下行十字符
;4AH ;顯示緩沖區下行十一字符
;4BH ;顯示緩沖區下行十二字符
;4CH ;顯示緩沖區下行十三字符
;4DH ;顯示緩沖區下行十四字符
;4EH ;顯示緩沖區下行十五字符
;4FH ;顯示緩沖區下行末字符
;50H ;一個字節,查五字節表09D8H,心臟符號閃爍周期
;52H_51H;一個指針,查五字節表09D8H,第2、3字節構成波形數據首地址
;54H_53H;一個指針,查五字節表09D8H,第4、5字節構成波形數據末地址
;55H ;是波形類型碼計數器0是40BPM正常心電,7是80BPM正常心電,35是正弦定標信號,共計36種波形類型
;56H ;由多結構組合成波形時的波序計數器,0是首個波形結構,1是第2個波形結構,依次類推,當取到波形結構代號為空:FF時,復位到0
;58H_57H;一個指針,D/A時數據存放的地址指針
;59H ;記憶上次鍵盤口值,
;5AH ;有效鍵值(01HBIT=1時)
;5BH ;增益系數,1.0對應80H,2.0對應FFH,見
;5CH ;隨機數-8~+7
;5DH ;標記時間計數器,啟動標記信號時清0
;5EH ;隨機數-4~+3
;5FH ;隨機數-4~+3
;60H~7FH 是堆棧區,共計32字節
;===============================;
;27C1001中的存儲波形規范 ;
;===============================;
;只讀存儲器(EPROM)芯片27C1001的存儲能力是128KB,由A16~A0地址線來選擇具體數據,存放的數據可以用周立功集成調試環境或偉福集成調試環境來觀察,
;65組波形結構信息定義見程序后的數據定義中。
;===============================;
;主程序人口 ;
;===============================;
ORG 0000H
LJMP L0030H ;入口轉到0030H
DB 7DH,08H,00H,00H,00H,07H,0EEH,00H ;沒意義
ORG 000BH
LJMP L03E9H ;T0中斷入口
DB 07H,72H ;沒意義
JUMPTAB: ;為一散轉表
DB 21H,0EH ;沒意義
AJMP L0110H ;轉TYPE鍵處理
AJMP L0150H ;轉GAIN鍵處理
AJMP L0195H ;轉↑鍵處理
AJMP L0202H ;轉↓鍵處理
AJMP L026FH ;轉NOIS鍵處理
AJMP L0290H ;轉∩鍵處理
AJMP L02A2H ;轉MENU鍵處理
DB 01H,0D3H,05H,02H,07H,1DH,61H,76H ;沒意義
DB 65H, 5FH,52H,52H,56H,35H,01H,08H ;沒意義
L0030H: ;初始化程序開始
MOV SP, #60H ;修改堆棧棧頂指針
MOV TMOD, #11H ;T1方式1,16位定時方式且不受外界引腳控制;T0方式1,16位定時方式且不受外界引腳控制
CLR TR0 ;禁止T0記數
CLR TR1 ;禁止T1記數
MOV TH0, #0ECH ;給T0送初值,T0定時為:4.993mS
MOV TL0, #7FH ;12MHz,1uS,[10000H-EC7FH]uS=1381HuS=4993uS=4.993mS
MOV TH1, #0D8H ;給T1送初值,T1定時為:9.993mS
MOV TL1, #0F7H ;12MHz,1uS,[10000H-D8F7H]uS=2709HuS=9993uS=9.993mS
MOV 20H, #00H ;某些標志位預清00000000B
;00HBIT=0,防抖動標志無效
;01HBIT=0,5AH中的鍵值無效
;02HBIT=0,非TYPE類型選擇
;03HBIT=0,非GAIN選擇
;04HBIT=0,無波形類型修改的處理要求
;05HBIT=0,非NOIS狀態
;06HBIT=0,關閉標記狀態
;07HBIT=0,未啟用標記
MOV 21H, #13H ;某些標志位預置00010011B
;08HBIT=1,正常心電
;09HBIT=1,有心電波形輸出要求
;0AHBIT=0,關閉50Hz正弦波輸出
;0BHBIT=0,未定義
;0CHBIT=1,存在非定標信號輸出
;0DHBIT=0,未定義
;0EHBIT=0,關閉脈沖定標波形輸出
;0FHBIT=0,無不存在的波形類型
MOV 22H, #00H ;某些標志位預清00000000B
;10HBIT=0,無定標信號作用電極更換
;11HBIT=0,未定義
;12HBIT=0,非過渡波形狀態
;13HBIT=0,非主菜單狀態
;14HBIT=0,非正常心電狀態
;15HBIT=0,非心電輸出狀態
;16HBIT=0,未定義
;17HBIT=0,未定義
MOV R0, #30H ;寄存器0區,將主菜單屏顯示的信息拷貝到顯示緩沖區30H~4FH中
MOV R7, #20H ;共2行,每行16個字符,2行32=20H
MOV R6, #00H ;不加偏移
LCALL L0694H ;調L0694H子程序:拷貝No1_SCREEN中偏移(R6)開始的(R7)個字節到@R0中
SETB 13H ;13H置1,設置主菜單有效
MOV PSW, #08H ;程序狀態字的RS1、RS0=01B,即用1區:R0~R7=08H~0FH
MOV 55H, #07H ;當前波形類型碼初始化為7,缺省是心電波形第七行,‘ NORMAL ECG 80’
MOV 56H, #00H ;波序計數器清0,
MOV R1, 55H ;波形類型寄存器存放當前波形類型碼,即09H單元也暫存7
MOV 2CH, R1 ;記憶原始波形類型,即2CH單元也暫存7,即原始波形類型
MOV R0, #30H ;沒意義
MOV R7, #0FH ;沒意義
MOV R6, #01H ;沒意義
LCALL L0664H ;調L0664H子程序:查0B1D表中1個字符:0B1DH+(55H)*16+(56H),目前得06H
;該表共計14+19+3行,大部分是FFH,但首個元素一定不是FFH
MOV R0, #50H ;準備安裝波形數據結構參數
MOV R7, #05H ;5個字節
MOV R6, #00H ;偏移0
LCALL L067BH ;調L067BH子程序:上次查表結果(A的值)放大5倍后再偏移(R6)開始查表09D8H送(R0)開始的RAM,送(R7)個
;80BPM次正常心電數據為50H=120個10毫秒;起始地址52H_51H=4600H;末尾地址54H_53H=4696H;
MOV 57H, 51H ;
MOV 58H, 52H ;波形數據起始地址送當前波形數據地址指針58H_57H
MOV R2, #09H ;增益寄存器初始化增益是X1.0,
MOV R0, #5BH ;增益系數地址
MOV R7, #01H ;取1個字節
MOV R6, #03H ;偏移3位
LCALL L0642H ;調L0642H子程序:拷貝0988H中偏移(R2)*4+(R6)開始的(R7)個字節到@R0中
;增益系數5BH=#128,即X1.0
MOV R3, #00H ;定標信號加在那里?
MOV 27H, R3 ;定標信號或正弦信號加在那里?
MOV R0, #28H ;
MOV R7, #04H ;4個字節
MOV R6, #04H ;偏移4位
LCALL L0652H ;調L0652H子程序:拷貝08E8H中偏移(R3)*12+(R6)開始的(R7)個字節到@R0中
;28H/29H/2AH/2BH=80H/8DH/80H/21H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -