我也来贴一个10年前做的东西,定义没一个变量,分配RAM可是个技术活,用着用着就不够了
***************************************
; *
;------集中协调式信号机主机面板程序-----*
; (可联网) *
; 开机发送参数 *
; 2005.10.05 *
; *
;****************************************
;TY-01是基于串口通讯的信号机,通讯包括:
;1。主控板与灯驱板的双向通讯;
;2。主控板与倒计时显示屏的单向通讯;
;3。主控板与上位机的双向通讯。
;波特率:2400、8位、无校验、一个停止位。
;*******I/O定义********
AOUT BIT P3.5 ;蜂鸣器
WTD BIT P3.2 ;看门狗
CS128 BIT P1.0 ;628128片选
CS8255 BIT P1.1 ;8255片选
CS887 BIT P1.2 ;12887片选
HSECO BIT 00H ;半秒标志
BADCLK BIT 01H ;时钟坏标志
BAK BIT 02H ;备份标志
AUTOK BIT 03H ;按键长按标志
SETUP BIT 04H ;设置参数标志
EN_CHKTIME BIT 05H ;允许检测时间段
MANUAL BIT 06H ;手动标志
DOT_DJS BIT 07H ;显示倒计时信息时自动加上小数点
SPE_DAY BIT 21H.0 ;特殊工作日标志
WEEK_DAY BIT 21H.1 ;双休日标志
CABLELESS BIT 21H.2 ;无电缆联动标志
VEHICLE BIT 21H.3 ;感应标志
ADAPTIVE BIT 21H.4 ;自适应标志
FIXEDTIME BIT 21H.5 ;多时段标志
YELS BIT 21H.6 ;黄闪标志
SHUT BIT 22H.7 ;关灯标志
XGFS BIT 22H.0 ;参数修改方式
EN_REV BIT 22H.1 ;允许接收标志
MANR00 BIT 22H.2 ;上一次人行红灯标志0
MANR20 BIT 22H.3 ;下一次人行红灯标志0
LED_R BIT 22H.4 ;红色指示灯
LED_G BIT 22H.5 ;绿色指示灯
GRNR1 BIT 23H.0 ;右转绿灯标志
MANR10 BIT 23H.1 ;当前人行红灯标志0
MANG10 BIT 23H.2 ;当前人行绿灯标志0
MANR11 BIT 23H.3 ;当前人行红灯标志1
MANG11 BIT 23H.4 ;当前人行绿灯标志1
MANG00 BIT 23H.5 ;上一次人行绿灯标志0
MANG20 BIT 23H.6 ;下一次人行绿灯标志0
REDL1 BIT 25H.0 ;左转红灯标志
YELL1 BIT 25H.1 ;左转黄灯标志
GRNL1 BIT 25H.2 ;左转绿灯标志
REDD1 BIT 25H.3 ;直行红灯标志
YELD1 BIT 25H.4 ;直行黄灯标志
GRND1 BIT 25H.5 ;直行绿灯标志
REDR1 BIT 25H.6 ;右转红灯标志
YELR1 BIT 25H.7 ;右转黄灯标志
ELR BIT 26H.0 ;东左转红灯
ELY BIT 26H.1 ;东左转黄灯
EL BIT 26H.2 ;东左转绿灯
EDR BIT 26H.3 ;东直行红灯
EDY BIT 26H.4 ;东直行黄灯
ED BIT 26H.5 ;东直行绿灯
ERR BIT 26H.6 ;东右转红灯
ERY BIT 26H.7 ;东右转黄灯
ER BIT 27H.0 ;东右转绿灯
EMR0 BIT 27H.1 ;东人行红灯0
EMG0 BIT 27H.2 ;东人行绿灯0
EMR1 BIT 27H.3 ;东人行红灯1
EMG1 BIT 27H.4 ;东人行绿灯1
SLR BIT 28H.0 ;南左转红灯
SLY BIT 28H.1 ;南左转黄灯
SL BIT 28H.2 ;南左转绿灯
SDR BIT 28H.3 ;南直行红灯
SDY BIT 28H.4 ;南直行黄灯
SD BIT 28H.5 ;南直行绿灯
SRR BIT 28H.6 ;南右转红灯
SRY BIT 28H.7 ;南右转黄灯
SR BIT 29H.0 ;南右转绿灯
SMR0 BIT 29H.1 ;南人行红灯0
SMG0 BIT 29H.2 ;南人行绿灯0
SMR1 BIT 29H.3 ;南人行红灯1
SMG1 BIT 29H.4 ;南人行绿灯1
WLR BIT 2AH.0 ;西左转红灯
WLY BIT 2AH.1 ;西左转黄灯
WL BIT 2AH.2 ;西左转绿灯
WDR BIT 2AH.3 ;西直行红灯
WDY BIT 2AH.4 ;西直行黄灯
WD BIT 2AH.5 ;西直行绿灯
WRRR BIT 2AH.6 ;西右转红灯
WRY BIT 2AH.7 ;西右转黄灯
WRR BIT 2BH.0 ;西右转绿灯
WMR0 BIT 2BH.1 ;西人行红灯0
WMG0 BIT 2BH.2 ;西人行绿灯0
WMR1 BIT 2BH.3 ;西人行红灯1
WMG1 BIT 2BH.4 ;西人行绿灯1
NLR BIT 2CH.0 ;北左转红灯
NLY BIT 2CH.1 ;北左转黄灯
NL BIT 2CH.2 ;北左转绿灯
NDR BIT 2CH.3 ;北直行红灯
NDY BIT 2CH.4 ;北直行黄灯
ND BIT 2CH.5 ;北直行绿灯
NRR BIT 2CH.6 ;北右转红灯
NRY BIT 2CH.7 ;北右转黄灯
NR BIT 2DH.0 ;北右转绿灯
NMR0 BIT 2DH.1 ;北人行红灯0
NMG0 BIT 2DH.2 ;北人行绿灯0
NMR1 BIT 2DH.3 ;北人行红灯1
NMG1 BIT 2DH.4 ;北人行绿灯1
GRNL0 BIT 2EH.1 ;上一次左转绿灯标志
GRND0 BIT 2EH.2 ;上一次直行绿灯标志
GRNR0 BIT 2EH.3 ;上一次右转绿灯标志
GRNL2 BIT 2EH.4 ;下一次左转绿灯标志
GRND2 BIT 2EH.5 ;下一次直行绿灯标志
GRNR2 BIT 2EH.6 ;下一次右转绿灯标志
ALL_RED BIT 2EH.7 ;清场红灯标志
;******显示缓冲区*******
DIS8 EQU 26H ;指示灯组0
DIS9 EQU 27H ;指示灯组1
DISA EQU 28H ;指示灯组2
DISB EQU 29H ;指示灯组3
DISC EQU 2AH ;指示灯组4
DISD EQU 2BH ;指示灯组5
DISE EQU 2CH ;指示灯组6
DISF EQU 2DH ;指示灯组7
DIS0 EQU 2FH ;数码管0
DIS1 EQU 30H ;数码管1
DIS2 EQU 31H ;数码管2
DIS3 EQU 32H ;数码管3
DIS4 EQU 33H ;数码管4
DIS5 EQU 34H ;数码管5
DIS6 EQU 35H ;数码管6
DIS7 EQU 36H ;数码管7
DISS0 EQU 37H ;数码管闪烁位控制
DIS0BAK EQU 38H ;数码管0备份
DIS1BAK EQU 39H ;数码管1备份
DIS2BAK EQU 3AH ;数码管2备份
DIS3BAK EQU 3BH ;数码管3备份
DIS4BAK EQU 3CH ;数码管4备份
DIS5BAK EQU 3DH ;数码管5备份
DIS6BAK EQU 3EH ;数码管6备份
DIS7BAK EQU 3FH ;数码管7备份
T2MOD EQU 0C9H ;P89C51RD+特殊寄存器
;******时间参数******
SECO EQU 40H ;秒
MINU EQU 41H ;分
HOUR EQU 42H ;时
DAY EQU 43H ;日
MONTH EQU 44H ;月
YEAR EQU 45H ;年
WEEK EQU 46H ;星期
;******常用参数******
D500 EQU 47H ;延时0.50S计数
KBAK EQU 48H ;键值备份
KEYC EQU 49H ;消抖计数
MODEC EQU 4AH ;MODE按键计数
NEXTC EQU 4BH ;NEXT/PREV键计数
SJZZ EQU 4CH ;数据指针
ADDRH EQU 4DH ;目标地址高位
ADDRL EQU 4EH ;目标地址低位
RANC_PAGE EQU 4FH ;PAGE键循环计数
PAGEC EQU 50H ;PAGE键计数
RANC_MODE EQU 51H ;MODE按键循环次数
RANC_NEXT EQU 52H ;PREV、NEXT按键循环次数
RANC_H EQU 53H ;参数上限
RANC_L EQU 54H ;参数下限
TOT_TIME EQU 55H ;当前步序持续时间
DJS_CLOUR EQU 56H ;当前倒计时颜色
TOT_SD EQU 57H ;当前工作日时间段个数
NUMB EQU 58H ;数据缓冲区长度
REPEAT EQU 59H ;重复次数
DISPITEM EQU 5AH ;显示内容定义
DISP_CHANGE EQU 5BH ;显示内容延时改变计数
ADDRHBAK EQU 5CH ;源地址高位备份
ADDRLBAK EQU 5DH ;源地址低位备份
TEST0 EQU 5EH
TEST1 EQU 5FH
FLASH_GRN EQU 60H ;绿闪时间
COUNT_SEND EQU 61H ;发送计数
COUNT_REV EQU 62H ;接收计数
ZZBAK EQU 63H ;指针备份
ENTERC EQU 64H ;ENTER键计数
RANC_ENTER EQU 65H ;ENTER键循环计数
STATE_LAMP EQU 66H ;状态指示灯
PLAN_DEF EQU 67H ;方案号
Y15S EQU 68H ;开机黄闪持续时间
R05S EQU 69H ;开机清场红灯时间
MODEPLAN EQU 6AH ;工作方式、相位方案
LAMP_E EQU 6BH ;东面倒计时有效灯色
LAMP_S EQU 6CH ;南面倒计时有效灯色
LAMP_W EQU 6DH ;西面倒计时有效灯色
LAMP_N EQU 6EH ;北面倒计时有效灯色
OADDRH EQU 70H ;目标地址高位
OADDRL EQU 71H ;目标地址低位
NUMBH EQU 70H ;发送字节数高位(重复定义)
NUMBL EQU 71H ;发送字节数低位(重复定义)
SJZC EQU 72H ;数据指针
COMM EQU 72H ;命令(重复定义)
DS00 EQU 73H ;临时灯色
DS01 EQU 74H ;临时灯色
DS10 EQU 75H ;临时灯色
DS11 EQU 76H ;临时灯色
DS20 EQU 77H ;临时灯色
DS21 EQU 78H ;临时灯色
XWH EQU 79H ;相位号
STEP EQU 7AH ;步序
REMAIN EQU 7BH ;剩余时间
TOT_STEP EQU 7CH ;步序总数
TOT_XW EQU 7DH ;相位总数
VADDRH EQU 7EH ;接收缓冲区地址高位
VADDRL EQU 7FH ;接收缓冲区地址低位
;*******字形模块*******
AA EQU 0AH ;A
BB EQU 0BH ;B
CC EQU 0CH ;C
DD EQU 0DH ;D
EE EQU 0EH ;E
FF EQU 0FH ;F
GG EQU 12H ;G
HH EQU 15H ;H
II EQU 1EH ;I
JJ EQU 1FH ;J
KK EQU 20H ;K
LL EQU 1BH ;L
MM EQU 1CH ;M
NN EQU 16H ;N
OO EQU 21H ;O
PP EQU 22H ;P
QQ EQU 23H ;Q
RRR EQU 14H ;R
SS EQU 05H ;S
TT EQU 1AH ;T
UU EQU 1DH ;U
VV EQU 1DH ;V
WW EQU 24H ;W
XX EQU 25H ;X
YY EQU 13H ;Y
ZZ EQU 26H ;Z
XHX EQU 27H ;_,下划线
AN EQU 10H ;暗
GANG EQU 11H ;-
SHX EQU 28H ;~,上划线
;******程序开始******
ORG 0000H
SJMP MAIN
ORG 000BH
LJMP COUNT0
ORG 0023H
LJMP TXRX
ORG 002BH
LJMP TIM2
;******主程序******
ORG 0030H
MAIN: CLR EA
CLR A
MOV R0,A
RAMX: MOV @R0,A ;清AT89C52-RAM区
DJNZ R0,RAMX
MOV SP,#0C0H ;堆栈
LCALL WAITE ;延时等待各部件就绪
LCALL WAITE
LCALL WAITE
LCALL WAITE
LCALL WAITE
CLR AOUT ;关蜂鸣器
SETB YELS ;开机自动黄闪
SETB ALL_RED ;黄闪后自动四面红灯
MOV ADDRH,#00H
MOV ADDRL,#01H
LCALL READBYTE
MOV R05S,A
INC ADDRL
LCALL READBYTE
MOV Y15S,A
CLR EN_CHKTIME ;开机默认工作于手动方式,不允许检测时间段
LCALL INIT0 ;初始化
MOV SCON,#11010000B ;方式3
MOV TMOD,#00100000B ;8位自动重装
MOV TL1,#0F3H ;2400波特率
MOV TH1,#0F3H
SETB TR1 ;启动定时器1
SETB ES ;允许串口中断
CLR EA
LCALL SEND_PARA ;发送本机所有参数
SETB EA
MOV VADDRH,#48H
MOV VADDRL,#00H
LCALL DEFAULT ;根据需要,自动装载默认参数
MOV D500,#25 ;半秒计数
MOV DISS0,#00H ;开机默认无闪烁位
MOV DISPITEM,#34H ;显示时、分、秒
MOV STATE_LAMP,#03H ;默认工作于多时段
MOV ENTERC,#03 ;默认工作于多时段方式
MOV RANC_ENTER,#06H
MOV DISP_CHANGE,#01H ;默认无提示符
SETB MANUAL
LCALL TIME ;读取当前时间
LCALL TIMER
MOV ADDRH,#32H
MOV ADDRL,#0A6H
LCALL READBYTE
CJNE A,#55H,PRODUCE
LJMP NOFIRST
PRODUCE:LCALL FACTORY
NOFIRST:
LCALL X4200 ;开机消除上一次灯色信息
SETB P1.4 ;选通8255-C口
CLR P1.5
CLR CS8255
MOVX A,@R0 ;读取按键状态
SETB CS8255
JB ACC.0,LOOP0 ;开机时如果已按下MODE键,进入设置参数状态
MOV MODEC,#255
MOV RANC_MODE,#10
SETB SETUP
LJMP LOOP1
LOOP0: JB ACC.6,LOOP1 ;开机时如果已按下ENTER键,
;调用默认参数并进入设置参数状态
LCALL LD_DEFT ;调用默认参数
LCALL PLAN_POST0 ;自动方案处理
MOV MODEC,#255
MOV RANC_MODE,#10
SETB SETUP
LOOP1: LCALL DISP ;显示
CPL WTD
SJMP LOOP1
COUNT0:RETI
|