?? gscm6.asm.asm
字號:
;==============================================================================
;本程序為CHS300—GSCM通用采控器(第6版)程序
;for: G:\gscm\program\gscm21.ddb
;擬用多任務方式編程
;fairy,2002.4.23
;==============================================================================
;==============================================================================
;偽定義開始
DS12887 equ 8000h
AIC equ 9000h
ICL7109L equ 0a002h
ICL7109H equ 0a001h
DI0 equ 0b000h
DO574 equ 0c000h
DO245 equ 0b003h
SP_NUM equ 28h; 堆棧指針初始值. 堆棧空間28h—3fh
TH0_NUM equ 0dch; 定時器0初值,10ms
TL0_NUM equ 00h
T1_NUM equ 0fdh; 定時器1初值,波特率19.2kbit/s
RCAP2H_NUM equ 0edh; 定時器2自重裝初值
RCAP2L_NUM equ 0ffh;
sfcf equ 0f7h; MailBox設置寄存器
sfdt equ 0f8h; MailBox數據寄存器
sfal equ 0f9h; MailBox低位地址寄存器
sfah equ 0fah; MailBox高位地址寄存器
sfcm equ 0fbh; MailBox命令寄存器
Do574Reg equ 24h; <28h,影射do574.
TaskBitReg equ 25h; <28h
Reg0 equ 40h; <80h,自定義
FogResetCounter equ 41h; <80h,煙感復位延時計數器
FOG_RESET_COUNTER_NUM equ 100d; 煙感復位延時計數初值
; 延時FOG_RESET_COUNTER_NUM×10ms
CpuFlashCounter equ 42h; <80h,cpu閃爍計數器
CPU_FLASH_COUNTER_NUM equ 50d; cpu閃爍計數初值
UartFlashCounter equ 43h; <80h,串口閃爍計數器
UART_FLASH_COUNTER_NUM equ 40h; 每收或發20h個字節閃爍一次
UartOffCounter equ 44h; 串口燈關計數
UART_OFF_COUNTER_NUM equ 60d; 串口燈關計數初值
; 持續UART_OFF_COUNTER_NUM×10ms未收發,關
UartNoReg equ 45h; <80h,站號寄存器
Aic574Reg equ 46h; <80h,影射aic574
AiTaskWord equ 47h; <80h,模擬量部分任務字.0值,無任務
; 非0值,待變換結果數據指針
DoTaskWord equ 48h; <80h,數字量部分任務字.
; 0值,無任務;非0值,有任務
ReceDataBuffer equ 70h; 接收數據緩沖區
SendDataBuffer31 equ ReceDataBuffer+09h
; 發送數據緩沖區31,上報板位信息(自定義)
SendDataBuffer32 equ SendDataBuffer31+0ah
; 發送數據緩沖區32,上報所有數據(自定義)
SendDataBuffer33_03 equ SendDataBuffer32+2ch
; 發送數據緩沖區33h/03,dou輸出(自定義/南京)
SendDataBuffer30 equ SendDataBuffer33_03+05h
; 發送數據緩沖區30,cpu復位
SendDataBuffer04 equ SendDataBuffer30+02h
; 發送數據緩沖區04,煙感復位
SendDataBuffer40 equ SendDataBuffer04+03h
; 發送數據緩沖區40,isp編程
SendDataBuffer01 equ SendDataBuffer40+02h
; 發送數據緩沖區01,上報板位信息(南京)
SendDataBuffer02 equ SendDataBuffer01+0ah
; 發送數據緩沖區02,上報所有數據(南京)
SendDataBufferError equ SendDataBuffer02+2eh
; 非法命令回送數據緩沖區
SendDataBufferHitch equ SendDataBufferError+02h
; 正在維修發送數據緩沖區
UartGoFlag equ 00h; 串口運行標記
OldUartGoFlag equ 01h; 串口在運行標記
Timer2GoFlag equ 02h; 定時器2運行標記,定時器2中斷中置位
StarveDogFlag equ 03h; 餓狗標記,串口中斷中執行CPU復位命令時置位
GoGoodFlag equ 04h; 正常運行標記
;偽定義結束
;==============================================================================
;==============================================================================
;中斷程序定位開始
org 0000h
ljmp main
org 0003h
reti
org 000bh
ljmp timer0_int
org 0013h
reti
org 001bh
reti
org 0023h
ljmp uart_int
org 002bh
ljmp timer2_int
;中斷程序定位結束
;==============================================================================
;==============================================================================
;主程序開始
;初始化中斷,定時器,外圍設備;讀取串口站址;初始化數據區,堆棧指針;將模擬量由自定義
;格式轉換成南京格式;將數字量輸出反饋由自定義格式轉換成南京格式
;本程序使用工作寄存組0
;初始化使用定時器0
org 0080h
main: mov psw,#00h
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
mov ip,#00h
mov ie,#00h
mov tmod,#00h
mov tcon,#00h
mov th0,#00h
mov tl0,#00h
mov th1,#00h
mov tl1,#00h
mov th2,#00h
mov tl2,#00h
mov rcap2h,#00h
mov rcap2l,#00h
mov t2con,#00h
mov scon,#00h
mov pcon,#00h
mov sp,#SP_NUM
;初始化定時器
mov th0,#TH0_NUM; 定時器0置初值,10ms
mov tl0,#TL0_NUM
mov tmod,#21h; 定時器0工作模式1,定時器1工作模式2
setb tr0; 啟動定時器0
mov ie,#10000010b; 中斷總開,定時器0開
;
clr p1.3; 開cpu運行指示燈
setb GoGoodFlag; 初始正常運行標記
clr StarveDogFlag; 復位餓狗標記
clr p3.3; 初始喂狗線低電平
mov AiTaskWord,#00h; 復位模擬量輸入任務字
mov DoTaskWord,#00h; 復位數字量輸出任務字
;關所有模擬量通道
setb p1.7
;7109保持
clr p3.5
;初始所有數字量通道
setb p3.4; 讀DS12887,禁止數據總線
mov dptr,#DS12887+10h
movx a,@dptr; 讀掉電前數字量輸出值
mov Do574Reg,a; 初始數字量輸出影射
clr p3.4; 數據總線使能
mov dptr,#DO574
movx @dptr,a; 初始數字量輸出
mov 0fh,#00h; 工作寄存組1~r7初始,串口收發控制字
;初始上報板位信息(自定義)命令應答包
mov r1,#SendDataBuffer31
mov @r1,#09h; 初始"長度"
inc r1
mov @r1,#01h; 初始"命令"
inc r1
mov @r1,#04h
inc r1
mov @r1,#04h
inc r1
mov @r1,#04h
inc r1
mov @r1,#06h
inc r1
mov @r1,#02h
inc r1
mov @r1,#02h
inc r1
mov @r1,#0ffh
inc r1
mov @r1,#0ffh
;初始上報所有數據(自定義)命令應答包
mov r1,#SendDataBuffer32
mov @r1,#2bh
inc r1
mov @r1,#02h
inc r1
mov @r1,#04h
mov r1,#SendDataBuffer32+04h
mov @r1,#14h
mov r1,#SendDataBuffer32+06h
mov @r1,#24h
mov r1,#SendDataBuffer32+08h
mov @r1,#36h
mov r1,#SendDataBuffer32+0ah
mov @r1,#42h
mov r1,#SendDataBuffer32+1bh
mov @r1,#52h
;初始dou輸出(自定義/南京)命令應答包
mov r1,#SendDataBuffer33_03
mov @r1,#04h
;初始cpu復位命令應答包
mov r1,#SendDataBuffer30
mov @r1,#01h
inc r1
mov @r1,#30h
;初始煙感復位命令應答包
mov r1,#SendDataBuffer04
mov @r1,#02h
inc r1
mov @r1,#04h
inc r1
mov @r1,#00h
;初始isp編程命令應答包
mov r1,#SendDataBuffer40
mov @r1,#01h; "長度"
inc r1
mov @r1,#40h; "命令"
;初始上報板位信息(南京)命令應答包
mov r1,#SendDataBuffer01
mov @r1,#09h
inc r1
mov @r1,#01h
inc r1
mov @r1,#04h
inc r1
mov @r1,#04h
inc r1
mov @r1,#04h
inc r1
mov @r1,#06h
inc r1
mov @r1,#06h
inc r1
mov @r1,#02h
inc r1
mov @r1,#02h
inc r1
mov @r1,#0ffh
;初始上報所有數據(南京)命令應答包
mov r1,#SendDataBuffer02
mov @r1,#2dh
inc r1
mov @r1,#02h
inc r1
mov @r1,#04h
mov r1,#SendDataBuffer02+04h
mov @r1,#14h
mov r1,#SendDataBuffer02+06h
mov @r1,#24h
mov r1,#SendDataBuffer02+08h
mov @r1,#36h
mov r1,#SendDataBuffer02+0ah
mov @r1,#46h
mov r1,#SendDataBuffer02+0ch
mov @r1,#52h
mov r1,#SendDataBuffer02+1dh
mov @r1,#62h
mov r1,#SendDataBuffer02+25h
DataBuffer02_move00: inc r1
mov @r1,#00h
cjne r1,#SendDataBuffer02+2dh,DataBuffer02_move00
;初始命令錯誤應答包
mov r1,#SendDataBufferError
mov @r1,#01h
;初始正在維修應答包
mov r1,#SendDataBufferHitch
mov @r1,#02h
inc r1
mov @r1,#70h
;讀取串口通信地址
mov dptr,#DS12887
movc a,@a+dptr; a不必清0
cpl a
mov UartNoReg,a
;485總線接收允許
clr p1.5
;初始化串口
clr UartGoFlag
clr OldUartGoFlag
mov tl1,#T1_NUM; 波特率19200bit/s
mov th1,#T1_NUM
mov tmod,#21h
orl pcon,#80h; 波特率增倍
setb tr1
mov scon,#01000000b
setb ren; 允許接收
setb es
;初始定時器2,啟動ICL7109轉換
mov Aic574Reg,#00h; 初始通道及頁面控制寄存器
mov th2,#00h; 最長定時周期
mov tl2,#00h
mov rcap2h,#RCAP2H_NUM; 定時器2自重裝值1ms
mov rcap2l,#RCAP2L_NUM
mov dptr,#AIC
mov a,#00h
movx @dptr,a; 初始預選通0通道
clr p1.7; 開模擬量通道
setb p3.5; 啟動0通道轉換
mov t2con,#0ch; 外部允許,啟動計時功能,自重裝
;開放中斷
main_loop: setb GoGoodFlag; 正常運行標記
anl psw,#11100111b; 使用寄存器工作組0.此條必須
mov ip,#10h; 串口中斷高優先級
mov ie,#10110010b; 中斷總開,定時器0/2,串口開
;主程序后臺任務
mov a,AiTaskWord
jnz ai_task; 非0,轉,模擬量部分作業
ljmp do_task_verify; 跳,判斷模擬量部分任務有否
;模擬量輸入格式轉換部分作業
ai_task: mov r4,#00h; 清BCD碼低字節寄存
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -