⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gscm6.asm.asm

📁 《单片机应用系统设计与产品开发》配套源码
💻 ASM
📖 第 1 页 / 共 3 页
字号:

;==============================================================================
;本程序为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 + -